2
2
# depcomp - compile a program generating dependencies as side-effects
4
scriptversion=2005-07-09.11
4
scriptversion=2009-04-28.21; # UTC
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7
# Software Foundation, Inc.
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
16
17
# GNU General Public License for more details.
18
19
# You should have received a copy of the GNU General Public License
19
# along with this program; if not, write to the Free Software
20
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20
# along with this program. If not, see <http://www.gnu.org/licenses/>.
23
22
# As a special exception to the GNU General Public License, if you
24
23
# distribute this file as part of a program that contains a
86
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"
91
99
## gcc 3 implements dependency tracking that does exactly what
92
100
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
93
101
## it if -MD -MP comes after the -MF stuff. Hmm.
94
"$@" -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" ;;
96
117
if test $stat -eq 0; then :
178
199
' < "$tmpdepfile" \
179
200
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
184
205
# The second pass generates a dummy entry for each header file.
186
207
' < "$tmpdepfile" \
187
208
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
190
211
# The sourcefile does not contain any dependencies, so just
191
212
# store a dummy comment line, to avoid errors with the Makefile
201
222
# current directory. Also, the AIX compiler puts `$object:' at the
202
223
# start of each line; $object doesn't have directory information.
203
224
# Version 6 uses the directory in both cases.
204
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
205
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$//'`
206
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
213
if test -f "$tmpdepfile"; then :
215
stripped=`echo "$stripped" | sed 's,^.*/,,'`
216
tmpdepfile="$stripped.u"
219
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
225
251
if test -f "$tmpdepfile"; then
226
outname="$stripped.o"
227
252
# Each line is of the form `foo.o: dependent.h'.
228
253
# Do two passes, one to just change these to
229
254
# `$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"
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"
233
259
# The sourcefile does not contain any dependencies, so just
234
260
# store a dummy comment line, to avoid errors with the Makefile
276
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"
280
351
# The Tru64 compiler uses -MD to generate dependencies as a side
281
352
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
289
360
if test "$libtool" = yes; then
290
361
# 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
362
# static library. This mechanism is used in libtool 1.4 series to
292
363
# handle both shared and static libraries in a single compilation.
293
364
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
295
366
# With libtool 1.5 this exception was removed, and libtool now
296
367
# generates 2 separate objects for the 2 libraries. These two
297
# compilations output dependencies in in $dir.libs/$base.o.d and
368
# compilations output dependencies in $dir.libs/$base.o.d and
298
369
# in $dir$base.o.d. We have to check for both files, because
299
370
# one of the two compilations can be disabled. We should prefer
300
371
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
397
468
# Remove any Libtool call
398
469
if test "$libtool" = yes; then
399
while test $1 != '--mode=compile'; do
470
while test "X$1" != 'X--mode=compile'; do
485
if test $eat = yes; then
415
491
set fnord "$@" "$arg"; shift ;;
416
492
# Strip any option that makedepend may not understand. Remove
417
493
# the object too, otherwise makedepend will parse it as a source file.
421
499
set fnord "$@" "$arg"; shift ;;
424
obj_suffix="`echo $object | sed 's/^.*\././'`"
502
obj_suffix=`echo "$object" | sed 's/^.*\././'`
425
503
touch "$tmpdepfile"
426
504
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
481
559
# Important note: in order to support this mode, a compiler *must*
482
# always write the preprocessed file to stdout, regardless of -o,
483
# 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
489
581
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
502
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"
504
596
echo "$object : \\" > "$depfile"
505
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
597
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
506
598
echo " " >> "$depfile"
507
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
599
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
508
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.
526
625
# eval: (add-hook 'write-file-hooks 'time-stamp)
527
626
# time-stamp-start: "scriptversion="
528
627
# time-stamp-format: "%:y-%02m-%02d.%02H"
529
# time-stamp-end: "$"
628
# time-stamp-time-zone: "UTC"
629
# time-stamp-end: "; # UTC"