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