main.c revision 26473
1327Sjkh#ifndef lint 226473Sjkhstatic const char *rcsid = "$Id: main.c,v 1.15 1997/03/31 05:10:47 imp Exp $"; 3327Sjkh#endif 4327Sjkh 5327Sjkh/* 6327Sjkh * FreeBSD install - a package for the installation and maintainance 7327Sjkh * of non-core utilities. 8327Sjkh * 9327Sjkh * Jordan K. Hubbard 10327Sjkh * 18 July 1993 11327Sjkh * 12327Sjkh * This is the create module. 13327Sjkh * 14327Sjkh */ 15327Sjkh 16327Sjkh#include "lib.h" 17327Sjkh#include "create.h" 18327Sjkh 1926473Sjkhstatic char Options[] = "YNOhvf:p:P:c:d:i:k:r:t:X:D:m:s:"; 20327Sjkh 21327Sjkhchar *Prefix = NULL; 22327Sjkhchar *Comment = NULL; 23327Sjkhchar *Desc = NULL; 2426473Sjkhchar *SrcDir = NULL; 254996Sjkhchar *Display = NULL; 26327Sjkhchar *Install = NULL; 27327Sjkhchar *DeInstall = NULL; 28327Sjkhchar *Contents = NULL; 29327Sjkhchar *Require = NULL; 30445Sjkhchar *ExcludeFrom = NULL; 314996Sjkhchar *Mtree = NULL; 327713Sjkhchar *Pkgdeps = NULL; 3326473Sjkhchar PlayPen[FILENAME_MAX]; 341520Salmint Dereference = 0; 357986Sjkhint PlistOnly = 0; 36327Sjkh 37327Sjkhint 38327Sjkhmain(int argc, char **argv) 39327Sjkh{ 40327Sjkh int ch; 41327Sjkh char **pkgs, **start; 42327Sjkh char *prog_name = argv[0]; 43327Sjkh 44327Sjkh pkgs = start = argv; 4524428Simp while ((ch = getopt(argc, argv, Options)) != -1) 46327Sjkh switch(ch) { 47327Sjkh case 'v': 48327Sjkh Verbose = TRUE; 49327Sjkh break; 50327Sjkh 511337Sjkh case 'N': 521337Sjkh AutoAnswer = NO; 531337Sjkh break; 541337Sjkh 551337Sjkh case 'Y': 561337Sjkh AutoAnswer = YES; 571337Sjkh break; 581337Sjkh 597986Sjkh case 'O': 607986Sjkh PlistOnly = YES; 617986Sjkh break; 627986Sjkh 63327Sjkh case 'p': 64327Sjkh Prefix = optarg; 65327Sjkh break; 66327Sjkh 6726473Sjkh case 's': 6826473Sjkh SrcDir = optarg; 6926473Sjkh break; 7026473Sjkh 71327Sjkh case 'f': 72327Sjkh Contents = optarg; 73327Sjkh break; 74327Sjkh 75327Sjkh case 'c': 76327Sjkh Comment = optarg; 77327Sjkh break; 78327Sjkh 79327Sjkh case 'd': 80327Sjkh Desc = optarg; 81327Sjkh break; 82327Sjkh 83327Sjkh case 'i': 84327Sjkh Install = optarg; 85327Sjkh break; 86327Sjkh 87327Sjkh case 'k': 88327Sjkh DeInstall = optarg; 89327Sjkh break; 90327Sjkh 91327Sjkh case 'r': 92327Sjkh Require = optarg; 93327Sjkh break; 94327Sjkh 95383Sjkh case 't': 9611780Sjkh strcpy(PlayPen, optarg); 97383Sjkh break; 98383Sjkh 99445Sjkh case 'X': 100445Sjkh ExcludeFrom = optarg; 101445Sjkh break; 102445Sjkh 103327Sjkh case 'h': 1041520Salm Dereference = 1; 1051520Salm break; 1061520Salm 1074996Sjkh case 'D': 1084996Sjkh Display = optarg; 1094996Sjkh break; 1104996Sjkh 1114996Sjkh case 'm': 1124996Sjkh Mtree = optarg; 1134996Sjkh break; 1144996Sjkh 1157713Sjkh case 'P': 1167713Sjkh Pkgdeps = optarg; 1177713Sjkh break; 1187713Sjkh 119327Sjkh case '?': 120327Sjkh default: 121327Sjkh usage(prog_name, NULL); 122327Sjkh break; 123327Sjkh } 124327Sjkh 1258857Srgrimes argc -= optind; 126327Sjkh argv += optind; 127327Sjkh 128327Sjkh /* Get all the remaining package names, if any */ 129327Sjkh while (*argv) 130327Sjkh *pkgs++ = *argv++; 131327Sjkh 132327Sjkh /* If no packages, yelp */ 133327Sjkh if (pkgs == start) 134327Sjkh usage(prog_name, "Missing package name"); 135327Sjkh *pkgs = NULL; 136327Sjkh if (start[1]) 137327Sjkh usage(prog_name, "Only one package name allowed\n\t('%s' extraneous)", 138327Sjkh start[1]); 139327Sjkh if (!pkg_perform(start)) { 140327Sjkh if (Verbose) 141327Sjkh fprintf(stderr, "Package creation failed.\n"); 142327Sjkh return 1; 143327Sjkh } 144327Sjkh else 145327Sjkh return 0; 146327Sjkh} 147327Sjkh 148327Sjkhvoid 149327Sjkhusage(const char *name, const char *fmt, ...) 150327Sjkh{ 151327Sjkh va_list args; 152327Sjkh 153327Sjkh va_start(args, fmt); 154327Sjkh if (fmt) { 155327Sjkh fprintf(stderr, "%s: ", name); 156327Sjkh vfprintf(stderr, fmt, args); 157327Sjkh fprintf(stderr, "\n\n"); 158327Sjkh } 159327Sjkh va_end(args); 160327Sjkh fprintf(stderr, "Usage: %s [args] pkg\n\n", name); 161327Sjkh fprintf(stderr, "Where args are one or more of:\n\n"); 162327Sjkh 163327Sjkh fprintf(stderr, "-c [-]file Get one-line comment from file (-or arg)\n"); 164327Sjkh fprintf(stderr, "-d [-]file Get description from file (-or arg)\n"); 165327Sjkh fprintf(stderr, "-f file get list of files from file (- for stdin)\n"); 1661520Salm fprintf(stderr, "-h follow symbolic links\n"); 167327Sjkh fprintf(stderr, "-i script install script\n"); 168327Sjkh fprintf(stderr, "-k script de-install script\n"); 1694996Sjkh fprintf(stderr, "-D file install notice\n"); 1704996Sjkh fprintf(stderr, "-m file mtree spec for directories\n"); 1717713Sjkh fprintf(stderr, "-P pkgs set package dependency list to pkgs\n"); 1724996Sjkh fprintf(stderr, "-p prefix install prefix will be arg\n"); 173327Sjkh fprintf(stderr, "-r script pre/post requirements script\n"); 174383Sjkh fprintf(stderr, "-t temp use temp as template for mktemp()\n"); 175445Sjkh fprintf(stderr, "-X file exclude files listed in file\n"); 176327Sjkh fprintf(stderr, "-v verbose\n"); 1774996Sjkh fprintf(stderr, "-Y assume `yes' answer to all questions\n"); 1784996Sjkh fprintf(stderr, "-N assume `no' answer to all questions\n"); 1797986Sjkh fprintf(stderr, "-O print a revised packing list and exit\n"); 180327Sjkh exit(1); 181327Sjkh} 182