summaryrefslogtreecommitdiff
path: root/gcc/fixincludes
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1997-12-12 06:53:30 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1997-12-12 06:53:30 +0000
commitf20b87e8ffea6c78495c7d93d1ab61d7cd1e9d32 (patch)
tree78afe9a65c7b4ceca4360d1c736af21e267a398d /gcc/fixincludes
parentb4dae43c16aabc5cac84fb5ece8365b8921a5307 (diff)
downloadgcc-f20b87e8ffea6c78495c7d93d1ab61d7cd1e9d32.tar.gz
* fixincludes (str{len,spn,cspn} return value): Handle different
layout on sysV88. (hypot): Provide a fake for hypot which is broken on m88k-motorola-sysv3. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@17062 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fixincludes')
-rwxr-xr-xgcc/fixincludes46
1 files changed, 46 insertions, 0 deletions
diff --git a/gcc/fixincludes b/gcc/fixincludes
index 89c9f717417..80032e624d6 100755
--- a/gcc/fixincludes
+++ b/gcc/fixincludes
@@ -12,6 +12,14 @@ INPUT=${2-${INPUT-/usr/include}}
# Directory in which to store the results.
LIB=${1?"fixincludes: output directory not specified"}
+# Define what target system we're fixing.
+if test -r ./Makefile; then
+ target_canonical="`sed -n -e 's,^target[ ]*=[ ]*\(.*\)$,\1,p' < Makefile`"
+ test -z "${target_canonical}" && target_canonical=unknown
+else
+ target_canonical=unknown
+fi
+
# Define PWDCMD as a command to use to get the working dir
# in the form that we want.
PWDCMD=pwd
@@ -1983,6 +1991,7 @@ fi
# Correct the return type for strlen in string.h on Lynx.
# Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
# Add missing const for strdup on OSF/1 V3.0.
+# On sysV88 layout is slightly different.
file=string.h
if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
@@ -2001,6 +2010,8 @@ if [ -r ${LIB}/$file ]; then
-e 's/^\( strncmp()\),\n\( strlen(),\)$/\1;\
extern unsigned int\
\2/'\
+ -e '/^extern int$/N'\
+ -e 's/^extern int\(\n strlen(),\)/extern size_t\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
@@ -2286,6 +2297,41 @@ do
fi
done
+# libm.a on m88k-motorola-sysv3 contains a stupid optimization for function
+# hypot(), which returns the second argument without even looking at its value
+# if the other is 0.0
+file=math.h
+if [ $target_canonical = m88k-motorola-sysv3 ]; then
+ 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, hypot definition
+ sed -e '/^extern double hypot();$/a\
+\/* Workaround a stupid Motorola optimization if one\
+ of x or y is 0.0 and the other is negative! *\/\
+#ifdef __STDC__\
+static __inline__ double fake_hypot (double x, double y)\
+#else\
+static __inline__ double fake_hypot (x, y)\
+ double x, y;\
+#endif\
+{\
+ return fabs (hypot (x, y));\
+}\
+#define hypot fake_hypot
+' \
+ ${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
+fi
+
# math.h on SunOS 4 puts the declaration of matherr before the definition
# of struct exception, so the prototype (added by fixproto) causes havoc.
file=math.h