3 autogen definitions inclhack;
7 Define all the fixes we know about for repairing damaged headers
9 The rules for making fixes:
11 1. Every fix must have a "hackname" that is compatible with C syntax
12 for variable names and is unique without regard to alphabetic case.
14 2. If the problem is known to exist only in certain files,
15 then name each such file with a "files = " entry.
17 3. It is relatively expensive to fire off a process to fix a source
18 file, therefore write apply tests to avoid unnecessary fix
19 processes. The preferred apply tests are "select" and "bypass"
20 because they are performed internally. "test" sends a command
21 to a server shell that actually fires off one or more processes
22 to do the testing. Avoid it, if you can, but it is still more
23 efficient than a fix process.
25 These tests are required to:
27 1. Be positive for all header files that require the fix.
31 2. Be negative as often as possible whenever the fix is not
32 required, avoiding the process overhead.
36 3. The expression is as simple as possible to both
37 process and uderstand by people. :-)
39 Please take advantage of the fact AutoGen will glue
40 together string fragments. It helps. Also take note
41 that double quote strings and single quote strings have
42 different formation rules. Double quote strings are
43 a tiny superset of C string syntax. Single quote strings
44 follow shell single quote string formation rules, except
45 that the backslash is processed before '\\', '\'' and '#'
46 characters (using C character syntax).
48 4. There are currently two methods of fixing a file:
50 1. a series of sed expressions. Each will be an individual
51 "-e" argument to a single invocation of sed.
53 2. a shell script. These scripts are _required_ to read all
54 of stdin in order to avoid pipe stalls. They may choose to
57 A C language subroutine method is planned for both tests and fixes
58 in the near term. Awk ought to be possible too, but there may
59 be portability issues that I am not familiar with.
61 5. If the fix is to remove the file (i.e. the fixing process broke
62 the file), then you must use a shell script that deletes all
63 copies of the output file and does not write _anything_ to stdout.
64 See the "zzz_*" fixes at the end of this file.
66 Let the fixes begin: */
69 * sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the definition
70 * of struct rusage, so the prototype (added by fixproto) causes havoc.
73 hackname = aix_syswait;
76 sed = "/^extern pid_t wait3();$/i\\\n"
82 * sys/signal.h on some versions of AIX uses volatile in the typedef of
83 * sig_atomic_t, which causes gcc to generate a warning about duplicate
84 * volatile when a sig_atomic_t variable is declared volatile, as
88 hackname = aix_volatile;
90 select = "typedef volatile int sig_atomic_t";
91 sed = "s/typedef volatile int sig_atomic_t"
92 "/typedef int sig_atomic_t/";
97 * Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX.
100 hackname = alpha_getopt;
103 select = 'getopt\(int, char \*\[';
104 sed = 's/getopt(int, char \*\[\],[ ]*char \*)/'
105 'getopt(int, char *const[], const char *)/';
110 * Remove erroneous parentheses in sym.h on Alpha OSF/1.
113 hackname = alpha_parens;
115 select = '#ifndef\(__mips64\)';
116 sed = "s/#ifndef(__mips64)/#ifndef __mips64/";
121 * Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
124 hackname = alpha_sbrk;
126 select = "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
127 sed = "s/char\\([ \t]*\\*[\t ]*sbrk[ \t]*(\\)/void\\1/";
132 * Fix this ARM/RISCiX file where ___type is a Compiler
133 * hint that is specific to the Norcroft compiler.
136 hackname = arm_norcroft_hint;
137 select = "___type p_type";
138 files = "X11/Intrinsic.h";
139 sed = "s/___type p_type/p_type/";
144 * Fix this ARM/RISCiX file to avoid interfering
145 * with the use of __wchar_t in cc1plus.
148 hackname = arm_wchar;
150 select = "#[ \t]*define[ \t]*__wchar_t";
151 sed = "s/\\(#[ \t]*ifndef[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/";
152 sed = "s/\\(#[ \t]*define[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/";
157 * This file in A/UX 3.0.x/3.1.x contains an __asm directive for c89;
158 * gcc doesn't understand it.
163 select = "#ifndef NOINLINE";
164 sed = "s|#ifndef NOINLINE"
165 "|#if !defined(NOINLINE) \\&\\& !defined(__GNUC__)|";
170 * For C++, avoid any typedef or macro definition of bool,
171 * and use the built in type instead.
172 * HP/UX 10.20 also has it in curses_colr/curses.h.
175 hackname = avoid_bool;
177 files = curses_colr/curses.h;
181 sed = "/^#[ \t]*define[ \t][ \t]*bool[ \t][ \t]*char[ \t]*$/i\\\n"
182 "#ifndef __cplusplus\n";
184 sed = "/^#[ \t]*define[ \t][ \t]*bool[ \t][ \t]*char[ \t]*$/a\\\n"
187 sed = "/^typedef[ \t][ \t]*char[ \t][ \t]*bool[ \t]*;/i\\\n"
188 "#ifndef __cplusplus\n";
190 sed = "/^typedef[ \t][ \t]*char[ \t][ \t]*bool[ \t]*;/a\\\n"
193 sed = "/^[ ]*typedef[ \t][ \t]*unsigned char[ \t][ \t]*bool[ \t]*;/i\\\n"
194 "#ifndef __cplusplus\n";
196 sed = "/^[ ]*typedef[ \t][ \t]*unsigned char[ \t][ \t]*bool[ \t]*;/a\\\n"
199 sed = "/^typedef[ \t][ \t]*int[ \t][ \t]*bool[ \t]*;/i\\\n"
200 "#ifndef __cplusplus\n";
202 sed = "/^typedef[ \t][ \t]*int[ \t][ \t]*bool[ \t]*;/a\\\n"
205 sed = "/^[ ]*typedef[ \t][ \t]*unsigned int[ \t][ \t]*bool[ \t]*;/i\\\n"
206 "#ifndef __cplusplus\n";
208 sed = "/^[ ]*typedef[ \t][ \t]*unsigned int[ \t][ \t]*bool[ \t]*;/a\\\n"
214 * Fix `typedef struct term;' on hppa1.1-hp-hpux9.
217 hackname = bad_struct_term;
219 select = "^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
220 sed = "s/^[ \t]*typedef[ \t][ \t]*"
221 "\\(struct[ \t][ \t]*term[ \t]*;[ \t]*\\)$/\\1/";
226 * Fix one other error in this file:
227 * a mismatched quote not inside a C comment.
231 files = sundev/vuid_event.h;
232 sed = "s/doesn't/does not/";
237 * Fix #defines under Alpha OSF/1:
238 * The following files contain '#pragma extern_prefix "_FOO"' followed by
239 * a '#define something(x,y,z) _FOOsomething(x,y,z)'. The intent of these
240 * statements is to reduce namespace pollution. While these macros work
241 * properly in most cases, they don't allow you to take a pointer to the
242 * "something" being modified. To get around this limitation, change these
243 * statements to be of the form '#define something _FOOsomething'.
262 "s/^[ \t]*#[ \t]*define[ \t]*\\([^(]*\\)\\(([^)]*)\\)[ \t]*"
263 "\\(_.\\)\\1\\2[ \t]*$/#define \\1 \\3\\1/";
268 * check for broken assert.h that needs stdio.h
271 hackname = broken_assert_stdio;
274 bypass = "include.*stdio.h";
276 "#include <stdio.h>\n";
281 * check for broken assert.h that needs stdlib.h
284 hackname = broken_assert_stdlib;
286 select = 'exit *\(|abort *\(';
287 bypass = "include.*stdlib.h";
289 "#ifdef __cplusplus\\\n"
290 "#include <stdlib.h>\\\n"
296 * Note that BSD43_* are used on recent MIPS systems.
299 hackname = bsd43_io_macros;
300 select = "BSD43__IO";
302 * Put single quotes aroung the character that appears after '('
303 * and before ',', UNLESS it is a 'c' or 'g' or 'x'.
305 sed = "/[ \t]BSD43__IO[A-Z]*[ \t]*(/" 's/(\(.\),/(\'\1\',/';
306 sed = "/#[ \t]*define[ \t]*[ \t]BSD43__IO/" 's/\'\([cgx]\)\'/\1/g';
311 * Fix <c_asm.h> on Digital UNIX V4.0:
312 * It contains a prototype for a DEC C internal asm() function,
313 * clashing with gcc's asm keyword. So protect this with __DECC.
316 hackname = dec_intern_asm;
318 sed = "/^[ \t]*float[ \t]*fasm/i\\\n#ifdef __DECC\n";
319 sed = "/^[ \t]*#[ \t]*pragma[ \t]*intrinsic([ \t]*dasm/a\\\n"
325 * Completely replace <_int_varargs.h> with a file that includes gcc's
326 * stdarg.h or varargs.h files as appropriate on DG/UX
329 hackname = dgux_int_varargs;
330 files = _int_varargs.h;
331 shell = "cat > /dev/null\ncat << '_EOF_'
332 \#ifndef __INT_VARARGS_H
333 \#define __INT_VARARGS_H
335 /************************************************************************/
336 /* _INT_VARARGS.H - Define the common stuff for varargs/stdarg/stdio. */
337 /************************************************************************/
340 ** This file is a DG internal header. Never include this
344 \#ifndef ___int_features_h
345 \#include <sys/_int_features.h>
348 \#if !(defined(_VA_LIST) || defined(_VA_LIST_))
355 typedef void * va_list;
357 typedef char * va_list;
363 \#if defined(__DCC__)
371 \#else /* ! defined(__DCC__) */
374 int __va_arg; /* argument number */
375 int *__va_stk; /* start of args passed on stack */
376 int *__va_reg; /* start of args passed in regs */
379 \#endif /* ! defined(__DCC__) */
383 \#if defined(__GNUC__) || defined(__STDC__)
384 typedef void * va_list;
386 typedef char * va_list;
389 \#endif /* _IX86_ANY */
391 \#endif /* __LINT__ */
392 \#endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */
393 \#endif /* #ifndef __INT_VARARGS_H */
399 * Remove the double-slash comments
400 * They *must* be removed so it will not create nested comments!!
401 * However, they will *not* be removed if the file name ends with
402 * any of "++", ".hh" or ".H", or if the file name contains "cxx/".
404 * There *used* to be a number of similar problems in various OSes:
406 * Turning // comments into normal comments trashes this IRIX 4.0.1
407 * header file, which embeds // comments inside multi-line
408 * comments. If this looks like the IRIX header file, we refix it by
409 * just throwing away the // comments.
411 * Same problem with a file from SunOS 4.1.3 : a header file containing
412 * the string "//" embedded in "/ * * /"
414 * There is a similar problem with the VxWorks drv/netif/if_med.h file.
416 * And also with the HP-UX 10 and HP-UX 11 sys/pci.h file
418 * Now that we delete the // comments instead of converting them to / * * /,
419 * traditional hacks like irix_bogus_cxx_cmnt, no longer work (which
420 * strangely enough was also used on alpha-dec-osf4.0d). If we skip the
421 * hack whenever we see ``"//"' ', then the need for the secondary hack
422 * disappears. Note: it is painful to ensure that the first quote
423 * exists, so we just check for the trailing quote directly abutting
424 * the //. Note: We should never touch a line that has // completely
425 * within quotes but this is somewhat hard to check for.
427 * Ultimately, this fix ought to go inside of C code where
428 * we can do a better analysis on the need and method for fixing.
431 hackname = no_double_slash;
433 * Test that the file-to-fix does not from a C++ directory
434 * Also, only accept double slashes that are not part of URL's
435 * and are not the end of a quoted string.
437 test = ' -z "`echo ${file} | egrep \'(CC|cxx|\+\+)/\'`"';
438 select = '(^|[^:])//[^"*]';
440 sed = 's,[^:]//[^"].*$,,';
445 * Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
448 hackname = ecd_cursor;
449 files = "sunwindow/win_lock.h";
450 files = "sunwindow/win_cursor.h";
451 sed = "s/ecd.cursor/ecd_cursor/";
455 * On SCO OpenServer 5.0.0 through (at least) 5.0.5 <sys/stat.h> contains
456 * tiny static wrappers that aren't C++ safe.
459 hackname = sco5_stat_wrappers;
460 mach = "i*86-*-sco3.2v5*";
461 files = "sys/stat.h";
463 sed = "/^static int[ \t]*[a-z]*stat(/i\\\n"
464 "#ifdef __cplusplus\\\n"
470 "#ifdef __cplusplus\\\n"
472 "#endif \/* __cplusplus *\/\\\n";
478 * Fix else and endif directives that contain non-commentary text
481 hackname = end_else_label;
484 * Select files that contain '#endif' or '#else' directives with
485 * some sort of following junk. (Between the ascii '.'
486 * and '0' lies the character '/'. This will *NOT*
487 * match '#endif / * foo * /', but it also wont match
488 * '#endif / done' either.
490 * We have a second regexp in the selector to detect
491 * #endif followed by a / followed by anything other
492 * than a *. For example "#endif / * foo * /" or
493 * "#endif /% blah %/ which appear on OSF4.0A and AIX4.2
496 * We use the pattern [!-.0-z{|}~] instead of [^/ \t] to match a
497 * noncomment following #else or #endif because some buggy egreps
498 * think [^/] matches newline, and they thus think `#else ' matches
499 * `#e[ndiflse]*[ \t]+[^/ \t]'.
500 * [!-.0-~] does not work properly on AIX 4.1.
502 select = "^[ \t]*#[ \t]*(else|endif)[ \t]+"
503 "(" '[!-.0-z\{\|\}\~]' "|" '/[^\*]' ")";
506 * First, join the continued input lines.
507 * IF the resulting line is an endif preprocessing directive,
508 * then trim off the following patterns:
509 * 1. sequences that start with '/' and is *NOT* followed by '*'
510 * 2. Sequences that start with '*' and is *NOT* followed by '/'
511 * 3. sequences that do not start with any of '/', '*', '\t' or ' '.
513 * The fixinc_eol stuff is to work around a bug in the sed
517 's/\\\\$/\\\\+++fixinc_eol+++/' "\n"
519 's/\\\\+++fixinc_eol+++/\\\\/g' "\n"
521 "s%^\\([ \t]*#[ \t]*else\\)[ \t][ \t]*/[^*].*%\\1%\n"
522 "s%^\\([ \t]*#[ \t]*else\\)[ \t][ \t]*[^/ \t].*%\\1%\n"
523 "s%^\\([ \t]*#[ \t]*endif\\)[ \t][ \t]*/[^*].*%\\1%\n"
524 "s%^\\([ \t]*#[ \t]*endif\\)[ \t][ \t]*\\*[^/].*%\\1%\n"
525 "s%^\\([ \t]*#[ \t]*endif\\)[ \t][ \t]*[^/* \t].*%\\1%";
530 * Fix HP's use of ../machine/inline.h to refer to
531 * /usr/include/machine/inline.h
534 hackname = hp_inline;
535 files = sys/spinlock.h;
536 select = 'include.*"\.\./machine/';
537 sed = "s,\"../machine/inline.h\",<machine/inline.h>,";
538 sed = "s,\"../machine/psl.h\",<machine/psl.h>,";
543 * Check for (...) in C++ code in HP/UX sys/file.h.
546 hackname = hp_sysfile;
548 select = "HPUX_SOURCE";
549 sed = 's/(\.\.\.)/(struct file * ...)/';
554 * sys/mman.h on HP/UX is not C++ ready,
555 * even though NO_IMPLICIT_EXTERN_C is defined on HP/UX.
557 * rpc/types.h on OSF1/2.0 is not C++ ready, even though NO_IMPLICIT_EXTERN_C
558 * is defined for the alpha. The problem is the declaration of malloc.
561 hackname = cxx_unready;
564 bypass = '"C"|__BEGIN_DECLS';
567 "#ifdef __cplusplus\\\n"
571 "#ifdef __cplusplus\\\n"
578 * HPUX 10.x sys/param.h defines MAXINT which clashes with values.h
581 hackname = hpux_maxint;
583 sed = "/^#[ \t]*define[ \t]*MAXINT[ \t]/i\\\n"
586 sed = "/^#[ \t]*define[ \t]*MAXINT[ \t]/a\\\n"
592 * Fix hpux10.20 <sys/time.h> to avoid invalid forward decl
595 hackname = hpux_systime;
597 select = "^extern struct sigevent;";
598 sed = "s/^extern struct sigevent;/struct sigevent;/";
603 * Determine if we're on Interactive Unix 2.2 or later, in which case we
604 * need to fix some additional files. This is the same test for ISC that
605 * Autoconf uses. On Interactive 2.2, certain traditional Unix
606 * definitions (notably getc and putc in stdio.h) are omitted if __STDC__
607 * is defined, not just if _POSIX_SOURCE is defined. This makes it
608 * impossible to compile any nontrivial program except with -posix.
611 hackname = interactv_add1;
613 test = " -d /etc/conf/kconfig.d";
614 test = ' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
619 files = "sys/limits.h";
620 files = "sys/fcntl.h";
621 files = "sys/dirent.h";
623 sed = "s/!defined(__STDC__) && !defined(_POSIX_SOURCE)/"
624 "!defined(_POSIX_SOURCE)/";
628 hackname = interactv_add2;
630 test = " -d /etc/conf/kconfig.d";
631 test = ' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
634 sed = "s/fmod(double)/fmod(double, double)/";
638 hackname = interactv_add3;
640 test = " -d /etc/conf/kconfig.d";
641 test = ' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
643 files = sys/limits.h;
645 sed = "/CHILD_MAX/s,/\\* Max, Max,";
646 sed = "/OPEN_MAX/s,/\\* Max, Max,";
651 * Fix various _IO* defines, but do *not* quote the characters cgxtf.
654 hackname = io_def_quotes;
655 select = "[ \t]*[ \t](_|DES)IO[A-Z]*[ \t]*\\( *[^,']";
656 sed = "s/\\([ \t]*[ \t]_IO[A-Z]*[ \t]*(\\)\\([^,']\\),/\\1'\\2',/";
657 sed = "s/\\([ \t]*[ \t]DESIO[A-Z]*[ \t]*(\\)\\([^,']\\),/\\1'\\2',/";
658 sed = "/#[ \t]*define[ \t]*[ \t]_IO/" "s/'\\([cgxtf]\\)'/\\1/g";
659 sed = "/#[ \t]*define[ \t]*[ \t]DESIOC/" 's/\'\([cdgx]\)\'/\1/g';
666 * Basically, what is supposed to be happening is that every
667 * _invocation_ of the "_CTRL()" or "CTRL()" macros is supposed to have
668 * its argument inserted into single quotes. We _must_ do this because
669 * ANSI macro substitution rules prohibit looking inside quoted strings
670 * for the substitution names. A side effect is that the quotes are
671 * inserted in the definitions of those macros as well. So, the last
672 * several sed expressions are supposed to clean up the definitions, as
673 * long as those definitions are using "c", "g" or "x" as the macro
677 hackname = ioctl_fix_ctrl;
678 select = "CTRL[ \t]*\\(";
680 sed = "/[^A-Z0-9_]CTRL[ \t]*(/"
681 "s/\\([^']\\))/'\\1')/";
683 sed = "/[^A-Z0-9]_CTRL[ \t]*(/"
684 "s/\\([^']\\))/'\\1')/";
686 sed = "/#[ \t]*define[ \t]*[ \t]CTRL/"
687 "s/'\\([cgx]\\)'/\\1/g";
689 sed = "/#[ \t]*define[ \t]*[ \t]_CTRL/"
690 "s/'\\([cgx]\\)'/\\1/g";
692 sed = "/#[ \t]*define[ \t]*[ \t]BSD43_CTRL/"
693 "s/'\\([cgx]\\)'/\\1/g";
695 sed = "/#[ \t]*define[ \t]*[ \t][_]*ISCTRL/"
696 "s/'\\([cgx]\\)'/\\1/g";
701 * Check for missing ';' in struct
704 hackname = ip_missing_semi;
705 files = netinet/ip.h;
706 sed = "/^struct/,/^};/s/}$/};/";
711 * IRIX 4.0.5 <rpc/auth.h> uses struct sockaddr
712 * in prototype without previous definition.
715 hackname = irix_multiline_cmnt;
718 sed = "s@type of the result@type of the result */@";
719 sed = "s@of the sizeof@/* of the sizeof@";
724 * Some IRIX header files contain the string "//"
727 hackname = irix_sockaddr;
729 select = "authdes_create.*struct sockaddr";
730 sed = "/authdes_create.*struct sockaddr/i\\\n"
731 "struct sockaddr;\n";
736 * IRIX 4.0.5 <rpc/xdr.h> uses struct __file_s
737 * in prototype without previous definition.
740 hackname = irix_struct__file;
742 sed = "/xdrstdio_create.*struct __file_s/i\\\n"
743 "struct __file_s;\n";
748 * Fixing ISC fmod declaration
753 select = 'fmod\(double\)';
754 sed = "s/fmod(double)/fmod(double, double)/";
759 * Fix nested comments in Motorola's <limits.h> and <sys/limits.h>
762 hackname = motorola_nested;
763 mach = "m68k-motorola-sysv*";
765 files = sys/limits.h;
766 sed = "s@^\\(#undef[ \t][ \t]*PIPE_BUF[ \t]*"
767 "/\\* max # bytes atomic in write to a\\)$@\\1 */@";
768 sed = "s@\\(/\\*#define\tHUGE_VAL\t3.40282346638528860e+38 \\)"
769 "\\(/\\*error value returned by Math lib\\*/\\)$@\\1*/ \\2@";
774 * Fixing nested comments in ISC <sys/limits.h>
777 hackname = isc_sys_limits;
778 files = sys/limits.h;
780 sed = "/CHILD_MAX/s,/\\* Max, Max,";
781 sed = "/OPEN_MAX/s,/\\* Max, Max,";
786 * These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
787 * use / * * / to concatenate tokens.
790 hackname = kandr_concat;
791 files = "sparc/asm_linkage.h";
792 files = "sun3/asm_linkage.h";
793 files = "sun3x/asm_linkage.h";
794 files = "sun4/asm_linkage.h";
795 files = "sun4c/asm_linkage.h";
796 files = "sun4m/asm_linkage.h";
797 files = "sun4c/debug/asm_linkage.h";
798 files = "sun4m/debug/asm_linkage.h";
799 files = "arm/as_support.h";
800 files = "arm/mc_type.h";
802 files = "dev/chardefmac.h";
803 files = "dev/ps_irq.h";
804 files = "dev/screen.h";
805 files = "dev/scsi.h";
807 files = "Xm.acorn/XmP.h";
808 files = bsd43/bsd43_.h;
810 sed = 's|/\*\*/|##|g';
815 * In limits.h, put #ifndefs around things that are supposed to be defined
816 * in float.h to avoid redefinition errors if float.h is included first.
817 * On HP/UX this patch does not work, because on HP/UX limits.h uses
818 * multi line comments and the inserted #endif winds up inside the
819 * comment. Fortunately, HP/UX already uses #ifndefs in limits.h; if
820 * we find a #ifndef FLT_MIN we assume that all the required #ifndefs
821 * are there, and we do not add them ourselves.
822 * Also fix a nested comment problem in sys/limits.h on Motorola sysV68 R3V7.1
825 hackname = limits_ifndefs;
827 files = "sys/limits.h";
828 bypass = "ifndef[ \t]+FLT_MIN";
830 sed = "/[ \t]FLT_MIN[ \t]/i\\\n#ifndef FLT_MIN\n";
831 sed = "/[ \t]FLT_MIN[ \t]/a\\\n#endif\n";
832 sed = "/[ \t]FLT_MAX[ \t]/i\\\n#ifndef FLT_MAX\n";
833 sed = "/[ \t]FLT_MAX[ \t]/a\\\n#endif\n";
834 sed = "/[ \t]FLT_DIG[ \t]/i\\\n#ifndef FLT_DIG\n";
835 sed = "/[ \t]FLT_DIG[ \t]/a\\\n#endif\n";
836 sed = "/[ \t]DBL_MIN[ \t]/i\\\n#ifndef DBL_MIN\n";
837 sed = "/[ \t]DBL_MIN[ \t]/a\\\n#endif\n";
838 sed = "/[ \t]DBL_MAX[ \t]/i\\\n#ifndef DBL_MAX\n";
839 sed = "/[ \t]DBL_MAX[ \t]/a\\\n#endif\n";
840 sed = "/[ \t]DBL_DIG[ \t]/i\\\n#ifndef DBL_DIG\n";
841 sed = "/[ \t]DBL_DIG[ \t]/a\\\n#endif\n";
842 sed = "/^\\(\\/\\*#define\tHUGE_VAL\t3\\.[0-9e+]* *\\)\\/\\*/s//\\1/";
847 * Delete the '#define void int' line from curses.h on Lynx
850 hackname = lynx_void_int;
852 select = "#[ \t]*define[ \t]+void[ \t]+int";
853 sed = "/#[ \t]*define[ \t][ \t]*void[ \t]int/d";
858 * Fix fcntl prototype in fcntl.h on LynxOS.
861 hackname = lynxos_fcntl_proto;
863 select = 'fcntl.*\(int, int, int\)';
864 sed = 's/\(fcntl.*(int, int, \)int)/\1...)/';
869 * libm.a on m88k-motorola-sysv3 contains a stupid optimization for
870 * function hypot(), which returns the second argument without even
871 * looking at its value, if the other is 0.0. Another drawback is
872 * that fix-header doesn't fix fabs' prototype, and I have no idea why.
875 hackname = m88k_bad_hypot_opt;
876 mach = "m88k-motorola-sysv3*";
879 sed = "s/extern double floor(), ceil(), fmod(), fabs();/"
880 "extern double floor(), ceil(), fmod(), fabs _PARAMS((double));/";
882 sed = "/^extern double hypot();$/a\\\n"
883 "\\/* Workaround a stupid Motorola optimization if one\\\n"
884 " of x or y is 0.0 and the other is negative! *\\/\\\n"
885 "#ifdef __STDC__\\\n"
886 "static __inline__ double fake_hypot (double x, double y)\\\n"
888 "static __inline__ double fake_hypot (x, y)\\\n"
892 "\treturn fabs (hypot (x, y));\\\n"
894 "#define hypot\tfake_hypot\n";
899 * Fix incorrect S_IF* definitions on m88k-sysv3.
902 hackname = m88k_bad_s_if;
903 mach = "m88k-*-sysv3*";
905 select = "#define[ \t]+S_IS[A-Z]*(m)[ \t]";
907 sed = "s/^\\(#define[ \t]*S_IS[A-Z]*(m)\\)[ \t]*"
908 "(m[ \t]*&[ \t]*\\(S_IF[A-Z][A-Z][A-Z][A-Z]*\\)[ \t]*)/"
909 "\\1 (((m)\\&S_IFMT)==\\2)/";
911 sed = "s/^\\(#define[ \t]*S_IS[A-Z]*(m)\\)[ \t]*"
912 "(m[ \t]*&[ \t]*\\(0[0-9]*\\)[ \t]*)/"
913 "\\1 (((m)\\&S_IFMT)==\\2)/";
918 * Put cpp wrappers around these include files to avoid redeclaration
919 * errors during multiple inclusion on m88k-tektronix-sysv3.
922 hackname = m88k_multi_incl;
923 mach = "m88k-tektronix-sysv3*";
927 "echo Fixing $file, to protect against multiple inclusion. >&2
928 cpp_wrapper=`echo $file | sed -e 's,\\.,_,g' -e 's,/,_,g'`
929 echo \"#ifndef __GCC_GOT_${cpp_wrapper}_\"
930 echo \"#define __GCC_GOT_${cpp_wrapper}_\"
932 echo \"#endif /* ! __GCC_GOT_${cpp_wrapper}_ */\"";
937 * Fix non-ansi machine name defines
938 * File selection is split into two parts: the shell version as
939 * a single patch, and the program version with each patch separate.
940 * Each is substantially faster for the particular environment.
941 * You have a dual maintenance problem here.
944 hackname = machine_name;
946 * Select '#if.*' and '#elif" with possible non-ansi symbols
947 * The only non-ansi symbols we know about start with one of:
949 * If any are added to the substitution list, then add it to
950 * the selection list as well. Hopefully we can avoid names
951 * starting with "d" and "l", because this pattern would then
952 * match "defined" and "lint" as well. I suppose we could add
953 * a "bypass = lint" if we had to though.
955 * The fixinc_eol stuff is to work around a bug in the sed
957 select = "^#[ \t]*(if|elif).*"
958 "[^a-zA-Z0-9_](_*[MSRrhim]|[Mbimnpstuv])[a-zA-Z0-9_]";
959 exesel = "^#[ \t]*(if|elif).*[^a-zA-Z0-9_]"
963 "|_*SYSTYPE_[A-Z0-9]"
990 's/\\\\$/\\\\+++fixinc_eol+++/' "\n"
992 's/\\\\+++fixinc_eol+++/\\\\/g' "\n"
994 "/#[\t ]*[el]*if/ {\n"
995 "\ts/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g\n"
997 "\ts/ M32 / __M32__ /g\n"
998 "\ts/ _*MIPSE\\([LB]\\) / __MIPSE\\1__ /g\n"
999 "\ts/ _*SYSTYPE_\\([A-Z0-9]*\\) / __SYSTYPE_\\1__ /g\n"
1000 "\ts/ _*\\([Rr][34]\\)000 / __\\1000__ /g\n"
1001 "\ts/ _*host_mips / __host_mips__ /g\n"
1002 "\ts/ _*i386 / __i386__ /g\n"
1003 "\ts/ _*mips / __mips__ /g\n"
1004 "\ts/ bsd4\\([0-9]\\) / __bsd4\\1__ /g\n"
1005 "\ts/ is68k / __is68k__ /g\n"
1006 "\ts/ m68k / __m68k__ /g\n"
1007 "\ts/ m88k / __m88k__ /g\n"
1008 "\ts/ mc680\\([0-9]\\)0 / __mc680\\10__ /g\n"
1009 "\ts/ news\\([0-9]*\\) / __news\\1__ /g\n"
1010 "\ts/ ns32000 / __ns32000__ /g\n"
1011 "\ts/ pdp11 / __pdp11__ /g\n"
1012 "\ts/ pyr / __pyr__ /g\n"
1013 "\ts/ sel / __sel__ /g\n"
1014 "\ts/ sony_news / __sony_news__ /g\n"
1015 "\ts/ sparc / __sparc__ /g\n"
1016 "\ts/ sun\\([a-z0-9]*\\) / __sun\\1__ /g\n"
1017 "\ts/ tahoe / __tahoe__ /g\n"
1018 "\ts/ tower\\([_0-9]*\\) / __tower\\1__ /g\n"
1019 "\ts/ u370 / __u370__ /g\n"
1020 "\ts/ u3b\\([0-9]*\\) / __u3b\\1__ /g\n"
1021 "\ts/ unix / __unix__ /g\n"
1022 "\ts/ vax / __vax__ /g\n"
1024 "\ts/ \\([a-zA-Z0-9_][a-zA-Z0-9_]*\\) /\\1/g\n\t}";
1029 * Some math.h files define struct exception, which conflicts with
1030 * the class exception defined in the C++ file std/stdexcept.h. We
1031 * redefine it to __math_exception. This is not a great fix, but I
1032 * haven't been able to think of anything better.
1035 hackname = math_exception;
1037 select = "struct exception";
1038 sed = "/struct exception/i\\\n"
1039 "#ifdef __cplusplus\\\n"
1040 "#define exception __math_exception\\\n"
1042 sed = "/struct exception/a\\\n"
1043 "#ifdef __cplusplus\\\n"
1044 "#undef exception\\\n"
1047 sed = "/matherr/i\\\n"
1048 "#ifdef __cplusplus\\\n"
1049 "#define exception __math_exception\\\n"
1052 sed = "/matherr/a\\\n"
1053 "#ifdef __cplusplus\\\n"
1054 "#undef exception\\\n"
1057 #ifdef MATH_EXCEPTION_FIXED
1059 I think this patch needs some more thinking.
1060 This is from SVR4.2 (With '#' replaced with '@').
1061 Perhaps we could do without the "/matherr/a" entries?
1062 Can we bypass the entire fix if someone was astute
1063 enough to have '#ifdef __cplusplus' anywhere in the file?
1066 *** /usr/include/math.h Fri Apr 3 18:54:59 1998
1067 --- math.h Sun May 9 07:28:58 1999
1074 + @ifdef __cplusplus
1075 + @define exception __math_exception
1078 + @ifdef __cplusplus
1090 + @ifdef __cplusplus
1091 + @define exception __math_exception
1093 + @ifdef __cplusplus
1094 + @define exception __math_exception
1096 extern int matherr(struct exception *);
1097 + @ifdef __cplusplus
1100 + @ifdef __cplusplus
1104 @endif /*__cplusplus*/
1110 * In math.h, put #ifndefs around things that might be defined
1111 * in a gcc specific math-*.h file.
1114 hackname = math_gcc_ifndefs;
1119 * First see if we have a definition for DBL_MAX in float.h
1120 * If we do, we will replace the one in math.h with that one.
1124 * IF we have such a define *and* HUGE_VAL is defined to be DBL_MAX
1125 * *and* DBL_MAX is _not_ defined in the current file (math.h),
1126 * THEN replace the defined value of HUGE_VAL
1127 * ELSE just copy stdin to stdout so the main filter can process it
1131 * Put conditional guards around the HUGE_VAL definition.
1134 "\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h "
1137 "\tif ( test -n \"${dbl_max_def}\" \\\n"
1138 "\t\t-a -n \"`egrep '#define[ \t]*HUGE_VAL[ \t]+DBL_MAX' $file`\" \\\n"
1139 "\t\t-a -z \"`egrep '#define[ \t]+DBL_MAX[ \t]+' $file`\"\n"
1140 "\t ) > /dev/null 2>&1\n"
1141 "\tthen sed -e '/define[ \t]HUGE_VAL[ \t]DBL_MAX/s/DBL_MAX/$dbl_max_def/'"
1142 "\n\telse cat ; fi |\n"
1144 "\tsed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n#ifndef HUGE_VAL\n' "
1145 "-e '/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n'";
1153 hackname = nested_comment;
1155 sed = 's@^\(/\*.*rpc/auth_des.h>.*\)/\*@\1*/ /*@';
1160 * fix bogus recursive stdlib.h in NEWS-OS 4.0C
1163 hackname = news_os_recursion;
1165 select = "#include <stdlib.h>";
1166 sed = "/^#include <stdlib.h>/i\\\n"
1167 "#ifdef BOGUS_RECURSION\n";
1168 sed = "/^#include <stdlib.h>/a\\\n"
1174 * NeXT 3.2 adds const prefix to some math functions.
1175 * These conflict with the built-in functions.
1178 hackname = next_math_prefix;
1179 files = ansi/math.h;
1180 select = "^extern.*double.*__const__.*";
1182 sed = "/^extern.*double.*__const__.*sqrt(/s/__const__//";
1183 sed = "/^extern.*double.*__const__.*fabs(/s/__const__//";
1184 sed = "/^extern.*double.*__const__.*cos(/s/__const__//";
1185 sed = "/^extern.*double.*__const__.*hypot(/s/__const__//";
1186 sed = "/^extern.*double.*__const__.*sin(/s/__const__//";
1191 * NeXT 3.2 uses the word "template" as a parameter for some
1192 * functions. GCC reports an invalid use of a reserved key word
1193 * with the built-in functions. NeXT 3.2 includes the keyword
1194 * volatile in the prototype for abort(). This conflicts with
1195 * the built-in definition.
1198 hackname = next_template;
1202 sed = '/\(.*template\)/s/template//';
1203 sed = "/extern.*volatile.*void.*abort/s/volatile//";
1208 * NeXT 3.2 includes the keyword volatile in the abort() and exit()
1209 * function prototypes. That conflicts with the built-in functions.
1212 hackname = next_volitile;
1213 files = ansi/stdlib.h;
1216 sed = "/extern.*volatile.*void.*exit/s/volatile//";
1217 sed = "/extern.*volatile.*void.*abort/s/volatile//";
1222 * NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
1223 * Note that version 3 of the NeXT system has wait.h in a different directory,
1224 * so that this code won't do anything. But wait.h in version 3 has a
1225 * conditional, so it doesn't need this fix. So everything is okay.
1228 hackname = next_wait_union;
1231 select = 'wait\(union wait';
1233 sed = "s@wait(union wait@wait(void@";
1238 * a missing semi-colon at the end of the nodeent structure definition.
1241 hackname = nodeent_syntax;
1242 files = netdnet/dnetdb.h;
1243 sed = "s/char.*na_addr *$/char *na_addr;/";
1248 * sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by
1249 * defining regex.h related types. This causes libg++ build and usage
1250 * failures. Fixing this correctly requires checking and modifying 3 files.
1253 hackname = osf_namespace_a;
1254 files = reg_types.h;
1255 files = sys/lc_core.h;
1256 test = " -r reg_types.h";
1257 test = " -r sys/lc_core.h";
1258 test = " -n \"`grep '} regex_t;' reg_types.h`\"";
1259 test = " -z \"`grep __regex_t regex.h`\"";
1261 sed = "s/regex_t/__regex_t/g";
1262 sed = "s/regoff_t/__regoff_t/g";
1263 sed = "s/regmatch_t/__regmatch_t/g";
1267 hackname = osf_namespace_b;
1269 test = " -r reg_types.h";
1270 test = " -r sys/lc_core.h";
1271 test = " -n \"`grep '} regex_t;' reg_types.h`\"";
1272 test = " -z \"`grep __regex_t regex.h`\"";
1274 sed = "/#include <reg_types.h>/a\\\n"
1275 "typedef __regex_t\tregex_t;\\\n"
1276 "typedef __regoff_t\tregoff_t;\\\n"
1277 "typedef __regmatch_t\tregmatch_t;\n";
1282 * Fix __page_size* declarations in pthread.h AIX 4.1.[34].
1283 * The original ones fail if uninitialized externs are not common.
1284 * This is the default for all ANSI standard C++ compilers.
1287 hackname = pthread_page_size;
1289 select = "^int __page_size";
1290 sed = "s/^int __page_size/extern int __page_size/";
1295 * Fix return type of fread and fwrite on sysV68
1298 hackname = read_ret_type;
1300 select = "extern int\t.*, fread\\(\\), fwrite\\(\\)";
1301 sed = "s/^\\(extern int\tfclose(), fflush()\\), "
1302 "\\(fread(), fwrite()\\)\\(.*\\)$"
1303 "/extern unsigned int\t\\2;\\\n\\1\\3/";
1308 * function class(double x) conflicts with C++ keyword on rs/6000
1311 hackname = rs6000_double;
1313 select = '[^a-zA-Z_]class\(';
1315 sed = "/class[(]/i\\\n#ifndef __cplusplus\n";
1316 sed = "/class[(]/a\\\n#endif\n";
1321 * Wrong fchmod prototype on RS/6000.
1324 hackname = rs6000_fchmod;
1326 select = 'fchmod\(char';
1327 sed = 's/fchmod(char \*/fchmod(int/';
1332 * parameters conflict with C++ new on rs/6000
1335 hackname = rs6000_param;
1339 sed = 's@rename(const char \*old, const char \*new)@'
1340 'rename(const char *_old, const char *_new)@';
1345 * Sony NEWSOS 5.0 does not support the complete ANSI C standard.
1349 hackname = sony_ctype;
1351 test = " -x /bin/sony";
1352 test = " ! -z \"`if /bin/sony ; then echo true ; fi`\"";
1353 sed = "s/__ctype/_ctype/g";
1358 * Incorrect #include in Sony News-OS 3.2.
1361 hackname = sony_include;
1362 files = machine/machparam.h;
1363 select = '"\.\./machine/endian.h"';
1364 sed = 's@"../machine/endian.h"@<machine/endian.h>@';
1369 * Sony NEWSOS 5.0 does not support the complete ANSI C standard.
1373 hackname = sony_stdio;
1375 test = " -x /bin/sony";
1376 test = " ! -z \"`if /bin/sony ; then echo true ; fi`\"";
1377 sed = "s/__filbuf/_filbuf/g\n"
1378 "s/__flsbuf/_flsbuf/g\n"
1384 * Add a `static' declaration of `getrnge' into <regexp.h>.
1386 * Don't do this if there is already a `static void getrnge' declaration
1387 * present, since this would cause a redeclaration error. Solaris 2.x has
1388 * such a declaration.
1392 hackname = static_getrnge;
1394 bypass = "static void getrnge";
1395 sed = "/^static int[ \t]*size;/c\\\n"
1396 "static int size ;\\\n\\\n"
1397 "static int getrnge ();";
1402 * a missing semi-colon at the end of the statsswtch structure definition.
1405 hackname = statsswtch;
1406 files = rpcsvc/rstat.h;
1407 select = "boottime$";
1408 sed = "s/boottime$/boottime;/";
1413 * Don't use or define the name va_list in stdio.h.
1414 * This is for ANSI and also to interoperate properly with gcc's varargs.h.
1415 * Arrange for stdio.h to use stdarg.h to define __gnuc_va_list
1418 hackname = stdio_va_list;
1422 * Use __gnuc_va_list in arg types in place of va_list.
1423 * On 386BSD use __gnuc_va_list instead of _VA_LIST_. We're hoping the
1424 * trailing parentheses and semicolon save all other systems from this.
1425 * Define __va_list__ (something harmless and unused) instead of va_list.
1426 * Don't claim to have defined va_list.
1429 "if ( egrep \"__need___va_list\" $file ) > /dev/null 2>&1 ; then
1432 echo \"#define __need___va_list\"
1433 echo \"#include <stdarg.h>\"
1436 sed -e 's@ va_list @ __gnuc_va_list @' \\
1437 -e 's@ va_list)@ __gnuc_va_list)@' \\
1438 -e 's@ _BSD_VA_LIST_))@ __gnuc_va_list))@' \\
1439 -e 's@ _VA_LIST_));@ __gnuc_va_list));@' \\
1440 -e 's@ va_list@ __va_list__@' \\
1441 -e 's@\\*va_list@*__va_list__@' \\
1442 -e 's@ __va_list)@ __gnuc_va_list)@' \\
1443 -e 's@GNUC_VA_LIST@GNUC_Va_LIST@' \\
1444 -e 's@_NEED___VA_LIST@_NEED___Va_LIST@' \\
1445 -e 's@VA_LIST@DUMMY_VA_LIST@' \\
1446 -e 's@_Va_LIST@_VA_LIST@'";
1451 * Check for strict ansi compliance
1455 hackname = strict_ansi;
1456 select = "__STDC__[ \t]*[=!]=[ \t]*[01]";
1457 sed = "s/__STDC__[ \t]*==[ \t]*0/!defined (__STRICT_ANSI__)/g";
1458 sed = "s/__STDC__[ \t]*!=[ \t]*0/defined (__STRICT_ANSI__)/g";
1459 sed = "s/__STDC__[ \t]*==[ \t]*1/defined (__STRICT_ANSI__)/g";
1460 sed = "s/__STDC__[ \t]*!=[ \t]*1/!defined (__STRICT_ANSI__)/g";
1465 * Fix bogus #ifdef on SunOS 4.1.
1468 hackname = sun_bogus_ifdef;
1469 files = "hsfs/hsfs_spec.h";
1470 files = "hsfs/iso_spec.h";
1471 select = '#ifdef __i386__ || __vax__';
1472 sed = "s/\\#ifdef __i386__ || __vax__/\\#if __i386__ || __vax__/g";
1477 * Fix bogus #ifdef on SunOS 4.1.
1480 hackname = sun_bogus_ifdef_sun4c;
1481 files = "hsfs/hsnode.h";
1482 select = '#ifdef __i386__ || __sun4c__';
1483 sed = "s/\\#ifdef __i386__ || __sun4c__/\\#if __i386__ || __sun4c__/g";
1488 * Fix the CAT macro in SunOS memvar.h.
1491 hackname = sun_catmacro;
1492 files = pixrect/memvar.h;
1493 select = "^#define[ \t]+CAT\\(a,b\\)";
1494 sed = "/^#define[ \t]CAT(a,b)/ i\\\n"
1495 "#ifdef __STDC__ \\\n"
1496 "#define CAT(a,b) a##b\\\n"
1499 sed = "/^#define[ \t]CAT(a,b)/ a\\\n"
1505 * Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
1506 * Also fix return type of {m,re}alloc in <malloc.h> on sysV68
1509 hackname = sun_malloc;
1512 sed = "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g";
1513 sed = "s/int[ \t][ \t]*free/void\tfree/g";
1514 sed = "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g";
1515 sed = "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g";
1520 * Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
1521 * declaration on Sun OS 4.x. We must only fix this on Sun OS 4.x, because
1522 * many other systems have similar text but correct versions of the file.
1523 * To ensure only Sun's is fixed, we grep for a likely unique string.
1524 * Fix also on sysV68 R3V7.1 (head/memory.h\t50.1\t )
1527 hackname = sun_memcpy;
1529 select = "/\\*\t@\\(#\\)"
1530 "(head/memory.h\t50.1\t "
1531 "|memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";
1533 sed = "1i\\\n/* This file was generated by fixincludes */\\\n"
1534 "#ifndef __memory_h__\\\n"
1535 "#define __memory_h__\\\n\\\n"
1536 "#ifdef __STDC__\\\n"
1537 "extern void *memccpy();\\\n"
1538 "extern void *memchr();\\\n"
1539 "extern void *memcpy();\\\n"
1540 "extern void *memset();\\\n"
1542 "extern char *memccpy();\\\n"
1543 "extern char *memchr();\\\n"
1544 "extern char *memcpy();\\\n"
1545 "extern char *memset();\\\n"
1546 "#endif /* __STDC__ */\\\n\\\n"
1547 "extern int memcmp();\\\n\\\n"
1548 "#endif /* __memory_h__ */\n";
1555 * Check for yet more missing ';' in struct (in SunOS 4.0.x)
1558 hackname = sun_rusers_semi;
1559 files = rpcsvc/rusers.h;
1561 sed = "/^struct/,/^};/s/_cnt$/_cnt;/";
1566 * signal.h on SunOS defines signal using (),
1567 * which causes trouble when compiling with g++ -pedantic.
1570 hackname = sun_signal;
1571 files = sys/signal.h;
1573 select = "^void\t" '\(\*signal\(\)\)\(\);';
1575 sed = "/^void\t" '(\*signal())();$/i' "\\\n"
1576 "#ifdef __cplusplus" "\\\n"
1577 "void\t(*signal(...))(...);" "\\\n"
1580 sed = "/^void\t" '(\*signal())();$/a' "\\\n"
1586 * Apply fix this to all OSs since this problem seems to effect
1587 * more than just SunOS. In general, fixes which are triggered
1588 * by a specific target are bad.
1591 hackname = sun_auth_proto;
1597 * Select those files containing '(*name)()'.
1599 select = '\(\*[a-z][a-z_]*\)\(\)';
1601 '/^\(.*(\*[a-z][a-z_]*)(\)' '\();.*\)'
1603 "#ifdef __cplusplus\\\n"
1613 * math.h on SunOS 4 puts the declaration of matherr before the definition
1614 * of struct exception, so the prototype (added by fixproto) causes havoc.
1617 hackname = sunos_matherr_decl;
1620 * Once a declaration for 'struct exception' is found,
1621 * stop trying to insert a forward reference for it.
1623 sed = "/^struct exception/,$b";
1624 sed = "/matherr/i\\\nstruct exception;\n";
1629 * Correct the return type for strlen in strings.h in SunOS 4.
1632 hackname = sunos_strlen;
1634 sed = "s/int[ \t]*strlen();/__SIZE_TYPE__ strlen();/";
1639 * Solaris math.h and floatingpoint.h define __P without protection,
1640 * which conflicts with the fixproto definition. The fixproto
1641 * definition and the Solaris definition are used the same way.
1647 files = floatingpoint.h;
1648 select = "^#define[ \t]*__P";
1649 sed = "/^#define[ \t]*__P/i\\\n#ifndef __P\n";
1650 sed = "/^#define[ \t]*__P/a\\\n#endif\n";
1655 * Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
1656 * that is visible to any ANSI compiler using this include. Simply
1657 * delete the lines that #define some string functions to internal forms.
1661 hackname = svr4_disable_opt;
1663 select = '#define.*__std_hdr_';
1664 sed = '/#define.*__std_hdr_/d';
1669 * Conditionalize some of <sys/endian.h> on __GNUC__ and __GNUG__.
1673 hackname = svr4_endian;
1674 files = sys/endian.h;
1675 bypass = '__GNUC__';
1677 sed = "/#\tifdef\t__STDC__/i\\\n"
1678 "# if !defined (__GNUC__) && !defined (__GNUG__)\n";
1680 sed = "/#\t\tinclude\t<sys\\/byteorder.h>/s/\t\t/ /";
1682 sed = "/# include\t<sys\\/byteorder.h>/i\\\n"
1683 "# endif /* !defined (__GNUC__) && !defined (__GNUG__) */\n";
1688 * Remove useless extern keyword from struct forward declarations
1689 * in <sys/stream.h> and <sys/strsubr.h>
1693 hackname = svr4_extern_struct;
1694 files = sys/stream.h;
1695 files = sys/strsubr.h;
1696 select = 'extern struct [a-z_]*;';
1697 sed = 's/extern struct \([a-z][a-z_]*\)/struct \1/';
1702 * Fix declarations of `ftw' and `nftw' in <ftw.h>. On some/most SVR4
1703 * systems the file <ftw.h> contains extern declarations of these
1704 * functions followed by explicitly `static' definitions of these
1705 * functions... and that's not allowed according to ANSI C. (Note
1706 * however that on Solaris, this header file glitch has been pre-fixed by
1707 * Sun. In the Solaris version of <ftw.h> there are no static
1708 * definitions of any function so we don't need to do any of this stuff
1714 hackname = svr4_ftw;
1716 select = '^extern int ftw\(const';
1718 sed = '/^extern int ftw(const/i' "\\\n"
1719 "#if !defined(_STYPES)\\\n"
1724 sed = 's/extern \(int ftw(const.*\)$/\1/';
1725 sed = "/^extern int nftw/i\\\n"
1726 "#if defined(_STYPES)\\\n"
1731 sed = 's/extern \(int nftw.*\)$/\1/';
1732 sed = "/^extern int ftw(),/c\\\n"
1733 "#if !defined(_STYPES)\\\n"
1739 "#if defined(_STYPES)\\\n"
1751 * Fix broken decl of getcwd present on some svr4 systems.
1755 hackname = svr4_getcwd;
1758 select = 'getcwd\(char \*, int\)';
1760 sed = 's/getcwd(char \*, int)/getcwd(char *, size_t)/';
1769 hackname = svr4_kernel;
1770 files = fs/rfs/rf_cache.h;
1774 files = sys/getpages.h;
1776 files = sys/cmn_err.h;
1777 files = sys/kdebugger.h;
1779 sed = "1i\\\n#ifdef _KERNEL";
1780 sed = "$a\\\n#endif /* _KERNEL */";
1785 * Delete any #defines of `__i386' which may be present in <ieeefp.h>. They
1786 * tend to conflict with the compiler's own definition of this symbol. (We
1787 * will use the compiler's definition.)
1788 * Likewise __sparc, for Solaris, and __i860, and a few others
1789 * (guessing it is necessary for all of them).
1793 hackname = svr4_mach_defines;
1795 select = "#define[ \t]*__(i386|i860|mips|sparc|m88k|m68k)[ \t]";
1796 sed = "/#define[ \t]*__\\(i386|i860|mips|sparc|m88k|m68k\\)[ \t]/d";
1801 * Fix declarations of `makedev', `major', and `minor' in <sys/mkdev.h>.
1805 hackname = svr4_mkdev;
1806 files = sys/mkdev.h;
1808 sed = "/^dev_t makedev(const/c\\\n"
1809 "static dev_t makedev(const major_t, const minor_t);";
1811 sed = "/^dev_t makedev()/c\\\n"
1812 "static dev_t makedev();";
1814 sed = "/^major_t major(const/c\\\n"
1815 "static major_t major(const dev_t);";
1817 sed = "/^major_t major()/c\\\n"
1818 "static major_t major();";
1820 sed = "/^minor_t minor(const/c\\\n"
1821 "static minor_t minor(const dev_t);";
1823 sed = "/^minor_t minor()/c\\\n"
1824 "static minor_t minor();";
1829 * Fix reference to NC_NPI_RAW in <sys/netcspace.h>.
1830 * Also fix types of array initializers.
1834 hackname = svr4_netcspace;
1835 files = sys/netcspace.h;
1836 select = 'NC_NPI_RAW';
1837 sed = 's/NC_NPI_RAW/NC_TPI_RAW/g';
1838 sed = 's/NC_/(unsigned long) NC_/';
1843 * Fix reference to NMSZ in <sys/adv.h>.
1847 hackname = svr4_nmsz;
1849 select = '\[NMSZ\]';
1850 sed = 's/\[NMSZ\]/\[RFS_NMSZ\]/g';
1855 * Completely replace <sys/varargs.h> with a file that includes gcc's
1856 * stdarg.h or varargs.h files as appropriate.
1860 hackname = svr4_no_varargs;
1861 files = sys/varargs.h;
1862 shell = "cat > /dev/null\n"
1864 "/* This file was generated by fixincludes. */\n"
1865 "#ifndef _SYS_VARARGS_H\n"
1866 "#define _SYS_VARARGS_H\n\n"
1869 "#include <stdarg.h>\n"
1871 "#include <varargs.h>\n"
1874 "#endif /* _SYS_VARARGS_H */\n"
1880 * Fix broken decl of profil present on some svr4 systems.
1884 hackname = svr4_profil;
1888 sed = 's/profil(unsigned short \*, unsigned int, '
1889 'unsigned int, unsigned int)'
1890 '/profil(unsigned short *, size_t, int, unsigned)/';
1895 * Convert functions to prototype form, and fix arg names in <sys/stat.h>.
1899 hackname = svr4_proto_form;
1901 select = 'const extern';
1903 sed = "/^stat([ \t]*[^c]/ {\nN\nN\n"
1908 sed = "/^lstat([ \t]*[^c]/ {\nN\nN\n"
1913 sed = "/^fstat([ \t]*[^i]/ {\nN\nN\n"
1918 sed = "/^mknod([ \t]*[^c]/{\nN\nN\nN\n"
1923 sed = "1,$s/\\([^A-Za-z]\\)path\\([^A-Za-z]\\)/\\1__path\\2/g";
1924 sed = "1,$s/\\([^A-Za-z]\\)buf\\([^A-Za-z]\\)/\\1__buf\\2/g";
1925 sed = "1,$s/\\([^A-Za-z]\\)fd\\([^A-Za-z]\\)/\\1__fd\\2/g";
1926 sed = "1,$s/ret\\([^u]\\)/__ret\\1/g";
1927 sed = "1,$s/\\([^_]\\)mode\\([^_]\\)/\\1__mode\\2/g";
1928 sed = "1,$s/\\([^_r]\\)dev\\([^_]\\)/\\1__dev\\2/g";
1933 * Add a prototyped declaration of mmap to <sys/mman.h>.
1937 hackname = svr4_proto_mmap;
1939 select = '^extern caddr_t mmap();$';
1940 sed = '/^extern caddr_t mmap();$/c' "\\\n"
1941 "#ifdef __STDC__\\\n"
1942 "extern caddr_t mmap (caddr_t, size_t, int, int, int, off_t);\\\n"
1943 "#else /* !defined(__STDC__) */\\\n"
1944 "extern caddr_t mmap ();\\\n"
1945 "#endif /* !defined(__STDC__) */\\\n";
1950 * Add a #define of _SIGACTION_ into <sys/signal.h>.
1954 hackname = svr4_sigaction;
1955 files = sys/signal.h;
1956 sed = "/^struct sigaction {/i\\\n"
1957 "#define _SIGACTION_";
1958 sed = 's/(void *(\*)())/(void (*)(int))/';
1963 * Put storage class at start of decl, to avoid warning.
1967 hackname = svr4_storage_class;
1968 files = rpc/types.h;
1969 select = 'const extern';
1970 sed = 's/const extern/extern const/g';
1975 * Fix return value of mem{ccpy,chr,cpy,set} and str{len,spn,cspn}
1976 * in string.h on sysV68
1977 * Correct the return type for strlen in string.h on Lynx.
1978 * Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
1979 * Add missing const for strdup on OSF/1 V3.0.
1980 * On sysV88 layout is slightly different.
1983 hackname = systypes;
1984 files = "sys/types.h";
1986 files = "sys/stdtypes.h";
1990 select = "typedef[ \t]+[a-z_][ \ta-z_]*[ \t]"
1991 "(size|ptrdiff|wchar)_t";
1993 sed = "/^[ \t]*\\*[ \t]*typedef unsigned int size_t;/N";
1995 sed = "s/^\\([ \t]*\\*[ \t]*typedef unsigned int size_t;\\n"
1996 "[ \t]*\\*\\/\\)/\\1\\\n"
1997 "#ifndef __SIZE_TYPE__\\\n"
1998 "#define __SIZE_TYPE__ long unsigned int\\\n"
2000 "typedef __SIZE_TYPE__ size_t;\\\n/";
2002 sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/i\\\n"
2003 "#ifndef __SIZE_TYPE__\\\n"
2004 "#define __SIZE_TYPE__ long unsigned int\\\n"
2007 sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/"
2008 "typedef __SIZE_TYPE__ size_t/";
2010 sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/i\\\n"
2011 "#ifndef __PTRDIFF_TYPE__\\\n"
2012 "#define __PTRDIFF_TYPE__ long int\\\n"
2015 sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/"
2016 "typedef __PTRDIFF_TYPE__ ptrdiff_t/";
2018 sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/i\\\n"
2019 "#ifndef __WCHAR_TYPE__\\\n"
2020 "#define __WCHAR_TYPE__ int\\\n"
2022 "#ifndef __cplusplus\n";
2024 sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/a\\\n"
2027 sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/"
2028 "typedef __WCHAR_TYPE__ wchar_t/";
2033 * Fix return type of exit and abort in <stdlib.h> on SunOS 4.1.
2034 * Also wrap protection around size_t for m88k-sysv3 systems.
2035 * We use a funny name to ensure it follows 'systypes' fix.
2038 hackname = systypes_for_aix;
2039 files = sys/types.h;
2040 select = "typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t";
2041 bypass = "_GCC_SIZE_T";
2043 sed = "/typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t/i\\\n"
2044 "#ifndef _GCC_SIZE_T\\\n"
2045 "#define _GCC_SIZE_T\n";
2047 sed = "/typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t/a\\\n"
2053 * if the #if says _cplusplus, not the double underscore __cplusplus
2057 hackname = sysv68_string;
2060 sed = "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/";
2061 sed = "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/";
2062 sed = "s/strdup(char \\*s1);/strdup(const char *s1);/";
2063 sed = "/^extern char$/N";
2064 sed = "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/";
2065 sed = "/^\tstrncmp(),$/N";
2066 sed = "s/^\\(\tstrncmp()\\),\\n\\(\tstrlen(),\\)$/\\1;\\\n"
2067 "extern unsigned int\\\n\\2/";
2068 sed = "/^extern int$/N";
2069 sed = "s/^extern int\\(\\n\tstrlen(),\\)/extern size_t\\1/";
2074 * Fix return type of exit and abort in <stdlib.h>
2075 * Also wrap protection around size_t.
2078 hackname = sysz_stdlib_for_sun;
2081 sed = "s/int\tabort/void\tabort/g";
2082 sed = "s/int\tfree/void\tfree/g";
2083 sed = "s/char[ \t]*\\*[ \t]*calloc/void \\*\tcalloc/g";
2084 sed = "s/char[ \t]*\\*[ \t]*malloc/void \\*\tmalloc/g";
2085 sed = "s/char[ \t]*\\*[ \t]*realloc/void \\*\trealloc/g";
2086 sed = "s/char[ \t]*\\*[ \t]*bsearch/void \\*\tbsearch/g";
2087 sed = "s/int[ \t][ \t]*exit/void\texit/g";
2089 sed = "/typedef[ \ta-zA-Z_]*[ \t]size_t[ \t]*;/i\\\n"
2090 "#ifndef _GCC_SIZE_T\\\n"
2091 "#define _GCC_SIZE_T\n";
2093 sed = "/typedef[ \ta-zA-Z_]*[ \t]size_t[ \t]*;/a\\\n"
2099 * Fix this Sun file to avoid interfering with stddef.h.
2100 * We use a funny name to ensure it follows 'systypes' fix.
2103 hackname = sysz_stdtypes_for_sun;
2104 files = sys/stdtypes.h;
2105 sed = "/[\t ]size_t.*;/i\\\n"
2106 "#ifndef _GCC_SIZE_T\\\n"
2107 "#define _GCC_SIZE_T\n";
2109 sed = "/[\t ]size_t.*;/a\\\n"
2112 sed = "/[\t ]ptrdiff_t.*;/i\\\n"
2113 "#ifndef _GCC_PTRDIFF_T\\\n"
2114 "#define _GCC_PTRDIFF_T\n";
2116 sed = "/[\t ]ptrdiff_t.*;/a\\\n"
2119 sed = "/[\t ]wchar_t.*;/i\\\n"
2120 "#ifndef _GCC_WCHAR_T\\\n"
2121 "#define _GCC_WCHAR_T\n";
2123 sed = "/[\t ]wchar_t.*;/a\\\n"
2129 * Fix this file to avoid interfering with stddef.h,
2130 * but don't mistakenly match ssize_t present in AIX for the ps/2,
2131 * or typedefs which use (but do not set) size_t.
2134 hackname = tinfo_cplusplus;
2136 sed = "s/[ \t]_cplusplus/ __cplusplus/";
2141 * Cancel out ansi_compat.h on Ultrix. Replace it with empty file.
2144 hackname = ultrix_ansi_compat;
2145 files = ansi_compat.h;
2147 sed = "1i\\\n/* This file intentionally left blank. */\n";
2153 * Ultrix V4.[35] puts the declaration of uname before the definition
2154 * of struct utsname, so the prototype (added by fixproto) causes havoc.
2157 hackname = ultrix_fix_fixproto;
2158 files = sys/utsname.h;
2160 sed = "/^[ \t]*extern[ \t]*int[ \t]*uname();$/i\\\n"
2161 "struct utsname;\n";
2166 * parameter to atof not const on DECstation Ultrix V4.0 and NEWS-OS 4.2R.
2167 * also get rid of bogus inline definitions in HP-UX 8.0
2170 hackname = ultrix_atof_param;
2173 sed = "s@atof(\\([ \t]*char[ \t]*\\*[^)]*\\))@atof(const \\1)@";
2174 sed = "s@inline int abs(int [a-z][a-z]*) {.*}@extern \"C\" int abs(int);@";
2175 sed = "s@inline double abs(double [a-z][a-z]*) {.*}@@";
2176 sed = "s@inline int sqr(int [a-z][a-z]*) {.*}@@";
2177 sed = "s@inline double sqr(double [a-z][a-z]*) {.*}@@";
2182 * parameters not const on DECstation Ultrix V4.0 and OSF/1.
2185 hackname = ultrix_const;
2188 sed = 's@perror( char \*__s );@perror( const char *__s );@';
2189 sed = 's@fputs( char \*__s,@fputs( const char *__s,@';
2190 sed = 's@fopen( char \*__filename, char \*__type );@'
2191 'fopen( const char *__filename, const char *__type );@';
2192 sed = 's@fwrite( void \*__ptr,@fwrite( const void *__ptr,@';
2193 sed = 's@fscanf( FILE \*__stream, char \*__format,@'
2194 'fscanf( FILE *__stream, const char *__format,@';
2195 sed = 's@scanf( char \*__format,@scanf( const char *__format,@';
2196 sed = 's@sscanf( char \*__s, char \*__format,@'
2197 'sscanf( const char *__s, const char *__format,@';
2198 sed = 's@popen(char \*, char \*);@popen(const char *, const char *);@';
2199 sed = 's@tempnam(char\*,char\*);@tempnam(const char*,const char*);@';
2204 * Check for bad #ifdef line (in Ultrix 4.1)
2207 hackname = ultrix_ifdef;
2208 select = "#ifdef KERNEL";
2210 sed = "s/#ifdef KERNEL/#if defined(KERNEL)/";
2215 * Avoid nested comments on Ultrix 4.3.
2218 hackname = ultrix_nested_cmnt;
2220 sed = "s@^\\( \\*\tint protocol; \\)/\\*@\\1*/ /*@";
2225 * Check for superfluous `static' (in Ultrix 4.2)
2226 * On Ultrix 4.3, includes of other files (r3_cpu.h,r4_cpu.h) is broken.
2229 hackname = ultrix_static;
2230 files = machine/cpu.h;
2231 select = '#include "r[34]_cpu';
2232 sed = "s/^static struct tlb_pid_state/struct tlb_pid_state/";
2233 sed = 's/^#include "r3_cpu\.h"$/#include <machine\/r3_cpu\.h>/';
2234 sed = 's/^#include "r4_cpu\.h"$/#include <machine\/r4_cpu\.h>/';
2239 * Fix multiple defines for NULL
2242 hackname = undefine_null;
2243 select = "^#[ \t]*define[ \t]*[ \t]NULL[ \t]";
2244 bypass = "#[ \t]*(ifn|un)def[ \t]*[ \t]NULL($|[ \t])";
2245 sed = "/^#[ \t]*define[ \t][ \t]*NULL[ \t]/i\\\n"
2251 * Fix definitions of macros used by va-i960.h in VxWorks header file.
2254 hackname = va_i960_macro;
2255 files = arch/i960/archI960.h;
2256 select = "__(vsiz|vali|vpad|alignof__)";
2257 sed = "s/__vsiz/__vxvsiz/";
2258 sed = "s/__vali/__vxvali/";
2259 sed = "s/__vpad/__vxvpad/";
2260 sed = "s/__alignof__/__vxalignof__/";
2265 * AIX headers define NULL to be cast to a void pointer,
2266 * which is illegal in ANSI C++.
2269 hackname = void_null;
2279 files = sys/param.h;
2280 files = sys/types.h;
2281 select = "#[ \t]*define[ \t][ \t]*NULL[ \t].*void";
2282 sed = "s/^#[ \t]*define[ \t]*NULL[ \t]*((void[ \t]*\\*)0)"
2288 * Make VxWorks header which is almost gcc ready fully gcc ready.
2291 hackname = vxworks_gcc_problem;
2292 files = types/vxTypesBase.h;
2293 select = "__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";
2295 sed = "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/"
2298 sed = "/[ \t]size_t/i\\\n"
2299 "#ifndef _GCC_SIZE_T\\\n"
2300 "#define _GCC_SIZE_T\n";
2302 sed = "/[ \t]size_t/a\\\n"
2305 sed = "/[ \t]ptrdiff_t/i\\\n"
2306 "#ifndef _GCC_PTRDIFF_T\\\n"
2307 "#define _GCC_PTRDIFF_T\n";
2309 sed = "/[ \t]ptrdiff_t/a\\\n"
2312 sed = "/[ \t]wchar_t/i\\\n"
2313 "#ifndef _GCC_WCHAR_T\\\n"
2314 "#define _GCC_WCHAR_T\n";
2316 sed = "/[ \t]wchar_t/a\\\n"
2322 * Fix VxWorks <time.h> to not require including <vxTypes.h>.
2325 hackname = vxworks_needs_vxtypes;
2327 select = "uint_t[ \t][ \t]*_clocks_per_sec";
2328 sed = "s/uint_t/unsigned int/";
2333 * Fix VxWorks <sys/stat.h> to not require including <vxWorks.h>.
2336 hackname = vxworks_needs_vxworks;
2338 test = " -r types/vxTypesOld.h";
2339 test = " -n \"`egrep '#include' $file`\"";
2340 test = " -n \"`egrep ULONG $file`\"";
2341 select = "#[ \t]define[ \t][ \t]*__INCstath";
2343 sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
2344 "#include <types/vxTypesOld.h>\n";
2349 * Another bad dependency in VxWorks 5.2 <time.h>.
2352 hackname = vxworks_time;
2354 select = "VOIDFUNCPTR";
2355 test = " -r vxWorks.h";
2356 sed = "/VOIDFUNCPTR/i\\\n"
2357 "#ifndef __gcc_VOIDFUNCPTR_defined\\\n"
2358 "#ifdef __cplusplus\\\n"
2359 "typedef void (*__gcc_VOIDFUNCPTR) (...);\\\n"
2361 "typedef void (*__gcc_VOIDFUNCPTR) ();\\\n"
2363 "#define __gcc_VOIDFUNCPTR_defined\\\n"
2366 sed = "s/VOIDFUNCPTR/__gcc_VOIDFUNCPTR/g";
2371 * There are several name conflicts with C++ reserved words in X11 header
2372 * files. These are fixed in some versions, so don't do the fixes if
2373 * we find __cplusplus in the file. These were found on the RS/6000.
2376 hackname = x11_class;
2377 files = X11/ShellP.h;
2378 bypass = __cplusplus;
2379 sed = "/char \\*class;/i\\\n"
2380 "#ifdef __cplusplus\\\n"
2381 "\tchar *c_class;\\\n"
2383 sed = "/char \\*class;/a\\\n"
2389 * class in Xm/BaseClassI.h
2392 hackname = x11_class_usage;
2393 files = Xm/BaseClassI.h;
2394 bypass = "__cplusplus";
2395 sed = "s/ class[)]/ c_class)/g";
2400 * new in Xm/Traversal.h
2404 files = Xm/Traversal.h;
2405 bypass = __cplusplus;
2407 sed = "/Widget\told, new;/i\\\n"
2408 "#ifdef __cplusplus\\\n"
2409 "\tWidget\told, c_new;\\\n"
2412 sed = "/Widget\told, new;/a\\\n"
2415 sed = "s/Widget new,/Widget c_new,/g";
2420 * Incorrect sprintf declaration in X11/Xmu.h
2423 hackname = x11_sprintf;
2425 sed = "s,^extern char \\*\tsprintf();$,#ifndef __STDC__\\\n"
2426 "extern char *\tsprintf();\\\n"
2427 "#endif /* !defined __STDC__ */,";
2431 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2435 * We sure do hope that broken fixes and needed fixes are never
2436 * applied to the same file!! :-}
2440 * Purge some HP-UX 11 files that are only borken after they are "fixed".
2443 hackname = zzz_ki_iface;
2444 files = sys/ki_iface.h;
2445 select = 'These definitions are for HP Internal developers';
2447 "echo \"Removing incorrect fix to <$file>\" >&2\n"
2448 "rm -f ${DESTFILE} ${DESTDIR}/fixinc.tmp\n"
2454 * Purge some HP-UX 11 files that are only borken after they are "fixed".
2459 select = '11.00 HP-UX LP64';
2461 "echo \"Removing incorrect fix to <$file>\" >&2\n"
2462 "rm -f ${DESTFILE} ${DESTDIR}/fixinc.tmp\n"
2468 * Purge some HP-UX 11 files that are only borken after they are "fixed".
2471 hackname = zzz_ki_calls;
2472 files = sys/ki_calls.h;
2473 select = 'kthread_create_caller_t';
2475 "echo \"Removing incorrect fix to <$file>\" >&2\n"
2476 "rm -f ${DESTFILE} ${DESTDIR}/fixinc.tmp\n"
2482 * Purge some HP-UX 11 files that are only borken after they are "fixed".
2485 hackname = zzz_ki_defs;
2486 files = sys/ki_defs.h;
2487 select = 'Kernel Instrumentation Definitions';
2489 "echo \"Removing incorrect fix to <$file>\" >&2\n"
2490 "rm -f ${DESTFILE} ${DESTDIR}/fixinc.tmp\n"
2496 * This file on SunOS 4 has a very large macro. When the sed loop
2497 * tries pull it in, it overflows the pattern space size of the SunOS
2498 * sed (GNU sed does not have this problem). Since the file does not
2499 * require fixing, we remove it from the fixed directory.
2502 hackname = zzz_bad_fixes;
2503 files = sundev/ipi_error.h;
2504 /* shouldn't there be a select expression here??? */
2506 "echo \"Removing incorrect fix to <$file>\" >&2\n"
2507 "rm -f ${DESTFILE} ${DESTDIR}/fixinc.tmp\n"
2513 * Purge some HP-UX 11 files that are only borken after they are "fixed".
2516 hackname = zzz_time;
2518 select = '11.0 and later representation of ki time';
2520 "echo \"Removing incorrect fix to <$file>\" >&2\n"
2521 "rm -f ${DESTFILE} ${DESTDIR}/fixinc.tmp\n"