OSDN Git Service

91th Cygnus<->FSF merge
[pf3gnuchains/gcc-fork.git] / gcc / fixinc.dgux
1 #!/bin/sh
2 #
3 # modified for dgux by hassey@dg-rtp.dg.com based on
4 #
5 #   fixinc.svr4  written by Ron Guilmette (rfg@ncd.com).
6 #
7 # This file is part of GNU CC.
8
9 # GNU CC is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 2, or (at your option)
12 # any later version.
13
14 # GNU CC is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 # GNU General Public License for more details.
18
19 # You should have received a copy of the GNU General Public License
20 # along with GNU CC; see the file COPYING.  If not, write to
21 # the Free Software Foundation, 59 Temple Place - Suite 330,
22 # Boston, MA 02111-1307, USA.
23 #
24 #
25 #       See README-fixinc for more information.
26
27 # Directory containing the original header files.
28 INPUT=${2-${INPUT-/usr/include}}
29
30 # Fail if no arg to specify a directory for the output.
31 if [ x$1 = x ]
32 then echo fixincludes: no output directory specified
33 exit 1
34 fi
35
36 # Directory in which to store the results.
37 LIB=${1?"fixincludes: output directory not specified"}
38
39 # Make sure it exists.
40 if [ ! -d $LIB ]; then
41   mkdir $LIB || exit 1
42 fi
43
44 ORIG_DIR=`pwd`
45
46 # Make LIB absolute if it is relative.
47 # Don't do this if not necessary, since may screw up automounters.
48 case $LIB in
49 /*)
50         ;;
51 *)
52         cd $LIB; LIB=`${PWDCMD-pwd}`
53         ;;
54 esac
55
56 echo 'Building fixincludes in ' ${LIB}
57
58 # Determine whether this filesystem has symbolic links.
59 if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
60   rm -f $LIB/ShouldNotExist
61   LINKS=true
62 else
63   LINKS=false
64 fi
65
66 echo 'Making directories:'
67 cd ${INPUT}
68 if $LINKS; then
69   files=`ls -LR | sed -n s/:$//p`
70 else
71   files=`find . -type d -print | sed '/^.$/d'`
72 fi
73 for file in $files; do
74   rm -rf $LIB/$file
75   if [ ! -d $LIB/$file ]
76   then mkdir $LIB/$file
77   fi
78 done
79
80 # treetops gets an alternating list
81 # of old directories to copy
82 # and the new directories to copy to.
83 treetops="${INPUT} ${LIB}"
84
85 if $LINKS; then
86   echo 'Making internal symbolic directory links'
87   for file in $files; do
88     dest=`ls -ld $file | sed -n 's/.*-> //p'`
89     if [ "$dest" ]; then    
90       cwd=`pwd`
91       # In case $dest is relative, get to $file's dir first.
92       cd ${INPUT}
93       cd `echo ./$file | sed -n 's&[^/]*$&&p'`
94       # Check that the target directory exists.
95       # Redirections changed to avoid bug in sh on Ultrix.
96       (cd $dest) > /dev/null 2>&1
97       if [ $? = 0 ]; then
98         cd $dest
99         # X gets the dir that the link actually leads to.
100         x=`pwd`
101         # If link leads back into ${INPUT},
102         # make a similar link here.
103         if expr $x : "${INPUT}/.*" > /dev/null; then
104           # Y gets the actual target dir name, relative to ${INPUT}.
105           y=`echo $x | sed -n "s&${INPUT}/&&p"`
106           # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
107           dots=`echo "$file" |
108             sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
109           echo $file '->' $dots$y ': Making link'
110           rm -fr ${LIB}/$file > /dev/null 2>&1
111           ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
112         else
113           # If the link is to outside ${INPUT},
114           # treat this directory as if it actually contained the files.
115 # This line used to have $dest instead of $x.
116 # $dest seemed to be wrong for links found in subdirectories
117 # of ${INPUT}.  Does this change break anything?
118           treetops="$treetops $x ${LIB}/$file"
119         fi
120       fi
121       cd $cwd
122     fi
123   done
124 fi
125
126 # Completely replace <_int_varargs.h> with a file that defines
127 # va_list and gnuc_va_list
128
129 file=_int_varargs.h
130 if [ -r ${INPUT}/$file ]; then
131   echo Replacing $file
132   cat > ${LIB}/$file << EOF
133 /* This file was generated by fixinc.dgux.  */
134 #ifndef __INT_VARARGS_H
135 #define __INT_VARARGS_H
136
137 #if defined(__m88k__) && defined (__DGUX__)
138 #ifndef __GNUC_VA_LIST
139 #define __GNUC_VA_LIST
140 typedef struct
141 {
142   int  __va_arg;                /* argument number */
143   int *__va_stk;                /* start of args passed on stack */
144   int *__va_reg;                /* start of args passed in regs */
145 } __gnuc_va_list;
146 #endif /* not __GNUC_VA_LIST */
147 #endif /* 88k && dgux */
148
149 #ifndef _VA_LIST_
150 #define _VA_LIST_
151 typedef __gnuc_va_list va_list;
152 #endif /* _VA_LIST_ */
153
154 #endif /* __INT_VARARGS_H */
155
156 EOF
157   chmod a+r ${LIB}/$file
158 fi
159
160 echo 'Removing unneeded directories:'
161 cd $LIB
162 files=`find . -type d -print | sort -r`
163 for file in $files; do
164   rmdir $LIB/$file > /dev/null 2>&1
165 done
166
167 if $LINKS; then
168   echo 'Making internal symbolic non-directory links'
169   cd ${INPUT}
170   files=`find . -type l -print`
171   for file in $files; do
172     dest=`ls -ld $file | sed -n 's/.*-> //p'`
173     if expr "$dest" : '[^/].*' > /dev/null; then    
174       target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
175       if [ -f $target ]; then
176         ln -s $dest ${LIB}/$file >/dev/null 2>&1
177       fi
178     fi
179   done
180 fi
181
182 cd ${ORIG_DIR}
183
184 exit 0
185