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