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