Imported Upstream version 3.3.3
[debian/amanda] / common-src / genversion.c
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-2012 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 4946 2012-10-18 11:15:16Z 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
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
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
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
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
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     endline();
449
450     g_printf("  0\n};\n");
451
452     return (0); /* exit */
453 }