2
2
# depcomp - compile a program generating dependencies as side-effects
4
scriptversion=2005-07-09.11
4
scriptversion=2007-03-29.01
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
8
9
# This program is free software; you can redistribute it and/or modify
9
10
# it under the terms of the GNU General Public License as published by
91
92
## gcc 3 implements dependency tracking that does exactly what
92
93
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
93
94
## it if -MD -MP comes after the -MF stuff. Hmm.
94
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
95
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96
## the command line argument order; so add the flags where they
97
## appear in depend2.am. Note that the slowdown incurred here
98
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
102
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103
*) set fnord "$@" "$arg" ;;
96
110
if test $stat -eq 0; then :
201
215
# current directory. Also, the AIX compiler puts `$object:' at the
202
216
# start of each line; $object doesn't have directory information.
203
217
# Version 6 uses the directory in both cases.
204
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
205
tmpdepfile="$stripped.u"
218
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219
test "x$dir" = "x$object" && dir=
220
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
206
221
if test "$libtool" = yes; then
222
tmpdepfile1=$dir$base.u
224
tmpdepfile3=$dir.libs/$base.u
227
tmpdepfile1=$dir$base.u
228
tmpdepfile2=$dir$base.u
229
tmpdepfile3=$dir$base.u
213
if test -f "$tmpdepfile"; then :
215
stripped=`echo "$stripped" | sed 's,^.*/,,'`
216
tmpdepfile="$stripped.u"
219
234
if test $stat -eq 0; then :
236
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
240
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
242
test -f "$tmpdepfile" && break
225
244
if test -f "$tmpdepfile"; then
226
outname="$stripped.o"
227
245
# Each line is of the form `foo.o: dependent.h'.
228
246
# Do two passes, one to just change these to
229
247
# `$object: dependent.h' and one to simply `dependent.h:'.
230
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
231
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
248
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249
# That's a tab and a space in the [].
250
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
233
252
# The sourcefile does not contain any dependencies, so just
234
253
# store a dummy comment line, to avoid errors with the Makefile
276
295
rm -f "$tmpdepfile"
299
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
300
# compilers, which have integrated preprocessors. The correct option
301
# to use with these is +Maked; it writes dependencies to a file named
302
# 'foo.d', which lands next to the object file, wherever that
304
# Much of this is similar to the tru64 case; see comments there.
305
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306
test "x$dir" = "x$object" && dir=
307
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308
if test "$libtool" = yes; then
309
tmpdepfile1=$dir$base.d
310
tmpdepfile2=$dir.libs/$base.d
313
tmpdepfile1=$dir$base.d
314
tmpdepfile2=$dir$base.d
318
if test $stat -eq 0; then :
320
rm -f "$tmpdepfile1" "$tmpdepfile2"
324
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
326
test -f "$tmpdepfile" && break
328
if test -f "$tmpdepfile"; then
329
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330
# Add `dependent.h:' lines.
331
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
333
echo "#dummy" > "$depfile"
335
rm -f "$tmpdepfile" "$tmpdepfile2"
280
339
# The Tru64 compiler uses -MD to generate dependencies as a side
281
340
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
289
348
if test "$libtool" = yes; then
290
349
# With Tru64 cc, shared objects can also be used to make a
291
# static library. This mecanism is used in libtool 1.4 series to
350
# static library. This mechanism is used in libtool 1.4 series to
292
351
# handle both shared and static libraries in a single compilation.
293
352
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
295
354
# With libtool 1.5 this exception was removed, and libtool now
296
355
# generates 2 separate objects for the 2 libraries. These two
297
# compilations output dependencies in in $dir.libs/$base.o.d and
356
# compilations output dependencies in $dir.libs/$base.o.d and
298
357
# in $dir$base.o.d. We have to check for both files, because
299
358
# one of the two compilations can be disabled. We should prefer
300
359
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is