--- gcc/fixincludes 2018/04/24 16:46:51 1.1.1.6 +++ gcc/fixincludes 2018/04/24 16:51:58 1.1.1.10 @@ -8,40 +8,85 @@ # Directory in which to store the results. LIB=/usr/local/lib/gcc-include -mkdir $LIB > /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 'Finding header files:' +echo 'Making directories:' cd /usr/include -files=`find . -print` -echo 'Checking header files:' +mkdir $LIB > /dev/null 2>&1 +if $LINKS; then + files=`ls -LR | sed -n s/:$//p` +else + files=`find . -type d -print` +fi for file in $files; do - if egrep -s '[ ]_IO[A-Z]*\(|#define._IO|CTRL' $file; then - echo Fixing $file - if [ -r $file ]; then - cp $file ${LIB}/$file >/dev/null 2>&1 \ - || (mkdir `dirname ${LIB}/$file` \ - && cp $file ${LIB}/$file) \ - || echo "Can't copy $file" - chmod +w ${LIB}/$file - ex ${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 $1 + files=`find . -type f -print` + echo 'Checking header files:' + for file in $files; do + if egrep -s '[ ]_IO[A-Z]*\(|#define._IO|CTRL' $file; 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 </dev/null 2>&1; then + echo Deleting $2/$file\; no fixes were needed. + rm $2/$file + fi + fi fi - fi + done + shift; shift done - # 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 \ - || (mkdir `dirname ${LIB}/$file` \ - && cp $file ${LIB}/$file) \ || echo "Can't copy $file" chmod +w ${LIB}/$file fi @@ -54,3 +99,11 @@ if [ -r ${LIB}/sundev/vuid_event.h ]; th wq EOF fi + +echo 'Removing unneeded directories:' +cd $LIB +files=`find . -type d -print | sort -r` +for file in $files; do + rmdir $LIB/$file > /dev/null 2>&1 +done +