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