main.c revision 21673
1127664Sbms#ifndef lint 2127664Sbmsstatic const char *rcsid = "$FreeBSD: head/usr.sbin/pkg_install/create/main.c 21673 1997-01-14 07:20:47Z jkh $"; 3127664Sbms#endif 4127664Sbms 5127664Sbms/* 6127664Sbms * FreeBSD install - a package for the installation and maintainance 7127664Sbms * of non-core utilities. 8127664Sbms * 9127664Sbms * Jordan K. Hubbard 10127664Sbms * 18 July 1993 11127664Sbms * 12127664Sbms * This is the create module. 13127664Sbms * 14127664Sbms */ 15127664Sbms 16127664Sbms#include "lib.h" 17127664Sbms#include "create.h" 18127664Sbms 19127664Sbmsstatic char Options[] = "YNOhvf:p:P:c:d:i:k:r:t:X:D:m:"; 20127664Sbms 21127664Sbmschar *Prefix = NULL; 22127664Sbmschar *Comment = NULL; 23127664Sbmschar *Desc = NULL; 24127664Sbmschar *Display = NULL; 25127664Sbmschar *Install = NULL; 26127664Sbmschar *DeInstall = NULL; 27127664Sbmschar *Contents = NULL; 28127664Sbmschar *Require = NULL; 29127664Sbmschar PlayPen[FILENAME_MAX]; 30127664Sbmschar *ExcludeFrom = NULL; 31127664Sbmschar *Mtree = NULL; 32214518Srpaulochar *Pkgdeps = NULL; 33127664Sbmsint Dereference = 0; 34127664Sbmsint PlistOnly = 0; 35127664Sbms 36127664Sbmsint 37127664Sbmsmain(int argc, char **argv) 38190225Srpaulo{ 39190225Srpaulo int ch; 40190225Srpaulo char **pkgs, **start; 41190225Srpaulo char *prog_name = argv[0]; 42190225Srpaulo 43190225Srpaulo pkgs = start = argv; 44127664Sbms while ((ch = getopt(argc, argv, Options)) != EOF) 45127664Sbms switch(ch) { 46127664Sbms case 'v': 47127664Sbms Verbose = TRUE; 48127664Sbms break; 49127664Sbms 50127664Sbms case 'N': 51127664Sbms AutoAnswer = NO; 52127664Sbms break; 53127664Sbms 54127664Sbms case 'Y': 55127664Sbms AutoAnswer = YES; 56127664Sbms break; 57127664Sbms 58127664Sbms case 'O': 59127664Sbms PlistOnly = YES; 60127664Sbms break; 61127664Sbms 62127664Sbms case 'p': 63127664Sbms Prefix = optarg; 64127664Sbms break; 65127664Sbms 66127664Sbms case 'f': 67127664Sbms Contents = optarg; 68127664Sbms break; 69127664Sbms 70127664Sbms case 'c': 71127664Sbms Comment = optarg; 72127664Sbms break; 73127664Sbms 74127664Sbms case 'd': 75127664Sbms Desc = optarg; 76127664Sbms break; 77127664Sbms 78127664Sbms case 'i': 79127664Sbms Install = optarg; 80127664Sbms break; 81127664Sbms 82127664Sbms case 'k': 83127664Sbms DeInstall = optarg; 84127664Sbms break; 85127664Sbms 86127664Sbms case 'r': 87127664Sbms Require = optarg; 88 break; 89 90 case 't': 91 strcpy(PlayPen, optarg); 92 break; 93 94 case 'X': 95 ExcludeFrom = optarg; 96 break; 97 98 case 'h': 99 Dereference = 1; 100 break; 101 102 case 'D': 103 Display = optarg; 104 break; 105 106 case 'm': 107 Mtree = optarg; 108 break; 109 110 case 'P': 111 Pkgdeps = optarg; 112 break; 113 114 case '?': 115 default: 116 usage(prog_name, NULL); 117 break; 118 } 119 120 argc -= optind; 121 argv += optind; 122 123 /* Get all the remaining package names, if any */ 124 while (*argv) 125 *pkgs++ = *argv++; 126 127 /* If no packages, yelp */ 128 if (pkgs == start) 129 usage(prog_name, "Missing package name"); 130 *pkgs = NULL; 131 if (start[1]) 132 usage(prog_name, "Only one package name allowed\n\t('%s' extraneous)", 133 start[1]); 134 if (!pkg_perform(start)) { 135 if (Verbose) 136 fprintf(stderr, "Package creation failed.\n"); 137 return 1; 138 } 139 else 140 return 0; 141} 142 143void 144usage(const char *name, const char *fmt, ...) 145{ 146 va_list args; 147 148 va_start(args, fmt); 149 if (fmt) { 150 fprintf(stderr, "%s: ", name); 151 vfprintf(stderr, fmt, args); 152 fprintf(stderr, "\n\n"); 153 } 154 va_end(args); 155 fprintf(stderr, "Usage: %s [args] pkg\n\n", name); 156 fprintf(stderr, "Where args are one or more of:\n\n"); 157 158 fprintf(stderr, "-c [-]file Get one-line comment from file (-or arg)\n"); 159 fprintf(stderr, "-d [-]file Get description from file (-or arg)\n"); 160 fprintf(stderr, "-f file get list of files from file (- for stdin)\n"); 161 fprintf(stderr, "-h follow symbolic links\n"); 162 fprintf(stderr, "-i script install script\n"); 163 fprintf(stderr, "-k script de-install script\n"); 164 fprintf(stderr, "-D file install notice\n"); 165 fprintf(stderr, "-m file mtree spec for directories\n"); 166 fprintf(stderr, "-P pkgs set package dependency list to pkgs\n"); 167 fprintf(stderr, "-p prefix install prefix will be arg\n"); 168 fprintf(stderr, "-r script pre/post requirements script\n"); 169 fprintf(stderr, "-t temp use temp as template for mktemp()\n"); 170 fprintf(stderr, "-X file exclude files listed in file\n"); 171 fprintf(stderr, "-v verbose\n"); 172 fprintf(stderr, "-Y assume `yes' answer to all questions\n"); 173 fprintf(stderr, "-N assume `no' answer to all questions\n"); 174 fprintf(stderr, "-O print a revised packing list and exit\n"); 175 exit(1); 176} 177