--- gcc/fixincludes 2018/04/24 18:07:46 1.1.1.5 +++ gcc/fixincludes 2018/04/24 18:11:38 1.1.1.6 @@ -5,6 +5,9 @@ # See README-fixinc for more information. +# Command to run gcc. +GCCCMD=${4-${GCCCMD-gcc}} + # Directory where gcc sources (and sometimes special include files) live. # fixincludes doesn't use this, but fixinc.svr4 does, and I want to make # sure somebody doesn't try to use arg3 for something incompatible. -- gumby @@ -66,6 +69,9 @@ echo Building fixed headers in ${LIB} if ln -s X $LIB/ShouldNotExist 2>/dev/null; then rm -f $LIB/ShouldNotExist LINKS=true +elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then + rm -f /tmp/ShouldNotExist + LINKS=true else LINKS=false fi @@ -161,9 +167,12 @@ if $LINKS; then elif expr $x : "${INPUT}/.*" > /dev/null; then # Y gets the actual target dir name, relative to ${INPUT}. y=`echo $x | sed -n "s&${INPUT}/&&p"` - echo $file '->' $y ': Making link' + # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}. + dots=`echo "$file" | + sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'` + echo $file '->' $dots$y ': Making link' rm -fr ${LIB}/$file > /dev/null 2>&1 - ln -s ${LIB}/$y ${LIB}/$file > /dev/null 2>&1 + ln -s $dots$y ${LIB}/$file > /dev/null 2>&1 else # If the link is to a dir $target outside ${INPUT}, # repoint the link at ${INPUT}/root$target @@ -201,8 +210,11 @@ if $LINKS; then ;; esac done + # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}. + dots=`echo "$file" | + sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'` rm -fr ${LIB}/$file > /dev/null 2>&1 - ln -s ${LIB}/root$x ${LIB}/$file > /dev/null 2>&1 + ln -s ${dots}root$x ${LIB}/$file > /dev/null 2>&1 treetops="$treetops $x ${LIB}/root$x" fi fi @@ -211,6 +223,7 @@ if $LINKS; then done fi +required= set x $treetops shift while [ $# != 0 ]; do @@ -270,17 +283,20 @@ while [ $# != 0 ]; do :loop /\\$/ N /\\$/ b loop - s%^\([ ]*#[ ]*endif[ ]*\)\([^/ ].*\)$%\1/* \2 */% - s%^\([ ]*#[ ]*else[ ]*\)\([^/ ].*\)$%\1/* \2 */% + s%^\([ ]*#[ ]*else\)[ ]*/[^*].*%\1% + s%^\([ ]*#[ ]*else\)[ ]*[^/ ].*%\1% + s%^\([ ]*#[ ]*endif\)[ ]*/[^*].*%\1% + s%^\([ ]*#[ ]*endif\)[ ]*\*[^/].*%\1% + s%^\([ ]*#[ ]*endif\)[ ]*[^/* ].*%\1% /\/\/[^*]/ s|//\(.*\)$|/*\1*/| /[ ]_IO[A-Z]*[ ]*(/ s/\(_IO[A-Z]*[ ]*(\)\(.\),/\1'\''\2'\'',/ /[ ]BSD43__IO[A-Z]*[ ]*(/ s/(\(.\),/('\''\1'\'',/ - /#define._IO/ s/'\''\([cgx]\)'\''/\1/g + /#define._IO/ s/'\''\([cgxtf]\)'\''/\1/g /#define.BSD43__IO/ s/'\''\([cgx]\)'\''/\1/g /[^A-Z0-9_]CTRL[ ]*(/ s/\([^'\'']\))/'\''\1'\'')/ /[^A-Z0-9]_CTRL[ ]*(/ s/\([^'\'']\))/'\''\1'\'')/ - /#define.CTRL/ s/'\''\([cgx]\)'\''/\1/g - /#define._CTRL/ s/'\''\([cgx]\)'\''/\1/g + /#define[ ]*[ ]CTRL/ s/'\''\([cgx]\)'\''/\1/g + /#define[ ]*[ ]_CTRL/ s/'\''\([cgx]\)'\''/\1/g /#define.BSD43_CTRL/ s/'\''\([cgx]\)'\''/\1/g /#[el]*if/{ s/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g @@ -309,6 +325,11 @@ while [ $# != 0 ]; do rm $2/$file else echo Fixed $file + # Find any include directives that use "file". + for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' $2/$file | sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`; do + dir=`echo $file | sed -e s'|/[^/]*$||'` + required="$required $1 $dir/$include $2/$dir/$include" + done fi fi fi @@ -319,8 +340,7 @@ done cd ${INPUT} # Install the proper definition of size_t in header files that it comes from. -for file in sys/types.h sys/stdtypes.h; -do +for file in sys/types.h stdlib.h sys/stdtypes.h; do if [ -r $file ] && [ ! -r ${LIB}/$file ]; then cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" chmod +w ${LIB}/$file 2>/dev/null @@ -329,14 +349,13 @@ do if [ -r ${LIB}/$file ]; then echo Fixing $file comment - # Extract the definition of SIZE_TYPE, if any. + # Get the definition of __SIZE_TYPE__, if any. # (This file must be called something.c). - echo "#include \"tm.h\" -gobblegobble SIZE_TYPE" > ${LIB}/types.c - foo=`cd ${LIB}; cc -E -I${ORIGDIR} -I${SRCDIR} -I${SRCDIR}/config types.c | grep gobblegobble | sed -e "s/gobblegobble[ ]*//"` + echo "__SIZE_TYPE__" > ${LIB}/types.c + foo=`${GCCCMD} -E -P ${LIB}/types.c` rm -f ${LIB}/types.c # Default to our preferred type. - if [ "$foo" = SIZE_TYPE ]; then foo="unsigned long int"; else foo=`echo $foo | sed -e 's/^.*"\(.*\)".*$/\1/'`; fi + if [ "$foo" = __SIZE_TYPE__ ]; then foo="unsigned long int"; fi sed -e "s/typedef[ a-z_]*[ ]size_t/typedef $foo size_t/" ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file if cmp $file ${LIB}/$file >/dev/null 2>&1; then @@ -403,20 +422,20 @@ fi if [ -r ${LIB}/$file ]; then echo Fixing $file -sed -e '/size_t.*;/i\ +sed -e '/[ ]size_t.*;/i\ #ifndef _GCC_SIZE_T\ #define _GCC_SIZE_T' \ - -e '/size_t.*;/a\ + -e '/[ ]size_t.*;/a\ #endif' \ - -e '/ptrdiff_t.*;/i\ + -e '/[ ]ptrdiff_t.*;/i\ #ifndef _GCC_PTRDIFF_T\ #define _GCC_PTRDIFF_T' \ - -e '/ptrdiff_t.*;/a\ + -e '/[ ]ptrdiff_t.*;/a\ #endif' \ - -e '/wchar_t.*;/i\ + -e '/[ ]wchar_t.*;/i\ #ifndef _GCC_WCHAR_T\ #define _GCC_WCHAR_T' \ - -e '/wchar_t.*;/a\ + -e '/[ ]wchar_t.*;/a\ #endif' ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file if cmp $file ${LIB}/$file >/dev/null 2>&1; then @@ -424,6 +443,26 @@ sed -e '/size_t.*;/i\ fi fi +# Fix this ARM/RISCiX file to avoid interfering with the use of __wchar_t +# in cc1plus. +file=stdlib.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e "s/\(#[ ]*ifndef[ ]*\)__wchar_t/\1_GCC_WCHAR_T/" \ + -e "s/\(#[ ]*define[ ]*\)__wchar_t/\1_GCC_WCHAR_T/" \ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm ${LIB}/$file + fi +fi + # Fix this file to avoid interfering with stddef.h, but don't mistakenly # match e.g. ssize_t present in AIX for the ps/2. file=sys/types.h @@ -446,6 +485,23 @@ sed -e '/[ ]size_t.*;/i\ fi fi +# Fix HP's use of ../machine/inline.h to refer to +# /usr/include/machine/inline.h +file=sys/spinlock.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file +fi +if [ -r ${LIB}/$file ] ; then + echo Fixing $file + sed -e 's,"../machine/inline.h",,' \ + -e 's,"../machine/psl.h",,' \ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm ${LIB}/$file + fi +fi + # Fix an error in this file: the #if says _cplusplus, not the double # underscore __cplusplus that it should be file=tinfo.h @@ -520,24 +576,6 @@ if [ -r ${LIB}/$file ]; then fi fi -# Remove nested comments created by #endifs in a comment (Ultrix 4.1) -# Only needed if commenting out junk after #endif. -file=signal.h -if [ -r $file ] && [ ! -r ${LIB}/$file ]; then - cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" - chmod +w ${LIB}/$file 2>/dev/null - chmod a+r ${LIB}/$file 2>/dev/null -fi - -if [ -r ${LIB}/$file ]; then - echo Fixing $file, nested comments - sed -e 's/^[ ]*#endif.*/#endif/' ${LIB}/$file > ${LIB}/${file}.sed - rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file - if cmp $file ${LIB}/$file >/dev/null 2>&1; then - rm -f ${LIB}/$file - fi -fi - # Check for superfluous `static' (in Ultrix 4.2) file=machine/cpu.h if [ -r $file ] && [ ! -r ${LIB}/$file ]; then @@ -555,7 +593,7 @@ if [ -r ${LIB}/$file ]; then rm ${LIB}/$file else # This file has an alternative name, mips/cpu.h. Fix that name, too. - if cmp machine/cpu.h mips/cpu.h > /dev/null 2>& 1; then + if cmp machine/cpu.h mips/cpu.h > /dev/null 2>&1; then mkdir ${LIB}/mips 2>&- ln ${LIB}/$file ${LIB}/mips/cpu.h fi @@ -664,6 +702,7 @@ if [ -r ${LIB}/$file ]; then fi # Fix return type of exit and abort in on SunOS 4.1. +# Also wrap protection around size_t for m88k-sysv3 systems. file=stdlib.h if [ -r $file ] && [ ! -r ${LIB}/$file ]; then cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" @@ -678,7 +717,13 @@ if [ -r ${LIB}/$file ]; then -e 's/char \* calloc/void \* calloc/g' \ -e 's/char \* malloc/void \* malloc/g' \ -e 's/char \* realloc/void \* realloc/g' \ - -e 's/int exit/void exit/g' ${LIB}/$file > ${LIB}/${file}.sed + -e 's/int exit/void exit/g' \ + -e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/i\ +#ifndef _GCC_SIZE_T\ +#define _GCC_SIZE_T' \ + -e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/a\ +#endif' \ + ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file if cmp $file ${LIB}/$file >/dev/null 2>&1; then rm -f ${LIB}/$file @@ -704,24 +749,6 @@ if [ -r ${LIB}/$file ]; then fi fi - -# Fix bogus comment in on SunOS 4.1. -file=locale.h -if [ -r $file ] && [ ! -r ${LIB}/$file ]; then - cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" - chmod +w ${LIB}/$file 2>/dev/null - chmod a+r ${LIB}/$file 2>/dev/null -fi - -if [ -r ${LIB}/$file ]; then - echo Fixing $file - sed -e 's%#endif / \*%#endif /\* %g' ${LIB}/$file > ${LIB}/${file}.sed - rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file - if cmp $file ${LIB}/$file >/dev/null 2>&1; then - rm -f ${LIB}/$file - fi -fi - # Fix bogus #ifdef in on SunOS 4.1. file=hsfs/hsfs_spec.h if [ -r $file ] && [ ! -r ${LIB}/$file ]; then @@ -818,20 +845,6 @@ if [ -r ${LIB}/$file ]; then fi fi -# Fix line in IRIX 4.0.1 header file. The sed script turns -# #define EM_CTRL (CUTIOC|0x1) -# into -# #define EM_CTRL (CUTIOC|0x'1') -file=sys/t3270reg.h -if [ -r ${LIB}/$file ]; then - echo Fixing $file, overeager sed script - sed -e "s/0x'1'/0x1/" ${LIB}/$file > ${LIB}/${file}.sed - rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file - if cmp $file ${LIB}/$file >/dev/null 2>&1; then - rm -f ${LIB}/$file - fi -fi - # Turning // comments into /* */ comments trashes this IRIX 4.0.1 # header file, which embeds // comments inside multi-line /* */ # comments. If this looks like the IRIX header file, we refix it by @@ -847,15 +860,27 @@ if [ -r ${LIB}/$file ]; then fi fi -# Another IRIX 4.0.1 header file contains the string "//" -file=elf_abi.h +# Some IRIX header files contains the string "//" +for file in elf_abi.h elf.h; do + if [ -r ${LIB}/$file ]; then + echo Fixing $file, overeager sed script + sed -e 's|"/\*"\*/|"//"|' ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi + fi +done + +# Same problem with a file from SunOS 4.1.3 : a header file containing +# the string "//" embedded in "/**/" +file=sbusdev/audiovar.h if [ -r ${LIB}/$file ]; then echo Fixing $file, overeager sed script - sed -e 's|"/\*"\*/|"//"|' ${LIB}/$file > ${LIB}/${file}.sed - rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file - if cmp $file ${LIB}/$file >/dev/null 2>&1; then - rm -f ${LIB}/$file - fi + rm ${LIB}/$file + sed -e 's|//.*$||g' $file > ${LIB}/$file + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null fi # Fix non-ANSI memcpy declaration that conflicts with gcc's builtin @@ -920,16 +945,78 @@ if [ -r ${LIB}/$file ]; then fi # parameters conflict with C++ new on rs/6000 -file=stdio.h +for file in stdio.h unistd.h ; do + if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + fi + + if [ -r ${LIB}/$file ]; then + echo Fixing $file, parameter name conflicts + sed -e 's@rename(const char \*old, const char \*new)@rename(const char *_old, const char *_new)@' \ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi + fi +done + +# function class(double x) conflicts with C++ keyword on rs/6000 +file=math.h if [ -r $file ] && [ ! -r ${LIB}/$file ]; then cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null fi if [ -r ${LIB}/$file ]; then - echo Fixing $file, parameter name conflicts - sed -e 's@rename(const char \*old, const char \*new)@rename(const char *_old, const char *_new)@' \ - ${LIB}/$file > ${LIB}/${file}.sed + if grep 'class[(]' ${LIB}/$file >/dev/null; then + echo Fixing $file + sed -e '/class[(]/i\ +#ifndef __cplusplus' \ + -e '/class[(]/a\ +#endif' ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm ${LIB}/$file + fi + fi +fi + +# Wrong fchmod prototype on RS/6000. +file=sys/stat.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/sys 2>/dev/null + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file, fchmod prototype + sed -e 's/fchmod(char \*/fchmod(int/' \ + ${LIB}/$file > ${LIB}/$file.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi +fi + +# 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. +file=sys/wait.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ] \ + && grep 'wait[(]union wait' ${LIB}/$file >/dev/null; then + echo Fixing $file, bad wait formal + sed -e 's@wait(union wait@wait(void@' ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file if cmp $file ${LIB}/$file >/dev/null 2>&1; then rm -f ${LIB}/$file @@ -960,7 +1047,10 @@ if [ -r ${LIB}/$file ]; then -e 's@ _VA_LIST_));@ __gnuc_va_list));@' \ -e 's@ va_list@ __va_list__@' \ -e 's@\*va_list@*__va_list__@' \ + -e 's@ __va_list)@ __gnuc_va_list)@' \ + -e 's@_NEED___VA_LIST@_NEED___Va_LIST@' \ -e 's@VA_LIST@DUMMY_VA_LIST@' \ + -e 's@_NEED___Va_LIST@_NEED___VA_LIST@' \ ${LIB}/$file >> ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file @@ -989,8 +1079,10 @@ fi if [ -r ${LIB}/$file ]; then echo Fixing $file, non-const arg sed -e 's@atof( char \*__nptr );@atof( const char *__nptr );@' \ - -e 's@inline int abs(int d) { return (d>0)?d:-d; }@@' \ - -e 's@inline double abs(double d) { return fabs(d); }@@' \ + -e 's@inline int abs(int [a-z][a-z]*) {.*}@@' \ + -e 's@inline double abs(double [a-z][a-z]*) {.*}@@' \ + -e 's@inline int sqr(int [a-z][a-z]*) {.*}@@' \ + -e 's@inline double sqr(double [a-z][a-z]*) {.*}@@' \ ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file if cmp $file ${LIB}/$file >/dev/null 2>&1; then @@ -998,6 +1090,25 @@ if [ -r ${LIB}/$file ]; then fi fi +# Avoid nested comments on Ultrix 4.3. +file=rpc/svc.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/rpc 2>/dev/null + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file, nested comment + sed -e 's@^\( \* int protocol; \)/\*@\1*/ /*@' \ + ${LIB}/$file > ${LIB}/$file.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi +fi + # In limits.h, put #ifndefs around things that are supposed to be defined # in float.h to avoid redefinition errors if float.h is included first. # On HP/UX this patch does not work, because on HP/UX limits.h uses @@ -1005,51 +1116,132 @@ fi # comment. Fortunately, HP/UX already uses #ifndefs in limits.h; if # we find a #ifndef FLT_MIN we assume that all the required #ifndefs # are there, and we do not add them ourselves. -file=limits.h -if [ -r $file ] && [ ! -r ${LIB}/$file ]; then - cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" - chmod +w ${LIB}/$file 2>/dev/null - chmod a+r ${LIB}/$file 2>/dev/null -fi +for file in limits.h sys/limits.h; do + if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/sys 2>/dev/null + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null + fi -if [ -r ${LIB}/$file ]; then - if egrep 'ifndef[ ]+FLT_MIN' ${LIB}/$file >/dev/null; then - true - else - echo Fixing $file - sed -e '/[ ]FLT_MIN[ ]/i\ + if [ -r ${LIB}/$file ]; then + if egrep 'ifndef[ ]+FLT_MIN' ${LIB}/$file >/dev/null; then + true + else + echo Fixing $file + sed -e '/[ ]FLT_MIN[ ]/i\ #ifndef FLT_MIN'\ - -e '/[ ]FLT_MIN[ ]/a\ + -e '/[ ]FLT_MIN[ ]/a\ #endif'\ - -e '/[ ]FLT_MAX[ ]/i\ + -e '/[ ]FLT_MAX[ ]/i\ #ifndef FLT_MAX'\ - -e '/[ ]FLT_MAX[ ]/a\ + -e '/[ ]FLT_MAX[ ]/a\ #endif'\ - -e '/[ ]FLT_DIG[ ]/i\ + -e '/[ ]FLT_DIG[ ]/i\ #ifndef FLT_DIG'\ - -e '/[ ]FLT_DIG[ ]/a\ + -e '/[ ]FLT_DIG[ ]/a\ #endif'\ - -e '/[ ]DBL_MIN[ ]/i\ + -e '/[ ]DBL_MIN[ ]/i\ #ifndef DBL_MIN'\ - -e '/[ ]DBL_MIN[ ]/a\ + -e '/[ ]DBL_MIN[ ]/a\ #endif'\ - -e '/[ ]DBL_MAX[ ]/i\ + -e '/[ ]DBL_MAX[ ]/i\ #ifndef DBL_MAX'\ - -e '/[ ]DBL_MAX[ ]/a\ + -e '/[ ]DBL_MAX[ ]/a\ #endif'\ - -e '/[ ]DBL_DIG[ ]/i\ + -e '/[ ]DBL_DIG[ ]/i\ #ifndef DBL_DIG'\ - -e '/[ ]DBL_DIG[ ]/a\ + -e '/[ ]DBL_DIG[ ]/a\ #endif'\ - ${LIB}/$file > ${LIB}/${file}.sed - rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + fi + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + echo Deleting ${LIB}/$file\; no fixes were needed. + rm -f ${LIB}/$file + fi fi +done + +# In math.h, put #ifndefs around things that might be defined in a gcc +# specific math-*.h file. +file=math.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e '/define[ ]HUGE_VAL[ ]/i\ +#ifndef HUGE_VAL'\ + -e '/define[ ]HUGE_VAL[ ]/a\ +#endif'\ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm -f ${LIB}/$file fi fi +# Remove erroneous parentheses in sym.h on Alpha OSF/1. +file=sym.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e 's/#ifndef(__mips64)/#ifndef __mips64/' \ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi +fi + +# Fix incorrect S_IF* definitions on m88k-sysv3. +file=sys/stat.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e 's/^\(#define[ ]*S_IS[A-Z]*(m)\)[ ]*(m[ ]*&[ ]*\(S_IF[A-Z][A-Z][A-Z][A-Z]*\)[ ]*)/\1 (((m)\&S_IFMT)==\2)/' \ + -e 's/^\(#define[ ]*S_IS[A-Z]*(m)\)[ ]*(m[ ]*&[ ]*\(0[0-9]*\)[ ]*)/\1 (((m)\&S_IFMT)==\2)/' \ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi +fi + +# Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1. +for file in stdio.h stdlib.h; do + if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null + fi + + if [ -r ${LIB}/$file ]; then + echo Fixing $file, getopt declaration + sed -e 's/getopt(int, char \*\[\],char \*)/getopt(int, char *const[], const char *)/' \ + ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi + fi +done + # These two files on SunOS 4 are included by other files # in the same directory, using "...". So we must make sure they exist # in the same directory as the other fixed files. @@ -1097,14 +1289,42 @@ if test -d /etc/conf/kconfig.d \ sed '/OPEN_MAX/s,/\* Max, Max,' < ${LIB}/$file. >${LIB}/$file fi -# These files on Ultrix 4.2 put comments around instances of #endif -# __mips. When the sed expression turns that into #endif /* __mips */ -# the comment ends prematurely. -for file in sys/audit.h sys/signal.h; do - if [ -r ${LIB}/${file} ]; then - echo Fixing $file, early comment termination - sed -e 's|^#endif /\*.*\*/|#endif|g' ${LIB}/${file} > ${LIB}/${file}.sed +# These files in Sun OS 4.x use /**/ to concatenate tokens. +for file in sparc/asm_linkage.h sun3/asm_linkage.h sun3x/asm_linkage.h \ + sun4/asm_linkage.h sun4c/asm_linkage.h sun4m/asm_linkage.h \ + sun4c/debug/asm_linkage.h sun4m/debug/asm_linkage.h; +do + if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null + fi + + if [ -r ${LIB}/$file ]; then + sed -e 's|/\*\*/|##|g' ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi + fi +done + +# These files in ARM/RISCiX use /**/ to concatenate tokens. +for file in arm/as_support.h arm/mc_type.h arm/xcb.h dev/chardefmac.h \ + dev/ps_irq.h dev/screen.h dev/scsi.h sys/tty.h Xm.acorn/XmP.h +do + if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null + fi + + if [ -r ${LIB}/$file ]; then + sed -e 's|/\*\*/|##|g' ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm -f ${LIB}/$file + fi fi done @@ -1130,8 +1350,37 @@ if $LINKS; then done fi +# Make sure that any include files referenced using double quotes +# exist in the fixed directory. This comes last since otherwise +# we might end up deleting some of these files "because they don't +# need any change." +while [ -n "$required" ]; do + newreq= + set x $required + shift + while [ $# != 0 ]; do + # $1 is the directory to copy from, $2 is the unfixed file, + # $3 is the fixed file name. + cd ${INPUT} + cd $1 + if [ -r $2 ] && [ ! -r $3 ]; then + cp $2 $3 >/dev/null 2>&1 || echo "Can't copy $2" + chmod +w $3 2>/dev/null + chmod a+r $3 2>/dev/null + echo Copied $2 + for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' $3 | sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`; do + dir=`echo $2 | sed -e s'|/[^/]*$||'` + dir2=`echo $3 | sed -e s'|/[^/]*$||'` + newreq="$newreq $1 $dir/$include $dir2/$include" + done + fi + shift; shift; shift + done + required=$newreq +done + echo 'Cleaning up DONE files.' cd $LIB -find . -name DONE -exec rm -f {} ';' +find . -name DONE -exec rm -f '{}' ';' exit 0