198766Smarkm/* 2228990Suqs * FreeBSD install - a package for the installation and maintenance 398766Smarkm * of non-core utilities. 498766Smarkm * 598766Smarkm * Redistribution and use in source and binary forms, with or without 698766Smarkm * modification, are permitted provided that the following conditions 798766Smarkm * are met: 898766Smarkm * 1. Redistributions of source code must retain the above copyright 998766Smarkm * notice, this list of conditions and the following disclaimer. 1098766Smarkm * 2. Redistributions in binary form must reproduce the above copyright 1198766Smarkm * notice, this list of conditions and the following disclaimer in the 1298766Smarkm * documentation and/or other materials provided with the distribution. 1398766Smarkm * 1498766Smarkm * Jeremy D. Lea. 1598766Smarkm * 11 May 2002 1698766Smarkm * 1798766Smarkm * This is the version module. Based on pkg_version.pl by Bruce A. Mah. 1898766Smarkm * 1998766Smarkm */ 2098766Smarkm 2198766Smarkm#include <sys/cdefs.h> 2298766Smarkm__FBSDID("$FreeBSD$"); 2398766Smarkm 24179433Sflz 25179433Sflz#include <getopt.h> 26179433Sflz#include <err.h> 27179433Sflz 28222035Sflz#include "lib.h" 2998766Smarkm#include "version.h" 3098766Smarkm 3198766Smarkmchar *LimitChars = NULL; 3298766Smarkmchar *PreventChars = NULL; 3398766Smarkmchar *MatchName = NULL; 34148435Skrionchar *LookUpOrigin = NULL; 35131275SeikBoolean RegexExtended = FALSE; 36146559ScpercivaBoolean UseINDEXOnly = FALSE; 37148435SkrionBoolean ShowOrigin = FALSE; 3898766Smarkm 39173412Skevlostatic void usage(void); 4098766Smarkm 41179433Sflzstatic char opts[] = "dIhl:L:qs:XtTO:ov"; 42179433Sflzstatic struct option longopts[] = { 43179433Sflz { "extended", no_argument, NULL, 'X' }, 44179433Sflz { "help", no_argument, NULL, 'h' }, 45179433Sflz { "match", required_argument, NULL, 's' }, 46179433Sflz { "no-status", required_argument, NULL, 'L' }, 47179433Sflz { "origin", required_argument, NULL, 'O' }, 48179433Sflz { "quiet", no_argument, NULL, 'q' }, 49179433Sflz { "show-origin",no_argument, NULL, 'o' }, 50179433Sflz { "status", required_argument, NULL, 'l' }, 51179433Sflz { "index-only", no_argument, NULL, 'I' }, 52179433Sflz { "verbose", no_argument, NULL, 'v' }, 53179433Sflz { NULL, 0, NULL, 0 } 54179433Sflz}; 55179433Sflz 5698766Smarkmint 5798766Smarkmmain(int argc, char **argv) 5898766Smarkm{ 5998766Smarkm int ch, cmp = 0; 6098766Smarkm 61241830Seadler warnpkgng(); 6298766Smarkm if (argc == 4 && !strcmp(argv[1], "-t")) { 6398766Smarkm cmp = version_cmp(argv[2], argv[3]); 6498766Smarkm printf(cmp > 0 ? ">\n" : (cmp < 0 ? "<\n" : "=\n")); 6598766Smarkm exit(0); 6698766Smarkm } 67131275Seik else if (argc == 4 && !strcmp(argv[1], "-T")) { 68131275Seik cmp = version_match(argv[3], argv[2]); 69131275Seik exit(cmp == 1 ? 0 : 1); 70131275Seik } 71179433Sflz else while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1) { 7298766Smarkm switch(ch) { 7398766Smarkm case 'v': 74159554Sobrien Verbose++; 7598766Smarkm break; 7698766Smarkm 77146559Scperciva case 'I': 78146559Scperciva UseINDEXOnly = TRUE; 79146559Scperciva break; 80146559Scperciva 8198766Smarkm case 'l': 8298766Smarkm LimitChars = optarg; 8398766Smarkm break; 8498766Smarkm 8598766Smarkm case 'L': 8698766Smarkm PreventChars = optarg; 8798766Smarkm break; 8898766Smarkm 89136643Sobrien case 'q': 90136643Sobrien Quiet = TRUE; 91136643Sobrien break; 92136643Sobrien 9398766Smarkm case 's': 9498766Smarkm MatchName = optarg; 9598766Smarkm break; 9698766Smarkm 97148435Skrion case 'O': 98148435Skrion LookUpOrigin = optarg; 99148435Skrion break; 100148435Skrion 101148435Skrion case 'o': 102148435Skrion ShowOrigin = TRUE; 103148435Skrion break; 104148435Skrion 10598766Smarkm case 't': 10698766Smarkm errx(2, "Invalid -t usage."); 10798766Smarkm break; 10898766Smarkm 109131275Seik case 'T': 110131275Seik errx(2, "Invalid -T usage."); 111131275Seik break; 112131275Seik 113131275Seik case 'X': 114131275Seik RegexExtended = TRUE; 115131275Seik break; 116131275Seik 11798766Smarkm case 'h': 11898766Smarkm default: 11998766Smarkm usage(); 12098766Smarkm break; 12198766Smarkm } 12298766Smarkm } 12398766Smarkm 12498766Smarkm argc -= optind; 12598766Smarkm argv += optind; 12698766Smarkm 12798766Smarkm return pkg_perform(argv); 12898766Smarkm} 12998766Smarkm 13098766Smarkmstatic void 131201226Sedusage(void) 13298766Smarkm{ 133131275Seik fprintf(stderr, "%s\n%s\n%s\n", 134148435Skrion "usage: pkg_version [-hIoqv] [-l limchar] [-L limchar] [[-X] -s string] [-O origin] [index]", 135131275Seik " pkg_version -t v1 v2", 136131275Seik " pkg_version -T name pattern"); 13798766Smarkm exit(1); 13898766Smarkm} 139