2 * FreeBSD install - a package for the installation and maintenance
3 * of non-core utilities.
8 * This is the create module.
12 #include <sys/cdefs.h>
13 __FBSDID("$FreeBSD$");
21 match_t MatchType = MATCH_GLOB;
29 char *PostInstall = NULL;
30 char *DeInstall = NULL;
31 char *PostDeInstall = NULL;
32 char *Contents = NULL;
34 char *ExcludeFrom = NULL;
37 char *Conflicts = NULL;
39 char *InstalledPkg = NULL;
40 char PlayPen[FILENAME_MAX];
41 int Dereference = FALSE;
42 int PlistOnly = FALSE;
43 int Recursive = FALSE;
44 int Regenerate = TRUE;
46 enum zipper Zipper = BZIP2;
49 static void usage(void);
51 static char opts[] = "EGYNnORhjJvxyzf:p:P:C:c:d:i:I:k:K:r:t:X:D:m:s:S:o:b:";
52 static struct option longopts[] = {
53 { "backup", required_argument, NULL, 'b' },
54 { "extended", no_argument, NULL, 'E' },
55 { "help", no_argument, &Help, TRUE },
56 { "no", no_argument, NULL, 'N' },
57 { "no-glob", no_argument, NULL, 'G' },
58 { "origin", required_argument, NULL, 'o' },
59 { "plist-only", no_argument, NULL, 'O' },
60 { "prefix", required_argument, NULL, 'p' },
61 { "recursive", no_argument, NULL, 'R' },
62 { "regex", no_argument, NULL, 'x' },
63 { "template", required_argument, NULL, 't' },
64 { "verbose", no_argument, NULL, 'v' },
65 { "yes", no_argument, NULL, 'Y' },
70 main(int argc, char **argv)
73 char **pkgs, **start, *tmp;
77 while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1)
84 MatchType = MATCH_REGEX;
88 MatchType = MATCH_EREGEX;
92 MatchType = MATCH_EXACT;
140 PostInstall = optarg;
148 PostDeInstall = optarg;
156 strlcpy(PlayPen, optarg, sizeof(PlayPen));
160 ExcludeFrom = optarg;
197 InstalledPkg = optarg;
198 while ((tmp = strrchr(optarg, (int)'/')) != NULL) {
201 * If character after the '/' is alphanumeric, then we've
202 * found the package name. Otherwise we've come across
203 * a trailing '/' and need to continue our quest.
233 /* Get all the remaining package names, if any */
237 /* If no packages, yelp */
238 if ((pkgs == start) && (InstalledPkg == NULL))
239 warnx("missing package name"), usage();
241 if ((start[0] != NULL) && (start[1] != NULL)) {
242 warnx("only one package name allowed ('%s' extraneous)", start[1]);
245 if (start[0] == NULL)
246 start[0] = InstalledPkg;
247 if (!pkg_perform(start)) {
249 warnx("package creation failed");
259 fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
260 "usage: pkg_create [-YNOhjnvyz] [-C conflicts] [-P pkgs] [-p prefix]",
261 " [-i iscript] [-I piscript] [-k dscript] [-K pdscript]",
262 " [-r rscript] [-s srcdir] [-S basedir]",
263 " [-t template] [-X excludefile]",
264 " [-D displayfile] [-m mtreefile] [-o originpath]",
265 " -c comment -d description -f packlist pkg-filename",
266 " pkg_create [-EGYNRhnvxy] -b pkg-name [pkg-filename]");