26
28
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
32
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
37
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
39
Run PROGRAMS ARGS to compile a file, generating dependencies
42
Environment variables:
43
depmode Dependency tracking mode.
44
source Source file read by `PROGRAMS ARGS'.
45
object Object file output by `PROGRAMS ARGS'.
46
DEPDIR directory where to store dependencies.
47
depfile Dependency file to output.
48
tmpdepfile Temporary file to use when outputing dependencies.
49
libtool Whether libtool is used (yes/no).
51
Report bugs to <bug-automake@gnu.org>.
56
echo "depcomp $scriptversion"
28
61
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
29
62
echo "depcomp: Variables source, object and depmode must be set" 1>&2
32
# `libtool' can also be set to `yes' or `no'.
34
depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
66
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
67
depfile=${depfile-`echo "$object" |
68
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
35
69
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
37
71
rm -f "$tmpdepfile"
165
199
# The C for AIX Compiler uses -M and outputs the dependencies
166
# in a .u file. This file always lives in the current directory.
167
# Also, the AIX compiler puts `$object:' at the start of each line;
168
# $object doesn't have directory information.
169
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
200
# in a .u file. In older versions, this file always lives in the
201
# current directory. Also, the AIX compiler puts `$object:' at the
202
# start of each line; $object doesn't have directory information.
203
# Version 6 uses the directory in both cases.
204
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
170
205
tmpdepfile="$stripped.u"
171
outname="$stripped.o"
172
206
if test "$libtool" = yes; then
213
if test -f "$tmpdepfile"; then :
215
stripped=`echo "$stripped" | sed 's,^.*/,,'`
216
tmpdepfile="$stripped.u"
179
219
if test $stat -eq 0; then :
181
221
rm -f "$tmpdepfile"
197
238
rm -f "$tmpdepfile"
242
# Intel's C compiler understands `-MD -MF file'. However on
243
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
244
# ICC 7.0 will fill foo.d with something like
247
# which is wrong. We want:
248
# sub/foo.o: sub/foo.c
249
# sub/foo.o: sub/foo.h
252
# ICC 7.1 will output
253
# foo.o: sub/foo.c sub/foo.h
254
# and will wrap long lines using \ :
255
# foo.o: sub/foo.c ... \
259
"$@" -MD -MF "$tmpdepfile"
261
if test $stat -eq 0; then :
267
# Each line is of the form `foo.o: dependent.h',
268
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
269
# Do two passes, one to just change these to
270
# `$object: dependent.h' and one to simply `dependent.h:'.
271
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
272
# Some versions of the HPUX 10.20 sed can't process this invocation
273
# correctly. Breaking it into two sed invocations is a workaround.
274
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
275
sed -e 's/$/ :/' >> "$depfile"
201
# The Tru64 AIX compiler uses -MD to generate dependencies as a side
280
# The Tru64 compiler uses -MD to generate dependencies as a side
202
281
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
203
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
282
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
204
283
# dependencies in `foo.d' instead, so we check for that too.
205
284
# Subdirectories are respected.
285
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
286
test "x$dir" = "x$object" && dir=
287
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
207
tmpdepfile1="$object.d"
208
tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'`
209
289
if test "$libtool" = yes; then
290
# Dependencies are output in .lo.d with libtool 1.4.
291
# With libtool 1.5 they are output both in $dir.libs/$base.o.d
292
# and in $dir.libs/$base.o.d and $dir$base.o.d. We process the
293
# latter, because the former will be cleaned when $dir.libs is
295
tmpdepfile1="$dir.libs/$base.lo.d"
296
tmpdepfile2="$dir$base.o.d"
297
tmpdepfile3="$dir.libs/$base.d"
300
tmpdepfile1="$dir$base.o.d"
301
tmpdepfile2="$dir$base.d"
302
tmpdepfile3="$dir$base.d"
216
307
if test $stat -eq 0; then :
218
rm -f "$tmpdepfile1" "$tmpdepfile2"
309
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
222
313
if test -f "$tmpdepfile1"; then
223
314
tmpdepfile="$tmpdepfile1"
315
elif test -f "$tmpdepfile2"; then
225
316
tmpdepfile="$tmpdepfile2"
318
tmpdepfile="$tmpdepfile3"
227
320
if test -f "$tmpdepfile"; then
228
321
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
229
# That's a space and a tab in the [].
230
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
322
# That's a tab and a space in the [].
323
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
232
325
echo "#dummy" > "$depfile"
242
335
# Important note: in order to support this mode, a compiler *must*
243
# always write the proprocessed file to stdout, regardless of -o,
244
# because we must use -o when running libtool.
336
# always write the preprocessed file to stdout, regardless of -o.
339
# Remove the call to Libtool.
340
if test "$libtool" = yes; then
341
while test $1 != '--mode=compile'; do
347
# Remove `-o $object'.
359
set fnord "$@" "$arg"
245
366
test -z "$dashmflag" && dashmflag=-M
248
*" --mode=compile "*) # this is libtool, let us make it quiet
250
do # cycle over the arguments
253
# insert --quiet before "--mode=compile"
254
set fnord "$@" --quiet
258
set fnord "$@" "$arg"
264
"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
270
if test "$stat" != 0; then exit $stat; fi
367
# Require at least two characters before searching for `:'
368
# in the target name. This is to cope with DOS-style filenames:
369
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
371
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
272
373
cat < "$tmpdepfile" > "$depfile"
390
# Remove any Libtool call
391
if test "$libtool" = yes; then
392
while test $1 != '--mode=compile'; do
299
set fnord "$@" "$arg"; shift;;
303
set fnord "$@" "$arg"; shift;;
306
obj_suffix="`echo $object | sed 's/^.*\././'`"
308
${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
314
if test "$stat" != 0; then exit $stat; fi
408
set fnord "$@" "$arg"; shift ;;
409
# Strip any option that makedepend may not understand. Remove
410
# the object too, otherwise makedepend will parse it as a source file.
414
set fnord "$@" "$arg"; shift ;;
417
obj_suffix="`echo $object | sed 's/^.*\././'`"
419
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
316
421
cat < "$tmpdepfile" > "$depfile"
317
tail +3 "$tmpdepfile" | tr ' ' '
422
sed '1,2d' "$tmpdepfile" | tr ' ' '
319
424
## Some versions of the HPUX 10.20 sed can't process this invocation
320
425
## correctly. Breaking it into two sed invocations is a workaround.
326
431
# Important note: in order to support this mode, a compiler *must*
327
# always write the proprocessed file to stdout, regardless of -o,
328
# because we must use -o when running libtool.
331
*" --mode=compile "*)
333
do # cycle over the arguments
336
# insert --quiet before "--mode=compile"
337
set fnord "$@" --quiet
341
set fnord "$@" "$arg"
432
# always write the preprocessed file to stdout.
435
# Remove the call to Libtool.
436
if test "$libtool" = yes; then
437
while test $1 != '--mode=compile'; do
443
# Remove `-o $object'.
455
set fnord "$@" "$arg"
348
463
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
349
464
sed '$ s: \\$::' > "$tmpdepfile"
355
if test "$stat" != 0; then exit $stat; fi
357
466
echo "$object : \\" > "$depfile"
358
467
cat < "$tmpdepfile" >> "$depfile"
364
473
# Important note: in order to support this mode, a compiler *must*
365
# always write the proprocessed file to stdout, regardless of -o,
474
# always write the preprocessed file to stdout, regardless of -o,
366
475
# because we must use -o when running libtool.
369
*" --mode=compile "*)
371
do # cycle over the arguments
374
# insert --quiet before "--mode=compile"
375
set fnord "$@" --quiet
481
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
379
487
set fnord "$@" "$arg"
386
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
392
if test "$stat" != 0; then exit $stat; fi
494
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
394
496
echo "$object : \\" > "$depfile"
395
497
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"