65bc6f9ee115d5499e17d32a00459f0d70752087
[debian/amanda] / common-src / genversion.c
1 /*
2  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3  * Copyright (c) 1991-1998 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.18.4.4.4.1.2.2 2003/10/07 17:10:08 martinea Exp $
28  *
29  * dump the current Amanda version info
30  */
31 #include "amanda.h"
32 #include "version.h"
33 #include "genversion.h"
34
35 int main P((void));
36
37 #define MARGIN  70
38
39 #define newline() do {                                                  \
40     printf("  \"%s\\n\",\n", line);                                     \
41     *line = '\0';                                                       \
42     linelen = 0;                                                        \
43 } while (0)
44
45 /* Print a string */
46 #define prstr(string) do {                                              \
47     int len = strlen(string);                                           \
48     if(linelen+len >= MARGIN) {                                         \
49         newline();                                                      \
50         ap_snprintf(line, sizeof(line), "%*s", indent, "");             \
51         linelen = indent;                                               \
52     }                                                                   \
53     line[sizeof(line)-1] = '\0';                                        \
54     strncat(line, (string), sizeof(line)-strlen(line));                 \
55     linelen += len;                                                     \
56 } while (0)
57
58 /* Print a text "variable" */
59 #define prvar(var, val) do {                                            \
60     str = newvstralloc(str, (var), "=\\\"", (val), "\\\"", NULL);       \
61     prstr(str);                                                         \
62 } while(0)
63
64 /* Print a undef "variable" */
65 #define prundefvar(var) do {                                            \
66     str = newvstralloc(str, (var), "=UNDEF", NULL);                     \
67     prstr(str);                                                         \
68 } while(0)
69
70 /* Print a numeric "variable" */
71 #define prnum(var, val) do {                                            \
72     char number[NUM_STR_SIZE];                                          \
73     ap_snprintf(number, sizeof(number), "%ld", (long)(val));            \
74     str = newvstralloc(str, (var), "=", number, NULL);                  \
75     prstr(str);                                                         \
76 } while(0)
77
78 int main()
79 {
80     char line[STR_SIZE], *str = NULL;
81     int  linelen, indent;
82     int fd;
83     unsigned long malloc_hist_1, malloc_size_1;
84     unsigned long malloc_hist_2, malloc_size_2;
85
86     for(fd = 3; fd < FD_SETSIZE; fd++) {
87         /*
88          * Make sure nobody spoofs us with a lot of extra open files
89          * that would cause an open we do to get a very high file
90          * descriptor, which in turn might be used as an index into
91          * an array (e.g. an fd_set).
92          */
93         close(fd);
94     }
95
96     set_pname("genversion");
97
98     malloc_size_1 = malloc_inuse(&malloc_hist_1);
99
100     printf("/* version.c - generated by genversion.c - DO NOT EDIT! */\n");
101     printf("char *version_info[] = {\n");
102
103     *line = '\0', linelen = 0, indent = 0;
104
105
106     prstr("build:"); indent = linelen;
107
108     {
109         char version_str[STR_SIZE];
110
111         ap_snprintf(version_str, sizeof(version_str), "Amanda-%s", version());
112         prvar(" VERSION", version_str);
113     }
114
115 #ifdef BUILT_DATE
116     prvar(" BUILT_DATE", BUILT_DATE);
117 #else
118     prundefvar(" BUILT_DATE");
119 #endif
120
121 #ifdef BUILT_MACH
122     prvar(" BUILT_MACH", BUILT_MACH);
123 #else
124     prundefvar(" BUILT_MACH");
125 #endif
126
127 #ifdef CC
128     prvar(" CC", CC);
129 #else
130     prundefvar(" CC");
131 #endif
132
133 #ifdef CONFIGURE_COMMAND
134     prvar(" CONFIGURE_COMMAND", CONFIGURE_COMMAND);
135 #else
136     prundefvar(" CONFIGURE_COMMAND");
137 #endif
138
139     newline();
140
141
142     prstr("paths:"); indent = linelen;
143
144     prvar(" bindir", bindir);
145     prvar(" sbindir", sbindir);
146     prvar(" libexecdir", libexecdir);
147     prvar(" mandir", mandir);
148     prvar(" AMANDA_TMPDIR", AMANDA_TMPDIR);
149 #ifdef AMANDA_DBGDIR
150     prvar(" AMANDA_DBGDIR", AMANDA_DBGDIR);
151 #else
152     prundefvar(" AMANDA_DBGDIR");
153 #endif
154
155     prvar(" CONFIG_DIR", CONFIG_DIR);
156
157 #ifdef DEV_PREFIX
158     prvar(" DEV_PREFIX", DEV_PREFIX);
159 #else
160     prundefvar(" DEV_PREFIX");
161 #endif
162
163 #ifdef RDEV_PREFIX
164     prvar(" RDEV_PREFIX", RDEV_PREFIX);
165 #else
166     prundefvar(" RDEV_PREFIX");
167 #endif
168
169 #ifdef DUMP
170     prvar(" DUMP", DUMP);
171     prvar(" RESTORE", RESTORE);
172 #else
173     prundefvar(" DUMP");
174     prundefvar(" RESTORE");
175 #endif
176
177 #ifdef VDUMP
178     prvar(" VDUMP", VDUMP);
179     prvar(" VRESTORE", VRESTORE);
180 #else
181     prundefvar(" VDUMP");
182     prundefvar(" VRESTORE");
183 #endif
184
185 #ifdef XFSDUMP
186     prvar(" XFSDUMP", XFSDUMP);
187     prvar(" XFSRESTORE", XFSRESTORE);
188 #else
189     prundefvar(" XFSDUMP");
190     prundefvar(" XFSRESTORE");
191 #endif
192
193 #ifdef VXDUMP
194     prvar(" VXDUMP", VXDUMP);
195     prvar(" VXRESTORE", VXRESTORE);
196 #else
197     prundefvar(" VXDUMP");
198     prundefvar(" VXRESTORE");
199 #endif
200
201 #ifdef SAMBA_CLIENT
202     prvar(" SAMBA_CLIENT", SAMBA_CLIENT);
203 #else
204     prundefvar(" SAMBA_CLIENT");
205 #endif
206
207 #ifdef GNUTAR
208     prvar(" GNUTAR", GNUTAR);
209 #else
210     prundefvar(" GNUTAR");
211 #endif
212
213 #ifdef COMPRESS_PATH
214     prvar(" COMPRESS_PATH", COMPRESS_PATH);
215 #else
216     prundefvar(" COMPRESS_PATH");
217 #endif
218
219 #ifdef UNCOMPRESS_PATH
220     prvar(" UNCOMPRESS_PATH", UNCOMPRESS_PATH);
221 #else
222     prundefvar(" UNCOMPRESS_PATH");
223 #endif
224
225 #ifdef LPRCMD
226     prvar(" LPRCMD", LPRCMD);
227 #else
228     prundefvar(" LPRCMD");
229 #endif
230
231     prvar(" MAILER", MAILER);
232
233 #ifdef GNUTAR_LISTED_INCREMENTAL_DIR
234     prvar(" listed_incr_dir", GNUTAR_LISTED_INCREMENTAL_DIR);
235 #else
236     prundefvar(" listed_incr_dir");
237 #endif
238
239     newline();
240
241
242     prstr("defs: "); indent = linelen;
243
244     prvar(" DEFAULT_SERVER", DEFAULT_SERVER);
245     prvar(" DEFAULT_CONFIG", DEFAULT_CONFIG);
246     prvar(" DEFAULT_TAPE_SERVER", DEFAULT_TAPE_SERVER);
247     prvar(" DEFAULT_TAPE_DEVICE", DEFAULT_TAPE_DEVICE);
248
249 #ifdef AIX_BACKUP
250     prstr(" AIX_BACKUP");
251 #endif
252
253 #ifdef AIX_TAPEIO
254     prstr(" AIX_TAPEIO");
255 #endif
256
257 #ifdef BROKEN_VOID
258     prstr(" BROKEN_VOID");
259 #endif
260
261 #ifdef DUMP_RETURNS_1
262     prstr(" DUMP_RETURNS_1");
263 #endif
264
265 #ifdef HAVE_MMAP
266     prstr(" HAVE_MMAP");
267 #endif
268
269 #ifndef HAVE_STRERROR
270     prstr(" NEED_STRERROR");
271 #endif
272
273 #ifndef HAVE_STRSTR
274     prstr(" NEED_STRSTR");
275 #endif
276
277 #ifdef HAVE_SYSVSHM
278     prstr(" HAVE_SYSVSHM");
279 #endif
280
281 #ifdef USE_POSIX_FCNTL
282     prstr(" LOCKING=POSIX_FCNTL");
283 #endif
284 #ifdef USE_FLOCK
285     prstr(" LOCKING=FLOCK");
286 #endif
287 #ifdef USE_LOCKF
288     prstr(" LOCKING=LOCKF");
289 #endif
290 #ifdef USE_LNLOCK
291     prstr(" LOCKING=LNLOCK");
292 #endif
293 #if !defined(USE_POSIX_FCNTL) && !defined(USE_FLOCK) && !defined(USE_LOCK) && !defined(USE_LNLOCK)
294     prstr(" LOCKING=**NONE**");
295 #endif
296
297 #ifdef STATFS_BSD
298     prstr(" STATFS_BSD");
299 #endif
300
301 #ifdef STATFS_OSF1
302     prstr(" STATFS_OSF1");
303 #endif
304
305 #ifdef STATFS_ULTRIX
306     prstr(" STATFS_ULTRIX");
307 #endif
308
309 #ifdef SETPGRP_VOID
310     prstr(" SETPGRP_VOID");
311 #endif
312
313 #ifdef ASSERTIONS
314     prstr(" ASSERTIONS");
315 #endif
316
317 #ifdef DEBUG_CODE
318     prstr(" DEBUG_CODE");
319 #endif
320
321 #ifdef AMANDA_DEBUG_DAYS
322     prnum(" AMANDA_DEBUG_DAYS", AMANDA_DEBUG_DAYS);
323 #endif
324
325 #ifdef BSD_SECURITY
326     prstr(" BSD_SECURITY");
327 #endif
328
329 #ifdef USE_AMANDAHOSTS
330     prstr(" USE_AMANDAHOSTS");
331 #endif
332
333 #ifdef USE_RUNDUMP
334     prstr(" USE_RUNDUMP");
335 #endif
336
337 #ifdef KRB4_SECURITY
338 #define HOSTNAME_INSTANCE "<hostname>"
339     {
340         char lifetime_str[NUM_STR_SIZE];
341
342         prstr(" KRB4_SECURITY");
343         prvar(" SERVER_HOST_PRINCIPLE", SERVER_HOST_PRINCIPLE);
344         prvar(" SERVER_HOST_INSTANCE", SERVER_HOST_INSTANCE);
345         prvar(" SERVER_HOST_KEY_FILE", SERVER_HOST_KEY_FILE);
346         prvar(" CLIENT_HOST_PRINCIPLE", CLIENT_HOST_PRINCIPLE);
347         prvar(" CLIENT_HOST_INSTANCE", CLIENT_HOST_INSTANCE);
348         prvar(" CLIENT_HOST_KEY_FILE", CLIENT_HOST_KEY_FILE);
349         ap_snprintf(lifetime_str, sizeof(lifetime_str), "%d", TICKET_LIFETIME);
350         prvar(" TICKET_LIFETIME", lifetime_str);
351     }
352 #endif
353
354     prvar(" CLIENT_LOGIN", CLIENT_LOGIN);
355
356 #ifdef FORCE_USERID
357     prstr(" FORCE_USERID");
358 #endif
359
360 #ifdef USE_VERSION_SUFFIXES
361     prstr(" USE_VERSION_SUFFIXES");
362 #endif
363
364 #ifdef HAVE_GZIP
365     prstr(" HAVE_GZIP");
366 #endif
367
368 #ifdef COMPRESS_SUFFIX
369     prvar(" COMPRESS_SUFFIX", COMPRESS_SUFFIX);
370 #endif
371
372 #ifdef COMPRESS_FAST_OPT
373     prvar(" COMPRESS_FAST_OPT", COMPRESS_FAST_OPT);
374 #endif
375
376 #ifdef COMPRESS_BEST_OPT
377     prvar(" COMPRESS_BEST_OPT", COMPRESS_BEST_OPT);
378 #endif
379
380 #ifdef UNCOMPRESS_OPT
381     prvar(" UNCOMPRESS_OPT", UNCOMPRESS_OPT);
382 #endif
383
384     newline();
385
386
387     printf("  0\n};\n");
388
389     amfree(str);
390
391     malloc_size_2 = malloc_inuse(&malloc_hist_2);
392
393     if(malloc_size_1 != malloc_size_2) {
394         malloc_list(fileno(stderr), malloc_hist_1, malloc_hist_2);
395     }
396
397     return 0;
398 }