version 1.1 | | version 1.2 |
---|
| | |
#! /bin/sh | | #! /bin/sh |
| | |
# depcomp - compile a program generating dependencies as side-effects | | # depcomp - compile a program generating dependencies as side-effects |
# Copyright 1999, 2000 Free Software Foundation, Inc. | | |
| | scriptversion=2004-05-31.23 |
| | |
| | # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. |
| | |
# This program is free software; you can redistribute it and/or modify | | # This program is free software; you can redistribute it and/or modify |
# it under the terms of the GNU General Public License as published by | | # it under the terms of the GNU General Public License as published by |
| | |
| | |
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. | | # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. |
| | |
| | case $1 in |
| | '') |
| | echo "$0: No command. Try \`$0 --help' for more information." 1>&2 |
| | exit 1; |
| | ;; |
| | -h | --h*) |
| | cat <<\EOF |
| | Usage: depcomp [--help] [--version] PROGRAM [ARGS] |
| | |
| | Run PROGRAMS ARGS to compile a file, generating dependencies |
| | as side-effects. |
| | |
| | Environment variables: |
| | depmode Dependency tracking mode. |
| | source Source file read by `PROGRAMS ARGS'. |
| | object Object file output by `PROGRAMS ARGS'. |
| | DEPDIR directory where to store dependencies. |
| | depfile Dependency file to output. |
| | tmpdepfile Temporary file to use when outputing dependencies. |
| | libtool Whether libtool is used (yes/no). |
| | |
| | Report bugs to <bug-automake@gnu.org>. |
| | EOF |
| | exit 0 |
| | ;; |
| | -v | --v*) |
| | echo "depcomp $scriptversion" |
| | exit 0 |
| | ;; |
| | esac |
| | |
if test -z "$depmode" || test -z "$source" || test -z "$object"; then | | if test -z "$depmode" || test -z "$source" || test -z "$object"; then |
echo "depcomp: Variables source, object and depmode must be set" 1>&2 | | echo "depcomp: Variables source, object and depmode must be set" 1>&2 |
exit 1 | | exit 1 |
fi | | fi |
# `libtool' can also be set to `yes' or `no'. | | |
| | |
if test -z "$depfile"; then | | |
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` | | |
dir=`echo "$object" | sed 's,/.*$,/,'` | | |
if test "$dir" = "$object"; then | | |
dir= | | |
fi | | |
# FIXME: should be _deps on DOS. | | |
depfile="$dir.deps/$base" | | |
fi | | |
| | |
| | # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. |
| | depfile=${depfile-`echo "$object" | |
| | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} |
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} | | tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} |
| | |
rm -f "$tmpdepfile" | | rm -f "$tmpdepfile" |
| | |
| | |
aix) | | aix) |
# The C for AIX Compiler uses -M and outputs the dependencies | | # The C for AIX Compiler uses -M and outputs the dependencies |
# in a .u file. This file always lives in the current directory. | | # in a .u file. In older versions, this file always lives in the |
# Also, the AIX compiler puts `$object:' at the start of each line; | | # current directory. Also, the AIX compiler puts `$object:' at the |
# $object doesn't have directory information. | | # start of each line; $object doesn't have directory information. |
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` | | # Version 6 uses the directory in both cases. |
| | stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` |
tmpdepfile="$stripped.u" | | tmpdepfile="$stripped.u" |
outname="$stripped.o" | | |
if test "$libtool" = yes; then | | if test "$libtool" = yes; then |
"$@" -Wc,-M | | "$@" -Wc,-M |
else | | else |
"$@" -M | | "$@" -M |
fi | | fi |
| | |
stat=$? | | stat=$? |
| | |
| | if test -f "$tmpdepfile"; then : |
| | else |
| | stripped=`echo "$stripped" | sed 's,^.*/,,'` |
| | tmpdepfile="$stripped.u" |
| | fi |
| | |
if test $stat -eq 0; then : | | if test $stat -eq 0; then : |
else | | else |
rm -f "$tmpdepfile" | | rm -f "$tmpdepfile" |
| | |
fi | | fi |
| | |
if test -f "$tmpdepfile"; then | | if test -f "$tmpdepfile"; then |
| | outname="$stripped.o" |
# Each line is of the form `foo.o: dependent.h'. | | # Each line is of the form `foo.o: dependent.h'. |
# Do two passes, one to just change these to | | # Do two passes, one to just change these to |
# `$object: dependent.h' and one to simply `dependent.h:'. | | # `$object: dependent.h' and one to simply `dependent.h:'. |
| | |
rm -f "$tmpdepfile" | | rm -f "$tmpdepfile" |
;; | | ;; |
| | |
| | icc) |
| | # Intel's C compiler understands `-MD -MF file'. However on |
| | # icc -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 ... \ |
| | # ... |
| | |
| | "$@" -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 "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" |
| | # Some versions of the HPUX 10.20 sed can't process this invocation |
| | # correctly. Breaking it into two sed invocations is a workaround. |
| | sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | |
| | sed -e 's/$/ :/' >> "$depfile" |
| | rm -f "$tmpdepfile" |
| | ;; |
| | |
tru64) | | tru64) |
# The Tru64 compiler uses -MD to generate dependencies as a side | | # The Tru64 compiler uses -MD to generate dependencies as a side |
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. | | # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. |
| | |
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` | | base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` |
| | |
if test "$libtool" = yes; then | | if test "$libtool" = yes; then |
| | # Dependencies are output in .lo.d with libtool 1.4. |
| | # With libtool 1.5 they are output both in $dir.libs/$base.o.d |
| | # and in $dir.libs/$base.o.d and $dir$base.o.d. We process the |
| | # latter, because the former will be cleaned when $dir.libs is |
| | # erased. |
tmpdepfile1="$dir.libs/$base.lo.d" | | tmpdepfile1="$dir.libs/$base.lo.d" |
tmpdepfile2="$dir.libs/$base.d" | | tmpdepfile2="$dir$base.o.d" |
| | tmpdepfile3="$dir.libs/$base.d" |
"$@" -Wc,-MD | | "$@" -Wc,-MD |
else | | else |
tmpdepfile1="$dir$base.o.d" | | tmpdepfile1="$dir$base.o.d" |
tmpdepfile2="$dir$base.d" | | tmpdepfile2="$dir$base.d" |
| | tmpdepfile3="$dir$base.d" |
"$@" -MD | | "$@" -MD |
fi | | fi |
| | |
stat=$? | | stat=$? |
if test $stat -eq 0; then : | | if test $stat -eq 0; then : |
else | | else |
rm -f "$tmpdepfile1" "$tmpdepfile2" | | rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" |
exit $stat | | exit $stat |
fi | | fi |
| | |
if test -f "$tmpdepfile1"; then | | if test -f "$tmpdepfile1"; then |
tmpdepfile="$tmpdepfile1" | | tmpdepfile="$tmpdepfile1" |
else | | elif test -f "$tmpdepfile2"; then |
tmpdepfile="$tmpdepfile2" | | tmpdepfile="$tmpdepfile2" |
| | else |
| | tmpdepfile="$tmpdepfile3" |
fi | | fi |
if test -f "$tmpdepfile"; then | | if test -f "$tmpdepfile"; then |
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" | | sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" |
# That's a space and a tab in the []. | | # That's a tab and a space in the []. |
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" | | sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" |
else | | else |
echo "#dummy" > "$depfile" | | echo "#dummy" > "$depfile" |
| | |
| | |
dashmstdout) | | dashmstdout) |
# Important note: in order to support this mode, a compiler *must* | | # Important note: in order to support this mode, a compiler *must* |
# always write the proprocessed file to stdout, regardless of -o. | | # always write the preprocessed file to stdout, regardless of -o. |
"$@" || exit $? | | "$@" || exit $? |
| | |
# Remove the call to Libtool. | | # Remove the call to Libtool. |
| | |
shift | | shift |
fi | | fi |
| | |
# Remove `-o $object'. We will use -o /dev/null later, | | # Remove `-o $object'. |
# however we can't do the remplacement now because | | |
# `-o $object' might simply not be used | | |
IFS=" " | | IFS=" " |
for arg | | for arg |
do | | do |
| | |
done | | done |
| | |
test -z "$dashmflag" && dashmflag=-M | | test -z "$dashmflag" && dashmflag=-M |
"$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" | | # 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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" |
rm -f "$depfile" | | rm -f "$depfile" |
cat < "$tmpdepfile" > "$depfile" | | cat < "$tmpdepfile" > "$depfile" |
tr ' ' ' | | tr ' ' ' |
| | |
| | |
makedepend) | | makedepend) |
"$@" || exit $? | | "$@" || exit $? |
| | # Remove any Libtool call |
| | if test "$libtool" = yes; then |
| | while test $1 != '--mode=compile'; do |
| | shift |
| | done |
| | shift |
| | fi |
# X makedepend | | # X makedepend |
shift | | shift |
cleared=no | | cleared=no |
| | |
case "$arg" in | | case "$arg" in |
-D*|-I*) | | -D*|-I*) |
set fnord "$@" "$arg"; shift ;; | | 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. |
| | -*|$object) |
;; | | ;; |
*) | | *) |
set fnord "$@" "$arg"; shift ;; | | set fnord "$@" "$arg"; shift ;; |
| | |
| | |
cpp) | | cpp) |
# Important note: in order to support this mode, a compiler *must* | | # Important note: in order to support this mode, a compiler *must* |
# always write the proprocessed file to stdout. | | # always write the preprocessed file to stdout. |
"$@" || exit $? | | "$@" || exit $? |
| | |
# Remove the call to Libtool. | | # Remove the call to Libtool. |
| | |
| | |
msvisualcpp) | | msvisualcpp) |
# Important note: in order to support this mode, a compiler *must* | | # Important note: in order to support this mode, a compiler *must* |
# always write the proprocessed file to stdout, regardless of -o, | | # always write the preprocessed file to stdout, regardless of -o, |
# because we must use -o when running libtool. | | # because we must use -o when running libtool. |
"$@" || exit $? | | "$@" || exit $? |
IFS=" " | | IFS=" " |
| | |
esac | | esac |
| | |
exit 0 | | 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-end: "$" |
| | # End: |