]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/pkg_install/create/main.c
This commit was generated by cvs2svn to compensate for changes in r157571,
[FreeBSD/FreeBSD.git] / usr.sbin / pkg_install / create / main.c
1 /*
2  * FreeBSD install - a package for the installation and maintainance
3  * of non-core utilities.
4  *
5  * Jordan K. Hubbard
6  * 18 July 1993
7  *
8  * This is the create module.
9  *
10  */
11
12 #include <sys/cdefs.h>
13 __FBSDID("$FreeBSD$");
14
15 #include <err.h>
16 #include "lib.h"
17 #include "create.h"
18
19 static char Options[] = "EGYNORhjvxyzf:p:P:C:c:d:i:I:k:K:r:t:X:D:m:s:S:o:b:";
20
21 match_t MatchType       = MATCH_GLOB;
22 char    *Prefix         = NULL;
23 char    *Comment        = NULL;
24 char    *Desc           = NULL;
25 char    *SrcDir         = NULL;
26 char    *BaseDir        = NULL;
27 char    *Display        = NULL;
28 char    *Install        = NULL;
29 char    *PostInstall    = NULL;
30 char    *DeInstall      = NULL;
31 char    *PostDeInstall  = NULL;
32 char    *Contents       = NULL;
33 char    *Require        = NULL;
34 char    *ExcludeFrom    = NULL;
35 char    *Mtree          = NULL;
36 char    *Pkgdeps        = NULL;
37 char    *Conflicts      = NULL;
38 char    *Origin         = NULL;
39 char    *InstalledPkg   = NULL;
40 char    PlayPen[FILENAME_MAX];
41 int     Dereference     = FALSE;
42 int     PlistOnly       = FALSE;
43 int     Recursive       = FALSE;
44 enum zipper     Zipper  = GZIP;
45
46 static void usage __P((void));
47
48 int
49 main(int argc, char **argv)
50 {
51     int ch;
52     char **pkgs, **start, *tmp;
53
54     pkgs = start = argv;
55     while ((ch = getopt(argc, argv, Options)) != -1)
56         switch(ch) {
57         case 'v':
58             Verbose = TRUE;
59             break;
60
61         case 'x':
62             MatchType = MATCH_REGEX;
63             break;
64
65         case 'E':
66             MatchType = MATCH_EREGEX;
67             break;
68
69         case 'G':
70             MatchType = MATCH_EXACT;
71             break;
72
73         case 'N':
74             AutoAnswer = NO;
75             break;
76
77         case 'Y':
78             AutoAnswer = YES;
79             break;
80
81         case 'O':
82             PlistOnly = TRUE;
83             break;
84
85         case 'p':
86             Prefix = optarg;
87             break;
88
89         case 's':
90             SrcDir = optarg;
91             break;
92
93         case 'S':
94             BaseDir = optarg;
95             break;
96
97         case 'f':
98             Contents = optarg;
99             break;
100
101         case 'C':
102             Conflicts = optarg;
103             break;
104
105         case 'c':
106             Comment = optarg;
107             break;
108
109         case 'd':
110             Desc = optarg;
111             break;
112
113         case 'i':
114             Install = optarg;
115             break;
116
117         case 'I':
118             PostInstall = optarg;
119             break;
120
121         case 'k':
122             DeInstall = optarg;
123             break;
124
125         case 'K':
126             PostDeInstall = optarg;
127             break;
128
129         case 'r':
130             Require = optarg;
131             break;
132
133         case 't':
134             strlcpy(PlayPen, optarg, sizeof(PlayPen));
135             break;
136
137         case 'X':
138             ExcludeFrom = optarg;
139             break;
140
141         case 'h':
142             Dereference = TRUE;
143             break;
144
145         case 'D':
146             Display = optarg;
147             break;
148
149         case 'm':
150             Mtree = optarg;
151             break;
152
153         case 'P':
154             Pkgdeps = optarg;
155             break;
156
157         case 'o':
158             Origin = optarg;
159             break;
160
161         case 'y':
162         case 'j':
163             Zipper = BZIP2;
164             break;
165
166         case 'z':
167             Zipper = GZIP;
168             break;
169
170         case 'b':
171             InstalledPkg = optarg;
172             while ((tmp = strrchr(optarg, (int)'/')) != NULL) {
173                 *tmp++ = '\0';
174                 /*
175                  * If character after the '/' is alphanumeric, then we've
176                  * found the package name.  Otherwise we've come across
177                  * a trailing '/' and need to continue our quest.
178                  */
179                 if (isalpha(*tmp)) {
180                     InstalledPkg = tmp;
181                     break;
182                 }
183             }
184             break;
185
186         case 'R':
187             Recursive = TRUE;
188             break;
189
190         case '?':
191         default:
192             usage();
193             break;
194         }
195
196     argc -= optind;
197     argv += optind;
198
199     /* Get all the remaining package names, if any */
200     while (*argv)
201         *pkgs++ = *argv++;
202
203     /* If no packages, yelp */
204     if ((pkgs == start) && (InstalledPkg == NULL))
205         warnx("missing package name"), usage();
206     *pkgs = NULL;
207     if ((start[0] != NULL) && (start[1] != NULL)) {
208         warnx("only one package name allowed ('%s' extraneous)", start[1]);
209         usage();
210     }
211     if (start[0] == NULL)
212         start[0] = InstalledPkg;
213     if (!pkg_perform(start)) {
214         if (Verbose)
215             warnx("package creation failed");
216         return 1;
217     }
218     else
219         return 0;
220 }
221
222 static void
223 usage()
224 {
225     fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
226 "usage: pkg_create [-YNOhvyz] [-P pkgs] [-C conflicts] [-p prefix] ",
227 "                  [-i iscript] [-I piscript] [-k dscript] [-K pdscript] ",
228 "                  [-r rscript] [-t template] [-X excludefile] ",
229 "                  [-D displayfile] [-m mtreefile] [-o origin] ",
230 "                  [-s srcdir] [-S basedir] ",
231 "                  -c comment -d description -f packlist pkg-filename",
232 "       pkg_create [-EGYNhvxyzR] -b pkg-name [pkg-filename]");
233     exit(1);
234 }