summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/fixinc.dgux
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/fixinc.dgux')
-rwxr-xr-xcontrib/gcc/fixinc.dgux185
1 files changed, 185 insertions, 0 deletions
diff --git a/contrib/gcc/fixinc.dgux b/contrib/gcc/fixinc.dgux
new file mode 100755
index 0000000..422ba5f
--- /dev/null
+++ b/contrib/gcc/fixinc.dgux
@@ -0,0 +1,185 @@
+#!/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
+
OpenPOWER on IntegriCloud