Imported Upstream version 2.5.1
[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,v 1.36 2006/07/13 03:22:20 paddy_s Exp $
28  *
29  * dump the current Amanda version info
30  */
31 #include "amanda.h"
32 #include "version.h"
33 #include "genversion.h"
34
35 #define LMARGIN         6
36 #define RMARGIN         70
37
38 static size_t linelen;
39
40 #define startline(title)        printf("  \"%-*s", LMARGIN, title); linelen = 0
41 #define endline()               printf("\\n\",\n")
42
43 static void prstr(const char *);
44 static void prvar(const char *, const char *);
45 static void prundefvar(const char *var);
46 static void prnum(const char *var, long val);
47
48 int main(int, char **);
49
50 /* Print a string */
51 static void
52 prstr(
53     const char *string)
54 {
55     size_t len = strlen(string) + 1;
56
57     /*
58      * If this string overflows this line, and there's other stuff
59      * on the line, create a new one.
60      */
61     if (linelen > 0 && linelen + len >= RMARGIN - LMARGIN) {
62         endline();
63         startline("");
64     }
65     printf(" %s", string);
66     linelen += len;
67 }
68
69 static char *buf = NULL;
70 static size_t buf_len = 0;
71
72 /* Print a text variable */
73 static void
74 prvar(
75     const char *var,
76     const char *val)
77 {
78     size_t new_len;
79
80     new_len = strlen(var)
81               + SIZEOF("=\\\"")
82               + strlen(val)
83               + SIZEOF("\\\"")
84               + 1;
85     if(new_len > buf_len) {
86         free(buf);
87         buf_len = new_len;
88         buf = malloc(new_len);
89         if (!buf) {
90             fprintf(stderr, "genversion: Not enough memory");
91             abort();
92             /*NOTREACHED*/
93         }
94     }
95     snprintf(buf, buf_len, "%s=\\\"%s\\\"", var, val);  /* safe */
96     prstr(buf);
97 }
98
99 /* Print a undef variable */
100 static void
101 prundefvar(
102     const char *var)
103 {
104     size_t new_len;
105
106     new_len = strlen(var)
107               + SIZEOF("=UNDEF")
108               + 1;
109     if(new_len > buf_len) {
110         free(buf);
111         buf_len = new_len;
112         buf = malloc(new_len);          /* let it die if malloc() fails */
113         if (!buf) {
114             fprintf(stderr, "genversion: Not enough memory");
115             abort();
116             /*NOTREACHED*/
117         }
118     }
119     snprintf(buf, buf_len, "%s=UNDEF", var);    /* safe */
120     prstr(buf);
121 }
122
123 /* Print a numeric variable */
124 static void
125 prnum(
126     const char *var,
127     long        val)
128 {
129     static char number[NUM_STR_SIZE];
130     size_t new_len;
131
132     snprintf(number, SIZEOF(number), "%ld", val);
133     new_len = strlen(var)
134               + SIZEOF("=")
135               + strlen(number)
136               + 1;
137     if(new_len > buf_len) {
138         free(buf);
139         buf_len = new_len;
140         buf = malloc(new_len);          /* let it die if malloc() fails */
141         if (!buf) {
142             fprintf(stderr, "genversion: Not enough memory");
143             abort();
144             /*NOTREACHED*/
145         }
146     }
147     snprintf(buf, buf_len, "%s=%s", var, number);               /* safe */
148     prstr(buf);
149 }
150
151 int
152 main(
153     int         argc,
154     char **     argv)
155 {
156     const char *v;
157     char *verstr;
158     size_t v_len;
159
160     (void)argc; /* Quiet unused parameter warning */
161     (void)argv; /* Quiet unused parameter warning */
162
163     printf("/* version.c - generated by genversion.c - DO NOT EDIT! */\n");
164     printf("const char * const version_info[] = {\n");
165
166     startline("build:");
167     v = version();
168     v_len = SIZEOF("Amanda-") + strlen(v) + 1;
169     verstr = malloc(v_len);
170     if (!verstr) {
171         fprintf(stderr, "genversion: Not enough memory");
172         abort();
173         /*NOTREACHED*/
174     }
175     snprintf(verstr, v_len, "Amanda-%s", v);            /* safe */
176     prvar("VERSION", verstr);
177     free(verstr);
178
179 #ifdef BUILT_DATE
180     prvar("BUILT_DATE", BUILT_DATE);
181 #else
182     prundefvar("BUILT_DATE");
183 #endif
184
185 #ifdef BUILT_MACH
186     prvar("BUILT_MACH", BUILT_MACH);
187 #else
188     prundefvar("BUILT_MACH");
189 #endif
190
191 #ifdef CC
192     prvar("CC", CC);
193 #else
194     prundefvar("CC");
195 #endif
196
197 #ifdef CC
198     prvar("CONFIGURE_COMMAND", CONFIGURE_COMMAND);
199 #else
200     prundefvar("CONFIGURE_COMMAND");
201 #endif
202
203     endline();
204
205     startline("paths:");
206
207     prvar("bindir", bindir);
208     prvar("sbindir", sbindir);
209     prvar("libexecdir", libexecdir);
210     prvar("mandir", mandir);
211     prvar("AMANDA_TMPDIR", AMANDA_TMPDIR);
212 #ifdef AMANDA_DBGDIR
213     prvar("AMANDA_DBGDIR", AMANDA_DBGDIR);
214 #else
215     prundefvar("AMANDA_DBGDIR");
216 #endif
217     prvar("CONFIG_DIR", CONFIG_DIR);
218
219 #ifdef DEV_PREFIX
220     prvar("DEV_PREFIX", DEV_PREFIX);
221 #else
222     prundefvar("DEV_PREFIX");
223 #endif
224
225 #ifdef RDEV_PREFIX
226     prvar("RDEV_PREFIX", RDEV_PREFIX);
227 #else
228     prundefvar("RDEV_PREFIX");
229 #endif
230
231 #ifdef DUMP
232     prvar("DUMP", DUMP);
233     prvar("RESTORE", RESTORE);
234 #else
235     prundefvar("DUMP");
236     prundefvar("RESTORE");
237 #endif
238
239 #ifdef VDUMP
240     prvar("VDUMP", VDUMP);
241     prvar("VRESTORE", VRESTORE);
242 #else
243     prundefvar("VDUMP");
244     prundefvar("VRESTORE");
245 #endif
246
247 #ifdef XFSDUMP
248     prvar("XFSDUMP", XFSDUMP);
249     prvar("XFSRESTORE", XFSRESTORE);
250 #else
251     prundefvar("XFSDUMP");
252     prundefvar("XFSRESTORE");
253 #endif
254
255 #ifdef VXDUMP
256     prvar("VXDUMP", VXDUMP);
257     prvar("VXRESTORE", VXRESTORE);
258 #else
259     prundefvar("VXDUMP");
260     prundefvar("VXRESTORE");
261 #endif
262
263 #ifdef SAMBA_CLIENT
264     prvar("SAMBA_CLIENT", SAMBA_CLIENT);
265 #else
266     prundefvar("SAMBA_CLIENT");
267 #endif
268
269 #ifdef GNUTAR
270     prvar("GNUTAR", GNUTAR);
271 #else
272     prundefvar("GNUTAR");
273 #endif
274
275 #ifdef COMPRESS_PATH
276     prvar("COMPRESS_PATH", COMPRESS_PATH);
277 #else
278     prundefvar("COMPRESS_PATH");
279 #endif
280
281 #ifdef UNCOMPRESS_PATH
282     prvar("UNCOMPRESS_PATH", UNCOMPRESS_PATH);
283 #else
284     prundefvar("UNCOMPRESS_PATH");
285 #endif
286
287 #ifdef LPRCMD
288     prvar("LPRCMD", LPRCMD);
289 #else
290     prundefvar(" LPRCMD");
291 #endif
292
293     prvar("MAILER", MAILER);
294
295 #ifdef GNUTAR_LISTED_INCREMENTAL_DIR
296     prvar("listed_incr_dir", GNUTAR_LISTED_INCREMENTAL_DIR);
297 #else
298     prundefvar("GNUTAR_LISTED_INCREMENTAL_DIR");
299 #endif
300     endline();
301
302     startline("defs:");
303
304     prvar("DEFAULT_SERVER", DEFAULT_SERVER);
305     prvar("DEFAULT_CONFIG", DEFAULT_CONFIG);
306     prvar("DEFAULT_TAPE_SERVER", DEFAULT_TAPE_SERVER);
307
308 #ifdef DEFAULT_TAPE_DEVICE
309     prvar("DEFAULT_TAPE_DEVICE", DEFAULT_TAPE_DEVICE);
310 #endif
311
312 #ifdef AIX_BACKUP
313     prstr("AIX_BACKUP");
314 #endif
315
316 #ifdef AIX_TAPEIO
317     prstr("AIX_TAPEIO");
318 #endif
319
320 #ifdef BROKEN_VOID
321     prstr("BROKEN_VOID");
322 #endif
323
324 #ifdef DUMP_RETURNS_1
325     prstr("DUMP_RETURNS_1");
326 #endif
327
328 #ifdef HAVE_MMAP
329     prstr("HAVE_MMAP");
330 #endif
331
332 #ifndef HAVE_STRERROR
333     prstr("NEED_STRERROR");
334 #endif
335
336 #ifndef HAVE_STRSTR
337     prstr("NEED_STRSTR");
338 #endif
339
340 #ifdef HAVE_SYSVSHM
341     prstr("HAVE_SYSVSHM");
342 #endif
343
344 #ifdef USE_POSIX_FCNTL
345     prstr("LOCKING=POSIX_FCNTL");
346 #endif
347 #ifdef USE_FLOCK
348     prstr("LOCKING=FLOCK");
349 #endif
350 #ifdef USE_LOCKF
351     prstr("LOCKING=LOCKF");
352 #endif
353 #ifdef USE_LNLOCK
354     prstr("LOCKING=LNLOCK");
355 #endif
356 #if !defined(USE_POSIX_FCNTL) && !defined(USE_FLOCK) && !defined(USE_LOCK) && !defined(USE_LNLOCK)
357     prstr("LOCKING=**NONE**");
358 #endif
359
360 #ifdef STATFS_BSD
361     prstr("STATFS_BSD");
362 #endif
363
364 #ifdef STATFS_OSF1
365     prstr("STATFS_OSF1");
366 #endif
367
368 #ifdef STATFS_ULTRIX
369     prstr("STATFS_ULTRIX");
370 #endif
371
372 #ifdef SETPGRP_VOID
373     prstr("SETPGRP_VOID");
374 #endif
375
376 #ifdef ASSERTIONS
377     prstr("ASSERTIONS");
378 #endif
379
380 #ifdef DEBUG_CODE
381     prstr("DEBUG_CODE");
382 #endif
383
384 #ifdef AMANDA_DEBUG_DAYS
385     prnum("AMANDA_DEBUG_DAYS", AMANDA_DEBUG_DAYS);
386 #endif
387
388 #ifdef BSD_SECURITY
389     prstr("BSD_SECURITY");
390 #endif
391
392 #ifdef KRB4_SECURITY
393     prstr("KRB4_SECURITY");
394 #endif
395
396 #ifdef KRB5_SECURITY
397     prstr("KRB5_SECURITY");
398 #endif
399
400 #ifdef RSH_SECURITY
401     prstr("RSH_SECURITY");
402 #endif
403
404 #ifdef USE_AMANDAHOSTS
405     prstr("USE_AMANDAHOSTS");
406 #endif
407
408 #ifdef USE_RUNDUMP
409     prstr("USE_RUNDUMP");
410 #endif
411
412     prvar("CLIENT_LOGIN", CLIENT_LOGIN);
413
414 #ifdef FORCE_USERID
415     prstr("FORCE_USERID");
416 #endif
417
418 #ifdef USE_VERSION_SUFFIXES
419     prstr("USE_VERSION_SUFFIXES");
420 #endif
421
422 #ifdef HAVE_GZIP
423     prstr("HAVE_GZIP");
424 #endif
425
426 #ifdef COMPRESS_SUFFIX
427     prvar("COMPRESS_SUFFIX", COMPRESS_SUFFIX);
428 #endif
429
430 #ifdef COMPRESS_FAST_OPT
431     prvar("COMPRESS_FAST_OPT", COMPRESS_FAST_OPT);
432 #endif
433
434 #ifdef COMPRESS_BEST_OPT
435     prvar("COMPRESS_BEST_OPT", COMPRESS_BEST_OPT);
436 #endif
437
438 #ifdef UNCOMPRESS_OPT
439     prvar("UNCOMPRESS_OPT", UNCOMPRESS_OPT);
440 #endif
441
442     endline();
443
444     printf("  0\n};\n");
445
446     return (0); /* exit */
447 }