depcomp revision 82e12b1b
121c2f794Smrg#! /bin/sh
221c2f794Smrg# depcomp - compile a program generating dependencies as side-effects
321c2f794Smrg
482e12b1bSmrgscriptversion=2011-12-04.11; # UTC
521c2f794Smrg
682e12b1bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
782e12b1bSmrg# 2011 Free Software Foundation, Inc.
821c2f794Smrg
921c2f794Smrg# This program is free software; you can redistribute it and/or modify
1021c2f794Smrg# it under the terms of the GNU General Public License as published by
1121c2f794Smrg# the Free Software Foundation; either version 2, or (at your option)
1221c2f794Smrg# any later version.
1321c2f794Smrg
1421c2f794Smrg# This program is distributed in the hope that it will be useful,
1521c2f794Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1621c2f794Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1721c2f794Smrg# GNU General Public License for more details.
1821c2f794Smrg
1921c2f794Smrg# You should have received a copy of the GNU General Public License
2012391620Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2121c2f794Smrg
2221c2f794Smrg# As a special exception to the GNU General Public License, if you
2321c2f794Smrg# distribute this file as part of a program that contains a
2421c2f794Smrg# configuration script generated by Autoconf, you may include it under
2521c2f794Smrg# the same distribution terms that you use for the rest of that program.
2621c2f794Smrg
2721c2f794Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2821c2f794Smrg
2921c2f794Smrgcase $1 in
3021c2f794Smrg  '')
3121c2f794Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3221c2f794Smrg     exit 1;
3321c2f794Smrg     ;;
3421c2f794Smrg  -h | --h*)
3521c2f794Smrg    cat <<\EOF
3621c2f794SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3721c2f794Smrg
3821c2f794SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3921c2f794Smrgas side-effects.
4021c2f794Smrg
4121c2f794SmrgEnvironment variables:
4221c2f794Smrg  depmode     Dependency tracking mode.
4321c2f794Smrg  source      Source file read by `PROGRAMS ARGS'.
4421c2f794Smrg  object      Object file output by `PROGRAMS ARGS'.
4521c2f794Smrg  DEPDIR      directory where to store dependencies.
4621c2f794Smrg  depfile     Dependency file to output.
4782e12b1bSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
4821c2f794Smrg  libtool     Whether libtool is used (yes/no).
4921c2f794Smrg
5021c2f794SmrgReport bugs to <bug-automake@gnu.org>.
5121c2f794SmrgEOF
5221c2f794Smrg    exit $?
5321c2f794Smrg    ;;
5421c2f794Smrg  -v | --v*)
5521c2f794Smrg    echo "depcomp $scriptversion"
5621c2f794Smrg    exit $?
5721c2f794Smrg    ;;
5821c2f794Smrgesac
5921c2f794Smrg
6021c2f794Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6121c2f794Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6221c2f794Smrg  exit 1
6321c2f794Smrgfi
6421c2f794Smrg
6521c2f794Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6621c2f794Smrgdepfile=${depfile-`echo "$object" |
6721c2f794Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6821c2f794Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6921c2f794Smrg
7021c2f794Smrgrm -f "$tmpdepfile"
7121c2f794Smrg
7221c2f794Smrg# Some modes work just like other modes, but use different flags.  We
7321c2f794Smrg# parameterize here, but still list the modes in the big case below,
7421c2f794Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7521c2f794Smrg# here, because this file can only contain one case statement.
7621c2f794Smrgif test "$depmode" = hp; then
7721c2f794Smrg  # HP compiler uses -M and no extra arg.
7821c2f794Smrg  gccflag=-M
7921c2f794Smrg  depmode=gcc
8021c2f794Smrgfi
8121c2f794Smrg
8221c2f794Smrgif test "$depmode" = dashXmstdout; then
8321c2f794Smrg   # This is just like dashmstdout with a different argument.
8421c2f794Smrg   dashmflag=-xM
8521c2f794Smrg   depmode=dashmstdout
8621c2f794Smrgfi
8721c2f794Smrg
8812391620Smrgcygpath_u="cygpath -u -f -"
8912391620Smrgif test "$depmode" = msvcmsys; then
9012391620Smrg   # This is just like msvisualcpp but w/o cygpath translation.
9112391620Smrg   # Just convert the backslash-escaped backslashes to single forward
9212391620Smrg   # slashes to satisfy depend.m4
9382e12b1bSmrg   cygpath_u='sed s,\\\\,/,g'
9412391620Smrg   depmode=msvisualcpp
9512391620Smrgfi
9612391620Smrg
9782e12b1bSmrgif test "$depmode" = msvc7msys; then
9882e12b1bSmrg   # This is just like msvc7 but w/o cygpath translation.
9982e12b1bSmrg   # Just convert the backslash-escaped backslashes to single forward
10082e12b1bSmrg   # slashes to satisfy depend.m4
10182e12b1bSmrg   cygpath_u='sed s,\\\\,/,g'
10282e12b1bSmrg   depmode=msvc7
10382e12b1bSmrgfi
10482e12b1bSmrg
10521c2f794Smrgcase "$depmode" in
10621c2f794Smrggcc3)
10721c2f794Smrg## gcc 3 implements dependency tracking that does exactly what
10821c2f794Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10921c2f794Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
11021c2f794Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
11121c2f794Smrg## the command line argument order; so add the flags where they
11221c2f794Smrg## appear in depend2.am.  Note that the slowdown incurred here
11321c2f794Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
11421c2f794Smrg  for arg
11521c2f794Smrg  do
11621c2f794Smrg    case $arg in
11721c2f794Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11821c2f794Smrg    *)  set fnord "$@" "$arg" ;;
11921c2f794Smrg    esac
12021c2f794Smrg    shift # fnord
12121c2f794Smrg    shift # $arg
12221c2f794Smrg  done
12321c2f794Smrg  "$@"
12421c2f794Smrg  stat=$?
12521c2f794Smrg  if test $stat -eq 0; then :
12621c2f794Smrg  else
12721c2f794Smrg    rm -f "$tmpdepfile"
12821c2f794Smrg    exit $stat
12921c2f794Smrg  fi
13021c2f794Smrg  mv "$tmpdepfile" "$depfile"
13121c2f794Smrg  ;;
13221c2f794Smrg
13321c2f794Smrggcc)
13421c2f794Smrg## There are various ways to get dependency output from gcc.  Here's
13521c2f794Smrg## why we pick this rather obscure method:
13621c2f794Smrg## - Don't want to use -MD because we'd like the dependencies to end
13721c2f794Smrg##   up in a subdir.  Having to rename by hand is ugly.
13821c2f794Smrg##   (We might end up doing this anyway to support other compilers.)
13921c2f794Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
14021c2f794Smrg##   -MM, not -M (despite what the docs say).
14121c2f794Smrg## - Using -M directly means running the compiler twice (even worse
14221c2f794Smrg##   than renaming).
14321c2f794Smrg  if test -z "$gccflag"; then
14421c2f794Smrg    gccflag=-MD,
14521c2f794Smrg  fi
14621c2f794Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
14721c2f794Smrg  stat=$?
14821c2f794Smrg  if test $stat -eq 0; then :
14921c2f794Smrg  else
15021c2f794Smrg    rm -f "$tmpdepfile"
15121c2f794Smrg    exit $stat
15221c2f794Smrg  fi
15321c2f794Smrg  rm -f "$depfile"
15421c2f794Smrg  echo "$object : \\" > "$depfile"
15521c2f794Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
15621c2f794Smrg## The second -e expression handles DOS-style file names with drive letters.
15721c2f794Smrg  sed -e 's/^[^:]*: / /' \
15821c2f794Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15921c2f794Smrg## This next piece of magic avoids the `deleted header file' problem.
16021c2f794Smrg## The problem is that when a header file which appears in a .P file
16121c2f794Smrg## is deleted, the dependency causes make to die (because there is
16221c2f794Smrg## typically no way to rebuild the header).  We avoid this by adding
16321c2f794Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
16421c2f794Smrg## this for us directly.
16521c2f794Smrg  tr ' ' '
16621c2f794Smrg' < "$tmpdepfile" |
16721c2f794Smrg## Some versions of gcc put a space before the `:'.  On the theory
16821c2f794Smrg## that the space means something, we add a space to the output as
16982e12b1bSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
17082e12b1bSmrg## to the object.  Take care to not repeat it in the output.
17121c2f794Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
17221c2f794Smrg## correctly.  Breaking it into two sed invocations is a workaround.
17382e12b1bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
17482e12b1bSmrg      | sed -e 's/$/ :/' >> "$depfile"
17521c2f794Smrg  rm -f "$tmpdepfile"
17621c2f794Smrg  ;;
17721c2f794Smrg
17821c2f794Smrghp)
17921c2f794Smrg  # This case exists only to let depend.m4 do its work.  It works by
18021c2f794Smrg  # looking at the text of this script.  This case will never be run,
18121c2f794Smrg  # since it is checked for above.
18221c2f794Smrg  exit 1
18321c2f794Smrg  ;;
18421c2f794Smrg
18521c2f794Smrgsgi)
18621c2f794Smrg  if test "$libtool" = yes; then
18721c2f794Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
18821c2f794Smrg  else
18921c2f794Smrg    "$@" -MDupdate "$tmpdepfile"
19021c2f794Smrg  fi
19121c2f794Smrg  stat=$?
19221c2f794Smrg  if test $stat -eq 0; then :
19321c2f794Smrg  else
19421c2f794Smrg    rm -f "$tmpdepfile"
19521c2f794Smrg    exit $stat
19621c2f794Smrg  fi
19721c2f794Smrg  rm -f "$depfile"
19821c2f794Smrg
19921c2f794Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
20021c2f794Smrg    echo "$object : \\" > "$depfile"
20121c2f794Smrg
20221c2f794Smrg    # Clip off the initial element (the dependent).  Don't try to be
20321c2f794Smrg    # clever and replace this with sed code, as IRIX sed won't handle
20421c2f794Smrg    # lines with more than a fixed number of characters (4096 in
20521c2f794Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
20621c2f794Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
20721c2f794Smrg    # dependency line.
20821c2f794Smrg    tr ' ' '
20921c2f794Smrg' < "$tmpdepfile" \
21021c2f794Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
21121c2f794Smrg    tr '
21212391620Smrg' ' ' >> "$depfile"
21312391620Smrg    echo >> "$depfile"
21421c2f794Smrg
21521c2f794Smrg    # The second pass generates a dummy entry for each header file.
21621c2f794Smrg    tr ' ' '
21721c2f794Smrg' < "$tmpdepfile" \
21821c2f794Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
21912391620Smrg   >> "$depfile"
22021c2f794Smrg  else
22121c2f794Smrg    # The sourcefile does not contain any dependencies, so just
22221c2f794Smrg    # store a dummy comment line, to avoid errors with the Makefile
22321c2f794Smrg    # "include basename.Plo" scheme.
22421c2f794Smrg    echo "#dummy" > "$depfile"
22521c2f794Smrg  fi
22621c2f794Smrg  rm -f "$tmpdepfile"
22721c2f794Smrg  ;;
22821c2f794Smrg
22921c2f794Smrgaix)
23021c2f794Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
23121c2f794Smrg  # in a .u file.  In older versions, this file always lives in the
23221c2f794Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
23321c2f794Smrg  # start of each line; $object doesn't have directory information.
23421c2f794Smrg  # Version 6 uses the directory in both cases.
23512391620Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
23612391620Smrg  test "x$dir" = "x$object" && dir=
23712391620Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
23821c2f794Smrg  if test "$libtool" = yes; then
23912391620Smrg    tmpdepfile1=$dir$base.u
24012391620Smrg    tmpdepfile2=$base.u
24112391620Smrg    tmpdepfile3=$dir.libs/$base.u
24221c2f794Smrg    "$@" -Wc,-M
24321c2f794Smrg  else
24412391620Smrg    tmpdepfile1=$dir$base.u
24512391620Smrg    tmpdepfile2=$dir$base.u
24612391620Smrg    tmpdepfile3=$dir$base.u
24721c2f794Smrg    "$@" -M
24821c2f794Smrg  fi
24921c2f794Smrg  stat=$?
25021c2f794Smrg
25121c2f794Smrg  if test $stat -eq 0; then :
25221c2f794Smrg  else
25312391620Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25421c2f794Smrg    exit $stat
25521c2f794Smrg  fi
25621c2f794Smrg
25712391620Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25812391620Smrg  do
25912391620Smrg    test -f "$tmpdepfile" && break
26012391620Smrg  done
26121c2f794Smrg  if test -f "$tmpdepfile"; then
26221c2f794Smrg    # Each line is of the form `foo.o: dependent.h'.
26321c2f794Smrg    # Do two passes, one to just change these to
26421c2f794Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
26512391620Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
26612391620Smrg    # That's a tab and a space in the [].
26712391620Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
26821c2f794Smrg  else
26921c2f794Smrg    # The sourcefile does not contain any dependencies, so just
27021c2f794Smrg    # store a dummy comment line, to avoid errors with the Makefile
27121c2f794Smrg    # "include basename.Plo" scheme.
27221c2f794Smrg    echo "#dummy" > "$depfile"
27321c2f794Smrg  fi
27421c2f794Smrg  rm -f "$tmpdepfile"
27521c2f794Smrg  ;;
27621c2f794Smrg
27721c2f794Smrgicc)
27821c2f794Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
27921c2f794Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
28021c2f794Smrg  # ICC 7.0 will fill foo.d with something like
28121c2f794Smrg  #    foo.o: sub/foo.c
28221c2f794Smrg  #    foo.o: sub/foo.h
28321c2f794Smrg  # which is wrong.  We want:
28421c2f794Smrg  #    sub/foo.o: sub/foo.c
28521c2f794Smrg  #    sub/foo.o: sub/foo.h
28621c2f794Smrg  #    sub/foo.c:
28721c2f794Smrg  #    sub/foo.h:
28821c2f794Smrg  # ICC 7.1 will output
28921c2f794Smrg  #    foo.o: sub/foo.c sub/foo.h
29021c2f794Smrg  # and will wrap long lines using \ :
29121c2f794Smrg  #    foo.o: sub/foo.c ... \
29221c2f794Smrg  #     sub/foo.h ... \
29321c2f794Smrg  #     ...
29421c2f794Smrg
29521c2f794Smrg  "$@" -MD -MF "$tmpdepfile"
29621c2f794Smrg  stat=$?
29721c2f794Smrg  if test $stat -eq 0; then :
29821c2f794Smrg  else
29921c2f794Smrg    rm -f "$tmpdepfile"
30021c2f794Smrg    exit $stat
30121c2f794Smrg  fi
30221c2f794Smrg  rm -f "$depfile"
30321c2f794Smrg  # Each line is of the form `foo.o: dependent.h',
30421c2f794Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
30521c2f794Smrg  # Do two passes, one to just change these to
30621c2f794Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
30721c2f794Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
30821c2f794Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
30921c2f794Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
31021c2f794Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
31121c2f794Smrg    sed -e 's/$/ :/' >> "$depfile"
31221c2f794Smrg  rm -f "$tmpdepfile"
31321c2f794Smrg  ;;
31421c2f794Smrg
31521c2f794Smrghp2)
31621c2f794Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
31721c2f794Smrg  # compilers, which have integrated preprocessors.  The correct option
31821c2f794Smrg  # to use with these is +Maked; it writes dependencies to a file named
31921c2f794Smrg  # 'foo.d', which lands next to the object file, wherever that
32021c2f794Smrg  # happens to be.
32121c2f794Smrg  # Much of this is similar to the tru64 case; see comments there.
32221c2f794Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
32321c2f794Smrg  test "x$dir" = "x$object" && dir=
32421c2f794Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
32521c2f794Smrg  if test "$libtool" = yes; then
32621c2f794Smrg    tmpdepfile1=$dir$base.d
32721c2f794Smrg    tmpdepfile2=$dir.libs/$base.d
32821c2f794Smrg    "$@" -Wc,+Maked
32921c2f794Smrg  else
33021c2f794Smrg    tmpdepfile1=$dir$base.d
33121c2f794Smrg    tmpdepfile2=$dir$base.d
33221c2f794Smrg    "$@" +Maked
33321c2f794Smrg  fi
33421c2f794Smrg  stat=$?
33521c2f794Smrg  if test $stat -eq 0; then :
33621c2f794Smrg  else
33721c2f794Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
33821c2f794Smrg     exit $stat
33921c2f794Smrg  fi
34021c2f794Smrg
34121c2f794Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
34221c2f794Smrg  do
34321c2f794Smrg    test -f "$tmpdepfile" && break
34421c2f794Smrg  done
34521c2f794Smrg  if test -f "$tmpdepfile"; then
34621c2f794Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
34721c2f794Smrg    # Add `dependent.h:' lines.
34812391620Smrg    sed -ne '2,${
34912391620Smrg	       s/^ *//
35012391620Smrg	       s/ \\*$//
35112391620Smrg	       s/$/:/
35212391620Smrg	       p
35312391620Smrg	     }' "$tmpdepfile" >> "$depfile"
35421c2f794Smrg  else
35521c2f794Smrg    echo "#dummy" > "$depfile"
35621c2f794Smrg  fi
35721c2f794Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
35821c2f794Smrg  ;;
35921c2f794Smrg
36021c2f794Smrgtru64)
36121c2f794Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
36221c2f794Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
36321c2f794Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
36421c2f794Smrg   # dependencies in `foo.d' instead, so we check for that too.
36521c2f794Smrg   # Subdirectories are respected.
36621c2f794Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
36721c2f794Smrg   test "x$dir" = "x$object" && dir=
36821c2f794Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
36921c2f794Smrg
37021c2f794Smrg   if test "$libtool" = yes; then
37121c2f794Smrg      # With Tru64 cc, shared objects can also be used to make a
37221c2f794Smrg      # static library.  This mechanism is used in libtool 1.4 series to
37321c2f794Smrg      # handle both shared and static libraries in a single compilation.
37421c2f794Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
37521c2f794Smrg      #
37621c2f794Smrg      # With libtool 1.5 this exception was removed, and libtool now
37721c2f794Smrg      # generates 2 separate objects for the 2 libraries.  These two
37821c2f794Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
37921c2f794Smrg      # in $dir$base.o.d.  We have to check for both files, because
38021c2f794Smrg      # one of the two compilations can be disabled.  We should prefer
38121c2f794Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
38221c2f794Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
38321c2f794Smrg      # the former would cause a distcleancheck panic.
38421c2f794Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
38521c2f794Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
38621c2f794Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
38721c2f794Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
38821c2f794Smrg      "$@" -Wc,-MD
38921c2f794Smrg   else
39021c2f794Smrg      tmpdepfile1=$dir$base.o.d
39121c2f794Smrg      tmpdepfile2=$dir$base.d
39221c2f794Smrg      tmpdepfile3=$dir$base.d
39321c2f794Smrg      tmpdepfile4=$dir$base.d
39421c2f794Smrg      "$@" -MD
39521c2f794Smrg   fi
39621c2f794Smrg
39721c2f794Smrg   stat=$?
39821c2f794Smrg   if test $stat -eq 0; then :
39921c2f794Smrg   else
40021c2f794Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40121c2f794Smrg      exit $stat
40221c2f794Smrg   fi
40321c2f794Smrg
40421c2f794Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40521c2f794Smrg   do
40621c2f794Smrg     test -f "$tmpdepfile" && break
40721c2f794Smrg   done
40821c2f794Smrg   if test -f "$tmpdepfile"; then
40921c2f794Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
41021c2f794Smrg      # That's a tab and a space in the [].
41121c2f794Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
41221c2f794Smrg   else
41321c2f794Smrg      echo "#dummy" > "$depfile"
41421c2f794Smrg   fi
41521c2f794Smrg   rm -f "$tmpdepfile"
41621c2f794Smrg   ;;
41721c2f794Smrg
41882e12b1bSmrgmsvc7)
41982e12b1bSmrg  if test "$libtool" = yes; then
42082e12b1bSmrg    showIncludes=-Wc,-showIncludes
42182e12b1bSmrg  else
42282e12b1bSmrg    showIncludes=-showIncludes
42382e12b1bSmrg  fi
42482e12b1bSmrg  "$@" $showIncludes > "$tmpdepfile"
42582e12b1bSmrg  stat=$?
42682e12b1bSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
42782e12b1bSmrg  if test "$stat" = 0; then :
42882e12b1bSmrg  else
42982e12b1bSmrg    rm -f "$tmpdepfile"
43082e12b1bSmrg    exit $stat
43182e12b1bSmrg  fi
43282e12b1bSmrg  rm -f "$depfile"
43382e12b1bSmrg  echo "$object : \\" > "$depfile"
43482e12b1bSmrg  # The first sed program below extracts the file names and escapes
43582e12b1bSmrg  # backslashes for cygpath.  The second sed program outputs the file
43682e12b1bSmrg  # name when reading, but also accumulates all include files in the
43782e12b1bSmrg  # hold buffer in order to output them again at the end.  This only
43882e12b1bSmrg  # works with sed implementations that can handle large buffers.
43982e12b1bSmrg  sed < "$tmpdepfile" -n '
44082e12b1bSmrg/^Note: including file:  *\(.*\)/ {
44182e12b1bSmrg  s//\1/
44282e12b1bSmrg  s/\\/\\\\/g
44382e12b1bSmrg  p
44482e12b1bSmrg}' | $cygpath_u | sort -u | sed -n '
44582e12b1bSmrgs/ /\\ /g
44682e12b1bSmrgs/\(.*\)/	\1 \\/p
44782e12b1bSmrgs/.\(.*\) \\/\1:/
44882e12b1bSmrgH
44982e12b1bSmrg$ {
45082e12b1bSmrg  s/.*/	/
45182e12b1bSmrg  G
45282e12b1bSmrg  p
45382e12b1bSmrg}' >> "$depfile"
45482e12b1bSmrg  rm -f "$tmpdepfile"
45582e12b1bSmrg  ;;
45682e12b1bSmrg
45782e12b1bSmrgmsvc7msys)
45882e12b1bSmrg  # This case exists only to let depend.m4 do its work.  It works by
45982e12b1bSmrg  # looking at the text of this script.  This case will never be run,
46082e12b1bSmrg  # since it is checked for above.
46182e12b1bSmrg  exit 1
46282e12b1bSmrg  ;;
46382e12b1bSmrg
46421c2f794Smrg#nosideeffect)
46521c2f794Smrg  # This comment above is used by automake to tell side-effect
46621c2f794Smrg  # dependency tracking mechanisms from slower ones.
46721c2f794Smrg
46821c2f794Smrgdashmstdout)
46921c2f794Smrg  # Important note: in order to support this mode, a compiler *must*
47021c2f794Smrg  # always write the preprocessed file to stdout, regardless of -o.
47121c2f794Smrg  "$@" || exit $?
47221c2f794Smrg
47321c2f794Smrg  # Remove the call to Libtool.
47421c2f794Smrg  if test "$libtool" = yes; then
47512391620Smrg    while test "X$1" != 'X--mode=compile'; do
47621c2f794Smrg      shift
47721c2f794Smrg    done
47821c2f794Smrg    shift
47921c2f794Smrg  fi
48021c2f794Smrg
48121c2f794Smrg  # Remove `-o $object'.
48221c2f794Smrg  IFS=" "
48321c2f794Smrg  for arg
48421c2f794Smrg  do
48521c2f794Smrg    case $arg in
48621c2f794Smrg    -o)
48721c2f794Smrg      shift
48821c2f794Smrg      ;;
48921c2f794Smrg    $object)
49021c2f794Smrg      shift
49121c2f794Smrg      ;;
49221c2f794Smrg    *)
49321c2f794Smrg      set fnord "$@" "$arg"
49421c2f794Smrg      shift # fnord
49521c2f794Smrg      shift # $arg
49621c2f794Smrg      ;;
49721c2f794Smrg    esac
49821c2f794Smrg  done
49921c2f794Smrg
50021c2f794Smrg  test -z "$dashmflag" && dashmflag=-M
50121c2f794Smrg  # Require at least two characters before searching for `:'
50221c2f794Smrg  # in the target name.  This is to cope with DOS-style filenames:
50321c2f794Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
50421c2f794Smrg  "$@" $dashmflag |
50521c2f794Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
50621c2f794Smrg  rm -f "$depfile"
50721c2f794Smrg  cat < "$tmpdepfile" > "$depfile"
50821c2f794Smrg  tr ' ' '
50921c2f794Smrg' < "$tmpdepfile" | \
51021c2f794Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51121c2f794Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51221c2f794Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51321c2f794Smrg  rm -f "$tmpdepfile"
51421c2f794Smrg  ;;
51521c2f794Smrg
51621c2f794SmrgdashXmstdout)
51721c2f794Smrg  # This case only exists to satisfy depend.m4.  It is never actually
51821c2f794Smrg  # run, as this mode is specially recognized in the preamble.
51921c2f794Smrg  exit 1
52021c2f794Smrg  ;;
52121c2f794Smrg
52221c2f794Smrgmakedepend)
52321c2f794Smrg  "$@" || exit $?
52421c2f794Smrg  # Remove any Libtool call
52521c2f794Smrg  if test "$libtool" = yes; then
52612391620Smrg    while test "X$1" != 'X--mode=compile'; do
52721c2f794Smrg      shift
52821c2f794Smrg    done
52921c2f794Smrg    shift
53021c2f794Smrg  fi
53121c2f794Smrg  # X makedepend
53221c2f794Smrg  shift
53312391620Smrg  cleared=no eat=no
53412391620Smrg  for arg
53512391620Smrg  do
53621c2f794Smrg    case $cleared in
53721c2f794Smrg    no)
53821c2f794Smrg      set ""; shift
53921c2f794Smrg      cleared=yes ;;
54021c2f794Smrg    esac
54112391620Smrg    if test $eat = yes; then
54212391620Smrg      eat=no
54312391620Smrg      continue
54412391620Smrg    fi
54521c2f794Smrg    case "$arg" in
54621c2f794Smrg    -D*|-I*)
54721c2f794Smrg      set fnord "$@" "$arg"; shift ;;
54821c2f794Smrg    # Strip any option that makedepend may not understand.  Remove
54921c2f794Smrg    # the object too, otherwise makedepend will parse it as a source file.
55012391620Smrg    -arch)
55112391620Smrg      eat=yes ;;
55221c2f794Smrg    -*|$object)
55321c2f794Smrg      ;;
55421c2f794Smrg    *)
55521c2f794Smrg      set fnord "$@" "$arg"; shift ;;
55621c2f794Smrg    esac
55721c2f794Smrg  done
55812391620Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
55921c2f794Smrg  touch "$tmpdepfile"
56021c2f794Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
56121c2f794Smrg  rm -f "$depfile"
56282e12b1bSmrg  # makedepend may prepend the VPATH from the source file name to the object.
56382e12b1bSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
56482e12b1bSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
56521c2f794Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
56621c2f794Smrg' | \
56721c2f794Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
56821c2f794Smrg## correctly.  Breaking it into two sed invocations is a workaround.
56921c2f794Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
57021c2f794Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
57121c2f794Smrg  ;;
57221c2f794Smrg
57321c2f794Smrgcpp)
57421c2f794Smrg  # Important note: in order to support this mode, a compiler *must*
57521c2f794Smrg  # always write the preprocessed file to stdout.
57621c2f794Smrg  "$@" || exit $?
57721c2f794Smrg
57821c2f794Smrg  # Remove the call to Libtool.
57921c2f794Smrg  if test "$libtool" = yes; then
58012391620Smrg    while test "X$1" != 'X--mode=compile'; do
58121c2f794Smrg      shift
58221c2f794Smrg    done
58321c2f794Smrg    shift
58421c2f794Smrg  fi
58521c2f794Smrg
58621c2f794Smrg  # Remove `-o $object'.
58721c2f794Smrg  IFS=" "
58821c2f794Smrg  for arg
58921c2f794Smrg  do
59021c2f794Smrg    case $arg in
59121c2f794Smrg    -o)
59221c2f794Smrg      shift
59321c2f794Smrg      ;;
59421c2f794Smrg    $object)
59521c2f794Smrg      shift
59621c2f794Smrg      ;;
59721c2f794Smrg    *)
59821c2f794Smrg      set fnord "$@" "$arg"
59921c2f794Smrg      shift # fnord
60021c2f794Smrg      shift # $arg
60121c2f794Smrg      ;;
60221c2f794Smrg    esac
60321c2f794Smrg  done
60421c2f794Smrg
60521c2f794Smrg  "$@" -E |
60621c2f794Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
60721c2f794Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
60821c2f794Smrg    sed '$ s: \\$::' > "$tmpdepfile"
60921c2f794Smrg  rm -f "$depfile"
61021c2f794Smrg  echo "$object : \\" > "$depfile"
61121c2f794Smrg  cat < "$tmpdepfile" >> "$depfile"
61221c2f794Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
61321c2f794Smrg  rm -f "$tmpdepfile"
61421c2f794Smrg  ;;
61521c2f794Smrg
61621c2f794Smrgmsvisualcpp)
61721c2f794Smrg  # Important note: in order to support this mode, a compiler *must*
61812391620Smrg  # always write the preprocessed file to stdout.
61921c2f794Smrg  "$@" || exit $?
62012391620Smrg
62112391620Smrg  # Remove the call to Libtool.
62212391620Smrg  if test "$libtool" = yes; then
62312391620Smrg    while test "X$1" != 'X--mode=compile'; do
62412391620Smrg      shift
62512391620Smrg    done
62612391620Smrg    shift
62712391620Smrg  fi
62812391620Smrg
62921c2f794Smrg  IFS=" "
63021c2f794Smrg  for arg
63121c2f794Smrg  do
63221c2f794Smrg    case "$arg" in
63312391620Smrg    -o)
63412391620Smrg      shift
63512391620Smrg      ;;
63612391620Smrg    $object)
63712391620Smrg      shift
63812391620Smrg      ;;
63921c2f794Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
64021c2f794Smrg	set fnord "$@"
64121c2f794Smrg	shift
64221c2f794Smrg	shift
64321c2f794Smrg	;;
64421c2f794Smrg    *)
64521c2f794Smrg	set fnord "$@" "$arg"
64621c2f794Smrg	shift
64721c2f794Smrg	shift
64821c2f794Smrg	;;
64921c2f794Smrg    esac
65021c2f794Smrg  done
65112391620Smrg  "$@" -E 2>/dev/null |
65212391620Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
65321c2f794Smrg  rm -f "$depfile"
65421c2f794Smrg  echo "$object : \\" > "$depfile"
65512391620Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
65621c2f794Smrg  echo "	" >> "$depfile"
65712391620Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
65821c2f794Smrg  rm -f "$tmpdepfile"
65921c2f794Smrg  ;;
66021c2f794Smrg
66112391620Smrgmsvcmsys)
66212391620Smrg  # This case exists only to let depend.m4 do its work.  It works by
66312391620Smrg  # looking at the text of this script.  This case will never be run,
66412391620Smrg  # since it is checked for above.
66512391620Smrg  exit 1
66612391620Smrg  ;;
66712391620Smrg
66821c2f794Smrgnone)
66921c2f794Smrg  exec "$@"
67021c2f794Smrg  ;;
67121c2f794Smrg
67221c2f794Smrg*)
67321c2f794Smrg  echo "Unknown depmode $depmode" 1>&2
67421c2f794Smrg  exit 1
67521c2f794Smrg  ;;
67621c2f794Smrgesac
67721c2f794Smrg
67821c2f794Smrgexit 0
67921c2f794Smrg
68021c2f794Smrg# Local Variables:
68121c2f794Smrg# mode: shell-script
68221c2f794Smrg# sh-indentation: 2
68321c2f794Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
68421c2f794Smrg# time-stamp-start: "scriptversion="
68521c2f794Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
68612391620Smrg# time-stamp-time-zone: "UTC"
68712391620Smrg# time-stamp-end: "; # UTC"
68821c2f794Smrg# End:
689