main.c revision 4996
11573Srgrimes#ifndef lint
21573Srgrimesstatic const char *rcsid = "$Id: main.c,v 1.7 1994/05/19 18:27:40 alm Exp $";
31573Srgrimes#endif
41573Srgrimes
51573Srgrimes/*
61573Srgrimes * FreeBSD install - a package for the installation and maintainance
71573Srgrimes * of non-core utilities.
8227753Stheraven *
9227753Stheraven * Jordan K. Hubbard
10227753Stheraven * 18 July 1993
11227753Stheraven *
12227753Stheraven * This is the create module.
131573Srgrimes *
141573Srgrimes */
151573Srgrimes
161573Srgrimes#include "lib.h"
171573Srgrimes#include "create.h"
181573Srgrimes
191573Srgrimesstatic char Options[] = "YNhvf:p:c:d:i:k:r:t:X:D:m:";
201573Srgrimes
211573Srgrimeschar	*Prefix		= NULL;
221573Srgrimeschar	*Comment        = NULL;
231573Srgrimeschar	*Desc		= NULL;
241573Srgrimeschar	*Display	= NULL;
251573Srgrimeschar	*Install	= NULL;
261573Srgrimeschar	*DeInstall	= NULL;
271573Srgrimeschar	*Contents	= NULL;
281573Srgrimeschar	*Require	= NULL;
291573Srgrimeschar	*PlayPen	= NULL;
301573Srgrimeschar	*ExcludeFrom	= NULL;
311573Srgrimeschar	*Mtree		= NULL;
321573Srgrimesint	Dereference	= 0;
331573Srgrimes
341573Srgrimesint
351573Srgrimesmain(int argc, char **argv)
361573Srgrimes{
371573Srgrimes    int ch;
381573Srgrimes    char **pkgs, **start;
391573Srgrimes    char *prog_name = argv[0];
401573Srgrimes
4192986Sobrien    pkgs = start = argv;
4292986Sobrien    while ((ch = getopt(argc, argv, Options)) != EOF)
431573Srgrimes	switch(ch) {
441573Srgrimes	case 'v':
45132820Stjr	    Verbose = TRUE;
46121845Stjr	    break;
47129153Stjr
481573Srgrimes	case 'N':
49227753Stheraven	    AutoAnswer = NO;
501573Srgrimes	    break;
5161218Sache
52136609Stjr	case 'Y':
53136609Stjr	    AutoAnswer = YES;
541573Srgrimes	    break;
551573Srgrimes
5657035Sobrien	case 'p':
5757035Sobrien	    Prefix = optarg;
5857035Sobrien	    break;
5957035Sobrien
6057035Sobrien	case 'f':
6157035Sobrien	    Contents = optarg;
6257035Sobrien	    break;
6357035Sobrien
6457035Sobrien	case 'c':
6557035Sobrien	    Comment = optarg;
6657035Sobrien	    break;
6757035Sobrien
6857035Sobrien	case 'd':
6957035Sobrien	    Desc = optarg;
7057035Sobrien	    break;
7157035Sobrien
7257035Sobrien	case 'i':
7357035Sobrien	    Install = optarg;
7457035Sobrien	    break;
7557035Sobrien
7657035Sobrien	case 'k':
7757035Sobrien	    DeInstall = optarg;
7857035Sobrien	    break;
7957035Sobrien
8057035Sobrien	case 'r':
8157035Sobrien	    Require = optarg;
8257035Sobrien	    break;
8357035Sobrien
8457035Sobrien	case 't':
8557035Sobrien	    PlayPen = optarg;
8657035Sobrien	    break;
8757035Sobrien
8857035Sobrien	case 'X':
8957035Sobrien	    ExcludeFrom = optarg;
9057035Sobrien	    break;
9157035Sobrien
9257035Sobrien	case 'h':
9357035Sobrien	    Dereference = 1;
9457035Sobrien	    break;
9557035Sobrien
9657035Sobrien	case 'D':
9757035Sobrien	    Display = optarg;
9857035Sobrien	    break;
9957035Sobrien
10057035Sobrien	case 'm':
10157035Sobrien	    Mtree = optarg;
10257035Sobrien	    break;
10357035Sobrien
10457035Sobrien	case '?':
10557035Sobrien	default:
10657035Sobrien	    usage(prog_name, NULL);
10757035Sobrien	    break;
10857035Sobrien	}
10957035Sobrien
11057035Sobrien    argc -= optind;
11157035Sobrien    argv += optind;
11257035Sobrien
11357035Sobrien    /* Get all the remaining package names, if any */
11457035Sobrien    while (*argv)
11557035Sobrien	*pkgs++ = *argv++;
11657035Sobrien
11757035Sobrien    /* If no packages, yelp */
11857035Sobrien    if (pkgs == start)
11957035Sobrien	usage(prog_name, "Missing package name");
12057035Sobrien    *pkgs = NULL;
12157035Sobrien    if (start[1])
12257035Sobrien	usage(prog_name, "Only one package name allowed\n\t('%s' extraneous)",
12357035Sobrien	      start[1]);
12457035Sobrien    if (!pkg_perform(start)) {
12557035Sobrien	if (Verbose)
12657035Sobrien	    fprintf(stderr, "Package creation failed.\n");
12757035Sobrien	return 1;
12857035Sobrien    }
12957035Sobrien    else
13057035Sobrien	return 0;
13157035Sobrien}
13257035Sobrien
13357035Sobrienvoid
13457035Sobrienusage(const char *name, const char *fmt, ...)
13557035Sobrien{
13657035Sobrien    va_list args;
13757035Sobrien
13857035Sobrien    va_start(args, fmt);
13957035Sobrien    if (fmt) {
14057035Sobrien	fprintf(stderr, "%s: ", name);
14157035Sobrien	vfprintf(stderr, fmt, args);
14257035Sobrien	fprintf(stderr, "\n\n");
14357035Sobrien    }
14457035Sobrien    va_end(args);
14557035Sobrien    fprintf(stderr, "Usage: %s [args] pkg\n\n", name);
14657035Sobrien    fprintf(stderr, "Where args are one or more of:\n\n");
14757035Sobrien
14857035Sobrien    fprintf(stderr, "-c [-]file Get one-line comment from file (-or arg)\n");
14957035Sobrien    fprintf(stderr, "-d [-]file Get description from file (-or arg)\n");
15057035Sobrien    fprintf(stderr, "-f file    get list of files from file (- for stdin)\n");
15157035Sobrien    fprintf(stderr, "-h         follow symbolic links\n");
15257035Sobrien    fprintf(stderr, "-i script  install script\n");
15357035Sobrien    fprintf(stderr, "-k script  de-install script\n");
15457035Sobrien    fprintf(stderr, "-D file    install notice\n");
15557035Sobrien    fprintf(stderr, "-m file    mtree spec for directories\n");
15657035Sobrien    fprintf(stderr, "-p prefix  install prefix will be arg\n");
15757035Sobrien    fprintf(stderr, "-r script  pre/post requirements script\n");
15857035Sobrien    fprintf(stderr, "-t temp    use temp as template for mktemp()\n");
15957035Sobrien    fprintf(stderr, "-X file    exclude files listed in file\n");
16057035Sobrien    fprintf(stderr, "-v         verbose\n");
16157035Sobrien    fprintf(stderr, "-Y         assume `yes' answer to all questions\n");
16257035Sobrien    fprintf(stderr, "-N         assume `no' answer to all questions\n");
16357035Sobrien    exit(1);
16457035Sobrien}
16557035Sobrien