[gnu.gcc.bug] fixincludes does not handle symbolically linked directories

jw@sics.se (Johan Widen) (02/05/89)

On the Sequent Symmetry several of the directories in /usr/include
are symbolically linked:
  lrwxr-xr-x  1 root           11 Jan 16 22:30 /usr/include/sys -> ../../sys/h/

The current version of fixincludes does not follow symbolic links.

Here is a version that follows symbolically linked directories. A minor problem
with the script is that links as follows
	machine -> i386/
	i386 -> sys/../i386/
will produce directories
	gcc-include/machine
and
	gcc-include/i386
rather than
	gcc-include/i386
and
	gcc-include/machine -> i386/	

#!/bin/sh
# shar:	Shell Archiver  (v1.22)
#
#	Run the following text with /bin/sh to create:
#	  fixincludes.link
#
sed 's/^X//' << 'SHAR_EOF' > fixincludes.link &&
X#! /bin/sh
X# Install modified versions of certain ANSI-incompatible system header files
X# which are fixed to work correctly with ANSI C
X# and placed in a directory that GNU C will search.
X# This works properly on a Sun in system version 3.4;
X# for other versions, you had better check.
X
X# Directory in which to store the results.
XLIB=/usr/local/lib/gcc-include
X
Xecho 'Making directories:'
Xcd /usr/include
Xfiles=`find . -type d -print`
Xlinks=`find . -type l ! -name '*.h' -print`
Xfor file in $files $links; do
X  mkdir $LIB/$file > /dev/null 2>&1
Xdone
X
Xecho 'Finding header files:'
Xcd /usr/include
Xfiles=`find . -type f -print`
Xecho 'Checking header files:'
Xfor file in $files; do
X  if egrep -s '[ 	]_IO[A-Z]*\(|#define._IO|CTRL' $file; then
X    echo Fixing $file
X    if [ -r $file ]; then
X      newfile=${LIB}/$file
X      cp $file $newfile >/dev/null 2>&1	\
X      || echo "Can't copy $file"
X      chmod +w $newfile
X      ex $newfile <<EOF
X      g/[ 	]_IO[A-Z]*(/s/(\(.\),/('\1',/
X      g/#define._IO/s/'x'/x/g
X      g/[^A-Z]CTRL[ 	]*(/s/\(.\))/'\1')/
X      g/#define.CTRL/s/'c'/c/g
X      wq
XEOF
X      if cmp $file $newfile >/dev/null 2>&1; then
X         echo Deleting $newfile\; no fixes were needed.
X         rm $newfile
X      fi
X    fi
X  fi
Xdone
X
Xecho 'Finding header files in symbolically linked directories:'
Xfor link in $links; do
X  cd /usr/include/$link
X  files=`find . -type f -print`
X  echo 'Checking header files in' $link':'
X  for file in $files; do
X    if egrep -s '[ 	]_IO[A-Z]*\(|#define._IO|CTRL' $file; then
X      echo Fixing $file
X      if [ -r $file ]; then
X	newfile=${LIB}/$link/$file
X        cp $file $newfile >/dev/null 2>&1	\
X        || echo "Can't copy $file"
X        chmod +w $newfile
X        ex $newfile <<EOF
X        g/[ 	]_IO[A-Z]*(/s/(\(.\),/('\1',/
X        g/#define._IO/s/'x'/x/g
X        g/[^A-Z]CTRL[ 	]*(/s/\(.\))/'\1')/
X        g/#define.CTRL/s/'c'/c/g
X        wq
XEOF
X        if cmp $file $newfile >/dev/null 2>&1; then
X           echo Deleting $newfile\; no fixes were needed.
X           rm $newfile
X        fi
X      fi
X    fi
X  done
Xdone
X
X# Fix one other error in this file: a mismatched quote not inside a C comment.
Xfile=sundev/vuid_event.h
Xif [ -r $file ]; then
X  if [ ! -r ${LIB}/$file ]; then
X    cp $file ${LIB}/$file >/dev/null 2>&1	\
X    || echo "Can't copy $file"
X    chmod +w ${LIB}/$file
X  fi
Xfi
X
Xif [ -r ${LIB}/sundev/vuid_event.h ]; then
X  echo Fixing sundev/vuid_event.h comment
X  ex ${LIB}/sundev/vuid_event.h <<EOF
X  g/doesn't/s/doesn't/doesn''t/
X  wq
XEOF
Xfi
SHAR_EOF
chmod 0775 fixincludes.link || echo "restore of fixincludes.link fails"
exit 0
--
Johan Widen
SICS, PO Box 1263, S-164 28 KISTA, SWEDEN
Tel: +46 8 752 15 32	Ttx: 812 61 54 SICS S	Fax: +46 8 751 72 30
Internet: jw@sics.se or {mcvax,munnari,ukc,unido}!enea!sics.se!jw