main.c revision 67454
1327Sjkh#ifndef lint
230221Scharnierstatic const char rcsid[] =
350479Speter  "$FreeBSD: head/usr.sbin/pkg_install/create/main.c 67454 2000-10-23 07:01:31Z sobomax $";
4327Sjkh#endif
5327Sjkh
6327Sjkh/*
7327Sjkh * FreeBSD install - a package for the installation and maintainance
8327Sjkh * of non-core utilities.
9327Sjkh *
10327Sjkh * Jordan K. Hubbard
11327Sjkh * 18 July 1993
12327Sjkh *
13327Sjkh * This is the create module.
14327Sjkh *
15327Sjkh */
16327Sjkh
1730221Scharnier#include <err.h>
18327Sjkh#include "lib.h"
19327Sjkh#include "create.h"
20327Sjkh
2167454Ssobomaxstatic char Options[] = "YNOhvf:p:P:c:d:i:I:k:K:r:t:X:D:m:s:o:";
22327Sjkh
23327Sjkhchar	*Prefix		= NULL;
24327Sjkhchar	*Comment        = NULL;
25327Sjkhchar	*Desc		= NULL;
2626473Sjkhchar	*SrcDir		= NULL;
274996Sjkhchar	*Display	= NULL;
28327Sjkhchar	*Install	= NULL;
2941866Sjkhchar	*PostInstall	= NULL;
30327Sjkhchar	*DeInstall	= NULL;
3141866Sjkhchar	*PostDeInstall	= NULL;
32327Sjkhchar	*Contents	= NULL;
33327Sjkhchar	*Require	= NULL;
34445Sjkhchar	*ExcludeFrom	= NULL;
354996Sjkhchar	*Mtree		= NULL;
367713Sjkhchar	*Pkgdeps	= NULL;
3767454Ssobomaxchar	*Origin		= NULL;
3826473Sjkhchar	PlayPen[FILENAME_MAX];
391520Salmint	Dereference	= 0;
407986Sjkhint	PlistOnly	= 0;
41327Sjkh
4230221Scharnierstatic void usage __P((void));
4330221Scharnier
44327Sjkhint
45327Sjkhmain(int argc, char **argv)
46327Sjkh{
47327Sjkh    int ch;
48327Sjkh    char **pkgs, **start;
49327Sjkh
50327Sjkh    pkgs = start = argv;
5124428Simp    while ((ch = getopt(argc, argv, Options)) != -1)
52327Sjkh	switch(ch) {
53327Sjkh	case 'v':
54327Sjkh	    Verbose = TRUE;
55327Sjkh	    break;
56327Sjkh
571337Sjkh	case 'N':
581337Sjkh	    AutoAnswer = NO;
591337Sjkh	    break;
601337Sjkh
611337Sjkh	case 'Y':
621337Sjkh	    AutoAnswer = YES;
631337Sjkh	    break;
641337Sjkh
657986Sjkh	case 'O':
667986Sjkh	    PlistOnly = YES;
677986Sjkh	    break;
687986Sjkh
69327Sjkh	case 'p':
70327Sjkh	    Prefix = optarg;
71327Sjkh	    break;
72327Sjkh
7326473Sjkh	case 's':
7426473Sjkh	    SrcDir = optarg;
7526473Sjkh	    break;
7626473Sjkh
77327Sjkh	case 'f':
78327Sjkh	    Contents = optarg;
79327Sjkh	    break;
80327Sjkh
81327Sjkh	case 'c':
82327Sjkh	    Comment = optarg;
83327Sjkh	    break;
84327Sjkh
85327Sjkh	case 'd':
86327Sjkh	    Desc = optarg;
87327Sjkh	    break;
88327Sjkh
89327Sjkh	case 'i':
90327Sjkh	    Install = optarg;
91327Sjkh	    break;
92327Sjkh
9341866Sjkh	case 'I':
9441866Sjkh	    PostInstall = optarg;
9541866Sjkh	    break;
9641866Sjkh
97327Sjkh	case 'k':
98327Sjkh	    DeInstall = optarg;
99327Sjkh	    break;
100327Sjkh
10141866Sjkh	case 'K':
10241866Sjkh	    PostDeInstall = optarg;
10341866Sjkh	    break;
10441866Sjkh
105327Sjkh	case 'r':
106327Sjkh	    Require = optarg;
107327Sjkh	    break;
108327Sjkh
109383Sjkh	case 't':
11011780Sjkh	    strcpy(PlayPen, optarg);
111383Sjkh	    break;
112383Sjkh
113445Sjkh	case 'X':
114445Sjkh	    ExcludeFrom = optarg;
115445Sjkh	    break;
116445Sjkh
117327Sjkh	case 'h':
1181520Salm	    Dereference = 1;
1191520Salm	    break;
1201520Salm
1214996Sjkh	case 'D':
1224996Sjkh	    Display = optarg;
1234996Sjkh	    break;
1244996Sjkh
1254996Sjkh	case 'm':
1264996Sjkh	    Mtree = optarg;
1274996Sjkh	    break;
1284996Sjkh
1297713Sjkh	case 'P':
1307713Sjkh	    Pkgdeps = optarg;
1317713Sjkh	    break;
1327713Sjkh
13367454Ssobomax	case 'o':
13467454Ssobomax	    Origin = optarg;
13567454Ssobomax	    break;
13667454Ssobomax
137327Sjkh	case '?':
138327Sjkh	default:
13930221Scharnier	    usage();
140327Sjkh	    break;
141327Sjkh	}
142327Sjkh
1438857Srgrimes    argc -= optind;
144327Sjkh    argv += optind;
145327Sjkh
146327Sjkh    /* Get all the remaining package names, if any */
147327Sjkh    while (*argv)
148327Sjkh	*pkgs++ = *argv++;
149327Sjkh
150327Sjkh    /* If no packages, yelp */
151327Sjkh    if (pkgs == start)
15230221Scharnier	warnx("missing package name"), usage();
153327Sjkh    *pkgs = NULL;
154327Sjkh    if (start[1])
15530221Scharnier	warnx("only one package name allowed ('%s' extraneous)", start[1]),
15630221Scharnier	usage();
157327Sjkh    if (!pkg_perform(start)) {
158327Sjkh	if (Verbose)
15930221Scharnier	    warnx("package creation failed");
160327Sjkh	return 1;
161327Sjkh    }
162327Sjkh    else
163327Sjkh	return 0;
164327Sjkh}
165327Sjkh
16630221Scharnierstatic void
16730221Scharnierusage()
168327Sjkh{
16941866Sjkh    fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
17030221Scharnier"usage: pkg_create [-YNOhv] [-P pkgs] [-p prefix] [-f contents] [-i iscript]",
17141866Sjkh"                  [-I piscript] [-k dscript] [-K pdscript] [-r rscript] ",
17241866Sjkh"                  [-t template] [-X excludefile] [-D displayfile] ",
17367454Ssobomax"                  [-m mtreefile] [-o origin] -c comment -d description ",
17467454Ssobomax"                  -f packlist pkg-name");
175327Sjkh    exit(1);
176327Sjkh}
177