?? fixincludes
字號:
#! /bin/sh# Install modified versions of certain ANSI-incompatible system header files# which are fixed to work correctly with ANSI C# and placed in a directory that GNU C will search.# This works properly on a Sun in system version 3.4;# for other versions, you had better check.# Directory containing the original header files.INCLUDES=${2-${INCLUDES-/usr/include}}# Directory in which to store the results.LIB=${LIB-/usr/local/lib/gcc-include}# Make sure it exists.if [ ! -d $LIB ]; then mkdir $LIB || exit 1fi# Determine whether this system has symbolic links.if ln -s X $LIB/ShouldNotExist 2>/dev/null; then rm -f $LIB/ShouldNotExist LINKS=trueelse LINKS=falsefiecho 'Making directories:'cd ${INCLUDES}if $LINKS; then files=`ls -LR | sed -n s/:$//p`else files=`find . -type d -print | sed '/^.$/d'`fifor file in $files; do rm -rf $LIB/$file if [ ! -d $LIB/$file ] then mkdir $LIB/$file fidone# treetops gets an alternating list# of old directories to copy# and the new directories to copy to.treetops="${INCLUDES} ${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 ${INCLUDES} 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 ${INCLUDES}, # make a similar link here. if expr $x : '${INCLUDES}/.*' > /dev/null; then # Y gets the actual target dir name, relative to ${INCLUDES}. y=`echo $x | sed -n 's&${INCLUDES}/&&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 ${INCLUDES}, # 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 ${INCLUDES}. Does this change break anything? treetops="$treetops $x ${LIB}/$file" fi fi cd $cwd fi donefiset - $treetopswhile [ $# != 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 ${INCLUDES} cd $1 files=`find . -name '*.h' -type f -print` echo 'Checking header files:'# Note that BSD43_* are used on recent MIPS systems. for file in $files; do if egrep '[ ]_IO[A-Z]*\(|[ ]BSD43__IO[A-Z]*\(|#define._IO|#define.BSD43__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 sed -e ' :loop /\\$/ N /\\$/ b loop /[ ]_IO[A-Z]*[ ]*(/ s/(\(.\),/('\''\1'\'',/ /[ ]BSD43__IO[A-Z]*[ ]*(/ s/(\(.\),/('\''\1'\'',/ /#define._IO/ s/'\''x'\''/x/g /#define.BSD43__IO/ s/'\''x'\''/x/g /[^A-Z]CTRL[ ]*(/ s/\([^'\'']\))/'\''\1'\'')/ /#define.CTRL/ s/'\''c'\''/c/g /#define._CTRL/ s/'\''c'\''/c/g /#define.BSD43_CTRL/ s/'\''c'\''/c/g /#if.* m68k$/ s/m68k/__m68k__/g /#if.*defined *(m68k)/ s/m68k/__m68k__/g ' $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 fi fi fi done shift; shiftdonecd ${INCLUDES}# Fix one other error in this file: a mismatched quote not inside a C comment.file=sundev/vuid_event.hif [ -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 fifiif [ -r ${LIB}/$file ]; then echo Fixing $file comment ex ${LIB}/$file <<EOF g/doesn't/s/doesn't/does not/ wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file fifi# Fix this Sun file to avoid intefering with stddef.h.file=sys/stdtypes.hif [ -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 fifiif [ -r ${LIB}/$file ]; then echo Fixing $file comment ex ${LIB}/$file <<EOF /size_t.*;/ i#ifndef _SIZE_T#define _SIZE_T. /size_t/+1 i#endif. /ptrdiff_t.*;/ i#ifndef _PTRDIFF_T#define _PTRDIFF_T. /ptrdiff_t/+1 i#endif. /wchar_t.*;/ i#ifndef _WCHAR_T#define _WCHAR_T. /wchar_t/+1 i#endif. wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file fifi# Fix an error in this file: a missing semi-colon at the end of the statsswtch# structure definition.file=rpcsvc/rstat.hif [ -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 fifiif [ -r ${LIB}/$file ]; then echo Fixing $file, definition of statsswtch ex ${LIB}/$file <<EOF g/boottime$/s//&;/ wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file fifi# Fix an error in this file: a missing semi-colon at the end of the nodeent# structure definition.file=netdnet/dnetdb.hif [ -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 fifiif [ -r ${LIB}/$file ]; then echo Fixing $file, definition of nodeent ex ${LIB}/$file <<EOF g/na_addr/s//&;/ wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file fifi# Check for bad #ifdef line (in Ultrix 4.1)file=sys/file.hif [ -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 fifiif [ -r ${LIB}/$file ]; then echo Fixing $file, bad \#ifdef line ex ${LIB}/$file <<EOF g/^#ifdef KERNEL && !defined/ s/#ifdef KERNEL && !defined/#if defined(KERNEL) \&\& !defined/ wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file fifi# Check for superfluous `static' (in Ultrix 4.2)file=machine/cpu.hif [ -r $file ]; then if [ ! -r ${LIB}/$file ]; then mkdir ${LIB}/machine 2>&- cp $file ${LIB}/$file >/dev/null 2>&1 \ || echo "Can't copy $file" chmod +w ${LIB}/$file fifiif [ -r ${LIB}/$file ]; then echo Fixing $file, superfluous static ex ${LIB}/$file <<EOF g/^static struct tlb_pid_state/ s/static// wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file else# This file has an alternative name, mips/cpu.h. Fix that name, too. if cmp machine/cpu.h mips/cpu.h > /dev/null 2>& 1; then mkdir ${LIB}/mips 2>&- ln ${LIB}/$file ${LIB}/mips/cpu.h fi fifi# Deal with yet another challenge, this in X11/Xmu.hfile=X11/Xmu.hif [ -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 fifiif [ -r ${LIB}/$file ]; then echo Fixing $file sprintf declaration ex ${LIB}/$file <<EOF /^extern char \* sprintf();$/c#ifndef __STDC__extern char * sprintf();#endif /* !defined __STDC__ */. wqEOF if cmp $file ${LIB}/$file >/dev/null 2>&1; then echo Deleting ${LIB}/$file\; no fixes were needed. rm ${LIB}/$file fifi# Check for missing ';' in structfile=netinet/ip.hif [ -r $file ]; then if [ ! -r ${LIB}/$file ]; then mkdir ${LIB}/netinet 2>&- sed -e '/^struct/,/^};/s/}$/};/' $file > ${LIB}/$file cmp $file ${LIB}/$file >/dev/null 2>&1 && rm -f ${LIB}/$file fifi# Fix the CAT macro in memvar.h.file=pixrect/memvar.hif [ -r $file ]; then if [ ! -r ${LIB}/$file ]; then mkdir ${LIB}/pixrect 2>&- sed -e '/^#define.CAT(a,b)/ i\#ifdef __STDC__ \#define CAT(a,b) a##b\#else/^#define.CAT(a,b)/ a\#endif' $file > ${LIB}/$file cmp $file ${LIB}/$file >/dev/null 2>&1 && rm -f ${LIB}/$file fifi# Check for yet more missing ';' in struct (in SunOS 4.0.x)file=rpcsvc/rusers.hif [ -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 >/dev/null 2>&1 && rm -f ${LIB}/$file fifiecho 'Removing unneeded directories:'cd $LIBfiles=`find . -type d -print | sort -r`for file in $files; do rmdir $LIB/$file > /dev/null 2>&1doneif $LINKS; then echo 'Making internal symbolic non-directory links' cd ${INCLUDES} 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 donefiexit 0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -