1 /*
2 * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3 * Copyright (c) 1991-1999 University of Maryland at College Park
4 * Copyright (c) 2007-2013 Zmanda, Inc. All Rights Reserved.
5 * All Rights Reserved.
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and its
8 * documentation for any purpose is hereby granted without fee, provided that
9 * the above copyright notice appear in all copies and that both that
10 * copyright notice and this permission notice appear in supporting
11 * documentation, and that the name of U.M. not be used in advertising or
12 * publicity pertaining to distribution of the software without specific,
13 * written prior permission. U.M. makes no representations about the
14 * suitability of this software for any purpose. It is provided "as is"
15 * without express or implied warranty.
16 *
17 * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
19 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
21 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
22 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 *
24 * Authors: the Amanda Development Team. Its members are listed in a
25 * file named AUTHORS, in the root directory of this distribution.
26 */
27 /*
28 * $Id: genversion.c 5713 2014-04-25 14:20:01Z martinea $
29 *
30 * dump the current Amanda version info
31 */
32 #include "amanda.h"
33
34 /* distribution-time information */
35 #include "svn-info.h"
36
37 /* build-time information */
38 #include "genversion.h"
39
40 #define LMARGIN 6
41 #define RMARGIN 70
42
43 static size_t linelen;
44
45 #define startline(title) g_printf(" \"%-*s", LMARGIN, title); linelen = 0
46 #define endline() g_printf("\\n\",\n")
47
48 static void prstr(const char *);
49 static void prvar(const char *, const char *);
50 static void prundefvar(const char *var);
51 static void prnum(const char *var, long val);
52
53 int main(int, char **);
54
55 /* Print a string */
56 static void
prstr(const char * string)57 prstr(
58 const char *string)
59 {
60 size_t len = strlen(string) + 1;
61
62 /*
63 * If this string overflows this line, and there's other stuff
64 * on the line, create a new one.
65 */
66 if (linelen > 0 && linelen + len >= RMARGIN - LMARGIN) {
67 endline();
68 startline("");
69 }
70 g_printf(" %s", string);
71 linelen += len;
72 }
73
74 static char *buf = NULL;
75 static size_t buf_len = 0;
76
77 /* Print a text variable */
78 static void
prvar(const char * var,const char * val)79 prvar(
80 const char *var,
81 const char *val)
82 {
83 size_t new_len;
84
85 new_len = strlen(var)
86 + SIZEOF("=\\\"")
87 + strlen(val)
88 + SIZEOF("\\\"")
89 + 1;
90 if(new_len > buf_len) {
91 free(buf);
92 buf_len = new_len;
93 buf = malloc(new_len);
94 if (!buf) {
95 g_fprintf(stderr, _("genversion: Not enough memory"));
96 abort();
97 /*NOTREACHED*/
98 }
99 }
100 g_snprintf(buf, buf_len, "%s=\\\"%s\\\"", var, val); /* safe */
101 prstr(buf);
102 }
103
104 /* Print a undef variable */
105 static void
prundefvar(const char * var)106 prundefvar(
107 const char *var)
108 {
109 size_t new_len;
110
111 new_len = strlen(var)
112 + SIZEOF("=UNDEF")
113 + 1;
114 if(new_len > buf_len) {
115 free(buf);
116 buf_len = new_len;
117 buf = malloc(new_len); /* let it die if malloc() fails */
118 if (!buf) {
119 g_fprintf(stderr, _("genversion: Not enough memory"));
120 abort();
121 /*NOTREACHED*/
122 }
123 }
124 g_snprintf(buf, buf_len, "%s=UNDEF", var); /* safe */
125 prstr(buf);
126 }
127
128 /* Print a numeric variable */
129 static void
prnum(const char * var,long val)130 prnum(
131 const char *var,
132 long val)
133 {
134 static char number[NUM_STR_SIZE];
135 size_t new_len;
136
137 g_snprintf(number, SIZEOF(number), "%ld", val);
138 new_len = strlen(var)
139 + SIZEOF("=")
140 + strlen(number)
141 + 1;
142 if(new_len > buf_len) {
143 free(buf);
144 buf_len = new_len;
145 buf = malloc(new_len); /* let it die if malloc() fails */
146 if (!buf) {
147 g_fprintf(stderr, _("genversion: Not enough memory"));
148 abort();
149 /*NOTREACHED*/
150 }
151 }
152 g_snprintf(buf, buf_len, "%s=%s", var, number); /* safe */
153 prstr(buf);
154 }
155
156 int
main(int argc,char ** argv)157 main(
158 int argc,
159 char ** argv)
160 {
161 const char *v;
162 char *verstr;
163 size_t v_len;
164
165 (void)argc; /* Quiet unused parameter warning */
166 (void)argv; /* Quiet unused parameter warning */
167
168 /*
169 * Configure program for internationalization:
170 * 1) Only set the message locale for now.
171 * 2) Set textdomain for all amanda related programs to "amanda"
172 * We don't want to be forced to support dozens of message catalogs.
173 */
174 setlocale(LC_MESSAGES, "C");
175 textdomain("amanda");
176
177 g_printf(_("/* version.c - generated by genversion.c - DO NOT EDIT! */\n"));
178 g_printf("const char * const version_info[] = {\n");
179
180 startline("build:");
181 v = VERSION;
182 v_len = SIZEOF("Amanda-") + strlen(v) + 1;
183 verstr = malloc(v_len);
184 if (!verstr) {
185 g_fprintf(stderr, _("genversion: Not enough memory"));
186 abort();
187 /*NOTREACHED*/
188 }
189 g_snprintf(verstr, v_len, "Amanda-%s", v); /* safe */
190 prvar("VERSION", verstr);
191 free(verstr);
192
193 #ifdef BUILT_DATE
194 prvar("BUILT_DATE", BUILT_DATE);
195 #else
196 prundefvar("BUILT_DATE");
197 #endif
198
199 #ifdef BUILT_MACH
200 prvar("BUILT_MACH", BUILT_MACH);
201 #else
202 prundefvar("BUILT_MACH");
203 #endif
204
205 #ifdef BUILT_REV
206 prvar("BUILT_REV", BUILT_REV);
207 #else
208 prundefvar("BUILT_REV");
209 #endif
210
211 #ifdef BUILT_BRANCH
212 prvar("BUILT_BRANCH", BUILT_BRANCH);
213 #else
214 prundefvar("BUILT_BRANCH");
215 #endif
216
217 #ifdef CC
218 prvar("CC", CC);
219 #else
220 prundefvar("CC");
221 #endif
222
223 endline();
224
225 startline("paths:");
226
227 prvar("bindir", bindir);
228 prvar("sbindir", sbindir);
229 prvar("libexecdir", libexecdir);
230 prvar("amlibexecdir", amlibexecdir);
231 prvar("mandir", mandir);
232 prvar("AMANDA_TMPDIR", AMANDA_TMPDIR);
233 #ifdef AMANDA_DBGDIR
234 prvar("AMANDA_DBGDIR", AMANDA_DBGDIR);
235 #else
236 prundefvar("AMANDA_DBGDIR");
237 #endif
238 prvar("CONFIG_DIR", CONFIG_DIR);
239
240 #ifdef DEV_PREFIX
241 prvar("DEV_PREFIX", DEV_PREFIX);
242 #else
243 prundefvar("DEV_PREFIX");
244 #endif
245
246 #ifdef RDEV_PREFIX
247 prvar("RDEV_PREFIX", RDEV_PREFIX);
248 #else
249 prundefvar("RDEV_PREFIX");
250 #endif
251
252 #ifdef DUMP
253 prvar("DUMP", DUMP);
254 prvar("RESTORE", RESTORE);
255 #else
256 prundefvar("DUMP");
257 prundefvar("RESTORE");
258 #endif
259
260 #ifdef VDUMP
261 prvar("VDUMP", VDUMP);
262 prvar("VRESTORE", VRESTORE);
263 #else
264 prundefvar("VDUMP");
265 prundefvar("VRESTORE");
266 #endif
267
268 #ifdef XFSDUMP
269 prvar("XFSDUMP", XFSDUMP);
270 prvar("XFSRESTORE", XFSRESTORE);
271 #else
272 prundefvar("XFSDUMP");
273 prundefvar("XFSRESTORE");
274 #endif
275
276 #ifdef VXDUMP
277 prvar("VXDUMP", VXDUMP);
278 prvar("VXRESTORE", VXRESTORE);
279 #else
280 prundefvar("VXDUMP");
281 prundefvar("VXRESTORE");
282 #endif
283
284 #ifdef SAMBA_CLIENT
285 prvar("SAMBA_CLIENT", SAMBA_CLIENT);
286 #else
287 prundefvar("SAMBA_CLIENT");
288 #endif
289
290 #ifdef GNUTAR
291 prvar("GNUTAR", GNUTAR);
292 #else
293 prundefvar("GNUTAR");
294 #endif
295
296 #ifdef COMPRESS_PATH
297 prvar("COMPRESS_PATH", COMPRESS_PATH);
298 #else
299 prundefvar("COMPRESS_PATH");
300 #endif
301
302 #ifdef UNCOMPRESS_PATH
303 prvar("UNCOMPRESS_PATH", UNCOMPRESS_PATH);
304 #else
305 prundefvar("UNCOMPRESS_PATH");
306 #endif
307
308 #ifdef LPRCMD
309 prvar("LPRCMD", LPRCMD);
310 #else
311 prundefvar(" LPRCMD");
312 #endif
313
314 #ifdef MAILER
315 prvar("MAILER", MAILER);
316 #else
317 prundefvar(" MAILER");
318 #endif
319
320 #ifdef GNUTAR_LISTED_INCREMENTAL_DIR
321 prvar("listed_incr_dir", GNUTAR_LISTED_INCREMENTAL_DIR);
322 #else
323 prundefvar("GNUTAR_LISTED_INCREMENTAL_DIR");
324 #endif
325 endline();
326
327 startline("defs:");
328
329 prvar("DEFAULT_SERVER", DEFAULT_SERVER);
330 prvar("DEFAULT_CONFIG", DEFAULT_CONFIG);
331 prvar("DEFAULT_TAPE_SERVER", DEFAULT_TAPE_SERVER);
332
333 #ifdef DEFAULT_TAPE_DEVICE
334 prvar("DEFAULT_TAPE_DEVICE", DEFAULT_TAPE_DEVICE);
335 #endif
336
337 #ifdef AIX_BACKUP
338 prstr("AIX_BACKUP");
339 #endif
340
341 #ifdef BROKEN_VOID
342 prstr("BROKEN_VOID");
343 #endif
344
345 #ifdef DUMP_RETURNS_1
346 prstr("DUMP_RETURNS_1");
347 #endif
348
349 #ifdef HAVE_MMAP
350 prstr("HAVE_MMAP");
351 #endif
352
353 #ifndef HAVE_STRERROR
354 prstr("NEED_STRERROR");
355 #endif
356
357 #ifndef HAVE_STRSTR
358 prstr("NEED_STRSTR");
359 #endif
360
361 #ifdef HAVE_SYSVSHM
362 prstr("HAVE_SYSVSHM");
363 #endif
364
365 #ifdef WANT_AMFLOCK_POSIX
366 prstr("AMFLOCK_POSIX");
367 #endif
368 #ifdef WANT_AMFLOCK_FLOCK
369 prstr("AMFLOCK_FLOCK");
370 #endif
371 #ifdef WANT_AMFLOCK_LOCKF
372 prstr("AMFLOCK_LOCKF");
373 #endif
374 #ifdef WANT_AMFLOCK_LNLOCK
375 prstr("AMFLOCK_LNLOCK");
376 #endif
377
378 #ifdef STATFS_BSD
379 prstr("STATFS_BSD");
380 #endif
381
382 #ifdef STATFS_OSF1
383 prstr("STATFS_OSF1");
384 #endif
385
386 #ifdef STATFS_ULTRIX
387 prstr("STATFS_ULTRIX");
388 #endif
389
390 #ifdef SETPGRP_VOID
391 prstr("SETPGRP_VOID");
392 #endif
393
394 #ifdef ASSERTIONS
395 prstr("ASSERTIONS");
396 #endif
397
398 #ifdef AMANDA_DEBUG_DAYS
399 prnum("AMANDA_DEBUG_DAYS", AMANDA_DEBUG_DAYS);
400 #endif
401
402 #ifdef BSD_SECURITY
403 prstr("BSD_SECURITY");
404 #endif
405
406 #ifdef KRB5_SECURITY
407 prstr("KRB5_SECURITY");
408 #endif
409
410 #ifdef RSH_SECURITY
411 prstr("RSH_SECURITY");
412 #endif
413
414 #ifdef USE_AMANDAHOSTS
415 prstr("USE_AMANDAHOSTS");
416 #endif
417
418 #ifdef USE_RUNDUMP
419 prstr("USE_RUNDUMP");
420 #endif
421
422 prvar("CLIENT_LOGIN", CLIENT_LOGIN);
423
424 #ifdef CHECK_USERID
425 prstr("CHECK_USERID");
426 #endif
427
428 #ifdef HAVE_GZIP
429 prstr("HAVE_GZIP");
430 #endif
431
432 #ifdef COMPRESS_SUFFIX
433 prvar("COMPRESS_SUFFIX", COMPRESS_SUFFIX);
434 #endif
435
436 #ifdef COMPRESS_FAST_OPT
437 prvar("COMPRESS_FAST_OPT", COMPRESS_FAST_OPT);
438 #endif
439
440 #ifdef COMPRESS_BEST_OPT
441 prvar("COMPRESS_BEST_OPT", COMPRESS_BEST_OPT);
442 #endif
443
444 #ifdef UNCOMPRESS_OPT
445 prvar("UNCOMPRESS_OPT", UNCOMPRESS_OPT);
446 #endif
447
448 #ifdef CONFIGURE_ARGS
449 prvar("CONFIGURE_ARGS", CONFIGURE_ARGS);
450 #endif
451
452 endline();
453
454 g_printf(" 0\n};\n");
455
456 return (0); /* exit */
457 }
458