depcomp revision 6dbd43aa
167f05d30Smrg#! /bin/sh
267f05d30Smrg# depcomp - compile a program generating dependencies as side-effects
3fffe5102Smrg
46dbd43aaSmrgscriptversion=2011-12-04.11; # UTC
5fffe5102Smrg
66dbd43aaSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
76dbd43aaSmrg# 2011 Free Software Foundation, Inc.
867f05d30Smrg
967f05d30Smrg# This program is free software; you can redistribute it and/or modify
1067f05d30Smrg# it under the terms of the GNU General Public License as published by
1167f05d30Smrg# the Free Software Foundation; either version 2, or (at your option)
1267f05d30Smrg# any later version.
1367f05d30Smrg
1467f05d30Smrg# This program is distributed in the hope that it will be useful,
1567f05d30Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1667f05d30Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1767f05d30Smrg# GNU General Public License for more details.
1867f05d30Smrg
1967f05d30Smrg# You should have received a copy of the GNU General Public License
20fffe5102Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2167f05d30Smrg
2267f05d30Smrg# As a special exception to the GNU General Public License, if you
2367f05d30Smrg# distribute this file as part of a program that contains a
2467f05d30Smrg# configuration script generated by Autoconf, you may include it under
2567f05d30Smrg# the same distribution terms that you use for the rest of that program.
2667f05d30Smrg
2767f05d30Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2867f05d30Smrg
29fffe5102Smrgcase $1 in
30fffe5102Smrg  '')
31fffe5102Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32fffe5102Smrg     exit 1;
33fffe5102Smrg     ;;
34fffe5102Smrg  -h | --h*)
35fffe5102Smrg    cat <<\EOF
36fffe5102SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37fffe5102Smrg
38fffe5102SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39fffe5102Smrgas side-effects.
40fffe5102Smrg
41fffe5102SmrgEnvironment variables:
42fffe5102Smrg  depmode     Dependency tracking mode.
43fffe5102Smrg  source      Source file read by `PROGRAMS ARGS'.
44fffe5102Smrg  object      Object file output by `PROGRAMS ARGS'.
45fffe5102Smrg  DEPDIR      directory where to store dependencies.
46fffe5102Smrg  depfile     Dependency file to output.
476dbd43aaSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
48fffe5102Smrg  libtool     Whether libtool is used (yes/no).
49fffe5102Smrg
50fffe5102SmrgReport bugs to <bug-automake@gnu.org>.
51fffe5102SmrgEOF
52fffe5102Smrg    exit $?
53fffe5102Smrg    ;;
54fffe5102Smrg  -v | --v*)
55fffe5102Smrg    echo "depcomp $scriptversion"
56fffe5102Smrg    exit $?
57fffe5102Smrg    ;;
58fffe5102Smrgesac
59fffe5102Smrg
6067f05d30Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6167f05d30Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6267f05d30Smrg  exit 1
6367f05d30Smrgfi
6467f05d30Smrg
65fffe5102Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66fffe5102Smrgdepfile=${depfile-`echo "$object" |
67fffe5102Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6867f05d30Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6967f05d30Smrg
7067f05d30Smrgrm -f "$tmpdepfile"
7167f05d30Smrg
7267f05d30Smrg# Some modes work just like other modes, but use different flags.  We
7367f05d30Smrg# parameterize here, but still list the modes in the big case below,
7467f05d30Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7567f05d30Smrg# here, because this file can only contain one case statement.
7667f05d30Smrgif test "$depmode" = hp; then
7767f05d30Smrg  # HP compiler uses -M and no extra arg.
7867f05d30Smrg  gccflag=-M
7967f05d30Smrg  depmode=gcc
8067f05d30Smrgfi
8167f05d30Smrg
8267f05d30Smrgif test "$depmode" = dashXmstdout; then
8367f05d30Smrg   # This is just like dashmstdout with a different argument.
8467f05d30Smrg   dashmflag=-xM
8567f05d30Smrg   depmode=dashmstdout
8667f05d30Smrgfi
8767f05d30Smrg
88fffe5102Smrgcygpath_u="cygpath -u -f -"
89fffe5102Smrgif test "$depmode" = msvcmsys; then
90fffe5102Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91fffe5102Smrg   # Just convert the backslash-escaped backslashes to single forward
92fffe5102Smrg   # slashes to satisfy depend.m4
936dbd43aaSmrg   cygpath_u='sed s,\\\\,/,g'
94fffe5102Smrg   depmode=msvisualcpp
95fffe5102Smrgfi
96fffe5102Smrg
976dbd43aaSmrgif test "$depmode" = msvc7msys; then
986dbd43aaSmrg   # This is just like msvc7 but w/o cygpath translation.
996dbd43aaSmrg   # Just convert the backslash-escaped backslashes to single forward
1006dbd43aaSmrg   # slashes to satisfy depend.m4
1016dbd43aaSmrg   cygpath_u='sed s,\\\\,/,g'
1026dbd43aaSmrg   depmode=msvc7
1036dbd43aaSmrgfi
1046dbd43aaSmrg
10567f05d30Smrgcase "$depmode" in
10667f05d30Smrggcc3)
10767f05d30Smrg## gcc 3 implements dependency tracking that does exactly what
10867f05d30Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10967f05d30Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110fffe5102Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111fffe5102Smrg## the command line argument order; so add the flags where they
112fffe5102Smrg## appear in depend2.am.  Note that the slowdown incurred here
113fffe5102Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114fffe5102Smrg  for arg
115fffe5102Smrg  do
116fffe5102Smrg    case $arg in
117fffe5102Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118fffe5102Smrg    *)  set fnord "$@" "$arg" ;;
119fffe5102Smrg    esac
120fffe5102Smrg    shift # fnord
121fffe5102Smrg    shift # $arg
122fffe5102Smrg  done
123fffe5102Smrg  "$@"
12467f05d30Smrg  stat=$?
12567f05d30Smrg  if test $stat -eq 0; then :
12667f05d30Smrg  else
12767f05d30Smrg    rm -f "$tmpdepfile"
12867f05d30Smrg    exit $stat
12967f05d30Smrg  fi
13067f05d30Smrg  mv "$tmpdepfile" "$depfile"
13167f05d30Smrg  ;;
13267f05d30Smrg
13367f05d30Smrggcc)
13467f05d30Smrg## There are various ways to get dependency output from gcc.  Here's
13567f05d30Smrg## why we pick this rather obscure method:
13667f05d30Smrg## - Don't want to use -MD because we'd like the dependencies to end
13767f05d30Smrg##   up in a subdir.  Having to rename by hand is ugly.
13867f05d30Smrg##   (We might end up doing this anyway to support other compilers.)
13967f05d30Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
14067f05d30Smrg##   -MM, not -M (despite what the docs say).
14167f05d30Smrg## - Using -M directly means running the compiler twice (even worse
14267f05d30Smrg##   than renaming).
14367f05d30Smrg  if test -z "$gccflag"; then
14467f05d30Smrg    gccflag=-MD,
14567f05d30Smrg  fi
14667f05d30Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
14767f05d30Smrg  stat=$?
14867f05d30Smrg  if test $stat -eq 0; then :
14967f05d30Smrg  else
15067f05d30Smrg    rm -f "$tmpdepfile"
15167f05d30Smrg    exit $stat
15267f05d30Smrg  fi
15367f05d30Smrg  rm -f "$depfile"
15467f05d30Smrg  echo "$object : \\" > "$depfile"
15567f05d30Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
15667f05d30Smrg## The second -e expression handles DOS-style file names with drive letters.
15767f05d30Smrg  sed -e 's/^[^:]*: / /' \
15867f05d30Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15967f05d30Smrg## This next piece of magic avoids the `deleted header file' problem.
16067f05d30Smrg## The problem is that when a header file which appears in a .P file
16167f05d30Smrg## is deleted, the dependency causes make to die (because there is
16267f05d30Smrg## typically no way to rebuild the header).  We avoid this by adding
16367f05d30Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
16467f05d30Smrg## this for us directly.
16567f05d30Smrg  tr ' ' '
16667f05d30Smrg' < "$tmpdepfile" |
16767f05d30Smrg## Some versions of gcc put a space before the `:'.  On the theory
16867f05d30Smrg## that the space means something, we add a space to the output as
1696dbd43aaSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1706dbd43aaSmrg## to the object.  Take care to not repeat it in the output.
17167f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
17267f05d30Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1736dbd43aaSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1746dbd43aaSmrg      | sed -e 's/$/ :/' >> "$depfile"
17567f05d30Smrg  rm -f "$tmpdepfile"
17667f05d30Smrg  ;;
17767f05d30Smrg
17867f05d30Smrghp)
17967f05d30Smrg  # This case exists only to let depend.m4 do its work.  It works by
18067f05d30Smrg  # looking at the text of this script.  This case will never be run,
18167f05d30Smrg  # since it is checked for above.
18267f05d30Smrg  exit 1
18367f05d30Smrg  ;;
18467f05d30Smrg
18567f05d30Smrgsgi)
18667f05d30Smrg  if test "$libtool" = yes; then
18767f05d30Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
18867f05d30Smrg  else
18967f05d30Smrg    "$@" -MDupdate "$tmpdepfile"
19067f05d30Smrg  fi
19167f05d30Smrg  stat=$?
19267f05d30Smrg  if test $stat -eq 0; then :
19367f05d30Smrg  else
19467f05d30Smrg    rm -f "$tmpdepfile"
19567f05d30Smrg    exit $stat
19667f05d30Smrg  fi
19767f05d30Smrg  rm -f "$depfile"
19867f05d30Smrg
19967f05d30Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
20067f05d30Smrg    echo "$object : \\" > "$depfile"
20167f05d30Smrg
20267f05d30Smrg    # Clip off the initial element (the dependent).  Don't try to be
20367f05d30Smrg    # clever and replace this with sed code, as IRIX sed won't handle
20467f05d30Smrg    # lines with more than a fixed number of characters (4096 in
20567f05d30Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
20667f05d30Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
20767f05d30Smrg    # dependency line.
20867f05d30Smrg    tr ' ' '
20967f05d30Smrg' < "$tmpdepfile" \
21067f05d30Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
21167f05d30Smrg    tr '
212fffe5102Smrg' ' ' >> "$depfile"
213fffe5102Smrg    echo >> "$depfile"
21467f05d30Smrg
21567f05d30Smrg    # The second pass generates a dummy entry for each header file.
21667f05d30Smrg    tr ' ' '
21767f05d30Smrg' < "$tmpdepfile" \
21867f05d30Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219fffe5102Smrg   >> "$depfile"
22067f05d30Smrg  else
22167f05d30Smrg    # The sourcefile does not contain any dependencies, so just
22267f05d30Smrg    # store a dummy comment line, to avoid errors with the Makefile
22367f05d30Smrg    # "include basename.Plo" scheme.
22467f05d30Smrg    echo "#dummy" > "$depfile"
22567f05d30Smrg  fi
22667f05d30Smrg  rm -f "$tmpdepfile"
22767f05d30Smrg  ;;
22867f05d30Smrg
22967f05d30Smrgaix)
23067f05d30Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
23167f05d30Smrg  # in a .u file.  In older versions, this file always lives in the
23267f05d30Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
23367f05d30Smrg  # start of each line; $object doesn't have directory information.
23467f05d30Smrg  # Version 6 uses the directory in both cases.
235fffe5102Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236fffe5102Smrg  test "x$dir" = "x$object" && dir=
237fffe5102Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
23867f05d30Smrg  if test "$libtool" = yes; then
239fffe5102Smrg    tmpdepfile1=$dir$base.u
240fffe5102Smrg    tmpdepfile2=$base.u
241fffe5102Smrg    tmpdepfile3=$dir.libs/$base.u
24267f05d30Smrg    "$@" -Wc,-M
24367f05d30Smrg  else
244fffe5102Smrg    tmpdepfile1=$dir$base.u
245fffe5102Smrg    tmpdepfile2=$dir$base.u
246fffe5102Smrg    tmpdepfile3=$dir$base.u
24767f05d30Smrg    "$@" -M
24867f05d30Smrg  fi
24967f05d30Smrg  stat=$?
25067f05d30Smrg
25167f05d30Smrg  if test $stat -eq 0; then :
25267f05d30Smrg  else
253fffe5102Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25467f05d30Smrg    exit $stat
25567f05d30Smrg  fi
25667f05d30Smrg
257fffe5102Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258fffe5102Smrg  do
259fffe5102Smrg    test -f "$tmpdepfile" && break
260fffe5102Smrg  done
26167f05d30Smrg  if test -f "$tmpdepfile"; then
26267f05d30Smrg    # Each line is of the form `foo.o: dependent.h'.
26367f05d30Smrg    # Do two passes, one to just change these to
26467f05d30Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265fffe5102Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266fffe5102Smrg    # That's a tab and a space in the [].
267fffe5102Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
26867f05d30Smrg  else
26967f05d30Smrg    # The sourcefile does not contain any dependencies, so just
27067f05d30Smrg    # store a dummy comment line, to avoid errors with the Makefile
27167f05d30Smrg    # "include basename.Plo" scheme.
27267f05d30Smrg    echo "#dummy" > "$depfile"
27367f05d30Smrg  fi
27467f05d30Smrg  rm -f "$tmpdepfile"
27567f05d30Smrg  ;;
27667f05d30Smrg
27767f05d30Smrgicc)
27867f05d30Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
27967f05d30Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
28067f05d30Smrg  # ICC 7.0 will fill foo.d with something like
28167f05d30Smrg  #    foo.o: sub/foo.c
28267f05d30Smrg  #    foo.o: sub/foo.h
28367f05d30Smrg  # which is wrong.  We want:
28467f05d30Smrg  #    sub/foo.o: sub/foo.c
28567f05d30Smrg  #    sub/foo.o: sub/foo.h
28667f05d30Smrg  #    sub/foo.c:
28767f05d30Smrg  #    sub/foo.h:
28867f05d30Smrg  # ICC 7.1 will output
28967f05d30Smrg  #    foo.o: sub/foo.c sub/foo.h
29067f05d30Smrg  # and will wrap long lines using \ :
29167f05d30Smrg  #    foo.o: sub/foo.c ... \
29267f05d30Smrg  #     sub/foo.h ... \
29367f05d30Smrg  #     ...
29467f05d30Smrg
29567f05d30Smrg  "$@" -MD -MF "$tmpdepfile"
29667f05d30Smrg  stat=$?
29767f05d30Smrg  if test $stat -eq 0; then :
29867f05d30Smrg  else
29967f05d30Smrg    rm -f "$tmpdepfile"
30067f05d30Smrg    exit $stat
30167f05d30Smrg  fi
30267f05d30Smrg  rm -f "$depfile"
30367f05d30Smrg  # Each line is of the form `foo.o: dependent.h',
30467f05d30Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
30567f05d30Smrg  # Do two passes, one to just change these to
30667f05d30Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
30767f05d30Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
30867f05d30Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
30967f05d30Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
31067f05d30Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
31167f05d30Smrg    sed -e 's/$/ :/' >> "$depfile"
31267f05d30Smrg  rm -f "$tmpdepfile"
31367f05d30Smrg  ;;
31467f05d30Smrg
315fffe5102Smrghp2)
316fffe5102Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317fffe5102Smrg  # compilers, which have integrated preprocessors.  The correct option
318fffe5102Smrg  # to use with these is +Maked; it writes dependencies to a file named
319fffe5102Smrg  # 'foo.d', which lands next to the object file, wherever that
320fffe5102Smrg  # happens to be.
321fffe5102Smrg  # Much of this is similar to the tru64 case; see comments there.
322fffe5102Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323fffe5102Smrg  test "x$dir" = "x$object" && dir=
324fffe5102Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325fffe5102Smrg  if test "$libtool" = yes; then
326fffe5102Smrg    tmpdepfile1=$dir$base.d
327fffe5102Smrg    tmpdepfile2=$dir.libs/$base.d
328fffe5102Smrg    "$@" -Wc,+Maked
329fffe5102Smrg  else
330fffe5102Smrg    tmpdepfile1=$dir$base.d
331fffe5102Smrg    tmpdepfile2=$dir$base.d
332fffe5102Smrg    "$@" +Maked
333fffe5102Smrg  fi
334fffe5102Smrg  stat=$?
335fffe5102Smrg  if test $stat -eq 0; then :
336fffe5102Smrg  else
337fffe5102Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338fffe5102Smrg     exit $stat
339fffe5102Smrg  fi
340fffe5102Smrg
341fffe5102Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342fffe5102Smrg  do
343fffe5102Smrg    test -f "$tmpdepfile" && break
344fffe5102Smrg  done
345fffe5102Smrg  if test -f "$tmpdepfile"; then
346fffe5102Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347fffe5102Smrg    # Add `dependent.h:' lines.
348fffe5102Smrg    sed -ne '2,${
349fffe5102Smrg	       s/^ *//
350fffe5102Smrg	       s/ \\*$//
351fffe5102Smrg	       s/$/:/
352fffe5102Smrg	       p
353fffe5102Smrg	     }' "$tmpdepfile" >> "$depfile"
354fffe5102Smrg  else
355fffe5102Smrg    echo "#dummy" > "$depfile"
356fffe5102Smrg  fi
357fffe5102Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358fffe5102Smrg  ;;
359fffe5102Smrg
36067f05d30Smrgtru64)
36167f05d30Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
36267f05d30Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
36367f05d30Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
36467f05d30Smrg   # dependencies in `foo.d' instead, so we check for that too.
36567f05d30Smrg   # Subdirectories are respected.
36667f05d30Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
36767f05d30Smrg   test "x$dir" = "x$object" && dir=
36867f05d30Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
36967f05d30Smrg
37067f05d30Smrg   if test "$libtool" = yes; then
371fffe5102Smrg      # With Tru64 cc, shared objects can also be used to make a
372fffe5102Smrg      # static library.  This mechanism is used in libtool 1.4 series to
373fffe5102Smrg      # handle both shared and static libraries in a single compilation.
374fffe5102Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375fffe5102Smrg      #
376fffe5102Smrg      # With libtool 1.5 this exception was removed, and libtool now
377fffe5102Smrg      # generates 2 separate objects for the 2 libraries.  These two
378fffe5102Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
379fffe5102Smrg      # in $dir$base.o.d.  We have to check for both files, because
380fffe5102Smrg      # one of the two compilations can be disabled.  We should prefer
381fffe5102Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382fffe5102Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
383fffe5102Smrg      # the former would cause a distcleancheck panic.
384fffe5102Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385fffe5102Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386fffe5102Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387fffe5102Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
38867f05d30Smrg      "$@" -Wc,-MD
38967f05d30Smrg   else
390fffe5102Smrg      tmpdepfile1=$dir$base.o.d
391fffe5102Smrg      tmpdepfile2=$dir$base.d
392fffe5102Smrg      tmpdepfile3=$dir$base.d
393fffe5102Smrg      tmpdepfile4=$dir$base.d
39467f05d30Smrg      "$@" -MD
39567f05d30Smrg   fi
39667f05d30Smrg
39767f05d30Smrg   stat=$?
39867f05d30Smrg   if test $stat -eq 0; then :
39967f05d30Smrg   else
400fffe5102Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40167f05d30Smrg      exit $stat
40267f05d30Smrg   fi
40367f05d30Smrg
404fffe5102Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405fffe5102Smrg   do
406fffe5102Smrg     test -f "$tmpdepfile" && break
407fffe5102Smrg   done
40867f05d30Smrg   if test -f "$tmpdepfile"; then
40967f05d30Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
41067f05d30Smrg      # That's a tab and a space in the [].
41167f05d30Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
41267f05d30Smrg   else
41367f05d30Smrg      echo "#dummy" > "$depfile"
41467f05d30Smrg   fi
41567f05d30Smrg   rm -f "$tmpdepfile"
41667f05d30Smrg   ;;
41767f05d30Smrg
4186dbd43aaSmrgmsvc7)
4196dbd43aaSmrg  if test "$libtool" = yes; then
4206dbd43aaSmrg    showIncludes=-Wc,-showIncludes
4216dbd43aaSmrg  else
4226dbd43aaSmrg    showIncludes=-showIncludes
4236dbd43aaSmrg  fi
4246dbd43aaSmrg  "$@" $showIncludes > "$tmpdepfile"
4256dbd43aaSmrg  stat=$?
4266dbd43aaSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
4276dbd43aaSmrg  if test "$stat" = 0; then :
4286dbd43aaSmrg  else
4296dbd43aaSmrg    rm -f "$tmpdepfile"
4306dbd43aaSmrg    exit $stat
4316dbd43aaSmrg  fi
4326dbd43aaSmrg  rm -f "$depfile"
4336dbd43aaSmrg  echo "$object : \\" > "$depfile"
4346dbd43aaSmrg  # The first sed program below extracts the file names and escapes
4356dbd43aaSmrg  # backslashes for cygpath.  The second sed program outputs the file
4366dbd43aaSmrg  # name when reading, but also accumulates all include files in the
4376dbd43aaSmrg  # hold buffer in order to output them again at the end.  This only
4386dbd43aaSmrg  # works with sed implementations that can handle large buffers.
4396dbd43aaSmrg  sed < "$tmpdepfile" -n '
4406dbd43aaSmrg/^Note: including file:  *\(.*\)/ {
4416dbd43aaSmrg  s//\1/
4426dbd43aaSmrg  s/\\/\\\\/g
4436dbd43aaSmrg  p
4446dbd43aaSmrg}' | $cygpath_u | sort -u | sed -n '
4456dbd43aaSmrgs/ /\\ /g
4466dbd43aaSmrgs/\(.*\)/	\1 \\/p
4476dbd43aaSmrgs/.\(.*\) \\/\1:/
4486dbd43aaSmrgH
4496dbd43aaSmrg$ {
4506dbd43aaSmrg  s/.*/	/
4516dbd43aaSmrg  G
4526dbd43aaSmrg  p
4536dbd43aaSmrg}' >> "$depfile"
4546dbd43aaSmrg  rm -f "$tmpdepfile"
4556dbd43aaSmrg  ;;
4566dbd43aaSmrg
4576dbd43aaSmrgmsvc7msys)
4586dbd43aaSmrg  # This case exists only to let depend.m4 do its work.  It works by
4596dbd43aaSmrg  # looking at the text of this script.  This case will never be run,
4606dbd43aaSmrg  # since it is checked for above.
4616dbd43aaSmrg  exit 1
4626dbd43aaSmrg  ;;
4636dbd43aaSmrg
46467f05d30Smrg#nosideeffect)
46567f05d30Smrg  # This comment above is used by automake to tell side-effect
46667f05d30Smrg  # dependency tracking mechanisms from slower ones.
46767f05d30Smrg
46867f05d30Smrgdashmstdout)
46967f05d30Smrg  # Important note: in order to support this mode, a compiler *must*
47067f05d30Smrg  # always write the preprocessed file to stdout, regardless of -o.
47167f05d30Smrg  "$@" || exit $?
47267f05d30Smrg
47367f05d30Smrg  # Remove the call to Libtool.
47467f05d30Smrg  if test "$libtool" = yes; then
475fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
47667f05d30Smrg      shift
47767f05d30Smrg    done
47867f05d30Smrg    shift
47967f05d30Smrg  fi
48067f05d30Smrg
48167f05d30Smrg  # Remove `-o $object'.
48267f05d30Smrg  IFS=" "
48367f05d30Smrg  for arg
48467f05d30Smrg  do
48567f05d30Smrg    case $arg in
48667f05d30Smrg    -o)
48767f05d30Smrg      shift
48867f05d30Smrg      ;;
48967f05d30Smrg    $object)
49067f05d30Smrg      shift
49167f05d30Smrg      ;;
49267f05d30Smrg    *)
49367f05d30Smrg      set fnord "$@" "$arg"
49467f05d30Smrg      shift # fnord
49567f05d30Smrg      shift # $arg
49667f05d30Smrg      ;;
49767f05d30Smrg    esac
49867f05d30Smrg  done
49967f05d30Smrg
50067f05d30Smrg  test -z "$dashmflag" && dashmflag=-M
50167f05d30Smrg  # Require at least two characters before searching for `:'
50267f05d30Smrg  # in the target name.  This is to cope with DOS-style filenames:
50367f05d30Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
50467f05d30Smrg  "$@" $dashmflag |
50567f05d30Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
50667f05d30Smrg  rm -f "$depfile"
50767f05d30Smrg  cat < "$tmpdepfile" > "$depfile"
50867f05d30Smrg  tr ' ' '
50967f05d30Smrg' < "$tmpdepfile" | \
51067f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51167f05d30Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51267f05d30Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51367f05d30Smrg  rm -f "$tmpdepfile"
51467f05d30Smrg  ;;
51567f05d30Smrg
51667f05d30SmrgdashXmstdout)
51767f05d30Smrg  # This case only exists to satisfy depend.m4.  It is never actually
51867f05d30Smrg  # run, as this mode is specially recognized in the preamble.
51967f05d30Smrg  exit 1
52067f05d30Smrg  ;;
52167f05d30Smrg
52267f05d30Smrgmakedepend)
52367f05d30Smrg  "$@" || exit $?
52467f05d30Smrg  # Remove any Libtool call
52567f05d30Smrg  if test "$libtool" = yes; then
526fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
52767f05d30Smrg      shift
52867f05d30Smrg    done
52967f05d30Smrg    shift
53067f05d30Smrg  fi
53167f05d30Smrg  # X makedepend
53267f05d30Smrg  shift
533fffe5102Smrg  cleared=no eat=no
534fffe5102Smrg  for arg
535fffe5102Smrg  do
53667f05d30Smrg    case $cleared in
53767f05d30Smrg    no)
53867f05d30Smrg      set ""; shift
53967f05d30Smrg      cleared=yes ;;
54067f05d30Smrg    esac
541fffe5102Smrg    if test $eat = yes; then
542fffe5102Smrg      eat=no
543fffe5102Smrg      continue
544fffe5102Smrg    fi
54567f05d30Smrg    case "$arg" in
54667f05d30Smrg    -D*|-I*)
54767f05d30Smrg      set fnord "$@" "$arg"; shift ;;
54867f05d30Smrg    # Strip any option that makedepend may not understand.  Remove
54967f05d30Smrg    # the object too, otherwise makedepend will parse it as a source file.
550fffe5102Smrg    -arch)
551fffe5102Smrg      eat=yes ;;
55267f05d30Smrg    -*|$object)
55367f05d30Smrg      ;;
55467f05d30Smrg    *)
55567f05d30Smrg      set fnord "$@" "$arg"; shift ;;
55667f05d30Smrg    esac
55767f05d30Smrg  done
558fffe5102Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
55967f05d30Smrg  touch "$tmpdepfile"
56067f05d30Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
56167f05d30Smrg  rm -f "$depfile"
5626dbd43aaSmrg  # makedepend may prepend the VPATH from the source file name to the object.
5636dbd43aaSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5646dbd43aaSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
56567f05d30Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
56667f05d30Smrg' | \
56767f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
56867f05d30Smrg## correctly.  Breaking it into two sed invocations is a workaround.
56967f05d30Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
57067f05d30Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
57167f05d30Smrg  ;;
57267f05d30Smrg
57367f05d30Smrgcpp)
57467f05d30Smrg  # Important note: in order to support this mode, a compiler *must*
57567f05d30Smrg  # always write the preprocessed file to stdout.
57667f05d30Smrg  "$@" || exit $?
57767f05d30Smrg
57867f05d30Smrg  # Remove the call to Libtool.
57967f05d30Smrg  if test "$libtool" = yes; then
580fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
58167f05d30Smrg      shift
58267f05d30Smrg    done
58367f05d30Smrg    shift
58467f05d30Smrg  fi
58567f05d30Smrg
58667f05d30Smrg  # Remove `-o $object'.
58767f05d30Smrg  IFS=" "
58867f05d30Smrg  for arg
58967f05d30Smrg  do
59067f05d30Smrg    case $arg in
59167f05d30Smrg    -o)
59267f05d30Smrg      shift
59367f05d30Smrg      ;;
59467f05d30Smrg    $object)
59567f05d30Smrg      shift
59667f05d30Smrg      ;;
59767f05d30Smrg    *)
59867f05d30Smrg      set fnord "$@" "$arg"
59967f05d30Smrg      shift # fnord
60067f05d30Smrg      shift # $arg
60167f05d30Smrg      ;;
60267f05d30Smrg    esac
60367f05d30Smrg  done
60467f05d30Smrg
60567f05d30Smrg  "$@" -E |
606fffe5102Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607fffe5102Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
60867f05d30Smrg    sed '$ s: \\$::' > "$tmpdepfile"
60967f05d30Smrg  rm -f "$depfile"
61067f05d30Smrg  echo "$object : \\" > "$depfile"
61167f05d30Smrg  cat < "$tmpdepfile" >> "$depfile"
61267f05d30Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
61367f05d30Smrg  rm -f "$tmpdepfile"
61467f05d30Smrg  ;;
61567f05d30Smrg
61667f05d30Smrgmsvisualcpp)
61767f05d30Smrg  # Important note: in order to support this mode, a compiler *must*
618fffe5102Smrg  # always write the preprocessed file to stdout.
61967f05d30Smrg  "$@" || exit $?
620fffe5102Smrg
621fffe5102Smrg  # Remove the call to Libtool.
622fffe5102Smrg  if test "$libtool" = yes; then
623fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
624fffe5102Smrg      shift
625fffe5102Smrg    done
626fffe5102Smrg    shift
627fffe5102Smrg  fi
628fffe5102Smrg
62967f05d30Smrg  IFS=" "
63067f05d30Smrg  for arg
63167f05d30Smrg  do
63267f05d30Smrg    case "$arg" in
633fffe5102Smrg    -o)
634fffe5102Smrg      shift
635fffe5102Smrg      ;;
636fffe5102Smrg    $object)
637fffe5102Smrg      shift
638fffe5102Smrg      ;;
63967f05d30Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
64067f05d30Smrg	set fnord "$@"
64167f05d30Smrg	shift
64267f05d30Smrg	shift
64367f05d30Smrg	;;
64467f05d30Smrg    *)
64567f05d30Smrg	set fnord "$@" "$arg"
64667f05d30Smrg	shift
64767f05d30Smrg	shift
64867f05d30Smrg	;;
64967f05d30Smrg    esac
65067f05d30Smrg  done
651fffe5102Smrg  "$@" -E 2>/dev/null |
652fffe5102Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
65367f05d30Smrg  rm -f "$depfile"
65467f05d30Smrg  echo "$object : \\" > "$depfile"
655fffe5102Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
65667f05d30Smrg  echo "	" >> "$depfile"
657fffe5102Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
65867f05d30Smrg  rm -f "$tmpdepfile"
65967f05d30Smrg  ;;
66067f05d30Smrg
661fffe5102Smrgmsvcmsys)
662fffe5102Smrg  # This case exists only to let depend.m4 do its work.  It works by
663fffe5102Smrg  # looking at the text of this script.  This case will never be run,
664fffe5102Smrg  # since it is checked for above.
665fffe5102Smrg  exit 1
666fffe5102Smrg  ;;
667fffe5102Smrg
66867f05d30Smrgnone)
66967f05d30Smrg  exec "$@"
67067f05d30Smrg  ;;
67167f05d30Smrg
67267f05d30Smrg*)
67367f05d30Smrg  echo "Unknown depmode $depmode" 1>&2
67467f05d30Smrg  exit 1
67567f05d30Smrg  ;;
67667f05d30Smrgesac
67767f05d30Smrg
67867f05d30Smrgexit 0
679fffe5102Smrg
680fffe5102Smrg# Local Variables:
681fffe5102Smrg# mode: shell-script
682fffe5102Smrg# sh-indentation: 2
683fffe5102Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
684fffe5102Smrg# time-stamp-start: "scriptversion="
685fffe5102Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
686fffe5102Smrg# time-stamp-time-zone: "UTC"
687fffe5102Smrg# time-stamp-end: "; # UTC"
688fffe5102Smrg# End:
689