xref: /openbsd/gnu/gcc/fixincludes/fixincl.tpl (revision 09467b48)
1[= AutoGen5 Template -*- Mode: C -*-
2x=fixincl.x =]
3[= (dne " * " "/* ")=]
4 */
5/* DO NOT CVS-MERGE THIS FILE, EITHER [=`date`=]
6 *
7 * You must regenerate it.  Use the ./genfixes script.
8 *
9 *
10 * This is part of the fixincl program used to install modified versions of
11 * certain ANSI-incompatible system header files which are fixed to work
12 * correctly with ANSI C and placed in a directory that GNU C will search.
13 *
14 * This file contains [=(count "fix")=] fixup descriptions.
15 *
16 * See README for more information.
17 *
18 *  inclhack copyright (c) 1998, 1999, 2000, 2001
19 *  The Free Software Foundation, Inc.
20 *
21 [=(define re-ct 0) (define max-mach 0) (define ct 0)
22   (define HACK "") (define Hack "")    (define tmp "")
23   (gpl "inclhack" " *  ")=]
24 */
25[=
26
27FOR fix =]
28/* * * * * * * * * * * * * * * * * * * * * * * * * *
29 *
30 *  Description of [=
31    (set! Hack (string-capitalize! (get "hackname")))
32    (set! HACK (string-upcase!     (get "hackname")))
33    (if (and (not (exist? "test_text")) (not (exist? "replace")))
34        (error (sprintf "include fix '%s' has no test text" Hack )) )
35    (. Hack)=] fix
36 */[=
37
38# Note that this is not just for debugging purposes, but in case
39  some C fix wishes to refer to the regexps it is paired with.
40  See commentary at the top of fixfixes.c.
41=]
42tSCC z[=(. Hack)=]Name[] =
43     "[=hackname=]";
44
45/*
46 *  File name selection pattern
47 */[=
48
49  IF (exist? "files")=]
50tSCC z[=(. Hack)=]List[] =
51  "[=FOR files =]|[=files=][=ENDFOR=]|";[=
52
53  ELSE =]
54#define z[=(. Hack)=]List (char*)NULL[=
55  ENDIF (exist? "files") =]
56/*
57 *  Machine/OS name selection pattern
58 */[=
59
60  IF (exist? "mach")=]
61tSCC* apz[=(. Hack)=]Machs[] = {[=
62    (set! ct 0) =][=
63
64    FOR mach =]
65        [=
66      (set! tmp (get "mach"))
67      (set! ct (+ ct (string-length tmp) 5))
68      (kr-string tmp)=],[=
69    ENDFOR=]
70        (const char*)NULL };[=
71
72    (if (> ct max-mach) (set! max-mach ct)) =][=
73
74  ELSE =]
75#define apz[=(. Hack)=]Machs (const char**)NULL[=
76  ENDIF (exist? "files") =][=
77
78  IF (exist? "select")=]
79
80/*
81 *  content selection pattern - do fix if pattern found
82 */[=
83    FOR select =]
84tSCC z[=(. Hack)=]Select[=(for-index)=][] =
85       [=(kr-string (get "select"))=];[=
86    ENDFOR select =][=
87  ENDIF =][=
88
89  IF (exist? "bypass")=]
90
91/*
92 *  content bypass pattern - skip fix if pattern found
93 */[=
94    FOR bypass =]
95tSCC z[=(. Hack)=]Bypass[=(for-index)=][] =
96       [=(kr-string (get "bypass"))=];[=
97    ENDFOR bypass =][=
98  ENDIF =][=
99
100  IF (exist? "test")=]
101
102/*
103 *  perform the 'test' shell command - do fix on success
104 */[=
105    FOR test =]
106tSCC z[=(. Hack)=]Test[=(for-index)=][] =
107       [=(kr-string (get "test"))=];[=
108    ENDFOR  =][=
109  ENDIF     =][=
110
111  IF (exist? "c_test")=]
112
113/*
114 *  perform the C function call test
115 */[=
116    FOR c_test =]
117tSCC z[=(. Hack)=]FTst[=(for-index)=][] = "[=c_test=]";[=
118    ENDFOR c_test =][=
119  ENDIF =][=
120
121  IF (set! ct (+ (count "select") (count "bypass")
122              (count "test") (count "c_test")))
123
124     (= ct 0)
125=]
126#define [=(. HACK)=]_TEST_CT  0
127#define a[=(. Hack)=]Tests   (tTestDesc*)NULL[=
128  ELSE =]
129
130#define    [=(. HACK)=]_TEST_CT  [=(. ct)=][=
131	(set! re-ct (+ re-ct (count "select") (count "bypass"))) =]
132static tTestDesc a[=(. Hack)=]Tests[] = {[=
133
134    FOR test =]
135  { TT_TEST,     z[=(. Hack)=]Test[=(for-index)=],   0 /* unused */ },[=
136    ENDFOR test =][=
137
138    FOR c_test =]
139  { TT_FUNCTION, z[=(. Hack)=]FTst[=(for-index)=],   0 /* unused */ },[=
140    ENDFOR c_test =][=
141
142    FOR bypass =]
143  { TT_NEGREP,   z[=(. Hack)=]Bypass[=(for-index)=], (regex_t*)NULL },[=
144    ENDFOR bypass =][=
145
146    FOR select =]
147  { TT_EGREP,    z[=(. Hack)=]Select[=(for-index)=], (regex_t*)NULL },[=
148    ENDFOR select =] };[=
149  ENDIF =]
150
151/*
152 *  Fix Command Arguments for [=(. Hack)=]
153 */
154static const char* apz[=(. Hack)=]Patch[] = {[=
155    IF   (exist? "sed")=] "sed"[=
156      FOR sed=],
157    "-e", [=(kr-string (get "sed"))=][=
158      ENDFOR sed=],[=
159
160    ELIF (exist? "shell")=] "sh", "-c",
161    [=(kr-string (get "shell"))=],[=
162
163    ELIF (exist? "c_fix")=]
164    [=(kr-string (get "c_fix"))=],[=
165
166      FOR c_fix_arg =]
167    [=(kr-string (get "c_fix_arg"))=],[=
168      ENDFOR c_fix_arg =][=
169
170    ELIF (> (len "replace") 0) =]
171[=(kr-string (get "replace"))=],[=
172
173    ENDIF=]
174    (char*)NULL };
175[=ENDFOR fix=]
176
177/* * * * * * * * * * * * * * * * * * * * * * * * * *
178 *
179 *  List of all fixes
180 */[=
181#  as of this writing, 49 bytes are needed by the case statement format.
182   We also must allow for the size of the target machine machine name.
183   This allows for a 79 byte machine name.  Better be enough.
184=]
185#define REGEX_COUNT          [= (. re-ct) =]
186#define MACH_LIST_SIZE_LIMIT [= (+ 128 max-mach) =]
187#define FIX_COUNT            [= (count "fix") =]
188
189/*
190 *  Enumerate the fixes[= # in a way that minimizes diffs :-) =]
191 */
192typedef enum {[=
193
194FOR fix "," =]
195    [=(string-upcase! (get "hackname"))=]_FIXIDX[=
196ENDFOR
197
198=]
199} t_fixinc_idx;
200
201tFixDesc fixDescList[ FIX_COUNT ] = {[=
202
203
204FOR fix ",\n" =][=
205    (set! Hack (string-capitalize! (get "hackname")))
206    (set! HACK (string-upcase!     (get "hackname"))) =]
207  {  z[=(. Hack)=]Name,    z[=(. Hack)=]List,
208     apz[=(. Hack)=]Machs,
209     [=(. HACK)=]_TEST_CT, [=
210       IF (exist? "not_machine") =]FD_MACH_IFNOT[=
211       ELSE                      =]FD_MACH_ONLY[=
212       ENDIF =][=
213       IF    (exist? "shell")    =] | FD_SHELL_SCRIPT[=
214       ELIF  (exist? "c_fix")    =] | FD_SUBROUTINE[=
215       ELIF  (exist? "replace")  =] | FD_REPLACEMENT[=
216       ENDIF =],
217     a[=(. Hack)=]Tests,   apz[=(. Hack)=]Patch, 0 }[=
218
219ENDFOR =]
220};
221