depcomp revision 1.1.1.1.2.2 1 1.1.1.1.2.2 snj #! /bin/sh
2 1.1.1.1.2.2 snj # depcomp - compile a program generating dependencies as side-effects
3 1.1.1.1.2.2 snj
4 1.1.1.1.2.2 snj scriptversion=2009-04-28.21; # UTC
5 1.1.1.1.2.2 snj
6 1.1.1.1.2.2 snj # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7 1.1.1.1.2.2 snj # Software Foundation, Inc.
8 1.1.1.1.2.2 snj
9 1.1.1.1.2.2 snj # This program is free software; you can redistribute it and/or modify
10 1.1.1.1.2.2 snj # it under the terms of the GNU General Public License as published by
11 1.1.1.1.2.2 snj # the Free Software Foundation; either version 2, or (at your option)
12 1.1.1.1.2.2 snj # any later version.
13 1.1.1.1.2.2 snj
14 1.1.1.1.2.2 snj # This program is distributed in the hope that it will be useful,
15 1.1.1.1.2.2 snj # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 1.1.1.1.2.2 snj # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 1.1.1.1.2.2 snj # GNU General Public License for more details.
18 1.1.1.1.2.2 snj
19 1.1.1.1.2.2 snj # You should have received a copy of the GNU General Public License
20 1.1.1.1.2.2 snj # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 1.1.1.1.2.2 snj
22 1.1.1.1.2.2 snj # As a special exception to the GNU General Public License, if you
23 1.1.1.1.2.2 snj # distribute this file as part of a program that contains a
24 1.1.1.1.2.2 snj # configuration script generated by Autoconf, you may include it under
25 1.1.1.1.2.2 snj # the same distribution terms that you use for the rest of that program.
26 1.1.1.1.2.2 snj
27 1.1.1.1.2.2 snj # Originally written by Alexandre Oliva <oliva (at] dcc.unicamp.br>.
28 1.1.1.1.2.2 snj
29 1.1.1.1.2.2 snj case $1 in
30 1.1.1.1.2.2 snj '')
31 1.1.1.1.2.2 snj echo "$0: No command. Try \`$0 --help' for more information." 1>&2
32 1.1.1.1.2.2 snj exit 1;
33 1.1.1.1.2.2 snj ;;
34 1.1.1.1.2.2 snj -h | --h*)
35 1.1.1.1.2.2 snj cat <<\EOF
36 1.1.1.1.2.2 snj Usage: depcomp [--help] [--version] PROGRAM [ARGS]
37 1.1.1.1.2.2 snj
38 1.1.1.1.2.2 snj Run PROGRAMS ARGS to compile a file, generating dependencies
39 1.1.1.1.2.2 snj as side-effects.
40 1.1.1.1.2.2 snj
41 1.1.1.1.2.2 snj Environment variables:
42 1.1.1.1.2.2 snj depmode Dependency tracking mode.
43 1.1.1.1.2.2 snj source Source file read by `PROGRAMS ARGS'.
44 1.1.1.1.2.2 snj object Object file output by `PROGRAMS ARGS'.
45 1.1.1.1.2.2 snj DEPDIR directory where to store dependencies.
46 1.1.1.1.2.2 snj depfile Dependency file to output.
47 1.1.1.1.2.2 snj tmpdepfile Temporary file to use when outputing dependencies.
48 1.1.1.1.2.2 snj libtool Whether libtool is used (yes/no).
49 1.1.1.1.2.2 snj
50 1.1.1.1.2.2 snj Report bugs to <bug-automake (at] gnu.org>.
51 1.1.1.1.2.2 snj EOF
52 1.1.1.1.2.2 snj exit $?
53 1.1.1.1.2.2 snj ;;
54 1.1.1.1.2.2 snj -v | --v*)
55 1.1.1.1.2.2 snj echo "depcomp $scriptversion"
56 1.1.1.1.2.2 snj exit $?
57 1.1.1.1.2.2 snj ;;
58 1.1.1.1.2.2 snj esac
59 1.1.1.1.2.2 snj
60 1.1.1.1.2.2 snj if test -z "$depmode" || test -z "$source" || test -z "$object"; then
61 1.1.1.1.2.2 snj echo "depcomp: Variables source, object and depmode must be set" 1>&2
62 1.1.1.1.2.2 snj exit 1
63 1.1.1.1.2.2 snj fi
64 1.1.1.1.2.2 snj
65 1.1.1.1.2.2 snj # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66 1.1.1.1.2.2 snj depfile=${depfile-`echo "$object" |
67 1.1.1.1.2.2 snj sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68 1.1.1.1.2.2 snj tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69 1.1.1.1.2.2 snj
70 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
71 1.1.1.1.2.2 snj
72 1.1.1.1.2.2 snj # Some modes work just like other modes, but use different flags. We
73 1.1.1.1.2.2 snj # parameterize here, but still list the modes in the big case below,
74 1.1.1.1.2.2 snj # to make depend.m4 easier to write. Note that we *cannot* use a case
75 1.1.1.1.2.2 snj # here, because this file can only contain one case statement.
76 1.1.1.1.2.2 snj if test "$depmode" = hp; then
77 1.1.1.1.2.2 snj # HP compiler uses -M and no extra arg.
78 1.1.1.1.2.2 snj gccflag=-M
79 1.1.1.1.2.2 snj depmode=gcc
80 1.1.1.1.2.2 snj fi
81 1.1.1.1.2.2 snj
82 1.1.1.1.2.2 snj if test "$depmode" = dashXmstdout; then
83 1.1.1.1.2.2 snj # This is just like dashmstdout with a different argument.
84 1.1.1.1.2.2 snj dashmflag=-xM
85 1.1.1.1.2.2 snj depmode=dashmstdout
86 1.1.1.1.2.2 snj fi
87 1.1.1.1.2.2 snj
88 1.1.1.1.2.2 snj cygpath_u="cygpath -u -f -"
89 1.1.1.1.2.2 snj if test "$depmode" = msvcmsys; then
90 1.1.1.1.2.2 snj # This is just like msvisualcpp but w/o cygpath translation.
91 1.1.1.1.2.2 snj # Just convert the backslash-escaped backslashes to single forward
92 1.1.1.1.2.2 snj # slashes to satisfy depend.m4
93 1.1.1.1.2.2 snj cygpath_u="sed s,\\\\\\\\,/,g"
94 1.1.1.1.2.2 snj depmode=msvisualcpp
95 1.1.1.1.2.2 snj fi
96 1.1.1.1.2.2 snj
97 1.1.1.1.2.2 snj case "$depmode" in
98 1.1.1.1.2.2 snj gcc3)
99 1.1.1.1.2.2 snj ## gcc 3 implements dependency tracking that does exactly what
100 1.1.1.1.2.2 snj ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
101 1.1.1.1.2.2 snj ## it if -MD -MP comes after the -MF stuff. Hmm.
102 1.1.1.1.2.2 snj ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103 1.1.1.1.2.2 snj ## the command line argument order; so add the flags where they
104 1.1.1.1.2.2 snj ## appear in depend2.am. Note that the slowdown incurred here
105 1.1.1.1.2.2 snj ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106 1.1.1.1.2.2 snj for arg
107 1.1.1.1.2.2 snj do
108 1.1.1.1.2.2 snj case $arg in
109 1.1.1.1.2.2 snj -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110 1.1.1.1.2.2 snj *) set fnord "$@" "$arg" ;;
111 1.1.1.1.2.2 snj esac
112 1.1.1.1.2.2 snj shift # fnord
113 1.1.1.1.2.2 snj shift # $arg
114 1.1.1.1.2.2 snj done
115 1.1.1.1.2.2 snj "$@"
116 1.1.1.1.2.2 snj stat=$?
117 1.1.1.1.2.2 snj if test $stat -eq 0; then :
118 1.1.1.1.2.2 snj else
119 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
120 1.1.1.1.2.2 snj exit $stat
121 1.1.1.1.2.2 snj fi
122 1.1.1.1.2.2 snj mv "$tmpdepfile" "$depfile"
123 1.1.1.1.2.2 snj ;;
124 1.1.1.1.2.2 snj
125 1.1.1.1.2.2 snj gcc)
126 1.1.1.1.2.2 snj ## There are various ways to get dependency output from gcc. Here's
127 1.1.1.1.2.2 snj ## why we pick this rather obscure method:
128 1.1.1.1.2.2 snj ## - Don't want to use -MD because we'd like the dependencies to end
129 1.1.1.1.2.2 snj ## up in a subdir. Having to rename by hand is ugly.
130 1.1.1.1.2.2 snj ## (We might end up doing this anyway to support other compilers.)
131 1.1.1.1.2.2 snj ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132 1.1.1.1.2.2 snj ## -MM, not -M (despite what the docs say).
133 1.1.1.1.2.2 snj ## - Using -M directly means running the compiler twice (even worse
134 1.1.1.1.2.2 snj ## than renaming).
135 1.1.1.1.2.2 snj if test -z "$gccflag"; then
136 1.1.1.1.2.2 snj gccflag=-MD,
137 1.1.1.1.2.2 snj fi
138 1.1.1.1.2.2 snj "$@" -Wp,"$gccflag$tmpdepfile"
139 1.1.1.1.2.2 snj stat=$?
140 1.1.1.1.2.2 snj if test $stat -eq 0; then :
141 1.1.1.1.2.2 snj else
142 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
143 1.1.1.1.2.2 snj exit $stat
144 1.1.1.1.2.2 snj fi
145 1.1.1.1.2.2 snj rm -f "$depfile"
146 1.1.1.1.2.2 snj echo "$object : \\" > "$depfile"
147 1.1.1.1.2.2 snj alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148 1.1.1.1.2.2 snj ## The second -e expression handles DOS-style file names with drive letters.
149 1.1.1.1.2.2 snj sed -e 's/^[^:]*: / /' \
150 1.1.1.1.2.2 snj -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151 1.1.1.1.2.2 snj ## This next piece of magic avoids the `deleted header file' problem.
152 1.1.1.1.2.2 snj ## The problem is that when a header file which appears in a .P file
153 1.1.1.1.2.2 snj ## is deleted, the dependency causes make to die (because there is
154 1.1.1.1.2.2 snj ## typically no way to rebuild the header). We avoid this by adding
155 1.1.1.1.2.2 snj ## dummy dependencies for each header file. Too bad gcc doesn't do
156 1.1.1.1.2.2 snj ## this for us directly.
157 1.1.1.1.2.2 snj tr ' ' '
158 1.1.1.1.2.2 snj ' < "$tmpdepfile" |
159 1.1.1.1.2.2 snj ## Some versions of gcc put a space before the `:'. On the theory
160 1.1.1.1.2.2 snj ## that the space means something, we add a space to the output as
161 1.1.1.1.2.2 snj ## well.
162 1.1.1.1.2.2 snj ## Some versions of the HPUX 10.20 sed can't process this invocation
163 1.1.1.1.2.2 snj ## correctly. Breaking it into two sed invocations is a workaround.
164 1.1.1.1.2.2 snj sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
166 1.1.1.1.2.2 snj ;;
167 1.1.1.1.2.2 snj
168 1.1.1.1.2.2 snj hp)
169 1.1.1.1.2.2 snj # This case exists only to let depend.m4 do its work. It works by
170 1.1.1.1.2.2 snj # looking at the text of this script. This case will never be run,
171 1.1.1.1.2.2 snj # since it is checked for above.
172 1.1.1.1.2.2 snj exit 1
173 1.1.1.1.2.2 snj ;;
174 1.1.1.1.2.2 snj
175 1.1.1.1.2.2 snj sgi)
176 1.1.1.1.2.2 snj if test "$libtool" = yes; then
177 1.1.1.1.2.2 snj "$@" "-Wp,-MDupdate,$tmpdepfile"
178 1.1.1.1.2.2 snj else
179 1.1.1.1.2.2 snj "$@" -MDupdate "$tmpdepfile"
180 1.1.1.1.2.2 snj fi
181 1.1.1.1.2.2 snj stat=$?
182 1.1.1.1.2.2 snj if test $stat -eq 0; then :
183 1.1.1.1.2.2 snj else
184 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
185 1.1.1.1.2.2 snj exit $stat
186 1.1.1.1.2.2 snj fi
187 1.1.1.1.2.2 snj rm -f "$depfile"
188 1.1.1.1.2.2 snj
189 1.1.1.1.2.2 snj if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
190 1.1.1.1.2.2 snj echo "$object : \\" > "$depfile"
191 1.1.1.1.2.2 snj
192 1.1.1.1.2.2 snj # Clip off the initial element (the dependent). Don't try to be
193 1.1.1.1.2.2 snj # clever and replace this with sed code, as IRIX sed won't handle
194 1.1.1.1.2.2 snj # lines with more than a fixed number of characters (4096 in
195 1.1.1.1.2.2 snj # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
196 1.1.1.1.2.2 snj # the IRIX cc adds comments like `#:fec' to the end of the
197 1.1.1.1.2.2 snj # dependency line.
198 1.1.1.1.2.2 snj tr ' ' '
199 1.1.1.1.2.2 snj ' < "$tmpdepfile" \
200 1.1.1.1.2.2 snj | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201 1.1.1.1.2.2 snj tr '
202 1.1.1.1.2.2 snj ' ' ' >> "$depfile"
203 1.1.1.1.2.2 snj echo >> "$depfile"
204 1.1.1.1.2.2 snj
205 1.1.1.1.2.2 snj # The second pass generates a dummy entry for each header file.
206 1.1.1.1.2.2 snj tr ' ' '
207 1.1.1.1.2.2 snj ' < "$tmpdepfile" \
208 1.1.1.1.2.2 snj | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209 1.1.1.1.2.2 snj >> "$depfile"
210 1.1.1.1.2.2 snj else
211 1.1.1.1.2.2 snj # The sourcefile does not contain any dependencies, so just
212 1.1.1.1.2.2 snj # store a dummy comment line, to avoid errors with the Makefile
213 1.1.1.1.2.2 snj # "include basename.Plo" scheme.
214 1.1.1.1.2.2 snj echo "#dummy" > "$depfile"
215 1.1.1.1.2.2 snj fi
216 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
217 1.1.1.1.2.2 snj ;;
218 1.1.1.1.2.2 snj
219 1.1.1.1.2.2 snj aix)
220 1.1.1.1.2.2 snj # The C for AIX Compiler uses -M and outputs the dependencies
221 1.1.1.1.2.2 snj # in a .u file. In older versions, this file always lives in the
222 1.1.1.1.2.2 snj # current directory. Also, the AIX compiler puts `$object:' at the
223 1.1.1.1.2.2 snj # start of each line; $object doesn't have directory information.
224 1.1.1.1.2.2 snj # Version 6 uses the directory in both cases.
225 1.1.1.1.2.2 snj dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226 1.1.1.1.2.2 snj test "x$dir" = "x$object" && dir=
227 1.1.1.1.2.2 snj base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228 1.1.1.1.2.2 snj if test "$libtool" = yes; then
229 1.1.1.1.2.2 snj tmpdepfile1=$dir$base.u
230 1.1.1.1.2.2 snj tmpdepfile2=$base.u
231 1.1.1.1.2.2 snj tmpdepfile3=$dir.libs/$base.u
232 1.1.1.1.2.2 snj "$@" -Wc,-M
233 1.1.1.1.2.2 snj else
234 1.1.1.1.2.2 snj tmpdepfile1=$dir$base.u
235 1.1.1.1.2.2 snj tmpdepfile2=$dir$base.u
236 1.1.1.1.2.2 snj tmpdepfile3=$dir$base.u
237 1.1.1.1.2.2 snj "$@" -M
238 1.1.1.1.2.2 snj fi
239 1.1.1.1.2.2 snj stat=$?
240 1.1.1.1.2.2 snj
241 1.1.1.1.2.2 snj if test $stat -eq 0; then :
242 1.1.1.1.2.2 snj else
243 1.1.1.1.2.2 snj rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244 1.1.1.1.2.2 snj exit $stat
245 1.1.1.1.2.2 snj fi
246 1.1.1.1.2.2 snj
247 1.1.1.1.2.2 snj for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248 1.1.1.1.2.2 snj do
249 1.1.1.1.2.2 snj test -f "$tmpdepfile" && break
250 1.1.1.1.2.2 snj done
251 1.1.1.1.2.2 snj if test -f "$tmpdepfile"; then
252 1.1.1.1.2.2 snj # Each line is of the form `foo.o: dependent.h'.
253 1.1.1.1.2.2 snj # Do two passes, one to just change these to
254 1.1.1.1.2.2 snj # `$object: dependent.h' and one to simply `dependent.h:'.
255 1.1.1.1.2.2 snj sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256 1.1.1.1.2.2 snj # That's a tab and a space in the [].
257 1.1.1.1.2.2 snj sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258 1.1.1.1.2.2 snj else
259 1.1.1.1.2.2 snj # The sourcefile does not contain any dependencies, so just
260 1.1.1.1.2.2 snj # store a dummy comment line, to avoid errors with the Makefile
261 1.1.1.1.2.2 snj # "include basename.Plo" scheme.
262 1.1.1.1.2.2 snj echo "#dummy" > "$depfile"
263 1.1.1.1.2.2 snj fi
264 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
265 1.1.1.1.2.2 snj ;;
266 1.1.1.1.2.2 snj
267 1.1.1.1.2.2 snj icc)
268 1.1.1.1.2.2 snj # Intel's C compiler understands `-MD -MF file'. However on
269 1.1.1.1.2.2 snj # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270 1.1.1.1.2.2 snj # ICC 7.0 will fill foo.d with something like
271 1.1.1.1.2.2 snj # foo.o: sub/foo.c
272 1.1.1.1.2.2 snj # foo.o: sub/foo.h
273 1.1.1.1.2.2 snj # which is wrong. We want:
274 1.1.1.1.2.2 snj # sub/foo.o: sub/foo.c
275 1.1.1.1.2.2 snj # sub/foo.o: sub/foo.h
276 1.1.1.1.2.2 snj # sub/foo.c:
277 1.1.1.1.2.2 snj # sub/foo.h:
278 1.1.1.1.2.2 snj # ICC 7.1 will output
279 1.1.1.1.2.2 snj # foo.o: sub/foo.c sub/foo.h
280 1.1.1.1.2.2 snj # and will wrap long lines using \ :
281 1.1.1.1.2.2 snj # foo.o: sub/foo.c ... \
282 1.1.1.1.2.2 snj # sub/foo.h ... \
283 1.1.1.1.2.2 snj # ...
284 1.1.1.1.2.2 snj
285 1.1.1.1.2.2 snj "$@" -MD -MF "$tmpdepfile"
286 1.1.1.1.2.2 snj stat=$?
287 1.1.1.1.2.2 snj if test $stat -eq 0; then :
288 1.1.1.1.2.2 snj else
289 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
290 1.1.1.1.2.2 snj exit $stat
291 1.1.1.1.2.2 snj fi
292 1.1.1.1.2.2 snj rm -f "$depfile"
293 1.1.1.1.2.2 snj # Each line is of the form `foo.o: dependent.h',
294 1.1.1.1.2.2 snj # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295 1.1.1.1.2.2 snj # Do two passes, one to just change these to
296 1.1.1.1.2.2 snj # `$object: dependent.h' and one to simply `dependent.h:'.
297 1.1.1.1.2.2 snj sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298 1.1.1.1.2.2 snj # Some versions of the HPUX 10.20 sed can't process this invocation
299 1.1.1.1.2.2 snj # correctly. Breaking it into two sed invocations is a workaround.
300 1.1.1.1.2.2 snj sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301 1.1.1.1.2.2 snj sed -e 's/$/ :/' >> "$depfile"
302 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
303 1.1.1.1.2.2 snj ;;
304 1.1.1.1.2.2 snj
305 1.1.1.1.2.2 snj hp2)
306 1.1.1.1.2.2 snj # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307 1.1.1.1.2.2 snj # compilers, which have integrated preprocessors. The correct option
308 1.1.1.1.2.2 snj # to use with these is +Maked; it writes dependencies to a file named
309 1.1.1.1.2.2 snj # 'foo.d', which lands next to the object file, wherever that
310 1.1.1.1.2.2 snj # happens to be.
311 1.1.1.1.2.2 snj # Much of this is similar to the tru64 case; see comments there.
312 1.1.1.1.2.2 snj dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313 1.1.1.1.2.2 snj test "x$dir" = "x$object" && dir=
314 1.1.1.1.2.2 snj base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315 1.1.1.1.2.2 snj if test "$libtool" = yes; then
316 1.1.1.1.2.2 snj tmpdepfile1=$dir$base.d
317 1.1.1.1.2.2 snj tmpdepfile2=$dir.libs/$base.d
318 1.1.1.1.2.2 snj "$@" -Wc,+Maked
319 1.1.1.1.2.2 snj else
320 1.1.1.1.2.2 snj tmpdepfile1=$dir$base.d
321 1.1.1.1.2.2 snj tmpdepfile2=$dir$base.d
322 1.1.1.1.2.2 snj "$@" +Maked
323 1.1.1.1.2.2 snj fi
324 1.1.1.1.2.2 snj stat=$?
325 1.1.1.1.2.2 snj if test $stat -eq 0; then :
326 1.1.1.1.2.2 snj else
327 1.1.1.1.2.2 snj rm -f "$tmpdepfile1" "$tmpdepfile2"
328 1.1.1.1.2.2 snj exit $stat
329 1.1.1.1.2.2 snj fi
330 1.1.1.1.2.2 snj
331 1.1.1.1.2.2 snj for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332 1.1.1.1.2.2 snj do
333 1.1.1.1.2.2 snj test -f "$tmpdepfile" && break
334 1.1.1.1.2.2 snj done
335 1.1.1.1.2.2 snj if test -f "$tmpdepfile"; then
336 1.1.1.1.2.2 snj sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337 1.1.1.1.2.2 snj # Add `dependent.h:' lines.
338 1.1.1.1.2.2 snj sed -ne '2,${
339 1.1.1.1.2.2 snj s/^ *//
340 1.1.1.1.2.2 snj s/ \\*$//
341 1.1.1.1.2.2 snj s/$/:/
342 1.1.1.1.2.2 snj p
343 1.1.1.1.2.2 snj }' "$tmpdepfile" >> "$depfile"
344 1.1.1.1.2.2 snj else
345 1.1.1.1.2.2 snj echo "#dummy" > "$depfile"
346 1.1.1.1.2.2 snj fi
347 1.1.1.1.2.2 snj rm -f "$tmpdepfile" "$tmpdepfile2"
348 1.1.1.1.2.2 snj ;;
349 1.1.1.1.2.2 snj
350 1.1.1.1.2.2 snj tru64)
351 1.1.1.1.2.2 snj # The Tru64 compiler uses -MD to generate dependencies as a side
352 1.1.1.1.2.2 snj # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353 1.1.1.1.2.2 snj # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354 1.1.1.1.2.2 snj # dependencies in `foo.d' instead, so we check for that too.
355 1.1.1.1.2.2 snj # Subdirectories are respected.
356 1.1.1.1.2.2 snj dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357 1.1.1.1.2.2 snj test "x$dir" = "x$object" && dir=
358 1.1.1.1.2.2 snj base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359 1.1.1.1.2.2 snj
360 1.1.1.1.2.2 snj if test "$libtool" = yes; then
361 1.1.1.1.2.2 snj # With Tru64 cc, shared objects can also be used to make a
362 1.1.1.1.2.2 snj # static library. This mechanism is used in libtool 1.4 series to
363 1.1.1.1.2.2 snj # handle both shared and static libraries in a single compilation.
364 1.1.1.1.2.2 snj # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365 1.1.1.1.2.2 snj #
366 1.1.1.1.2.2 snj # With libtool 1.5 this exception was removed, and libtool now
367 1.1.1.1.2.2 snj # generates 2 separate objects for the 2 libraries. These two
368 1.1.1.1.2.2 snj # compilations output dependencies in $dir.libs/$base.o.d and
369 1.1.1.1.2.2 snj # in $dir$base.o.d. We have to check for both files, because
370 1.1.1.1.2.2 snj # one of the two compilations can be disabled. We should prefer
371 1.1.1.1.2.2 snj # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372 1.1.1.1.2.2 snj # automatically cleaned when .libs/ is deleted, while ignoring
373 1.1.1.1.2.2 snj # the former would cause a distcleancheck panic.
374 1.1.1.1.2.2 snj tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
375 1.1.1.1.2.2 snj tmpdepfile2=$dir$base.o.d # libtool 1.5
376 1.1.1.1.2.2 snj tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
377 1.1.1.1.2.2 snj tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
378 1.1.1.1.2.2 snj "$@" -Wc,-MD
379 1.1.1.1.2.2 snj else
380 1.1.1.1.2.2 snj tmpdepfile1=$dir$base.o.d
381 1.1.1.1.2.2 snj tmpdepfile2=$dir$base.d
382 1.1.1.1.2.2 snj tmpdepfile3=$dir$base.d
383 1.1.1.1.2.2 snj tmpdepfile4=$dir$base.d
384 1.1.1.1.2.2 snj "$@" -MD
385 1.1.1.1.2.2 snj fi
386 1.1.1.1.2.2 snj
387 1.1.1.1.2.2 snj stat=$?
388 1.1.1.1.2.2 snj if test $stat -eq 0; then :
389 1.1.1.1.2.2 snj else
390 1.1.1.1.2.2 snj rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391 1.1.1.1.2.2 snj exit $stat
392 1.1.1.1.2.2 snj fi
393 1.1.1.1.2.2 snj
394 1.1.1.1.2.2 snj for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395 1.1.1.1.2.2 snj do
396 1.1.1.1.2.2 snj test -f "$tmpdepfile" && break
397 1.1.1.1.2.2 snj done
398 1.1.1.1.2.2 snj if test -f "$tmpdepfile"; then
399 1.1.1.1.2.2 snj sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400 1.1.1.1.2.2 snj # That's a tab and a space in the [].
401 1.1.1.1.2.2 snj sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402 1.1.1.1.2.2 snj else
403 1.1.1.1.2.2 snj echo "#dummy" > "$depfile"
404 1.1.1.1.2.2 snj fi
405 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
406 1.1.1.1.2.2 snj ;;
407 1.1.1.1.2.2 snj
408 1.1.1.1.2.2 snj #nosideeffect)
409 1.1.1.1.2.2 snj # This comment above is used by automake to tell side-effect
410 1.1.1.1.2.2 snj # dependency tracking mechanisms from slower ones.
411 1.1.1.1.2.2 snj
412 1.1.1.1.2.2 snj dashmstdout)
413 1.1.1.1.2.2 snj # Important note: in order to support this mode, a compiler *must*
414 1.1.1.1.2.2 snj # always write the preprocessed file to stdout, regardless of -o.
415 1.1.1.1.2.2 snj "$@" || exit $?
416 1.1.1.1.2.2 snj
417 1.1.1.1.2.2 snj # Remove the call to Libtool.
418 1.1.1.1.2.2 snj if test "$libtool" = yes; then
419 1.1.1.1.2.2 snj while test "X$1" != 'X--mode=compile'; do
420 1.1.1.1.2.2 snj shift
421 1.1.1.1.2.2 snj done
422 1.1.1.1.2.2 snj shift
423 1.1.1.1.2.2 snj fi
424 1.1.1.1.2.2 snj
425 1.1.1.1.2.2 snj # Remove `-o $object'.
426 1.1.1.1.2.2 snj IFS=" "
427 1.1.1.1.2.2 snj for arg
428 1.1.1.1.2.2 snj do
429 1.1.1.1.2.2 snj case $arg in
430 1.1.1.1.2.2 snj -o)
431 1.1.1.1.2.2 snj shift
432 1.1.1.1.2.2 snj ;;
433 1.1.1.1.2.2 snj $object)
434 1.1.1.1.2.2 snj shift
435 1.1.1.1.2.2 snj ;;
436 1.1.1.1.2.2 snj *)
437 1.1.1.1.2.2 snj set fnord "$@" "$arg"
438 1.1.1.1.2.2 snj shift # fnord
439 1.1.1.1.2.2 snj shift # $arg
440 1.1.1.1.2.2 snj ;;
441 1.1.1.1.2.2 snj esac
442 1.1.1.1.2.2 snj done
443 1.1.1.1.2.2 snj
444 1.1.1.1.2.2 snj test -z "$dashmflag" && dashmflag=-M
445 1.1.1.1.2.2 snj # Require at least two characters before searching for `:'
446 1.1.1.1.2.2 snj # in the target name. This is to cope with DOS-style filenames:
447 1.1.1.1.2.2 snj # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448 1.1.1.1.2.2 snj "$@" $dashmflag |
449 1.1.1.1.2.2 snj sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
450 1.1.1.1.2.2 snj rm -f "$depfile"
451 1.1.1.1.2.2 snj cat < "$tmpdepfile" > "$depfile"
452 1.1.1.1.2.2 snj tr ' ' '
453 1.1.1.1.2.2 snj ' < "$tmpdepfile" | \
454 1.1.1.1.2.2 snj ## Some versions of the HPUX 10.20 sed can't process this invocation
455 1.1.1.1.2.2 snj ## correctly. Breaking it into two sed invocations is a workaround.
456 1.1.1.1.2.2 snj sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
458 1.1.1.1.2.2 snj ;;
459 1.1.1.1.2.2 snj
460 1.1.1.1.2.2 snj dashXmstdout)
461 1.1.1.1.2.2 snj # This case only exists to satisfy depend.m4. It is never actually
462 1.1.1.1.2.2 snj # run, as this mode is specially recognized in the preamble.
463 1.1.1.1.2.2 snj exit 1
464 1.1.1.1.2.2 snj ;;
465 1.1.1.1.2.2 snj
466 1.1.1.1.2.2 snj makedepend)
467 1.1.1.1.2.2 snj "$@" || exit $?
468 1.1.1.1.2.2 snj # Remove any Libtool call
469 1.1.1.1.2.2 snj if test "$libtool" = yes; then
470 1.1.1.1.2.2 snj while test "X$1" != 'X--mode=compile'; do
471 1.1.1.1.2.2 snj shift
472 1.1.1.1.2.2 snj done
473 1.1.1.1.2.2 snj shift
474 1.1.1.1.2.2 snj fi
475 1.1.1.1.2.2 snj # X makedepend
476 1.1.1.1.2.2 snj shift
477 1.1.1.1.2.2 snj cleared=no eat=no
478 1.1.1.1.2.2 snj for arg
479 1.1.1.1.2.2 snj do
480 1.1.1.1.2.2 snj case $cleared in
481 1.1.1.1.2.2 snj no)
482 1.1.1.1.2.2 snj set ""; shift
483 1.1.1.1.2.2 snj cleared=yes ;;
484 1.1.1.1.2.2 snj esac
485 1.1.1.1.2.2 snj if test $eat = yes; then
486 1.1.1.1.2.2 snj eat=no
487 1.1.1.1.2.2 snj continue
488 1.1.1.1.2.2 snj fi
489 1.1.1.1.2.2 snj case "$arg" in
490 1.1.1.1.2.2 snj -D*|-I*)
491 1.1.1.1.2.2 snj set fnord "$@" "$arg"; shift ;;
492 1.1.1.1.2.2 snj # Strip any option that makedepend may not understand. Remove
493 1.1.1.1.2.2 snj # the object too, otherwise makedepend will parse it as a source file.
494 1.1.1.1.2.2 snj -arch)
495 1.1.1.1.2.2 snj eat=yes ;;
496 1.1.1.1.2.2 snj -*|$object)
497 1.1.1.1.2.2 snj ;;
498 1.1.1.1.2.2 snj *)
499 1.1.1.1.2.2 snj set fnord "$@" "$arg"; shift ;;
500 1.1.1.1.2.2 snj esac
501 1.1.1.1.2.2 snj done
502 1.1.1.1.2.2 snj obj_suffix=`echo "$object" | sed 's/^.*\././'`
503 1.1.1.1.2.2 snj touch "$tmpdepfile"
504 1.1.1.1.2.2 snj ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505 1.1.1.1.2.2 snj rm -f "$depfile"
506 1.1.1.1.2.2 snj cat < "$tmpdepfile" > "$depfile"
507 1.1.1.1.2.2 snj sed '1,2d' "$tmpdepfile" | tr ' ' '
508 1.1.1.1.2.2 snj ' | \
509 1.1.1.1.2.2 snj ## Some versions of the HPUX 10.20 sed can't process this invocation
510 1.1.1.1.2.2 snj ## correctly. Breaking it into two sed invocations is a workaround.
511 1.1.1.1.2.2 snj sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512 1.1.1.1.2.2 snj rm -f "$tmpdepfile" "$tmpdepfile".bak
513 1.1.1.1.2.2 snj ;;
514 1.1.1.1.2.2 snj
515 1.1.1.1.2.2 snj cpp)
516 1.1.1.1.2.2 snj # Important note: in order to support this mode, a compiler *must*
517 1.1.1.1.2.2 snj # always write the preprocessed file to stdout.
518 1.1.1.1.2.2 snj "$@" || exit $?
519 1.1.1.1.2.2 snj
520 1.1.1.1.2.2 snj # Remove the call to Libtool.
521 1.1.1.1.2.2 snj if test "$libtool" = yes; then
522 1.1.1.1.2.2 snj while test "X$1" != 'X--mode=compile'; do
523 1.1.1.1.2.2 snj shift
524 1.1.1.1.2.2 snj done
525 1.1.1.1.2.2 snj shift
526 1.1.1.1.2.2 snj fi
527 1.1.1.1.2.2 snj
528 1.1.1.1.2.2 snj # Remove `-o $object'.
529 1.1.1.1.2.2 snj IFS=" "
530 1.1.1.1.2.2 snj for arg
531 1.1.1.1.2.2 snj do
532 1.1.1.1.2.2 snj case $arg in
533 1.1.1.1.2.2 snj -o)
534 1.1.1.1.2.2 snj shift
535 1.1.1.1.2.2 snj ;;
536 1.1.1.1.2.2 snj $object)
537 1.1.1.1.2.2 snj shift
538 1.1.1.1.2.2 snj ;;
539 1.1.1.1.2.2 snj *)
540 1.1.1.1.2.2 snj set fnord "$@" "$arg"
541 1.1.1.1.2.2 snj shift # fnord
542 1.1.1.1.2.2 snj shift # $arg
543 1.1.1.1.2.2 snj ;;
544 1.1.1.1.2.2 snj esac
545 1.1.1.1.2.2 snj done
546 1.1.1.1.2.2 snj
547 1.1.1.1.2.2 snj "$@" -E |
548 1.1.1.1.2.2 snj sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549 1.1.1.1.2.2 snj -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550 1.1.1.1.2.2 snj sed '$ s: \\$::' > "$tmpdepfile"
551 1.1.1.1.2.2 snj rm -f "$depfile"
552 1.1.1.1.2.2 snj echo "$object : \\" > "$depfile"
553 1.1.1.1.2.2 snj cat < "$tmpdepfile" >> "$depfile"
554 1.1.1.1.2.2 snj sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
556 1.1.1.1.2.2 snj ;;
557 1.1.1.1.2.2 snj
558 1.1.1.1.2.2 snj msvisualcpp)
559 1.1.1.1.2.2 snj # Important note: in order to support this mode, a compiler *must*
560 1.1.1.1.2.2 snj # always write the preprocessed file to stdout.
561 1.1.1.1.2.2 snj "$@" || exit $?
562 1.1.1.1.2.2 snj
563 1.1.1.1.2.2 snj # Remove the call to Libtool.
564 1.1.1.1.2.2 snj if test "$libtool" = yes; then
565 1.1.1.1.2.2 snj while test "X$1" != 'X--mode=compile'; do
566 1.1.1.1.2.2 snj shift
567 1.1.1.1.2.2 snj done
568 1.1.1.1.2.2 snj shift
569 1.1.1.1.2.2 snj fi
570 1.1.1.1.2.2 snj
571 1.1.1.1.2.2 snj IFS=" "
572 1.1.1.1.2.2 snj for arg
573 1.1.1.1.2.2 snj do
574 1.1.1.1.2.2 snj case "$arg" in
575 1.1.1.1.2.2 snj -o)
576 1.1.1.1.2.2 snj shift
577 1.1.1.1.2.2 snj ;;
578 1.1.1.1.2.2 snj $object)
579 1.1.1.1.2.2 snj shift
580 1.1.1.1.2.2 snj ;;
581 1.1.1.1.2.2 snj "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582 1.1.1.1.2.2 snj set fnord "$@"
583 1.1.1.1.2.2 snj shift
584 1.1.1.1.2.2 snj shift
585 1.1.1.1.2.2 snj ;;
586 1.1.1.1.2.2 snj *)
587 1.1.1.1.2.2 snj set fnord "$@" "$arg"
588 1.1.1.1.2.2 snj shift
589 1.1.1.1.2.2 snj shift
590 1.1.1.1.2.2 snj ;;
591 1.1.1.1.2.2 snj esac
592 1.1.1.1.2.2 snj done
593 1.1.1.1.2.2 snj "$@" -E 2>/dev/null |
594 1.1.1.1.2.2 snj sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595 1.1.1.1.2.2 snj rm -f "$depfile"
596 1.1.1.1.2.2 snj echo "$object : \\" > "$depfile"
597 1.1.1.1.2.2 snj sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
598 1.1.1.1.2.2 snj echo " " >> "$depfile"
599 1.1.1.1.2.2 snj sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600 1.1.1.1.2.2 snj rm -f "$tmpdepfile"
601 1.1.1.1.2.2 snj ;;
602 1.1.1.1.2.2 snj
603 1.1.1.1.2.2 snj msvcmsys)
604 1.1.1.1.2.2 snj # This case exists only to let depend.m4 do its work. It works by
605 1.1.1.1.2.2 snj # looking at the text of this script. This case will never be run,
606 1.1.1.1.2.2 snj # since it is checked for above.
607 1.1.1.1.2.2 snj exit 1
608 1.1.1.1.2.2 snj ;;
609 1.1.1.1.2.2 snj
610 1.1.1.1.2.2 snj none)
611 1.1.1.1.2.2 snj exec "$@"
612 1.1.1.1.2.2 snj ;;
613 1.1.1.1.2.2 snj
614 1.1.1.1.2.2 snj *)
615 1.1.1.1.2.2 snj echo "Unknown depmode $depmode" 1>&2
616 1.1.1.1.2.2 snj exit 1
617 1.1.1.1.2.2 snj ;;
618 1.1.1.1.2.2 snj esac
619 1.1.1.1.2.2 snj
620 1.1.1.1.2.2 snj exit 0
621 1.1.1.1.2.2 snj
622 1.1.1.1.2.2 snj # Local Variables:
623 1.1.1.1.2.2 snj # mode: shell-script
624 1.1.1.1.2.2 snj # sh-indentation: 2
625 1.1.1.1.2.2 snj # eval: (add-hook 'write-file-hooks 'time-stamp)
626 1.1.1.1.2.2 snj # time-stamp-start: "scriptversion="
627 1.1.1.1.2.2 snj # time-stamp-format: "%:y-%02m-%02d.%02H"
628 1.1.1.1.2.2 snj # time-stamp-time-zone: "UTC"
629 1.1.1.1.2.2 snj # time-stamp-end: "; # UTC"
630 1.1.1.1.2.2 snj # End:
631