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