|  | [= AutoGen5 Template -*- Mode: C -*- | 
|  | x=fixincl.x =] | 
|  | [= | 
|  | (if (version-compare >= autogen-version "5.18.1") | 
|  | (dne "-D" " * " "/* ") | 
|  | (dne " * " "/* ") ) =] | 
|  | */ | 
|  | /* DO NOT SVN-MERGE THIS FILE, EITHER [= | 
|  | (define re-ct 0) (define max-mach 0) (define ct 0) | 
|  | (define HACK "") (define Hack "")    (define tmp "") | 
|  | (shell "date") =] | 
|  | * | 
|  | * You must regenerate it.  Use the ./genfixes script. | 
|  | * | 
|  | * | 
|  | * This is part of the fixincl program used to install modified versions of | 
|  | * certain ANSI-incompatible system header files which are fixed to work | 
|  | * correctly with ANSI C and placed in a directory that GNU C will search. | 
|  | * | 
|  | * This file contains [=(count "fix")=] fixup descriptions. | 
|  | * | 
|  | * See README for more information. | 
|  | * | 
|  | *  inclhack copyright (c) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, | 
|  | *                         2006, 2007, 2008 | 
|  | *  The Free Software Foundation, Inc. | 
|  | * | 
|  | *  inclhack is free software: you can redistribute it and/or modify it | 
|  | *  under the terms of the GNU General Public License as published by the | 
|  | *  Free Software Foundation, either version 3 of the License, or | 
|  | *  (at your option) any later version. | 
|  | * | 
|  | *  inclhack is distributed in the hope that it will be useful, but | 
|  | *  WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
|  | *  See the GNU General Public License for more details. | 
|  | * | 
|  | *  You should have received a copy of the GNU General Public License along | 
|  | *  with this program.  If not, see <http://www.gnu.org/licenses/>. | 
|  | */ | 
|  | #ifndef SED_PROGRAM | 
|  | #define SED_PROGRAM "/usr/bin/sed" | 
|  | #endif | 
|  | static char const sed_cmd_z[] = SED_PROGRAM; | 
|  | [= | 
|  |  | 
|  | FOR fix =] | 
|  | /* * * * * * * * * * * * * * * * * * * * * * * * * * | 
|  | * | 
|  | *  Description of [= | 
|  | (set! Hack (string-capitalize! (get "hackname"))) | 
|  | (set! HACK (string-upcase!     (get "hackname"))) | 
|  | (if (and (not (exist? "test_text")) (not (exist? "replace"))) | 
|  | (error (sprintf "include fix '%s' has no test text" Hack )) ) | 
|  | (. Hack)=] fix | 
|  | */[= | 
|  |  | 
|  | # Note that this is not just for debugging purposes, but in case | 
|  | some C fix wishes to refer to the regexps it is paired with. | 
|  | See commentary at the top of fixfixes.c. | 
|  | =] | 
|  | tSCC z[=(. Hack)=]Name[] = | 
|  | "[=hackname=]"; | 
|  |  | 
|  | /* | 
|  | *  File name selection pattern | 
|  | */[= | 
|  |  | 
|  | IF (exist? "files")   =] | 
|  | tSCC z[=(. Hack)=]List[] = | 
|  | "[=  (join "\\0" (stack "files")) =]\0";[= | 
|  |  | 
|  | ELSE                  =] | 
|  | #define z[=(. Hack)=]List (char*)NULL[= | 
|  | ENDIF (exist? "files") =] | 
|  | /* | 
|  | *  Machine/OS name selection pattern | 
|  | */[= | 
|  |  | 
|  | IF (exist? "mach")    =] | 
|  | tSCC* apz[=(. Hack)=]Machs[] = {[= | 
|  | (set! ct 0) =][= | 
|  |  | 
|  | FOR mach            =] | 
|  | [= | 
|  | (set! tmp (get "mach")) | 
|  | (set! ct (+ ct (string-length tmp) 5)) | 
|  | (kr-string tmp)=],[= | 
|  | ENDFOR              =] | 
|  | (const char*)NULL };[= | 
|  |  | 
|  | (if (> ct max-mach) (set! max-mach ct)) =][= | 
|  |  | 
|  | ELSE                  =] | 
|  | #define apz[=(. Hack)=]Machs (const char**)NULL[= | 
|  | ENDIF (exist? "mach") =][= | 
|  |  | 
|  | IF (exist? "select")=] | 
|  |  | 
|  | /* | 
|  | *  content selection pattern - do fix if pattern found | 
|  | */[= | 
|  | FOR select          =] | 
|  | tSCC z[=(. Hack)=]Select[=(for-index)=][] = | 
|  | [=(kr-string (get "select"))=];[= | 
|  | ENDFOR select       =][= | 
|  | ENDIF                 =][= | 
|  |  | 
|  | IF (exist? "bypass")  =] | 
|  |  | 
|  | /* | 
|  | *  content bypass pattern - skip fix if pattern found | 
|  | */[= | 
|  | FOR bypass          =] | 
|  | tSCC z[=(. Hack)=]Bypass[=(for-index)=][] = | 
|  | [=(kr-string (get "bypass"))=];[= | 
|  | ENDFOR bypass       =][= | 
|  | ENDIF                 =][= | 
|  |  | 
|  | IF (exist? "sum")=][= | 
|  | (if (not (exist? "files")) | 
|  | (error "specifying a 'sum' requires specifying 'files'")) | 
|  | =] | 
|  |  | 
|  | /* | 
|  | *  file selection - do fix if checksum matches | 
|  | */[= | 
|  | FOR sum             =] | 
|  | tSCC z[=(. Hack)=]Sum[=(for-index)=][] = | 
|  | [=(kr-string (get "sum"))=];[= | 
|  | ENDFOR sum          =][= | 
|  | ENDIF                 =][= | 
|  |  | 
|  | IF (exist? "test")    =] | 
|  |  | 
|  | /* | 
|  | *  perform the 'test' shell command - do fix on success | 
|  | */[= | 
|  | FOR test            =] | 
|  | tSCC z[=(. Hack)=]Test[=(for-index)=][] = | 
|  | [=(kr-string (get "test"))=];[= | 
|  | ENDFOR              =][= | 
|  | ENDIF                 =][= | 
|  |  | 
|  | IF (exist? "c_test")  =] | 
|  |  | 
|  | /* | 
|  | *  perform the C function call test | 
|  | */[= | 
|  | FOR c_test          =] | 
|  | tSCC z[=(. Hack)=]FTst[=(for-index)=][] = "[=c_test=]";[= | 
|  | ENDFOR c_test       =][= | 
|  | ENDIF                 =][= | 
|  |  | 
|  | IF (set! ct (+ (count "select") (count "bypass") | 
|  | (count "test") (count "c_test"))) | 
|  |  | 
|  | (= ct 0) | 
|  | =] | 
|  | #define [=(. HACK)=]_TEST_CT  0 | 
|  | #define a[=(. Hack)=]Tests   (tTestDesc*)NULL[= | 
|  | ELSE =] | 
|  |  | 
|  | #define    [=(. HACK)=]_TEST_CT  [=(. ct)=][= | 
|  | (set! re-ct (+ re-ct (count "select") (count "bypass"))) =] | 
|  | static tTestDesc a[=(. Hack)=]Tests[] = {[= | 
|  |  | 
|  | FOR test            =] | 
|  | { TT_TEST,     z[=(. Hack)=]Test[=(for-index)=],   0 /* unused */ },[= | 
|  | ENDFOR test         =][= | 
|  |  | 
|  | FOR c_test          =] | 
|  | { TT_FUNCTION, z[=(. Hack)=]FTst[=(for-index)=],   0 /* unused */ },[= | 
|  | ENDFOR c_test       =][= | 
|  |  | 
|  | FOR bypass          =] | 
|  | { TT_NEGREP,   z[=(. Hack)=]Bypass[=(for-index)=], (regex_t*)NULL },[= | 
|  | ENDFOR bypass       =][= | 
|  |  | 
|  | FOR select          =] | 
|  | { TT_EGREP,    z[=(. Hack)=]Select[=(for-index)=], (regex_t*)NULL },[= | 
|  | ENDFOR select       =][= | 
|  |  | 
|  | FOR sum             =] | 
|  | { TT_CKSUM,    z[=(. Hack)=]Sum[=(for-index)=], 0 /* unused */ },[= | 
|  | ENDFOR sum          =] };[= | 
|  | ENDIF =] | 
|  |  | 
|  | /* | 
|  | *  Fix Command Arguments for [=(. Hack)=] | 
|  | */ | 
|  | static const char* apz[=(. Hack)=]Patch[] = {[= | 
|  | IF   (exist? "sed")=] sed_cmd_z[= | 
|  | FOR sed=], | 
|  | "-e", [=(kr-string (get "sed"))=][= | 
|  | ENDFOR sed=],[= | 
|  |  | 
|  | ELIF (exist? "shell")=] "sh", "-c", | 
|  | [=(kr-string (get "shell"))=],[= | 
|  |  | 
|  | ELIF (exist? "c_fix")=] | 
|  | [=(kr-string (get "c_fix"))=],[= | 
|  |  | 
|  | FOR c_fix_arg =] | 
|  | [=(kr-string (get "c_fix_arg"))=],[= | 
|  | ENDFOR c_fix_arg =][= | 
|  |  | 
|  | ELIF (> (len "replace") 0) =] | 
|  | [=(kr-string (get "replace"))=],[= | 
|  |  | 
|  | ENDIF=] | 
|  | (char*)NULL }; | 
|  | [=ENDFOR fix=] | 
|  |  | 
|  | /* * * * * * * * * * * * * * * * * * * * * * * * * * | 
|  | * | 
|  | *  List of all fixes | 
|  | */[= | 
|  | #  as of this writing, 49 bytes are needed by the case statement format. | 
|  | We also must allow for the size of the target machine machine name. | 
|  | This allows for a 79 byte machine name.  Better be enough. | 
|  | =] | 
|  | #define REGEX_COUNT          [= (. re-ct) =] | 
|  | #define MACH_LIST_SIZE_LIMIT [= (+ 128 max-mach) =] | 
|  | #define FIX_COUNT            [= (count "fix") =] | 
|  |  | 
|  | /* | 
|  | *  Enumerate the fixes[= # in a way that minimizes diffs :-) =] | 
|  | */ | 
|  | typedef enum {[= | 
|  |  | 
|  | FOR fix "," =] | 
|  | [=(string-upcase! (get "hackname"))=]_FIXIDX[= | 
|  | ENDFOR | 
|  |  | 
|  | =] | 
|  | } t_fixinc_idx; | 
|  |  | 
|  | tFixDesc fixDescList[ FIX_COUNT ] = {[= | 
|  |  | 
|  |  | 
|  | FOR fix ",\n" =][= | 
|  | (set! Hack (string-capitalize! (get "hackname"))) | 
|  | (set! HACK (string-upcase!     (get "hackname"))) =] | 
|  | {  z[=(. Hack)=]Name,    z[=(. Hack)=]List, | 
|  | apz[=(. Hack)=]Machs, | 
|  | [=(. HACK)=]_TEST_CT, [= | 
|  | IF (exist? "not_machine") =]FD_MACH_IFNOT[= | 
|  | ELSE                      =]FD_MACH_ONLY[= | 
|  | ENDIF =][= | 
|  | IF    (exist? "shell")    =] | FD_SHELL_SCRIPT[= | 
|  | ELIF  (exist? "c_fix")    =] | FD_SUBROUTINE[= | 
|  | ELIF  (exist? "replace")  =] | FD_REPLACEMENT[= | 
|  | ENDIF =], | 
|  | a[=(. Hack)=]Tests,   apz[=(. Hack)=]Patch, 0 }[= | 
|  |  | 
|  | ENDFOR =] | 
|  | }; |