X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ffixinc%2Finclhack.def;h=d322d2f1e55f90d490c20cdf72ef5cf1ce7e809d;hb=68d0517a6aaab536536f6600a9430d676f109ac7;hp=66f59e88880eefbd3fbb27b680ae25d6bc57b7c5;hpb=edb5e81d85e5f0f3396fee13a4662c5221a464ca;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/fixinc/inclhack.def b/gcc/fixinc/inclhack.def index 66f59e88880..d322d2f1e55 100644 --- a/gcc/fixinc/inclhack.def +++ b/gcc/fixinc/inclhack.def @@ -6,6 +6,15 @@ autogen definitions fixincl; /* Define all the fixes we know about for repairing damaged headers. Please see the README before adding or changing entries in this file. + This is the sort command: + + blocksort output=XXX \ + pattern='^/\*$' \ + start='== REPLACEMENT FIXES ==' \ + trailer='^/\*EOF\*[/]' \ + input=inclhack.def \ + key='hackname[ ]*=[ ]*(.*);' + Set up a debug test so we can make the templates emit special code while debugging these fixes: */ @@ -13,147 +22,79 @@ autogen definitions fixincl; FIXINC_DEBUG = yes; #endif -/* DO NOT DO BROKEN FIXES (empty replacement fixes) */ - -/* - * Purge some HP-UX 11 files that are only broken after they are "fixed". - */ -fix = { - hackname = AAA_ki_iface; - files = sys/ki_iface.h; - select = 'These definitions are for HP Internal developers'; - replace; /* empty replacement -> no fixing the file */ -}; - - -/* - * Purge some HP-UX 11 files that are only broken after they are "fixed". - */ -fix = { - hackname = AAA_ki; - files = sys/ki.h; - select = '11.00 HP-UX LP64'; - replace; /* empty replacement -> no fixing the file */ -}; - - -/* - * Purge some HP-UX 11 files that are only broken after they are "fixed". - */ -fix = { - hackname = AAA_ki_calls; - files = sys/ki_calls.h; - select = 'kthread_create_caller_t'; - replace; /* empty replacement -> no fixing the file */ -}; - - -/* - * Purge some HP-UX 11 files that are only broken after they are "fixed". - */ -fix = { - hackname = AAA_ki_defs; - files = sys/ki_defs.h; - select = 'Kernel Instrumentation Definitions'; - replace; /* empty replacement -> no fixing the file */ -}; - - -/* - * This file on SunOS 4 has a very large macro. When the sed loop - * tries pull it in, it overflows the pattern space size of the SunOS - * sed (GNU sed does not have this problem). Since the file does not - * require fixing, we remove it from the fixed directory. - */ -fix = { - hackname = AAA_bad_fixes; - files = sundev/ipi_error.h; - /* shouldn't there be a select expression here??? */ - replace; /* empty replacement -> no fixing the file */ -}; - - -/* - * Purge some HP-UX 11 files that are only broken after they are "fixed". - */ -fix = { - hackname = AAA_time; - files = sys/time.h; - select = '11.0 and later representation of ki time'; - replace; /* empty replacement -> no fixing the file */ -}; - -/* And now, the real fixes, replacement text fixes first: */ +/* == REPLACEMENT FIXES == */ /* - * Completely replace <_int_varargs.h> with a file that includes gcc's + * Completely replace <_int_varargs.h> with a file that includes gcc's * stdarg.h or varargs.h files as appropriate on DG/UX */ fix = { hackname = AAB_dgux_int_varargs; files = _int_varargs.h; - replace = "#ifndef __INT_VARARGS_H -\#define __INT_VARARGS_H - -/************************************************************************/ -/* _INT_VARARGS.H - Define the common stuff for varargs/stdarg/stdio. */ -/************************************************************************/ - -/* -** This file is a DG internal header. Never include this -** file directly. -*/ - -\#ifndef ___int_features_h -\#include <sys/_int_features.h> -\#endif - -\#if !(defined(_VA_LIST) || defined(_VA_LIST_)) -\#define _VA_LIST -\#define _VA_LIST_ - -\#ifdef __LINT__ - -\#ifdef __STDC__ -typedef void * va_list; -\#else -typedef char * va_list; -\#endif - -\#else -\#if _M88K_ANY - -\#if defined(__DCC__) - -typedef struct { - int next_arg; - int *mem_ptr; - int *reg_ptr; -} va_list; - -\#else /* ! defined(__DCC__) */ - -typedef struct { - int __va_arg; /* argument number */ - int *__va_stk; /* start of args passed on stack */ - int *__va_reg; /* start of args passed in regs */ -} va_list; - -\#endif /* ! defined(__DCC__) */ - -\#elif _IX86_ANY - -\#if defined(__GNUC__) || defined(__STDC__) -typedef void * va_list; -\#else -typedef char * va_list; -\#endif - -\#endif /* _IX86_ANY */ - -\#endif /* __LINT__ */ -\#endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */ -\#endif /* #ifndef __INT_VARARGS_H */\n"; + replace = <<- _EOF_ + #ifndef __INT_VARARGS_H + #define __INT_VARARGS_H + + /********************************************************/ + /* Define the common stuff for varargs/stdarg/stdio. */ + /********************************************************/ + + /* + ** This file is a DG internal header. Never include this + ** file directly. + */ + + #ifndef ___int_features_h + #include + #endif + + #if !(defined(_VA_LIST) || defined(_VA_LIST_)) + #define _VA_LIST + #define _VA_LIST_ + + #ifdef __LINT__ + + #ifdef __STDC__ + typedef void * va_list; + #else + typedef char * va_list; + #endif + + #else + #if _M88K_ANY + + #if defined(__DCC__) + + typedef struct { + int next_arg; + int *mem_ptr; + int *reg_ptr; + } va_list; + + #else /* ! defined(__DCC__) */ + + typedef struct { + int __va_arg; /* argument number */ + int *__va_stk; /* start of args passed on stack */ + int *__va_reg; /* start of args passed in regs */ + } va_list; + + #endif /* ! defined(__DCC__) */ + + #elif _IX86_ANY + + #if defined(__GNUC__) || defined(__STDC__) + typedef void * va_list; + #else + typedef char * va_list; + #endif + + #endif /* _IX86_ANY */ + + #endif /* __LINT__ */ + #endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */ + #endif /* #ifndef __INT_VARARGS_H */ + _EOF_; }; @@ -163,7 +104,7 @@ typedef char * va_list; fix = { hackname = AAB_fd_zero_asm_posix_types_h; files = asm/posix_types.h; - mach = 'i[34567]86-*-linux-gnu*'; + mach = 'i[34567]86-*-linux*'; bypass = '} while'; /* @@ -172,29 +113,28 @@ fix = { * the wrapper, this will follow the #include_next chain until * we arrive at the real . */ - replace = - -'/* This file fixes a bug in the __FD_ZERO macro - for older versions of the Linux kernel. */ -\#ifndef _POSIX_TYPES_H_WRAPPER -\#include - \#include_next - -\#if defined(__FD_ZERO) && !defined(__GLIBC__) -\#undef __FD_ZERO -\#define __FD_ZERO(fdsetp) \\ - do { \\ - int __d0, __d1; \\ - __asm__ __volatile__("cld ; rep ; stosl" \\ - : "=&c" (__d0), "=&D" (__d1) \\ - : "a" (0), "0" (__FDSET_LONGS), \\ - "1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \\ - } while (0) -\#endif - -\#define _POSIX_TYPES_H_WRAPPER -\#endif /* _POSIX_TYPES_H_WRAPPER */ -'; + replace = <<- _EOF_ + /* This file fixes a bug in the __FD_ZERO macro + for older versions of the Linux kernel. */ + #ifndef _POSIX_TYPES_H_WRAPPER + #include + #include_next + + #if defined(__FD_ZERO) && !defined(__GLIBC__) + #undef __FD_ZERO + #define __FD_ZERO(fdsetp) \ + do { \ + int __d0, __d1; \ + __asm__ __volatile__("cld ; rep ; stosl" \ + : "=&c" (__d0), "=&D" (__d1) \ + : "a" (0), "0" (__FDSET_LONGS), \ + "1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \ + } while (0) + #endif + + #define _POSIX_TYPES_H_WRAPPER + #endif /* _POSIX_TYPES_H_WRAPPER */ + _EOF_; }; @@ -204,7 +144,7 @@ fix = { fix = { hackname = AAB_fd_zero_gnu_types_h; files = gnu/types.h; - mach = 'i[34567]86-*-linux-gnu*'; + mach = 'i[34567]86-*-linux*'; /* * Define _TYPES_H_WRAPPER at the end of the wrapper, not @@ -243,7 +183,7 @@ fix = { fix = { hackname = AAB_fd_zero_selectbits_h; files = selectbits.h; - mach = 'i[34567]86-*-linux-gnu*'; + mach = 'i[34567]86-*-linux*'; /* * Define _SELECTBITS_H_WRAPPER at the end of the wrapper, not @@ -320,6 +260,29 @@ extern int memcmp(); /* + * Completely replace with a file that includes gcc's + * stdarg.h or varargs.h files as appropriate. + */ +#ifdef SVR4 +fix = { + hackname = AAB_svr4_no_varargs; + files = sys/varargs.h; + replace = "/* This file was generated by fixincludes. */\n" + "#ifndef _SYS_VARARGS_H\n" + "#define _SYS_VARARGS_H\n\n" + + "#ifdef __STDC__\n" + "#include \n" + "#else\n" + "#include \n" + "#endif\n\n" + + "#endif /* _SYS_VARARGS_H */\n"; +}; +#endif + + +/* * Completely replace ; with a file that implements gcc's * optimized byteswapping. Restricted to "SVR4" machines until either * it is shown to be safe to replace this file always, or we get bolder ;-) @@ -483,29 +446,6 @@ ntohs (unsigned int __arg) /* - * Completely replace with a file that includes gcc's - * stdarg.h or varargs.h files as appropriate. - */ -#ifdef SVR4 -fix = { - hackname = AAB_svr4_no_varargs; - files = sys/varargs.h; - replace = "/* This file was generated by fixincludes. */\n" - "#ifndef _SYS_VARARGS_H\n" - "#define _SYS_VARARGS_H\n\n" - - "#ifdef __STDC__\n" - "#include \n" - "#else\n" - "#include \n" - "#endif\n\n" - - "#endif /* _SYS_VARARGS_H */\n"; -}; -#endif - - -/* * Cancel out ansi_compat.h on Ultrix. Replace it with an empty file. */ fix = { @@ -525,9 +465,7 @@ fix = { files = limits.h; mach = "*-*-ultrix4.3"; replace = -'/* @(#)limits.h */ -/* This file was generated by fixincludes */ -\#ifndef _LIMITS_INCLUDED +'#ifndef _LIMITS_INCLUDED \#define _LIMITS_INCLUDED \#include \#endif /* _LIMITS_INCLUDED */ @@ -545,9 +483,7 @@ fix = { files = memory.h; mach = "*-*-ultrix4.3"; replace = -'/* @(#)memory.h */ -/* This file was generated by fixincludes */ -\#ifndef _MEMORY_INCLUDED +'#ifndef _MEMORY_INCLUDED \#define _MEMORY_INCLUDED \#include \#endif /* _MEMORY_INCLUDED */ @@ -565,9 +501,7 @@ fix = { files = string.h; mach = "*-*-ultrix4.3"; replace = -'/* @(#)string.h */ -/* This file was generated by fixincludes */ -\#ifndef _STRING_INCLUDED +'#ifndef _STRING_INCLUDED \#define _STRING_INCLUDED \#include \#endif /* _STRING_INCLUDED */ @@ -576,6 +510,36 @@ fix = { /* + * pthread.h on AIX 4.3.3 tries to define a macro without whitspace + * which violates a requirement of ISO C. + */ +fix = { + hackname = aix_pthread; + files = "pthread.h"; + select = "(#define [A-Za-z_0-9]+)(\\\\\n[^A-Za-z_0-9 \t\n(])"; + c_fix = format; + c_fix_arg = "%1 %2"; + test_text = "#define PTHREAD_MUTEX_INITIALIZER\\\\\n" + "{...init stuff...}"; +}; + + +/* + * sys/machine.h on AIX 4.3.3 puts whitespace between a \ and a newline + * in an otherwise harmless (and #ifed out) macro definition + */ +fix = { + hackname = aix_sysmachine; + files = sys/machine.h; + select = "\\\\ +\n"; + c_fix = format; + c_fix_arg = "\\\n"; + test_text = "#define FOO \\\n" + " bar \\ \n baz \\ \n bat"; +}; + + +/* * sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the * definition of struct rusage, so the prototype added by fixproto fails. */ @@ -609,6 +573,19 @@ fix = { /* + * Fix __assert declaration in assert.h on Alpha OSF/1. + */ +fix = { + hackname = alpha___assert; + files = "assert.h"; + select = '__assert\(char \*, char \*, int\)'; + c_fix = format; + c_fix_arg = "__assert(const char *, const char *, int)"; + test_text = 'extern void __assert(char *, char *, int);'; +}; + + +/* * Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX. */ fix = { @@ -622,7 +599,7 @@ fix = { }; -/* +/* * Remove erroneous parentheses in sym.h on Alpha OSF/1. */ fix = { @@ -734,11 +711,25 @@ fix = { c_fix = format; c_fix_arg = "#ifndef __cplusplus\n%0\n#endif"; - c_fix_arg = "^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;.*"; - test_text = "typedef unsigned int\tbool \t; /* bool type */"; + test_text = "typedef unsigned int\tbool \t; /* bool\n type */"; }; +/* + * For C++, avoid any typedef definition of wchar_t, + * and use the built in type instead. + */ + +fix = { + hackname = avoid_wchar_t_type; + + select = "^[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;"; + + c_fix = format; + c_fix_arg = "#ifndef __cplusplus\n%0\n#endif"; + + test_text = "typedef unsigned short\twchar_t \t; /* wchar_t\n type */"; +}; /* * Fix #defines under Alpha OSF/1: @@ -846,23 +837,23 @@ fix = { /* * Remove `extern double cabs' declarations from math.h. - * This conflicts with C9x. Discovered on AIX. + * This conflicts with C99. Discovered on AIX. * SunOS4 has its cabs() declaration followed by a comment which * terminates on the following line. */ fix = { hackname = broken_cabs; files = "math.h"; - select = '^extern double cabs'; + select = '^extern[ \t]+double[ \t]+cabs'; c_fix = format; c_fix_arg = ""; - c_fix_arg = "^extern double cabs\\((struct dbl_hypot|)\\);"; + c_fix_arg = "^extern[ \t]+double[ \t]+cabs\\((struct dbl_hypot|)\\);"; test_text = "#ifdef __STDC__\n" - "extern double cabs(struct dbl_hypot);\n" + "extern double cabs(struct dbl_hypot);\n" "#else\n" - "extern double cabs();\n" + "extern double cabs();\n" "#endif\n" "extern double cabs(); /* This is a comment\n" " and it ends here. */"; @@ -891,8 +882,13 @@ fix = { select = "define[ \t]+[A-Z0-9_]+CTRL\\([a-zA-Z][,)]"; c_fix = char_macro_def; c_fix_arg = "CTRL"; - test_text = "#define BSD43_CTRL(n, x) (('n'<<8)+x)\n" - "#define _CTRL(c) ('c'&037)"; + + /* + * This is two tests in order to ensure that the "CTRL(c)" can + * be selected in isolation from the multi-arg format + */ + test_text = "#define BSD43_CTRL(n, x) (('n'<<8)+x)\n"; + test_text = "#define _CTRL(c) ('c'&037)"; }; fix = { @@ -951,6 +947,21 @@ fix = { /* + * Fix typo in on DJGPP 2.03. + */ +fix = { + hackname = djgpp_wchar_h; + file = wchar.h; + select = "__DJ_wint_t"; + bypass = "sys/djtypes.h"; + c_fix = format; + c_fix_arg = "%0\n#include "; + c_fix_arg = "#include "; + test_text = "#include \n" + "extern __DJ_wint_t x;\n"; +}; + +/* * Fix these Sun OS files to avoid an invalid identifier in an #ifdef. */ fix = { @@ -982,8 +993,46 @@ fix = { /* - * Fix HP's use of ../machine/inline.h to refer to - * /usr/include/machine/inline.h + * Between 8/24/1998 and 2/17/2001, FreeBSD system headers presume + * neither the existence of GCC 3 nor its exact feature set yet break + * (by design?) when __GNUC__ is set beyond 2. + */ +fix = { + hackname = freebsd_gcc3_breakage; + mach = *-*-freebsd*; + files = sys/cdefs.h; + select = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$'; + bypass = '__GNUC__[ \t]*([>=]=[ \t]*[3-9]|>[ \t]*2)'; + c_fix = format; + c_fix_arg = '%0 || __GNUC__ >= 3'; + test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7'; +}; + + +/* + * Fix these files to use the same types that we think they should. + */ +fix = { + hackname = gnu_types; + files = "sys/types.h"; + files = "stdlib.h"; + files = "sys/stdtypes.h"; + files = "stddef.h"; + files = "memory.h"; + files = "unistd.h"; + bypass = '_GCC_(PTRDIFF|SIZE|WCHAR)_T'; + select = "^[ \t]*typedef[ \t]+.*[ \t](ptrdiff|size|wchar)_t;"; + c_fix = gnu_type; + + test_text = "typedef long int ptrdiff_t; /* long int */\n" + "typedef uint_t size_t; /* uint_t */\n" + "typedef ushort_t wchar_t; /* ushort_t */"; +}; + + +/* + * Fix HP & Sony's use of "../machine/xxx.h" + * to refer to: */ fix = { hackname = hp_inline; @@ -1018,6 +1067,54 @@ fix = { /* + * Delete C++ double pow (double, int) inline function from HP-UX 10 & 11 + * math.h to prevent clash with define in c_std/bits/std_cmath.h. + */ +fix = { + hackname = hpux10_cpp_pow_inline; + files = fixinc-test-limits.h, math.h; + select = <<- END_POW_INLINE + ^# +ifdef +__cplusplus + +} + +inline +double +pow\(double +__d,int +__expon\) +{ + [ ]+return +pow\(__d,\(double\)__expon\); + +} + +extern +"C" +{ + #else + # +endif + END_POW_INLINE; + + c_fix = format; + c_fix_arg = ""; + + test_text = + "# ifdef __cplusplus\n" + " }\n" + " inline double pow(double __d,int __expon) {\n" + "\t return pow(__d,(double)__expon);\n" + " }\n" + ' extern "C"' " {\n" + "#else\n" + "# endif"; +}; + +fix = { + hackname = hpux11_cpp_pow_inline; + files = math.h; + select = " +inline double pow\\(double d,int expon\\) {\n" + " +return pow\\(d, \\(double\\)expon\\);\n" + " +}\n"; + c_fix = format; + c_fix_arg = ""; + + test_text = + " inline double pow(double d,int expon) {\n" + " return pow(d, (double)expon);\n" + " }\n"; +}; + + +/* * Keep HP-UX 11 from stomping on C++ math namespace * with defines for fabsf. */ @@ -1038,7 +1135,25 @@ fix = { /* - * In inttypes.h on HPUX 11, the use of __CONCAT__ in the definition + * Prevent HP-UX 11 from defining __size_t and preventing size_t from + * being defined by having it define _hpux_size_t instead. + */ +fix = { + hackname = hpux11_size_t; + mach = "*-hp-hpux11*"; + select = "__size_t"; + + c_fix = format; + c_fix_arg = "_hpux_size_t"; + + test_text = + "#define __size_t size_t\n" + " extern int getpwuid_r( char *, __size_t, struct passwd **);\n"; +}; + + +/* + * In inttypes.h on HPUX 11, the use of __CONCAT__ in the definition * of UINT32_C has undefined behavior according to ISO/ANSI: * the arguments to __CONCAT__ are not macro expanded before the * concatination happens so the trailing ')' in the first argument @@ -1046,7 +1161,7 @@ fix = { * invalid pp token. The behavior of invalid pp tokens is undefined. * GCC does not handle these invalid tokens the way the HP compiler does. * This problem will potentially occur anytime macros are used in the - * arguments to __CONCAT__. A general solution to this problem would be to + * arguments to __CONCAT__. A general solution to this problem would be to * insert another layer of macro between __CONCAT__ and its use * in UINT32_C. An example of this solution can be found in the C standard. * A more specific solution, the one used here, is to change the UINT32_C @@ -1066,6 +1181,22 @@ fix = { /* + * Fix hpux 11.00 broken vsnprintf declaration + */ +fix = { + hackname = hpux11_vsnprintf; + files = stdio.h; + select = '(extern int vsnprintf\(char \*, _[hpux]*_size_t, ' + 'const char \*,) __va__list\);'; + c_fix = format; + c_fix_arg = "%1 __va_list);"; + + test_text = 'extern int vsnprintf(char *, _hpux_size_t, const char *,' + ' __va__list);'; +}; + + +/* * get rid of bogus inline definitions in HP-UX 8.0 */ fix = { @@ -1083,43 +1214,54 @@ fix = { /* - * Fix return type of abort and free + * HPUX 10.x sys/param.h defines MAXINT which clashes with values.h */ fix = { - hackname = int_abort_free_and_exit; - files = stdlib.h; - select = "int[ \t]+(abort|free|exit)[ \t]*\\("; + hackname = hpux_maxint; + files = sys/param.h; + files = values.h; + select = "^#[ \t]*define[ \t]+MAXINT[ \t]"; + bypass = "^#[ \t]*ifndef[ \t]+MAXINT"; + test = + "-n \"`egrep '#[ \t]*define[ \t]+MAXINT[ \t]' sys/param.h`\""; c_fix = format; - c_fix_arg = "void\t%1("; + c_fix_arg = "#ifndef MAXINT\n%0\n#endif"; + c_fix_arg = "^#[ \t]*define[ \t]+MAXINT[ \t].*"; - test_text = "extern int abort(int);\n" - "extern int free(void*);\n" - "extern int exit(void*);"; + test_text = '#define MAXINT 0x7FFFFFFF'; }; /* - * On Interactive Unix 2.2, certain traditional Unix definitions - * (notably getc and putc in stdio.h) are omitted if __STDC__ is - * defined, not just if _POSIX_SOURCE is defined. This makes it - * impossible to compile any nontrivial program except with -posix. + * Fix hpux10.20 to avoid invalid forward decl */ fix = { - hackname = isc_omits_with_stdc; + hackname = hpux_systime; + files = sys/time.h; + select = "^extern struct sigevent;"; - files = "stdio.h"; - files = "math.h"; - files = "ctype.h"; - files = "sys/limits.h"; - files = "sys/fcntl.h"; - files = "sys/dirent.h"; + c_fix = format; + c_fix_arg = "struct sigevent;"; + + test_text = 'extern struct sigevent;'; +}; + + +/* + * Fix return type of abort and free + */ +fix = { + hackname = int_abort_free_and_exit; + files = stdlib.h; + select = "int[ \t]+(abort|free|exit)[ \t]*\\("; - select = '!defined\(__STDC__\) && !defined\(_POSIX_SOURCE\)'; c_fix = format; - c_fix_arg = '!defined(_POSIX_SOURCE)'; - test_text = "#if !defined(__STDC__) && !defined(_POSIX_SOURCE) /* ? ! */" - "\nint foo;\n#endif"; + c_fix_arg = "void\t%1("; + + test_text = "extern int abort(int);\n" + "extern int free(void*);\n" + "extern int exit(void*);"; }; @@ -1149,6 +1291,8 @@ fix = { "#define BSD43__IOWR(n, x) (('n'<<8)+x)\n" "#define _IOWN(x,y,t) (_IOC_IN|(((t)&_IOCPARM_MASK)<<16)|('x'<<8)|y)\n" "#define _IO(x,y) ('x'<<8|y)"; + test_text = + "#define XX_IO(x) ('x'<<8|256)"; }; fix = { @@ -1164,37 +1308,6 @@ fix = { /* - * HPUX 10.x sys/param.h defines MAXINT which clashes with values.h - */ -fix = { - hackname = hpux_maxint; - files = sys/param.h; - select = "^#[ \t]*define[ \t]*MAXINT[ \t]"; - - c_fix = format; - c_fix_arg = "#ifndef MAXINT\n%0\n#endif"; - c_fix_arg = "^#[ \t]*define[ \t]*MAXINT[ \t].*"; - - test_text = '#define MAXINT 0x7FFFFFFF'; -}; - - -/* - * Fix hpux10.20 to avoid invalid forward decl - */ -fix = { - hackname = hpux_systime; - files = sys/time.h; - select = "^extern struct sigevent;"; - - c_fix = format; - c_fix_arg = "struct sigevent;"; - - test_text = 'extern struct sigevent;'; -}; - - -/* * Check for missing ';' in struct */ fix = { @@ -1229,17 +1342,31 @@ fix = { /* - * Some IRIX header files contain the string "//" + * Non-traditional "const" declaration in Irix's limits.h. */ fix = { - hackname = irix_multiline_cmnt; - files = sys/types.h; + hackname = irix_limits_const; + files = fixinc-test-limits.h, limits.h; + select = "^extern const "; + c_fix = format; + c_fix_arg = "extern __const "; + test_text = "extern const char limit; /* test limits */"; +}; + + +/* + * IRIX 5.x's stdio.h declares some functions that take a va_list as + * taking char *. However, GCC uses void * for va_list, so + * calling vfprintf with a va_list fails in C++. */ +fix = { + hackname = irix_stdio_va_list; + files = stdio.h; - sed = "s@type of the result@type of the result */@"; - sed = "s@of the sizeof@/* of the sizeof@"; + select = '(printf\(.*), /\* va_list \*/ char \*'; + c_fix = format; + c_fix_arg = "%1, __gnuc_va_list"; test_text = - "/* we check the type of the result\n" - "// of the sizeof something. This is a bad test :-( */"; + "extern int printf( const char *, /* va_list */ char * );"; }; @@ -1257,6 +1384,30 @@ fix = { /* + * On Interactive Unix 2.2, certain traditional Unix definitions + * (notably getc and putc in stdio.h) are omitted if __STDC__ is + * defined, not just if _POSIX_SOURCE is defined. This makes it + * impossible to compile any nontrivial program except with -posix. + */ +fix = { + hackname = isc_omits_with_stdc; + + files = "stdio.h"; + files = "math.h"; + files = "ctype.h"; + files = "sys/limits.h"; + files = "sys/fcntl.h"; + files = "sys/dirent.h"; + + select = '!defined\(__STDC__\) && !defined\(_POSIX_SOURCE\)'; + c_fix = format; + c_fix_arg = '!defined(_POSIX_SOURCE)'; + test_text = "#if !defined(__STDC__) && !defined(_POSIX_SOURCE) /* ? ! */" + "\nint foo;\n#endif"; +}; + + +/* * These files in Sun OS 4.x and ARM/RISCiX and BSD4.3 * use / * * / to concatenate tokens. */ @@ -1288,6 +1439,41 @@ fix = { /* + * GNU libc1 string.h does not prototype memcpy and memcmp for gcc + * versions > 1. This fix will open up the declaration for all + * versions of GCC and for g++. + */ +fix = { + hackname = libc1_ifdefd_memx; + + /* The string.h result is overwritten by AAB_ultrix_string when doing + "make check" and will fail. Therefore, we add the following kludgery + to insert the test_text into the special testing header. :-} */ + files = testing.h; + files = string.h; + + c_fix = format; + select = "' is a built-in function for gcc 2\\.x\\. \\*/"; + bypass = __cplusplus; + c_fix_arg = "%1"; + c_fix_arg = + '/\* `mem...\' is a built-in function for gcc 2\.x\. \*/' "\n" + '#if defined\(__STDC__\) && __GNUC__ < 2' "\n" + "(/\\* .* \\*/\n" + "extern [a-z_]+ mem.*(\n[^#].*)*;)\n" + "#endif"; + + test_text = + "/* \\`memcpy' is a built-in function for gcc 2.x. */\n" + "#if defined(__STDC__) && __GNUC__ < 2\n" + "/* Copy N bytes of SRC to DEST. */\n" + "extern __ptr_t memcpy __P ((__ptr_t __dest, __const __ptr_t __src,\n" + " size_t __n));\n" + "#endif"; +}; + + +/* * In limits.h, put #ifndefs around things that are supposed to be defined * in float.h to avoid redefinition errors if float.h is included first. * On HP/UX this patch does not work, because on HP/UX limits.h uses @@ -1298,8 +1484,8 @@ fix = { */ fix = { hackname = limits_ifndefs; - files = "limits.h"; files = "sys/limits.h"; + files = "limits.h"; bypass = "ifndef[ \t]+FLT_MIN"; c_fix = format; @@ -1400,10 +1586,12 @@ fix = { /* * Fix BSD machine/ansi.h to use __builtin_va_list to define _BSD_VA_LIST_. + * + * On NetBSD, machine is a symbolic link to an architecture specific + * directory name, so we can't match a specific file name here. */ fix = { hackname = machine_ansi_h_va_list; - files = machine/ansi.h; select = "define[ \t]+_BSD_VA_LIST_[ \t]"; bypass = '__builtin_va_list'; @@ -1466,12 +1654,13 @@ fix = { fix = { hackname = math_huge_val_from_dbl_max; files = math.h; + /* * IF HUGE_VAL is defined to be DBL_MAX *and* DBL_MAX is _not_ defined * in math.h, this fix applies. */ - select = "define[ \t]*HUGE_VAL[ \t]*DBL_MAX"; - bypass = "define[ \t]*DBL_MAX"; + select = "define[ \t]+HUGE_VAL[ \t]+DBL_MAX"; + bypass = "define[ \t]+DBL_MAX"; shell = /* @@ -1480,13 +1669,17 @@ fix = { */ "\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h " - "2>/dev/null`\n\n" + "| sed 's/.*DBL_MAX[ \t]*//' 2>/dev/null`\n\n" "\tif ( test -n \"${dbl_max_def}\" ) > /dev/null 2>&1\n" "\tthen sed -e '/define[ \t]*HUGE_VAL[ \t]*DBL_MAX/" - "s/DBL_MAX/'\"$dbl_max_def/\"\n" + "s@DBL_MAX@'\"$dbl_max_def@\"\n" "\telse cat\n" "\tfi"; + + test_text = + "`echo '#define DBL_MAX\t3.1415e+9 /* really big */' >> float.h`\n" + "#define HUGE_VAL DBL_MAX"; }; @@ -1508,17 +1701,37 @@ fix = { /* + * nested comment + */ +fix = { + hackname = nested_auth_des; + files = rpc/rpc.h; + select = '(/\*.*rpc/auth_des\.h>.*)/\*'; + c_fix = format; + c_fix_arg = "%1*/ /*"; + test_text = "/*#include /* skip this */"; +}; + + +/* * Fix nested comments in Motorola's and */ fix = { hackname = nested_motorola; mach = "m68k-motorola-sysv*"; - files = limits.h; files = sys/limits.h; + files = limits.h; + select = "max # bytes atomic in write|error value returned by Math lib"; + sed = "s@^\\(#undef[ \t][ \t]*PIPE_BUF[ \t]*" "/\\* max # bytes atomic in write to a\\)$@\\1 */@"; sed = "s@\\(/\\*#define\tHUGE_VAL\t3.[0-9e+]* \\)" "\\(/\\*error value returned by Math lib\\*/\\)$@\\1*/ \\2@"; + + test_text = + "#undef PIPE_BUF /* max # bytes atomic in write to a\n" + "\t\t/* PIPE */\n" + "/*#define\tHUGE_VAL\t3.9e+9 /*error value returned by Math lib*/"; }; @@ -1536,19 +1749,6 @@ fix = { }; /* - * nested comment - */ -fix = { - hackname = nested_auth_des; - files = rpc/rpc.h; - select = '(/\*.*rpc/auth_des\.h>.*)/\*'; - c_fix = format; - c_fix_arg = "%1*/ /*"; - test_text = "/*#include /* skip this */"; -}; - - -/* * fix bogus recursive stdlib.h in NEWS-OS 4.0C */ fix = { @@ -1718,7 +1918,7 @@ fix = { /* - * function class(double x) conflicts with C++ keyword on rs/6000 + * function class(double x) conflicts with C++ keyword on rs/6000 */ fix = { hackname = rs6000_double; @@ -1747,7 +1947,7 @@ fix = { /* - * parameters conflict with C++ new on rs/6000 + * parameters conflict with C++ new on rs/6000 */ fix = { hackname = rs6000_param; @@ -1763,7 +1963,7 @@ fix = { /* - * The static functions lstat() and fchmod() in + * The static functions lstat() and fchmod() in * cause G++ grief since they're not wrapped in "if __cplusplus". * * On SCO OpenServer 5.0.0 through (at least) 5.0.5 contains @@ -1802,22 +2002,6 @@ fix = { /* - * "!__STDC__" is "!defined( __STRICT_ANSI__ )" - */ -fix = { - hackname = sco_strict_ansi; - mach = "i?86-*-sco3.2*"; - select = "^[ \t]*#[ \t]*if.*!__STDC__"; - - c_fix = format; - c_fix_arg = "%1defined(__STRICT_ANSI__)%2"; - c_fix_arg = "^([ \t]*#[ \t]*if[ \t].*!)__STDC__(.*)"; - - test_text = "#if !__STDC__ /* not standard C */\nint foo;\n#endif"; -}; - - -/* * Fix prototype declaration of utime in sys/times.h. * In 3.2v4.0 the const is missing. */ @@ -1835,6 +2019,34 @@ fix = { /* + * Sun Solaris defines PTHREAD_MUTEX_INITIALIZER with a trailing + * "0" for the last field of the pthread_mutex_t structure, which is + * of type upad64_t, which itself is typedef'd to int64_t, but with + * __STDC__ defined (e.g. by -ansi) it is a union. So change the + * initializer to "{0}" instead + */ +fix = { + hackname = solaris_mutex_init; + select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + files = pthread.h; + c_fix = format; + c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n" + "%0\n" + "#else\n" + "%1, {0}}%3\n" + "#endif"; + c_fix_arg = "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+{.*)" + ",[ \t]*0}" "(|[ \t].*)$"; + test_text = + '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n" + "#define PTHREAD_MUTEX_INITIALIZER\t{{{0},0}, {{{0}}}, 0}\n" + "#define PTHREAD_COND_INITIALIZER\t{{{0}, 0}, 0}\t/* DEFAULTCV */\n" + "#define PTHREAD_RWLOCK_INITIALIZER\t" + "{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}"; +}; + + +/* * Sony NEWSOS 5.0 does not support the complete ANSI C standard. */ #ifdef SONY @@ -1849,17 +2061,6 @@ fix = { /* - * Incorrect #include in Sony News-OS 3.2. - */ -fix = { - hackname = sony_include; - files = machine/machparam.h; - select = '"\.\./machine/endian.h"'; - sed = 's@"../machine/endian.h"@@'; -}; - - -/* * Sony NEWSOS 5.0 does not support the complete ANSI C standard. */ #ifdef SONY @@ -1933,11 +2134,12 @@ fix = { fix = { hackname = stdio_va_list; files = stdio.h; - bypass = '__gnuc_va_list|_BSD_VA_LIST_'; + bypass = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list'; /* * Use __gnuc_va_list in arg types in place of va_list. - * On 386BSD use __gnuc_va_list instead of _VA_LIST_. We're hoping the + * On 386BSD use __gnuc_va_list instead of _VA_LIST_. On Tru64 UNIX V5.1A + * use __gnuc_va_list instead of __VA_LIST__. We're hoping the * trailing parentheses and semicolon save all other systems from this. * Define __not_va_list__ (something harmless and unused) * instead of va_list. @@ -1946,6 +2148,7 @@ fix = { sed = "s@ va_list @ __gnuc_va_list @\n" "s@ va_list)@ __gnuc_va_list)@\n" "s@ _VA_LIST_));@ __gnuc_va_list));@\n" + "s@ __VA_LIST__));@ __gnuc_va_list));@\n" "s@ va_list@ __not_va_list__@\n" "s@\\*va_list@*__not_va_list__@\n" "s@ __va_list)@ __gnuc_va_list)@\n" @@ -1955,22 +2158,88 @@ fix = { "s@_NEED___VA_LIST@_NEED___Va_LIST@\n" "s@VA_LIST@DUMMY_VA_LIST@\n" "s@_Va_LIST@_VA_LIST@"; + test_text = "extern void mumble( va_list);"; }; /* - * Check for strict ansi compliance + * "!__STDC__" or "__STDC__==0" or "__STDC__!=1" or "__STDC__-0==0" + * is "!defined( __STRICT_ANSI__ )" */ -#ifdef STRICT_ANSI fix = { - hackname = strict_ansi; - select = "__STDC__[ \t]*[=!]=[ \t]*[01]"; - sed = "s/__STDC__[ \t]*==[ \t]*0/!defined (__STRICT_ANSI__)/g"; - sed = "s/__STDC__[ \t]*!=[ \t]*0/defined (__STRICT_ANSI__)/g"; - sed = "s/__STDC__[ \t]*==[ \t]*1/defined (__STRICT_ANSI__)/g"; - sed = "s/__STDC__[ \t]*!=[ \t]*1/!defined (__STRICT_ANSI__)/g"; + hackname = strict_ansi_not; + select = "^([ \t]*#[ \t]*if.*)" + "(!__STDC__" + "|__STDC__[ \t]*==[ \t]*0" + "|__STDC__[ \t]*!=[ \t]*1" + "|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)"; + /* Tru64 UNIX V4.0F/V5.1 supports GCC usage of __STDC__. */ + bypass = 'GNU and MIPS C compilers define __STDC__ differently'; + c_test = stdc_0_in_system_headers; + + c_fix = format; + c_fix_arg = "%1 !defined(__STRICT_ANSI__)"; + + test_text = "#if !__STDC__ \n" + "#if __STDC__ == 0\n" + "#if __STDC__ != 1\n" + "#if __STDC__ - 0 == 0" + "/* not std C */\nint foo;\n" + "\n#end-end-end-end-if :-)"; +}; + +/* + * "__STDC__-0==0" + * is "!defined( __STRICT_ANSI__ )" on continued #if-s + */ +fix = { + hackname = strict_ansi_not_ctd; + files = math.h, limits.h, stdio.h, signal.h, + stdlib.h, sys/signal.h, time.h; + /* + * Starting at the beginning of a line, skip white space and + * a leading "(" or "&&" or "||". One of those must be found. + * Then, zero, one or more copies of a "defined(_FOO_BAR_) &&" + * expression. If these are nested, then they must accumulate + * because we won't match any closing parentheses. Finally, + * after skipping over all that, we must then match our suspect + * phrase: "__STDC__-0==0" with or without white space. + */ + select = "^([ \t]*" '(\(|&&|\|\|)' + "([ \t(]*!*[ \t]*defined\\([a-zA-Z_0-9]+\\)[ \t]*[|&][|&])*" + "[ \t(]*)" + "(__STDC__[ \t]*(|-[ \t]*0[ \t]*)==[ \t]*0)"; + c_test = stdc_0_in_system_headers; + + c_fix = format; + c_fix_arg = "%1 !defined(__STRICT_ANSI__)"; + + test_text = "#if 1 && \\\\\n" + "&& defined(mumbling) |& (__STDC__ - 0 == 0) \\\\\n" + "( __STDC__ == 0 && !defined(_XOPEN_SOURCE) \\\\\n" + "|| __STDC__ - 0 == 0 ) /* not std C */\n" + "int foo;\n#endif"; +}; + + +/* + * "__STDC__!=0" or "__STDC__==1" or "__STDC__-0==1" + * is "defined( __STRICT_ANSI__ )" + */ +fix = { + hackname = strict_ansi_only; + select = "^([ \t]*#[ \t]*if.*)" + "(__STDC__[ \t]*!=[ \t]*0" + "|__STDC__[ \t]*==[ \t]*1" + "|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*1" + "|__STDC__[ \t]*-[ \t]*0[ \t]*!=[ \t]*0)"; + c_test = stdc_0_in_system_headers; + + c_fix = format; + c_fix_arg = "%1 defined(__STRICT_ANSI__)"; + + test_text = "#if __STDC__ == 1 /* is std C\n */\nint foo;\n#endif"; }; -#endif /* @@ -2127,7 +2396,7 @@ fix = { files = math.h; /* If matherr has a prototype already, the header needs no fix. */ - bypass = 'matherr.*struct exception'; + bypass = 'matherr.*(struct exception|__MATH_EXCEPTION)'; select = matherr; c_fix = wrap; @@ -2186,8 +2455,6 @@ fix = { * Conditionalize some of on __GNUC__ and __GNUG__. * On some systems (UnixWare 2, UnixWare 7), the file is byteorder.h * but we still "hijack" it and redirect it to the GNU byteorder.h.. - * - * */ #ifdef SVR5 fix = { @@ -2476,7 +2743,7 @@ fix = { #endif -/* +/* * Like svr4_mach_defines, but with newfangled syntax. * Source lines are of #define __i386 #machine(i386). Delete them. */ @@ -2491,80 +2758,6 @@ fix = { /* - * Fix these files to use the same types that we think they should. - * XXX - extremely dubious changes here. - */ -fix = { - hackname = systypes; - files = "sys/types.h"; - files = "stdlib.h"; - files = "sys/stdtypes.h"; - files = "stddef.h"; - files = "memory.h"; - files = "unistd.h"; - select = "typedef[ \t]+[a-z_][ \ta-z_]*[ \t]" - "(size|ptrdiff|wchar)_t"; - - sed = "/^[ \t]*\\*[ \t]*typedef unsigned int size_t;/N"; - - sed = "s/^\\([ \t]*\\*[ \t]*typedef unsigned int size_t;\\n" - "[ \t]*\\*\\/\\)/\\1\\\n" - "#ifndef __SIZE_TYPE__\\\n" - "#define __SIZE_TYPE__ long unsigned int\\\n" - "#endif\\\n" - "typedef __SIZE_TYPE__ size_t;\\\n/"; - - sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/i\\\n" - "#ifndef __SIZE_TYPE__\\\n" - "#define __SIZE_TYPE__ long unsigned int\\\n" - "#endif\n"; - - sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/" - "typedef __SIZE_TYPE__ size_t/"; - - sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/i\\\n" - "#ifndef __PTRDIFF_TYPE__\\\n" - "#define __PTRDIFF_TYPE__ long int\\\n" - "#endif\n"; - - sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/" - "typedef __PTRDIFF_TYPE__ ptrdiff_t/"; - - sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/i\\\n" - "#ifndef __WCHAR_TYPE__\\\n" - "#define __WCHAR_TYPE__ int\\\n" - "#endif\\\n" - "#ifndef __cplusplus\n"; - - sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/a\\\n" - "#endif\n"; - - sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/" - "typedef __WCHAR_TYPE__ wchar_t/"; -}; - - -/* - * Fix files that may contain a stray definition of size_t. Take care - * not to match ssize_t or mere uses of size_t. - */ -fix = { - hackname = systypes_stdlib_size_t; - files = sys/types.h; - files = stdlib.h; - select = "typedef[ \t]+[A-Za-z_][ \tA-Za-z_]*[ \t]size_t.*"; - bypass = "_(GCC|BSD)_SIZE_T"; - - c_fix = format; - c_fix_arg = - "#ifndef _GCC_SIZE_T\n" - "#define _GCC_SIZE_T\n%0\n#endif"; - - test_text = "typedef unsigned int size_t; /* size of something */"; -}; - - -/* * Fix return value of mem{ccpy,chr,cpy,set} and str{len,spn,cspn} * in string.h on sysV68 * Correct the return type for strlen in string.h on Lynx. @@ -2574,18 +2767,40 @@ fix = { */ fix = { hackname = sysv68_string; + files = testing.h; files = string.h; sed = "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/"; sed = "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/"; sed = "s/strdup(char \\*s1);/strdup(const char *s1);/"; + sed = "/^extern char$/N"; sed = "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/"; - sed = "/^\tstrncmp(),$/N"; - sed = "s/^\\(\tstrncmp()\\),\\n\\(\tstrlen(),\\)$/\\1;\\\n" - "extern unsigned int\\\n\\2/"; + sed = "/^extern int$/N"; sed = "s/^extern int\\(\\n\tstrlen(),\\)/extern size_t\\1/"; + + sed = "/^\tstrncmp(),$/N"; + sed = 's/^\(' "\t" 'strncmp()\),\n\(' "\t" 'strlen(),\)$/' + '\1;' "\\\nextern unsigned int\\\n\\2/"; + + test_text = + "extern int strlen();\n" + + "extern int ffs(long);\n" + + "extern char\n" + "\t*memccpy(),\n" + "\tmemcpy();\n" + + "extern int\n" + "\tstrcmp(),\n" + "\tstrncmp(),\n" + "\tstrlen(),\n" + "\tstrspn();\n" + + "extern int\n" + "\tstrlen(), strspn();"; }; @@ -2609,40 +2824,6 @@ fix = { /* - * Fix this Sun file to avoid interfering with stddef.h. - * We use a funny name to ensure it follows 'systypes' fix. - */ -fix = { - hackname = sysz_stdtypes_for_sun; - files = sys/stdtypes.h; - sed = "/[\t ]size_t.*;/i\\\n" - "#ifndef _GCC_SIZE_T\\\n" - "#define _GCC_SIZE_T\n"; - - sed = "/[\t ]size_t.*;/a\\\n" - "#endif\n"; - - sed = "/[\t ]ptrdiff_t.*;/i\\\n" - "#ifndef _GCC_PTRDIFF_T\\\n" - "#define _GCC_PTRDIFF_T\n"; - - sed = "/[\t ]ptrdiff_t.*;/a\\\n" - "#endif\n"; - - sed = "/[\t ]wchar_t.*;/i\\\n" - "#ifndef _GCC_WCHAR_T\\\n" - "#define _GCC_WCHAR_T\n"; - - sed = "/[\t ]wchar_t.*;/a\\\n" - "#endif\n"; - - test_text = "typedef int size_t; /* ??? */\n" - "typedef int ptrdiff_t; /* result of subtracting two pointers */\n" - "typedef unsigned short wchar_t; /* big enough for biggest char set */\n"; -}; - - -/* * if the #if says _cplusplus, not the double underscore __cplusplus * that it should be */ @@ -2658,6 +2839,21 @@ fix = { /* + * function parameter to atexit is missing "void" on VAX Ultrix 4.3. + */ +fix = { + hackname = ultrix_atexit_param; + files = stdlib.h; + select = 'atexit\(.*\(\)'; + + c_fix = format; + c_fix_arg = "atexit( void (*__func)( void )"; + + test_text = "int atexit( void (*__func)() );\n"; +}; + + +/* * parameter to atof not const on DECstation Ultrix V4.0 and NEWS-OS 4.2R. */ fix = { @@ -2754,12 +2950,14 @@ fix = { * Strip "|| CC$gfloat" from Ultrix math headers. */ fix = { - hackname = ultrix_math_ifdef; - files = float.h; - files = math.h; - files = sys/limits.h; - select = "^#if.*\\|\\|[ \t]+CC\\$[a-z]+"; - sed = "/^#if/s/||[ \t][ \t]*CC$[a-z][a-z]*//"; + hackname = ultrix_math_ifdef; + files = sys/limits.h; + files = float.h; + files = math.h; + select = "^(#if.*)\\|\\|[ \t]+CC\\$[a-z]+"; + c_fix = format; + c_fix_arg = "%1"; + test_text = '#if defined(__GFLOAT) || CC\$gfloat'; }; @@ -2856,6 +3054,23 @@ fix = { test_text = "#define NULL 0UL\r\n#define NULL\t((void*)0)\n"; }; +/* + * On Cray Unicos/Mk some standard headers use the C99 keyword "restrict" + * which must be replaced by __restrict__ for GCC. + */ +fix = { + hackname = unicosmk_restrict; + files = stdio.h; + files = stdlib.h; + files = wchar.h; + mach = "*-*-unicosmk*"; + select = "(\\*[ \t]*)restrict([ \t]+)"; + + c_fix = format; + c_fix_arg = "%1__restrict__%2"; + + test_text = "void f (char * restrict x);"; +}; /* * If arpa/inet.h prototypes are incompatible with the ones we just @@ -2864,9 +3079,10 @@ fix = { * on those systems where the replacement byteorder header is installed. */ fix = { - hackname = unixware7_byteorder_fix; + hackname = uw7_byteorder_fix; files = arpa/inet.h; select = "in_port_t"; + test = "-f sys/byteorder.h"; #ifndef SVR5 mach = "*-*-sysv4*"; mach = "i?86-*-sysv5*"; @@ -2875,8 +3091,15 @@ fix = { mach = "powerpcle-*-solaris2.[0-4]"; mach = "sparc-*-solaris2.[0-4]"; #endif /* SVR5 */ - sed = '/^extern.*htons.*(in_port_t)/d'; - sed = '/^extern.*ntohs.*(in_port_t)/d'; + + c_fix = format; + c_fix_arg = ""; + c_fix_arg = "^extern.*[ \t](htons|ntohs).*\\(in_port_t\\).*;"; + + test_text = "extern in_port_t\thtons __P((in_port_t));\n" + "extern in_port_t\tntohs __P((in_port_t));" + "`[ ! -d $DESTDIR/sys ] && mkdir $DESTDIR/sys\n" + "echo '/* DUMMY */' >> sys/byteorder.h`"; }; @@ -3030,15 +3253,13 @@ fix = { * we find __cplusplus in the file. These were found on the RS/6000. */ fix = { - hackname = x11_class; - files = X11/ShellP.h; - bypass = __cplusplus; - sed = "/char \\*class;/i\\\n" - "#ifdef __cplusplus\\\n" - "\tchar *c_class;\\\n" - "#else\n"; - sed = "/char \\*class;/a\\\n" - "#endif\n"; + hackname = x11_class; + files = X11/ShellP.h; + bypass = __cplusplus; + select = "^([ \t]*char \\*)class;(.*)"; + c_fix = format; + c_fix_arg = "#ifdef __cplusplus\n%1c_class;%2\n" + "#else\n%1class;%2\n#endif"; test_text = "struct {\n" " char *class;\n"