Retro68/gcc/fixincludes/fixincl.tpl
2017-10-07 02:16:47 +02:00

259 lines
7.0 KiB
Smarty

[= 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 =]
};