depcomp revision dd77ae96
172b4363aSmrg#! /bin/sh
272b4363aSmrg# depcomp - compile a program generating dependencies as side-effects
372b4363aSmrg
4dd77ae96Smrgscriptversion=2009-04-28.21; # UTC
572b4363aSmrg
6dd77ae96Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7dd77ae96Smrg# Software Foundation, Inc.
872b4363aSmrg
972b4363aSmrg# This program is free software; you can redistribute it and/or modify
1072b4363aSmrg# it under the terms of the GNU General Public License as published by
1172b4363aSmrg# the Free Software Foundation; either version 2, or (at your option)
1272b4363aSmrg# any later version.
1372b4363aSmrg
1472b4363aSmrg# This program is distributed in the hope that it will be useful,
1572b4363aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1672b4363aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1772b4363aSmrg# GNU General Public License for more details.
1872b4363aSmrg
1972b4363aSmrg# You should have received a copy of the GNU General Public License
20dd77ae96Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2172b4363aSmrg
2272b4363aSmrg# As a special exception to the GNU General Public License, if you
2372b4363aSmrg# distribute this file as part of a program that contains a
2472b4363aSmrg# configuration script generated by Autoconf, you may include it under
2572b4363aSmrg# the same distribution terms that you use for the rest of that program.
2672b4363aSmrg
2772b4363aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2872b4363aSmrg
2972b4363aSmrgcase $1 in
3072b4363aSmrg  '')
3172b4363aSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3272b4363aSmrg     exit 1;
3372b4363aSmrg     ;;
3472b4363aSmrg  -h | --h*)
3572b4363aSmrg    cat <<\EOF
3672b4363aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3772b4363aSmrg
3872b4363aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3972b4363aSmrgas side-effects.
4072b4363aSmrg
4172b4363aSmrgEnvironment variables:
4272b4363aSmrg  depmode     Dependency tracking mode.
4372b4363aSmrg  source      Source file read by `PROGRAMS ARGS'.
4472b4363aSmrg  object      Object file output by `PROGRAMS ARGS'.
4572b4363aSmrg  DEPDIR      directory where to store dependencies.
4672b4363aSmrg  depfile     Dependency file to output.
4772b4363aSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
4872b4363aSmrg  libtool     Whether libtool is used (yes/no).
4972b4363aSmrg
5072b4363aSmrgReport bugs to <bug-automake@gnu.org>.
5172b4363aSmrgEOF
5272b4363aSmrg    exit $?
5372b4363aSmrg    ;;
5472b4363aSmrg  -v | --v*)
5572b4363aSmrg    echo "depcomp $scriptversion"
5672b4363aSmrg    exit $?
5772b4363aSmrg    ;;
5872b4363aSmrgesac
5972b4363aSmrg
6072b4363aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6172b4363aSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6272b4363aSmrg  exit 1
6372b4363aSmrgfi
6472b4363aSmrg
6572b4363aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6672b4363aSmrgdepfile=${depfile-`echo "$object" |
6772b4363aSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6872b4363aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6972b4363aSmrg
7072b4363aSmrgrm -f "$tmpdepfile"
7172b4363aSmrg
7272b4363aSmrg# Some modes work just like other modes, but use different flags.  We
7372b4363aSmrg# parameterize here, but still list the modes in the big case below,
7472b4363aSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7572b4363aSmrg# here, because this file can only contain one case statement.
7672b4363aSmrgif test "$depmode" = hp; then
7772b4363aSmrg  # HP compiler uses -M and no extra arg.
7872b4363aSmrg  gccflag=-M
7972b4363aSmrg  depmode=gcc
8072b4363aSmrgfi
8172b4363aSmrg
8272b4363aSmrgif test "$depmode" = dashXmstdout; then
8372b4363aSmrg   # This is just like dashmstdout with a different argument.
8472b4363aSmrg   dashmflag=-xM
8572b4363aSmrg   depmode=dashmstdout
8672b4363aSmrgfi
8772b4363aSmrg
88dd77ae96Smrgcygpath_u="cygpath -u -f -"
89dd77ae96Smrgif test "$depmode" = msvcmsys; then
90dd77ae96Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91dd77ae96Smrg   # Just convert the backslash-escaped backslashes to single forward
92dd77ae96Smrg   # slashes to satisfy depend.m4
93dd77ae96Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94dd77ae96Smrg   depmode=msvisualcpp
95dd77ae96Smrgfi
96dd77ae96Smrg
9772b4363aSmrgcase "$depmode" in
9872b4363aSmrggcc3)
9972b4363aSmrg## gcc 3 implements dependency tracking that does exactly what
10072b4363aSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10172b4363aSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
10272b4363aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
10372b4363aSmrg## the command line argument order; so add the flags where they
10472b4363aSmrg## appear in depend2.am.  Note that the slowdown incurred here
10572b4363aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
10672b4363aSmrg  for arg
10772b4363aSmrg  do
10872b4363aSmrg    case $arg in
10972b4363aSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11072b4363aSmrg    *)  set fnord "$@" "$arg" ;;
11172b4363aSmrg    esac
11272b4363aSmrg    shift # fnord
11372b4363aSmrg    shift # $arg
11472b4363aSmrg  done
11572b4363aSmrg  "$@"
11672b4363aSmrg  stat=$?
11772b4363aSmrg  if test $stat -eq 0; then :
11872b4363aSmrg  else
11972b4363aSmrg    rm -f "$tmpdepfile"
12072b4363aSmrg    exit $stat
12172b4363aSmrg  fi
12272b4363aSmrg  mv "$tmpdepfile" "$depfile"
12372b4363aSmrg  ;;
12472b4363aSmrg
12572b4363aSmrggcc)
12672b4363aSmrg## There are various ways to get dependency output from gcc.  Here's
12772b4363aSmrg## why we pick this rather obscure method:
12872b4363aSmrg## - Don't want to use -MD because we'd like the dependencies to end
12972b4363aSmrg##   up in a subdir.  Having to rename by hand is ugly.
13072b4363aSmrg##   (We might end up doing this anyway to support other compilers.)
13172b4363aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
13272b4363aSmrg##   -MM, not -M (despite what the docs say).
13372b4363aSmrg## - Using -M directly means running the compiler twice (even worse
13472b4363aSmrg##   than renaming).
13572b4363aSmrg  if test -z "$gccflag"; then
13672b4363aSmrg    gccflag=-MD,
13772b4363aSmrg  fi
13872b4363aSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
13972b4363aSmrg  stat=$?
14072b4363aSmrg  if test $stat -eq 0; then :
14172b4363aSmrg  else
14272b4363aSmrg    rm -f "$tmpdepfile"
14372b4363aSmrg    exit $stat
14472b4363aSmrg  fi
14572b4363aSmrg  rm -f "$depfile"
14672b4363aSmrg  echo "$object : \\" > "$depfile"
14772b4363aSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14872b4363aSmrg## The second -e expression handles DOS-style file names with drive letters.
14972b4363aSmrg  sed -e 's/^[^:]*: / /' \
15072b4363aSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15172b4363aSmrg## This next piece of magic avoids the `deleted header file' problem.
15272b4363aSmrg## The problem is that when a header file which appears in a .P file
15372b4363aSmrg## is deleted, the dependency causes make to die (because there is
15472b4363aSmrg## typically no way to rebuild the header).  We avoid this by adding
15572b4363aSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
15672b4363aSmrg## this for us directly.
15772b4363aSmrg  tr ' ' '
15872b4363aSmrg' < "$tmpdepfile" |
15972b4363aSmrg## Some versions of gcc put a space before the `:'.  On the theory
16072b4363aSmrg## that the space means something, we add a space to the output as
16172b4363aSmrg## well.
16272b4363aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
16372b4363aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
16472b4363aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
16572b4363aSmrg  rm -f "$tmpdepfile"
16672b4363aSmrg  ;;
16772b4363aSmrg
16872b4363aSmrghp)
16972b4363aSmrg  # This case exists only to let depend.m4 do its work.  It works by
17072b4363aSmrg  # looking at the text of this script.  This case will never be run,
17172b4363aSmrg  # since it is checked for above.
17272b4363aSmrg  exit 1
17372b4363aSmrg  ;;
17472b4363aSmrg
17572b4363aSmrgsgi)
17672b4363aSmrg  if test "$libtool" = yes; then
17772b4363aSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17872b4363aSmrg  else
17972b4363aSmrg    "$@" -MDupdate "$tmpdepfile"
18072b4363aSmrg  fi
18172b4363aSmrg  stat=$?
18272b4363aSmrg  if test $stat -eq 0; then :
18372b4363aSmrg  else
18472b4363aSmrg    rm -f "$tmpdepfile"
18572b4363aSmrg    exit $stat
18672b4363aSmrg  fi
18772b4363aSmrg  rm -f "$depfile"
18872b4363aSmrg
18972b4363aSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
19072b4363aSmrg    echo "$object : \\" > "$depfile"
19172b4363aSmrg
19272b4363aSmrg    # Clip off the initial element (the dependent).  Don't try to be
19372b4363aSmrg    # clever and replace this with sed code, as IRIX sed won't handle
19472b4363aSmrg    # lines with more than a fixed number of characters (4096 in
19572b4363aSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
19672b4363aSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
19772b4363aSmrg    # dependency line.
19872b4363aSmrg    tr ' ' '
19972b4363aSmrg' < "$tmpdepfile" \
20072b4363aSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
20172b4363aSmrg    tr '
202dd77ae96Smrg' ' ' >> "$depfile"
203dd77ae96Smrg    echo >> "$depfile"
20472b4363aSmrg
20572b4363aSmrg    # The second pass generates a dummy entry for each header file.
20672b4363aSmrg    tr ' ' '
20772b4363aSmrg' < "$tmpdepfile" \
20872b4363aSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209dd77ae96Smrg   >> "$depfile"
21072b4363aSmrg  else
21172b4363aSmrg    # The sourcefile does not contain any dependencies, so just
21272b4363aSmrg    # store a dummy comment line, to avoid errors with the Makefile
21372b4363aSmrg    # "include basename.Plo" scheme.
21472b4363aSmrg    echo "#dummy" > "$depfile"
21572b4363aSmrg  fi
21672b4363aSmrg  rm -f "$tmpdepfile"
21772b4363aSmrg  ;;
21872b4363aSmrg
21972b4363aSmrgaix)
22072b4363aSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
22172b4363aSmrg  # in a .u file.  In older versions, this file always lives in the
22272b4363aSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
22372b4363aSmrg  # start of each line; $object doesn't have directory information.
22472b4363aSmrg  # Version 6 uses the directory in both cases.
225dd77ae96Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226dd77ae96Smrg  test "x$dir" = "x$object" && dir=
227dd77ae96Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22872b4363aSmrg  if test "$libtool" = yes; then
229dd77ae96Smrg    tmpdepfile1=$dir$base.u
230dd77ae96Smrg    tmpdepfile2=$base.u
231dd77ae96Smrg    tmpdepfile3=$dir.libs/$base.u
23272b4363aSmrg    "$@" -Wc,-M
23372b4363aSmrg  else
234dd77ae96Smrg    tmpdepfile1=$dir$base.u
235dd77ae96Smrg    tmpdepfile2=$dir$base.u
236dd77ae96Smrg    tmpdepfile3=$dir$base.u
23772b4363aSmrg    "$@" -M
23872b4363aSmrg  fi
23972b4363aSmrg  stat=$?
24072b4363aSmrg
24172b4363aSmrg  if test $stat -eq 0; then :
24272b4363aSmrg  else
243dd77ae96Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24472b4363aSmrg    exit $stat
24572b4363aSmrg  fi
24672b4363aSmrg
247dd77ae96Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248dd77ae96Smrg  do
249dd77ae96Smrg    test -f "$tmpdepfile" && break
250dd77ae96Smrg  done
25172b4363aSmrg  if test -f "$tmpdepfile"; then
25272b4363aSmrg    # Each line is of the form `foo.o: dependent.h'.
25372b4363aSmrg    # Do two passes, one to just change these to
25472b4363aSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255dd77ae96Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256dd77ae96Smrg    # That's a tab and a space in the [].
257dd77ae96Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25872b4363aSmrg  else
25972b4363aSmrg    # The sourcefile does not contain any dependencies, so just
26072b4363aSmrg    # store a dummy comment line, to avoid errors with the Makefile
26172b4363aSmrg    # "include basename.Plo" scheme.
26272b4363aSmrg    echo "#dummy" > "$depfile"
26372b4363aSmrg  fi
26472b4363aSmrg  rm -f "$tmpdepfile"
26572b4363aSmrg  ;;
26672b4363aSmrg
26772b4363aSmrgicc)
26872b4363aSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
26972b4363aSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
27072b4363aSmrg  # ICC 7.0 will fill foo.d with something like
27172b4363aSmrg  #    foo.o: sub/foo.c
27272b4363aSmrg  #    foo.o: sub/foo.h
27372b4363aSmrg  # which is wrong.  We want:
27472b4363aSmrg  #    sub/foo.o: sub/foo.c
27572b4363aSmrg  #    sub/foo.o: sub/foo.h
27672b4363aSmrg  #    sub/foo.c:
27772b4363aSmrg  #    sub/foo.h:
27872b4363aSmrg  # ICC 7.1 will output
27972b4363aSmrg  #    foo.o: sub/foo.c sub/foo.h
28072b4363aSmrg  # and will wrap long lines using \ :
28172b4363aSmrg  #    foo.o: sub/foo.c ... \
28272b4363aSmrg  #     sub/foo.h ... \
28372b4363aSmrg  #     ...
28472b4363aSmrg
28572b4363aSmrg  "$@" -MD -MF "$tmpdepfile"
28672b4363aSmrg  stat=$?
28772b4363aSmrg  if test $stat -eq 0; then :
28872b4363aSmrg  else
28972b4363aSmrg    rm -f "$tmpdepfile"
29072b4363aSmrg    exit $stat
29172b4363aSmrg  fi
29272b4363aSmrg  rm -f "$depfile"
29372b4363aSmrg  # Each line is of the form `foo.o: dependent.h',
29472b4363aSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
29572b4363aSmrg  # Do two passes, one to just change these to
29672b4363aSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29772b4363aSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29872b4363aSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29972b4363aSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
30072b4363aSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
30172b4363aSmrg    sed -e 's/$/ :/' >> "$depfile"
30272b4363aSmrg  rm -f "$tmpdepfile"
30372b4363aSmrg  ;;
30472b4363aSmrg
30572b4363aSmrghp2)
30672b4363aSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30772b4363aSmrg  # compilers, which have integrated preprocessors.  The correct option
30872b4363aSmrg  # to use with these is +Maked; it writes dependencies to a file named
30972b4363aSmrg  # 'foo.d', which lands next to the object file, wherever that
31072b4363aSmrg  # happens to be.
31172b4363aSmrg  # Much of this is similar to the tru64 case; see comments there.
31272b4363aSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
31372b4363aSmrg  test "x$dir" = "x$object" && dir=
31472b4363aSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
31572b4363aSmrg  if test "$libtool" = yes; then
31672b4363aSmrg    tmpdepfile1=$dir$base.d
31772b4363aSmrg    tmpdepfile2=$dir.libs/$base.d
31872b4363aSmrg    "$@" -Wc,+Maked
31972b4363aSmrg  else
32072b4363aSmrg    tmpdepfile1=$dir$base.d
32172b4363aSmrg    tmpdepfile2=$dir$base.d
32272b4363aSmrg    "$@" +Maked
32372b4363aSmrg  fi
32472b4363aSmrg  stat=$?
32572b4363aSmrg  if test $stat -eq 0; then :
32672b4363aSmrg  else
32772b4363aSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32872b4363aSmrg     exit $stat
32972b4363aSmrg  fi
33072b4363aSmrg
33172b4363aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
33272b4363aSmrg  do
33372b4363aSmrg    test -f "$tmpdepfile" && break
33472b4363aSmrg  done
33572b4363aSmrg  if test -f "$tmpdepfile"; then
33672b4363aSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33772b4363aSmrg    # Add `dependent.h:' lines.
338dd77ae96Smrg    sed -ne '2,${
339dd77ae96Smrg	       s/^ *//
340dd77ae96Smrg	       s/ \\*$//
341dd77ae96Smrg	       s/$/:/
342dd77ae96Smrg	       p
343dd77ae96Smrg	     }' "$tmpdepfile" >> "$depfile"
34472b4363aSmrg  else
34572b4363aSmrg    echo "#dummy" > "$depfile"
34672b4363aSmrg  fi
34772b4363aSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
34872b4363aSmrg  ;;
34972b4363aSmrg
35072b4363aSmrgtru64)
35172b4363aSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
35272b4363aSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
35372b4363aSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
35472b4363aSmrg   # dependencies in `foo.d' instead, so we check for that too.
35572b4363aSmrg   # Subdirectories are respected.
35672b4363aSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
35772b4363aSmrg   test "x$dir" = "x$object" && dir=
35872b4363aSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
35972b4363aSmrg
36072b4363aSmrg   if test "$libtool" = yes; then
36172b4363aSmrg      # With Tru64 cc, shared objects can also be used to make a
36272b4363aSmrg      # static library.  This mechanism is used in libtool 1.4 series to
36372b4363aSmrg      # handle both shared and static libraries in a single compilation.
36472b4363aSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
36572b4363aSmrg      #
36672b4363aSmrg      # With libtool 1.5 this exception was removed, and libtool now
36772b4363aSmrg      # generates 2 separate objects for the 2 libraries.  These two
36872b4363aSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
36972b4363aSmrg      # in $dir$base.o.d.  We have to check for both files, because
37072b4363aSmrg      # one of the two compilations can be disabled.  We should prefer
37172b4363aSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
37272b4363aSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
37372b4363aSmrg      # the former would cause a distcleancheck panic.
37472b4363aSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
37572b4363aSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
37672b4363aSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
37772b4363aSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
37872b4363aSmrg      "$@" -Wc,-MD
37972b4363aSmrg   else
38072b4363aSmrg      tmpdepfile1=$dir$base.o.d
38172b4363aSmrg      tmpdepfile2=$dir$base.d
38272b4363aSmrg      tmpdepfile3=$dir$base.d
38372b4363aSmrg      tmpdepfile4=$dir$base.d
38472b4363aSmrg      "$@" -MD
38572b4363aSmrg   fi
38672b4363aSmrg
38772b4363aSmrg   stat=$?
38872b4363aSmrg   if test $stat -eq 0; then :
38972b4363aSmrg   else
39072b4363aSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39172b4363aSmrg      exit $stat
39272b4363aSmrg   fi
39372b4363aSmrg
39472b4363aSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39572b4363aSmrg   do
39672b4363aSmrg     test -f "$tmpdepfile" && break
39772b4363aSmrg   done
39872b4363aSmrg   if test -f "$tmpdepfile"; then
39972b4363aSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
40072b4363aSmrg      # That's a tab and a space in the [].
40172b4363aSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
40272b4363aSmrg   else
40372b4363aSmrg      echo "#dummy" > "$depfile"
40472b4363aSmrg   fi
40572b4363aSmrg   rm -f "$tmpdepfile"
40672b4363aSmrg   ;;
40772b4363aSmrg
40872b4363aSmrg#nosideeffect)
40972b4363aSmrg  # This comment above is used by automake to tell side-effect
41072b4363aSmrg  # dependency tracking mechanisms from slower ones.
41172b4363aSmrg
41272b4363aSmrgdashmstdout)
41372b4363aSmrg  # Important note: in order to support this mode, a compiler *must*
41472b4363aSmrg  # always write the preprocessed file to stdout, regardless of -o.
41572b4363aSmrg  "$@" || exit $?
41672b4363aSmrg
41772b4363aSmrg  # Remove the call to Libtool.
41872b4363aSmrg  if test "$libtool" = yes; then
419dd77ae96Smrg    while test "X$1" != 'X--mode=compile'; do
42072b4363aSmrg      shift
42172b4363aSmrg    done
42272b4363aSmrg    shift
42372b4363aSmrg  fi
42472b4363aSmrg
42572b4363aSmrg  # Remove `-o $object'.
42672b4363aSmrg  IFS=" "
42772b4363aSmrg  for arg
42872b4363aSmrg  do
42972b4363aSmrg    case $arg in
43072b4363aSmrg    -o)
43172b4363aSmrg      shift
43272b4363aSmrg      ;;
43372b4363aSmrg    $object)
43472b4363aSmrg      shift
43572b4363aSmrg      ;;
43672b4363aSmrg    *)
43772b4363aSmrg      set fnord "$@" "$arg"
43872b4363aSmrg      shift # fnord
43972b4363aSmrg      shift # $arg
44072b4363aSmrg      ;;
44172b4363aSmrg    esac
44272b4363aSmrg  done
44372b4363aSmrg
44472b4363aSmrg  test -z "$dashmflag" && dashmflag=-M
44572b4363aSmrg  # Require at least two characters before searching for `:'
44672b4363aSmrg  # in the target name.  This is to cope with DOS-style filenames:
44772b4363aSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
44872b4363aSmrg  "$@" $dashmflag |
44972b4363aSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
45072b4363aSmrg  rm -f "$depfile"
45172b4363aSmrg  cat < "$tmpdepfile" > "$depfile"
45272b4363aSmrg  tr ' ' '
45372b4363aSmrg' < "$tmpdepfile" | \
45472b4363aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
45572b4363aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
45672b4363aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
45772b4363aSmrg  rm -f "$tmpdepfile"
45872b4363aSmrg  ;;
45972b4363aSmrg
46072b4363aSmrgdashXmstdout)
46172b4363aSmrg  # This case only exists to satisfy depend.m4.  It is never actually
46272b4363aSmrg  # run, as this mode is specially recognized in the preamble.
46372b4363aSmrg  exit 1
46472b4363aSmrg  ;;
46572b4363aSmrg
46672b4363aSmrgmakedepend)
46772b4363aSmrg  "$@" || exit $?
46872b4363aSmrg  # Remove any Libtool call
46972b4363aSmrg  if test "$libtool" = yes; then
470dd77ae96Smrg    while test "X$1" != 'X--mode=compile'; do
47172b4363aSmrg      shift
47272b4363aSmrg    done
47372b4363aSmrg    shift
47472b4363aSmrg  fi
47572b4363aSmrg  # X makedepend
47672b4363aSmrg  shift
477dd77ae96Smrg  cleared=no eat=no
478dd77ae96Smrg  for arg
479dd77ae96Smrg  do
48072b4363aSmrg    case $cleared in
48172b4363aSmrg    no)
48272b4363aSmrg      set ""; shift
48372b4363aSmrg      cleared=yes ;;
48472b4363aSmrg    esac
485dd77ae96Smrg    if test $eat = yes; then
486dd77ae96Smrg      eat=no
487dd77ae96Smrg      continue
488dd77ae96Smrg    fi
48972b4363aSmrg    case "$arg" in
49072b4363aSmrg    -D*|-I*)
49172b4363aSmrg      set fnord "$@" "$arg"; shift ;;
49272b4363aSmrg    # Strip any option that makedepend may not understand.  Remove
49372b4363aSmrg    # the object too, otherwise makedepend will parse it as a source file.
494dd77ae96Smrg    -arch)
495dd77ae96Smrg      eat=yes ;;
49672b4363aSmrg    -*|$object)
49772b4363aSmrg      ;;
49872b4363aSmrg    *)
49972b4363aSmrg      set fnord "$@" "$arg"; shift ;;
50072b4363aSmrg    esac
50172b4363aSmrg  done
502dd77ae96Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
50372b4363aSmrg  touch "$tmpdepfile"
50472b4363aSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
50572b4363aSmrg  rm -f "$depfile"
50672b4363aSmrg  cat < "$tmpdepfile" > "$depfile"
50772b4363aSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
50872b4363aSmrg' | \
50972b4363aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
51072b4363aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
51172b4363aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51272b4363aSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
51372b4363aSmrg  ;;
51472b4363aSmrg
51572b4363aSmrgcpp)
51672b4363aSmrg  # Important note: in order to support this mode, a compiler *must*
51772b4363aSmrg  # always write the preprocessed file to stdout.
51872b4363aSmrg  "$@" || exit $?
51972b4363aSmrg
52072b4363aSmrg  # Remove the call to Libtool.
52172b4363aSmrg  if test "$libtool" = yes; then
522dd77ae96Smrg    while test "X$1" != 'X--mode=compile'; do
52372b4363aSmrg      shift
52472b4363aSmrg    done
52572b4363aSmrg    shift
52672b4363aSmrg  fi
52772b4363aSmrg
52872b4363aSmrg  # Remove `-o $object'.
52972b4363aSmrg  IFS=" "
53072b4363aSmrg  for arg
53172b4363aSmrg  do
53272b4363aSmrg    case $arg in
53372b4363aSmrg    -o)
53472b4363aSmrg      shift
53572b4363aSmrg      ;;
53672b4363aSmrg    $object)
53772b4363aSmrg      shift
53872b4363aSmrg      ;;
53972b4363aSmrg    *)
54072b4363aSmrg      set fnord "$@" "$arg"
54172b4363aSmrg      shift # fnord
54272b4363aSmrg      shift # $arg
54372b4363aSmrg      ;;
54472b4363aSmrg    esac
54572b4363aSmrg  done
54672b4363aSmrg
54772b4363aSmrg  "$@" -E |
54872b4363aSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
54972b4363aSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
55072b4363aSmrg    sed '$ s: \\$::' > "$tmpdepfile"
55172b4363aSmrg  rm -f "$depfile"
55272b4363aSmrg  echo "$object : \\" > "$depfile"
55372b4363aSmrg  cat < "$tmpdepfile" >> "$depfile"
55472b4363aSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
55572b4363aSmrg  rm -f "$tmpdepfile"
55672b4363aSmrg  ;;
55772b4363aSmrg
55872b4363aSmrgmsvisualcpp)
55972b4363aSmrg  # Important note: in order to support this mode, a compiler *must*
560dd77ae96Smrg  # always write the preprocessed file to stdout.
56172b4363aSmrg  "$@" || exit $?
562dd77ae96Smrg
563dd77ae96Smrg  # Remove the call to Libtool.
564dd77ae96Smrg  if test "$libtool" = yes; then
565dd77ae96Smrg    while test "X$1" != 'X--mode=compile'; do
566dd77ae96Smrg      shift
567dd77ae96Smrg    done
568dd77ae96Smrg    shift
569dd77ae96Smrg  fi
570dd77ae96Smrg
57172b4363aSmrg  IFS=" "
57272b4363aSmrg  for arg
57372b4363aSmrg  do
57472b4363aSmrg    case "$arg" in
575dd77ae96Smrg    -o)
576dd77ae96Smrg      shift
577dd77ae96Smrg      ;;
578dd77ae96Smrg    $object)
579dd77ae96Smrg      shift
580dd77ae96Smrg      ;;
58172b4363aSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
58272b4363aSmrg	set fnord "$@"
58372b4363aSmrg	shift
58472b4363aSmrg	shift
58572b4363aSmrg	;;
58672b4363aSmrg    *)
58772b4363aSmrg	set fnord "$@" "$arg"
58872b4363aSmrg	shift
58972b4363aSmrg	shift
59072b4363aSmrg	;;
59172b4363aSmrg    esac
59272b4363aSmrg  done
593dd77ae96Smrg  "$@" -E 2>/dev/null |
594dd77ae96Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
59572b4363aSmrg  rm -f "$depfile"
59672b4363aSmrg  echo "$object : \\" > "$depfile"
597dd77ae96Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
59872b4363aSmrg  echo "	" >> "$depfile"
599dd77ae96Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60072b4363aSmrg  rm -f "$tmpdepfile"
60172b4363aSmrg  ;;
60272b4363aSmrg
603dd77ae96Smrgmsvcmsys)
604dd77ae96Smrg  # This case exists only to let depend.m4 do its work.  It works by
605dd77ae96Smrg  # looking at the text of this script.  This case will never be run,
606dd77ae96Smrg  # since it is checked for above.
607dd77ae96Smrg  exit 1
608dd77ae96Smrg  ;;
609dd77ae96Smrg
61072b4363aSmrgnone)
61172b4363aSmrg  exec "$@"
61272b4363aSmrg  ;;
61372b4363aSmrg
61472b4363aSmrg*)
61572b4363aSmrg  echo "Unknown depmode $depmode" 1>&2
61672b4363aSmrg  exit 1
61772b4363aSmrg  ;;
61872b4363aSmrgesac
61972b4363aSmrg
62072b4363aSmrgexit 0
62172b4363aSmrg
62272b4363aSmrg# Local Variables:
62372b4363aSmrg# mode: shell-script
62472b4363aSmrg# sh-indentation: 2
62572b4363aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
62672b4363aSmrg# time-stamp-start: "scriptversion="
62772b4363aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628dd77ae96Smrg# time-stamp-time-zone: "UTC"
629dd77ae96Smrg# time-stamp-end: "; # UTC"
63072b4363aSmrg# End:
631