⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fixincludes

📁 gcc库的原代码,对编程有很大帮助.
💻
📖 第 1 页 / 共 5 页
字号:
#! /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.# See README-fixinc for more information.# Directory containing the original header files.# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)INPUT=${2-${INPUT-/usr/include}}# Directory in which to store the results.LIB=${1?"fixincludes: output directory not specified"}# Define PWDCMD as a command to use to get the working dir# in the form that we want.PWDCMD=pwdcase "`pwd`" in//*)	# On an Apollo, discard everything before `/usr'.	PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"	;;esac# Original directory.ORIGDIR=`${PWDCMD}`# Make sure it exists.if [ ! -d $LIB ]; then  mkdir $LIB || exit 1fi# Make LIB absolute only if needed to avoid problems with the amd.case $LIB in/*)	;;*)	cd $LIB; LIB=`${PWDCMD}`	;;esac# Fail if no arg to specify a directory for the output.if [ x$1 = x ]then echo fixincludes: no output directory specifiedexit 1fiecho Building fixed headers in ${LIB}# Determine whether this system has symbolic links.if ln -s X $LIB/ShouldNotExist 2>/dev/null; then  rm -f $LIB/ShouldNotExist  LINKS=trueelif ln -s X /tmp/ShouldNotExist 2>/dev/null; then  rm -f /tmp/ShouldNotExist  LINKS=trueelse  LINKS=falsefiecho Finding directories and links to directoriescd ${INPUT}# Find all directories and all symlinks that point to directories.# Put the list in $files.# Each time we find a symlink, add it to newdirs# so that we do another find within the dir the link points to.# Note that $files may have duplicates in it;# later parts of this file are supposed to ignore them.dirs="."levels=2while [ -n "$dirs" ] && [ $levels -gt 0 ]do    levels=`expr $levels - 1`    newdirs=    for d in $dirs    do	echo " Searching $INPUT/$d"	if [ "$d" != . ]	then	    d=$d/.	fi	# Find all directories under $d, relative to $d, excluding $d itself.        files="$files `find $d -type d -print | \		       sed -e '/\/\.$/d' -e '/^\.$/d'`"	# Find all links to directories.	# Using `-exec test -d' in find fails on some systems,	# and trying to run test via sh fails on others,	# so this is the simplest alternative left.	# First find all the links, then test each one.	theselinks=	$LINKS && \	  theselinks=`find $d -type l -print`	for d1 in $theselinks --dummy--	do	    # If the link points to a directory,	    # add that dir to $newdirs	    if [ -d $d1 ]	    then		files="$files $d1"		if [ "`ls -ld $d1 | sed -n 's/.*-> //p'`" != "." ]		then		    newdirs="$newdirs $d1"		fi	    fi	done    done    dirs="$newdirs"donedirs=echo "All directories (including links to directories):"echo $filesfor file in $files; do  rm -rf $LIB/$file  if [ ! -d $LIB/$file ]  then mkdir $LIB/$file  fidonemkdir $LIB/root# 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 symbolic directory links'  for file in $files; do    dest=`ls -ld $file | sed -n 's/.*-> //p'`    if [ "$dest" ]; then          cwd=`${PWDCMD}`      # 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=`${PWDCMD}`	# Canonicalize ${INPUT} now to minimize the time an	# automounter has to change the result of ${PWDCMD}.	cinput=`cd ${INPUT}; ${PWDCMD}`	# If a link points to ., make a similar link to .	if [ $x = ${cinput} ]; then	  echo $file '->' . ': Making link'	  rm -fr ${LIB}/$file > /dev/null 2>&1	  ln -s . ${LIB}/$file > /dev/null 2>&1	# If link leads back into ${INPUT},	# make a similar link here.	elif expr $x : "${cinput}/.*" > /dev/null; then	  # Y gets the actual target dir name, relative to ${INPUT}.	  y=`echo $x | sed -n "s&${cinput}/&&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 a dir $target outside ${INPUT},	  # repoint the link at ${INPUT}/root$target	  # and process $target into ${INPUT}/root$target	  # treat this directory as if it actually contained the files.	  echo $file '->' root$x ': Making link'	  if [ -d $LIB/root$x ]	  then true	  else	    dirname=root$x/	    dirmade=.	    cd $LIB	    while [ x$dirname != x ]; do	      component=`echo $dirname | sed -e 's|/.*$||'`	      mkdir $component >/dev/null 2>&1	      cd $component	      dirmade=$dirmade/$component	      dirname=`echo $dirname | sed -e 's|[^/]*/||'`	    done	  fi	  # Duplicate directory structure created in ${LIB}/$file in new	  # root area.	  for file2 in $files; do	    case $file2 in	      $file/./*)		dupdir=${LIB}/root$x/`echo $file2 | sed -n "s|^${file}/||p"`		echo "Duplicating ${file}'s ${dupdir}"		if [ -d ${dupdir} ]		then true		else		  mkdir ${dupdir}		fi		;;	      *)		;;	    esac          done	  # Get the path from ${LIB} to $file, accounting for symlinks.	  parent=`echo "$file" | sed -e 's@/[^/]*$@@'`	  libabs=`cd ${LIB}; ${PWDCMD}`	  file2=`cd ${LIB}; cd $parent; ${PWDCMD} | sed -e "s@^${libabs}@@"`	  # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.	  dots=`echo "$file2" | sed -e 's@/[^/]*@../@g'`	  rm -fr ${LIB}/$file > /dev/null 2>&1	  ln -s ${dots}root$x ${LIB}/$file > /dev/null 2>&1	  treetops="$treetops $x ${LIB}/root$x"	fi      fi      cd $cwd    fi  donefirequired=set x $treetopsshiftwhile [ $# != 0 ]; do  # $1 is an old directory to copy, and $2 is the new directory to copy to.  cd ${INPUT}  cd $1# The same dir can appear more than once in treetops.# There's no need to scan it more than once.  if [ -f $2/DONE ]  then    files=  else    touch $2/DONE    echo Fixing directory $1 into $2# Check .h files which are symlinks as well as those which are files.# A link to a header file will not be processed by anything but this.    if $LINKS; then      files=`find . -name '*.h' \( -type f -o -type l \) -print`    else      files=`find . -name '*.h' -type f -print`    fi    echo Checking header files  fi# Note that BSD43_* are used on recent MIPS systems.  for file in $files; do# This call to egrep is essential, since checking a file with egrep# is much faster than actually trying to fix it.# It is also essential that most files *not* match!# Thus, matching every #endif is unacceptable.# But the argument to egrep must be kept small, or many versions of egrep# won't be able to handle it.## We use the pattern [!-.0-~] instead of [^/ 	] to match a noncomment# following #else or #endif because some buggy egreps think [^/] matches# newline, and they thus think `#else ' matches `#e[ndiflse]*[ 	]+[^/ 	]'.## We use the pattern [^a-zA-Z0-9_][_a-ce-km-z][a-z0-9] to match an identifier# following #if or #elif that is not surrounded by __.  The `a-ce-km-z'# in this pattern lacks `d' and `l'; this means we don't worry about# identifiers starting with `d' or `l'.  This is OK, since none of the# identifiers below start with `d' or `l'.  It also greatly improves# performance, since many files contain lines of the form `#if ... defined ...'# or `#if lint'.    if egrep '//|[ 	_]_IO|CTRL|^#define.NULL|^#e[nl][ds][ief]*[ 	]+[!-.0-~]|^#[el]*if.*[^a-zA-Z0-9_][_a-ce-km-zA-Z][a-zA-Z0-9]' $file >/dev/null; then      if [ -r $file ]; then	cp $file $2/$file >/dev/null 2>&1	\	|| echo "Can't copy $file"	chmod +w $2/$file	chmod a+r $2/$file	# Here is how the sed commands in braces work.	# (It doesn't work to put the comments inside the sed commands.)		# Surround each word with spaces, to simplify matching below.		# ANSIfy each pre-ANSI machine-dependent symbol		# by surrounding it with __ __.		# Remove the spaces that we inserted around each word.	sed -e '				   :loop	  /\\$/			N	  /\\$/			b loop	  s%^\([ 	]*#[ 	]*else\)[ 	]*/[^*].*%\1%	  s%^\([ 	]*#[ 	]*else\)[ 	]*[^/ 	].*%\1%	  s%^\([ 	]*#[ 	]*endif\)[ 	]*/[^*].*%\1%	  s%^\([ 	]*#[ 	]*endif\)[ 	]*\*[^/].*%\1%	  s%^\([ 	]*#[ 	]*endif\)[ 	]*[^/* 	].*%\1%	  /\/\/[^*]/			s|//\(.*\)$|/*\1*/|	  /[ 	]_IO[A-Z]*[ 	]*(/	s/\(_IO[A-Z]*[ 	]*(\)\(.\),/\1'\''\2'\'',/	  /[ 	]BSD43__IO[A-Z]*[ 	]*(/	s/(\(.\),/('\''\1'\'',/	  /#define._IO/			s/'\''\([cgxtf]\)'\''/\1/g	  /#define.BSD43__IO/		s/'\''\([cgx]\)'\''/\1/g	  /[^A-Z0-9_]CTRL[ 	]*(/		s/\([^'\'']\))/'\''\1'\'')/	  /[^A-Z0-9]_CTRL[ 	]*(/		s/\([^'\'']\))/'\''\1'\'')/	  /#define[ 	]*[ 	]CTRL/		s/'\''\([cgx]\)'\''/\1/g	  /#define[ 	]*[ 	]_CTRL/		s/'\''\([cgx]\)'\''/\1/g	  /#define.BSD43_CTRL/		s/'\''\([cgx]\)'\''/\1/g	  /#[	 ]*[el]*if/{		s/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g		s/ bsd4\([0-9]\) / __bsd4\1__ /g		s/ _*host_mips / __host_mips__ /g		s/ _*i386 / __i386__ /g		s/ M32 / __M32__ /g		s/ is68k / __is68k__ /g		s/ m68k / __m68k__ /g		s/ mc680\([0-9]\)0 / __mc680\10__ /g		s/ m88k / __m88k__ /g		s/ _*mips / __mips__ /g		s/ news\([0-9]*\) / __news\1__ /g		s/ ns32000 / __ns32000__ /g		s/ pdp11 / __pdp11__ /g		s/ pyr / __pyr__ /g		s/ sel / __sel__ /g		s/ sony_news / __sony_news__ /g		s/ sparc / __sparc__ /g		s/ sun\([a-z0-9]*\) / __sun\1__ /g		s/ tahoe / __tahoe__ /g		s/ tower\([_0-9]*\) / __tower\1__ /g		s/ u370 / __u370__ /g		s/ u3b\([0-9]*\) / __u3b\1__ /g		s/ unix / __unix__ /g		s/ vax / __vax__ /g		s/ _*MIPSE\([LB]\) / __MIPSE\1__ /g		s/ _*\([Rr][34]\)000 / __\1000__ /g		s/ _*SYSTYPE_\([A-Z0-9]*\) / __SYSTYPE_\1__ /g		s/ \([a-zA-Z0-9_][a-zA-Z0-9_]*\) /\1/g	  }	  /^#define.NULL[ 	]/	i\		#undef NULL	' $2/$file > $2/$file.	mv $2/$file. $2/$file	if cmp $file $2/$file >/dev/null 2>&1 \	    || egrep 'This file is part of the GNU C Library' $2/$file >/dev/null 2>&1; then	   rm $2/$file	else	   echo Fixed $file	   # Find any include directives that use "file".	   for include in `egrep '^[ 	]*#[ 	]*include[ 	]*"[^/]' $2/$file | sed -e 's/^[ 	]*#[ 	]*include[ 	]*"\([^"]*\)".*$/\1/'`; do	      dir=`echo $file | sed -e s'|/[^/]*$||'`	      required="$required $1 $dir/$include $2/$dir/$include"	   done	fi      fi    fi  done  shift; shiftdonecd ${INPUT}# Install the proper definition of the three standard types in header files# that they come from.for file in sys/types.h stdlib.h sys/stdtypes.h stddef.h memory.h unistd.h; do  if [ -r $file ] && [ ! -r ${LIB}/$file ]; then    cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"    chmod +w ${LIB}/$file 2>/dev/null    chmod a+r ${LIB}/$file 2>/dev/null  fi  if [ -r ${LIB}/$file ]; then    echo Fixing size_t, ptrdiff_t and wchar_t in $file    sed \      -e '/typedef[ 	][ 	]*[a-z_][ 	a-z_]*[ 	]size_t/i\#ifndef __SIZE_TYPE__\#define __SIZE_TYPE__ long unsigned int\#endif' \      -e 's/typedef[ 	][ 	]*[a-z_][ 	a-z_]*[ 	]size_t/typedef __SIZE_TYPE__ size_t/' \      -e '/typedef[ 	][ 	]*[a-z_][ 	a-z_]*[ 	]ptrdiff_t/i\#ifndef __PTRDIFF_TYPE__\#define __PTRDIFF_TYPE__ long int\#endif' \      -e 's/typedef[ 	][ 	]*[a-z_][ 	a-z_]*[ 	]ptrdiff_t/typedef __PTRDIFF_TYPE__ ptrdiff_t/' \      -e '/typedef[ 	][ 	]*[a-z_][ 	a-z_]*[ 	]wchar_t/i\

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -