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