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