fixinc.math: New file to fix math.h on some systems.
authorJeff Law <law@gcc.gnu.org>
Sun, 14 Sep 1997 18:29:43 +0000 (12:29 -0600)
committerJeff Law <law@gcc.gnu.org>
Sun, 14 Sep 1997 18:29:43 +0000 (12:29 -0600)
        * fixinc.math: New file to fix math.h on some systems.
        * configure.in (freebsd, netbsd): Use fixinc.math on these
        systems.
        * configure: Rebuilt.
Should fix struct exception problems for freebsd, netbsd.  Can be used
for others.

From-SVN: r15436

gcc/configure
gcc/configure.in
gcc/fixinc.math [new file with mode: 0755]

index c3ca074895cfdef1aca8044f5e73221572ab2c1a..9e7f88915406feea98dfee13994384fd289773dc 100755 (executable)
@@ -1927,8 +1927,8 @@ for machine in $build $host $target; do
                tm_file=arm/netbsd.h
                xm_file=arm/xm-netbsd.h
                tmake_file=arm/t-netbsd
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                use_collect2=yes
                ;;
        arm-*-linux-gnuaout*)           # ARM Linux
@@ -2303,8 +2303,8 @@ for machine in $build $host $target; do
        i[3456]86-*-freebsdelf*)
                tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h"
                xm_file=i386/xm-freebsd.h
-               # On FreeBSD, the headers are already ok.
-               fixincludes=Makefile.in
+               # On FreeBSD, the headers are already ok, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=i386/t-freebsd
                gas=yes
                gnu_ld=yes
@@ -2313,15 +2313,15 @@ for machine in $build $host $target; do
        i[3456]86-*-freebsd*)
                tm_file=i386/freebsd.h
                xm_file=i386/xm-freebsd.h
-               # On FreeBSD, the headers are already ok.
-               fixincludes=Makefile.in
+               # On FreeBSD, the headers are already ok, except for math.h
+               fixincludes=fixinc.math
                tmake_file=i386/t-freebsd
                ;;
        i[3456]86-*-netbsd*)
                tm_file=i386/netbsd.h
                xm_file=i386/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        i[3456]86-*-coff*)
@@ -2978,8 +2978,8 @@ for machine in $build $host $target; do
        m68k-*-netbsd*)
                tm_file=m68k/netbsd.h
                xm_file=m68k/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        m68k-*-sysv3*)                  # Motorola m68k's running system V.3
@@ -3277,8 +3277,8 @@ for machine in $build $host $target; do
        mips-dec-netbsd*)                  # Decstation running NetBSD
                tm_file=mips/netbsd.h
                xm_file=mips/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        mips-sony-bsd* | mips-sony-newsos*)     # Sony NEWS 3600 or risc/news.
@@ -3597,8 +3597,8 @@ for machine in $build $host $target; do
        ns32k-pc532-netbsd*)
                tm_file=ns32k/netbsd.h
                xm_file=ns32k/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
         pdp11-*-bsd)
@@ -3827,8 +3827,8 @@ for machine in $build $host $target; do
        sparc-*-netbsd*)
                tm_file=sparc/netbsd.h
                xm_file=sparc/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        sparc-*-bsd*)
@@ -3969,8 +3969,8 @@ for machine in $build $host $target; do
        vax-*-netbsd*)
                tm_file="${tm_file} netbsd.h vax/netbsd.h"
                xm_file="${xm_file} xm-netbsd.h"
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                float_format=vax
                ;;
index 4a309cc9b5306aa1c54744b659ae0ce84f4325af..27d562ba390de76a22293d890ed16b6de3a0e671 100644 (file)
@@ -413,8 +413,8 @@ for machine in $build $host $target; do
                tm_file=arm/netbsd.h
                xm_file=arm/xm-netbsd.h
                tmake_file=arm/t-netbsd
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                use_collect2=yes
                ;;
        arm-*-linux-gnuaout*)           # ARM Linux
@@ -789,8 +789,8 @@ for machine in $build $host $target; do
        i[[3456]]86-*-freebsdelf*)
                tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h"
                xm_file=i386/xm-freebsd.h
-               # On FreeBSD, the headers are already ok.
-               fixincludes=Makefile.in
+               # On FreeBSD, the headers are already ok, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=i386/t-freebsd
                gas=yes
                gnu_ld=yes
@@ -799,15 +799,15 @@ for machine in $build $host $target; do
        i[[3456]]86-*-freebsd*)
                tm_file=i386/freebsd.h
                xm_file=i386/xm-freebsd.h
-               # On FreeBSD, the headers are already ok.
-               fixincludes=Makefile.in
+               # On FreeBSD, the headers are already ok, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=i386/t-freebsd
                ;;
        i[[3456]]86-*-netbsd*)
                tm_file=i386/netbsd.h
                xm_file=i386/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        i[[3456]]86-*-coff*)
@@ -1464,8 +1464,8 @@ for machine in $build $host $target; do
        m68k-*-netbsd*)
                tm_file=m68k/netbsd.h
                xm_file=m68k/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        m68k-*-sysv3*)                  # Motorola m68k's running system V.3
@@ -1763,8 +1763,8 @@ for machine in $build $host $target; do
        mips-dec-netbsd*)                  # Decstation running NetBSD
                tm_file=mips/netbsd.h
                xm_file=mips/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        mips-sony-bsd* | mips-sony-newsos*)     # Sony NEWS 3600 or risc/news.
@@ -2083,8 +2083,8 @@ for machine in $build $host $target; do
        ns32k-pc532-netbsd*)
                tm_file=ns32k/netbsd.h
                xm_file=ns32k/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
         pdp11-*-bsd)
@@ -2313,8 +2313,8 @@ for machine in $build $host $target; do
        sparc-*-netbsd*)
                tm_file=sparc/netbsd.h
                xm_file=sparc/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                ;;
        sparc-*-bsd*)
@@ -2455,8 +2455,8 @@ for machine in $build $host $target; do
        vax-*-netbsd*)
                tm_file="${tm_file} netbsd.h vax/netbsd.h"
                xm_file="${xm_file} xm-netbsd.h"
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
+               # On NetBSD, the headers are already okay, except for math.h.
+               fixincludes=fixinc.math
                tmake_file=t-netbsd
                float_format=vax
                ;;
diff --git a/gcc/fixinc.math b/gcc/fixinc.math
new file mode 100755 (executable)
index 0000000..02652aa
--- /dev/null
@@ -0,0 +1,111 @@
+#! /bin/sh
+# Fix struct exception in /usr/include/math.h.
+#
+# We expect several systems which did not need fixincludes in the past
+# to need to fix just math.h.  So we created a separate fixinc.mathh
+# script to fix just that problem.
+# See README-fixinc for more information.
+
+# Directory containing the original header files.
+# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
+INPUT=${2-${INPUT-/usr/include}}
+
+# Directory in which to store the results.
+LIB=${1?"fixincludes: output directory not specified"}
+
+# Define PWDCMD as a command to use to get the working dir
+# in the form that we want.
+PWDCMD=pwd
+case "`pwd`" in
+//*)
+       # On an Apollo, discard everything before `/usr'.
+       PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
+       ;;
+esac
+
+# Original directory.
+ORIGDIR=`${PWDCMD}`
+
+# Make sure it exists.
+if [ ! -d $LIB ]; then
+  mkdir $LIB || exit 1
+fi
+
+# Make LIB absolute only if needed to avoid problems with the amd.
+case $LIB in
+/*)
+       ;;
+*)
+       cd $LIB; LIB=`${PWDCMD}`
+       ;;
+esac
+
+# Fail if no arg to specify a directory for the output.
+if [ x$1 = x ]
+then echo fixincludes: no output directory specified
+exit 1
+fi
+
+echo Building fixed headers in ${LIB}
+
+# Determine whether this system has symbolic links.
+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
+
+cd ${INPUT}
+
+# Some math.h files define struct exception, which conflicts with
+# the class exception defined in the C++ file std/stdexcept.h.  We
+# redefine it to __math_exception.  This is not a great fix, but I
+# haven't been able to think of anything better.
+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, exception
+  sed -e '/struct exception/i\
+#ifdef __cplusplus\
+#define exception __math_exception\
+#endif\
+'\
+      -e '/struct exception/a\
+#ifdef __cplusplus\
+#undef exception\
+#endif\
+' ${LIB}/$file > ${LIB}/${file}.sed
+  rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
+  if egrep 'matherr()' ${LIB}/$file >/dev/null 2>&1; then
+    sed -e '/matherr/i\
+#ifdef __cplusplus\
+#define exception __math_exception\
+#endif\
+'\
+        -e '/matherr/a\
+#ifdef __cplusplus\
+#undef exception\
+#endif\
+' ${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
+    rm -f ${LIB}/$file
+  else
+    # Find any include directives that use "file".
+    for include in `egrep '^[       ]*#[    ]*include[      ]*"[^/]' ${LIB}/$file | sed -e 's/^[    ]*#[    ]*include[      ]*"\([^"]*\)".*$/\1/'`; do
+      dir=`echo $file | sed -e s'|/[^/]*$||'`
+      required="$required ${INPUT} $dir/$include ${LIB}/$dir/$include"
+    done
+  fi
+fi
+exit 0