/* -*- Mode: C -*-  */

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=inclhack.sorted \
          pattern='^/\*$' \
          trailer='^/\*EOF\*[/]' \
          input=inclhack.def \
          key=$'hackname[ \t]*=[ \t]*(.*);'

   Set up a debug test so we can make the templates emit special
   code while debugging these fixes:  */

#ifdef DEBUG
FIXINC_DEBUG = yes;
#endif

/* On AIX when _LARGE_FILES is defined stdio.h defines fopen to
 * fopen64 etc. and this causes problems when building with g++
 * because cstdio udefs everything from stdio.h, leaving us with
 * ::fopen has not been declared errors. This fixes stdio.h to
 * undef those defines and use __asm__ to alias the symbols if
 * building with g++ and -D_LARGE_FILES
 */
fix = {
    hackname  = AAB_aix_stdio;
    files     = stdio.h;
    select    = "define fopen fopen64";
    mach      = "*-*-aix*";
    test-text = ''; /* no way to test */

    c_fix     = wrap;

    c_fix_arg = "";

    c_fix_arg = <<- _EOArg_

	#if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus
	#define __need__aix_stdio_h_fix
	#ifdef __need__aix_stdio_h_fix
	#undef fseeko
	#undef ftello
	#undef fgetpos
	#undef fsetpos
	#undef fopen
	#undef freopen
	/* Alias the symbols using asm */
	extern "C" {
	extern int fgetpos(FILE *, fpos64_t *) __asm__("fgetpos64");
	extern FILE *fopen(const char *, const char *) __asm__("fopen64");
	extern FILE *freopen(const char *, const char *, FILE *) __asm__("freopen64");
	extern int fseeko(FILE *, off64_t, int) __asm__("fseeko64");
	extern int fsetpos(FILE *, const fpos64_t *) __asm__("fsetpos64");
	extern off64_t ftello(FILE *) __asm__("ftello64");
	}
	#endif
	#endif

	_EOArg_;
};

/* On AIX when _LARGE_FILES is defined fcntl.h defines open to
 * open64 and creat to creat64.  This fixes fcntl.h to
 * undef those defines and use __asm__ to alias the symbols if
 * building with g++ and -D_LARGE_FILES
 */
fix = {
    hackname  = AAB_aix_fcntl;
    files     = fcntl.h;
    select    = "define open[ \t]open64";
    mach      = "*-*-aix*";
    test-text = ''; /* no way to test */

    c_fix     = wrap;

    c_fix_arg = "";

    c_fix_arg = <<- _EOArg_

	#if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus
	#define __need__aix_fcntl_h_fix
	#ifdef __need__aix_fcntl_h_fix
	#undef open
	#undef creat
	#undef openat
	/* Alias the symbols using asm */
	extern "C" {
	extern int open(const char *, int, ...) __asm__("open64");
	extern int creat(const char *, mode_t) __asm__("creat64");
	#if (_XOPEN_SOURCE >= 700)
	extern int openat(int, const char *, int, ...) __asm__("open64at");
	#endif
	}
	#endif
	#endif

	_EOArg_;
};

/*
 *  On Mac OS 10.3.9, the 'long double' functions are available in
 *  libSystem, but are not prototyped in math.h.
 */
fix = {
  hackname  = AAB_darwin7_9_long_double_funcs;
  mach      = "*-*-darwin7.9*";
  files     = architecture/ppc/math.h;
  bypass    = "powl";
  replace = <<- _EndOfHeader_
	/* This file prototypes the long double functions available on Mac OS
	   10.3.9.  */
	#ifndef __MATH__
	# undef __APPLE_CC__
	# define __APPLE_CC__  1345
	# include_next <architecture/ppc/math.h>
	# undef __APPLE_CC__
	# define __APPLE_CC__ 1
	# ifndef __LIBMLDBL_COMPAT
	#  ifdef __LONG_DOUBLE_128__
	#   define __LIBMLDBL_COMPAT(sym) __asm("_" #sym "$LDBL128")
	#  else
	#   define __LIBMLDBL_COMPAT(sym)
	#  endif /* __LONG_DOUBLE_128__ */
	# endif /* __LIBMLDBL_COMPAT */
	# ifdef __cplusplus
	   extern "C" {
	# endif
	  extern long double acosl( long double ) __LIBMLDBL_COMPAT(acosl);
	  extern long double asinl( long double ) __LIBMLDBL_COMPAT(asinl);
	  extern long double atanl( long double ) __LIBMLDBL_COMPAT(atanl);
	  extern long double atan2l( long double, long double ) __LIBMLDBL_COMPAT(atan2l);
	  extern long double cosl( long double ) __LIBMLDBL_COMPAT(cosl);
	  extern long double sinl( long double ) __LIBMLDBL_COMPAT(sinl);
	  extern long double tanl( long double ) __LIBMLDBL_COMPAT(tanl);
	  extern long double acoshl( long double ) __LIBMLDBL_COMPAT(acoshl);
	  extern long double asinhl( long double ) __LIBMLDBL_COMPAT(asinhl);
	  extern long double atanhl( long double ) __LIBMLDBL_COMPAT(atanhl);
	  extern long double coshl( long double ) __LIBMLDBL_COMPAT(coshl);
	  extern long double sinhl( long double ) __LIBMLDBL_COMPAT(sinhl);
	  extern long double tanhl( long double ) __LIBMLDBL_COMPAT(tanhl);
	  extern long double expl( long double ) __LIBMLDBL_COMPAT(expl);
	  extern long double exp2l( long double ) __LIBMLDBL_COMPAT(exp2l);
	  extern long double expm1l( long double ) __LIBMLDBL_COMPAT(expm1l);
	  extern long double logl( long double ) __LIBMLDBL_COMPAT(logl);
	  extern long double log10l( long double ) __LIBMLDBL_COMPAT(log10l);
	  extern long double log2l( long double ) __LIBMLDBL_COMPAT(log2l);
	  extern long double log1pl( long double ) __LIBMLDBL_COMPAT(log1pl);
	  extern long double logbl( long double ) __LIBMLDBL_COMPAT(logbl);
	  extern long double modfl( long double, long double * ) __LIBMLDBL_COMPAT(modfl);
	  extern long double ldexpl( long double, int ) __LIBMLDBL_COMPAT(ldexpl);
	  extern long double frexpl( long double, int * ) __LIBMLDBL_COMPAT(frexpl);
	  extern int ilogbl( long double ) __LIBMLDBL_COMPAT(ilogbl);
	  extern long double scalbnl( long double, int ) __LIBMLDBL_COMPAT(scalbnl);
	  extern long double scalblnl( long double, long int ) __LIBMLDBL_COMPAT(scalblnl);
	  extern long double fabsl( long double ) __LIBMLDBL_COMPAT(fabsl);
	  extern long double cbrtl( long double ) __LIBMLDBL_COMPAT(cbrtl);
	  extern long double hypotl( long double, long double ) __LIBMLDBL_COMPAT(hypotl);
	  extern long double powl( long double, long double ) __LIBMLDBL_COMPAT(powl);
	  extern long double sqrtl( long double ) __LIBMLDBL_COMPAT(sqrtl);
	  extern long double erfl( long double ) __LIBMLDBL_COMPAT(erfl);
	  extern long double erfcl( long double ) __LIBMLDBL_COMPAT(erfcl);
	  extern long double lgammal( long double ) __LIBMLDBL_COMPAT(lgammal);
	  extern long double tgammal( long double ) __LIBMLDBL_COMPAT(tgammal);
	  extern long double ceill( long double ) __LIBMLDBL_COMPAT(ceill);
	  extern long double floorl( long double ) __LIBMLDBL_COMPAT(floorl);
	  extern long double nearbyintl( long double ) __LIBMLDBL_COMPAT(nearbyintl);
	  extern long double rintl( long double ) __LIBMLDBL_COMPAT(rintl);
	  extern long int lrintl( long double ) __LIBMLDBL_COMPAT(lrintl);
	  extern long long int llrintl( long double ) __LIBMLDBL_COMPAT(llrintl);
	  extern long double roundl( long double ) __LIBMLDBL_COMPAT(roundl);
	  extern long int lroundl( long double ) __LIBMLDBL_COMPAT(lroundl);
	  extern long long int llroundl( long double ) __LIBMLDBL_COMPAT(llroundl);
	  extern long double truncl( long double ) __LIBMLDBL_COMPAT(truncl);
	  extern long double fmodl( long double, long double) __LIBMLDBL_COMPAT(fmodl);
	  extern long double remainderl( long double, long double ) __LIBMLDBL_COMPAT(remainderl);
	  extern long double remquol( long double, long double, int * ) __LIBMLDBL_COMPAT(remquol);
	  extern long double copysignl( long double, long double ) __LIBMLDBL_COMPAT(copysignl);
	  extern long double nanl( const char * ) __LIBMLDBL_COMPAT(nanl);
	  extern long double nextafterl( long double, long double ) __LIBMLDBL_COMPAT(nextafterl);
	  extern long double nexttowardl( long double, long double ) __LIBMLDBL_COMPAT(nexttowardl);
	  extern long double fdiml( long double, long double ) __LIBMLDBL_COMPAT(fdiml);
	  extern long double fmaxl( long double, long double ) __LIBMLDBL_COMPAT(fmaxl);
	  extern long double fminl( long double, long double ) __LIBMLDBL_COMPAT(fminl);
	  extern long double fmal( long double, long double, long double ) __LIBMLDBL_COMPAT(fmal);
	# ifdef __cplusplus
	   }
	# endif
	#endif /* __MATH__ */
	_EndOfHeader_;
};

/*
 *  SDKs for 10.13 and 10.14 omit the definitions for API_AVAILABLE where
 *  __attribute__((availability)) is not supported.
 */
fix = {
    hackname  = darwin_api_availability;
    mach      = "*-*-darwin*";
    files     = os/availability.h;
    bypass    = "__IPHONE_OS_VERSION_MIN_REQUIRED";
    select    =
    " *#define __API_AVAILABLE.*\n"
    " *#define __API_DEPRECATED.*\n"
    " *#define __API_DEPRECATED_WITH_REPLACEMENT.*\n"
    " *#define __API_UNAVAILABLE.*\n";
    c_fix     = format;
    c_fix_arg =
    "    #define API_AVAILABLE(...)\n"
    "    #define API_DEPRECATED(...)\n"
    "    #define API_DEPRECATED_WITH_REPLACEMENT(...)\n"
    "    #define API_UNAVAILABLE(...)\n";
    test_text =
    "#define __API_AVAILABLE(...)\n"
    "#define __API_DEPRECATED(...)\n"
    "#define __API_DEPRECATED_WITH_REPLACEMENT(...)\n"
    "#define __API_UNAVAILABLE(...)\n";
};

/*
 *  This fixes __FD_ZERO bug for linux 2.x.y (x <= 2 && y <= some n)
 */
fix = {
    hackname = AAB_fd_zero_asm_posix_types_h;
    files    = asm/posix_types.h;
    mach     = 'i[34567]86-*-linux*';
    bypass   = '} while';
    bypass   = 'x86_64';
    bypass   = 'posix_types_64';

    /*
     * Define _POSIX_TYPES_H_WRAPPER at the end of the wrapper, not
     * the start, so that if #include_next gets another instance of
     * the wrapper, this will follow the #include_next chain until
     * we arrive at the real <asm/posix_types.h>.
     */
    replace  = <<-  _EndOfHeader_
	/* This file fixes a bug in the __FD_ZERO macro
	   for older versions of the Linux kernel. */
	#ifndef _POSIX_TYPES_H_WRAPPER
	#include <features.h>
	 #include_next <asm/posix_types.h>
	
	#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 */
	_EndOfHeader_;
};

/*
 *  This fixes __FD_ZERO bug for glibc-1.x
 */
fix = {
    hackname = AAB_fd_zero_gnu_types_h;
    files    = gnu/types.h;
    mach     = 'i[34567]86-*-linux*';

    /*
     * Define _TYPES_H_WRAPPER at the end of the wrapper, not
     * the start, so that if #include_next gets another instance of
     * the wrapper, this will follow the #include_next chain until
     * we arrive at the real <gnu/types.h>.
     */
    replace  = <<-  _EndOfHeader_
	/* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */
	#ifndef _TYPES_H_WRAPPER
	#include <features.h>
	#include_next <gnu/types.h>

	#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" ((__fd_set *) (fdsetp)) :"memory"); \
	  } while (0)
	#endif

	#define _TYPES_H_WRAPPER
	#endif /* _TYPES_H_WRAPPER */
	_EndOfHeader_;
};

/*
 *  This fixes __FD_ZERO bug for glibc-2.0.x
 */
fix = {
    hackname = AAB_fd_zero_selectbits_h;
    files    = selectbits.h;
    mach     = 'i[34567]86-*-linux*';

    /*
     * Define _SELECTBITS_H_WRAPPER at the end of the wrapper, not
     * the start, so that if #include_next gets another instance of
     * the wrapper, this will follow the #include_next chain until
     * we arrive at the real <selectbits.h>.
     */
    replace  = <<-  _EndOfHeader_
	/* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */
	#ifndef _SELECTBITS_H_WRAPPER
	  #include <features.h>
	  #include_next <selectbits.h>

	  #if defined(__FD_ZERO) && defined(__GLIBC__) \\
	  && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\
	  && __GLIBC_MINOR__ == 0
	     #undef __FD_ZERO
	     #define __FD_ZERO(fdsetp) \\
	     do { \\
	        int __d0, __d1; \\
	      __asm__ __volatile__ ("cld; rep; stosl" \\
                        : "=&c" (__d0), "=&D" (__d1) \\
                        : "a" (0), "0" (sizeof (__fd_set) \\
                                        / sizeof (__fd_mask)), \\
                          "1" ((__fd_mask *) (fdsetp)) \\
                        : "memory"); \\
	      } while (0)
	  #endif

	  #define _SELECTBITS_H_WRAPPER
	#endif /* _SELECTBITS_H_WRAPPER */
	_EndOfHeader_;
};

/*
 * Solaris <sys/varargs.h> is a DDK (aka kernel-land) header providing
 * the same interface as <stdarg.h>.  No idea why they couldn't have just
 * used the standard header.
 */
fix = {
    hackname = AAB_solaris_sys_varargs_h;
    files    = "sys/varargs.h";
    mach     = '*-*-solaris*';
    replace  = <<-  _EndOfHeader_
	#ifdef __STDC__
	  #include <stdarg.h>
	#else
	  #include <varargs.h>
	#endif
	_EndOfHeader_;
};

/*
 *  Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
 *  declaration on Sun OS 4.x.  We must only fix this on Sun OS 4.x, because
 *  many other systems have similar text but correct versions of the file.
 *  To ensure only Sun's is fixed, we grep for a likely unique string.
 *  Fix also on sysV68 R3V7.1 (head/memory.h\t50.1\t )
 */
fix = {
    hackname = AAB_sun_memcpy;
    files    = memory.h;
    select   = "/\\*\t@\\(#\\)"
             "(head/memory.h\t50.1\t "
             "|memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";

    replace = <<-  _EndOfHeader_
	/* This file was generated by fixincludes */
	#ifndef __memory_h__
	  #define __memory_h__

	  #ifdef __STDC__
	    extern void *memccpy();
	    extern void *memchr();
	    extern void *memcpy();
	    extern void *memset();
	  #else
	    extern char *memccpy();
	    extern char *memchr();
	    extern char *memcpy();
	    extern char *memset();
	  #endif /* __STDC__ */

	  extern int memcmp();

	#endif /* __memory_h__ */
	_EndOfHeader_;
};

/*
 * Fix assert.h on VxWorks:
 */
fix = {
    hackname    = AAB_vxworks_assert;
    files       = assert.h;
    mach        = "*-*-vxworks*";
        
    replace     = <<- _EndOfHeader_
	#ifdef _ASSERT_H
	#undef _ASSERT_H
	#undef assert
	#endif

	#define _ASSERT_H

	#ifdef __cplusplus
	extern "C" {
	#endif

	#if defined(__STDC__) || defined(__cplusplus)
	extern void __assert (const char*);
	#else
	extern void __assert ();
	#endif

	#ifdef NDEBUG
	#define assert(ign) ((void)0)
	#else

	#define ASSERT_STRINGIFY(str) ASSERT_STRINGIFY_HELPER(str)
	#define ASSERT_STRINGIFY_HELPER(str) #str

	#define assert(test) ((void) \
	        ((test) ? ((void)0) : \
	        __assert("Assertion failed: " #test ", file " \
	        __FILE__ ", line " ASSERT_STRINGIFY(__LINE__) "\n")))

	#endif

	#ifdef __cplusplus
	}
	#endif
	_EndOfHeader_;
};

/*
 * Add needed include to regs.h (NOT the gcc header) on VxWorks
 */

fix = {
    hackname    = AAB_vxworks_regs_vxtypes;
    files       = regs.h;
    mach        = "*-*-vxworks*";

    replace     = <<- _EndOfHeader_
	#ifndef _REGS_H
	#define _REGS_H
	/* regs.h depends on CPU_FAMILY being properly defined, which
	   is done by vxCpu.h.  */
	#include <types/vxCpu.h>
	/* regs.h includes a CPU_FAMILY-specific header that requires
	   vxTypesOld.h to already have been included.  Those headers
	   contain proper _ASMLANGUAGE guards around their typedefs,
	   but vxTypesOld.h itself does not. So we avoid including
	   vxTypesOld.h from assembly.  */
	#ifndef _ASMLANGUAGE
	#include <types/vxTypesOld.h>
	#endif
	#include_next <arch/../regs.h>
	#endif
	_EndOfHeader_;
};

/*
 *  This hack makes makes unistd.h more POSIX-compliant on VxWorks
 */
fix = {
    hackname    = AAB_vxworks_unistd;
    files       = unistd.h;
    mach        = "*-*-vxworks*";
        
    replace     = <<- _EndOfHeader_
	#ifndef _UNISTD_H
	#define _UNISTD_H
	#include_next <unistd.h>
	#include <ioLib.h>
	#ifndef STDIN_FILENO
	#define STDIN_FILENO 0
	#endif
	#ifndef STDOUT_FILENO
	#define STDOUT_FILENO 1
	#endif
	#ifndef STDERR_FILENO
	#define STDERR_FILENO 2
	#endif
	#endif /* _UNISTD_H */
	_EndOfHeader_;
};

/*
 * assert.h on AIX 7 redefines static_assert as _Static_assert without
 * protecting C++.
 */
fix = {
    hackname  = aix_assert;
    mach      = "*-*-aix*";
    files     = assert.h;
    select    = "#define[ \t]static_assert[ \t]_Static_assert";
    c_fix     = format;
    c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
    test_text = "#define static_assert _Static_assert";
};

/*
 * complex.h on AIX 5 and AIX 6 define _Complex_I and I in terms of __I,
 * which only is provided by AIX xlc C99.
 */
fix = {
    hackname  = aix_complex;
    mach      = "*-*-aix*";
    files     = complex.h;
    select    = "#define[ \t]_Complex_I[ \t]__I";
    c_fix     = format;
    c_fix_arg = "#define _Complex_I (__extension__ 1.0iF)";
    test_text = "#define _Complex_I	__I\n";
};

/*
 *  On AIX some headers are not properly guarded by 'extern "C"'.
 */
fix = {
  hackname  = aix_externc;
  mach      = "*-*-aix*";
  files     = ctype.h;
  files     = fcntl.h;
  files     = langinfo.h;
  files     = ldfcn.h;
  files     = sys/localedef.h;
  files     = sys/times.h;
  bypass    = "extern \"C\"";
  c_fix     = wrap;
  c_fix_arg = "#ifdef __cplusplus\n"
              "extern \"C\" {\n"
              "#endif\n";
  c_fix_arg = "#ifdef __cplusplus\n"
              "}\n"
              "#endif\n";
  test_text = "extern int __n_pthreads;\n";
};

/*
 *  On AIX sys/socket.h assumes C++.
 */
fix = {
  hackname  = aix_externcpp1;
  mach      = "*-*-aix*";
  files     = "sys/socket.h";
  select    = "#ifndef _KERNEL\n"
	      "#ifdef __cplusplus\n"
	      "extern \"C\" int naccept\\(int, struct sockaddr \\*, socklen_t \\*\\);";
  c_fix     = format;
  c_fix_arg = "#ifndef _KERNEL\n"
	      "#ifdef __cplusplus\n"
	      "extern \"C++\" {\n"
	      "extern \"C\" int naccept(int, struct sockaddr *, socklen_t *);";
  test_text = "#ifndef _KERNEL\n"
	      "#ifdef __cplusplus\n"
	      "extern \"C\" int naccept(int, struct sockaddr *, socklen_t *);";
};

fix = {
  hackname  = aix_externcpp2;
  mach      = "*-*-aix*";
  files     = "sys/socket.h";
  select    = "#endif /\\* COMPAT_43 \\*/\n"
	      "#else  /\\* __cplusplus \\*/";
  c_fix     = format;
  c_fix_arg = "#endif /* COMPAT_43 */\n"
	      "} /* extern \"C++\" */\n"
              "#else  /* __cplusplus */";
  test_text = "#endif /* COMPAT_43 */\n"
	      "#else  /* __cplusplus */";
};

/*
 *  inttypes.h STDC_FORMAT_MACROS
 */
fix = {
    hackname  = aix_inttypes;
    mach      = "*-*-aix*";
    files     = "sys/inttypes.h";
    select    = "#if !defined\\(__cplusplus\\) \\|\\| defined\\(__STDC_FORMAT_MACROS\\)";
    c_fix     = format;
    c_fix_arg = "#if 1";
    test_text = "#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)";
};

/*
 *  malloc.h on AIX6 uses XLC++ specific builtin syntax
 */
fix = {
    hackname  = aix_malloc;
    mach      = "*-*-aix*";
    files     = "malloc.h";
    select    = "#ifdef __cplusplus\n"
                "extern \"C\" \\{\n"
                "[ \t]extern \"builtin\" char \\*__alloca \\(size_t\\);";
    c_fix     = format;
    c_fix_arg = "#if (defined(__cplusplus) && defined(__IBMCPP__))\n"
                "extern \"C\" {\n"
	"\textern \"builtin\" char *__alloca (size_t);";
    test_text = "#ifdef __cplusplus\n"
                "extern \"C\" {\n"
	"\textern \"builtin\" char *__alloca (size_t);";
};

/*
 * net/if_arp.h defines a variable fc_softc instead of adding a
 * typedef for the struct on AIX 5.2, 5.3, 6.1 and 7.1
 */
fix = {
    hackname  = aix_net_if_arp;
    mach      = "*-*-aix*";
    files     = "net/if_arp.h";
    select    = "^struct  fc_softc \\{";
    c_fix     = format;
    c_fix_arg = "typedef struct _fc_softc {";
    test_text = "struct  fc_softc {\n  int a;\n};";
};

/*
 *  Fix AIX definition of NULL for G++.
 */
fix = {
    hackname  = aix_null;
    mach      = "*-*-aix*";
    files     = curses.h, dbm.h, locale.h, stdio.h, stdlib.h, string.h,
    time.h, unistd.h, wchar.h, sys/dir.h, sys/param.h, sys/types.h;
    bypass    = __null;
    select    = "#define[ \t]+NULL[ \t]+\\(*0L*\\)*";
    c_fix     = format;
    c_fix_arg = <<- _EOFix_
	#ifndef NULL
	#ifdef __cplusplus
	#ifdef __GNUG__
	#define NULL __null
	#else /* ! __GNUG__  */
	#define NULL 0L
	#endif /* __GNUG__  */
	#else /* ! __cplusplus  */
	#define NULL ((void *)0)
	#endif /* __cplusplus  */
	#endif /* !NULL  */
	_EOFix_;
    test_text = "# define\tNULL \t(0L)  /* typed NULL */";
};

/*
 *  pthread.h on AIX defines PTHREAD_ONCE_INIT, PTHREAD_MUTEX_INITIALIZER,
 *  PTHREAD_COND_INITIALIZER and PTHREAD_RWLOCK_INITIALIZER without enough
 *  braces.
 */
fix = {
    hackname  = aix_once_init_1;
    mach      = "*-*-aix*";
    files     = "pthread.h";
    select    = "#define[ \t]PTHREAD_ONCE_INIT \\\\\n"
		"\\{ \\\\\n";
    c_fix     = format;
    c_fix_arg = "#define PTHREAD_ONCE_INIT \\\n"
		"{{ \\\n";
    test_text = "#define PTHREAD_ONCE_INIT \\\\\n"
		"{ \\\\\n";
};

fix = {
    hackname  = aix_once_init_2;
    mach      = "*-*-aix*";
    files     = "pthread.h";
    select    = "[ \t]0 \\\\\n"
		"\\}\n";
    c_fix     = format;
    c_fix_arg = "	0 \\\n"
		"}}\n";
    test_text = "	0 \\\\\n"
		"}\n";
};

fix = {
    hackname  = aix_mutex_initializer_1;
    mach      = "*-*-aix*";
    files     = "pthread.h";
    select    = "#define[ \t]PTHREAD_MUTEX_INITIALIZER \\\\\n"
		"\\{ \\\\\n";
    c_fix     = format;
    c_fix_arg = "#define PTHREAD_MUTEX_INITIALIZER \\\n"
		"{{ \\\n";
    test_text = "#define PTHREAD_MUTEX_INITIALIZER \\\\\n"
		"{ \\\\\n";
};

fix = {
    hackname  = aix_cond_initializer_1;
    mach      = "*-*-aix*";
    files     = "pthread.h";
    select    = "#define[ \t]PTHREAD_COND_INITIALIZER \\\\\n"
		"\\{ \\\\\n";
    c_fix     = format;
    c_fix_arg = "#define PTHREAD_COND_INITIALIZER \\\n"
		"{{ \\\n";
    test_text = "#define PTHREAD_COND_INITIALIZER \\\\\n"
		"{ \\\\\n";
};

fix = {
    hackname  = aix_rwlock_initializer_1;
    mach      = "*-*-aix*";
    files     = "pthread.h";
    select    = "#define[ \t]PTHREAD_RWLOCK_INITIALIZER \\\\\n"
		"\\{ \\\\\n";
    c_fix     = format;
    c_fix_arg = "#define PTHREAD_RWLOCK_INITIALIZER \\\n"
		"{{ \\\n";
    test_text = "#define PTHREAD_RWLOCK_INITIALIZER \\\\\n"
		"{ \\\\\n";
};


/* On AIX 'typedef struct {<stuff>} * physadr_t;' needs to give the struct a
   name for linkage purposes.  Fortunately it is on exactly one
   line.  */
fix = {
    hackname  = aix_physadr_t;
    mach      = "*-*-aix*";
    files     = sys/types.h;
    select    = "typedef[ \t]*struct[ \t]*([{][^}]*[}][ \t]*\\*[ \t]*physadr_t;)";
    c_fix     = format;
    c_fix_arg = "typedef struct __physadr_s %1";
    test_text = "typedef	struct { random stuff } *	physadr_t;";
};

/*
 *  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[\t ][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...}";
};

/*
 *  AIX stdint.h fixes.
 */
fix = {
    hackname  = aix_stdint_1;
    mach      = "*-*-aix*";
    files     = stdint-aix.h, stdint.h;
    select    = "#define[ \t]UINT8_MAX[ \t]\\(255U\\)\n"
		"#define[ \t]UINT16_MAX[ \t]\\(65535U\\)";
    c_fix     = format;
    c_fix_arg = "#define UINT8_MAX	(255)\n"
		"#define UINT16_MAX	(65535)";
    test_text = "#define UINT8_MAX	(255U)\n"
		"#define UINT16_MAX	(65535U)";
};

/*
 * aix_stdint_2
 */
fix = {
    hackname  = aix_stdint_2;
    mach      = "*-*-aix*";
    files     = stdint-aix.h, stdint.h;
    select    = "#define[ \t]INTPTR_MIN[ \t]INT64_MIN\n"
		"#define[ \t]INTPTR_MAX[ \t]INT64_MAX\n"
		"#define[ \t]UINTPTR_MAX[ \t]UINT64_MAX\n"
		"#else\n"
		"#define[ \t]INTPTR_MIN[ \t]INT32_MIN\n"
		"#define[ \t]INTPTR_MAX[ \t]INT32_MAX\n"
		"#define[ \t]UINTPTR_MAX[ \t]UINT32_MAX";
    c_fix     = format;
    c_fix_arg = "#define INTPTR_MIN	(-INTPTR_MAX-1)\n"
		"#define INTPTR_MAX	9223372036854775807L\n"
		"#define UINTPTR_MAX	18446744073709551615UL\n"
		"#else\n"
		"#define INTPTR_MIN	(-INTPTR_MAX-1)\n"
		"#define INTPTR_MAX	2147483647L\n"
		"#define UINTPTR_MAX	4294967295UL";
    test_text = "#define INTPTR_MIN	INT64_MIN\n"
		"#define INTPTR_MAX	INT64_MAX\n"
		"#define UINTPTR_MAX	UINT64_MAX\n"
		"#else\n"
		"#define INTPTR_MIN	INT32_MIN\n"
		"#define INTPTR_MAX	INT32_MAX\n"
		"#define UINTPTR_MAX	UINT32_MAX";
};

/*
 * aix_stdint_3
 */
fix = {
    hackname  = aix_stdint_3;
    mach      = "*-*-aix*";
    files     = stdint-aix.h, stdint.h;
    select    = "#define[ \t]PTRDIFF_MIN[ \t]INT64_MIN\n"
		"#define[ \t]PTRDIFF_MAX[ \t]INT64_MAX\n"
		"#else\n"
		"#define[ \t]PTRDIFF_MIN[ \t]*INT32_MIN\n"
		"#define[ \t]PTRDIFF_MAX[ \t]*INT32_MAX";
    c_fix     = format;
    c_fix_arg = "#define PTRDIFF_MIN	(-9223372036854775807L - 1)\n"
		"#define PTRDIFF_MAX	9223372036854775807L\n"
		"#else\n"
		"#define PTRDIFF_MIN	(-2147483647L - 1)\n"
		"#define PTRDIFF_MAX	2147483647L";
    test_text = "#define PTRDIFF_MIN	INT64_MIN\n"
		"#define PTRDIFF_MAX	INT64_MAX\n"
		"#else\n"
		"#define PTRDIFF_MIN     INT32_MIN\n"
		"#define PTRDIFF_MAX	INT32_MAX";
};

/*
 * aix_stdint_4
 */
fix = {
    hackname  = aix_stdint_4;
    mach      = "*-*-aix*";
    files     = stdint-aix.h, stdint.h;
    select    = "#define[ \t]SIZE_MAX[ \t]UINT64_MAX\n"
		"#else\n"
		"#define[ \t]SIZE_MAX[ \t]*UINT32_MAX";
    c_fix     = format;
    c_fix_arg = "#define SIZE_MAX	18446744073709551615UL\n"
		"#else\n"
		"#define SIZE_MAX	4294967295UL";
    test_text = "#define SIZE_MAX	UINT64_MAX\n"
		"#else\n"
		"#define SIZE_MAX        UINT32_MAX";
};

/*
 * aix_stdint_5
 */
fix = {
    hackname  = aix_stdint_5;
    mach      = "*-*-aix*";
    files     = stdint-aix.h, stdint.h;
    select    = "#define[ \t]UINT8_C\\(c\\)[ \t]__CONCAT__\\(c,U\\)\n"
		"#define[ \t]UINT16_C\\(c\\)[ \t]__CONCAT__\\(c,U\\)";
    c_fix     = format;
    c_fix_arg = "#define UINT8_C(c)	c\n"
		"#define UINT16_C(c)	c";
    test_text = "#define UINT8_C(c)	__CONCAT__(c,U)\n"
		"#define UINT16_C(c)	__CONCAT__(c,U)";
};

/*
 * stdio.h on AIX defines ferror, clearerr and feof as C++ inline, which
   produces wrong code with G++.
 */
fix = {
    hackname  = aix_stdio_inline;
    mach      = "*-*-aix*";
    files     = stdio.h;
    select    = "#ifdef __cplusplus\\\n"
                "}\\\n\\\n"
                "#ifdef ferror\\\n";
    c_fix     = format;
    c_fix_arg = "#ifdef __cplusplus\n"
                "}\n"
                "#endif\n\n"
                "#if (defined(__cplusplus) && defined(__IBMCPP__))\n"
                "#ifdef ferror\n";
    test_text = "#ifdef __cplusplus\n}\n\n#ifdef ferror";
};

/*
 * stdlib.h on AIX uses #define on malloc and friends.
 */
fix = {
    hackname  = aix_stdlib_malloc;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "#define[ \t]+malloc[ \t]+__linux_malloc";
    c_fix     = format;
    c_fix_arg = "extern void *malloc(size_t) __asm__(\"__linux_malloc\");";
    test_text = "#define malloc __linux_malloc";
};

fix = {
    hackname  = aix_stdlib_realloc;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "#define[ \t]+realloc[ \t]+__linux_realloc";
    c_fix     = format;
    c_fix_arg = "extern void *realloc(void *, size_t) __asm__(\"__linux_realloc\");";
    test_text = "#define realloc __linux_realloc";
};

fix = {
    hackname  = aix_stdlib_calloc;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "#define[ \t]+calloc[ \t]+__linux_calloc";
    c_fix     = format;
    c_fix_arg = "extern void *calloc(size_t, size_t) __asm__(\"__linux_calloc\");";
    test_text = "#define calloc __linux_calloc";
};

fix = {
    hackname  = aix_stdlib_valloc;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "#define[ \t]+valloc[ \t]+__linux_valloc";
    c_fix     = format;
    c_fix_arg = "extern void *valloc(size_t) __asm__(\"__linux_valloc\");";
    test_text = "#define valloc __linux_valloc";
};

fix = {
    hackname  = aix_stdlib_vec_malloc;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "#define[ \t]+malloc[ \t]+vec_malloc";
    c_fix     = format;
    c_fix_arg = "extern void *malloc(size_t) __asm__(\"vec_malloc\");";
    test_text = "#define malloc vec_malloc";
};

fix = {
    hackname  = aix_stdlib_vec_calloc;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "#define[ \t]+calloc[ \t]+vec_calloc";
    c_fix     = format;
    c_fix_arg = "extern void *calloc(size_t, size_t) __asm__(\"vec_calloc\");";
    test_text = "#define calloc vec_calloc";
};

/*
 * stdlib.h on AIX 4.3 declares strtof() with a non-const first argument.
 */
fix = {
    hackname  = aix_strtof_const;
    mach      = "*-*-aix*";
    files     = stdlib.h;
    select    = "((extern[ \t]+)?float[ \t]+strtof)\\(char \\*, char \\*\\*\\);";
    c_fix     = format;
    c_fix_arg = "%1(const char *, char **);";
    test_text = "extern float    strtof(char *, char **);";
};

/*
 *  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;
    mach      = "*-*-aix*";
    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 5.2 defines macros that have both signed and
 *  unsigned types in conditional expressions.
 */
fix = {
    hackname  = aix_syswait_2;
    mach      = "*-*-aix*";
    files     = sys/wait.h;
    select    = '\? (\(\(\(\(unsigned[^)]*\)[^)]*\) >> [^)]*\) \& 0xff\) : -1)';
    c_fix     = format;
    c_fix_arg = "? (int)%1";
    test_text = "#define WSTOPSIG(__x)    "
        "(int)(WIFSTOPPED(__x) ? ((((unsigned int)__x) >> 8) & 0xff) : -1)";
};

/*
 *  sys/signal.h on some versions of AIX uses volatile in the typedef of
 *  sig_atomic_t, which causes gcc to generate a warning about duplicate
 *  volatile when a sig_atomic_t variable is declared volatile, as
 *  required by ANSI C.
 */
fix = {
    hackname  = aix_volatile;
    mach      = "*-*-aix*";
    files     = sys/signal.h;
    select    = "typedef volatile int sig_atomic_t";
    c_fix     = format;
    c_fix_arg = "typedef int sig_atomic_t";
    test_text = "typedef volatile int sig_atomic_t;";
};

/*
 *  AIX unistd.h defines a static function with an empty parameter list.
 */
fix = {
    hackname  = aix_unistd;
    mach      = "*-*-aix*";
    files     = unistd.h;

    select    = "[ \t]+static[ \t]+int[ \t]+getdtablesize\\(\\)";
    c_fix     = format;
    c_fix_arg = "\tstatic int\t\tgetdtablesize(void)";
    test_text = "	static int		getdtablesize()";
};

/*
 *  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 assert macro in assert.h on Alpha OSF/1.
 *  The superfluous int cast breaks C++.
 */
fix = {
    hackname  = alpha_assert;
    files     = "assert.h";
    select    = "(#[ \t]*" 'define assert\(EX\).*)\(\(int\) \(EX\)\)';
    c_fix     = format;
    c_fix_arg = "%1(EX)";
    test_text = '#define assert(EX) (((int) (EX)) ? (void)0 '
                ': __assert(#EX, __FILE__, __LINE__))';
};

/*
 *  Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX.
 */
fix = {
    hackname  = alpha_getopt;
    files     = "stdio.h";
    files     = "stdlib.h";
    select    = 'getopt\(int, char \*\[\], *char \*\)';
    c_fix     = format;
    c_fix_arg = "getopt(int, char *const[], const char *)";
    test_text = 'extern int getopt(int, char *[], char *);';
};

/*
 *  Fix missing semicolon on Alpha OSF/4 in <net/if.h>
 */
fix = {
    hackname  = alpha_if_semicolon;
    files     = net/if.h;
    select    = "struct[ \t]+sockaddr[ \t]+vmif_paddr[ \t]+/\\*";
    c_fix     = format;
    c_fix_arg = "struct sockaddr vmif_paddr;\t/*";
    test_text = '     struct  sockaddr vmif_paddr     /* protocol address */';
};

/*
 * Remove erroneous parentheses in sym.h on Alpha OSF/1.
 */
fix = {
    hackname  = alpha_parens;
    files     = sym.h;
    select    = '#ifndef\(__mips64\)';
    c_fix     = format;
    c_fix_arg = "#ifndef __mips64";
    test_text = "#ifndef(__mips64) /* bogus */\nextern int foo;\n#endif";
};

/*
 *  Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
 *  And OpenBSD.
 */
fix = {
    hackname = alpha_sbrk;
    files    = unistd.h;
    select   = "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
    c_fix     = format;
    c_fix_arg = "void *sbrk(";
    test_text = "extern char* sbrk(ptrdiff_t increment);";
};

/*
 *  For C++, avoid any typedef or macro definition of bool,
 *  and use the built in type instead.
 *  HP/UX 10.20 also has it in curses_colr/curses.h.
 */
fix = {
    hackname  = avoid_bool_define;
    files     = curses.h;
    files     = curses_colr/curses.h;
    files     = term.h;
    files     = tinfo.h;

    select    = "#[ \t]*define[ \t]+bool[ \t]";
    bypass    = "__cplusplus";

    c_fix     = format;
    c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
    c_fix_arg = "^[ \t]*#[ \t]*define[ \t]+bool[ \t].*";

    test_text = "# define bool\t char \n";
};

/*
 * avoid_bool_type
 */
fix = {
    hackname = avoid_bool_type;
    files    = curses.h;
    files    = curses_colr/curses.h;
    files    = term.h;
    files    = tinfo.h;

    select    = "^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;";
    bypass    = "__cplusplus";

    c_fix     = format;
    c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";

    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.
 *  Don't do this for headers that are smart enough to do the right
 *  thing (recent [n]curses.h and Xlib.h).
 *  Don't do it for <linux/nls.h> which is never used from C++ anyway,
 *  and will be broken by the edit.
 */

fix = {
    hackname = avoid_wchar_t_type;

    select    = "^[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;";
    bypass    = "__cplusplus";
    bypass    = "_LINUX_NLS_H";
    bypass    = "XFree86: xc/lib/X11/Xlib\\.h";

    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 `typedef struct term;' on hppa1.1-hp-hpux9.
 */
fix = {
    hackname  = bad_struct_term;
    files     = curses.h;
    select    = "^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
    c_fix     = format;
    c_fix_arg = "struct term;";

    test_text = 'typedef struct term;';
};

/*
 *  Fix one other error in this file:
 *  a mismatched quote not inside a C comment.
 */
fix = {
    hackname  = badquote;
    files     = sundev/vuid_event.h;
    select    = "doesn't";
    c_fix     = format;
    c_fix_arg = "does not";

    test_text = "/* doesn't have matched single quotes */";
};

/*
 *  check for broken assert.h that needs stdio.h
 */
fix = {
    hackname  = broken_assert_stdio;
    files     = assert.h;
    select    = stderr;
    bypass    = "include.*stdio\\.h";
    c_fix     = wrap;
    c_fix_arg = "#include <stdio.h>\n";
    test_text = "extern FILE* stderr;";
};

/*
 *  check for broken assert.h that needs stdlib.h
 */
fix = {
    hackname  = broken_assert_stdlib;
    files     = assert.h;
    select    = 'exit *\(|abort *\(';
    bypass    = "include.*stdlib\\.h";
    c_fix     = wrap;
    c_fix_arg = "#ifdef __cplusplus\n"
                "#include <stdlib.h>\n"
                "#endif\n";
    test_text = "extern void exit ( int );";
};

/*
 *  Remove `extern double cabs' declarations from math.h.
 *  This conflicts with C99.  Discovered on AIX.
 *  Darwin hides its broken cabs in architecture-specific subdirs.
 */
fix = {
    hackname = broken_cabs;
    files    = math.h, "architecture/*/math.h";
    select   = "^extern[ \t]+double[ \t]+cabs";

    sed       = "s/^extern[ \t]*double[ \t]*cabs[ \t]*\([^\\\)]*\);//";
    sed       = "s/^extern[ \t]*long[ \t]*double[ \t]*cabsl[ \t]*\([^\\\)]*\);//";

    test_text = "#ifdef __STDC__\n"
                "extern     double   cabs(struct dbl_hypot);\n"
                "#else\n"
                "extern     double   cabs();\n"
                "#endif\n"
                "extern double cabs ( _Complex z );";
};

/*
 * Fixup Darwin's broken check for __builtin_nanf.
 */    
fix = {
    hackname  = broken_nan;
    /*
     *  It is tempting to omit the first "files" entry.  Do not.
     *  The testing machinery will take the first "files" entry as the name
     *  of a test file to play with.  It would be a nuisance to have a directory
     *  with the name "*".
     */
    files     = "architecture/ppc/math.h";
    files     = "architecture/*/math.h";
    select    = '#if defined\(__APPLE_CC__\) && \(__APPLE_CC__ >= 1345\)';
    bypass    = "powl";
    c_fix     = format; 
    c_fix_arg = "#if 1";
    test_text = "#if defined(__APPLE_CC__) && (__APPLE_CC__ >= 1345)";
};

/*
 *  Various systems derived from BSD4.4 contain a macro definition
 *  for vfscanf that interacts badly with requirements of builtin-attrs.def.
 *  Known to be fixed in FreeBSD 5 system headers.
 */
fix = {
    hackname  = bsd_stdio_attrs_conflict;
    mach      = "*-*-*bsd*";
    mach      = "*-*-*darwin*";
    files     = stdio.h;
    select    = "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
    c_fix     = format;
    c_fix_arg = '#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)' "\n"
		'#define _BSD_STRINGX(_BSD_X) #_BSD_X' "\n"
		'int vfscanf(FILE *, const char *, __builtin_va_list) '
		'__asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) "__svfscanf");';
    test_text = '#define  vfscanf	__svfscanf';
};

fix = {
    hackname  = apple_local_stdio_fn_deprecation;
    mach      = "*-*-*darwin2*";
    files     = stdio.h;
    select    = "__deprecated_msg([^\n]*)$";
    c_fix     = format;
    c_fix_arg = "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n"
                "%0\n"
                "#endif";
    test_text = '__deprecated_msg("This function is provided for compat...")';
};

/*
 *  Fix various macros used to define ioctl numbers.
 *  The traditional syntax was:
 *
 *    #define _CTRL(n, x) (('n'<<8)+x)
 *    #define TCTRLCFOO _CTRL(T, 1)
 *
 *  but this does not work with the C standard, which disallows macro
 *  expansion inside strings.  We have to rewrite it thus:
 *
 *    #define _CTRL(n, x) ((n<<8)+x)
 *    #define TCTRLCFOO  _CTRL('T', 1)
 *
 *  The select expressions match too much, but the c_fix code is cautious.
 *
 *  CTRL might be: CTRL _CTRL ISCTRL BSD43_CTRL ...
 */
fix = {
    hackname  = ctrl_quotes_def;
    select    = "define[ \t]+[A-Z0-9_]+CTRL\\([a-zA-Z][,)]";
    c_fix     = char_macro_def;
    c_fix_arg = "CTRL";

    /*
     *  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 various macros used to define ioctl numbers.
 */
fix = {
    hackname  = ctrl_quotes_use;
    select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
    c_fix     = char_macro_use;
    c_fix_arg = "CTRL";
    test_text = "#define TCTRLFOO BSD43_CTRL(T, 1)";
};

/*
 *  sys/mman.h on HP/UX is not C++ ready,
 *  even though NO_IMPLICIT_EXTERN_C is defined on HP/UX.
 *
 *  rpc/types.h on OSF1/2.0 is not C++ ready,
 *  even though NO_IMPLICIT_EXTERN_C is defined for the alpha.
 *
 *  The problem is the declaration of malloc.
 */
fix = {
    hackname = cxx_unready;
    files    = sys/mman.h;
    files    = rpc/types.h;
    select   = '[^#]+malloc.*;';  /* Catch any form of declaration
				     not within a macro.  */
    bypass   = '"C"|__BEGIN_DECLS';

    c_fix     = wrap;
    c_fix_arg = "#ifdef __cplusplus\n"
                "extern \"C\" {\n"
                "#endif\n";
    c_fix_arg = "#ifdef __cplusplus\n"
                "}\n"
                "#endif\n";
    test_text = "extern void* malloc( size_t );";
};

/*
 *  macOS 10.12 <AvailabilityInternal.h> uses __attribute__((availability))
 *  unconditionally.
 */
fix = {
    hackname  = darwin_availabilityinternal;
    mach      = "*-*-darwin*";
    files     = AvailabilityInternal.h;
    select    = "#define[ \t]+(__API_[ADU]\\([^)]*\\)).*";
    c_fix     = format;
    c_fix_arg = <<- _EOFix_
	#if defined(__has_attribute)
	  #if __has_attribute(availability)
	%0
	  #else
	    #define %1
	  #endif
	#else
	    #define %1
	#endif
	_EOFix_;

    test_text = "#define __API_A(x) __attribute__((availability(__API_AVAILABLE_PLATFORM_##x)))\n"
		"#define __API_D(msg,x) __attribute__((availability(__API_DEPRECATED_PLATFORM_##x,message=msg)))";
};

/*
 *  For the AAB_darwin7_9_long_double_funcs fix (and later fixes for long long)
 *  to be useful, the main math.h must use <> and not "" includes.
 */
fix = {
    hackname  = darwin_9_long_double_funcs_2;
    mach      = "*-*-darwin*";
    files     = math.h;
    select    = '#include[ \t]+\"';
    c_fix     = format;
    c_fix_arg = "%1<%2.h>";
  
    c_fix_arg = '([ \t]*#[ \t]*include[ \t]+)"([a-z0-9/]+)\.h"';
  
    test_text = '#include <architecture/ppc/math.h>';
};

/*
 *  On darwin8 and earlier, mach-o/swap.h isn't properly guarded
 *  by 'extern "C"'.  On darwin7 some mach/ headers aren't properly guarded.
 */
fix = {
  hackname  = darwin_externc;
  mach      = "*-*-darwin*";
  files     = mach-o/swap.h;
  files     = mach/mach_time.h;
  files     = mach/mach_traps.h;
  files     = mach/message.h;
  files     = mach/mig.h;
  files     = mach/semaphore.h;
  bypass    = "extern \"C\"";
  bypass    = "__BEGIN_DECLS";
  c_fix     = wrap;
  c_fix_arg = "#ifdef __cplusplus\n"
              "extern \"C\" {\n"
              "#endif\n";
  c_fix_arg = "#ifdef __cplusplus\n"
              "}\n"
              "#endif\n";
  test_text = "extern void swap_fat_header();\n";
};

/*
 * AvailabilityMacros.h on Darwin breaks with GCC 4.0, because of
 * bad __GNUC__ tests.
 */
fix = {
  hackname  = darwin_gcc4_breakage;
  mach      = "*-*-darwin*";
  files     = AvailabilityMacros.h;
  select    = "\\(__GNUC__ >= 3\\) && \\(__GNUC_MINOR__ >= 1\\)";
  c_fix     = format;
  c_fix_arg = "((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))";
  test_text = "#if defined(__GNUC__) && (__GNUC__ >= 3) && "
  	      "(__GNUC_MINOR__ >= 1)\n";
};

/*
 * math.h hides the long long functions that are available on the system for
 * 10.5 and 10.6 SDKs, we expect to use them in G++ without specifying a value
 * for __STDC_VERSION__, or switching __STRICT_ANSI__ off.
 */
fix = {
  hackname  = darwin_ll_funcs_avail;
  mach      = "*-*-darwin*";
  files     = architecture/ppc/math.h, architecture/i386/math.h;
  select    = "#if[^_]*__STDC_VERSION__[^_]*__STDC_VERSION__[^1]*199901L[^_]*"
	      "__STRICT_ANSI__[^_]*__GNUC__[^\)]*";
  sed       = "s/#if[^_]*__STDC_VERSION__[^_]*__STDC_VERSION__[^_]*199901L[^_]*"
	      "__STRICT_ANSI__[^_]*__GNUC__[^\\)]*\)/#if\ !\(__DARWIN_NO_LONG_LONG\)/";
  test_text = "#if\ !(__DARWIN_NO_LONG_LONG)";
};

/*
 *  Before Mac OS X 10.8 <i386/setjmp.h> doesn't mark longjump noreturn.
 */
fix = {
    hackname  = darwin_longjmp_noreturn;
    mach      = "*-*-darwin*";
    files     = "i386/setjmp.h";
    bypass    = "__dead2";
    select    = "(.*longjmp\\(.*jmp_buf.*[^)]+\\));";
    c_fix     = format;
    c_fix_arg = "%1 __attribute__ ((__noreturn__));";

    test_text = "void siglongjmp(sigjmp_buf, int);";
};

/*
 *  Mac OS X 10.11 <os/trace.h> uses attribute on function definition.
 */
fix = {
  hackname  = darwin_os_trace_1;
  mach      = "*-*-darwin*";
  files     = os/trace.h;
  select    = "^(_os_trace_verify_printf.*) (__attribute__.*)";
  c_fix     = format;
  c_fix_arg = "%1";
  test_text = "_os_trace_verify_printf(const char *msg, ...) __attribute__((format(printf, 1, 2)))";
};

/*
 *  Mac OS X 10.1[012] <os/trace.h> os_trace_payload_t typedef uses Blocks
 *  extension without guard.
 */
fix = {
  hackname  = darwin_os_trace_2;
  mach      = "*-*-darwin*";
  files     = os/trace.h;
  select    = "typedef.*\\^os_trace_payload_t.*";
  c_fix     = format;
  c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
  test_text = "typedef void (^os_trace_payload_t)(xpc_object_t xdict);";
};

/*
 *  macOSX 13.0 SDK objc/runtime.h uses Apple Blocks extension without a guard.
 */

fix = {
  hackname  = darwin_objc_runtime_1;
  mach      = "*-*-darwin2*";
  files     = objc/runtime.h;
  select    =   <<- _EOSelect_
	OBJC_EXPORT void.*
	objc_enumerateClasses.*
	.*
	.*
	.*
	.*void \(\^ _Nonnull block.*
	.*
	.*
	.*OBJC_REFINED_FOR_SWIFT.*
	_EOSelect_;
  c_fix     = format;
  c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
  test_text = <<- _OBJC_RUNTIME_1
OBJC_EXPORT void
objc_enumerateClasses(const void * _Nullable image,
                      const char * _Nullable namePrefix,
                      Protocol * _Nullable conformingTo,
                      Class _Nullable subclassing,
                      void (^ _Nonnull block)(Class _Nonnull aClass, BOOL * _Nonnull stop)
                      OBJC_NOESCAPE)
OBJC_AVAILABLE(13.0, 16.0, 16.0, 9.0, 7.0)
OBJC_REFINED_FOR_SWIFT;
_OBJC_RUNTIME_1;
};


/*
 *  In Mac OS X 10.1[012] <os/trace.h>, need to guard users of
 *  os_trace_payload_t typedef, too.
 */
fix = {
  hackname  = darwin_os_trace_3;
  mach      = "*-*-darwin*";
  files     = os/trace.h;
  select    = <<- _EOSelect_
	__(API|OSX)_.*
	OS_EXPORT.*
	.*
	_os_trace.*os_trace_payload_t payload);
	_EOSelect_;
  c_fix     = format;
  c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
  test_text = <<- _EOText_
	__API_AVAILABLE(macosx(10.10), ios(8.0), watchos(2.0), tvos(8.0))
	OS_EXPORT OS_NOTHROW OS_NOT_TAIL_CALLED
	void
	_os_trace_with_buffer(void *dso, const char *message, uint8_t type, const void *buffer, size_t buffer_size, os_trace_payload_t payload);

	__OSX_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0)
	OS_EXPORT OS_NOTHROW
	void
	_os_trace_internal(void *dso, uint8_t type, const char *format, const uint8_t *buf, size_t buf_size, os_trace_payload_t payload);
	_EOText_;
};

/*
 *  In macOS 10.10 <os/base.h>, doesn't have __has_extension guarded.
 */
fix = {
  hackname  = darwin_os_base_1;
  mach      = "*-*-darwin*";
  files     = os/base.h;
  select    = <<- OS_BASE_1_SEL
#define __has_attribute.*
#endif
OS_BASE_1_SEL;
  c_fix     = format;
  c_fix_arg = <<- OS_BASE_1_FIX
%0
#ifndef __has_extension
#define __has_extension(x) 0
#endif
OS_BASE_1_FIX;
  test_text = <<- OS_BASE_1_TEST
#define __has_attribute(x) 0
#endif

#if __GNUC__
OS_BASE_1_TEST;
};

/*
 *  In macOS 10.10 <dispatch/object.h>, has unguarded block syntax.
 */
fix = {
  hackname  = darwin_dispatch_object_1;
  mach      = "*-*-darwin*";
  files     = dispatch/object.h;
  select    = "typedef void.*\\^dispatch_block_t.*";
  c_fix     = format;
  c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
  test_text = <<- DISPATCH_OBJECT_1_TEST
typedef void (^dispatch_block_t)(void);

__BEGIN_DECLS
DISPATCH_OBJECT_1_TEST;
};

/*
 *  __private_extern__ doesn't exist in FSF GCC.  Even if it did,
 *  why would you ever put it in a system header file?
 */
fix = {
  hackname  = darwin_private_extern;
  mach      = "*-*-darwin*";
  files     = mach-o/dyld.h;
  select    = "__private_extern__ [a-z_]+ _dyld_";
  c_fix     = format;
  c_fix_arg = "extern";
  c_fix_arg = "__private_extern__";
  test_text = "__private_extern__ int _dyld_func_lookup(\n"
	      "const char *dyld_func_name,\n"
	      "unsigned long *address);\n";
};

/*
 * Darwin headers have a stdint.h that defines UINT8_C and UINT16_C to
 * unsigned constants.
 */
fix = {
    hackname  = darwin_stdint_1;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#define UINT8_C(v)\tv\n#define UINT16_C(v)\tv";
    select    = "#define UINT8_C\\(v\\)[ \t]+\\(v ## U\\)\n"
		"#define UINT16_C\\(v\\)[ \t]+\\(v ## U\\)";
    test_text = "#define UINT8_C(v)   (v ## U)\n"
		"#define UINT16_C(v)  (v ## U)";
};

/*
 * Darwin headers have a stdint.h that defines INTPTR_MIN and INTPTR_MAX
 * with wrong types.
 */
fix = {
    hackname  = darwin_stdint_2;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#if __WORDSIZE == 64\n"
		"#define INTPTR_MAX 9223372036854775807L\n"
		"#define INTPTR_MIN (-INTPTR_MAX-1)\n"
		"#else\n"
		"#define INTPTR_MAX 2147483647L\n"
		"#define INTPTR_MIN (-INTPTR_MAX-1)\n"
		"#endif";
    select    = "#if __WORDSIZE == 64\n"
		"#define INTPTR_MIN[ \t]+INT64_MIN\n"
		"#define INTPTR_MAX[ \t]+INT64_MAX\n"
		"#else\n"
		"#define INTPTR_MIN[ \t]+INT32_MIN\n"
		"#define INTPTR_MAX[ \t]+INT32_MAX\n"
		"#endif";
    test_text = "#if __WORDSIZE == 64\n"
		"#define INTPTR_MIN        INT64_MIN\n"
		"#define INTPTR_MAX        INT64_MAX\n"
		"#else\n"
		"#define INTPTR_MIN        INT32_MIN\n"
		"#define INTPTR_MAX        INT32_MAX\n"
		"#endif";
};

/*
 * Darwin headers have a stdint.h that defines UINTPTR_MAX with a wrong type.
 */
fix = {
    hackname  = darwin_stdint_3;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#if __WORDSIZE == 64\n"
		"#define UINTPTR_MAX 18446744073709551615UL\n"
		"#else\n"
		"#define UINTPTR_MAX 4294967295UL\n"
		"#endif";
    select    = "#if __WORDSIZE == 64\n"
		"#define UINTPTR_MAX[ \t]+UINT64_MAX\n"
		"#else\n"
		"#define UINTPTR_MAX[ \t]+UINT32_MAX\n"
		"#endif";
    test_text = "#if __WORDSIZE == 64\n"
		"#define UINTPTR_MAX       UINT64_MAX\n"
		"#else\n"
		"#define UINTPTR_MAX       UINT32_MAX\n"
		"#endif";
};

/*
 * Darwin headers have a stdint.h that defines SIZE_MAX with a wrong type.
 */
fix = {
    hackname  = darwin_stdint_4;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#if __WORDSIZE == 64\n"
		"#define SIZE_MAX 18446744073709551615UL\n"
		"#else\n"
		"#define SIZE_MAX 4294967295UL\n"
		"#endif";
    select    = "#if __WORDSIZE == 64\n"
		"#define SIZE_MAX[ \t]+UINT64_MAX\n"
		"#else\n"
		"#define SIZE_MAX[ \t]+UINT32_MAX\n"
		"#endif";
    test_text = "#if __WORDSIZE == 64\n"
		"#define SIZE_MAX          UINT64_MAX\n"
		"#else\n"
		"#define SIZE_MAX          UINT32_MAX\n"
		"#endif";
};

/*
 * Darwin headers have a stdint.h that defines {U,}INTMAX_{MIN,MAX}
 * with a wrong type.
 */
fix = {
    hackname  = darwin_stdint_5;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#if __WORDSIZE == 64\n"
		"#define INTMAX_MIN   (-9223372036854775807L - 1)\n"
		"#define INTMAX_MAX   9223372036854775807L\n"
		"#define UINTMAX_MAX  18446744073709551615UL\n"
		"#else\n"
		"#define INTMAX_MIN   (-9223372036854775807LL - 1)\n"
		"#define INTMAX_MAX   9223372036854775807LL\n"
		"#define UINTMAX_MAX  18446744073709551615ULL\n"
		"#endif";
    select    = "#define INTMAX_MIN[ \t]+INT64_MIN\n"
		"#define INTMAX_MAX[ \t]+INT64_MAX\n"
		"\n"
		"#define UINTMAX_MAX[ \t]+UINT64_MAX";
    test_text = "#define INTMAX_MIN        INT64_MIN\n"
		"#define INTMAX_MAX        INT64_MAX\n"
		"\n"
		"#define UINTMAX_MAX       UINT64_MAX";
};

/*
 * Darwin headers have a stdint.h that defines {U,}INTMAX_C
 * with a wrong type.
 */
fix = {
    hackname  = darwin_stdint_6;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#if __WORDSIZE == 64\n"
		"#define PTRDIFF_MIN (-9223372036854775807L - 1)\n"
		"#define PTRDIFF_MAX 9223372036854775807L\n"
		"#else\n"
		"#define PTRDIFF_MIN (-2147483647 - 1)\n"
		"#define PTRDIFF_MAX 2147483647\n"
		"#endif";
    select    = "#if __WORDSIZE == 64\n"
		"#define PTRDIFF_MIN[ \t]+INT64_MIN\n"
		"#define PTRDIFF_MAX[ \t]+INT64_MAX\n"
		"#else\n"
		"#define PTRDIFF_MIN[ \t]+INT32_MIN\n"
		"#define PTRDIFF_MAX[ \t]+INT32_MAX\n"
		"#endif";
    test_text = "#if __WORDSIZE == 64\n"
		"#define PTRDIFF_MIN       INT64_MIN\n"
		"#define PTRDIFF_MAX       INT64_MAX\n"
		"#else\n"
		"#define PTRDIFF_MIN       INT32_MIN\n"
		"#define PTRDIFF_MAX       INT32_MAX\n"
		"#endif";
};

/*
 * Darwin headers have a stdint.h that defines {U,}INTMAX_C
 * with a wrong type.
 */
fix = {
    hackname  = darwin_stdint_7;
    mach      = "*-*-darwin*";
    files     = stdint-darwin.h, stdint.h;
    c_fix     = format;
    c_fix_arg = "#if __WORDSIZE == 64\n"
		"#define INTMAX_C(v)  (v ## L)\n"
		"#define UINTMAX_C(v) (v ## UL)\n"
		"#else\n"
		"#define INTMAX_C(v)  (v ## LL)\n"
		"#define UINTMAX_C(v) (v ## ULL)\n"
		"#endif";
    select    = "#define INTMAX_C\\(v\\)[ \t]+\\(v ## LL\\)\n"
		"#define UINTMAX_C\\(v\\)[ \t]+\\(v ## ULL\\)";
    test_text = "#define INTMAX_C(v)  (v ## LL)\n"
		"#define UINTMAX_C(v) (v ## ULL)";
};

/*  The SDK included with XCode 10.2 has the file <sys/ucred.h> that uses the
    C11 _Atomic keyword (exposing it to C++ code).  The work-around here follows
    the header in declaring the entity volatile when _Atomic is not available.
*/
fix = {
    hackname  = darwin_ucred__Atomic;
    mach      = "*-*-darwin*";
    files     = sys/ucred.h;
    select    = "_Atomic";
    c_fix     = wrap;
    c_fix_arg = "#if (__STDC_VERSION__ < 201112L) || defined(__cplusplus)\n"
		"# define _Atomic volatile\n"
		"#endif\n";
    c_fix_arg = "#if (__STDC_VERSION__ < 201112L) || defined(__cplusplus)\n"
		"# undef _Atomic\n"
		"#endif\n";
    test_text = ""; /* Don't provide this for wrap fixes.  */
};

/*  The darwin headers don't accept __FLT_EVAL_METHOD__ == 16.  */
fix = {
    hackname  = darwin_flt_eval_method;
    mach      = "*-*-darwin*";
    files     = math.h;
    select    = "^#if __FLT_EVAL_METHOD__ == 0$";
    c_fix     = format;
    c_fix_arg = "#if __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == 16";
    test_text = "#if __FLT_EVAL_METHOD__ == 0";
};

/*
 *  Fix <c_asm.h> on Digital UNIX V4.0:
 *  It contains a prototype for a DEC C internal asm() function,
 *  clashing with gcc's asm keyword.  So protect this with __DECC.
 */
fix = {
    hackname = dec_intern_asm;
    files    = c_asm.h;
    sed = "/^[ \t]*float[ \t]*fasm/i\\\n#ifdef __DECC\n";
    sed = "/^[ \t]*#[ \t]*pragma[ \t]*intrinsic([ \t]*dasm/a\\\n"
          "#endif\n";
    test_text =
    "float fasm {\n"
    "    ... asm stuff ...\n"
    "};\n#pragma intrinsic( dasm )\n/* END ASM TEST*/";
};

/*
 * Fix typo in <wchar.h> 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 <sys/djtypes.h>";
    c_fix_arg = "#include <stddef.h>";
    test_text = "#include <stddef.h>\n"
                "extern __DJ_wint_t x;\n";
};

/*
 * Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
 */
fix = {
    hackname  = ecd_cursor;
    files     = "sunwindow/win_lock.h";
    files     = "sunwindow/win_cursor.h";
    select    = 'ecd\.cursor';
    c_fix     = format;
    c_fix_arg = 'ecd_cursor';

    test_text = "#ifdef ecd.cursor\n#error bogus\n#endif /* ecd+cursor */";
};

/*
 *  Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64
 *  that fails when compiling for SSE-less 32-bit x86.
 */
fix = {
    hackname  = feraiseexcept_nosse_divbyzero;
    mach      = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*';
    files     = bits/fenv.h, '*/bits/fenv.h';
    select    = "^([\t ]*)__asm__ __volatile__ \\(\"divss %1, %0 *\" : "
		": \"x\" \\(__f\\), \"x\" \\(__g\\)\\);$";
    bypass    = "\"fdivp .*; fwait\"";
    
    c_fix     = format;
    c_fix_arg = <<- _EOText_
	# ifdef __SSE_MATH__
	%0
	# else
	%1__asm__ __volatile__ ("fdivp %%%%st, %%%%st(1); fwait"
	%1			: "=t" (__f) : "0" (__f), "u" (__g) : "st(1)");
	# endif
	_EOText_;

    test_text = <<- _EOText_
	  __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g));
	_EOText_;
};

/*
 *  Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64
 *  that fails when compiling for SSE-less 32-bit x86.
 */
fix = {
    hackname  = feraiseexcept_nosse_invalid;
    mach      = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*';
    files     = bits/fenv.h, '*/bits/fenv.h';
    select    = "^([\t ]*)__asm__ __volatile__ \\(\"divss %0, %0 *\" : "
		": \"x\" \\(__f\\)\\);$";
    bypass    = "\"fdiv .*; fwait\"";
    
    c_fix     = format;
    c_fix_arg = <<- _EOText_
	# ifdef __SSE_MATH__
	%0
	# else
	%1__asm__ __volatile__ ("fdiv %%%%st, %%%%st(0); fwait"
	%1			: "=t" (__f) : "0" (__f));
	# endif
	_EOText_;

    test_text = <<- _EOText_
	  __asm__ __volatile__ ("divss %0, %0" : : "x" (__f));
	_EOText_;
};

/*
 *  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';
};

/*
 *  Some releases of FreeBSD 4 and FreeBSD 5.0 and 5.1 system headers presume
 *  neither the existence of GCC 4 nor its exact feature set yet break
 *  (by design?) when __GNUC__ is set beyond 3.
 */
fix = {
    hackname  = freebsd_gcc4_breakage;
    mach      = "*-*-freebsd*"; 
    files     = sys/cdefs.h;
    select    = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 \|\| __GNUC__ == 3$';
    c_fix     = format;
    c_fix_arg = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3';
    test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3';
};

/*
 *  Some versions of glibc don't expect the C99 inline semantics.
 */
fix = {
    hackname  = glibc_c99_inline_1;
    files     = features.h, '*/features.h';
    select    = "^ *&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__$";
    c_fix     = format;
    c_fix_arg = "%0 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)";
    test_text = <<-EOT
	#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
	    && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__
	# define __USE_EXTERN_INLINES	1
	#endif
	EOT;
};

/*
 *  Similar, but a version that didn't have __NO_INLINE__
 */
fix = {
    hackname  = glibc_c99_inline_1a;
    files     = features.h, '*/features.h';
    select    = "(\\) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__)\n"
		"(#[ \t]*define[ \t]*__USE_EXTERN_INLINES[ \t]*1)";
    c_fix     = format;
    c_fix_arg = "%1 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)\n%2";
    test_text = <<-EOT
	#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__
	# define __USE_EXTERN_INLINES	1
	#endif
	EOT;
};

/*
 * The glibc_c99_inline_1 fix should have fixed everything.  Unfortunately
 * there are many glibc headers which do not respect __USE_EXTERN_INLINES.
 * The remaining glibc_c99_inline_* fixes deal with some of those headers.
 */
fix = {
    hackname  = glibc_c99_inline_2;
    files     = sys/stat.h, '*/sys/stat.h';
    select    = "extern __inline__ int";
    sed     = "s/extern int \\(stat\\)/"
              "#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
              "__inline__ int \\1/";
    sed     = "s/extern int \\([lf]stat\\)/"
              "#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
              "__inline__ int \\1/";
    sed     = "s/extern int \\(mknod\\)/"
              "#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
              "__inline__ int \\1/";
    sed     = "s/extern int __REDIRECT\\(_NTH\\)\\{0,1\\} (\\(stat\\)/"
              "#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
              "__inline__ int __REDIRECT\\1 (\\2/";
    sed     = "s/extern int __REDIRECT\\(_NTH\\)\\{0,1\\} (\\([lf]stat\\)/"
              "#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
              "__inline__ int __REDIRECT\\1 (\\2/";
    sed     = "s/^extern __inline__ int/"
              "#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
              "__inline__ int/";
    test_text = <<-EOT
	extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
	extern __inline__ int
	__NTH (fstat64 (int __fd, struct stat64 *__statbuf))
	{}
	EOT;
};

/*
 * glibc_c99_inline_3
 */
fix = {
    hackname  = glibc_c99_inline_3;
    files     = bits/string2.h, '*/bits/string2.h';
    select    = "extern __inline";
    bypass    = "__extern_inline|__GNU_STDC_INLINE__";
    c_fix     = format;
    c_fix_arg = "# if defined(__cplusplus) || defined(__GNUC_STDC_INLINE__)";
    c_fix_arg = "^# ifdef __cplusplus$";
    test_text = <<-EOT
	# ifdef __cplusplus
	#  define __STRING_INLINE inline
	# else
	#  define __STRING_INLINE extern __inline
	# endif
	EOT;
};

/*
 * glibc_c99_inline_4
 */
fix = {
    hackname  = glibc_c99_inline_4;
    files     = sys/sysmacros.h, '*/sys/sysmacros.h', wchar.h, '*/wchar.h',
    pthread.h, '*/pthread.h';
    bypass    = "__extern_inline|__gnu_inline__";
    select    = "(^| )extern __inline";
    c_fix     = format;
    c_fix_arg = "%0 __attribute__ ((__gnu_inline__))";
    test_text = <<-EOT
	__extension__ extern __inline unsigned int
	extern __inline unsigned int
	EOT;
};

/*  glibc-2.27 to 2.36 assume GCC 7 or later supports some or all
 *  of _Float{16,32,64,128} and _Float{32,64,128}x keywords for C,
 *  but doesn't for C++.
 */
fix = {
    hackname  = glibc_cxx_floatn_1;
    files     = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
    select    = "^([ \t]*#[ \t]*if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
		"(([ \t]*/\\*[^\n]*\\*/\n)?"
		"([ \t]*#[ \t]*if[^\n]*\n)?"
		"[ \t]*#[ \t]*define __f(16|32|64|128)x?\\()";
    c_fix     = format;
    c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%2";
    test_text = <<-EOT
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	/* The literal suffix f128 exists only since GCC 7.0.  */
	#   define __f128(x) x##l
	#  else
	#   define __f128(x) x##f128
	#  endif
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	/* The literal suffix (f128) exist for powerpc only since GCC 7.0.  */
	#   if __LDBL_MANT_DIG__ == 113
	#    define __f128(x) x##l
	#   else
	#    define __f128(x) x##q
	#   endif
	#  else
	#   define __f128(x) x##f128
	#  endif
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	#   ifdef __NO_LONG_DOUBLE_MATH
	#    define __f64(x) x##l
	#   else
	#    define __f64(x) x
	#   endif
	#  else
	#   define __f64(x) x##f64
	#  endif
	EOT;
};

fix = {
    hackname  = glibc_cxx_floatn_2;
    files     = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
    select    = "^([ \t]*#[ \t]*(el)?if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
		"(([ \t]*/\\*[^\n]*\\*/\n)?"
		"[ \t]*typedef[ \t]+[^\n]*[ \t]+_Float(16|32|64|128)x?([ \t]+__attribute__ \\(\\(__mode__ \\(__HF__\\)\\)\\))?;)";
    c_fix     = format;
    c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%3";
    test_text = <<-EOT
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	typedef float _Float16 __attribute__ ((__mode__ (__HF__)));
	#  endif
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	typedef __float128 _Float128;
	#  endif
	#  if 0
	#  elif !__GNUC_PREREQ (7, 0) || defined __cplusplus
	typedef __float128 _Float128;
	#  endif
	EOT;
};

fix = {
    hackname  = glibc_cxx_floatn_3;
    files     = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
    select    = "^([ \t]*#[ \t]*if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
		"(([ \t]*/\\*[^\n]*\n?[^\n]*\\*/\n)?"
		"([ \t]*#[ \t]*if[^\n]*\n)?"
		"([ \t]*typedef[ \t]+[^\n]*;\n)?"
		"[ \t]*#[ \t]*define __CFLOAT(16|32|64|128)X?[ \t]+)";
    c_fix     = format;
    c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%2";
    test_text = <<-EOT
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	#   define __CFLOAT128 _Complex long double
	#  else
	#   define __CFLOAT128 _Complex _Float128
	#  endif
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	/* Add a typedef for older GCC compilers which don't natively support
	   _Complex _Float128.  */
	typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
	#   define __CFLOAT128 __cfloat128
	#  else
	#   define __CFLOAT128 _Complex _Float128
	#  endif
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	#   ifdef __NO_LONG_DOUBLE_MATH
	#    define __CFLOAT64 _Complex long double
	#   else
	#    define __CFLOAT64 _Complex double
	#   endif
	#  else
	#   define __CFLOAT64 _Complex _Float64
	#  endif
	EOT;
};

fix = {
    hackname  = glibc_cxx_floatn_4;
    files     = bits/floatn.h, "*/bits/floatn.h";
    select    = "^([ \t]*#[ \t]*if __LDBL_MANT_DIG__ == 113 && )defined __cplusplus\n"
		"(([ \t]*/\\*[^\n]*\\*/\n)?"
		"[ \t]*typedef[ \t]+[^\n]*[ \t]+_Float128;)";
    c_fix     = format;
    c_fix_arg = "%1defined __cplusplus && !__GNUC_PREREQ (13, 0)\n%2";
    test_text = <<-EOT
	#  if __LDBL_MANT_DIG__ == 113 && defined __cplusplus
	typedef long double _Float128;
	#   define __CFLOAT128 _Complex long double
	#  endif
	EOT;
};

fix = {
    hackname  = glibc_cxx_floatn_5;
    files     = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
    select    = "^([ \t]*#[ \t]*if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
		"([ \t]*#[ \t]+error \"_Float128[xX] supported but no )";
    c_fix     = format;
    c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%2";
    test_text = <<-EOT
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	#   error "_Float128X supported but no constant suffix"
	#  endif
	#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
	#   error "_Float128x supported but no type"
	#  endif
	EOT;
};

/*  glibc-2.3.5 defines pthread mutex initializers incorrectly,
 *  so we replace them with versions that correspond to the
 *  definition.
 */
fix = {
    hackname = glibc_mutex_init;
    files    = pthread.h;
    select   = '\{ *\{ *0, *\} *\}';
    sed      = "/define[ \t]\\{1,\\}PTHREAD_MUTEX_INITIALIZER[ \t]*\\\\/{\n"
               "N\ns/{ { 0, } }/{ { 0, 0, 0, 0, 0, 0 } }/\n}";
    sed      = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_"
               "\\(RECURSIVE\\)_NP\\) }/{ \\1, 0 }/";
    sed      = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_"
               "\\(ERRORCHECK\\)_NP\\) }/{ \\1, 0 }/";
    sed      = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_"
               "\\(ADAPTIVE\\)_NP\\) }/{ \\1, 0 }/";
    sed      = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_"
               "\\(RECURSIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
    sed      = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_"
               "\\(ERRORCHECK\\)_NP\\) }/{ \\1, 0, 0 }/";
    sed      = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_"
               "\\(ADAPTIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
    sed      = "/define[ \t]\\{1,\\}PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\/"
               "N;s/^[ \t]*#[ \t]*"
               "\\(define[ \t]\\{1,\\}PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\\\)\\n"
               "[ \t]*{ { 0, } }/# if __WORDSIZE == 64\\\n"
               "#  \\1\\\n"
               "  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }\\\n"
               "# else\\\n"
               "#  \\1\\\n"
               "  { { 0, 0, 0, 0, 0, 0, 0, 0 } }\\\n"
               "# endif/";
    sed      = "s/{ \\(0, 0, 0, 0, 0, 0, "
               "PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP\\) }/{ \\1, 0 }/";
    sed      = "/define[ \t]\\{1,\\}PTHREAD_COND_INITIALIZER/"
               "s/{ { 0, } }/{ { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }/";

    test_text = <<- _EOText_
	#define PTHREAD_MUTEX_INITIALIZER \\
	  { { 0, } }
	#ifdef __USE_GNU
	# if __WORDSIZE == 64
	#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\
	  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
	#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\
	  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
	#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\
	  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
	# else
	#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\
	  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
	#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\
	  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
	#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\
	  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
	# endif
	#endif
	# define PTHREAD_RWLOCK_INITIALIZER \\
	  { { 0, } }
	# ifdef __USE_GNU
	#  if __WORDSIZE == 64
	#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\
	  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,			      \\
	      PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
	#  else
	#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\
	  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
	#  endif
	# endif
	#define PTHREAD_COND_INITIALIZER { { 0, } }
	_EOText_;
};

/* glibc versions before 2.5 have a version of stdint.h that defines
   UINT8_C and UINT16_C to produce unsigned constants, as do uClibc
   versions with stdint.h based on those glibc versions.  */
fix = {
    hackname  = glibc_stdint;
    files     = stdint.h;
    select    = "GNU C Library";
    c_fix     = format;
    c_fix_arg = "# define UINT8_C(c)\tc\n# define UINT16_C(c)\tc";
    c_fix_arg = "# define UINT8_C\\(c\\)\tc ## U\n# define UINT16_C\\(c\\)\tc ## U";
    test_text = "/* This file is part of the GNU C Library.  */\n"
        "# define UINT8_C(c)\tc ## U\n"
        "# define UINT16_C(c)\tc ## U";
};

/* Some versions of glibc have a version of bits/string2.h that
   produces "value computed is not used" warnings from strncpy; fix
   this definition by using __builtin_strncpy instead as in newer
   versions.  */
fix = {
    hackname  = glibc_strncpy;
    files     = bits/string2.h, '*/bits/string2.h';
    bypass    = "__builtin_strncpy";
    c_fix     = format;
    c_fix_arg = "#  define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)";
    c_fix_arg = "#  define strncpy([^\n]*\\\\\n)*[^\n]*";
    test_text = <<-EOT
	#  define strncpy(dest, src, n) \
	  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \\
			  ? (strlen (src) + 1 >= ((size_t) (n))			      \\
			     ? (char *) memcpy (dest, src, n)			      \\
			     : strncpy (dest, src, n))				      \\
			  : strncpy (dest, src, n)))
	EOT;

};

/* glibc's tgmath.h relies on an expression that is not an integer
   constant expression being treated as it was by GCC 4.4 and
   earlier.  */
fix = {
    hackname  = glibc_tgmath;
    files     = tgmath.h;
    select    = '\(\(\(type\) 0.25\) && \(\(type\) 0.25 - 1\)\)';
    bypass    = "__floating_type\\(type\\) \\\\\n.*__builtin_classify_type";
    c_fix     = format;
    c_fix_arg = "(__builtin_classify_type ((type) 0) == 8 || "
        "(__builtin_classify_type ((type) 0) == 9 && "
            "__builtin_classify_type (__real__ ((type) 0)) == 8))";
    test_text = "# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))";
};

/*
 * Fix these files to use the types we think they should for
 * ptrdiff_t, size_t, and wchar_t.
 *
 * This defines the types in terms of macros predefined by our 'cpp'.
 * This is supposedly necessary for glibc's handling of these types.
 * It's probably not necessary for anyone else, but it doesn't hurt.
 */
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;
    /* The Solaris 10 headers already define these types correctly.  */
    mach   = '*-*-solaris2.1[0-9]*';
    not_machine = true;

    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:  <machine/xxx.h>
 */
fix = {
    hackname  = hp_inline;
    files     = sys/spinlock.h;
    files     = machine/machparam.h;
    select    = "[ \t]*#[ \t]*include[ \t]+"  '"\.\./machine/';

    c_fix     = format;
    c_fix_arg = "%1<machine/%2.h>";

    c_fix_arg = "([ \t]*#[ \t]*include[ \t]+)"  '"\.\./machine/'
                '([a-z]+)\.h"';

    test_text = ' # include "../machine/mumble.h"';
};

/*
 *  Check for (...) in C++ code in HP/UX sys/file.h.
 */
fix = {
    hackname  = hp_sysfile;
    files     = sys/file.h;
    select    = "HPUX_SOURCE";

    c_fix     = format;
    c_fix_arg = "(struct file *, ...)";
    c_fix_arg = '\(\.\.\.\)';

    test_text = "extern void foo(...); /* HPUX_SOURCE - bad varargs */";
};

/*
 *  Un-Hide a series of five FP defines from post-1999 compliance GCC:
 *  FP_NORMAL, FP_ZERO, FP_INFINITE, FP_SUBNORMAL and FP_NAN
 */
fix = {
     hackname  = hppa_hpux_fp_macros;
     mach      = "hppa*-hp-hpux11*";
     files     = math.h;
     select    = "#[ \t]*define[ \t]*FP_NORMAL.*\n"
		 "#[ \t]*define[ \t]*FP_ZERO.*\n"
		 "#[ \t]*define[ \t]*FP_INFINITE.*\n"
		 "#[ \t]*define[ \t]*FP_SUBNORMAL.*\n"
		 "#[ \t]*define[ \t]*FP_NAN.*\n";
     c_fix     = format;
     c_fix_arg = <<- _EOFix_
	#endif /* _INCLUDE_HPUX_SOURCE */

	#if defined(_INCLUDE_HPUX_SOURCE) || \
	   (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
	%0#endif

	#ifdef _INCLUDE_HPUX_SOURCE

	_EOFix_;

     test_text =
            "#  define FP_NORMAL     0\n"
            "#  define FP_ZERO       1\n"
            "#  define FP_INFINITE   2\n"
            "#  define FP_SUBNORMAL  3\n"
            "#  define FP_NAN        4\n";
};

/*
 * 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";
};

/*
 * This hack fixes the declarations of _DINFINITY, _SINFINITY and _SQNAN.
 */
fix = {
    hackname  = hpux_math_constexpr;
    mach      = "*-hp-hpux11*";
    files     = math.h;
    sed       = "s@^[ \t]*extern[ \t]*const[ \t]*double[ \t]*_DINFINITY;"
	"[ \t]*$@#  define _DINFINITY (__builtin_inf ())@";
    sed       = "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SINFINITY;"
	"[ \t]*$@#    define _SINFINITY (__builtin_inff ())@";
    sed       = "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SQNAN;"
	"[ \t]*$@#    define _SQNAN (__builtin_nanf (\\\"\\\"))@";
    test_text = "  extern const double _DINFINITY;\n"
		"  extern const float _SINFINITY;\n"
		"  extern const float _SQNAN;";
};

/*
 *  Fix hpux 10.X missing ctype declarations 1
 */
fix = {
    hackname = hpux10_ctype_declarations1;
    files    = ctype.h;
    select   = "^#[ \t]*define _toupper\\(__c\\)[ \t]*__toupper\\(__c\\)";
    bypass   = "^[ \t]*extern[ \t]*int[ \t]*__tolower[ \t]*\\(";
    c_fix     = format;
    c_fix_arg = "#ifdef _PROTOTYPES\n"
		"extern int __tolower(int);\n"
		"extern int __toupper(int);\n"
		"#else /* NOT _PROTOTYPES */\n"
		"extern int __tolower();\n"
		"extern int __toupper();\n"
		"#endif /* _PROTOTYPES */\n\n"
		"%0\n";

    test_text = "#  define _toupper(__c)         __toupper(__c)\n";
};

/*
 *  Fix hpux 10.X missing ctype declarations 2
 */
fix = {
    hackname = hpux10_ctype_declarations2;
    files    = ctype.h;
    select   = "^#  if defined\\(_SB_CTYPE_MACROS\\) && \\!defined\\(__lint\\)";
    bypass   = "^[ \t]*extern[ \t]*int[ \t]*_isalnum[ \t]*\\(";
    c_fix     = format;
    c_fix_arg = "%0\n\n"
		"#ifdef _PROTOTYPES\n"
		"     extern int _isalnum(int);\n"
		"     extern int _isalpha(int);\n"
		"     extern int _iscntrl(int);\n"
		"     extern int _isdigit(int);\n"
		"     extern int _isgraph(int);\n"
		"     extern int _islower(int);\n"
		"     extern int _isprint(int);\n"
		"     extern int _ispunct(int);\n"
		"     extern int _isspace(int);\n"
		"     extern int _isupper(int);\n"
		"     extern int _isxdigit(int);\n"
		"#  else /* not _PROTOTYPES */\n"
		"     extern int _isalnum();\n"
		"     extern int _isalpha();\n"
		"     extern int _iscntrl();\n"
		"     extern int _isdigit();\n"
		"     extern int _isgraph();\n"
		"     extern int _islower();\n"
		"     extern int _isprint();\n"
		"     extern int _ispunct();\n"
		"     extern int _isspace();\n"
		"     extern int _isupper();\n"
		"     extern int _isxdigit();\n"
		"#endif /* _PROTOTYPES */\n";

    test_text = "#  if defined(_SB_CTYPE_MACROS) && !defined(__lint)\n"
		"     extern unsigned int *__SB_masks;\n";
};

/*
 *  Fix hpux 10.X missing stdio declarations
 */
fix = {
    hackname = hpux10_stdio_declarations;
    files    = stdio.h;
    select   = "^#[ \t]*define _iob[ \t]*__iob";
    bypass   = "^[ \t]*extern[ \t]*int[ \t]*vsnprintf[ \t]*\\(";
    c_fix     = format;
    c_fix_arg = "%0\n\n"
	"#  if defined(__STDC__) || defined(__cplusplus)\n"
	"     extern int snprintf(char *, size_t, const char *, ...);\n"
	"     extern int vsnprintf(char *, size_t, const char *, __va_list);\n"
	"#  else /* not __STDC__) || __cplusplus */\n"
	"     extern int snprintf();\n"
	"     extern int vsnprintf();\n"
	"#  endif /* __STDC__) || __cplusplus */\n";

    test_text = "#  define _iob __iob\n";
};

/*
 *  The HP-UX stddef.h is replaced by gcc's. It doesn't include sys/stdsyms.h.
 *  As a result, we need to include sys/stdsyms.h in alloca.h.
 */
fix = {
    hackname  = hppa_hpux11_alloca;
    mach      = "hppa*-*-hpux11*";
    files     = alloca.h;
    select    = "#ifndef _STDDEF_INCLUDED";
    c_fix     = format;
    c_fix_arg = "#ifndef _SYS_STDSYMS_INCLUDED\n"
		"#  include <sys/stdsyms.h>\n"
		"#endif /* _SYS_STDSYMS_INCLUDED */\n\n"
		"%0";

    test_text = "#ifndef _STDDEF_INCLUDED";
};

/*
 *  Make sure hpux defines abs in header.
 */
fix = {
    hackname  = hpux11_abs;
    mach      = "*-hp-hpux11*";
    files     = stdlib.h;
    select    = "ifndef _MATH_INCLUDED";
    c_fix     = format;
    c_fix_arg = "if !defined(_MATH_INCLUDED) || defined(__GNUG__)";
    test_text = "#ifndef _MATH_INCLUDED";
};

/*
 *  Fix hpux11 __LWP_RWLOCK_VALID define
 */
fix = {
    hackname  = hpux11_lwp_rwlock_valid;
    mach      = "*-hp-hpux11*";
    files     = sys/pthread.h;
    select    = "#define __LWP_RWLOCK_VALID[ \t]*0x8c91";
    c_fix     = format;
    c_fix_arg = "#define __LWP_RWLOCK_VALID              -29551";
    test_text = "#define __LWP_RWLOCK_VALID 0x8c91";
};

/*
 * hpux sendfile()
 */
fix = {
    hackname  = hpux11_extern_sendfile;
    mach      = "*-hp-hpux11.[12]*";
    files     = sys/socket.h;
    select    = "^[ \t]*extern sbsize_t sendfile.*\n.*, int\\)\\);\n";
    c_fix     = format;
    c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n";
    test_text = "   extern sbsize_t sendfile __((int, int, off_t, bsize_t,\n"
        "                               const struct iovec *, int));\n";
};

/*
 * hpux sendpath()
 */
fix = {
    hackname  = hpux11_extern_sendpath;
    mach      = "*-hp-hpux11.[12]*";
    files     = sys/socket.h;
    select    = "^[ \t]*extern sbsize_t sendpath.*\n.*, int\\)\\);\n";
    c_fix     = format;
    c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n";
    test_text = "   extern sbsize_t sendpath __((int, int, off_t, bsize_t,\n"
        "                               const struct iovec *, int));\n";
};

/*
 *  Keep HP-UX 11 from stomping on C++ math namespace
 *  with defines for fabsf.
 */
fix = {
    hackname  = hpux11_fabsf;
    mach      = "*-hp-hpux11*";
    files     = math.h;
    select    = "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";

    c_fix     = format;
    c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";

    test_text =
    "#ifdef _PA_RISC\n"
    "#  define fabsf(x) ((float)fabs((double)(float)(x)))\n"
    "#endif";
};

/*
 *  The definitions for PTHREAD_MUTEX_INITIALIZER and similar initializers
 *  in pthread.h need to be constant expressions to be standard complient.
 *  As a result, we need to remove the void * casts in the initializers
 *  (see hpux11_pthread_const) and to change the __(M|C|RW)POINTER defines
 *  to use the long type.
 */
fix = {
    hackname  = hpux11_pthread_pointer;
    mach      = "*-hp-hpux11.[0-3]*";
    files     = sys/pthread.h;
    select    = "(void[ \t]*\\*)(m|c|rw)(_ptr)";

    c_fix     = format;
    c_fix_arg = "long\t%2%3";
    test_text = "#define __MPOINTER\t\tvoid\t *m_ptr";
};

/*
 *  Remove void pointer cast and fix C99 constant in __POINTER_SET defines.
 */
fix = {
    hackname  = hpux11_pthread_const;
    mach      = "*-hp-hpux11.[0-3]*";
    files     = sys/pthread.h;
    select    = "^(#define[ \t]+__POINTER_SET[ \t0,]*)(.*\\))";

    c_fix     = format;
    c_fix_arg = "%11";
    test_text = "#define __POINTER_SET\t\t((void *) 1LL)";
};

/*
 * 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";
};

/*
 *  Fix hpux 11.00 broken snprintf declaration
 *  (third argument is char *, needs to be const char * to prevent
 *  spurious warnings with -Wwrite-strings or in C++).
 */
fix = {
    hackname = hpux11_snprintf;
    files    = stdio.h;
    select   = '(extern int snprintf *\(char *\*, *(|__|_hpux_)size_t,)'
                                    ' *(char *\*, *\.\.\.\);)';
    c_fix     = format;
    c_fix_arg = '%1 const %3';

    test_text = "extern int snprintf(char *, size_t, char *, ...);\n"
                "extern int snprintf(char *, __size_t, char *, ...);\n"
                "extern int snprintf(char *, _hpux_size_t, char *, ...);";
};

/*
 *  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);';
};

/*
 *  Fix missing const in hpux vsscanf declaration
 */
fix = {
    hackname = hpux_vsscanf;
    mach    = "*-*-hpux*";
    files   = stdio.h;
    select  = '(extern int vsscanf\()char';
    c_fix   = format;
    c_fix_arg = "%1const char";

    test_text = 'extern int vsscanf(char *, const char *, __va_list);';
};

/*
 *  get rid of bogus inline definitions in HP-UX 8.0
 */
fix = {
    hackname = hpux8_bogus_inlines;
    files    = math.h;
    select   = inline;
    bypass   = "__GNUG__";
    sed = "s@inline int abs(int [a-z][a-z]*) {.*}"
           "@extern \"C\" int abs(int);@";
    sed = "s@inline double abs(double [a-z][a-z]*) {.*}@@";
    sed = "s@inline int sqr(int [a-z][a-z]*) {.*}@@";
    sed = "s@inline double sqr(double [a-z][a-z]*) {.*}@@";
    test_text = "inline int abs(int v) { return (v>=0)?v:-v; }\n"
                "inline double sqr(double v) { return v**0.5; }";
};

/*
 * hpux intptr
 */
fix = {
    hackname  = hpux_c99_intptr;
    mach      = "*-hp-hpux11.3*";
    files     = stdint-hpux11.h, stdint.h;
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MAX[ \t]*"
        "INT32_MAX[ \t]*$@#define PTRDIFF_MAX (2147483647l)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MIN[ \t]*"
        "INT32_MIN[ \t]*$@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MAX[ \t]*"
        "INT32_MAX[ \t]*$@#define INTPTR_MAX (2147483647l)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MIN[ \t]*"
        "INT32_MIN[ \t]*$@#define INTPTR_MIN (-INTPTR_MAX - 1)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*UINTPTR_MAX[ \t]*"
        "UINT32_MAX[ \t]*$@#define UINTPTR_MAX (4294967295ul)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*SIZE_MAX[ \t]*"
        "UINT32_MAX[ \t]*$@#define SIZE_MAX (4294967295ul)@";
    test_text = "#define PTRDIFF_MAX	INT32_MAX\n"
		"#define PTRDIFF_MIN	INT32_MIN\n"
		"#define INTPTR_MAX	INT32_MAX\n"
		"#define INTPTR_MIN	INT32_MIN\n"
		"#define UINTPTR_MAX	UINT32_MAX\n"
		"#define SIZE_MAX	UINT32_MAX\n";
};

/*
 * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
 */
fix = {
    hackname  = hpux_c99_inttypes;
    mach      = "*-hp-hpux11.[23]*";
    files     = inttypes.h;
    files     = stdint-hpux11.h, stdint.h;
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*"
        "__CONCAT_U__(__c)[ \t]*$@#define UINT8_C(__c) (__c)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*"
        "__CONCAT_U__(__c)[ \t]*$@#define UINT16_C(__c) (__c)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*INT32_C(__c)[ \t]*"
        "__CONCAT__(__c,l)[ \t]*$@#define INT32_C(__c) (__c)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*UINT32_C(__c)[ \t].*$@"
        "#define UINT32_C(__c) __CONCAT__(__c,u)@";
    test_text = "#define UINT8_C(__c)     __CONCAT_U__(__c)\n"
                "#define UINT16_C(__c)    __CONCAT_U__(__c)\n"
		"#define INT32_C(__c)     __CONCAT__(__c,l)\n"
		"#define UINT32_C(__c)     __CONCAT__(__c,ul)\n";
};

/*
 * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
 */
fix = {
    hackname  = hpux_c99_inttypes2;
    mach      = "*-hp-hpux11.2*";
    files     = stdint-hpux11.h, stdint.h;
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*INT8_C(__c)[ \t]*"
        "((signed char)(__c))[ \t]*$@#define INT8_C(__c) (__c)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*"
        "((unsigned char)(__c))[ \t]*$@#define UINT8_C(__c) (__c)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*INT16_C(__c)[ \t]*"
        "((short)(__c))[ \t]*$@#define INT16_C(__c) (__c)@";
    sed       = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*"
        "((unsigned short)(__c))[ \t]*$@#define UINT16_C(__c) (__c)@";
    test_text = "#  define	INT8_C(__c)	((signed char)(__c))\n"
                "#  define      UINT8_C(__c)    ((unsigned char)(__c))\n"
		"#  define      INT16_C(__c)    ((short)(__c))\n"
		"#  define	UINT16_C(__c)	((unsigned short)(__c))\n";
};

/*
 * Fix broken and missing defines in inttypes.h
 */
fix = {
    hackname  = hpux_c99_inttypes3;
    mach      = "hppa*-hp-hpux11*";
    files     = inttypes.h;
    select    = "#define[ \t]INTPTR_MAX[ \t]*\n"
		"#define[ \t]UINTPTR_MAX[ \t]*\n";
    c_fix     = format;
    c_fix_arg = "#undef SIZE_MAX\n"
		"#define SIZE_MAX __SIZE_MAX__\n"
		"#ifdef __INTPTR_MAX__\n"
		"# undef INTPTR_MAX\n"
		"# define INTPTR_MAX __INTPTR_MAX__\n"
		"# undef INTPTR_MIN\n"
		"# define INTPTR_MIN (-INTPTR_MAX - 1)\n"
		"#endif\n"
		"#ifdef __UINTPTR_MAX__\n"
		"# undef UINTPTR_MAX\n"
		"# define UINTPTR_MAX __UINTPTR_MAX__\n"
		"#endif\n";
    test_text = "#define INTPTR_MAX\n"
		"#define UINTPTR_MAX\n";
};

/*
 * Fix missing SCNuMAX defines in inttypes.h
 */
fix = {
    hackname  = hpux_c99_inttypes4;
    mach      = "hppa*-hp-hpux11.[01]*";
    files     = inttypes.h;
    sed       = "/^[ \t]*#[ \t]*define[ \t]*SCNxMAX[ \t]*SCNx64/a\\\n"
		"#define SCNuMAX \t SCNu64\n";
    sed       = "/^[ \t]*#[ \t]*define[ \t]*SCNxMAX[ \t]*SCNx32/a\\\n"
		"#define SCNuMAX \t SCNu32\n";
    test_text = "#define SCNxMAX SCNx64\n"
		"#define SCNxMAX SCNx32\n";
};

/*
 * Fix missing PRIdPTR defines in inttypes.h
 */
fix = {
    hackname  = hpux_c99_inttypes5;
    mach      = "hppa*-hp-hpux11.[01]*";
    files     = inttypes.h;
    select    = "#ifndef[ \t]_KERNEL[ \t]*\n";
    c_fix     = format;
    c_fix_arg = "#ifndef __LP64__\n"
		"#define PRIdPTR\t\tPRId32\n"
		"#define PRIiPTR\t\tPRIi32\n"
		"#define PRIoPTR\t\tPRIo32\n"
		"#define PRIuPTR\t\tPRIu32\n"
		"#define PRIxPTR\t\tPRIx32\n"
		"#define PRIXPTR\t\tPRIX32\n"
		"#else\n"
		"#define PRIdPTR\t\tPRId64\n"
		"#define PRIiPTR\t\tPRIi64\n"
		"#define PRIoPTR\t\tPRIo64\n"
		"#define PRIuPTR\t\tPRIu64\n"
		"#define PRIxPTR\t\tPRIx64\n"
		"#define PRIXPTR\t\tPRIX64\n"
		"#endif\n\n"
		"#ifndef _KERNEL\n";
    test_text = "#ifndef _KERNEL\n";
};

/*
 *  Fix hpux broken ctype macros
 */
fix = {
    hackname = hpux_ctype_macros;
    files    = ctype.h;
    select   = '((: |\()__SB_masks \? )'
	       '(__SB_masks\[__(alnum|c)\] & _IS)';
    c_fix     = format;
    c_fix_arg = "%1(int)%3";

    test_text = ": __SB_masks ? __SB_masks[__alnum] & _ISCNTRL\n"
		"# define isalpha(__c) (__SB_masks ? __SB_masks[__c] & _IS\n";
};

/*
 * hpux errno()
 */
fix = {
    hackname  = hpux_extern_errno;
    mach      = "*-hp-hpux10.*";
    mach      = "*-hp-hpux11.[0-2]*";
    files     = errno.h;
    select    = "^[ \t]*extern int errno;$";
    c_fix     = format;
    c_fix_arg = "#ifdef __cplusplus\n"
        "extern \"C\" {\n"
        "#endif\n"
        "%0\n"
        "#ifdef __cplusplus\n"
        "}\n"
        "#endif";
    test_text = "   extern int errno;\n";
};

/*
 *  Fix hpux broken #ifndef _XOPEN_SOURCE_EXTENDED conditional on htonl etc.
 */
fix = {
    hackname = hpux_htonl;
    files    = netinet/in.h;
    select   = "#ifndef _XOPEN_SOURCE_EXTENDED[ \t]*\n"
               "(/\\*\n"
               " \\* Macros for number representation conversion\\.\n"
               " \\*/\n"
               "#ifndef ntohl)";
    c_fix     = format;
    c_fix_arg = "#if 1\n%1";

    test_text = "#ifndef _XOPEN_SOURCE_EXTENDED\n"
                "/*\n"
                " * Macros for number representation conversion.\n"
                " */\n"
                "#ifndef ntohl\n"
                "#define ntohl(x)        (x)\n"
                "#define ntohs(x)        (x)\n"
                "#define htonl(x)        (x)\n"
                "#define htons(x)        (x)\n"
                "#endif\n"
                "#endif  /* ! _XOPEN_SOURCE_EXTENDED */";
};

/*
 * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
 */
fix = {
    hackname  = hpux_imaginary_i;
    mach      = "ia64-hp-hpux11.*";
    files     = complex.h;
    select    = "^[ \t]*#[ \t]*define[ \t]*_Complex_I.*";
    c_fix     = format;
    c_fix_arg = "#define _Complex_I (__extension__ 1.0iF)";
    test_text = "#define _Complex_I (0.f+_Imaginary_I)\n";
};

/*
 * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
 */
fix = {
    hackname  = hpux_inttype_int8_t;
    mach      = "*-hp-hpux1[01].*";
    files     = sys/_inttypes.h;
    select    = "^[ \t]*typedef[ \t]*char[ \t]*int(_least){0,1}8_t.*";
    c_fix     = format;
    c_fix_arg = "typedef signed char int%18_t;";
    test_text = "typedef char int_least8_t;\n"
                "typedef char int8_t;\n";
};

/*
 * HP-UX long_double
 */
fix = {
    hackname  = hpux_long_double;
    mach      = "*-*-hpux10*";
    mach      = "*-*-hpux11.[012]*";
    files     = stdlib.h;
    select    = "extern[ \t]long_double[ \t]strtold";
    bypass    = "long_double_t";
    sed       = "/^#[ \t]*ifndef _LONG_DOUBLE/,/\\/\\* _LONG_DOUBLE \\*\\//D";
    sed       = "s/long_double/long double/g";

    test_text = "#  ifndef _LONG_DOUBLE\n"
		"#    define _LONG_DOUBLE\n"
		"     typedef struct {\n"
		"       unsigned int word1, word2, word3, word4;\n"
		"     } long_double;\n"
		"#  endif /* _LONG_DOUBLE */\n"
		"extern long_double strtold(const char *, char **);\n";
};

/*
 * We cannot use the above rule on 11.31 because it removes the strtold
 * definition.  ia64 is OK with no hack, PA needs some help.
 */
fix = {
    hackname  = hpux_long_double_2;
    mach      = "hppa*-*-hpux11.3*";
    files     = stdlib.h;
    select    = "#[ \t]*if[ \t]*!defined\\(__ia64\\) \\|\\| "
        "defined\\(_PROTOTYPES\\) \\|\\| "
        "defined\\(_LONG_DOUBLE_STRUCT\\)";
    c_fix     = format;
    c_fix_arg = "#  if !defined(_PROTOTYPES) || defined(_LONG_DOUBLE_STRUCT)";

    test_text = "#  if !defined(__ia64) || "
        "!defined(_PROTOTYPES) || "
        "defined(_LONG_DOUBLE_STRUCT)\n";
};

/*
 *  Add missing braces to pthread initializer defines.
 */
fix = {
    hackname  = hpux_pthread_initializers;
    mach      = "*-hp-hpux11.[0-3]*";
    files     = sys/pthread.h;
    sed       = "s@^[ \t]*1, 1, 1, 1,[ \t]*\\\\"
		 "@\t{ 1, 1, 1, 1 },\t\t\t\t\t\t\t\\\\@";
    sed       = "s@^[ \t]*1,[ \t]*\\\\"
		 "@\t{ 1, 0 }@";
    sed       = "/^[ \t]*0$/d";
    sed       = "s@__PTHREAD_MUTEX_VALID, 0"
		 "@{ __PTHREAD_MUTEX_VALID, 0 }@";
    sed       = "s@^[ \t]*0, 0, -1, 0,[ \t]*\\\\"
		 "@\t{ 0, 0, -1, 0 },\t\t\t\t\t\t\\\\@";
    sed       = "s@0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\"
		 "@{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@";
    sed       = "s@^[ \t]*__LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\"
		 "@\t{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@";
    sed       = "s@^[ \t]*0, 0[ \t]*\\\\"
		 "@\t{ 0, 0 }\t\t\t\t\t\t\t\\\\@";
    sed       = "s@__PTHREAD_COND_VALID, 0"
		 "@{ __PTHREAD_COND_VALID, 0 }@";
    sed       = "s@__LWP_COND_VALID, 0,[ \t]*\\\\"
		 "@{ __LWP_COND_VALID, 0 },\t\t\t\t\t\\\\@";
    sed       = "s@__PTHREAD_RWLOCK_VALID, 0"
		 "@{ __PTHREAD_RWLOCK_VALID, 0 }@";
    sed       = "s@__LWP_RWLOCK_VALID, 0,[ \t]*\\\\"
		 "@{ __LWP_RWLOCK_VALID, 0 },\t\t\t\t\t\\\\@";
    sed       = "s@^[ \t]*0, 0, 0, 0, 0, 0, 0[ \t]*\\\\"
		 "@\t{ 0, 0, 0, 0, 0 }, { 0, 0}\t\t\t\t\t\\\\@";
    test_text = "#define PTHREAD_MUTEX_INITIALIZER  {\t\t\t\t\t\\\\\n"
		"\t__PTHREAD_MUTEX_VALID, 0,\t\t\t\t\t\\\\\n"
		"\t(PTHREAD_MUTEX_DEFAULT | PTHREAD_PROCESS_PRIVATE),\t\t\\\\\n"
		"\t__SPNLCK_INITIALIZER,\t\t\t\t\t\t\\\\\n"
		"\t0, 0, -1, 0,\t\t\t\t\t\t\t\\\\\n"
		"\t0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,\t\t\t\t\\\\\n"
		"\t0, 0\t\t\t\t\t\t\t\t\\\\\n"
		"}\n";
};

/*
 *  Wrap spu_info in ifdef _KERNEL.  GCC cannot handle an array of unknown
 *  type and mpinfou is only defined when _KERNEL is set.
 */
fix = {
    hackname = hpux_spu_info;
    mach     = "*-hp-hpux*";
    /*
     *  It is tempting to omit the first "files" entry.  Do not.
     *  The testing machinery will take the first "files" entry as the name
     *  of a test file to play with.  It would be a nuisance to have a directory
     *  with the name "*".
     */
    files    = "ia64/sys/getppdp.h";
    files    = "*/sys/getppdp.h";
    select   = "^.*extern.*spu_info.*";

    c_fix     = format;
    c_fix_arg = "#ifdef _KERNEL\n%0\n#endif";

    test_text = "extern union mpinfou spu_info[];";
};

/*
 * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
 */
fix = {
    hackname  = hpux_stdint_least_fast;
    mach      = "*-hp-hpux11.2*";
    files     = stdint-hpux11.h, stdint.h;
    select    =
        "^[ \t]*#[ \t]*define[ \t]+UINT_(LEAST|FAST)64_MAX[ \t]+ULLONG_MAX";
    c_fix     = format;
    c-fix-arg = "#  define	UINT_%164_MAX	__UINT64_MAX__";
    test-text = "#  define       UINT_FAST64_MAX        ULLONG_MAX\n"
		"#  define       UINT_LEAST64_MAX        ULLONG_MAX\n";
};

/*
 *  Add noreturn attribute to longjmp declarations in hpux <setjmp.h>
 */
fix = {
    hackname = hpux_longjmp;
    mach     = "*-hp-hpux*";
    files    = setjmp.h;
    select   = "^[ \t]*extern[ \t]+void[ \t]+.*longjmp[ \t]*\(__\\(\\(.*int\\)\\)|\\(.*int\\)|\\(\\)\)";

    c_fix     = format;
    c_fix_arg = "%0 __attribute__ ((__noreturn__))";

    test_text = 'extern void	longjmp __((jmp_buf, int));';
};

/*
 *  Fix hpux10.20 <sys/time.h> 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;';
};

/*
 *  Fix glibc definition of HUGE_VAL in terms of hex floating point constant
 */
fix = {
    hackname  = huge_val_hex;
    files     = bits/huge_val.h, '*/bits/huge_val.h';
    select    = "^#[ \t]*define[ \t]*HUGE_VAL[ \t].*0x1\\.0p.*";
    bypass    = "__builtin_huge_val";

    c_fix     = format;
    c_fix_arg = "#define HUGE_VAL (__builtin_huge_val())\n";

    test_text = "# define HUGE_VAL\t(__extension__ 0x1.0p2047)";
};

/*
 *  Fix glibc definition of HUGE_VALF in terms of hex floating point constant
 */
fix = {
    hackname  = huge_valf_hex;
    files     = bits/huge_val.h, '*/bits/huge_val.h';
    select    = "^#[ \t]*define[ \t]*HUGE_VALF[ \t].*0x1\\.0p.*";
    bypass    = "__builtin_huge_valf";

    c_fix     = format;
    c_fix_arg = "#define HUGE_VALF (__builtin_huge_valf())\n";

    test_text = "#  define HUGE_VALF (__extension__ 0x1.0p255f)";
};

/*
 *  Fix glibc definition of HUGE_VALL in terms of hex floating point constant
 */
fix = {
    hackname  = huge_vall_hex;
    files     = bits/huge_val.h, '*/bits/huge_val.h';
    select    = "^#[ \t]*define[ \t]*HUGE_VALL[ \t].*0x1\\.0p.*";
    bypass    = "__builtin_huge_vall";

    c_fix     = format;
    c_fix_arg = "#define HUGE_VALL (__builtin_huge_vall())\n";

    test_text = "#  define HUGE_VALL (__extension__ 0x1.0p32767L)";
};

/*
 *  Fix return type of abort and free
 */
fix = {
    hackname  = int_abort_free_and_exit;
    files     = stdlib.h;
    select    = "int[ \t]+(abort|free|exit)[ \t]*\\(";
    bypass    = "_CLASSIC_ANSI_TYPES";

    c_fix     = format;
    c_fix_arg = "void\t%1(";

    test_text = "extern int abort(int);\n"
                "extern int free(void*);\n"
                "extern int exit(void*);";
};

/*
 *  Fix various macros used to define ioctl numbers.
 *  The traditional syntax was:
 *
 *    #define _IO(n, x) (('n'<<8)+x)
 *    #define TIOCFOO _IO(T, 1)
 *
 *  but this does not work with the C standard, which disallows macro
 *  expansion inside strings.  We have to rewrite it thus:
 *
 *    #define _IO(n, x) ((n<<8)+x)
 *    #define TIOCFOO  _IO('T', 1)
 *
 *  The select expressions match too much, but the c_fix code is cautious.
 *
 *  _IO might be: _IO DESIO BSD43__IO with W, R, WR, C, ... suffixes.
 */
fix = {
    hackname  = io_quotes_def;
    select    = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\([a-zA-Z][,)]";
    c_fix     = char_macro_def;
    c_fix_arg = "IO";
    test_text =
    "#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 the usage of the ioctl macro numbers.
 */
fix = {
    hackname  = io_quotes_use;
    select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*"
                "\\( *[^,']";
    c_fix     = char_macro_use;
    c_fix_arg = "IO";
    test_text = "#define TIOCFOO BSD43__IOWR(T, 1)\n"
                "#define TIOCFOO \\\\\n"
                "BSD43__IOWR(T, 1) /* Some are multi-line */";
};

/*
 *  Check for missing ';' in struct
 */
fix = {
    hackname = ip_missing_semi;
    files    = netinet/ip.h;
    select   = "}$";
    sed      = "/^struct/,/^};/s/}$/};/";
    test_text=
    "struct mumble {\n"
    "  union {\n"
    "    int x;\n"
    "  }\n"
    "}; /* mumbled struct */\n";
};

/*
 *  Non-traditional "const" declaration in Irix's limits.h.
 */
fix = {
    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;

    select = '/\* va_list \*/ char \*';
    c_fix  = format;
    c_fix_arg = "__gnuc_va_list";
    test_text =
    "extern int printf( const char *, /* va_list */ char * );";
};

/*
 * These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
 * use / * * / to concatenate tokens.
 */
fix = {
    hackname = kandr_concat;
    files  = "sparc/asm_linkage.h";
    files  = "sun*/asm_linkage.h";
    files  = "arm/as_support.h";
    files  = "arm/mc_type.h";
    files  = "arm/xcb.h";
    files  = "dev/chardefmac.h";
    files  = "dev/ps_irq.h";
    files  = "dev/screen.h";
    files  = "dev/scsi.h";
    files  = "sys/tty.h";
    files  = "Xm.acorn/XmP.h";
    files  = bsd43/bsd43_.h;
    select = '/\*\*/';
    c_fix     = format;
    c_fix_arg = '##';
    test_text = "#define __CONCAT__(a,b) a/**/b";
};

/*
 * The /usr/include/sys/ucontext.h on ia64-*linux-gnu systems defines
 * an _SC_GR0_OFFSET macro using an idiom that isn't a compile time
 * constant on recent versions of g++.
 */
fix = {
    hackname = linux_ia64_ucontext;
    files = "sys/ucontext.h";
    mach = "ia64-*-linux*";
    select = '\(\(\(char \*\) &\(\(struct sigcontext \*\) 0\)'
             '->sc_gr\[0\]\) - \(char \*\) 0\)';
    c_fix = format;
    c_fix_arg = "__builtin_offsetof \(struct sigcontext, sc_gr[0]\)";
    test_text = "# define _SC_GR0_OFFSET\t\\\\\n"
	"\t(((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0)\n";
};

/* 
 *  Remove header file warning from sys/time.h.  Autoconf's
 *  AC_HEADER_TIME recommends to include both sys/time.h and time.h
 *  which causes warning on LynxOS.  Remove the warning.
 */
fix = {
    hackname  = lynxos_no_warning_in_sys_time_h;
    files     = sys/time.h;
    select    = "#warning[ \t]+Using <time.h> instead of <sys/time.h>";
    c_fix     = format;
    c_fix_arg = "";
    test_text = "#warning Using <time.h> instead of <sys/time.h>";
};

/* 
 *  Add missing declaration for putenv.
 */
fix = {
    hackname  = lynxos_missing_putenv;
    mach      = '*-*-lynxos*';
    files     = stdlib.h;
    bypass    = 'putenv[ \t]*\\(';
    select    = "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
    c_fix     = format;
    c_fix_arg = "%0\n"
        "extern int putenv				_AP((char *));";
    c_fix_arg = "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
    test_text = "extern char *getenv	_AP((const char *));";
};

/*
 * 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;
    select   = "define[ \t]+_BSD_VA_LIST_[ \t]";
    bypass   = '__builtin_va_list';

    c_fix     = format;
    c_fix_arg = "%1__builtin_va_list";
    c_fix_arg = "(define[ \t]+_BSD_VA_LIST_[ \t]+).*";

    test_text = " # define _BSD_VA_LIST_\tchar**";
};

/*
 *  Fix non-ansi machine name defines
 */
fix = {
    hackname  = machine_name;
    c_test    = machine_name;
    c_fix     = machine_name;

    test_text = "/* MACH_DIFF: */\n"
    "#if defined( i386 ) || defined( sparc ) || defined( vax ) || "
    "defined( linux ) || __has_include ( <linux.h> )"
    "\n/* no uniform test, so be careful  :-) */";
};

/*
 *  Some math.h files define struct exception (it's in the System V
 *  Interface Definition), which conflicts with the class exception defined
 *  in the C++ file std/stdexcept.h.  We redefine it to __math_exception.
 *  This is not a great fix, but I haven't been able to think of anything
 *  better.
 */
fix = {
    hackname  = math_exception;
    files     = math.h;
    select    = "struct exception";
    /*
     * This should be bypassed on __cplusplus, but some supposedly C++
     * aware headers, such as Solaris 8 and 9, don't wrap their struct
     * exception either.  So currently we bypass only for glibc, based on a
     * comment in the fixed glibc header.  Ick.
     */
    bypass    = 'We have a problem when using C\+\+|for C\+\+, '
		'_[a-z0-9A-Z_]+_exception; for C, exception';
    /* The Solaris 10 headers already get this right.  */
    mach   = '*-*-solaris2.1[0-9]*';
    not_machine = true;
    c_fix     = wrap;

    c_fix_arg = "#ifdef __cplusplus\n"
                "#define exception __math_exception\n"
                "#endif\n";

    c_fix_arg = "#ifdef __cplusplus\n"
                "#undef exception\n"
                "#endif\n";

    test_text = "typedef struct exception t_math_exception;";
};

/*
 *  This looks pretty broken to me.  ``dbl_max_def'' will contain
 *  "define DBL_MAX " at the start, when what we really want is just
 *  the value portion.  Can't figure out how to write a test case
 *  for this either  :-(
 */
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";

    shell    =
    /*
     *  See if we have a definition for DBL_MAX in float.h.
     *  If we do, we will replace the one in math.h with that one.
     */

    "\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h "
                   "| 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"
    "\telse cat\n"
    "\tfi";

    test_text =
    "`echo '#define DBL_MAX\t3.1415e+9 /* really big */' >> float.h`\n"
    "#define HUGE_VAL DBL_MAX";
};

/*
 *  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 <rpc/auth_des.h> /* skip this */";
};

/*
 *  Some versions of NetBSD don't expect the C99 inline semantics.
 */
fix = {
    hackname  = netbsd_c99_inline_1;
    mach      = "*-*-netbsd*";
    files     = signal.h;
    select    = "extern __inline int";

    c_fix     = format;
    c_fix_arg = "extern\n"
		"#ifdef __GNUC_STDC_INLINE__\n"
		"__attribute__((__gnu_inline__))\n"
		"#endif\n"
		"__inline int";

    test_text = "extern __inline int\nsigaddset(sigset_t *set, int signo)\n{}";
};

/*
 * netbsd_c99_inline_2
 */
fix = {
    hackname  = netbsd_c99_inline_2;
    mach      = "*-*-netbsd*";
    files     = signal.h;
    select    = "#define _SIGINLINE extern __inline";

    c_fix     = format;
    c_fix_arg = <<- _EOArg_
	#ifdef __GNUC_STDC_INLINE__
	#define _SIGINLINE extern __attribute__((__gnu_inline__)) __inline
	#else
	%0
	#endif
	_EOArg_;

    test_text = "#define _SIGINLINE extern __inline";
};

/*
 * NetBSD has a semicolon after the ending '}' for some extern "C".
 */
fix = {
    hackname  = netbsd_extra_semicolon;
    mach      = "*-*-netbsd*";
    files     = sys/cdefs.h;
    select    = "#define[ \t]*__END_DECLS[ \t]*};";

    c_fix     = format;
    c_fix_arg = "#define __END_DECLS }";

    test_text = "#define __END_DECLS };";
};

/*
 * newlib's stdint.h has several failures to conform to C99.  The fix
 *  for these removed a comment that can be matched to identify unfixed
 *  versions.
 */
fix = {
    hackname  = newlib_stdint_1;
    files     = stdint-newlib.h, stdint.h;
    select    = "@todo - Add support for wint_t types";
    sed       = "s@#define INT32_MIN.*@#define INT32_MIN (-INT32_MAX - 1)@";
    sed       = "s@#define INT32_MAX.*@#define INT32_MAX __INT32_MAX__@";
    sed       = "s@#define UINT32_MAX.*@#define UINT32_MAX __UINT32_MAX__@";
    sed       = "s@#define INT_LEAST32_MIN.*@"
                  "#define INT_LEAST32_MIN (-INT_LEAST32_MAX - 1)@";
    sed       = "s@#define INT_LEAST32_MAX.*@"
                  "#define INT_LEAST32_MAX __INT_LEAST32_MAX__@";
    sed       = "s@#define UINT_LEAST32_MAX.*@"
                  "#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__@";
    sed       = 's@#define INT_FAST\([0-9]*\)_MIN.*@'
                  '#define INT_FAST\1_MIN (-INT_FAST\1_MAX - 1)@';
    sed       = 's@#define INT_FAST\([0-9]*\)_MAX.*@'
                  '#define INT_FAST\1_MAX __INT_FAST\1_MAX__@';
    sed       = 's@#define UINT_FAST\([0-9]*\)_MAX.*@'
                  '#define UINT_FAST\1_MAX __UINT_FAST\1_MAX__@';
    sed       = "s@#define SIZE_MAX.*@#define SIZE_MAX __SIZE_MAX__@";
    sed       = "s@#define PTRDIFF_MIN.*@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@";
    sed       = "s@#define PTRDIFF_MAX.*@#define PTRDIFF_MAX __PTRDIFF_MAX__@";
    sed       = "s@#define UINT8_C.*@#define UINT8_C(c) __UINT8_C(c)@";
    sed       = "s@#define UINT16_C.*@#define UINT16_C(c) __UINT16_C(c)@";
    test_text = "/* @todo - Add support for wint_t types. */\n"
                "#define INT32_MIN (-2147483647-1)\n"
                "#define INT32_MAX 2147483647\n"
                "#define UINT32_MAX 4294967295U\n"
                "#define INT_LEAST32_MIN (-2147483647-1)\n"
                "#define INT_LEAST32_MAX 2147483647\n"
                "#define UINT_LEAST32_MAX 4294967295U\n"
                "#define INT_FAST8_MIN INT8_MIN\n"
                "#define INT_FAST8_MAX INT8_MAX\n"
                "#define UINT_FAST8_MAX UINT8_MAX\n"
                "#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)\n"
                "#define PTRDIFF_MIN (-__STDINT_EXP(LONG_MAX) - 1L)\n"
                "#define PTRDIFF_MAX __STDINT_EXP(LONG_MAX)\n"
                "#define UINT8_C(x) x##U\n"
                "#define UINT16_C(x) x##U";
};

/*
 * newlib_stdint_2
 */
fix = {
    hackname  = newlib_stdint_2;
    files     = stdint-newlib.h, stdint.h;
    select    = "@todo - Add support for wint_t types";
    c_fix     = format;
    c_fix_arg = "#define INTMAX_MAX __INTMAX_MAX__\n"
                "#define INTMAX_MIN (-INTMAX_MAX - 1)\n"
                "#define UINTMAX_MAX __UINTMAX_MAX__\n"
                "#define WCHAR_MAX __WCHAR_MAX__\n"
                "#define WCHAR_MIN __WCHAR_MIN__\n"
                "#define WINT_MAX __WINT_MAX__\n"
                "#define WINT_MIN __WINT_MIN__\n\n"
                "%0";
    c_fix_arg = '/\*\* Macros for minimum-width integer constant expressions \*/';
    test_text = "/* @todo - Add support for wint_t types. */\n"
                "/** Macros for minimum-width integer constant expressions */";
};

/*
 *  NeXT 3.2 adds const prefix to some math functions.
 *  These conflict with the built-in functions.
 */
fix = {
    hackname  = next_math_prefix;
    files     = ansi/math.h;
    select    = "^extern[ \t]+double[ \t]+__const__[ \t]";

    c_fix     = format;
    c_fix_arg = "extern double %1(";
    c_fix_arg = "^extern[ \t]+double[ \t]+__const__[ \t]+([a-z]+)\\(";

    test_text = "extern\tdouble\t__const__\tmumble();";
};

/*
 *  NeXT 3.2 uses the word "template" as a parameter for some
 *  functions. GCC reports an invalid use of a reserved key word
 *  with the built-in functions.
 */
fix = {
    hackname = next_template;
    files    = bsd/libc.h;
    select   = "[ \t]template\\)";

    c_fix     = format;
    c_fix_arg = "(%1)";
    c_fix_arg = "\\(([^)]*)[ \t]template\\)";
    test_text = "extern mumble( char * template); /* fix */";
};

/*
 *  NeXT 3.2 includes the keyword volatile in the abort() and  exit()
 *  function prototypes. That conflicts with the  built-in functions.
 */
fix = {
    hackname = next_volitile;
    files    = ansi/stdlib.h;
    select   = "^extern[ \t]+volatile[ \t]+void[ \t]";

    c_fix     = format;
    c_fix_arg = "extern void %1(";
    c_fix_arg = "^extern[ \t]+volatile[ \t]+void[ \t]+(exit|abort)\\(";

    test_text = "extern\tvolatile\tvoid\tabort();";
};

/*
 *  NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
 *  Note that version 3 of the NeXT system has wait.h in a different directory,
 *  so that this code won't do anything.  But wait.h in version 3 has a
 *  conditional, so it doesn't need this fix.  So everything is okay.
 */
fix = {
    hackname  = next_wait_union;
    files     = sys/wait.h;

    select    = 'wait\(union wait';
    c_fix     = format;
    c_fix_arg = "wait(void";
    test_text = "extern pid_d wait(union wait*);";
};

/*
 *  a missing semi-colon at the end of the nodeent structure definition.
 */
fix = {
    hackname  = nodeent_syntax;
    files     = netdnet/dnetdb.h;
    select    = "char[ \t]*\\*na_addr[ \t]*$";
    c_fix     = format;
    c_fix_arg = "%0;";
    test_text = "char *na_addr\t";
};

/* 
 * Fix OpenBSD's NULL definition.
 */
fix = {
  hackname  = openbsd_null_definition;
  mach      = "*-*-openbsd*";
  files     = locale.h, stddef.h, stdio.h, string.h,
  time.h, unistd.h, wchar.h, sys/param.h;
  select    = "__GNUG__";
  c_fix = format;
  c_fix_arg = "#ifndef NULL\n"
	      "#ifdef __cplusplus\n"
	      "#ifdef __GNUG__\n"
	      "#define NULL\t__null\n"
	      "#else\t /* ! __GNUG__  */\n"
	      "#define NULL\t0L\n"
              "#endif\t /* __GNUG__  */\n"
	      "#else\t /* ! __cplusplus  */\n"
	      "#define NULL\t((void *)0)\n"
              "#endif\t /* __cplusplus  */\n"
              "#endif\t /* !NULL  */";

  c_fix_arg = "^#ifndef[ \t]*NULL\n"
	      "^#ifdef[ \t]*__GNUG__\n"
  	      "^#define[ \t]*NULL[ \t]*__null\n"
  	      "^#else\n"
              "^#define[ \t]*NULL[ \t]*0L\n"
              "^#endif\n"
              "^#endif";
  test_text = 
	"#ifndef NULL\n"
	"#ifdef  __GNUG__\n"
	"#define NULL    __null\n"
	"#else\n"
	"#define NULL    0L\n"
	"#endif\n"
	"#endif\n";
};

/*
 *  obstack.h used casts as lvalues.
 *
 *  We need to change postincrements of casted pointers (which are
 *  then dereferenced and assigned into) of the form
 *
 *    *((TYPE*)PTRVAR)++ = (VALUE)
 *
 *  into expressions like
 *
 *    ((*((TYPE*)PTRVAR) = (VALUE)), (PTRVAR += sizeof (TYPE)))
 *
 *  which is correct for the cases used in obstack.h since PTRVAR is
 *  of type char * and the value of the expression is not used.
 */
fix = {
    hackname  = obstack_lvalue_cast;
    files     = obstack.h;
    select    = '\*\(\(([^()]*)\*\)(.*)\)\+\+ = \(([^()]*)\)';
    c_fix     = format;
    c_fix_arg = "((*((%1*)%2) = (%3)), (%2 += sizeof (%1)))";
    test_text = "*((void **) (h)->next_free)++ = (aptr)";
};

/* 
 * Fix OpenBSD's va_start define.
 */
fix = {
  hackname  = openbsd_va_start;
  mach      = "*-*-openbsd*";
  files     = stdarg.h;
  select    = '__builtin_stdarg_start';
  c_fix     = format;
  c_fix_arg = __builtin_va_start;

  test_text = "#define va_start(v,l)   __builtin_stdarg_start((v),l)";
};

/*
 *  sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by
 *  defining regex.h related types.  This causes libg++ build and usage
 *  failures.  Fixing this correctly requires checking and modifying 3 files.
 */
fix = {
    hackname = osf_namespace_a;
    files    = reg_types.h;
    files    = sys/lc_core.h;
    test     = " -r reg_types.h";
    test     = " -r sys/lc_core.h";
    test     = " -n \"`grep '} regex_t;' reg_types.h`\"";
    test     = " -z \"`grep __regex_t regex.h`\"";

    c_fix     = format;
    c_fix_arg = "__%0";
    c_fix_arg = "reg(ex|off|match)_t";

    test_text = "`touch sys/lc_core.h`"
    "typedef struct {\n  int stuff, mo_suff;\n} regex_t;\n"
    "extern regex_t    re;\n"
    "extern regoff_t   ro;\n"
    "extern regmatch_t rm;\n";
};

fix = {
    hackname = osf_namespace_c;
    files    = regex.h;
    test     = " -r reg_types.h";
    test     = " -r sys/lc_core.h";
    test     = " -n \"`grep '} regex_t;' reg_types.h`\"";
    test     = " -z \"`grep __regex_t regex.h`\"";

    select    = "#include <reg_types\.h>.*";
    c_fix     = format;
    c_fix_arg = "%0\n"
                "typedef __regex_t\tregex_t;\n"
                "typedef __regoff_t\tregoff_t;\n"
                "typedef __regmatch_t\tregmatch_t;";

    test_text = "#include <reg_types.h>";
};

/*
 * On broken glibc-2.3.3 systems an array of incomplete structures is
 * passed to __sigsetjmp.  Fix that to take a pointer instead.
 */
fix = {
    hackname  = pthread_incomplete_struct_argument;
    files     = pthread.h;
    select    = "struct __jmp_buf_tag";
    c_fix     = format;
    c_fix_arg = "%1 *%2%3";
    c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) "
        "(__env)\\[1\\](.*)$";
    test_text = "extern int __sigsetjmp (struct __jmp_buf_tag __env[1], "
        "int __savemask);";
};

/*
 *  Fix return type of fread and fwrite on sysV68
 */
fix = {
    hackname = read_ret_type;
    files    = stdio.h;
    select   = "extern int\t.*, fread\\(\\), fwrite\\(\\)";
    c_fix     = format;
    c_fix_arg = "extern unsigned int fread(), fwrite();\n%1%2";
    c_fix_arg = "(extern int\t.*), fread\\(\\), fwrite\\(\\)(.*)";

    test_text = "extern int\tfclose(), fflush(), fread(), fwrite(), foo();";
};

/*
 *  Fix casts as lvalues in glibc's <rpc/xdr.h>.
 */
fix = {
    hackname  = rpc_xdr_lvalue_cast_a;
    files     = rpc/xdr.h;
    select    = "#define[ \t]*IXDR_GET_LONG.*\\\\\n.*__extension__.*";
    c_fix     = format;
    c_fix_arg = "#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))";
    test_text = "#define IXDR_GET_LONG(buf) \\\\\n"
                "\t((long)ntohl((u_long)*__extension__((u_int32_t*)(buf))++))";
};

/*
 * rpc_xdr_lvalue_cast_b
 */
fix = {
    hackname  = rpc_xdr_lvalue_cast_b;
    files     = rpc/xdr.h;
    select    = "#define[ \t]*IXDR_PUT_LONG.*\\\\\n.*__extension__.*";
    c_fix     = format;
    c_fix_arg = "#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))";
    test_text = "#define IXDR_PUT_LONG(buf, v) \\\\\n"
                "\t(*__extension__((u_int32_t*)(buf))++ = (long)htonl((u_long)(v)))";
};

/*
 *  function class(double x) conflicts with C++ keyword on rs/6000
 */
fix = {
    hackname  = rs6000_double;
    files     = math.h;
    select    = '[^a-zA-Z_]class\(';

    c_fix     = format;
    c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
    c_fix_arg = '^.*[^a-zA-Z_]class\(.*';

    test_text = "extern int class();";
};

/*
 *  Wrong fchmod prototype on RS/6000.
 */
fix = {
    hackname  = rs6000_fchmod;
    files     = sys/stat.h;
    select    = 'fchmod\(char \*';
    c_fix     = format;
    c_fix_arg = "fchmod(int";
    test_text = "extern int fchmod(char *, mode_t);";
};

/*
 *  parameters conflict with C++ new on rs/6000
 */
fix = {
    hackname  = rs6000_param;
    files     = "stdio.h";
    files     = "unistd.h";

    select    = 'rename\(const char \*old, const char \*new\)';
    c_fix     = format;
    c_fix_arg = 'rename(const char *_old, const char *_new)';

    test_text = 'extern int rename(const char *old, const char *new);';
};

/*
 *  Solaris 10+ <sys/feature_tests.h> defines _RESTRICT_KYWD as restrict
 *  for C99.  This is wrong for C++, which needs many C99 features, but
 *  only supports __restrict.
 */
fix = {
    hackname  = solaris___restrict;
    files     = sys/feature_tests.h;
    select    = "#define[ \t]*_RESTRICT_KYWD[ \t]*restrict";
    mach      = "*-*-solaris2*";
    c_fix     = format;
    c_fix_arg = "#ifdef __cplusplus\n#define\t_RESTRICT_KYWD\t__restrict\n"
    	        "#else\n%0\n#endif";
    test_text = "#define	_RESTRICT_KYWD	restrict";
};

/*
 * Solaris 10+ complex.h defines _Complex_I and _Imaginary_I in terms of
 * themselves, which are Sun Studio compiler intrinsics.  Remove _Imaginary_I
 * and imaginary definitions which are not supported by GCC.
 */
fix = {
    hackname  = solaris_complex;
    mach      = "*-*-solaris2.*";
    files     = complex.h;
    select    = "#define[ \t]_Complex_I[ \t]_Complex_I";
    sed	      = "s/#define[ \t]_Complex_I[ \t]_Complex_I/"
		"#define\t_Complex_I\t(__extension__ 1.0iF)/";
    sed	      = "/#define[ \t]_Imaginary_I[ \t]_Imaginary_I/d";
    sed	      = "/#define[ \t]imaginary[ \t]_Imaginary/d";
    sed       = "s/#define[ \t]I[ \t]\\{1,\\}_Imaginary_I/#define\tI\t\t_Complex_I/";
    test_text = "#define	_Complex_I	_Complex_I\n"
    		"#define	complex		_Complex\n"
		"#define	_Imaginary_I	_Imaginary_I\n"
		"#define	imaginary	_Imaginary\n"
		"#undef	I\n"
		"#define	I		_Imaginary_I";
};

/*
 * Solaris 10+ <complex.h> is wrapped in #ifndef __cplusplus.  Wrap in
 * extern "C" instead so libstdc++ can use it.
 */
fix = {
    hackname  = solaris_complex_cxx;
    mach      = "*-*-solaris2.*";
    files     = complex.h;
    sed	      = "/#if[ \t]*!defined(__cplusplus)/c\\\n"
    		"#ifdef\t__cplusplus\\\nextern \"C\" {\\\n#endif";
    sed	      = "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c\\\n"
		"#ifdef\t__cplusplus\\\n}\\\n#endif";
    test_text = "#if !defined(__cplusplus)\n"
		"#endif	/* !defined(__cplusplus) */";
};

/*
 *  g++ rejects functions declared with both C and C++ linkage.
 */
fix = {
    hackname  = solaris_cxx_linkage;
    mach      = '*-*-solaris2*';
    files     = "iso/stdlib_iso.h";
    select    = "(#if __cplusplus >= 199711L)\n"
	        "(extern \"C\\+\\+\" \\{\n)"
	        "(.*(bsearch|qsort).*)";
    c_fix     = format;
    c_fix_arg = "%1 && !__GNUG__\n%2%3";

    test_text =
    "#if __cplusplus >= 199711L\n"
    "extern \"C++\" {\n"
    "	void *bsearch(const void *, const void *, size_t, size_t,";
};

/*
 *  Solaris <iso/stdio_iso.h> doesn't declare getc for C++ with
 *  _STRICT_STDC, but uses it.
 */
fix = {
    hackname  = solaris_getc_strict_stdc;
    mach      = "*-*-solaris2*";
    files     = "iso/stdio_iso.h";
    select    = "(.*&& )!defined\\(_STRICT_STDC\\)(.*)";
    c_fix     = format;
    c_fix_arg = "%1(!defined(_STRICT_STDC) || (__cplusplus >= 199711L))%2";

    test_text =
    "#if	!defined(_REENTRANT) && !defined(_LP64) && !defined(_STRICT_STDC)";
};

/*
 *  Solaris <iso/stdio_iso.h> should deprecate gets before C11.
 */
fix = {
    hackname  = solaris_gets_c11;
    mach      = "*-*-solaris2*";
    files     = "iso/stdio_iso.h";
    select    = "(extern char[ \t]*\\*gets\\(char \\*\\));";

    c_fix     = format;
    c_fix_arg = "#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L\n"
    		"%1 __attribute__((__deprecated__));\n"
		"#endif";

    test_text = "extern char	*gets(char *);";
};

/*
 *  Solaris <iso/stdio_iso.h> shouldn't declare gets for C++14.
 */
fix = {
    hackname  = solaris_gets_cxx14;
    mach      = "*-*-solaris2*";
    files     = "iso/stdio_iso.h";
    select    = <<- _EOSelect_
(#if __STDC_VERSION__ < 201112L)
(extern char	\*gets\(char \*\) __ATTR_DEPRECATED;)
_EOSelect_;
    c_fix     = format;
    c_fix_arg = "%1 && __cplusplus < 201402L\n%2";

    test_text = <<- _EOText_
#if __STDC_VERSION__ < 201112L
extern char	*gets(char *) __ATTR_DEPRECATED;
_EOText_;
};

/*
 * Sun Solaris 2 has a version of sys/int_const.h that defines
 * UINT8_C and UINT16_C to unsigned constants.
 */
fix = {
    hackname  = solaris_int_const;
    files     = sys/int_const.h;
    mach      = '*-*-solaris2*';
    c_fix     = format;
    c_fix_arg = "#define\tUINT8_C(c)\t(c)\n"
                "%1\n"
                "#define\tUINT16_C(c)\t(c)";
    select    = "^#define[ \t]+UINT8_C\\(c\\)[ \t]+__CONCAT__.*\n"
                "(/\*.*\*/)\n"
                "#define[ \t]+UINT16_C\\(c\\)[ \t]+__CONCAT__.*";
    test_text =
    "#define	UINT8_C(c)	__CONCAT__(c,u)\n"
    "/* CSTYLED */\n"
    "#define	UINT16_C(c)	__CONCAT__(c,u)";
};

/*
 * Sun Solaris 2 has a version of sys/int_limits.h that defines
 * UINT8_MAX and UINT16_MAX to unsigned constants.
 */
fix = {
    hackname  = solaris_int_limits_1;
    files     = sys/int_limits.h;
    mach      = '*-*-solaris2*';
    c_fix     = format;
    c_fix_arg = "#define\tUINT8_MAX\t(255)\n"
                "#define\tUINT16_MAX\t(65535)";
    select    = "^#define[ \t]+UINT8_MAX[ \t]+\\(255U\\)\n"
                "#define[ \t]+UINT16_MAX[ \t]+\\(65535U\\)";
    test_text =
    "#define	UINT8_MAX	(255U)\n"
    "#define	UINT16_MAX	(65535U)";
};

/*
 * Sun Solaris 2 has a version of sys/int_limits.h that defines
 * INT_FAST16 limits to wrong values for sys/int_types.h.
 */
fix = {
    hackname  = solaris_int_limits_2;
    files     = sys/int_limits.h;
    mach      = '*-*-solaris2*';
    c_fix     = format;
    c_fix_arg = "#define\t%1_FAST16_%2 %132_%2";
    select    = "^#define[ \t]+(INT|UINT)_FAST16_(MAX|MIN)[ \t](INT|UINT)16.*";
    test_text =
    "#define	INT_FAST16_MAX INT16_MAX\n"
    "#define	UINT_FAST16_MAX UINT16_MAX\n"
    "#define	INT_FAST16_MIN	INT16_MIN";
};

/*
 * Sun Solaris 2 has a version of sys/int_limits.h that defines
 * SIZE_MAX as unsigned long.
 */
fix = {
    hackname  = solaris_int_limits_3;
    files     = sys/int_limits.h;
    mach      = '*-*-solaris2*';
    c_fix     = format;
    c_fix_arg = "#define\tSIZE_MAX\t4294967295U";
    select    = "^#define[ \t]+SIZE_MAX[ \t]+4294967295UL";
    test_text =
    "#define	SIZE_MAX	4294967295UL";
};

/*
 * Sun Solaris 10 defines several C99 math macros in terms of
 * builtins specific to the Studio compiler, in particular not
 * compatible with the GNU compiler.
 */
fix = {
    hackname = solaris_math_1;
    select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    bypass = "__GNUC__";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = "#define\tHUGE_VA%1\t(__builtin_huge_va%2())";
    c_fix_arg = "^#define[ \t]+HUGE_VA([LF]+)[ \t]+__builtin_huge_va([lf]+)";
    test_text =
    '#ident	"@(#)math_c99.h	1.9	04/11/01 SMI"'"\n"
    "#undef	HUGE_VAL\n"
    "#define	HUGE_VAL	__builtin_huge_val\n"
    "#undef	HUGE_VALF\n"
    "#define	HUGE_VALF	__builtin_huge_valf\n"
    "#undef	HUGE_VALL\n"
    "#define	HUGE_VALL	__builtin_huge_vall";
};

/*
 * On Solaris 11, if you do isinf(NaN) you'll get a floating point
 * exception.  Provide an alternative using GCC's builtin.
 */
fix = {
    hackname  = solaris_math_10;
    select    = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    files     = iso/math_c99.h;
    c_fix     = format;
    c_fix_arg = "#define\tisinf(x) __builtin_isinf(x)";
    c_fix_arg = "^#define[ \t]+isinf\\(x\\)[ \t]+__extension__\\([ \t]*\\\\\n"
                "[ \t]*\\{[ \t]*__typeof\\(x\\)[ \t]*__x_i[ \t]*=[ \t]*\\(x\\);"
                    "[ \t]*\\\\\n"
                "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*"
                    "INFINITY[ \t]*\\|\\|[ \t]*\\\\\n"
                "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*"
                    "\\(-INFINITY\\);[ \t]*\\}\\)";
    test_text =
    '#pragma ident	"@(#)math_c99.h	1.12	07/01/21 SMI"'"\n"
    "#undef	isinf\n"
    "#define	isinf(x)	__extension__( \\\\\n"
    "			{ __typeof(x) __x_i = (x); \\\\\n"
    "			__x_i == (__typeof(__x_i)) INFINITY || \\\\\n"
    "			__x_i == (__typeof(__x_i)) (-INFINITY); })";
};

/*
 * Solaris math INFINITY
 */
fix = {
    hackname = solaris_math_2;
    select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    bypass = "__GNUC__";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = "#define\tINFINITY\t(__builtin_inff())";
    c_fix_arg = "^#define[ \t]+INFINITY[ \t]+__builtin_infinity";
    test_text =
    '#ident	"@(#)math_c99.h	1.9	04/11/01 SMI"'"\n"
    "#undef	INFINITY\n"
    "#define	INFINITY	__builtin_infinity";
};

/*
 * Solaris math NAN
 */
fix = {
    hackname = solaris_math_3;
    select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    bypass = "__GNUC__";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = "#define\tNAN\t\t(__builtin_nanf(\"\"))";
    c_fix_arg = "^#define[ \t]+NAN[ \t]+__builtin_nan";
    test_text =
    '#ident	"@(#)math_c99.h	1.9	04/11/01 SMI"'"\n"
    "#undef	NAN\n"
    "#define	NAN	__builtin_nan";
};

/*
 * Solaris math fpclassify
 */
fix = {
    hackname = solaris_math_4;
    select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    bypass = "__GNUC__";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = "#define\tfpclassify(x) \\\n"
                "  __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, "
                    "FP_SUBNORMAL, FP_ZERO, (x))";
    c_fix_arg = "^#define[ \t]+fpclassify\\(x\\)[ \t]+__builtin_fpclassify\\(x\\)";
    test_text =
    '#ident	"@(#)math_c99.h	1.9	04/11/01 SMI"'"\n"
    "#undef	fpclassify\n"
    "#define	fpclassify(x)	__builtin_fpclassify(x)";
};

/*
 * Solaris math signbit
 */
fix = {
    hackname = solaris_math_8;
    select = '@\(#\)math_c99\.h' "[ \t]+1\\.[0-9]+[ \t]+[0-9/]+ SMI";
    bypass = "__GNUC__";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = "#define\tsignbit(x)\t(sizeof(x) == sizeof(float) \\\n"
                "\t\t\t   ? __builtin_signbitf(x) \\\n"
                "\t\t\t   : sizeof(x) == sizeof(long double) \\\n"
                "\t\t\t     ? __builtin_signbitl(x) \\\n"
                "\t\t\t     : __builtin_signbit(x))";
    c_fix_arg = "^#define[ \t]+signbit\\(x\\)[ \t]+__builtin_signbit\\(x\\)";
    test_text = <<- _EOText_
	#ident	"@(#)math_c99.h	1.9	04/11/01 SMI"
	#undef	signbit
	#define	signbit(x)	__builtin_signbit(x)
	_EOText_;
};

/*
 * Solaris math comparison macros
 */
fix = {
    hackname = solaris_math_9;
    select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    bypass = "__GNUC__";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = "#define\t%1(x, y)%2__builtin_%1(x, y)";
    c_fix_arg = "^#define[ \t]+([a-z]+)\\(x, y\\)([ \t]+)\\(\\(x\\) "
                    "__builtin_[a-z]+\\(y\\)\\)";
    test_text =
    '#ident	"@(#)math_c99.h	1.9	04/11/01 SMI"'"\n"
    "#undef	isgreater\n"
    "#define	isgreater(x, y)		((x) __builtin_isgreater(y))\n"
    "#undef	isgreaterequal\n"
    "#define	isgreaterequal(x, y)	((x) __builtin_isgreaterequal(y))\n"
    "#undef	isless\n"
    "#define	isless(x, y)		((x) __builtin_isless(y))\n"
    "#undef	islessequal\n"
    "#define	islessequal(x, y)	((x) __builtin_islessequal(y))\n"
    "#undef	islessgreater\n"
    "#define	islessgreater(x, y)	((x) __builtin_islessgreater(y))\n"
    "#undef	isunordered\n"
    "#define	isunordered(x, y)	((x) __builtin_isunordered(y))";
};

/*
 * Newer Solaris 10/11 GCC signbit implementations cause strict-aliasing
 * warnings.
 */
fix = {
    hackname = solaris_math_11;
    select = '@\(#\)math_c99\.h' "[ \t]+1\\.[0-9]+[ \t]+[0-9/]+ ";
    files = iso/math_c99.h;
    c_fix = format;
    c_fix_arg = << _EOArg_
#undef	signbit
#define	signbit(x)	(sizeof(x) == sizeof(float) \
			   ? __builtin_signbitf(x) \
			   : sizeof(x) == sizeof(long double) \
			     ? __builtin_signbitl(x) \
			     : __builtin_signbit(x))
_EOArg_;
    c_fix_arg = << _EOArg_
^#undef[ 	]+signbit
#if defined\(__sparc\)
#define[ 	]+signbit\(x\)[ 	]+__extension__\( \\
[ 	]+\{[ 	]*__typeof\(x\)[ 	]*__x_s[ 	]*=[ 	]*\(x\);[ 	]*\\
[ 	]+\(int\)[ 	]*\(\*\(unsigned[ 	]*\*\)[ 	]*\&__x_s[ 	]*>>[ 	]*31\);[ 	]*\}\)
#elif defined\(__i386\) \|\| defined\(__amd64\)
#define[ 	]+signbit\(x\)[ 	]+__extension__\( \\
[ 	]+\{ __typeof\(x\) __x_s = \(x\); \\
[ 	]+\(sizeof \(__x_s\) == sizeof \(float\) \? \\
[ 	]+\(int\) \(\*\(unsigned \*\) \&__x_s >> 31\) : \\
[ 	]+sizeof \(__x_s\) == sizeof \(double\) \? \\
[ 	]+\(int\) \(\(\(unsigned \*\) \&__x_s\)\[1\] >> 31\) : \\
[ 	]+\(int\) \(\(\(unsigned short \*\) \&__x_s\)\[4\] >> 15\)\); \}\)
#endif
_EOArg_;
    test_text = << _EOText_
/* @(#)math_c99.h	1.14	13/03/27 */
#undef	signbit
#if defined(__sparc)
#define	signbit(x)	__extension__( \\
				{ __typeof(x) __x_s = (x); \\
				(int) (*(unsigned *) &__x_s >> 31); })
#elif defined(__i386) || defined(__amd64)
#define	signbit(x)	__extension__( \\
			{ __typeof(x) __x_s = (x); \\
			(sizeof (__x_s) == sizeof (float) ? \\
			(int) (*(unsigned *) &__x_s >> 31) : \\
			sizeof (__x_s) == sizeof (double) ? \\
			(int) (((unsigned *) &__x_s)[1] >> 31) : \\
			(int) (((unsigned short *) &__x_s)[4] >> 15)); })
#endif
_EOText_;
};

/*
 * Some versions of Solaris 10+ <math.h> #undef libstdc++-internal macros.
 */
fix = {
    hackname  = solaris_math_12;
    files     = math.h;
    mach      = '*-*-solaris2*';
    select    = '#undef.*_GLIBCXX_USE_C99_MATH';
    bypass    = '__MATH_PREEMPTS_GLIBCXX_C99_MATH';
    sed       = "/#undef[ \t]*_GLIBCXX_USE_C99_MATH/d";
    test_text = << _EOText_
#if __cplusplus >= 201103L
#undef  _GLIBCXX_USE_C99_MATH
#undef  _GLIBCXX_USE_C99_MATH_TR1
#endif
_EOText_;
};

/*
 * Sun Solaris defines PTHREAD_ONCE_INIT as an array containing a
 * structure.  As such, it need two levels of brackets, but only
 * contains one.  Wrap the macro definition in an extra layer.
 */
fix = {
    hackname = solaris_once_init_1;
    select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    files = pthread.h;
    mach = '*-*-solaris*';
    c_fix = format;
    c_fix_arg = "%1{%2}%3";
    c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{)([^}]+)(\\})[ \t]*$";
    test_text =
    '#pragma ident	"@(#)pthread.h	1.37	04/09/28 SMI"'"\n"
    "#define PTHREAD_ONCE_INIT\t{0, 0, 0, PTHREAD_ONCE_NOTDONE}";
};

/*
 * Solaris 10+ <spawn.h> uses char *const argv[_RESTRICT_KYWD] in the
 * posix_spawn declarations, which doesn't work with C++.
 */
fix = {
    hackname  = solaris_posix_spawn_restrict;
    files     = spawn.h;
    mach      = '*-*-solaris2*';
    c_fix     = format;
    c_fix_arg = "%1*_RESTRICT_KYWD %2%3";
    select    = "(.*[ \t]+)([a-z]+)\\[_RESTRICT_KYWD\\](.*)";
    test_text =
    "char *const argv[_RESTRICT_KYWD],\n"
    "char *const envp[_RESTRICT_KYWD]);";
};

/*
 *  The pow overloads with int were removed in C++ 2011 DR 550.
 */
fix = {
    hackname  = solaris_pow_int_overload;
    mach      = '*-*-solaris2*';
    files     = "iso/math_iso.h";
    select    = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)"
		" *\\{[^{}]*\n[^{}]*\\}";
    c_fix     = format;
    c_fix_arg = "#if __cplusplus < 201103L\n%0\n#endif";

    test_text =
    "	inline long double pow(long double __X, int __Y) { return\n"
    "		__powl(__X, (long double) (__Y)); }";
};

/*
 * Sun Solaris defines PTHREAD_RWLOCK_INITIALIZER with a "0" for some
 *  fields of the pthread_rwlock_t structure, which are 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_rwlock_init_1;
    select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
    files = pthread.h;
    mach = '*-*-solaris*';
    c_fix = format;
    c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
                "%0\n"
                "#else\n"
                "%1{0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}\n"
                "#endif";
    c_fix_arg = "(^#define[ \t]+PTHREAD_RWLOCK_INITIALIZER[ \t]+)"
                "\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$";

    test_text =
    '#ident "@(#)pthread.h  1.26  98/04/12 SMI"'"\n"
    "#define PTHREAD_RWLOCK_INITIALIZER\t{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}";
};

/*
 * Before Solaris 10, <stdio.h> lacks declarations of std::__filbuf and
 * std::__flsbuf, but <iso/stdio_iso.h> uses them.
 */
fix = {
    hackname  = solaris_std___filbuf;
    files     = stdio.h;
    mach      = '*-*-solaris2*';
    bypass    = "using std::__filbuf";
    select    = "(using std::perror;\n)(#endif)";
    c_fix     = format;
    c_fix_arg = "%1#ifndef _LP64\n"
		"using std::__filbuf;\n"
		"using std::__flsbuf;\n"
		"#endif\n%2";

    test_text = "using std::perror;\n"
		"#endif";
};

/*
 *  Solaris <stdio.h> shouldn't use std::gets for C++14.
 */
fix = {
    hackname  = solaris_std_gets_cxx14;
    mach      = "*-*-solaris2*";
    files     = "stdio.h";
    select    = "using std::gets;";

    c_fix     = format;
    c_fix_arg = "#if __cplusplus < 201402L\n%0\n#endif";

    test_text = "using std::gets;";
};

/*
 * Sun Solaris 8 has what appears to be some gross workaround for
 * some old version of their c++ compiler.  G++ doesn't want it
 * either, but doesn't want to be tied to SunPRO version numbers.
 */
fix = {
    hackname = solaris_stdio_tag;
    files    = stdio_tag.h;

    select   = '__cplusplus < 54321L';
    /* In Solaris 10, the code in stdio_tag.h is conditionalized on 
       "!defined(__GNUC__)" so we no longer need to fix it.  */
    bypass   = '__GNUC__';
    sed      = 's/defined(__cplusplus) && (__cplusplus < 54321L)/0/';

    test_text = "#if\tdefined(__cplusplus) && (__cplusplus < 54321L)";
};

/*
 *  Solaris <stdlib.h> shouldn't use _Noreturn, breaks with C++.
 */
fix = {
    hackname  = solaris_stdlib_noreturn;
    mach      = "*-*-solaris2*";
    files     = "iso/stdlib_c99.h";
    select    = "(extern) _Noreturn (void quick_exit\\(int\\));";

    c_fix     = format;
    c_fix_arg = "%1 %2 __attribute__((__noreturn__));";

    test_text = "extern _Noreturn void quick_exit(int);";
};

/*
 *  a missing semi-colon at the end of the statsswtch structure definition.
 */
fix = {
    hackname  = statsswtch;
    files     = rpcsvc/rstat.h;
    select    = "boottime$";
    c_fix     = format;
    c_fix_arg = "boottime;";
    test_text = "struct statswtch {\n  int boottime\n};";
};

/*
 *  Arrange for stdio.h to use stdarg.h to define __gnuc_va_list.
 *  On 4BSD-derived systems, stdio.h defers to machine/ansi.h; that's
 *  OK too.
 */
fix = {
    hackname = stdio_stdarg_h;
    files    = stdio.h;
    bypass   = "include.*(stdarg\.h|machine/ansi\.h)";
    /*
     * On Solaris 10, this fix is unncessary; <stdio.h> includes
     * <iso/stdio_iso.h>, which includes <sys/va_list.h>.
      */
    mach     = '*-*-solaris2.1[0-9]*';
    not_machine = true;

    c_fix     = wrap;

    c_fix_arg = "#define __need___va_list\n#include <stdarg.h>\n";

    test_text = "";
};

/*
 *  Don't use or define the name va_list in stdio.h.  This is for
 *  ANSI.  Note _BSD_VA_LIST_ is dealt with elsewhere.  The presence
 *  of __gnuc_va_list, __DJ_va_list, or _G_va_list is taken to
 *  indicate that the header knows what it's doing -- under SUSv2,
 *  stdio.h is required to define va_list, and we shouldn't break
 *  that.
 */
fix = {
    hackname = stdio_va_list;
    files    = stdio.h;
    bypass   = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list';
    /* 
     * On Solaris 10, the definition in 
     * <stdio.h> is guarded appropriately by the _XPG4 feature macro; 
     * there is therefore no need for this fix there.
     */
    mach = '*-*-solaris2.1[0-9]*';
    not_machine = true;

    /*
     * Use __gnuc_va_list in arg types in place of va_list.
     * 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.
     * Don't claim to have defined va_list.
     */
    sed = "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\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"
          "s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
           "@typedef \\1 __not_va_list__;@\n"
	  "s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
          "s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
          "s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n"
          "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);";
};

/*
 *  Fix headers that use va_list from stdio.h to use the updated
 *  va_list from the stdio_va_list change.  Note _BSD_VA_LIST_ is
 *  dealt with elsewhere.  The presence of __gnuc_va_list,
 *  __DJ_va_list, or _G_va_list is taken to indicate that the header
 *  knows what it's doing.
 */
fix = {
    hackname = stdio_va_list_clients;
    files    = com_err.h;
    files    = cps.h;
    files    = curses.h;
    files    = krb5.h;
    files    = lc_core.h;
    files    = pfmt.h;
    files    = wchar.h;
    files    = curses_colr/curses.h;
    bypass   = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list';
    /* Don't fix, if we use va_list from stdarg.h, or if the use is
       otherwise protected.  */
    bypass   = 'include <stdarg\.h>|#ifdef va_start';

    /*
     * Use __gnuc_va_list in arg types in place of va_list.
     * 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.
     * Don't claim to have defined va_list.
     */
    sed = "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\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"
          "s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
           "@typedef \\1 __not_va_list__;@\n"
	  "s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
          "s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
          "s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n"
          "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);";
};

/*
 *  "!__STDC__" or "__STDC__==0" or "__STDC__!=1" or "__STDC__-0==0"
 *  is "!defined( __STRICT_ANSI__ )"
 */
fix = {
    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 <standards.h> supports GCC usage of __STDC__. */
    bypass = 'GNU and MIPS C compilers define __STDC__ differently';
    /* GNU gmp.h uses "__STDC__ != 1" only if __SCO_VERSION__, which
       is not defined by GCC, so it is safe.  */
    bypass = '__SCO_VERSION__.*__STDC__ != 1';
    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";
};

/*
 *  IRIX 4.0.5 <rpc/xdr.h> uses struct __file_s
 *  in prototype without previous definition.
 */
fix = {
    hackname  = struct_file;
    files     = rpc/xdr.h;
    select    = '^.*xdrstdio_create.*struct __file_s';
    c_fix     = format;
    c_fix_arg = "struct __file_s;\n%0";
    test_text = "extern void xdrstdio_create( struct __file_s* );";
};

/*
 *  IRIX 4.0.5 <rpc/auth.h> uses struct sockaddr
 *  in prototype without previous definition.
 *
 *  Don't fix OpenBSD, which uses struct sockaddr_in prototyping the same
 *  function, and does define it.
 */
fix = {
    hackname  = struct_sockaddr;
    files     = rpc/auth.h;
    select    = "^.*authdes_create.*struct sockaddr[^_]";
    bypass    = "<sys/socket\.h>";
    bypass    = "struct sockaddr;\n";
    c_fix     = format;
    c_fix_arg = "struct sockaddr;\n%0";
    test_text = "extern AUTH* authdes_create( struct sockaddr* );";
};

/*
 *  Apply fix this to all OSs since this problem seems to effect
 *  more than just SunOS.
 */
fix = {
    hackname = sun_auth_proto;
    files    = rpc/auth.h;
    files    = rpc/clnt.h;
    files    = rpc/svc.h;
    files    = rpc/xdr.h;
    bypass   = "__cplusplus";
    /*
     *  Select those files containing '(*name)()'.
     */
    select    = '\(\*[a-z][a-z_]*\)\(\)';

    c_fix     = format;
    c_fix_arg = "#ifdef __cplusplus\n%1(...);%2\n"
                "#else\n%1();%2\n#endif";
    c_fix_arg = '(.*\(\*[a-z][a-z_]*\))\(\);(.*)';

    test_text =
    "struct auth_t {\n"
    "    int (*name)(); /* C++ bad */\n"
    "};";
};

/*
 *  Fix bogus #ifdef on SunOS 4.1.
 */
fix = {
    hackname  = sun_bogus_ifdef;
    files     = "hsfs/hsfs_spec.h";
    files     = "hsfs/iso_spec.h";
    select    = '#ifdef(.*\|\|.*)';
    c_fix     = format;
    c_fix_arg = "#if%1";

    test_text = "#ifdef  __i386__ || __vax__ || __sun4c__";
};

/*
 *  Fix the CAT macro in SunOS memvar.h.
 */
fix = {
    hackname  = sun_catmacro;
    files     = pixrect/memvar.h;
    select    = "^#define[ \t]+CAT\\(a,b\\).*";
    c_fix     = format;

    c_fix_arg =
    "#ifdef __STDC__\n"
    "#  define CAT(a,b) a##b\n"
    "#else\n%0\n#endif";

    test_text =
    "#define CAT(a,b)\ta/**/b";
};

/*
 *  Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
 *  Also fix return type of {m,re}alloc in <malloc.h> on sysV68
 */
fix = {
    hackname = sun_malloc;
    files    = malloc.h;
    bypass   = "_CLASSIC_ANSI_TYPES";

    sed   = "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g";
    sed   = "s/int[ \t][ \t]*free/void\tfree/g";
    sed   = "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g";
    sed   = "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g";
    sed   = "s/char\\([ \t]*\\*[ \t]*calloc\\)/void\\1/g";

    test_text =
    "typedef char *\tmalloc_t;\n"
    "int \tfree();\n"
    "char*\tmalloc();\n"
    "char*\tcalloc();\n"
    "char*\trealloc();";
};

/*
 *  Check for yet more missing ';' in struct (in SunOS 4.0.x)
 */
fix = {
    hackname = sun_rusers_semi;
    files    = rpcsvc/rusers.h;
    select   = "_cnt$";
    sed      = "/^struct/,/^};/s/_cnt$/_cnt;/";
    test_text = "struct mumble\n  int _cnt\n};";
};

/*
 *  signal.h on SunOS defines signal using (),
 *  which causes trouble when compiling with g++ -pedantic.
 */
fix = {
    hackname = sun_signal;
    files    = sys/signal.h;
    files    = signal.h;
    select   = "^void\t" '\(\*signal\(\)\)\(\);.*';

    c_fix     = format;
    c_fix_arg =
          "#ifdef __cplusplus\n"
          "void\t(*signal(...))(...);\n"
          "#else\n%0\n#endif";

    test_text = "void\t(*signal())();";
};

/*
 *  Correct the return type for strlen in strings.h in SunOS 4.
 */
fix = {
    hackname = sunos_strlen;
    files    = strings.h;
    select   = "int[ \t]*strlen\\(\\);(.*)";
    c_fix     = format;
    c_fix_arg = "__SIZE_TYPE__ strlen();%1";
    test_text = " int\tstrlen(); /* string length */";
};

/*
 *  Linux kernel's vt.h breaks C++
 */
fix = {
    hackname  = suse_linux_vt_cxx;
    files     = linux/vt.h;

    select    = "^[ \t]*unsigned int new;";
    c_fix     = format;
    c_fix_arg = "unsigned int newev;";

    test_text = "        unsigned int new;      /* New console (if changing) */";
};

/*
 *  Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
 *  that is visible to any ANSI compiler using this include.  Simply
 *  delete the lines that #define some string functions to internal forms.
 */
fix = {
    hackname = svr4_disable_opt;
    files    = string.h;
    select   = '#define.*__std_hdr_';
    sed      = '/#define.*__std_hdr_/d';
    test_text = "#define strlen __std_hdr_strlen\n";
};

/*
 *   Fix broken decl of getcwd present on some svr4 systems.
 */
fix = {
    hackname = svr4_getcwd;
    files    = stdlib.h;
    files    = unistd.h;
    files    = prototypes.h;
    select   = 'getcwd\(char \*, int\)';

    c_fix     = format;
    c_fix_arg = "getcwd(char *, size_t)";

    test_text = "extern char* getcwd(char *, int);";
};

/*
 *   Fix broken decl of profil present on some svr4 systems.
 */
fix = {
    hackname = svr4_profil;
    files    = stdlib.h;
    files    = unistd.h;

    select    =
    'profil\(unsigned short \*, unsigned int, unsigned int, unsigned int\)';
    c_fix     = format;
    c_fix_arg = 'profil(unsigned short *, size_t, int, unsigned int)';

    test_text =
    'profil(unsigned short *, unsigned int, unsigned int, unsigned int);';
};

/*
 * Correct types for signal handler constants like SIG_DFL; they might be
 * void (*) (), and should be void (*) (int).  C++ doesn't like the
 * old style.
 */
fix = {
    hackname = svr4_sighandler_type;
    files = sys/signal.h;
    select = 'void *\(\*\)\(\)';
    c_fix = format;
    c_fix_arg = "void (*)(int)";
    test_text = "#define SIG_DFL (void(*)())0\n"
                "#define SIG_IGN (void (*)())0\n";
};

/*
 *  Some SysV r4 systems, including Sequent's DYNIX/ptx, use the local
 *  function 'getrnge' in <regexp.h> before they declare it.  For these
 *  systems add a 'static int' declaration of 'getrnge' into <regexp.h>
 *  early on.
 *
 *  'getrnge' traditionally manipulates a file-scope global called 'size',
 *  so put the declaration right after the declaration of 'size'.
 *
 *  Don't do this if there is already a `static void getrnge' declaration
 *  present, since this would cause a redeclaration error.  Solaris 2.x has
 *  such a declaration.
 */
fix = {
    hackname  = svr4_undeclared_getrnge;
    files     = regexp.h;
    select    = "getrnge";
    bypass    = "static void getrnge";
    c_fix     = format;
    c_fix_arg = "%0\n"
                "static int getrnge ();";
    c_fix_arg = "^static int[ \t]+size;";
    test_text = "static int size;\n"
                "/* stuff which calls getrnge() */\n"
                "static getrnge()\n"
                "{}";
};

/*
 *  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.
 *  Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
 *  Add missing const for strdup on OSF/1 V3.0.
 *  On sysV88 layout is slightly different.
 */
fix = {
    hackname = sysv68_string;
    files    = testing.h;
    files    = string.h;
    bypass   = "_CLASSIC_ANSI_TYPES";

    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 = "/^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();";
};

/*
 *  Fix return type of calloc, malloc, realloc, bsearch and exit
 */
fix = {
    hackname = sysz_stdlib_for_sun;
    files    = stdlib.h;
    bypass   = "_CLASSIC_ANSI_TYPES";

    select    = "char[ \t]*\\*[ \t]*(calloc|malloc|realloc|bsearch)[ \t]*\\(";
    c_fix     = format;
    c_fix_arg = "void *\t%1(";

    test_text =
    "extern char*\tcalloc(size_t);\n"
    "extern char*\tmalloc(size_t);\n"
    "extern char*\trealloc(void*,size_t);\n"
    "extern char*\tbsearch(void*,size_t,size_t);\n";
};

/*
 * __thread is now a keyword.
 */
fix = {
    hackname  = thread_keyword;
    files     = "pthread.h";
    files     = bits/sigthread.h, '*/bits/sigthread.h';
    select    = "([* ])__thread([,)])";
    c_fix     = format;
    c_fix_arg = "%1__thr%2";

    test_text =
	"extern int pthread_create (pthread_t *__restrict __thread,\n"
	"extern int pthread_kill (pthread_t __thread, int __signo);\n"
	"extern int pthread_cancel (pthread_t __thread);";
};

/*
 *  if the #if says _cplusplus, not the double underscore __cplusplus
 *  that it should be
 */
fix = {
    hackname = tinfo_cplusplus;
    files    = tinfo.h;
    select   = "[ \t]_cplusplus";

    c_fix     = format;
    c_fix_arg = " __cplusplus";
    test_text = "#ifdef _cplusplus\nint bogus;\n#endif";
};

/*
 *  parameters not const on DECstation Ultrix V4.0 and OSF/1.
 */
fix = {
    hackname  = ultrix_const;
    files     = stdio.h;
    select    = 'perror\( char \*';

    c_fix     = format;
    c_fix_arg = "%1 const %3 *__";
    c_fix_arg = "([ \t*](perror|fputs|fwrite|scanf|fscanf)\\(.*)"
                "[ \t]+(char|void) \\*__";

    test_text =
    "extern void perror( char *__s );\n"
    "extern int fputs( char *__s, FILE *);\n"
    "extern size_t fwrite( void *__ptr, size_t, size_t, FILE *);\n"
    "extern int fscanf( FILE *__stream, char *__format, ...);\n"
    "extern int scanf( char *__format, ...);\n";
};

/*
 *  parameters not const on DECstation Ultrix V4.0 and OSF/1.
 */
fix = {
    hackname  = ultrix_const2;
    files     = stdio.h;

    select    = '\*fopen\( char \*';
    c_fix     = format;
    c_fix_arg = "%1( const char *%3, const char *";
    c_fix_arg = "([ \t*](fopen|sscanf|popen|tempnam))\\("
               "[ \t]*char[ \t]*\\*([^,]*),"
               "[ \t]*char[ \t]*\\*[ \t]*";

    test_text =
    "extern FILE *fopen( char *__filename, char *__type );\n"
    "extern int sscanf( char *__s, char *__format, ...);\n"
    "extern FILE *popen(char *, char *);\n"
    "extern char *tempnam(char*,char*);\n";
};

/*
 *  Fix definitions of macros used by va-i960.h in VxWorks header file.
 */
fix = {
    hackname  = va_i960_macro;
    files     = arch/i960/archI960.h;
    select    = "__(vsiz|vali|vpad|alignof__)";

    c_fix     = format;
    c_fix_arg = "__vx%1";

    test_text =
    "extern int __vsiz vsiz;\n"
    "extern int __vali vali;\n"
    "extern int __vpad vpad;\n"
    "#define __alignof__(x) ...";
};

/*
 * On VMS, add missing braces around sigset_t constants.
 */
fix = {
    hackname  = vms_add_missing_braces;
    select    = "(_SIG_[A-Z]+_SET[ \t]+= \\{)(0x[0F]+, 0x[0F]+)";
    mach      = "*-*-*vms*";
    files     = "rtldef/signal.h";
    c_fix     = format;

    c_fix_arg = '%1 {%2} ';

    test_text = "static const __sigset_t _SIG_EMPTY_SET  = "
                "{0x00000000, 0x00000000},\n"
                " _SIG_FULL_SET   = {0xFFFFFFFF, 0xFFFFFFFF};\n";
};

/*
 * On VMS, some DEC-C builtins are directly used.
 */
fix = {
    hackname  = vms_decc_builtin;
    select    = "(__MEMSET|__MEMMOVE|__MEMCPY|__STRLEN|__STRCPY)";
    mach      = "*-*-*vms*";
    files     = rtldef/string.h, rtldef/time.h, rtldef/strings.h,
                rtldef/socket.h;
    sed       = "s@__MEMSET@memset@";
    sed       = "s@__MEMMOVE@memmove@";
    sed       = "s@__MEMCPY@memcpy@";
    sed       = "s@__STRLEN@strlen@";
    sed       = "s@__STRCPY@strcpy@";

    test_text = "define FD_ZERO(__p) __MEMSET((__p), 0, sizeof(*(__p)))\n";
};

/*
 *  Define __CAN_USE_EXTERN_PREFIX on vms.
 */
fix = {
    hackname  = vms_define_can_use_extern_prefix;
    files     = "rtldef/decc$types.h";
    select    = "#[ \t]*else\n"
		"#[ \t]*if defined\\(__DECCXX\\)\n"
		"#[ \t]*define __CAN_USE_EXTERN_PREFIX 1\n";
    mach      = "*-*-*vms*";
    c_fix     = format;

    c_fix_arg = "%0"
		"#    elif defined (__GNUC__)\n"
		"#\tdefine __CAN_USE_EXTERN_PREFIX 1\n";

    test_text = "# else\n"
		"#    if defined(__DECCXX)\n"
		"#\tdefine __CAN_USE_EXTERN_PREFIX 1\n"
		"#    endif\n"
		"# endif\n";
};

/*
 * On VMS, disable the use of dec-c string builtins
 */
fix = {
    hackname  = vms_disable_decc_string_builtins;
    select    = "#if !defined\\(__VAX\\)\n";
    mach      = "*-*-*vms*";
    files     = "rtldef/string.h";
    c_fix     = format;

    c_fix_arg = "#if !defined(__VAX) && !defined(__GNUC__)\n";

    test_text = "#if !defined(__VAX)\n";
};

/*
 * On VMS, fix incompatible redeclaration of hostalias.
 */
fix = {
    hackname  = vms_do_not_redeclare_hostalias;
    select    = "(void[ \t]+fp_nquery \\(const u_char \\*, int, FILE \\*\\);)\n"
                "(__char_ptr32[ \t]+hostalias \\(const char \\*\\);)";
    mach      = "*-*-*vms*";
    files     = "rtldef/resolv.h";
    c_fix     = format;

    c_fix_arg = "%1\n"
                "/* %2 */";

    test_text = "void		fp_nquery (const u_char *, int, FILE *);\n"
                "__char_ptr32	hostalias (const char *);\n";
};

/*
 * On VMS, forward declare structure before referencing them in prototypes.
 */
fix = {
    hackname  = vms_forward_declare_struct;
    select    = "(/\\* forward decls for C\\+\\+ \\*/\n)"
                "#ifdef __cplusplus\n";
    mach      = "*-*-*vms*";
    files     = rtldef/if.h;
    c_fix     = format;

    c_fix_arg = "%1"
                "#if defined (__cplusplus) || defined (__GNUC__)\n";

    test_text = "/* forward decls for C++ */\n"
                "#ifdef __cplusplus\n"
                "struct foo;\n"
                "#endif\n";
};

/*
 * On VMS, do not declare getopt and al if pointers are 64 bit.
 */
fix = {
    hackname  = vms_no_64bit_getopt;
    select    = "^[ \t]*(extern[ \t]*)?(int[ \t]*(getopt|optind|opterr|optopt)"
                "|(char \\*optarg))([ \t]*\\(.*\\))?;\n";
    mach      = "*-*-*vms*";
    files     = rtldef/stdio.h, rtldef/unistd.h;
    c_fix     = format;

    c_fix_arg = <<- _EOArg_
	#if __INITIAL_POINTER_SIZE != 64 /* getopt is short ptr only.  */
	%0#endif

	_EOArg_;

    test_text = "int getopt (int, char * const [], const char *);";
};

/*
 * On VMS, force the use of fast setjmp, as the normal setjmp uses conditions
 * which is not yet fully supported by gcc.
 */
fix = {
    hackname  = vms_use_fast_setjmp;
    select    = "(#[ \t]*if[ \t]*defined\\(__FAST_SETJMP\\)[ \t]*\\|\\|)";
    mach      = "*-*-*vms*";
    files     = rtldef/setjmp.h;
    c_fix     = format;

    c_fix_arg = "%0 defined (__GNUC__) ||";

    test_text = "#   if defined(__FAST_SETJMP) || defined(__UNIX_SETJMP)";
};

/*
 * On VMS, use pragma extern_model instead of VAX-C keywords.
 */
fix = {
    hackname  = vms_use_pragma_extern_model;
    select    = "#if defined\\(__DECC\\) \\|\\| defined\\(__DECCXX\\)\n"
		"# pragma extern_model __save\n";
    mach      = "*-*-*vms*";
    c_fix     = format;

    c_fix_arg = "#if defined(__DECC) || defined(__DECCXX) || defined(__GNUC__)\n"
		"# pragma extern_model __save\n";

    test_text = "#if defined(__DECC) || defined(__DECCXX)\n"
		"# pragma extern_model __save\n"
		"# pragma extern_model strict_refdef\n"
		"   extern struct x zz$yy;\n"
		"# pragma extern_model __restore\n"
		"#endif\n";
};

/*
 * On VMS, change <resource.h> to <sys/resource.h> to avoid a
 * conflict while building gcc.  Likewise for <builtins.h>
 */
fix = {
    hackname  = vms_use_quoted_include;
    select    = "(#[ \t]*include[ \t]+)<(resource|builtins)\\.h>";
    mach      = "*-*-*vms*";
    files     = rtldef/wait.h, starlet_c/pthread.h;
    c_fix     = format;

    c_fix_arg = '%1<sys/%2.h>';

    test_text = "#   include <resource.h>";
};

/*
 *  AIX and Interix headers define NULL to be cast to a void pointer,
 *  which is illegal in ANSI C++.
 */
fix = {
    hackname  = void_null;
    files     = curses.h, dbm.h, locale.h, stdio.h, stdlib.h, string.h,
    time.h, unistd.h, sys/dir.h, sys/param.h, sys/types.h;
    /* avoid changing C++ friendly NULL */
    bypass    = __cplusplus;
    bypass    = __null;
    select    = "^#[ \t]*define[ \t]+NULL[ \t]+\\(\\(void[ \t]*\\*\\)0\\)";
    c_fix     = format;
    c_fix_arg = <<- _EOFix_
	#ifndef NULL
	#ifdef __cplusplus
	#ifdef __GNUG__
	#define NULL __null
	#else /* ! __GNUG__  */
	#define NULL 0L
	#endif /* __GNUG__  */
	#else /* ! __cplusplus  */
	#define NULL ((void *)0)
	#endif /* __cplusplus  */
	#endif /* !NULL  */
	_EOFix_;
    test_text = "# define\tNULL \t((void *)0)  /* typed NULL */";
};

/*
 *  Make VxWorks header which is almost gcc ready fully gcc ready.
 */
fix = {
    hackname = vxworks_gcc_problem;
    files    = types/vxTypesBase.h;
    select   = "__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";

    sed = "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/"
          "#if 1/";

    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 =
    "#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__\n"
    "typedef unsigned int size_t;\n"
    "typedef long ptrdiff_t;\n"
    "typedef unsigned short wchar_t;\n"
    "#endif /* __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__ */\n";
};

/*
 *  Wrap VxWorks ioctl to keep everything pretty
 */
fix = {
    hackname    = vxworks_ioctl_macro;
    files       = ioLib.h;
    mach        = "*-*-vxworks*";

    c_fix       = format;
    c_fix_arg   = "%0\n"
        "#define ioctl(fd, func, arg) ioctl(fd, func, (int)(arg))\n";
    c_fix_arg   = "extern[\t ]+int[\t ]+ioctl[\t ]*\\([\t ,[:alnum:]]*\\);";
        
    test_text   = "extern int ioctl ( int asdf1234, int jkl , int qwerty ) ;";
};
 
/*
 * Provide C99 FP classification support in VxWorks math.h if
 * not already there. Note the strict expectation on #define without
 * whitespaces in the bypass expression, which "works" for
 * the system headers we have met and doesn't match test texts for
 * other hacks, found in the test baseline.
 */
fix = {
    hackname  = vxworks_math_h_fp_c99;
    mach      = "*-*-vxworks*";
    files     = math.h;
    bypass    = "#define[ \t]+FP_INFINITE";
    select    = "#define HUGE_VAL[ \t]*_ARCH.*";
    c_fix     = format;
    c_fix_arg = << _EOArg_

%0

#if _C99

#define FP_INFINITE  1
#define FP_NAN       2
#define FP_NORMAL    (-1)
#define FP_SUBNORMAL (-2)
#define FP_ZERO      0

#define fpclassify(x) \
  __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, \
		       FP_SUBNORMAL, FP_ZERO, (x))

#define signbit(x) __builtin_signbit(x)
#define isfinite(x) __builtin_isfinite(x)
#define isnormal(x) __builtin_isnormal(x)
#define isnan(x) __builtin_isnan(x)
#define isinf(x) __builtin_isinf(x)

#define isgreater(x, y) __builtin_isgreater((x),(y))
#define isgreaterequal(x, y) __builtin_isgreaterequal((x),(y))
#define isless(x, y) __builtin_isless((x),(y))
#define islessequal(x, y) __builtin_islessequal((x),(y))
#define islessgreater(x, y) __builtin_islessgreater((x),(y))
#define isunordered(x, y) __builtin_isunordered((x),(y))

#endif /* _C99 */

_EOArg_;

    test_text  = "#define HUGE_VAL _ARCH_HUGH_VAL";
};

/*
 *  mkdir's posix interface expects two arguments.  While the RTP VxWorks
 *  API is fine, the kernel version handles only one.  We used to expose
 *  a macro and this didn't play nice with uses such as posix:mkdir(x, y)
 *  in libstdc++, so we expose a vararg prototype instead.
 */
fix = {
    hackname    = vxworks_posix_mkdir;
    files       = sys/stat.h;
    mach        = "*-*-vxworks*";

    c_fix       = format;
    c_fix_arg   = "extern STATUS mkdir(const char *dir, ...);";
    c_fix_arg   = "extern[\t ]+STATUS[\t ]+mkdir[\t ]*"
                "\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*" /* arg type */
                "(|[_[:alpha:]][_[:alnum:]]*)" /* arg name (optional) */
                "\\)[\t ]*;";

    test_text   = "extern STATUS mkdir (const char * _qwerty) ;";
};

/*
 *  Fix VxWorks <time.h> to not require including <vxTypes.h>.
 */
fix = {
    hackname  = vxworks_needs_vxtypes;
    files     = time.h;
    select    = "uint_t([ \t]+_clocks_per_sec)";
    c_fix     = format;
    c_fix_arg = "unsigned int%1";
    test_text = "uint_t\t_clocks_per_sec;";
};

/*
 *  Fix VxWorks <sys/stat.h> to not require including <vxWorks.h>.
 */
fix = {
    hackname = vxworks_needs_vxworks;
    files    = sys/stat.h;
    test     = " -r types/vxTypesOld.h";
    test     = " -n \"`egrep '#include' $file`\"";
    test     = " -n \"`egrep ULONG $file`\"";
    select   = "#[ \t]define[ \t]+__INCstath";

    sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
          "#include <types/vxTypesOld.h>\n";

    test_text = "`touch types/vxTypesOld.h`"
    "#include </dev/null> /* ULONG */\n"
    "# define\t__INCstath <sys/stat.h>";
};

/*
 * yvals.h on VxWorks-6 expects the toolchain to provide its own
 * version of the header, which we don't do.  Arrange to fallback
 * on the system definition.
 */
fix = {
    hackname  = vxworks_next_yvals;
    mach      = "*-*-vxworks*";
    files     = yvals.h;
    select    = "#include_next <yvals.h>";
    c_fix     = format;
    c_fix_arg = "#if 0 /* GCC does not provide yvals.h.  */\n%1";
    c_fix_arg = "#if .*\n"
                "/\\* .*\n"
                "(#include_next <yvals.h>\n)";

    test_text = "#if (defined(__cplusplus) && defined(__GNUC__))\n"
                "/* GCC C++ has it's own yvals.h */\n"
                "#include_next <yvals.h>\n"
                "#else\n";
};

/*
 *  Make it so VxWorks does not include gcc/regs.h accidentally
 */
fix = {
    hackname    = vxworks_regs;
    mach        = "*-*-vxworks*";

    select      = "#[\t ]*include[\t ]+[<\"]regs.h[>\"]";
    c_fix       = format;
    c_fix_arg   = "#include <arch/../regs.h>";
        
    test_text   = "#include <regs.h>\n";
};

/*
 * Likewise, open's posix interface allows two or three arguments and
 * some VxWorks headers expose only a strict 3 arguments version.  Merely
 * changing the prototype into a varargs one is risky as the implementation
 * would receive garbage in the third arg for calls providing only two,
 * which libstdc++ does.  We simply provide an always inline overload for C++
 * instead.
 *
 * Both fcntl.h and ioLib.h might "feature" such a prototype for _WRS_KERNEL.
 * The latter #includes the former though (since 1992 according to the embedded
 * log), so just leave ioLib.h alone.
 */
fix = {
    hackname    = vxworks_posix_open;
    mach        = "*-*-vxworks*";
    files       = fcntl.h;

    select      = "extern int.*open \\(const char \\*[ a-z]*, int[ a-z]*, int[ a-z]*\\);";
    c_fix       = format;
    c_fix_arg = << _EOArg_
%0

#if defined(__cplusplus)
extern "C++" {
  inline int open (const char *, int) __attribute__((__always_inline__));

  inline int
  open (const char *name, int flags)
  {
    return open (name, flags, 0);
  }
}
#endif

_EOArg_;

    test_text   =
      "extern int open (const char *, int, int);\n"
      "extern int open (const char *name, int flags, int mode );\n";
};

/*
 *  Another bad dependency in VxWorks 5.2 <time.h>.
 */
fix = {
    hackname = vxworks_time;
    files    = time.h;
    test     = " -r vxWorks.h";

    select    = "#[ \t]*define[ \t]+VOIDFUNCPTR[ \t].*";
    c_fix     = format;

    c_fix_arg =
    "#ifndef __gcc_VOIDFUNCPTR_defined\n"
    "#ifdef __cplusplus\n"
    "typedef void (*__gcc_VOIDFUNCPTR) (...);\n"
    "#else\n"
    "typedef void (*__gcc_VOIDFUNCPTR) ();\n"
    "#endif\n"
    "#define __gcc_VOIDFUNCPTR_defined\n"
    "#endif\n"
    "#define VOIDFUNCPTR __gcc_VOIDFUNCPTR";

    test_text = "`touch vxWorks.h`"
                "#define VOIDFUNCPTR (void(*)())";
};

/*
 *  This hack makes write const-correct on VxWorks
 */
fix = {
    hackname    = vxworks_write_const;
    files       = ioLib.h;
    mach        = "*-*-vxworks*";

    c_fix       = format;
    c_fix_arg   = "extern int  write (int, const char*, size_t);";
    c_fix_arg   = "extern[\t ]+int[\t ]+write[\t ]*\\("
                "[\t ]*int[\t ]*,"
                "[\t ]*char[\t ]*\\*[\t ]*,"
                "[\t ]*size_t[\t ]*\\)[\t ]*;";

    test_text       = "extern int write ( int , char * , size_t ) ;";
};

/*
 *  This hack ensures the include_next in the fixed unistd.h actually
 *  finds the system's unistd.h and not the fixed unistd.h again.
 */
fix = {
    hackname    = vxworks_iolib_include_unistd;
    files       = ioLib.h;
    mach        = "*-*-vxworks*";
    select      = "#include \"unistd.h\"";

    c_fix       = format;
    c_fix_arg   = "#include <unistd.h>";

    test_text       = "#include \"unistd.h\"";
};

/*
 *  Make sure there is a visible prototype of sysClkRateGet() when
 *  CLOCKS_PER_SEC is #defined to that in time.h for VxWorks.  This would
 *  typically be provided by sysLib.h.
 *
 *  The new #include has to come after the one for vxWorks.h in kernel headers
 *  and vxWorks.h is typically not #included in RTP headers. yvals.h is
 *  conditionally included in the latter, instead, and new #include are better
 *  inserted after that.
 */
fix = {
    hackname    = vxworks_time_h_syslib;
    files       = time.h;
    mach        = "*-*-vxworks*";
    select      = "[ \t]*#define[ \t]+CLOCKS_PER_SEC[ \t]+sysClkRateGet.*";

    c_fix       = format;
    c_fix_arg   = "%0\n#include <sysLib.h>";
    c_fix_arg   = "#include <vxWorks.h>|#endif.* _YVALS.*";

    test_text   =
    "/* kernel header pattern:  */\n"
    "#include <vxWorks.h>\n"
    "\n"
    "/* rtp header pattern:  */\n"
    "#ifndef _YVALS\n"
    "#include <yvals.h>\n"
    "#endif /* _YVALS */\n"
    "\n"
    "#define CLOCKS_PER_SEC  sysClkRateGet()";
};

/*
 *  There are several name conflicts with C++ reserved words in X11 header
 *  files.  These are fixed in some versions, so don't do the fixes if
 *  we find __cplusplus in the file.  These were found on the RS/6000.
 */
fix = {
    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"
    "} mumble;\n";
};

/*
 *  class in Xm/BaseClassI.h
 */
fix = {
    hackname = x11_class_usage;
    files    = Xm/BaseClassI.h;
    bypass   = "__cplusplus";

    select    = " class\\)";
    c_fix     = format;
    c_fix_arg = " c_class)";

    test_text = "extern mumble (int  class);\n";
};

/*
 *  new in Xm/Traversal.h
 */
fix = {
    hackname = x11_new;
    files    = Xm/Traversal.h;
    bypass   = __cplusplus;

    sed      = "/Widget\told, new;/i\\\n"
                   "#ifdef __cplusplus\\\n"
                   "\\\tWidget\told, c_new;\\\n"
                   "#else\n";

    sed      = "/Widget\told, new;/a\\\n"
                   "#endif\n";

    sed      = "s/Widget new,/Widget c_new,/g";
    test_text =
    "struct wedge {\n"
    "   Widget\told, new;\n"
    "};\nextern Wedged( Widget new, Widget old );";
};

/*
 *  Incorrect sprintf declaration in X11/Xmu.h
 */
fix = {
    hackname = x11_sprintf;
    files    = X11/Xmu.h;
    files    = X11/Xmu/Xmu.h;
    select   = "^extern char \\*\tsprintf\\(\\);$";

    c_fix     = format;
    c_fix_arg = "#ifndef __STDC__\n%0\n#endif /* !defined __STDC__ */";

    test_text = "extern char *\tsprintf();";
};
/*EOF*/
