main.c revision 71965
1327Sjkh/* 2327Sjkh * 3327Sjkh * FreeBSD install - a package for the installation and maintainance 4327Sjkh * of non-core utilities. 5327Sjkh * 6327Sjkh * Redistribution and use in source and binary forms, with or without 7327Sjkh * modification, are permitted provided that the following conditions 8327Sjkh * are met: 9327Sjkh * 1. Redistributions of source code must retain the above copyright 10327Sjkh * notice, this list of conditions and the following disclaimer. 11327Sjkh * 2. Redistributions in binary form must reproduce the above copyright 12327Sjkh * notice, this list of conditions and the following disclaimer in the 13327Sjkh * documentation and/or other materials provided with the distribution. 14327Sjkh * 15327Sjkh * Jordan K. Hubbard 16327Sjkh * 18 July 1993 17327Sjkh * 1831997Shoek * This is the info module. 19327Sjkh * 20327Sjkh */ 21327Sjkh 2230221Scharnier#include <err.h> 23327Sjkh#include "lib.h" 24327Sjkh#include "info.h" 25327Sjkh 2655567Sphantom#ifndef lint 2755567Sphantomstatic const char rcsid[] = 2855567Sphantom "$FreeBSD: head/usr.sbin/pkg_install/info/main.c 71965 2001-02-03 20:56:32Z jkh $"; 2955567Sphantom#endif 30327Sjkh 3171965Sjkhstatic char Options[] = "acdDe:fghiIkl:LmopqrRst:v"; 3255567Sphantom 33327Sjkhint Flags = 0; 34327SjkhBoolean AllInstalled = FALSE; 35411SjkhBoolean Quiet = FALSE; 36379Sjkhchar *InfoPrefix = ""; 3711780Sjkhchar PlayPen[FILENAME_MAX]; 38392Sjkhchar *CheckPkg = NULL; 39327Sjkh 4030221Scharnierstatic void usage __P((void)); 4130221Scharnier 42327Sjkhint 43327Sjkhmain(int argc, char **argv) 44327Sjkh{ 45327Sjkh int ch; 46327Sjkh char **pkgs, **start; 4756001Sdan char *pkgs_split; 48327Sjkh 49327Sjkh pkgs = start = argv; 5046105Sjkh if (argc == 1) { 5146105Sjkh AllInstalled = TRUE; 5246105Sjkh Flags = SHOW_INDEX; 5346105Sjkh } 5446105Sjkh else while ((ch = getopt(argc, argv, Options)) != -1) { 55327Sjkh switch(ch) { 56327Sjkh case 'a': 57327Sjkh AllInstalled = TRUE; 58327Sjkh break; 59327Sjkh 60327Sjkh case 'v': 61327Sjkh Verbose = TRUE; 62327Sjkh /* Reasonable definition of 'everything' */ 63327Sjkh Flags = SHOW_COMMENT | SHOW_DESC | SHOW_PLIST | SHOW_INSTALL | 644996Sjkh SHOW_DEINSTALL | SHOW_REQUIRE | SHOW_DISPLAY | SHOW_MTREE; 65327Sjkh break; 66327Sjkh 67327Sjkh case 'I': 68327Sjkh Flags |= SHOW_INDEX; 69327Sjkh break; 70327Sjkh 71327Sjkh case 'p': 72327Sjkh Flags |= SHOW_PREFIX; 73327Sjkh break; 74327Sjkh 75327Sjkh case 'c': 76327Sjkh Flags |= SHOW_COMMENT; 77327Sjkh break; 78327Sjkh 79327Sjkh case 'd': 80327Sjkh Flags |= SHOW_DESC; 81327Sjkh break; 82327Sjkh 834996Sjkh case 'D': 844996Sjkh Flags |= SHOW_DISPLAY; 854996Sjkh break; 864996Sjkh 87327Sjkh case 'f': 88327Sjkh Flags |= SHOW_PLIST; 89327Sjkh break; 90327Sjkh 9171965Sjkh case 'g': 9271965Sjkh Flags |= SHOW_CKSUM; 9371965Sjkh break; 9471965Sjkh 95327Sjkh case 'i': 96327Sjkh Flags |= SHOW_INSTALL; 97327Sjkh break; 98327Sjkh 99327Sjkh case 'k': 100327Sjkh Flags |= SHOW_DEINSTALL; 101327Sjkh break; 102327Sjkh 103327Sjkh case 'r': 104327Sjkh Flags |= SHOW_REQUIRE; 105327Sjkh break; 106327Sjkh 1074996Sjkh case 'R': 1084996Sjkh Flags |= SHOW_REQBY; 1094996Sjkh break; 1104996Sjkh 111411Sjkh case 'L': 112411Sjkh Flags |= SHOW_FILES; 113411Sjkh break; 114411Sjkh 1154996Sjkh case 'm': 1164996Sjkh Flags |= SHOW_MTREE; 1174996Sjkh break; 1184996Sjkh 11962775Ssobomax case 's': 12062775Ssobomax Flags |= SHOW_SIZE; 12162775Ssobomax break; 12262775Ssobomax 12367454Ssobomax case 'o': 12467454Ssobomax Flags |= SHOW_ORIGIN; 12567454Ssobomax break; 12667454Ssobomax 127379Sjkh case 'l': 128379Sjkh InfoPrefix = optarg; 129379Sjkh break; 130379Sjkh 131411Sjkh case 'q': 132411Sjkh Quiet = TRUE; 133411Sjkh break; 134411Sjkh 135383Sjkh case 't': 13611780Sjkh strcpy(PlayPen, optarg); 137383Sjkh break; 138383Sjkh 139392Sjkh case 'e': 140392Sjkh CheckPkg = optarg; 141392Sjkh break; 142392Sjkh 143327Sjkh case 'h': 144327Sjkh case '?': 145327Sjkh default: 14630221Scharnier usage(); 147327Sjkh break; 148327Sjkh } 14946105Sjkh } 150327Sjkh 1518857Srgrimes argc -= optind; 152327Sjkh argv += optind; 153327Sjkh 154327Sjkh /* Set some reasonable defaults */ 155327Sjkh if (!Flags) 1564996Sjkh Flags = SHOW_COMMENT | SHOW_DESC | SHOW_REQBY; 157327Sjkh 158327Sjkh /* Get all the remaining package names, if any */ 15960563Ssteve while (*argv) { 16067429Sjkh while ((pkgs_split = strrchr(*argv, (int)'/')) != NULL) { 16160563Ssteve *pkgs_split++ = '\0'; 16260563Ssteve /* 16360563Ssteve * If character after the '/' is alphanumeric, then we've found the 16460563Ssteve * package name. Otherwise we've come across a trailing '/' and 16560563Ssteve * need to continue our quest. 16660563Ssteve */ 16760563Ssteve if (isalpha(*pkgs_split)) { 16860563Ssteve *argv = pkgs_split; 16960563Ssteve break; 17060563Ssteve } 17160563Ssteve } 17260563Ssteve *pkgs++ = *argv++; 17356001Sdan } 174327Sjkh 175327Sjkh /* If no packages, yelp */ 176392Sjkh if (pkgs == start && !AllInstalled && !CheckPkg) 17730221Scharnier warnx("missing package name(s)"), usage(); 178327Sjkh *pkgs = NULL; 179327Sjkh return pkg_perform(start); 180327Sjkh} 181327Sjkh 18230221Scharnierstatic void 18330221Scharnierusage() 184327Sjkh{ 18530221Scharnier fprintf(stderr, "%s\n%s\n%s\n", 18669616Ssobomax "usage: pkg_info [-cdDfiIkLmopqrRsv] [-e package] [-l prefix]", 18755567Sphantom " [-t template] [pkg-name ...]", 18830221Scharnier " pkg_info -a [flags]"); 189327Sjkh exit(1); 190327Sjkh} 191