mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			259 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Smarty
		
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Smarty
		
	
	
	
| [= 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 =]
 | |
| };
 |