main.c revision 50479
1177867Sjfv#ifndef lint
2169240Sjfvstatic const char rcsid[] =
3286833Ssbruno  "$FreeBSD: head/usr.sbin/pkg_install/create/main.c 50479 1999-08-28 01:35:59Z peter $";
4169240Sjfv#endif
5169240Sjfv
6169240Sjfv/*
7169240Sjfv * FreeBSD install - a package for the installation and maintainance
8169240Sjfv * of non-core utilities.
9169240Sjfv *
10169240Sjfv * Jordan K. Hubbard
11169240Sjfv * 18 July 1993
12169240Sjfv *
13169240Sjfv * This is the create module.
14169240Sjfv *
15169240Sjfv */
16169240Sjfv
17169240Sjfv#include <err.h>
18169240Sjfv#include "lib.h"
19169240Sjfv#include "create.h"
20169240Sjfv
21169240Sjfvstatic char Options[] = "YNOhvf:p:P:c:d:i:I:k:K:r:t:X:D:m:s:";
22169240Sjfv
23169240Sjfvchar	*Prefix		= NULL;
24169240Sjfvchar	*Comment        = NULL;
25169240Sjfvchar	*Desc		= NULL;
26169240Sjfvchar	*SrcDir		= NULL;
27169240Sjfvchar	*Display	= NULL;
28169240Sjfvchar	*Install	= NULL;
29169240Sjfvchar	*PostInstall	= NULL;
30169240Sjfvchar	*DeInstall	= NULL;
31169240Sjfvchar	*PostDeInstall	= NULL;
32177867Sjfvchar	*Contents	= NULL;
33177867Sjfvchar	*Require	= NULL;
34169240Sjfvchar	*ExcludeFrom	= NULL;
35169240Sjfvchar	*Mtree		= NULL;
36169240Sjfvchar	*Pkgdeps	= NULL;
37169240Sjfvchar	PlayPen[FILENAME_MAX];
38169240Sjfvint	Dereference	= 0;
39169240Sjfvint	PlistOnly	= 0;
40169240Sjfv
41169240Sjfvstatic void usage __P((void));
42169240Sjfv
43169240Sjfvint
44228386Sjfvmain(int argc, char **argv)
45228386Sjfv{
46256200Sjfv    int ch;
47256200Sjfv    char **pkgs, **start;
48228386Sjfv
49169240Sjfv    pkgs = start = argv;
50169240Sjfv    while ((ch = getopt(argc, argv, Options)) != -1)
51228386Sjfv	switch(ch) {
52228386Sjfv	case 'v':
53228386Sjfv	    Verbose = TRUE;
54228386Sjfv	    break;
55228386Sjfv
56228386Sjfv	case 'N':
57228386Sjfv	    AutoAnswer = NO;
58228386Sjfv	    break;
59169240Sjfv
60169240Sjfv	case 'Y':
61228386Sjfv	    AutoAnswer = YES;
62228386Sjfv	    break;
63228386Sjfv
64228386Sjfv	case 'O':
65228386Sjfv	    PlistOnly = YES;
66169240Sjfv	    break;
67169240Sjfv
68247064Sjfv	case 'p':
69228386Sjfv	    Prefix = optarg;
70228386Sjfv	    break;
71228386Sjfv
72176667Sjfv	case 's':
73228386Sjfv	    SrcDir = optarg;
74228386Sjfv	    break;
75228386Sjfv
76247064Sjfv	case 'f':
77228386Sjfv	    Contents = optarg;
78181027Sjfv	    break;
79228386Sjfv
80267935Sjfv	case 'c':
81228386Sjfv	    Comment = optarg;
82228386Sjfv	    break;
83228386Sjfv
84228386Sjfv	case 'd':
85228386Sjfv	    Desc = optarg;
86228386Sjfv	    break;
87228386Sjfv
88228386Sjfv	case 'i':
89228386Sjfv	    Install = optarg;
90228386Sjfv	    break;
91228386Sjfv
92228386Sjfv	case 'I':
93228386Sjfv	    PostInstall = optarg;
94228386Sjfv	    break;
95228386Sjfv
96228386Sjfv	case 'k':
97228386Sjfv	    DeInstall = optarg;
98228386Sjfv	    break;
99228386Sjfv
100228386Sjfv	case 'K':
101228386Sjfv	    PostDeInstall = optarg;
102228386Sjfv	    break;
103228386Sjfv
104228386Sjfv	case 'r':
105228386Sjfv	    Require = optarg;
106228386Sjfv	    break;
107228386Sjfv
108228386Sjfv	case 't':
109228386Sjfv	    strcpy(PlayPen, optarg);
110228386Sjfv	    break;
111228386Sjfv
112228386Sjfv	case 'X':
113169240Sjfv	    ExcludeFrom = optarg;
114176667Sjfv	    break;
115228386Sjfv
116228386Sjfv	case 'h':
117228386Sjfv	    Dereference = 1;
118228386Sjfv	    break;
119228386Sjfv
120228386Sjfv	case 'D':
121228386Sjfv	    Display = optarg;
122228386Sjfv	    break;
123228386Sjfv
124228386Sjfv	case 'm':
125228386Sjfv	    Mtree = optarg;
126228386Sjfv	    break;
127228386Sjfv
128228386Sjfv	case 'P':
129228386Sjfv	    Pkgdeps = optarg;
130228386Sjfv	    break;
131228386Sjfv
132228386Sjfv	case '?':
133228386Sjfv	default:
134169240Sjfv	    usage();
135267935Sjfv	    break;
136228386Sjfv	}
137228386Sjfv
138228386Sjfv    argc -= optind;
139228386Sjfv    argv += optind;
140228386Sjfv
141228386Sjfv    /* Get all the remaining package names, if any */
142228386Sjfv    while (*argv)
143228386Sjfv	*pkgs++ = *argv++;
144169240Sjfv
145169240Sjfv    /* If no packages, yelp */
146169240Sjfv    if (pkgs == start)
147228386Sjfv	warnx("missing package name"), usage();
148228386Sjfv    *pkgs = NULL;
149228386Sjfv    if (start[1])
150228386Sjfv	warnx("only one package name allowed ('%s' extraneous)", start[1]),
151228386Sjfv	usage();
152169240Sjfv    if (!pkg_perform(start)) {
153169240Sjfv	if (Verbose)
154169240Sjfv	    warnx("package creation failed");
155228386Sjfv	return 1;
156228386Sjfv    }
157228386Sjfv    else
158228386Sjfv	return 0;
159228386Sjfv}
160169240Sjfv
161283959Ssbrunostatic void
162228386Sjfvusage()
163228386Sjfv{
164228386Sjfv    fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
165228386Sjfv"usage: pkg_create [-YNOhv] [-P pkgs] [-p prefix] [-f contents] [-i iscript]",
166283959Ssbruno"                  [-I piscript] [-k dscript] [-K pdscript] [-r rscript] ",
167228386Sjfv"                  [-t template] [-X excludefile] [-D displayfile] ",
168228386Sjfv"                  [-m mtreefile] -c comment -d description -f packlist ",
169169240Sjfv"                  pkg-name");
170228386Sjfv    exit(1);
171169240Sjfv}
172169240Sjfv