--- gcc/fixincludes 2018/04/24 16:38:24 1.1.1.1 +++ gcc/fixincludes 2018/04/24 16:52:53 1.1.1.11 @@ -1,23 +1,154 @@ +#! /bin/sh # Install modified versions of certain ANSI-incompatible system header files # which are fixed to work correctly with ANSI C # and placed in a directory that GNU C will search. # This works properly on a Sun in system version 3.4; # for other versions, you had better check. -mkdir /usr/local/lib/gcc-include -mkdir /usr/local/lib/gcc-include/sys -cp /usr/include/sys/ioctl.h /usr/local/lib/gcc-include/sys/ioctl.h -chmod +w /usr/local/lib/gcc-include/sys/ioctl.h -ex /usr/local/lib/gcc-include/sys/ioctl.h < /dev/null 2>&1 + +# Determine whether this system has symbolic links. +if ln -s X $LIB/ShouldNotExist 2>/dev/null; then + rm -f $LIB/ShouldNotExist + LINKS=true +else + LINKS=false +fi + +echo 'Making directories:' +cd /usr/include +if $LINKS; then + files=`ls -LR | sed -n s/:$//p` +else + files=`find . -type d -print` +fi +for file in $files; do + mkdir $LIB/$file > /dev/null 2>&1 +done + +# treetops gets an alternating list +# of old directories to copy +# and the new directories to copy to. +treetops="/usr/include ${LIB}" + +if $LINKS; then + echo 'Making internal symbolic directory links' + for file in $files; do + dest=`ls -ld $file | sed -n 's/.*-> //p'` + if [ "$dest" ]; then + if expr $dest : '[^/.].*' > /dev/null; then + rmdir ${LIB}/$file > /dev/null 2>&1 + rm -f ${LIB}/$file > /dev/null 2>&1 + ln -s $dest ${LIB}/$file > /dev/null 2>&1 + else # dont make links outside /usr/include + treetops="$treetops $dest ${LIB}/$file" + fi + fi + done +fi + +set - $treetops +while [ $# != 0 ]; do + # $1 is an old directory to copy, and $2 is the new directory to copy to. + echo "Finding header files in $1:" + cd /usr/include + cd $1 + files=`find . -type f -print` + echo 'Checking header files:' + for file in $files; do + if egrep '[ ]_IO[A-Z]*\(|#define._IO|CTRL' $file > /dev/null; then + echo Fixing $file + if [ -r $file ]; then + cp $file $2/$file >/dev/null 2>&1 \ + || echo "Can't copy $file" + chmod +w $2/$file + sed -e ' + :loop + /\\$/ N + /\\$/ b loop + /[ ]_IO[A-Z]*(/ s/(\(.\),/('\''\1'\'',/ + /#define._IO/ s/'\''x'\''/x/g + /[^A-Z]CTRL[ ]*(/ s/\(.\))/'\''\1'\'')/ + /#define.CTRL/ s/'\''c'\''/c/g + ' $2/$file > $2/$file.sed + mv $2/$file.sed $2/$file + if cmp $file $2/$file >/dev/null 2>&1; then + echo Deleting $2/$file\; no fixes were needed. + rm $2/$file + fi + fi + fi + done + shift; shift +done + +cd /usr/include + +# Fix one other error in this file: a mismatched quote not inside a C comment. +file=sundev/vuid_event.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 \ + || echo "Can't copy $file" + chmod +w ${LIB}/$file + fi +fi + +if [ -r ${LIB}/sundev/vuid_event.h ]; then + echo Fixing sundev/vuid_event.h comment + ex ${LIB}/sundev/vuid_event.h <&- + cp $file ${LIB}/$file >/dev/null 2>&1 \ + || echo "Can't copy $file" + chmod +w ${LIB}/$file + fi +fi -cp /usr/include/sys/ttychars.h /usr/local/lib/gcc-include/sys/ttychars.h -chmod +w /usr/local/lib/gcc-include/sys/ttychars.h -ex /usr/local/lib/gcc-include/sys/ttychars.h << EOF -g/CTRL/s/(\(.\))/('\1')/ -g/#define.CTRL/s/'c'/c/g -wq +if [ -r ${LIB}/$file ]; then + echo Fixing $file sprintf declaration + ex ${LIB}/$file < /dev/null 2>&1 +done + +if $LINKS; then + echo 'Making internal symbolic non-directory links' + cd /usr/include + files=`find . -type l -print` + for file in $files; do + dest=`ls -ld $file | sed -n 's/.*-> //p'` + if expr "$dest" : '[^/].*' > /dev/null; then + target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"` + if [ -f $target ]; then + ln -s $dest ${LIB}/$file >/dev/null 2>&1 + fi + fi + done +fi + +exit 0