summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/gcc/fixinc.winnt
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/gcc/fixinc.winnt')
-rw-r--r--gnu/usr.bin/gcc/fixinc.winnt232
1 files changed, 232 insertions, 0 deletions
diff --git a/gnu/usr.bin/gcc/fixinc.winnt b/gnu/usr.bin/gcc/fixinc.winnt
new file mode 100644
index 00000000000..915ac723b85
--- /dev/null
+++ b/gnu/usr.bin/gcc/fixinc.winnt
@@ -0,0 +1,232 @@
+#! sh
+#
+# fixinc.winnt -- Install modified versions of Windows NT system include
+# files.
+#
+# Based on fixinc.sco script by Ian Lance Taylor (ian@airs.com)).
+# Modifications by Douglas Rupp (drupp@cs.washington.edu)
+#
+# 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.
+#
+# This script munges the native include files provided with Windows NT
+# 3.5 SDK systems so as to provide a reasonable namespace when
+# compiling with gcc. The header files by default do not
+# provide many essential definitions and declarations if
+# __STDC__ is 1. This script modifies the header files to check
+# for __STRICT_ANSI__ being defined instead. Once munged, the
+# resulting new system include files are placed in a directory
+# that GNU C will search *before* searching the Include
+# directory.
+#
+# See README-fixinc for more information.
+
+ORIG_DIR=`pwd`
+
+# Directory containing the original header files.
+cd $2; SEDFILE=`${PWDCMD-pwd}`/fixinc-nt.sed
+echo $SEDFILE
+if [ ! -f $SEDFILE ]
+then echo fixincludes: sed script 'fixinc-nt.sed' not found
+exit 1
+fi
+echo 'Using sed script: ' ${SEDFILE}
+
+cd $ORIG_DIR
+
+INPUT=${INCLUDE}
+echo 'Using the Include environment variable to find header files to fix'
+
+# 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>NUL; 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}"
+
+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 ${INPUT}
+ cd $1
+ files=`find . -name '*.[hH]' -type f -print`
+ echo 'Checking header files:'
+ for file in $files; do
+ echo $file
+ if egrep "!__STDC__" $file >NUL; then
+ if [ -r $file ]; then
+ cp $file $2/$file >NUL 2>&1 || echo "Can't copy $file"
+ chmod +w,a+r $2/$file
+
+# The following have been removed from the sed command below
+# because it is more useful to leave these things in.
+# The only reason to remove them was for -pedantic,
+# which isn't much of a reason. -- rms.
+# /^[ ]*#[ ]*ident/d
+
+ sed -e '
+ s/!__STDC__/!defined (__STRICT_ANSI__)/g
+ ' $2/$file > $2/$file.sed
+ mv $2/$file.sed $2/$file
+ if cmp $file $2/$file >NUL 2>&1; then
+ rm $2/$file
+ else
+ echo Fixed $file
+ fi
+ fi
+ fi
+ done
+ shift; shift
+done
+
+# Fix first broken decl of getcwd present on some svr4 systems.
+
+file=direct.h
+base=`basename $file`
+if [ -r ${LIB}/$file ]; then
+ file_to_fix=${LIB}/$file
+else
+ if [ -r ${INPUT}/$file ]; then
+ file_to_fix=${INPUT}/$file
+ else
+ file_to_fix=""
+ fi
+fi
+if [ \! -z "$file_to_fix" ]; then
+ echo Checking $file_to_fix
+ sed -e 's/getcwd(char \*, int)/getcwd(char *, size_t)/' $file_to_fix > /tmp/$base
+ if cmp $file_to_fix /tmp/$base >NUL 2>&1; then \
+ true
+ else
+ echo Fixed $file_to_fix
+ rm -f ${LIB}/$file
+ cp /tmp/$base ${LIB}/$file
+ chmod a+r ${LIB}/$file
+ fi
+ rm -f /tmp/$base
+fi
+
+file=rpcndr.h
+base=`basename $file`
+if [ -r ${LIB}/$file ]; then
+ file_to_fix=${LIB}/$file
+else
+ if [ -r ${INPUT}/$file ]; then
+ file_to_fix=${INPUT}/$file
+ else
+ file_to_fix=""
+ fi
+fi
+if [ \! -z "$file_to_fix" ]; then
+ echo Checking $file_to_fix
+ sed -e 's/Format\[\]/Format\[1\]/' $file_to_fix > /tmp/$base
+ if cmp $file_to_fix /tmp/$base >NUL 2>&1; then \
+ true
+ else
+ echo Fixed $file_to_fix
+ rm -f ${LIB}/$file
+ cp /tmp/$base ${LIB}/$file
+ chmod a+r ${LIB}/$file
+ fi
+ rm -f /tmp/$base
+fi
+
+file=winnt.h
+base=`basename $file`
+if [ -r ${LIB}/$file ]; then
+ file_to_fix=${LIB}/$file
+else
+ if [ -r ${INPUT}/$file ]; then
+ file_to_fix=${INPUT}/$file
+ else
+ file_to_fix=""
+ fi
+fi
+if [ \! -z "$file_to_fix" ]; then
+ echo Checking $file_to_fix
+ sed -e '
+ s/^#if !defined (__cplusplus)/#if 0/
+ s/^#define DECLSPEC_IMPORT __declspec(dllimport)/#define DECLSPEC_IMPORT/
+ ' $file_to_fix > /tmp/$base
+ if cmp $file_to_fix /tmp/$base >NUL 2>&1; then \
+ true
+ else
+ echo Fixed $file_to_fix
+ rm -f ${LIB}/$file
+ cp /tmp/$base ${LIB}/$file
+ chmod a+r ${LIB}/$file
+ fi
+ rm -f /tmp/$base
+fi
+
+echo 'Removing unneeded directories:'
+cd $LIB
+files=`find . -type d -print | sort -r`
+for file in $files; do
+ rmdir $LIB/$file > NUL 2>&1
+done
+
+exit 0