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