# 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
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
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
;;
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
: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
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
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
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
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
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
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"
-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
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
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
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.
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
-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
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