OSDN Git Service

(pred): Fix additional typo in `comparison_operator'.
[pf3gnuchains/gcc-fork.git] / gcc / fixincludes
index 294077a..7d453a2 100755 (executable)
@@ -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@..$@@'`
+         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@..$@@'`
          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
@@ -270,17 +282,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.BSD43__IO/           s/'\''\([cgx]\)'\''/\1/g
-         /[^A-Z_]CTRL[         ]*(/            s/\([^'\'']\))/'\''\1'\'')/
-         /[^A-Z]_CTRL[         ]*(/            s/\([^'\'']\))/'\''\1'\'')/
-         /#define.CTRL/                s/'\''\([cgx]\)'\''/\1/g
-         /#define._CTRL/               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.BSD43_CTRL/          s/'\''\([cgx]\)'\''/\1/g
          /#[el]*if/{
                s/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g
@@ -319,8 +334,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 +343,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 +416,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
@@ -520,24 +533,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 +550,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 +659,7 @@ if [ -r ${LIB}/$file ]; then
 fi
 
 # Fix return type of exit and abort in <stdlib.h> 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 +674,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 +706,6 @@ if [ -r ${LIB}/$file ]; then
   fi
 fi
 
-
-# Fix bogus comment in <locale.h> 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 <hsfs/hsfs_spec.h> on SunOS 4.1.
 file=hsfs/hsfs_spec.h
 if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
@@ -818,20 +802,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
@@ -858,6 +828,17 @@ if [ -r ${LIB}/$file ]; then
   fi
 fi
 
+# 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
+  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
 # declaration on Sun OS 4.x.  We must only fix this on Sun OS 4.x, because
 # many other systems have similar text but correct versions of the file.
@@ -920,16 +901,56 @@ 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
+
+# NeXT defines 'int wait(union wait*)', which conflicts with Posix.1.
+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 +981,9 @@ 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@_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
@@ -1062,16 +1085,40 @@ then
   ln -s ${INPUT}/multimedia/audio_hdr.h ${LIB}/multimedia 2>/dev/null
 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
-    rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
-  fi
-done
+# 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.
+if test -d /etc/conf/kconfig.d \
+    && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1; then
+  echo "Fixing ISC __STDC__ goof in several files..."
+  for name in stdio.h math.h ctype.h sys/limits.h sys/fcntl.h sys/dirent.h; do
+    echo $name
+    if test -r ${LIB}/$name; then
+      file=${LIB}/$name
+    else
+      file=${INPUT}/$name
+    fi
+    # 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.
+    sed \
+'s/!defined(__STDC__) && !defined(_POSIX_SOURCE)/!defined(_POSIX_SOURCE)/' \
+           < $file > ${LIB}/$name.
+    mv ${LIB}/$name. ${LIB}/$name
+  done
+  
+  echo "Fixing ISC fmod declaration"
+  # This one's already been fixed for other things.
+  file=${LIB}/math.h
+  sed 's/fmod(double)/fmod(double, double)/' <$file >$file.
+  mv $file. $file
+  
+  echo "Fixing nested comments in ISC <sys/limits.h>"
+  file=sys/limits.h
+  sed '/CHILD_MAX/s,/\* Max, Max,' < ${INPUT}/$file >${LIB}/$file.
+  sed '/OPEN_MAX/s,/\* Max, Max,' < ${LIB}/$file. >${LIB}/$file
+fi
 
 echo 'Removing unneeded directories:'
 cd $LIB