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