OSDN Git Service

Use fnmatch for name matching.
[pf3gnuchains/gcc-fork.git] / fixincludes / fixincl.tpl
1 [= AutoGen5 Template -*- Mode: C -*-
2 x=fixincl.x =]
3 [= (dne " * " "/* ")=]
4  */
5 /* DO NOT SVN-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
27 FOR 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 =]
42 tSCC z[=(. Hack)=]Name[] =
43      "[=hackname=]";
44
45 /*
46  *  File name selection pattern
47  */[=
48
49   IF (exist? "files")=]
50 tSCC z[=(. Hack)=]List[] =
51   "[=  (join "\\0" (stack "files")) =]\0";[=
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")=]
61 tSCC* 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? "mach") =][=
77
78   IF (exist? "select")=]
79
80 /*
81  *  content selection pattern - do fix if pattern found
82  */[=
83     FOR select =]
84 tSCC 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 =]
95 tSCC 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 =]
106 tSCC 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 =]
117 tSCC 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"))) =]
132 static 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  */
154 static 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  */
192 typedef enum {[=
193
194 FOR fix "," =]
195     [=(string-upcase! (get "hackname"))=]_FIXIDX[=
196 ENDFOR
197
198 =]
199 } t_fixinc_idx;
200
201 tFixDesc fixDescList[ FIX_COUNT ] = {[=
202
203
204 FOR 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
219 ENDFOR =]
220 };