home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- #
- # modified for dgux by hassey@dg-rtp.dg.com based on
- #
- # fixinc.svr4 written by Ron Guilmette (rfg@ncd.com).
- #
- # This file is part of GNU CC.
- #
- # GNU CC is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2, or (at your option)
- # any later version.
- #
- # GNU CC is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with GNU CC; see the file COPYING. If not, write to
- # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- #
- #
- # See README-fixinc for more information.
-
- # Directory where gcc sources (and sometimes special include files) live.
- SRCDIR=${3-${SRCDIR-.}}
-
- # Directory containing the original header files.
- INPUT=${2-${INPUT-/usr/include}}
-
- # Fail if no arg to specify a directory for the output.
- if [ x$1 = x ]
- then echo fixincludes: no output directory specified
- exit 1
- fi
-
- # Directory in which to store the results.
- LIB=${1?"fixincludes: output directory not specified"}
-
- # Make sure it exists.
- if [ ! -d $LIB ]; then
- mkdir $LIB || exit 1
- fi
-
- ORIG_DIR=`pwd`
-
- # Make LIB absolute if it is relative.
- # Don't do this if not necessary, since may screw up automounters.
- case $LIB in
- /*)
- ;;
- *)
- cd $LIB; LIB=`${PWDCMD-pwd}`
- ;;
- esac
-
- echo 'Building fixincludes in ' ${LIB}
-
- # Determine whether this filesystem 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 ${INPUT}
- if $LINKS; then
- files=`ls -LR | sed -n s/:$//p`
- else
- files=`find . -type d -print | sed '/^.$/d'`
- fi
- for file in $files; do
- rm -rf $LIB/$file
- if [ ! -d $LIB/$file ]
- then mkdir $LIB/$file
- fi
- done
-
- # treetops gets an alternating list
- # of old directories to copy
- # and the new directories to copy to.
- treetops="${INPUT} ${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
- cwd=`pwd`
- # In case $dest is relative, get to $file's dir first.
- cd ${INPUT}
- 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 ${INPUT},
- # make a similar link here.
- if expr $x : "${INPUT}/.*" > /dev/null; then
- # Y gets the actual target dir name, relative to ${INPUT}.
- y=`echo $x | sed -n "s&${INPUT}/&&p"`
- # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
- dots=`echo "$file" |
- sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
- echo $file '->' $dots$y ': Making link'
- rm -fr ${LIB}/$file > /dev/null 2>&1
- ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
- else
- # If the link is to outside ${INPUT},
- # 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 ${INPUT}. Does this change break anything?
- treetops="$treetops $x ${LIB}/$file"
- fi
- fi
- cd $cwd
- fi
- done
- fi
-
- # Completely replace <_int_varargs.h> with a file that defines
- # va_list and gnuc_va_list
-
- file=_int_varargs.h
- if [ -r ${INPUT}/$file ]; then
- echo Replacing $file
- cat > ${LIB}/$file << EOF
- /* This file was generated by fixinc.dgux. */
- #ifndef __INT_VARARGS_H
- #define __INT_VARARGS_H
-
- #if defined(__m88k__) && defined (__DGUX__)
- #ifndef __GNUC_VA_LIST
- #define __GNUC_VA_LIST
- typedef struct
- {
- int __va_arg; /* argument number */
- int *__va_stk; /* start of args passed on stack */
- int *__va_reg; /* start of args passed in regs */
- } __gnuc_va_list;
- #endif /* not __GNUC_VA_LIST */
- #endif /* 88k && dgux */
-
- #ifndef _VA_LIST_
- #define _VA_LIST_
- typedef __gnuc_va_list va_list;
- #endif /* _VA_LIST_ */
-
- #endif /* __INT_VARARGS_H */
-
- EOF
- chmod a+r ${LIB}/$file
- 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
-
- if $LINKS; then
- echo 'Making internal symbolic non-directory links'
- cd ${INPUT}
- 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
-
- cd ${ORIG_DIR}
-
- exit 0
-
-