main.c revision 30221
1327Sjkh#ifndef lint
230221Scharnierstatic const char rcsid[] =
330221Scharnier	"$Id: main.c,v 1.16 1997/06/06 12:19:11 jkh Exp $";
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
2126473Sjkhstatic char Options[] = "YNOhvf:p:P:c:d:i:k:r:t:X:D:m:s:";
22327Sjkh
23327Sjkhchar	*Prefix		= NULL;
24327Sjkhchar	*Comment        = NULL;
25327Sjkhchar	*Desc		= NULL;
2626473Sjkhchar	*SrcDir		= NULL;
274996Sjkhchar	*Display	= NULL;
28327Sjkhchar	*Install	= NULL;
29327Sjkhchar	*DeInstall	= NULL;
30327Sjkhchar	*Contents	= NULL;
31327Sjkhchar	*Require	= NULL;
32445Sjkhchar	*ExcludeFrom	= NULL;
334996Sjkhchar	*Mtree		= NULL;
347713Sjkhchar	*Pkgdeps	= NULL;
3526473Sjkhchar	PlayPen[FILENAME_MAX];
361520Salmint	Dereference	= 0;
377986Sjkhint	PlistOnly	= 0;
38327Sjkh
3930221Scharnierstatic void usage __P((void));
4030221Scharnier
41327Sjkhint
42327Sjkhmain(int argc, char **argv)
43327Sjkh{
44327Sjkh    int ch;
45327Sjkh    char **pkgs, **start;
46327Sjkh
47327Sjkh    pkgs = start = argv;
4824428Simp    while ((ch = getopt(argc, argv, Options)) != -1)
49327Sjkh	switch(ch) {
50327Sjkh	case 'v':
51327Sjkh	    Verbose = TRUE;
52327Sjkh	    break;
53327Sjkh
541337Sjkh	case 'N':
551337Sjkh	    AutoAnswer = NO;
561337Sjkh	    break;
571337Sjkh
581337Sjkh	case 'Y':
591337Sjkh	    AutoAnswer = YES;
601337Sjkh	    break;
611337Sjkh
627986Sjkh	case 'O':
637986Sjkh	    PlistOnly = YES;
647986Sjkh	    break;
657986Sjkh
66327Sjkh	case 'p':
67327Sjkh	    Prefix = optarg;
68327Sjkh	    break;
69327Sjkh
7026473Sjkh	case 's':
7126473Sjkh	    SrcDir = optarg;
7226473Sjkh	    break;
7326473Sjkh
74327Sjkh	case 'f':
75327Sjkh	    Contents = optarg;
76327Sjkh	    break;
77327Sjkh
78327Sjkh	case 'c':
79327Sjkh	    Comment = optarg;
80327Sjkh	    break;
81327Sjkh
82327Sjkh	case 'd':
83327Sjkh	    Desc = optarg;
84327Sjkh	    break;
85327Sjkh
86327Sjkh	case 'i':
87327Sjkh	    Install = optarg;
88327Sjkh	    break;
89327Sjkh
90327Sjkh	case 'k':
91327Sjkh	    DeInstall = optarg;
92327Sjkh	    break;
93327Sjkh
94327Sjkh	case 'r':
95327Sjkh	    Require = optarg;
96327Sjkh	    break;
97327Sjkh
98383Sjkh	case 't':
9911780Sjkh	    strcpy(PlayPen, optarg);
100383Sjkh	    break;
101383Sjkh
102445Sjkh	case 'X':
103445Sjkh	    ExcludeFrom = optarg;
104445Sjkh	    break;
105445Sjkh
106327Sjkh	case 'h':
1071520Salm	    Dereference = 1;
1081520Salm	    break;
1091520Salm
1104996Sjkh	case 'D':
1114996Sjkh	    Display = optarg;
1124996Sjkh	    break;
1134996Sjkh
1144996Sjkh	case 'm':
1154996Sjkh	    Mtree = optarg;
1164996Sjkh	    break;
1174996Sjkh
1187713Sjkh	case 'P':
1197713Sjkh	    Pkgdeps = optarg;
1207713Sjkh	    break;
1217713Sjkh
122327Sjkh	case '?':
123327Sjkh	default:
12430221Scharnier	    usage();
125327Sjkh	    break;
126327Sjkh	}
127327Sjkh
1288857Srgrimes    argc -= optind;
129327Sjkh    argv += optind;
130327Sjkh
131327Sjkh    /* Get all the remaining package names, if any */
132327Sjkh    while (*argv)
133327Sjkh	*pkgs++ = *argv++;
134327Sjkh
135327Sjkh    /* If no packages, yelp */
136327Sjkh    if (pkgs == start)
13730221Scharnier	warnx("missing package name"), usage();
138327Sjkh    *pkgs = NULL;
139327Sjkh    if (start[1])
14030221Scharnier	warnx("only one package name allowed ('%s' extraneous)", start[1]),
14130221Scharnier	usage();
142327Sjkh    if (!pkg_perform(start)) {
143327Sjkh	if (Verbose)
14430221Scharnier	    warnx("package creation failed");
145327Sjkh	return 1;
146327Sjkh    }
147327Sjkh    else
148327Sjkh	return 0;
149327Sjkh}
150327Sjkh
15130221Scharnierstatic void
15230221Scharnierusage()
153327Sjkh{
15430221Scharnier    fprintf(stderr, "%s\n%s\n%s\n%s\n",
15530221Scharnier"usage: pkg_create [-YNOhv] [-P pkgs] [-p prefix] [-f contents] [-i iscript]",
15630221Scharnier"                  [-k dscript] [-r rscript] [-t template] [-X excludefile]",
15730221Scharnier"                  [-D displayfile] [-m mtreefile] -c comment -d description",
15830221Scharnier"                  -f packlist pkg-name");
159327Sjkh    exit(1);
160327Sjkh}
161