3
2
# depcomp - compile a program generating dependencies as side-effects
4
# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
4
scriptversion=2009-04-28.21; # UTC
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7
# Software Foundation, Inc.
6
9
# This program is free software; you can redistribute it and/or modify
7
10
# it under the terms of the GNU General Public License as published by
14
17
# GNU General Public License for more details.
16
19
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20
# along with this program. If not, see <http://www.gnu.org/licenses/>.
21
22
# As a special exception to the GNU General Public License, if you
22
23
# distribute this file as part of a program that contains a
26
27
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
31
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
36
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
38
Run PROGRAMS ARGS to compile a file, generating dependencies
41
Environment variables:
42
depmode Dependency tracking mode.
43
source Source file read by `PROGRAMS ARGS'.
44
object Object file output by `PROGRAMS ARGS'.
45
DEPDIR directory where to store dependencies.
46
depfile Dependency file to output.
47
tmpdepfile Temporary file to use when outputing dependencies.
48
libtool Whether libtool is used (yes/no).
50
Report bugs to <bug-automake@gnu.org>.
55
echo "depcomp $scriptversion"
28
60
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
29
61
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"
65
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66
depfile=${depfile-`echo "$object" |
67
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
44
68
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
46
70
rm -f "$tmpdepfile"
61
85
depmode=dashmstdout
88
cygpath_u="cygpath -u -f -"
89
if test "$depmode" = msvcmsys; then
90
# This is just like msvisualcpp but w/o cygpath translation.
91
# Just convert the backslash-escaped backslashes to single forward
92
# slashes to satisfy depend.m4
93
cygpath_u="sed s,\\\\\\\\,/,g"
66
99
## gcc 3 implements dependency tracking that does exactly what
67
100
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
68
101
## it if -MD -MP comes after the -MF stuff. Hmm.
69
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
102
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103
## the command line argument order; so add the flags where they
104
## appear in depend2.am. Note that the slowdown incurred here
105
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
109
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110
*) set fnord "$@" "$arg" ;;
71
117
if test $stat -eq 0; then :
153
199
' < "$tmpdepfile" \
154
200
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
159
205
# The second pass generates a dummy entry for each header file.
161
207
' < "$tmpdepfile" \
162
208
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
165
211
# The sourcefile does not contain any dependencies, so just
166
212
# store a dummy comment line, to avoid errors with the Makefile
176
222
# current directory. Also, the AIX compiler puts `$object:' at the
177
223
# start of each line; $object doesn't have directory information.
178
224
# Version 6 uses the directory in both cases.
179
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
180
tmpdepfile="$stripped.u"
225
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226
test "x$dir" = "x$object" && dir=
227
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
181
228
if test "$libtool" = yes; then
229
tmpdepfile1=$dir$base.u
231
tmpdepfile3=$dir.libs/$base.u
234
tmpdepfile1=$dir$base.u
235
tmpdepfile2=$dir$base.u
236
tmpdepfile3=$dir$base.u
188
if test -f "$tmpdepfile"; then :
190
stripped=`echo "$stripped" | sed 's,^.*/,,'`
191
tmpdepfile="$stripped.u"
194
241
if test $stat -eq 0; then :
243
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
247
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
249
test -f "$tmpdepfile" && break
200
251
if test -f "$tmpdepfile"; then
201
outname="$stripped.o"
202
252
# Each line is of the form `foo.o: dependent.h'.
203
253
# Do two passes, one to just change these to
204
254
# `$object: dependent.h' and one to simply `dependent.h:'.
205
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
206
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
255
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256
# That's a tab and a space in the [].
257
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
208
259
# The sourcefile does not contain any dependencies, so just
209
260
# store a dummy comment line, to avoid errors with the Makefile
251
302
rm -f "$tmpdepfile"
306
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
307
# compilers, which have integrated preprocessors. The correct option
308
# to use with these is +Maked; it writes dependencies to a file named
309
# 'foo.d', which lands next to the object file, wherever that
311
# Much of this is similar to the tru64 case; see comments there.
312
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313
test "x$dir" = "x$object" && dir=
314
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315
if test "$libtool" = yes; then
316
tmpdepfile1=$dir$base.d
317
tmpdepfile2=$dir.libs/$base.d
320
tmpdepfile1=$dir$base.d
321
tmpdepfile2=$dir$base.d
325
if test $stat -eq 0; then :
327
rm -f "$tmpdepfile1" "$tmpdepfile2"
331
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
333
test -f "$tmpdepfile" && break
335
if test -f "$tmpdepfile"; then
336
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337
# Add `dependent.h:' lines.
343
}' "$tmpdepfile" >> "$depfile"
345
echo "#dummy" > "$depfile"
347
rm -f "$tmpdepfile" "$tmpdepfile2"
255
351
# The Tru64 compiler uses -MD to generate dependencies as a side
256
352
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
262
358
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
264
360
if test "$libtool" = yes; then
265
tmpdepfile1="$dir.libs/$base.lo.d"
266
tmpdepfile2="$dir.libs/$base.d"
361
# With Tru64 cc, shared objects can also be used to make a
362
# static library. This mechanism is used in libtool 1.4 series to
363
# handle both shared and static libraries in a single compilation.
364
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
366
# With libtool 1.5 this exception was removed, and libtool now
367
# generates 2 separate objects for the 2 libraries. These two
368
# compilations output dependencies in $dir.libs/$base.o.d and
369
# in $dir$base.o.d. We have to check for both files, because
370
# one of the two compilations can be disabled. We should prefer
371
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372
# automatically cleaned when .libs/ is deleted, while ignoring
373
# the former would cause a distcleancheck panic.
374
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
375
tmpdepfile2=$dir$base.o.d # libtool 1.5
376
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
377
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
269
tmpdepfile1="$dir$base.o.d"
270
tmpdepfile2="$dir$base.d"
380
tmpdepfile1=$dir$base.o.d
381
tmpdepfile2=$dir$base.d
382
tmpdepfile3=$dir$base.d
383
tmpdepfile4=$dir$base.d
275
388
if test $stat -eq 0; then :
277
rm -f "$tmpdepfile1" "$tmpdepfile2"
390
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
281
if test -f "$tmpdepfile1"; then
282
tmpdepfile="$tmpdepfile1"
284
tmpdepfile="$tmpdepfile2"
394
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
396
test -f "$tmpdepfile" && break
286
398
if test -f "$tmpdepfile"; then
287
399
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
288
400
# That's a tab and a space in the [].
356
468
# Remove any Libtool call
357
469
if test "$libtool" = yes; then
358
while test $1 != '--mode=compile'; do
470
while test "X$1" != 'X--mode=compile'; do
485
if test $eat = yes; then
374
491
set fnord "$@" "$arg"; shift ;;
375
492
# Strip any option that makedepend may not understand. Remove
376
493
# the object too, otherwise makedepend will parse it as a source file.
380
499
set fnord "$@" "$arg"; shift ;;
383
obj_suffix="`echo $object | sed 's/^.*\././'`"
502
obj_suffix=`echo "$object" | sed 's/^.*\././'`
384
503
touch "$tmpdepfile"
385
504
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
429
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
548
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
430
550
sed '$ s: \\$::' > "$tmpdepfile"
432
552
echo "$object : \\" > "$depfile"
439
559
# Important note: in order to support this mode, a compiler *must*
440
# always write the preprocessed file to stdout, regardless of -o,
441
# because we must use -o when running libtool.
560
# always write the preprocessed file to stdout.
563
# Remove the call to Libtool.
564
if test "$libtool" = yes; then
565
while test "X$1" != 'X--mode=compile'; do
447
581
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
460
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
593
"$@" -E 2>/dev/null |
594
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
462
596
echo "$object : \\" > "$depfile"
463
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
597
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
464
598
echo " " >> "$depfile"
465
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
599
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
466
600
rm -f "$tmpdepfile"
604
# This case exists only to let depend.m4 do its work. It works by
605
# looking at the text of this script. This case will never be run,
606
# since it is checked for above.
625
# eval: (add-hook 'write-file-hooks 'time-stamp)
626
# time-stamp-start: "scriptversion="
627
# time-stamp-format: "%:y-%02m-%02d.%02H"
628
# time-stamp-time-zone: "UTC"
629
# time-stamp-end: "; # UTC"