--- gcc/fixincludes 2018/04/24 16:51:58 1.1.1.10 +++ gcc/fixincludes 2018/04/24 16:57:45 1.1.1.13 @@ -6,7 +6,12 @@ # for other versions, you had better check. # Directory in which to store the results. -LIB=/usr/local/lib/gcc-include +LIB=${LIB-/usr/local/lib/gcc-include} + +# Make sure it exists. +if [ ! -d $LIB ]; then + mkdir $LIB || exit 1 +fi # Determine whether this system has symbolic links. if ln -s X $LIB/ShouldNotExist 2>/dev/null; then @@ -18,14 +23,16 @@ fi echo 'Making directories:' cd /usr/include -mkdir $LIB > /dev/null 2>&1 if $LINKS; then files=`ls -LR | sed -n s/:$//p` else - files=`find . -type d -print` + files=`find . -type d -print | sed '/^.$/d'` fi for file in $files; do - mkdir $LIB/$file > /dev/null 2>&1 + rm -rf $LIB/$file + if [ ! -d $LIB/$file ] + then mkdir $LIB/$file + fi done # treetops gets an alternating list @@ -38,13 +45,35 @@ if $LINKS; then 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" + cwd=`pwd` + # In case $dest is relative, get to $file's dir first. + cd /usr/include + cd `echo ./$file | sed -n 's&[^/]*$&&p'` + # Check that the target directory exists. + # Redirections changed to avoid bug in sh on Ultrix. + (cd $dest) > /dev/null 2>&1 + if [ $? = 0 ]; then + cd $dest + # X gets the dir that the link actually leads to. + x=`pwd` + # If link leads back into /usr/include, + # make a similar link here. + if expr $x : '/usr/include/.*' > /dev/null; then + # Y gets the actual target dir name, relative to /usr/include. + y=`echo $x | sed -n 's&/usr/include/&&p'` + echo $file '->' $y ': Making link' + rm -fr ${LIB}/$file > /dev/null 2>&1 + ln -s ${LIB}/$y ${LIB}/$file > /dev/null 2>&1 + else + # If the link is to outside /usr/include, + # treat this directory as if it actually contained the files. +# This line used to have $dest instead of $x. +# $dest seemed to be wrong for links found in subdirectories +# of /usr/include. Does this change break anything? + treetops="$treetops $x ${LIB}/$file" + fi fi + cd $cwd fi done fi @@ -52,26 +81,29 @@ 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:' + echo "Finding header files in $1:" + cd /usr/include cd $1 - files=`find . -type f -print` + files=`find . -name '*.h' -type f -print` echo 'Checking header files:' for file in $files; do - if egrep -s '[ ]_IO[A-Z]*\(|#define._IO|CTRL' $file; then + 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 - ex $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 @@ -82,6 +114,8 @@ EOF 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 @@ -92,12 +126,135 @@ if [ -r $file ]; then fi fi -if [ -r ${LIB}/sundev/vuid_event.h ]; then - echo Fixing sundev/vuid_event.h comment - ex ${LIB}/sundev/vuid_event.h </dev/null 2>&1; then + echo Deleting ${LIB}/$file\; no fixes were needed. + rm ${LIB}/$file + fi +fi + +# Fix an error in this file: a missing semi-colon at the end of the statsswtch +# structure definition. +file=rpcsvc/rstat.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}/$file ]; then + echo Fixing $file, definition of statsswtch + ex ${LIB}/$file </dev/null 2>&1; then + echo Deleting ${LIB}/$file\; no fixes were needed. + rm ${LIB}/$file + fi +fi + +# Check for bad #ifdef line (in Ultrix 4.1) + +file=sys/file.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/rpcsvc 2>&- + cp $file ${LIB}/$file >/dev/null 2>&1 \ + || echo "Can't copy $file" + chmod +w ${LIB}/$file + fi +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file, bad #ifdef line + ex ${LIB}/$file </dev/null 2>&1; then + echo Deleting ${LIB}/$file\; no fixes were needed. + rm ${LIB}/$file + fi +fi + +# Deal with yet another challenge, this in X11/Xmu.h +file=X11/Xmu.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/X11 2>&- + cp $file ${LIB}/$file >/dev/null 2>&1 \ + || echo "Can't copy $file" + chmod +w ${LIB}/$file + fi +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file sprintf declaration + ex ${LIB}/$file </dev/null 2>&1; then + echo Deleting ${LIB}/$file\; no fixes were needed. + rm ${LIB}/$file + fi +fi + +# Check for missing ';' in struct + +file=netinet/ip.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/netinet 2>&- + sed -e '/^struct/,/^};/s/}$/};/' $file > ${LIB}/$file + cmp $file ${LIB}/$file >&- && rm -f ${LIB}/$file + fi +fi + +# Fix the CAT macro in memvar.h. + +file=pixrect/memvar.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/pixrect 2>&- + sed -e '/^#define.CAT(a,b)/ s/IDENT(a)b/a##b/g' $file > ${LIB}/$file + cmp $file ${LIB}/$file >&- && rm -f ${LIB}/$file + fi +fi + +# Check for yet more missing ';' in struct (in SunOS 4.0.x) + +file=rpcsvc/rusers.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/rpcsvc 2>&- + sed -e '/^struct/,/^};/s/_cnt$/_cnt;/' $file > ${LIB}/$file + cmp $file ${LIB}/$file >&- && rm -f ${LIB}/$file + fi +fi + +# Check for yet more missing ';' in struct (in SunOS 4.0.x) + +file=rpcsvc/rusers.h +if [ -r $file ]; then + if [ ! -r ${LIB}/$file ]; then + mkdir ${LIB}/rpcsvc 2>&- + sed -e '/^struct/,/^};/s/_cnt$/_cnt;/' $file > ${LIB}/$file + cmp $file ${LIB}/$file >&- && rm -f ${LIB}/$file + fi fi echo 'Removing unneeded directories:' @@ -107,3 +264,19 @@ for file in $files; do rmdir $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