/*
- * Determine if we're on Interactive Unix 2.2 or later, in which case we
- * need to fix some additional files. This is the same test for ISC that
- * Autoconf uses. On Interactive 2.2, certain traditional Unix
- * definitions (notably getc and putc in stdio.h) are omitted if __STDC__
- * is defined, not just if _POSIX_SOURCE is defined. This makes it
- * impossible to compile any nontrivial program except with -posix.
+ * Remove erroneous parentheses in sym.h on Alpha OSF/1.
*/
fix = {
hackname = alpha_parens;
/*
* 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;
};
-/*
- * 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 = bad_malloc_decl;
- files = rpc/types.h;
- bypass = '"C"';
- sed = "1i\\\n"
- "#ifdef __cplusplus\\\n"
- "extern \"C\" {\\\n"
- "#endif\\\n\n";
- sed = "$a\\\n"
- "#ifdef __cplusplus\\\n"
- "}\\\n"
- "#endif\n";
-};
-
-
/*
* Fix `typedef struct term;' on hppa1.1-hp-hpux9.
*/
sed = "/#[ \t]*define[ \t]*[ \t]BSD43__IO/" 's/\'\([cgx]\)\'/\1/g';
};
-#IFDEF no_more
+
+/*
+ * 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";
+};
+
+
+#ifdef no_more
/*
* And also with the HP-UX 10 and HP-UX 11 sys/pci.h file
*/
/*
* Remove the double-slash comments
* They *must* be removed so it will not create nested comments!!
- * However, they will *not* be removed if '++' is in any part of
- * the file name, or if the name ends with ".hh" or ".H".
+ * However, they will *not* be removed if the file name ends with
+ * any of "++", ".hh" or ".H", or if the file name contains "cxx/".
*
* There *used* to be a number of similar problems in various OSes:
* There is a similar problem with the VxWorks drv/netif/if_med.h file.
* And also with the HP-UX 10 and HP-UX 11 sys/pci.h file
- */
-fix = {
- hackname = no_double_slash;
- test = '-z "`echo ${file}|egrep \'++$|\.hh$|\.H$\'`"';
- select = '//[^*]';
- sed = '/\/\/[^*]/' "s|//.*$||g";
-};
+ * Now that we delete the // comments instead of converting them to / * * /,
+ * traditional hacks like irix_bogus_cxx_cmnt, no longer work (which
+ * strangely enough was also used on alpha-dec-osf4.0d). If we skip the
+ * hack whenever we see ``"//"'', then the need for the secondary hack
+ * disappears. Note: it is painful to ensure that the first quote
+ * exists, so we just check for the trailing quote directly abutting
+ * the //. Note: We should never touch a line that has // completely
+ * within quotes but this is somewhat hard to check for.
-/*
- * Multiline comment after typedef on IRIX 4.0.1.
+ * Ultimately, this fix ought to go inside of C code where
+ * we can do a better analysis on the need and method for fixing.
*/
fix = {
- hackname = irix_bogus_cxx_cmnt;
- files = "elf_abi.h";
- files = "elf.h";
+ hackname = no_double_slash;
/*
- * This really looks like it is replacing "/ * * /" with "//"
- * Shouldn't the replacement really be " ## "?
+ * Test that the file-to-fix does not look like a C++ file
*/
- sed = 's@"/\*"\*/@"//"@';
+ test = '-z "`echo ${file}|egrep \'cxx/|++$|\.hh$|\.H$\'`"';
+ select = '//[^"*]';
+ sed = '/\/\/[^"*]/' "s|//.*$||g";
};
/*
* 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 = hpux_cxx_unready;
+ hackname = cxx_unready;
files = sys/mman.h;
+ files = rpc/types.h;
bypass = '"C"|__BEGIN_DECLS';
sed = "1i\\\n"
/*
- * Fix various _IO* defines, but do *not* quote the characters cgxtf.
+ * Determine if we're on Interactive Unix 2.2 or later, in which case we
+ * need to fix some additional files. This is the same test for ISC that
+ * Autoconf uses. On Interactive 2.2, certain traditional Unix
+ * definitions (notably getc and putc in stdio.h) are omitted if __STDC__
+ * is defined, not just if _POSIX_SOURCE is defined. This makes it
+ * impossible to compile any nontrivial program except with -posix.
*/
fix = {
hackname = interactv_add1;
- test = "-d /etc/conf/kconfig.d";
- test = '-n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
+ test = " -d /etc/conf/kconfig.d";
+ test = ' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
files = "stdio.h";
files = "math.h";
fix = {
hackname = interactv_add2;
- test = "-d /etc/conf/kconfig.d";
- test = '-n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
+ test = " -d /etc/conf/kconfig.d";
+ test = ' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
files = math.h;
sed = "s/fmod(double)/fmod(double, double)/";
fix = {
hackname = interactv_add3;
- test = "-d /etc/conf/kconfig.d";
- test = '-n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
+ test = " -d /etc/conf/kconfig.d";
+ test = ' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
files = sys/limits.h;
/*
- * Remove erroneous parentheses in sym.h on Alpha OSF/1.
+ * Fix various _IO* defines, but do *not* quote the characters cgxtf.
*/
fix = {
hackname = io_def_quotes;
- select = "[ \t]_IO[A-Z]*[ \t]*\\([A-Za-z]";
- sed = "s/\\([ \t]_IO[A-Z]*[ \t]*(\\)\\([A-Za-z]\\),/\\1'\\2',/";
- sed = "/#[ \t]*define[ \t]*[ \t]_IO/"
- "s/'\\([cgxtf]\\)'/\\1/g";
+ select = "[ \t](_|DES)IO[A-Z]*[ \t]*\\( *[^,']";
+ sed = "s/\\([ \t](_|DES)IO[A-Z]*[ \t]*(\\)\\([^,']\\),/\\1'\\2',/";
+ sed = "/#[ \t]*define[ \t]*[ \t]_IO/" "s/'\\([cgxtf]\\)'/\\1/g";
sed = "/#[ \t]*define[ \t]*[ \t]DESIOC/" 's/\'\([cdgx]\)\'/\1/g';
};
*/
fix = {
hackname = motorola_nested;
+ mach = "m68k-motorola-sysv*";
files = limits.h;
files = sys/limits.h;
sed = "s@^\\(#undef[ \t][ \t]*PIPE_BUF[ \t]*"
files = "Xm.acorn/XmP.h";
files = bsd43/bsd43_.h;
select = '/\*\*/';
- sed = 's|/\*\*/| ## |g';
+ sed = 's|/\*\*/|##|g';
};
fix = {
hackname = lynxos_fcntl_proto;
files = fcntl.h;
-
- sed = 's/\(fcntl.*(int, int, \)int)/\1...)/';
+ select = 'fcntl.*\(int, int, int\)';
+ sed = 's/\(fcntl.*(int, int, \)int)/\1...)/';
};
/*
- * Fix incorrect S_IF* definitions on m88k-sysv3.
+ * libm.a on m88k-motorola-sysv3 contains a stupid optimization for
+ * function hypot(), which returns the second argument without even
+ * looking at its value, if the other is 0.0. Another drawback is
+ * that fix-header doesn't fix fabs' prototype, and I have no idea why.
*/
fix = {
hackname = m88k_bad_hypot_opt;
/*
- * Fix non-ansi machine name defines
- * This is split into two parts: the shell version as a single
- * patch, and the program version with each patch separate.
- * Each is substantially faster for the particular environment.
- * You have a dual maintenance problem here. */
+ * Fix incorrect S_IF* definitions on m88k-sysv3.
+ */
fix = {
hackname = m88k_bad_s_if;
mach = "m88k-*-sysv3*";
shell =
"echo Fixing $file, to protect against multiple inclusion. >&2
cpp_wrapper=`echo $file | sed -e 's,\\.,_,g' -e 's,/,_,g'`
- sed -e \"1i\\\n"
- "#ifndef __GCC_GOT_${cpp_wrapper}_\\\n"
- "#define __GCC_GOT_${cpp_wrapper}_\\\n\" \\\n"
- "\t-e \"$a\\\n"
- "#endif /* ! __GCC_GOT_${cpp_wrapper}_ */\n\"";
+ echo \"#ifndef __GCC_GOT_${cpp_wrapper}_\"
+ echo \"#define __GCC_GOT_${cpp_wrapper}_\"
+ cat
+ echo \"#endif /* ! __GCC_GOT_${cpp_wrapper}_ */\"";
};
/*
- * libm.a on m88k-motorola-sysv3 contains a stupid optimization for
- * function hypot(), which returns the second argument without even
- * looking at its value if the other is 0.0 Another drawback is that
- * fix-header doesn't fix fabs' prototype, and I have no idea why.
+ * Fix non-ansi machine name defines
+ * This is split into two parts: the shell version as a single
+ * patch, and the program version with each patch separate.
+ * Each is substantially faster for the particular environment.
+ * You have a dual maintenance problem here.
*/
fix = {
hackname = machine_name;
fix = {
hackname = math_gcc_ifndefs;
files = math.h;
- shell = " dbl_max_def="
- "\"`egrep 'define[ \t]+DBL_MAX[ \t]+.*' ${SRCDIR}/float.h "
- "2>/dev/null`\"\n\n"
- "\tif ( test -n \"${dbl_max_def}\" \\\n"
- "\t\t-a -n \"`egrep '#define[ \t]*HUGE_VAL[ \t]+DBL_MAX' $file`\" \\\n"
- "\t\t-a -z \"`egrep '#define[ \t]+DBL_MAX[ \t]+' $file`\"\n"
- "\t ) > /dev/null 2>&1\n"
+ shell =
+ /*
+ * First 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.
+ */
- "\tthen sed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n"
- "#ifndef HUGE_VAL\n' \\\n"
- "\t-e '/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n'\\\n"
- "\t-e \"/define[ \t]HUGE_VAL[ \t]DBL_MAX/s/DBL_MAX/$dbl_max_def/\"\n"
+ /*
+ * IF we have such a define *and* HUGE_VAL is defined to be DBL_MAX
+ * *and* DBL_MAX is _not_ defined in the current file (math.h),
+ * THEN replace the defined value of HUGE_VAL
+ * ELSE just copy stdin to stdout so the main filter can process it
+ */
- "\telse sed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n"
- "#ifndef HUGE_VAL\n' \\\n"
- "\t-e '/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n'\n"
- "\tfi";
-};
+ /*
+ * Put conditional guards around the HUGE_VAL definition.
+ */
+ "\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h "
+ "2>/dev/null`\n\n"
-/*
- * libm.a on m88k-motorola-sysv3 contains a stupid optimization for
- * function hypot(), which returns the second argument without even
- * looking at its value
- */
-fix = {
- hackname = motorola_stupid_opt;
- mach = "m88k-motorola-sysv3*";
- files = math.h;
- select = "^extern double hypot();$";
- sed =
- '/^extern double hypot();$/a' "\\\n"
- '\/* Workaround a stupid Motorola optimization if one' "\\\n"
- ' of x or y is 0.0 and the other is negative! *\/' "\\\n"
- '#ifdef __STDC__' "\\\n"
- 'static __inline__ double fake_hypot (double x, double y)' "\\\n"
- '#else' "\\\n"
- 'static __inline__ double fake_hypot (x, y)' "\\\n"
- "\tdouble x, y;\\\n"
- '#endif' "\\\n"
- '{' "\\\n"
- "\treturn fabs (hypot (x, y));\\\n"
- '}' "\\\n"
- "#define hypot\tfake_hypot\n";
+ "\tif ( test -n \"${dbl_max_def}\" \\\n"
+ "\t\t-a -n \"`egrep '#define[ \t]*HUGE_VAL[ \t]+DBL_MAX' $file`\" \\\n"
+ "\t\t-a -z \"`egrep '#define[ \t]+DBL_MAX[ \t]+' $file`\"\n"
+ "\t ) > /dev/null 2>&1\n"
+ "\tthen sed -e '/define[ \t]HUGE_VAL[ \t]DBL_MAX/s/DBL_MAX/$dbl_max_def/'"
+ "\n\telse cat ; fi |\n"
+
+ "\tsed -e'/define[ \t]HUGE_VAL[ \t]/i\\\n#ifndef HUGE_VAL\n' "
+ "-e'/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n'";
};
hackname = osf_namespace_a;
files = reg_types.h;
files = sys/lc_core.h;
- test = "-r reg_types.h"
- "-a -r sys/lc_core.h"
- "-a -n \"`grep '} regex_t;' reg_types.h`\""
- "-a -z \"`grep __regex_t 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`\"";
sed = "s/regex_t/__regex_t/g";
sed = "s/regoff_t/__regoff_t/g";
fix = {
hackname = osf_namespace_b;
files = regex.h;
- test = "-r reg_types.h"
- "-a -r sys/lc_core.h"
- "-a -n \"`grep '} regex_t;' reg_types.h`\""
- "-a -z \"`grep __regex_t 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`\"";
+
sed = "/#include <reg_types.h>/a\\\n"
"typedef __regex_t\tregex_t;\\\n"
"typedef __regoff_t\tregoff_t;\\\n"
fix = {
hackname = sony_ctype;
files = ctype.h;
- test = "-x /bin/sony";
- test = "! -z \"`if /bin/sony ; then echo true ; fi`\"";
+ test = " -x /bin/sony";
+ test = " ! -z \"`if /bin/sony ; then echo true ; fi`\"";
sed = "s/__ctype/_ctype/g";
};
#endif
fix = {
hackname = sony_stdio;
files = stdio.h;
- test = "-x /bin/sony";
- test = "! -z \"`if /bin/sony ; then echo true ; fi`\"";
+ test = " -x /bin/sony";
+ test = " ! -z \"`if /bin/sony ; then echo true ; fi`\"";
sed = "s/__filbuf/_filbuf/g\n"
"s/__flsbuf/_flsbuf/g\n"
"s/__iob/_iob/g";
};
-/*
- * This file on SunOS 4 has a very large macro. When the sed loop
- * tries pull it in, it overflows the pattern space size of the SunOS
- * sed (GNU sed does not have this problem). Since the file does not
- * require fixing, we remove it from the fixed directory.
- */
-fix = {
- hackname = sunos_large_macro;
- files = sundev/ipi_error.h;
- shell =
- "echo \"Removing incorrect fix to SunOS <sundev/ipi_error.h>\" >&2\n"
- "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
-};
-
-
/*
* math.h on SunOS 4 puts the declaration of matherr before the definition
* of struct exception, so the prototype (added by fixproto) causes havoc.
hackname = sunos_matherr_decl;
files = math.h;
/*
- * Find the first occurrance of 'struct exception'.
- * If it is the definition, then the file is okay.
- * If it is a usage, then the order is wrong and we
- * must insert a forward reference.
+ * Once a declaration for 'struct exception' is found,
+ * stop trying to insert a forward reference for it.
*/
- test = "\"`fgrep 'struct exception' $file | line`\""
- " != 'struct exception {'";
-
+ sed = "/^struct exception/,$b";
sed = "/matherr/i\\\nstruct exception;\n";
};
/*
- * Replace definitions of size_t, ptrdiff_t and wchar_t
- * Install the proper definition of the three standard types
- * in header files that they come from.
+ * Fix return type of exit and abort in <stdlib.h> on SunOS 4.1.
+ * Also wrap protection around size_t for m88k-sysv3 systems.
*/
fix = {
hackname = sysz_stdlib_for_sun;
- mach = "*-sun-*";
- mach = "m88k-*-sysv3*";
+ mach = "*-sun*";
+ mach = "m88k-*sysv3*";
files = stdlib.h;
sed = "s/int\tabort/void\tabort/g";
fix = {
hackname = vxworks_needs_vxworks;
files = sys/stat.h;
- test = "-r types/vxTypesOld.h";
- test = "-n \"`fgrep '#include' $file`\"";
- test = "-n \"`fgrep ULONG $file`\"";
+ test = " -r types/vxTypesOld.h";
+ test = " -n \"`egrep '#include' $file`\"";
+ test = " -n \"`egrep ULONG $file`\"";
select = "#[ \t]define[ \t][ \t]*__INCstath";
sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
hackname = vxworks_time;
files = time.h;
select = "VOIDFUNCPTR";
- test = "-r vxWorks.h";
+ test = " -r vxWorks.h";
sed = "/VOIDFUNCPTR/i\\\n"
"#ifndef __gcc_VOIDFUNCPTR_defined\\\n"
"#ifdef __cplusplus\\\n"
files = sys/ki_iface.h;
select = 'These definitions are for HP Internal developers';
shell =
- "echo \"Removing incorrect fix to HP-UX <$file>\" >&2\n"
- "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
+ "echo \"Removing incorrect fix to <$file>\" >&2\n"
+ "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
+ "cat > /dev/null";
};
files = sys/ki.h;
select = '11.00 HP-UX LP64';
shell =
- "echo \"Removing incorrect fix to HP-UX <$file>\" >&2\n"
- "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
+ "echo \"Removing incorrect fix to <$file>\" >&2\n"
+ "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
+ "cat > /dev/null";
};
files = sys/ki_calls.h;
select = 'KI_MAX_PROCS is an arbitrary number';
shell =
- "echo \"Removing incorrect fix to HP-UX <$file>\" >&2\n"
- "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
+ "echo \"Removing incorrect fix to <$file>\" >&2\n"
+ "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
+ "cat > /dev/null";
};
files = sys/ki_defs.h;
select = 'Kernel Instrumentation Definitions';
shell =
- "echo \"Removing incorrect fix to HP-UX <$file>\" >&2\n"
- "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
+ "echo \"Removing incorrect fix to <$file>\" >&2\n"
+ "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
+ "cat > /dev/null";
+};
+
+
+/*
+ * This file on SunOS 4 has a very large macro. When the sed loop
+ * tries pull it in, it overflows the pattern space size of the SunOS
+ * sed (GNU sed does not have this problem). Since the file does not
+ * require fixing, we remove it from the fixed directory.
+ */
+fix = {
+ hackname = zzz_bad_fixes;
+ files = sundev/ipi_error.h;
+ /* shouldn't there be a select expression here??? */
+ shell =
+ "echo \"Removing incorrect fix to <$file>\" >&2\n"
+ "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
+ "cat > /dev/null";
};
files = sys/time.h;
select = 'For CASPEC, look in';
shell =
- "echo \"Removing incorrect fix to HP-UX <$file>\" >&2\n"
- "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
+ "echo \"Removing incorrect fix to <$file>\" >&2\n"
+ "rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
+ "cat > /dev/null";
};