turns printfs back on
[freebsd-src/fkvm-freebsd.git] / usr.sbin / pkg_install / version / main.c
blobf46d945f4ef5277449f77cfe6c0f6b00c72b6aaf
1 /*
2 * FreeBSD install - a package for the installation and maintainance
3 * of non-core utilities.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * Jeremy D. Lea.
15 * 11 May 2002
17 * This is the version module. Based on pkg_version.pl by Bruce A. Mah.
21 #include <sys/cdefs.h>
22 __FBSDID("$FreeBSD$");
25 #include <getopt.h>
26 #include <err.h>
28 #include "lib.h"
29 #include "version.h"
31 char *LimitChars = NULL;
32 char *PreventChars = NULL;
33 char *MatchName = NULL;
34 char *LookUpOrigin = NULL;
35 Boolean RegexExtended = FALSE;
36 Boolean UseINDEXOnly = FALSE;
37 Boolean ShowOrigin = FALSE;
39 static void usage(void);
41 static char opts[] = "dIhl:L:qs:XtTO:ov";
42 static struct option longopts[] = {
43 { "extended", no_argument, NULL, 'X' },
44 { "help", no_argument, NULL, 'h' },
45 { "match", required_argument, NULL, 's' },
46 { "no-status", required_argument, NULL, 'L' },
47 { "origin", required_argument, NULL, 'O' },
48 { "quiet", no_argument, NULL, 'q' },
49 { "show-origin",no_argument, NULL, 'o' },
50 { "status", required_argument, NULL, 'l' },
51 { "index-only", no_argument, NULL, 'I' },
52 { "verbose", no_argument, NULL, 'v' },
53 { NULL, 0, NULL, 0 }
56 int
57 main(int argc, char **argv)
59 int ch, cmp = 0;
61 if (argc == 4 && !strcmp(argv[1], "-t")) {
62 cmp = version_cmp(argv[2], argv[3]);
63 printf(cmp > 0 ? ">\n" : (cmp < 0 ? "<\n" : "=\n"));
64 exit(0);
66 else if (argc == 4 && !strcmp(argv[1], "-T")) {
67 cmp = version_match(argv[3], argv[2]);
68 exit(cmp == 1 ? 0 : 1);
70 else while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1) {
71 switch(ch) {
72 case 'v':
73 Verbose++;
74 break;
76 case 'I':
77 UseINDEXOnly = TRUE;
78 break;
80 case 'l':
81 LimitChars = optarg;
82 break;
84 case 'L':
85 PreventChars = optarg;
86 break;
88 case 'q':
89 Quiet = TRUE;
90 break;
92 case 's':
93 MatchName = optarg;
94 break;
96 case 'O':
97 LookUpOrigin = optarg;
98 break;
100 case 'o':
101 ShowOrigin = TRUE;
102 break;
104 case 't':
105 errx(2, "Invalid -t usage.");
106 break;
108 case 'T':
109 errx(2, "Invalid -T usage.");
110 break;
112 case 'X':
113 RegexExtended = TRUE;
114 break;
116 case 'h':
117 default:
118 usage();
119 break;
123 argc -= optind;
124 argv += optind;
126 return pkg_perform(argv);
129 static void
130 usage()
132 fprintf(stderr, "%s\n%s\n%s\n",
133 "usage: pkg_version [-hIoqv] [-l limchar] [-L limchar] [[-X] -s string] [-O origin] [index]",
134 " pkg_version -t v1 v2",
135 " pkg_version -T name pattern");
136 exit(1);