1/*	$NetBSD: main.c,v 1.19 2010/01/22 13:30:41 joerg Exp $	*/
2
3#if HAVE_CONFIG_H
4#include "config.h"
5#endif
6#include <nbcompat.h>
7#if HAVE_SYS_CDEFS_H
8#include <sys/cdefs.h>
9#endif
10__RCSID("$NetBSD: main.c,v 1.19 2010/01/22 13:30:41 joerg Exp $");
11
12/*
13 * FreeBSD install - a package for the installation and maintainance
14 * of non-core utilities.
15 *
16 * Jordan K. Hubbard
17 * 18 July 1993
18 *
19 * This is the create module.
20 *
21 */
22
23#if HAVE_ERR_H
24#include <err.h>
25#endif
26#include "lib.h"
27#include "create.h"
28
29static const char Options[] = "B:C:D:EF:I:K:L:OP:S:T:UVb:c:d:f:g:i:k:ln:p:r:s:u:v";
30
31char   *Prefix = NULL;
32char   *Comment = NULL;
33char   *Desc = NULL;
34char   *Display = NULL;
35char   *Install = NULL;
36char   *DeInstall = NULL;
37char   *Contents = NULL;
38char   *Pkgdeps = NULL;
39char   *BuildPkgdeps = NULL;
40char   *Pkgcfl = NULL;
41char   *BuildVersion = NULL;
42char   *BuildInfo = NULL;
43char   *SizePkg = NULL;
44char   *SizeAll = NULL;
45char   *Preserve = NULL;
46char   *DefaultOwner = NULL;
47char   *DefaultGroup = NULL;
48char   *realprefix = NULL;
49const char *CompressionType = NULL;
50int	update_pkgdb = 1;
51int	create_views = 0;
52int     PlistOnly = 0;
53int     RelativeLinks = 0;
54Boolean File2Pkg = FALSE;
55
56static void
57usage(void)
58{
59	fprintf(stderr,
60	    "usage: pkg_create [-ElOUVv] [-B build-info-file] [-b build-version-file]\n"
61            "                  [-C cpkgs] [-D displayfile] [-F compression] \n"
62	    "                  [-I realprefix] [-i iscript]\n"
63            "                  [-K pkg_dbdir] [-k dscript]\n"
64            "                  [-n preserve-file] [-P dpkgs] [-p prefix] [-r rscript]\n"
65            "                  [-S size-all-file] [-s size-pkg-file]\n"
66	    "                  [-T buildpkgs] [-u owner] [-g group]\n"
67            "                  -c comment -d description -f packlist\n"
68            "                  pkg-name\n");
69	exit(1);
70}
71
72int
73main(int argc, char **argv)
74{
75	int     ch;
76
77	setprogname(argv[0]);
78	while ((ch = getopt(argc, argv, Options)) != -1)
79		switch (ch) {
80		case 'v':
81			Verbose = TRUE;
82			break;
83
84		case 'E':
85			create_views = 1;
86			break;
87
88		case 'F':
89			CompressionType = optarg;
90			break;
91
92		case 'I':
93			realprefix = optarg;
94			break;
95
96		case 'O':
97			PlistOnly = 1;
98			break;
99
100		case 'U':
101			update_pkgdb = 0;
102			break;
103
104		case 'p':
105			Prefix = optarg;
106			break;
107
108		case 's':
109			SizePkg = optarg;
110			break;
111
112		case 'S':
113			SizeAll = optarg;
114			break;
115
116		case 'f':
117			Contents = optarg;
118			break;
119
120		case 'c':
121			Comment = optarg;
122			break;
123
124		case 'd':
125			Desc = optarg;
126			break;
127
128		case 'g':
129			DefaultGroup = optarg;
130			break;
131
132		case 'i':
133			Install = optarg;
134			break;
135
136		case 'K':
137			pkgdb_set_dir(optarg, 3);
138			break;
139
140		case 'k':
141			DeInstall = optarg;
142			break;
143
144		case 'l':
145			RelativeLinks = 1;
146			break;
147
148		case 'L':
149			warnx("Obsolete -L option ignored");
150			break;
151
152		case 'u':
153			DefaultOwner = optarg;
154			break;
155
156		case 'D':
157			Display = optarg;
158			break;
159
160		case 'n':
161			Preserve = optarg;
162			break;
163
164		case 'P':
165			Pkgdeps = optarg;
166			break;
167
168		case 'T':
169			BuildPkgdeps = optarg;
170			break;
171
172		case 'C':
173			Pkgcfl = optarg;
174			break;
175
176		case 'b':
177			BuildVersion = optarg;
178			break;
179
180		case 'B':
181			BuildInfo = optarg;
182			break;
183
184		case 'V':
185			show_version();
186			/* NOTREACHED */
187
188		case '?':
189		default:
190			usage();
191			break;
192		}
193
194	argc -= optind;
195	argv += optind;
196
197	pkg_install_config();
198
199	if (argc == 0) {
200		warnx("missing package name");
201		usage();
202	}
203	if (argc != 1) {
204		warnx("only one package name allowed");
205		usage();
206	}
207
208	if (pkg_perform(*argv))
209		return 0;
210	if (Verbose) {
211		if (PlistOnly)
212			warnx("package registration failed");
213		else
214			warnx("package creation failed");
215	}
216	return 1;
217}
218