#!/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, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # # # See README-fixinc for more information. # 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