depcomp revision a747113422afaa29ce72d2c5ba7f0b7ea9ec2054
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller#! /bin/sh
088fa5d9eaa83bf4b3d59a64c0519f42a143aaa9Alin Brici# depcomp - compile a program generating dependencies as side-effects
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmillerscriptversion=2012-03-27.16; # UTC
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# Copyright (C) 1999-2012 Free Software Foundation, Inc.
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# This program is free software; you can redistribute it and/or modify
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# it under the terms of the GNU General Public License as published by
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# the Free Software Foundation; either version 2, or (at your option)
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# any later version.
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# This program is distributed in the hope that it will be useful,
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# but WITHOUT ANY WARRANTY; without even the implied warranty of
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# GNU General Public License for more details.
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# You should have received a copy of the GNU General Public License
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# along with this program. If not, see <http://www.gnu.org/licenses/>.
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# As a special exception to the GNU General Public License, if you
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# distribute this file as part of a program that contains a
b84068e6021ec8a830c26c4494f6e335d1f9c0efBrendan Miller# configuration script generated by Autoconf, you may include it under
088fa5d9eaa83bf4b3d59a64c0519f42a143aaa9Alin Brici# the same distribution terms that you use for the rest of that program.
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmillercase $1 in
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller '')
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller echo "$0: No command. Try '$0 --help' for more information." 1>&2
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller exit 1;
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller ;;
470b8b61c1e994020f9a8611860732b7532a859bBrendan Mmiller -h | --h*)
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller cat <<\EOF
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan MmillerUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan MmillerRun PROGRAMS ARGS to compile a file, generating dependencies
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmilleras side-effects.
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan MmillerEnvironment variables:
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller depmode Dependency tracking mode.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller source Source file read by 'PROGRAMS ARGS'.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller object Object file output by 'PROGRAMS ARGS'.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller DEPDIR directory where to store dependencies.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller depfile Dependency file to output.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller tmpdepfile Temporary file to use when outputting dependencies.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller libtool Whether libtool is used (yes/no).
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller
bfd9faff49961e9db7b92f310d59923fd6234372Brendan MmillerReport bugs to <bug-automake@gnu.org>.
bfd9faff49961e9db7b92f310d59923fd6234372Brendan MmillerEOF
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller exit $?
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller ;;
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller -v | --v*)
3a666413480ef97101461705e1f47cbab0266301Brendan Mmiller echo "depcomp $scriptversion"
3a666413480ef97101461705e1f47cbab0266301Brendan Mmiller exit $?
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller ;;
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmilleresac
3a666413480ef97101461705e1f47cbab0266301Brendan Mmiller
3a666413480ef97101461705e1f47cbab0266301Brendan Mmiller# A tabulation character.
ad0b283113c3f11ac1877df97d5d0fae899b56caBrendan Mmillertab=' '
b84068e6021ec8a830c26c4494f6e335d1f9c0efBrendan Miller# A newline character.
b84068e6021ec8a830c26c4494f6e335d1f9c0efBrendan Millernl='
ad0b283113c3f11ac1877df97d5d0fae899b56caBrendan Mmiller'
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmillerif test -z "$depmode" || test -z "$source" || test -z "$object"; then
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmiller echo "depcomp: Variables source, object and depmode must be set" 1>&2
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmiller exit 1
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmillerfi
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerdepfile=${depfile-`echo "$object" |
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmillerrm -f "$tmpdepfile"
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# Some modes work just like other modes, but use different flags. We
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# parameterize here, but still list the modes in the big case below,
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller# to make depend.m4 easier to write. Note that we *cannot* use a case
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller# here, because this file can only contain one case statement.
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmillerif test "$depmode" = hp; then
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # HP compiler uses -M and no extra arg.
52a38c0fe76475c93300961068ea9332cb9854d6Brendan Mmiller gccflag=-M
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller depmode=gcc
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerfi
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerif test "$depmode" = dashXmstdout; then
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # This is just like dashmstdout with a different argument.
52a38c0fe76475c93300961068ea9332cb9854d6Brendan Mmiller dashmflag=-xM
52a38c0fe76475c93300961068ea9332cb9854d6Brendan Mmiller depmode=dashmstdout
52a38c0fe76475c93300961068ea9332cb9854d6Brendan Mmillerfi
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillercygpath_u="cygpath -u -f -"
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerif test "$depmode" = msvcmsys; then
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # This is just like msvisualcpp but w/o cygpath translation.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # Just convert the backslash-escaped backslashes to single forward
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # slashes to satisfy depend.m4
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller cygpath_u='sed s,\\\\,/,g'
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller depmode=msvisualcpp
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerfi
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerif test "$depmode" = msvc7msys; then
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # This is just like msvc7 but w/o cygpath translation.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # Just convert the backslash-escaped backslashes to single forward
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller # slashes to satisfy depend.m4
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller cygpath_u='sed s,\\\\,/,g'
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller depmode=msvc7
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerfi
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillerif test "$depmode" = xlc; then
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller gccflag=-qmakedep=gcc,-MF
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller depmode=gcc
01f9c7d314ab242f004a7ce919c82ca886aedc3fBrendan Millerfi
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmillercase "$depmode" in
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmillergcc3)
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller## gcc 3 implements dependency tracking that does exactly what
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller## we want. Yay! Note: for some reason libtool 1.4 doesn't like
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller## it if -MD -MP comes after the -MF stuff. Hmm.
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller## Unfortunately, FreeBSD c89 acceptance of flags depends upon
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller## the command line argument order; so add the flags where they
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller## appear in depend2.am. Note that the slowdown incurred here
a20f25a11beaf0445cc53f4d56537cef3d26281eBrendan Mmiller## affects only configure: in makefiles, %FASTDEP% shortcuts this.
a20f25a11beaf0445cc53f4d56537cef3d26281eBrendan Mmiller for arg
01f9c7d314ab242f004a7ce919c82ca886aedc3fBrendan Miller do
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller case $arg in
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller *) set fnord "$@" "$arg" ;;
52a38c0fe76475c93300961068ea9332cb9854d6Brendan Mmiller esac
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller shift # fnord
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller shift # $arg
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller done
"$@"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the "deleted header file" problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' "$nl" < "$tmpdepfile" |
## Some versions of gcc put a space before the ':'. On the theory
## that the space means something, we add a space to the output as
## well. hp depmode also adds that space, but also prefixes the VPATH
## to the object. Take care to not repeat it in the output.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like '#:fec' to the end of the
# dependency line.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr "$nl" ' ' >> "$depfile"
echo >> "$depfile"
# The second pass generates a dummy entry for each header file.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
xlc)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts '$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.u
tmpdepfile2=$base.u
tmpdepfile3=$dir.libs/$base.u
"$@" -Wc,-M
else
tmpdepfile1=$dir$base.u
tmpdepfile2=$dir$base.u
tmpdepfile3=$dir$base.u
"$@" -M
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
# Each line is of the form 'foo.o: dependent.h'.
# Do two passes, one to just change these to
# '$object: dependent.h' and one to simply 'dependent.h:'.
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
# However on
# $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using '\':
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
# tcc 0.9.26 (FIXME still under development at the moment of writing)
# will emit a similar output, but also prepend the continuation lines
# with horizontal tabulation characters.
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form 'foo.o: dependent.h',
# or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
# Do two passes, one to just change these to
# '$object: dependent.h' and one to simply 'dependent.h:'.
sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
< "$tmpdepfile" > "$depfile"
sed '
s/[ '"$tab"'][ '"$tab"']*/ /g
s/^ *//
s/ *\\*$//
s/^[^:]*: *//
/^$/d
/:$/d
s/$/ :/
' < "$tmpdepfile" >> "$depfile"
rm -f "$tmpdepfile"
;;
hp2)
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
# compilers, which have integrated preprocessors. The correct option
# to use with these is +Maked; it writes dependencies to a file named
# 'foo.d', which lands next to the object file, wherever that
# happens to be.
# Much of this is similar to the tru64 case; see comments there.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir.libs/$base.d
"$@" -Wc,+Maked
else
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir$base.d
"$@" +Maked
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
# Add 'dependent.h:' lines.
sed -ne '2,${
s/^ *//
s/ \\*$//
s/$/:/
p
}' "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile" "$tmpdepfile2"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in 'foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a
# static library. This mechanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
msvc7)
if test "$libtool" = yes; then
showIncludes=-Wc,-showIncludes
else
showIncludes=-showIncludes
fi
"$@" $showIncludes > "$tmpdepfile"
stat=$?
grep -v '^Note: including file: ' "$tmpdepfile"
if test "$stat" = 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
# The first sed program below extracts the file names and escapes
# backslashes for cygpath. The second sed program outputs the file
# name when reading, but also accumulates all include files in the
# hold buffer in order to output them again at the end. This only
# works with sed implementations that can handle large buffers.
sed < "$tmpdepfile" -n '
/^Note: including file: *\(.*\)/ {
s//\1/
s/\\/\\\\/g
p
}' | $cygpath_u | sort -u | sed -n '
s/ /\\ /g
s/\(.*\)/'"$tab"'\1 \\/p
s/.\(.*\) \\/\1:/
H
$ {
s/.*/'"$tab"'/
G
p
}' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvc7msys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# Remove '-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for ':'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
"$@" $dashmflag |
sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' "$nl" < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no eat=no
for arg
do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
if test $eat = yes; then
eat=no
continue
fi
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-arch)
eat=yes ;;
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix=`echo "$object" | sed 's/^.*\././'`
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
# makedepend may prepend the VPATH from the source file name to the object.
# No need to regex-escape $object, excess matching of '.' is harmless.
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# Remove '-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
IFS=" "
for arg
do
case "$arg" in
-o)
shift
;;
$object)
shift
;;
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E 2>/dev/null |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
echo "$tab" >> "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvcmsys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End: