123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- [= AutoGen5 Template -*- Mode: C -*-
- x=fixincl.x =]
- [=
- (if (version-compare >= autogen-version "5.18")
- (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 =]
- };
|