/[MITgcm]/MITgcm/tools/cyrus-imapd-makedepend/main.c
ViewVC logotype

Annotation of /MITgcm/tools/cyrus-imapd-makedepend/main.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (hide annotations) (download)
Mon Apr 6 21:17:32 2009 UTC (15 years ago) by jahn
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint62, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y, HEAD
Changes since 1.2: +1 -1 lines
File MIME type: text/plain
rename getline -> getppline to avoid conflict with stdio.h in gcc 4.4

1 edhill 1.1 /* $XConsortium: main.c,v 1.83 94/04/17 20:10:36 gildea Exp $ */
2     /*
3     * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without
6     * modification, are permitted provided that the following conditions
7     * are met:
8     *
9     * 1. Redistributions of source code must retain the above copyright
10     * notice, this list of conditions and the following disclaimer.
11     *
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in
14     * the documentation and/or other materials provided with the
15     * distribution.
16     *
17     * 3. The name "Carnegie Mellon University" must not be used to
18     * endorse or promote products derived from this software without
19     * prior written permission. For permission or any other legal
20     * details, please contact
21     * Office of Technology Transfer
22     * Carnegie Mellon University
23     * 5000 Forbes Avenue
24     * Pittsburgh, PA 15213-3890
25     * (412) 268-4387, fax: (412) 268-7395
26     * tech-transfer@andrew.cmu.edu
27     *
28     * 4. Redistributions of any form whatsoever must retain the following
29     * acknowledgment:
30     * "This product includes software developed by Computing Services
31     * at Carnegie Mellon University (http://www.cmu.edu/computing/)."
32     *
33     * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
34     * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
35     * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
36     * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
37     * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
38     * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
39     * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
40     *
41     */
42    
43     /*
44    
45     Copyright (c) 1993, 1994 X Consortium
46    
47     Permission is hereby granted, free of charge, to any person obtaining a copy
48     of this software and associated documentation files (the "Software"), to deal
49     in the Software without restriction, including without limitation the rights
50     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
51     copies of the Software, and to permit persons to whom the Software is
52     furnished to do so, subject to the following conditions:
53    
54     The above copyright notice and this permission notice shall be included in
55     all copies or substantial portions of the Software.
56    
57     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
58     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
59     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
60     X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
61     AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
62     CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
63    
64     Except as contained in this notice, the name of the X Consortium shall not be
65     used in advertising or otherwise to promote the sale, use or other dealings
66     in this Software without prior written authorization from the X Consortium.
67    
68     */
69    
70     #include "def.h"
71     #ifdef hpux
72     #define sigvec sigvector
73     #endif /* hpux */
74    
75     #include <signal.h>
76    
77     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
78     #include <stdarg.h>
79     #endif
80    
81     #ifdef DEBUG
82     int _debugmask;
83     #endif
84    
85     char *ProgramName;
86    
87     char *directives[] = {
88     "if",
89     "ifdef",
90     "ifndef",
91     "else",
92     "endif",
93     "define",
94     "undef",
95     "include",
96     "line",
97     "pragma",
98     "error",
99     "ident",
100     "sccs",
101     "elif",
102     "eject",
103     NULL
104     };
105    
106     struct symtab predefs[] = {
107     #ifdef apollo
108     {"apollo", "1"},
109     #endif
110     #ifdef ibm032
111     {"ibm032", "1"},
112     #endif
113     #ifdef sun
114     {"sun", "1"},
115     #ifdef sparc
116     {"sparc", "1"},
117     #endif
118     #endif
119     #ifdef solaris20
120     {"solaris20", "1"},
121     #endif
122     #ifdef __i386
123     {"__i386", "1"},
124     #endif
125     #ifdef hpux
126     {"hpux", "1"},
127     #endif
128     #ifdef vax
129     {"vax", "1"},
130     #endif
131     #ifdef VMS
132     {"VMS", "1"},
133     #endif
134     #ifdef ultrix
135     {"ultrix", "1"},
136     #endif
137     #ifdef mips
138     {"mips", "1"},
139     #endif
140     #ifdef __SCO__
141     {"__SCO__", "1"},
142     #endif
143     #ifdef __DGUX
144     {"__DGUX", "1"},
145     #endif
146     #ifdef __DGUX__
147     {"__DGUX__", "1"},
148     #endif
149     #ifdef __m88k__
150     {"__m88k__", "1"},
151     #endif
152     {NULL, NULL}
153     };
154     #define OBJSUFFIX ".o"
155     #define INCLUDEDIR "/usr/include"
156    
157     struct inclist inclist[ MAXFILES ],
158     *inclistp = inclist,
159     maininclist;
160    
161     char *filelist[ MAXFILES ];
162     char *includedirs[ MAXDIRS + 1 ];
163     char *notdotdot[ MAXDIRS ];
164     char *objprefix = "";
165     char *objsuffix = OBJSUFFIX;
166     char *startat = "# DO NOT DELETE";
167     int width = 78;
168     boolean append = FALSE;
169     boolean printed = FALSE;
170     boolean verbose = FALSE;
171     boolean show_where_not = FALSE;
172     boolean warn_multiple = FALSE; /* Warn on multiple includes of same file */
173    
174     static
175     #ifdef SIGNALRETURNSINT
176     int
177     #else
178     void
179     #endif
180     catch (sig)
181     int sig;
182     {
183     fflush (stdout);
184     fatalerr ("got signal %d\n", sig);
185     }
186    
187     #if defined(USG) || (defined(SYSV386) && defined(SYSV)) || defined(WIN32) || defined(__i386)
188     #define USGISH
189     #endif
190    
191 edhill 1.2 #ifdef sparc
192     #define USGISH
193     #endif
194    
195 edhill 1.1 #ifndef USGISH
196     #ifndef _POSIX_SOURCE
197     #define sigaction sigvec
198     #define sa_handler sv_handler
199     #define sa_mask sv_mask
200     #define sa_flags sv_flags
201     #endif
202     struct sigaction sig_act;
203     #endif /* USGISH */
204    
205     main(argc, argv)
206     int argc;
207     char **argv;
208     {
209     register char **fp = filelist;
210     register char **incp = includedirs;
211     register char *p;
212     register struct inclist *ip;
213     char *makefile = NULL;
214     struct filepointer *filecontent;
215     struct symtab *psymp = predefs;
216     char *endmarker = NULL;
217     char *defincdir = NULL;
218    
219     ProgramName = argv[0];
220    
221     while (psymp->s_name)
222     {
223     define2(psymp->s_name, psymp->s_value, &maininclist);
224     psymp++;
225     }
226     if (argc == 2 && argv[1][0] == '@') {
227     struct stat ast;
228     int afd;
229     char *args;
230     char **nargv;
231     int nargc;
232     char quotechar = '\0';
233    
234     nargc = 1;
235     if ((afd = open(argv[1]+1, O_RDONLY)) < 0)
236     fatalerr("cannot open \"%s\"\n", argv[1]+1);
237     fstat(afd, &ast);
238     args = (char *)malloc(ast.st_size + 1);
239     if ((ast.st_size = read(afd, args, ast.st_size)) < 0)
240     fatalerr("failed to read %s\n", argv[1]+1);
241     args[ast.st_size] = '\0';
242     close(afd);
243     for (p = args; *p; p++) {
244     if (quotechar) {
245     if (quotechar == '\\' ||
246     (*p == quotechar && p[-1] != '\\'))
247     quotechar = '\0';
248     continue;
249     }
250     switch (*p) {
251     case '\\':
252     case '"':
253     case '\'':
254     quotechar = *p;
255     break;
256     case ' ':
257     case '\n':
258     *p = '\0';
259     if (p > args && p[-1])
260     nargc++;
261     break;
262     }
263     }
264     if (p[-1])
265     nargc++;
266     nargv = (char **)malloc(nargc * sizeof(char *));
267     nargv[0] = argv[0];
268     argc = 1;
269     for (p = args; argc < nargc; p += strlen(p) + 1)
270     if (*p) nargv[argc++] = p;
271     argv = nargv;
272     }
273     for(argc--, argv++; argc; argc--, argv++) {
274     /* if looking for endmarker then check before parsing */
275     if (endmarker && strcmp (endmarker, *argv) == 0) {
276     endmarker = NULL;
277     continue;
278     }
279     if (**argv != '-') {
280     /* treat +thing as an option for C++ */
281     if (endmarker && **argv == '+')
282     continue;
283     *fp++ = argv[0];
284     continue;
285     }
286     switch(argv[0][1]) {
287     case '-':
288     endmarker = &argv[0][2];
289     if (endmarker[0] == '\0') endmarker = "--";
290     break;
291     case 'D':
292     if (argv[0][2] == '\0') {
293     argv++;
294     argc--;
295     }
296     for (p=argv[0] + 2; *p ; p++)
297     if (*p == '=') {
298     *p = ' ';
299     break;
300     }
301     define(argv[0] + 2, &maininclist);
302     break;
303     case 'I':
304     if (incp >= includedirs + MAXDIRS)
305     fatalerr("Too many -I flags.\n");
306     *incp++ = argv[0]+2;
307     if (**(incp-1) == '\0') {
308     *(incp-1) = *(++argv);
309     argc--;
310     }
311     break;
312     case 'Y':
313     defincdir = argv[0]+2;
314     break;
315     /* do not use if endmarker processing */
316     case 'a':
317     if (endmarker) break;
318     append = TRUE;
319     break;
320     case 'w':
321     if (endmarker) break;
322     if (argv[0][2] == '\0') {
323     argv++;
324     argc--;
325     width = atoi(argv[0]);
326     } else
327     width = atoi(argv[0]+2);
328     break;
329     case 'o':
330     if (endmarker) break;
331     if (argv[0][2] == '\0') {
332     argv++;
333     argc--;
334     objsuffix = argv[0];
335     } else
336     objsuffix = argv[0]+2;
337     break;
338     case 'p':
339     if (endmarker) break;
340     if (argv[0][2] == '\0') {
341     argv++;
342     argc--;
343     objprefix = argv[0];
344     } else
345     objprefix = argv[0]+2;
346     break;
347     case 'v':
348     if (endmarker) break;
349     verbose = TRUE;
350     #ifdef DEBUG
351     if (argv[0][2])
352     _debugmask = atoi(argv[0]+2);
353     #endif
354     break;
355     case 's':
356     if (endmarker) break;
357     startat = argv[0]+2;
358     if (*startat == '\0') {
359     startat = *(++argv);
360     argc--;
361     }
362     if (*startat != '#')
363     fatalerr("-s flag's value should start %s\n",
364     "with '#'.");
365     break;
366     case 'f':
367     if (endmarker) break;
368     makefile = argv[0]+2;
369     if (*makefile == '\0') {
370     makefile = *(++argv);
371     argc--;
372     }
373     break;
374    
375     case 'm':
376     warn_multiple = TRUE;
377     break;
378    
379     /* Ignore -O, -g so we can just pass ${CFLAGS} to
380     makedepend
381     */
382     case 'O':
383     case 'g':
384     break;
385     default:
386     if (endmarker) break;
387     /* fatalerr("unknown opt = %s\n", argv[0]); */
388     warning("ignoring option %s\n", argv[0]);
389     }
390     }
391     if (!defincdir) {
392     #ifdef PREINCDIR
393     if (incp >= includedirs + MAXDIRS)
394     fatalerr("Too many -I flags.\n");
395     *incp++ = PREINCDIR;
396     #endif
397     if (incp >= includedirs + MAXDIRS)
398     fatalerr("Too many -I flags.\n");
399     *incp++ = INCLUDEDIR;
400     #ifdef POSTINCDIR
401     if (incp >= includedirs + MAXDIRS)
402     fatalerr("Too many -I flags.\n");
403     *incp++ = POSTINCDIR;
404     #endif
405     } else if (*defincdir) {
406     if (incp >= includedirs + MAXDIRS)
407     fatalerr("Too many -I flags.\n");
408     *incp++ = defincdir;
409     }
410    
411     redirect(startat, makefile);
412    
413     /*
414     * catch signals.
415     */
416     #ifdef USGISH
417     /* should really reset SIGINT to SIG_IGN if it was. */
418     #ifdef SIGHUP
419     signal (SIGHUP, catch);
420     #endif
421     signal (SIGINT, catch);
422     #ifdef SIGQUIT
423     signal (SIGQUIT, catch);
424     #endif
425     signal (SIGILL, catch);
426     #ifdef SIGBUS
427     signal (SIGBUS, catch);
428     #endif
429     signal (SIGSEGV, catch);
430     #ifdef SIGSYS
431     signal (SIGSYS, catch);
432     #endif
433     #else
434     sig_act.sa_handler = catch;
435     #ifdef _POSIX_SOURCE
436     sigemptyset(&sig_act.sa_mask);
437     sigaddset(&sig_act.sa_mask, SIGINT);
438     sigaddset(&sig_act.sa_mask, SIGQUIT);
439     #ifdef SIGBUS
440     sigaddset(&sig_act.sa_mask, SIGBUS);
441     #endif
442     sigaddset(&sig_act.sa_mask, SIGILL);
443     sigaddset(&sig_act.sa_mask, SIGSEGV);
444     sigaddset(&sig_act.sa_mask, SIGHUP);
445     sigaddset(&sig_act.sa_mask, SIGPIPE);
446     #ifdef SIGSYS
447     sigaddset(&sig_act.sa_mask, SIGSYS);
448     #endif
449     #else
450     sig_act.sa_mask = ((1<<(SIGINT -1))
451     |(1<<(SIGQUIT-1))
452     #ifdef SIGBUS
453     |(1<<(SIGBUS-1))
454     #endif
455     |(1<<(SIGILL-1))
456     |(1<<(SIGSEGV-1))
457     |(1<<(SIGHUP-1))
458     |(1<<(SIGPIPE-1))
459     #ifdef SIGSYS
460     |(1<<(SIGSYS-1))
461     #endif
462     );
463     #endif /* _POSIX_SOURCE */
464     sig_act.sa_flags = 0;
465     sigaction(SIGHUP, &sig_act, (struct sigaction *)0);
466     sigaction(SIGINT, &sig_act, (struct sigaction *)0);
467     sigaction(SIGQUIT, &sig_act, (struct sigaction *)0);
468     sigaction(SIGILL, &sig_act, (struct sigaction *)0);
469     #ifdef SIGBUS
470     sigaction(SIGBUS, &sig_act, (struct sigaction *)0);
471     #endif
472     sigaction(SIGSEGV, &sig_act, (struct sigaction *)0);
473     #ifdef SIGSYS
474     sigaction(SIGSYS, &sig_act, (struct sigaction *)0);
475     #endif
476     #endif /* USGISH */
477    
478     /*
479     * now peruse through the list of files.
480     */
481     for(fp=filelist; *fp; fp++) {
482     filecontent = getfile(*fp);
483     ip = newinclude(*fp, (char *)NULL);
484    
485     find_includes(filecontent, ip, ip, 0, FALSE);
486     freefile(filecontent);
487     recursive_pr_include(ip, ip->i_file, base_name(*fp));
488     inc_clean();
489     }
490     if (printed)
491     printf("\n");
492     exit(0);
493     }
494    
495     struct filepointer *getfile(file)
496     char *file;
497     {
498     register int fd;
499     struct filepointer *content;
500     struct stat st;
501    
502     content = (struct filepointer *)malloc(sizeof(struct filepointer));
503     if ((fd = open(file, O_RDONLY)) < 0) {
504     warning("cannot open \"%s\"\n", file);
505     content->f_p = content->f_base = content->f_end = (char *)malloc(1);
506     *content->f_p = '\0';
507     return(content);
508     }
509     fstat(fd, &st);
510     content->f_base = (char *)malloc(st.st_size+1);
511     if (content->f_base == NULL)
512     fatalerr("cannot allocate mem\n");
513     if ((st.st_size = read(fd, content->f_base, st.st_size)) < 0)
514     fatalerr("failed to read %s\n", file);
515     close(fd);
516     content->f_len = st.st_size+1;
517     content->f_p = content->f_base;
518     content->f_end = content->f_base + st.st_size;
519     *content->f_end = '\0';
520     content->f_line = 0;
521     return(content);
522     }
523    
524     freefile(fp)
525     struct filepointer *fp;
526     {
527     free(fp->f_base);
528     free(fp);
529     }
530    
531     char *copy(str)
532     register char *str;
533     {
534     register char *p = (char *)malloc(strlen(str) + 1);
535    
536     strcpy(p, str);
537     return(p);
538     }
539    
540     match(str, list)
541     register char *str, **list;
542     {
543     register int i;
544    
545     for (i=0; *list; i++, list++)
546     if (strcmp(str, *list) == 0)
547     return(i);
548     return(-1);
549     }
550    
551     /*
552     * Get the next line. We only return lines beginning with '#' since that
553     * is all this program is ever interested in.
554     */
555 jahn 1.3 char *getppline(filep)
556 edhill 1.1 register struct filepointer *filep;
557     {
558     register char *p, /* walking pointer */
559     *eof, /* end of file pointer */
560     *bol; /* beginning of line pointer */
561     register lineno; /* line number */
562    
563     p = filep->f_p;
564     eof = filep->f_end;
565     if (p >= eof)
566     return((char *)NULL);
567     lineno = filep->f_line;
568    
569     for(bol = p--; ++p < eof; ) {
570     if (*p == '/' && *(p+1) == '*') { /* consume comments */
571     *p++ = ' ', *p++ = ' ';
572     while (*p) {
573     if (*p == '*' && *(p+1) == '/') {
574     *p++ = ' ', *p = ' ';
575     break;
576     }
577     else if (*p == '\n')
578     lineno++;
579     *p++ = ' ';
580     }
581     continue;
582     }
583     #ifdef WIN32
584     else if (*p == '/' && *(p+1) == '/') { /* consume comments */
585     *p++ = ' ', *p++ = ' ';
586     while (*p && *p != '\n')
587     *p++ = ' ';
588     lineno++;
589     continue;
590     }
591     #endif
592     else if (*p == '\\') {
593     if (*(p+1) == '\n') {
594     *p = ' ';
595     *(p+1) = ' ';
596     lineno++;
597     }
598     }
599     else if (*p == '\n') {
600     lineno++;
601     if (*bol == '#') {
602     register char *cp;
603    
604     *p++ = '\0';
605     /* punt lines with just # (yacc generated) */
606     for (cp = bol+1;
607     *cp && (*cp == ' ' || *cp == '\t'); cp++);
608     if (*cp) goto done;
609     }
610     bol = p+1;
611     }
612     }
613     if (*bol != '#')
614     bol = NULL;
615     done:
616     filep->f_p = p;
617     filep->f_line = lineno;
618     return(bol);
619     }
620    
621     /*
622     * Strip the file name down to what we want to see in the Makefile.
623     * It will have objprefix and objsuffix around it.
624     */
625     char *base_name(file)
626     register char *file;
627     {
628     register char *p;
629    
630     file = copy(file);
631     for(p=file+strlen(file); p>file && *p != '.'; p--) ;
632    
633     if (*p == '.')
634     *p = '\0';
635     return(file);
636     }
637    
638     #if defined(USG) && !defined(CRAY) && !defined(SVR4)
639     int rename (from, to)
640     char *from, *to;
641     {
642     (void) unlink (to);
643     if (link (from, to) == 0) {
644     unlink (from);
645     return 0;
646     } else {
647     return -1;
648     }
649     }
650     #endif /* USGISH */
651    
652     redirect(line, makefile)
653     char *line,
654     *makefile;
655     {
656     struct stat st;
657     FILE *fdin, *fdout;
658     char backup[ BUFSIZ ],
659     buf[ BUFSIZ ];
660     boolean found = FALSE;
661     int len;
662    
663     /*
664     * if makefile is "-" then let it pour onto stdout.
665     */
666     if (makefile && *makefile == '-' && *(makefile+1) == '\0')
667     return;
668    
669     /*
670     * use a default makefile is not specified.
671     */
672     if (!makefile) {
673     if (stat("Makefile", &st) == 0)
674     makefile = "Makefile";
675     else if (stat("makefile", &st) == 0)
676     makefile = "makefile";
677     else
678     fatalerr("[mM]akefile is not present\n");
679     }
680     else
681     stat(makefile, &st);
682     if ((fdin = fopen(makefile, "r")) == NULL)
683     fatalerr("cannot open \"%s\"\n", makefile);
684     sprintf(backup, "%s.bak", makefile);
685     unlink(backup);
686     #ifdef WIN32
687     fclose(fdin);
688     #endif
689     if (rename(makefile, backup) < 0)
690     fatalerr("cannot rename %s to %s\n", makefile, backup);
691     #ifdef WIN32
692     if ((fdin = fopen(backup, "r")) == NULL)
693     fatalerr("cannot open \"%s\"\n", backup);
694     #endif
695     if ((fdout = freopen(makefile, "w", stdout)) == NULL)
696     fatalerr("cannot open \"%s\"\n", backup);
697     len = strlen(line);
698     while (!found && fgets(buf, BUFSIZ, fdin)) {
699     if (*buf == '#' && strncmp(line, buf, len) == 0)
700     found = TRUE;
701     fputs(buf, fdout);
702     }
703     if (!found) {
704     if (verbose)
705     warning("Adding new delimiting line \"%s\" and dependencies...\n",
706     line);
707     puts(line); /* same as fputs(fdout); but with newline */
708     } else if (append) {
709     while (fgets(buf, BUFSIZ, fdin)) {
710     fputs(buf, fdout);
711     }
712     }
713     fflush(fdout);
714     #if defined(USGISH) || defined(_SEQUENT_)
715     chmod(makefile, st.st_mode);
716     #else
717     fchmod(fileno(fdout), st.st_mode);
718     #endif /* USGISH */
719     }
720    
721     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
722     fatalerr(char *msg, ...)
723     #else
724     /*VARARGS*/
725     fatalerr(msg,x1,x2,x3,x4,x5,x6,x7,x8,x9)
726     char *msg;
727     #endif
728     {
729     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
730     va_list args;
731     #endif
732     fprintf(stderr, "%s: error: ", ProgramName);
733     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
734     va_start(args, msg);
735     vfprintf(stderr, msg, args);
736     va_end(args);
737     #else
738     fprintf(stderr, msg,x1,x2,x3,x4,x5,x6,x7,x8,x9);
739     #endif
740     exit (1);
741     }
742    
743     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
744     warning(char *msg, ...)
745     #else
746     /*VARARGS0*/
747     warning(msg,x1,x2,x3,x4,x5,x6,x7,x8,x9)
748     char *msg;
749     #endif
750     {
751     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
752     va_list args;
753     #endif
754     fprintf(stderr, "%s: warning: ", ProgramName);
755     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
756     va_start(args, msg);
757     vfprintf(stderr, msg, args);
758     va_end(args);
759     #else
760     fprintf(stderr, msg,x1,x2,x3,x4,x5,x6,x7,x8,x9);
761     #endif
762     }
763    
764     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
765     warning1(char *msg, ...)
766     #else
767     /*VARARGS0*/
768     warning1(msg,x1,x2,x3,x4,x5,x6,x7,x8,x9)
769     char *msg;
770     #endif
771     {
772     #ifdef HAVE_STDARG_H /* NeedVarargsPrototypes */
773     va_list args;
774     va_start(args, msg);
775     vfprintf(stderr, msg, args);
776     va_end(args);
777     #else
778     fprintf(stderr, msg,x1,x2,x3,x4,x5,x6,x7,x8,x9);
779     #endif
780     }

  ViewVC Help
Powered by ViewVC 1.1.22