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