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