3
2
# depcomp - compile a program generating dependencies as side-effects
4
# Copyright 1999, 2000 Free Software Foundation, Inc.
4
scriptversion=2005-07-09.11
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
6
8
# This program is free software; you can redistribute it and/or modify
7
9
# it under the terms of the GNU General Public License as published by
16
18
# You should have received a copy of the GNU General Public License
17
19
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
23
# As a special exception to the GNU General Public License, if you
22
24
# distribute this file as part of a program that contains a
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
if test -z "$depfile"; then
35
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
36
dir=`echo "$object" | sed 's,/.*$,/,'`
37
if test "$dir" = "$object"; then
40
# FIXME: should be _deps on DOS.
41
depfile="$dir.deps/$base"
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|'`}
44
69
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
46
71
rm -f "$tmpdepfile"
174
199
# The C for AIX Compiler uses -M and outputs the dependencies
175
# in a .u file. This file always lives in the current directory.
176
# Also, the AIX compiler puts `$object:' at the start of each line;
177
# $object doesn't have directory information.
178
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/'`
179
205
tmpdepfile="$stripped.u"
180
outname="$stripped.o"
181
206
if test "$libtool" = yes; then
213
if test -f "$tmpdepfile"; then :
215
stripped=`echo "$stripped" | sed 's,^.*/,,'`
216
tmpdepfile="$stripped.u"
188
219
if test $stat -eq 0; then :
190
221
rm -f "$tmpdepfile"
206
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"
210
280
# The Tru64 compiler uses -MD to generate dependencies as a side
211
281
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
217
287
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
219
289
if test "$libtool" = yes; then
220
tmpdepfile1="$dir.libs/$base.lo.d"
221
tmpdepfile2="$dir.libs/$base.d"
290
# 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
292
# handle both shared and static libraries in a single compilation.
293
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
295
# With libtool 1.5 this exception was removed, and libtool now
296
# generates 2 separate objects for the 2 libraries. These two
297
# compilations output dependencies in in $dir.libs/$base.o.d and
298
# in $dir$base.o.d. We have to check for both files, because
299
# one of the two compilations can be disabled. We should prefer
300
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
301
# automatically cleaned when .libs/ is deleted, while ignoring
302
# the former would cause a distcleancheck panic.
303
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
304
tmpdepfile2=$dir$base.o.d # libtool 1.5
305
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
306
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
224
tmpdepfile1="$dir$base.o.d"
225
tmpdepfile2="$dir$base.d"
309
tmpdepfile1=$dir$base.o.d
310
tmpdepfile2=$dir$base.d
311
tmpdepfile3=$dir$base.d
312
tmpdepfile4=$dir$base.d
230
317
if test $stat -eq 0; then :
232
rm -f "$tmpdepfile1" "$tmpdepfile2"
319
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
236
if test -f "$tmpdepfile1"; then
237
tmpdepfile="$tmpdepfile1"
239
tmpdepfile="$tmpdepfile2"
323
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
325
test -f "$tmpdepfile" && break
241
327
if test -f "$tmpdepfile"; then
242
328
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
243
# That's a space and a tab in the [].
244
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
329
# That's a tab and a space in the [].
330
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
246
332
echo "#dummy" > "$depfile"
289
373
test -z "$dashmflag" && dashmflag=-M
290
"$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
374
# Require at least two characters before searching for `:'
375
# in the target name. This is to cope with DOS-style filenames:
376
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
378
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
292
380
cat < "$tmpdepfile" > "$depfile"
383
481
# Important note: in order to support this mode, a compiler *must*
384
# always write the proprocessed file to stdout, regardless of -o,
482
# always write the preprocessed file to stdout, regardless of -o,
385
483
# because we must use -o when running libtool.