depcomp revision 64ce7165
164ce7165Smrg#! /bin/sh
264ce7165Smrg# depcomp - compile a program generating dependencies as side-effects
364ce7165Smrg
464ce7165Smrgscriptversion=2006-10-15.18
564ce7165Smrg
664ce7165Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
764ce7165Smrg# Foundation, Inc.
864ce7165Smrg
964ce7165Smrg# This program is free software; you can redistribute it and/or modify
1064ce7165Smrg# it under the terms of the GNU General Public License as published by
1164ce7165Smrg# the Free Software Foundation; either version 2, or (at your option)
1264ce7165Smrg# any later version.
1364ce7165Smrg
1464ce7165Smrg# This program is distributed in the hope that it will be useful,
1564ce7165Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1664ce7165Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1764ce7165Smrg# GNU General Public License for more details.
1864ce7165Smrg
1964ce7165Smrg# You should have received a copy of the GNU General Public License
2064ce7165Smrg# along with this program; if not, write to the Free Software
2164ce7165Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2264ce7165Smrg# 02110-1301, USA.
2364ce7165Smrg
2464ce7165Smrg# As a special exception to the GNU General Public License, if you
2564ce7165Smrg# distribute this file as part of a program that contains a
2664ce7165Smrg# configuration script generated by Autoconf, you may include it under
2764ce7165Smrg# the same distribution terms that you use for the rest of that program.
2864ce7165Smrg
2964ce7165Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
3064ce7165Smrg
3164ce7165Smrgcase $1 in
3264ce7165Smrg  '')
3364ce7165Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3464ce7165Smrg     exit 1;
3564ce7165Smrg     ;;
3664ce7165Smrg  -h | --h*)
3764ce7165Smrg    cat <<\EOF
3864ce7165SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3964ce7165Smrg
4064ce7165SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4164ce7165Smrgas side-effects.
4264ce7165Smrg
4364ce7165SmrgEnvironment variables:
4464ce7165Smrg  depmode     Dependency tracking mode.
4564ce7165Smrg  source      Source file read by `PROGRAMS ARGS'.
4664ce7165Smrg  object      Object file output by `PROGRAMS ARGS'.
4764ce7165Smrg  DEPDIR      directory where to store dependencies.
4864ce7165Smrg  depfile     Dependency file to output.
4964ce7165Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
5064ce7165Smrg  libtool     Whether libtool is used (yes/no).
5164ce7165Smrg
5264ce7165SmrgReport bugs to <bug-automake@gnu.org>.
5364ce7165SmrgEOF
5464ce7165Smrg    exit $?
5564ce7165Smrg    ;;
5664ce7165Smrg  -v | --v*)
5764ce7165Smrg    echo "depcomp $scriptversion"
5864ce7165Smrg    exit $?
5964ce7165Smrg    ;;
6064ce7165Smrgesac
6164ce7165Smrg
6264ce7165Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6364ce7165Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6464ce7165Smrg  exit 1
6564ce7165Smrgfi
6664ce7165Smrg
6764ce7165Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6864ce7165Smrgdepfile=${depfile-`echo "$object" |
6964ce7165Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
7064ce7165Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7164ce7165Smrg
7264ce7165Smrgrm -f "$tmpdepfile"
7364ce7165Smrg
7464ce7165Smrg# Some modes work just like other modes, but use different flags.  We
7564ce7165Smrg# parameterize here, but still list the modes in the big case below,
7664ce7165Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7764ce7165Smrg# here, because this file can only contain one case statement.
7864ce7165Smrgif test "$depmode" = hp; then
7964ce7165Smrg  # HP compiler uses -M and no extra arg.
8064ce7165Smrg  gccflag=-M
8164ce7165Smrg  depmode=gcc
8264ce7165Smrgfi
8364ce7165Smrg
8464ce7165Smrgif test "$depmode" = dashXmstdout; then
8564ce7165Smrg   # This is just like dashmstdout with a different argument.
8664ce7165Smrg   dashmflag=-xM
8764ce7165Smrg   depmode=dashmstdout
8864ce7165Smrgfi
8964ce7165Smrg
9064ce7165Smrgcase "$depmode" in
9164ce7165Smrggcc3)
9264ce7165Smrg## gcc 3 implements dependency tracking that does exactly what
9364ce7165Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9464ce7165Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9564ce7165Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
9664ce7165Smrg## the command line argument order; so add the flags where they
9764ce7165Smrg## appear in depend2.am.  Note that the slowdown incurred here
9864ce7165Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
9964ce7165Smrg  for arg
10064ce7165Smrg  do
10164ce7165Smrg    case $arg in
10264ce7165Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
10364ce7165Smrg    *)  set fnord "$@" "$arg" ;;
10464ce7165Smrg    esac
10564ce7165Smrg    shift # fnord
10664ce7165Smrg    shift # $arg
10764ce7165Smrg  done
10864ce7165Smrg  "$@"
10964ce7165Smrg  stat=$?
11064ce7165Smrg  if test $stat -eq 0; then :
11164ce7165Smrg  else
11264ce7165Smrg    rm -f "$tmpdepfile"
11364ce7165Smrg    exit $stat
11464ce7165Smrg  fi
11564ce7165Smrg  mv "$tmpdepfile" "$depfile"
11664ce7165Smrg  ;;
11764ce7165Smrg
11864ce7165Smrggcc)
11964ce7165Smrg## There are various ways to get dependency output from gcc.  Here's
12064ce7165Smrg## why we pick this rather obscure method:
12164ce7165Smrg## - Don't want to use -MD because we'd like the dependencies to end
12264ce7165Smrg##   up in a subdir.  Having to rename by hand is ugly.
12364ce7165Smrg##   (We might end up doing this anyway to support other compilers.)
12464ce7165Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
12564ce7165Smrg##   -MM, not -M (despite what the docs say).
12664ce7165Smrg## - Using -M directly means running the compiler twice (even worse
12764ce7165Smrg##   than renaming).
12864ce7165Smrg  if test -z "$gccflag"; then
12964ce7165Smrg    gccflag=-MD,
13064ce7165Smrg  fi
13164ce7165Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13264ce7165Smrg  stat=$?
13364ce7165Smrg  if test $stat -eq 0; then :
13464ce7165Smrg  else
13564ce7165Smrg    rm -f "$tmpdepfile"
13664ce7165Smrg    exit $stat
13764ce7165Smrg  fi
13864ce7165Smrg  rm -f "$depfile"
13964ce7165Smrg  echo "$object : \\" > "$depfile"
14064ce7165Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14164ce7165Smrg## The second -e expression handles DOS-style file names with drive letters.
14264ce7165Smrg  sed -e 's/^[^:]*: / /' \
14364ce7165Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
14464ce7165Smrg## This next piece of magic avoids the `deleted header file' problem.
14564ce7165Smrg## The problem is that when a header file which appears in a .P file
14664ce7165Smrg## is deleted, the dependency causes make to die (because there is
14764ce7165Smrg## typically no way to rebuild the header).  We avoid this by adding
14864ce7165Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
14964ce7165Smrg## this for us directly.
15064ce7165Smrg  tr ' ' '
15164ce7165Smrg' < "$tmpdepfile" |
15264ce7165Smrg## Some versions of gcc put a space before the `:'.  On the theory
15364ce7165Smrg## that the space means something, we add a space to the output as
15464ce7165Smrg## well.
15564ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
15664ce7165Smrg## correctly.  Breaking it into two sed invocations is a workaround.
15764ce7165Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
15864ce7165Smrg  rm -f "$tmpdepfile"
15964ce7165Smrg  ;;
16064ce7165Smrg
16164ce7165Smrghp)
16264ce7165Smrg  # This case exists only to let depend.m4 do its work.  It works by
16364ce7165Smrg  # looking at the text of this script.  This case will never be run,
16464ce7165Smrg  # since it is checked for above.
16564ce7165Smrg  exit 1
16664ce7165Smrg  ;;
16764ce7165Smrg
16864ce7165Smrgsgi)
16964ce7165Smrg  if test "$libtool" = yes; then
17064ce7165Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17164ce7165Smrg  else
17264ce7165Smrg    "$@" -MDupdate "$tmpdepfile"
17364ce7165Smrg  fi
17464ce7165Smrg  stat=$?
17564ce7165Smrg  if test $stat -eq 0; then :
17664ce7165Smrg  else
17764ce7165Smrg    rm -f "$tmpdepfile"
17864ce7165Smrg    exit $stat
17964ce7165Smrg  fi
18064ce7165Smrg  rm -f "$depfile"
18164ce7165Smrg
18264ce7165Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
18364ce7165Smrg    echo "$object : \\" > "$depfile"
18464ce7165Smrg
18564ce7165Smrg    # Clip off the initial element (the dependent).  Don't try to be
18664ce7165Smrg    # clever and replace this with sed code, as IRIX sed won't handle
18764ce7165Smrg    # lines with more than a fixed number of characters (4096 in
18864ce7165Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
18964ce7165Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19064ce7165Smrg    # dependency line.
19164ce7165Smrg    tr ' ' '
19264ce7165Smrg' < "$tmpdepfile" \
19364ce7165Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
19464ce7165Smrg    tr '
19564ce7165Smrg' ' ' >> $depfile
19664ce7165Smrg    echo >> $depfile
19764ce7165Smrg
19864ce7165Smrg    # The second pass generates a dummy entry for each header file.
19964ce7165Smrg    tr ' ' '
20064ce7165Smrg' < "$tmpdepfile" \
20164ce7165Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20264ce7165Smrg   >> $depfile
20364ce7165Smrg  else
20464ce7165Smrg    # The sourcefile does not contain any dependencies, so just
20564ce7165Smrg    # store a dummy comment line, to avoid errors with the Makefile
20664ce7165Smrg    # "include basename.Plo" scheme.
20764ce7165Smrg    echo "#dummy" > "$depfile"
20864ce7165Smrg  fi
20964ce7165Smrg  rm -f "$tmpdepfile"
21064ce7165Smrg  ;;
21164ce7165Smrg
21264ce7165Smrgaix)
21364ce7165Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
21464ce7165Smrg  # in a .u file.  In older versions, this file always lives in the
21564ce7165Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
21664ce7165Smrg  # start of each line; $object doesn't have directory information.
21764ce7165Smrg  # Version 6 uses the directory in both cases.
21864ce7165Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
21964ce7165Smrg  tmpdepfile="$stripped.u"
22064ce7165Smrg  if test "$libtool" = yes; then
22164ce7165Smrg    "$@" -Wc,-M
22264ce7165Smrg  else
22364ce7165Smrg    "$@" -M
22464ce7165Smrg  fi
22564ce7165Smrg  stat=$?
22664ce7165Smrg
22764ce7165Smrg  if test -f "$tmpdepfile"; then :
22864ce7165Smrg  else
22964ce7165Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
23064ce7165Smrg    tmpdepfile="$stripped.u"
23164ce7165Smrg  fi
23264ce7165Smrg
23364ce7165Smrg  if test $stat -eq 0; then :
23464ce7165Smrg  else
23564ce7165Smrg    rm -f "$tmpdepfile"
23664ce7165Smrg    exit $stat
23764ce7165Smrg  fi
23864ce7165Smrg
23964ce7165Smrg  if test -f "$tmpdepfile"; then
24064ce7165Smrg    outname="$stripped.o"
24164ce7165Smrg    # Each line is of the form `foo.o: dependent.h'.
24264ce7165Smrg    # Do two passes, one to just change these to
24364ce7165Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
24464ce7165Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
24564ce7165Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
24664ce7165Smrg  else
24764ce7165Smrg    # The sourcefile does not contain any dependencies, so just
24864ce7165Smrg    # store a dummy comment line, to avoid errors with the Makefile
24964ce7165Smrg    # "include basename.Plo" scheme.
25064ce7165Smrg    echo "#dummy" > "$depfile"
25164ce7165Smrg  fi
25264ce7165Smrg  rm -f "$tmpdepfile"
25364ce7165Smrg  ;;
25464ce7165Smrg
25564ce7165Smrgicc)
25664ce7165Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
25764ce7165Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
25864ce7165Smrg  # ICC 7.0 will fill foo.d with something like
25964ce7165Smrg  #    foo.o: sub/foo.c
26064ce7165Smrg  #    foo.o: sub/foo.h
26164ce7165Smrg  # which is wrong.  We want:
26264ce7165Smrg  #    sub/foo.o: sub/foo.c
26364ce7165Smrg  #    sub/foo.o: sub/foo.h
26464ce7165Smrg  #    sub/foo.c:
26564ce7165Smrg  #    sub/foo.h:
26664ce7165Smrg  # ICC 7.1 will output
26764ce7165Smrg  #    foo.o: sub/foo.c sub/foo.h
26864ce7165Smrg  # and will wrap long lines using \ :
26964ce7165Smrg  #    foo.o: sub/foo.c ... \
27064ce7165Smrg  #     sub/foo.h ... \
27164ce7165Smrg  #     ...
27264ce7165Smrg
27364ce7165Smrg  "$@" -MD -MF "$tmpdepfile"
27464ce7165Smrg  stat=$?
27564ce7165Smrg  if test $stat -eq 0; then :
27664ce7165Smrg  else
27764ce7165Smrg    rm -f "$tmpdepfile"
27864ce7165Smrg    exit $stat
27964ce7165Smrg  fi
28064ce7165Smrg  rm -f "$depfile"
28164ce7165Smrg  # Each line is of the form `foo.o: dependent.h',
28264ce7165Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
28364ce7165Smrg  # Do two passes, one to just change these to
28464ce7165Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
28564ce7165Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
28664ce7165Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
28764ce7165Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
28864ce7165Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
28964ce7165Smrg    sed -e 's/$/ :/' >> "$depfile"
29064ce7165Smrg  rm -f "$tmpdepfile"
29164ce7165Smrg  ;;
29264ce7165Smrg
29364ce7165Smrghp2)
29464ce7165Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
29564ce7165Smrg  # compilers, which have integrated preprocessors.  The correct option
29664ce7165Smrg  # to use with these is +Maked; it writes dependencies to a file named
29764ce7165Smrg  # 'foo.d', which lands next to the object file, wherever that
29864ce7165Smrg  # happens to be.
29964ce7165Smrg  # Much of this is similar to the tru64 case; see comments there.
30064ce7165Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
30164ce7165Smrg  test "x$dir" = "x$object" && dir=
30264ce7165Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
30364ce7165Smrg  if test "$libtool" = yes; then
30464ce7165Smrg    tmpdepfile1=$dir$base.d
30564ce7165Smrg    tmpdepfile2=$dir.libs/$base.d
30664ce7165Smrg    "$@" -Wc,+Maked
30764ce7165Smrg  else
30864ce7165Smrg    tmpdepfile1=$dir$base.d
30964ce7165Smrg    tmpdepfile2=$dir$base.d
31064ce7165Smrg    "$@" +Maked
31164ce7165Smrg  fi
31264ce7165Smrg  stat=$?
31364ce7165Smrg  if test $stat -eq 0; then :
31464ce7165Smrg  else
31564ce7165Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
31664ce7165Smrg     exit $stat
31764ce7165Smrg  fi
31864ce7165Smrg
31964ce7165Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
32064ce7165Smrg  do
32164ce7165Smrg    test -f "$tmpdepfile" && break
32264ce7165Smrg  done
32364ce7165Smrg  if test -f "$tmpdepfile"; then
32464ce7165Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
32564ce7165Smrg    # Add `dependent.h:' lines.
32664ce7165Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
32764ce7165Smrg  else
32864ce7165Smrg    echo "#dummy" > "$depfile"
32964ce7165Smrg  fi
33064ce7165Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
33164ce7165Smrg  ;;
33264ce7165Smrg
33364ce7165Smrgtru64)
33464ce7165Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
33564ce7165Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
33664ce7165Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
33764ce7165Smrg   # dependencies in `foo.d' instead, so we check for that too.
33864ce7165Smrg   # Subdirectories are respected.
33964ce7165Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
34064ce7165Smrg   test "x$dir" = "x$object" && dir=
34164ce7165Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
34264ce7165Smrg
34364ce7165Smrg   if test "$libtool" = yes; then
34464ce7165Smrg      # With Tru64 cc, shared objects can also be used to make a
34564ce7165Smrg      # static library.  This mechanism is used in libtool 1.4 series to
34664ce7165Smrg      # handle both shared and static libraries in a single compilation.
34764ce7165Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
34864ce7165Smrg      #
34964ce7165Smrg      # With libtool 1.5 this exception was removed, and libtool now
35064ce7165Smrg      # generates 2 separate objects for the 2 libraries.  These two
35164ce7165Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
35264ce7165Smrg      # in $dir$base.o.d.  We have to check for both files, because
35364ce7165Smrg      # one of the two compilations can be disabled.  We should prefer
35464ce7165Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
35564ce7165Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
35664ce7165Smrg      # the former would cause a distcleancheck panic.
35764ce7165Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
35864ce7165Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
35964ce7165Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
36064ce7165Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
36164ce7165Smrg      "$@" -Wc,-MD
36264ce7165Smrg   else
36364ce7165Smrg      tmpdepfile1=$dir$base.o.d
36464ce7165Smrg      tmpdepfile2=$dir$base.d
36564ce7165Smrg      tmpdepfile3=$dir$base.d
36664ce7165Smrg      tmpdepfile4=$dir$base.d
36764ce7165Smrg      "$@" -MD
36864ce7165Smrg   fi
36964ce7165Smrg
37064ce7165Smrg   stat=$?
37164ce7165Smrg   if test $stat -eq 0; then :
37264ce7165Smrg   else
37364ce7165Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
37464ce7165Smrg      exit $stat
37564ce7165Smrg   fi
37664ce7165Smrg
37764ce7165Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
37864ce7165Smrg   do
37964ce7165Smrg     test -f "$tmpdepfile" && break
38064ce7165Smrg   done
38164ce7165Smrg   if test -f "$tmpdepfile"; then
38264ce7165Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
38364ce7165Smrg      # That's a tab and a space in the [].
38464ce7165Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
38564ce7165Smrg   else
38664ce7165Smrg      echo "#dummy" > "$depfile"
38764ce7165Smrg   fi
38864ce7165Smrg   rm -f "$tmpdepfile"
38964ce7165Smrg   ;;
39064ce7165Smrg
39164ce7165Smrg#nosideeffect)
39264ce7165Smrg  # This comment above is used by automake to tell side-effect
39364ce7165Smrg  # dependency tracking mechanisms from slower ones.
39464ce7165Smrg
39564ce7165Smrgdashmstdout)
39664ce7165Smrg  # Important note: in order to support this mode, a compiler *must*
39764ce7165Smrg  # always write the preprocessed file to stdout, regardless of -o.
39864ce7165Smrg  "$@" || exit $?
39964ce7165Smrg
40064ce7165Smrg  # Remove the call to Libtool.
40164ce7165Smrg  if test "$libtool" = yes; then
40264ce7165Smrg    while test $1 != '--mode=compile'; do
40364ce7165Smrg      shift
40464ce7165Smrg    done
40564ce7165Smrg    shift
40664ce7165Smrg  fi
40764ce7165Smrg
40864ce7165Smrg  # Remove `-o $object'.
40964ce7165Smrg  IFS=" "
41064ce7165Smrg  for arg
41164ce7165Smrg  do
41264ce7165Smrg    case $arg in
41364ce7165Smrg    -o)
41464ce7165Smrg      shift
41564ce7165Smrg      ;;
41664ce7165Smrg    $object)
41764ce7165Smrg      shift
41864ce7165Smrg      ;;
41964ce7165Smrg    *)
42064ce7165Smrg      set fnord "$@" "$arg"
42164ce7165Smrg      shift # fnord
42264ce7165Smrg      shift # $arg
42364ce7165Smrg      ;;
42464ce7165Smrg    esac
42564ce7165Smrg  done
42664ce7165Smrg
42764ce7165Smrg  test -z "$dashmflag" && dashmflag=-M
42864ce7165Smrg  # Require at least two characters before searching for `:'
42964ce7165Smrg  # in the target name.  This is to cope with DOS-style filenames:
43064ce7165Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
43164ce7165Smrg  "$@" $dashmflag |
43264ce7165Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
43364ce7165Smrg  rm -f "$depfile"
43464ce7165Smrg  cat < "$tmpdepfile" > "$depfile"
43564ce7165Smrg  tr ' ' '
43664ce7165Smrg' < "$tmpdepfile" | \
43764ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
43864ce7165Smrg## correctly.  Breaking it into two sed invocations is a workaround.
43964ce7165Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
44064ce7165Smrg  rm -f "$tmpdepfile"
44164ce7165Smrg  ;;
44264ce7165Smrg
44364ce7165SmrgdashXmstdout)
44464ce7165Smrg  # This case only exists to satisfy depend.m4.  It is never actually
44564ce7165Smrg  # run, as this mode is specially recognized in the preamble.
44664ce7165Smrg  exit 1
44764ce7165Smrg  ;;
44864ce7165Smrg
44964ce7165Smrgmakedepend)
45064ce7165Smrg  "$@" || exit $?
45164ce7165Smrg  # Remove any Libtool call
45264ce7165Smrg  if test "$libtool" = yes; then
45364ce7165Smrg    while test $1 != '--mode=compile'; do
45464ce7165Smrg      shift
45564ce7165Smrg    done
45664ce7165Smrg    shift
45764ce7165Smrg  fi
45864ce7165Smrg  # X makedepend
45964ce7165Smrg  shift
46064ce7165Smrg  cleared=no
46164ce7165Smrg  for arg in "$@"; do
46264ce7165Smrg    case $cleared in
46364ce7165Smrg    no)
46464ce7165Smrg      set ""; shift
46564ce7165Smrg      cleared=yes ;;
46664ce7165Smrg    esac
46764ce7165Smrg    case "$arg" in
46864ce7165Smrg    -D*|-I*)
46964ce7165Smrg      set fnord "$@" "$arg"; shift ;;
47064ce7165Smrg    # Strip any option that makedepend may not understand.  Remove
47164ce7165Smrg    # the object too, otherwise makedepend will parse it as a source file.
47264ce7165Smrg    -*|$object)
47364ce7165Smrg      ;;
47464ce7165Smrg    *)
47564ce7165Smrg      set fnord "$@" "$arg"; shift ;;
47664ce7165Smrg    esac
47764ce7165Smrg  done
47864ce7165Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
47964ce7165Smrg  touch "$tmpdepfile"
48064ce7165Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
48164ce7165Smrg  rm -f "$depfile"
48264ce7165Smrg  cat < "$tmpdepfile" > "$depfile"
48364ce7165Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
48464ce7165Smrg' | \
48564ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
48664ce7165Smrg## correctly.  Breaking it into two sed invocations is a workaround.
48764ce7165Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
48864ce7165Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
48964ce7165Smrg  ;;
49064ce7165Smrg
49164ce7165Smrgcpp)
49264ce7165Smrg  # Important note: in order to support this mode, a compiler *must*
49364ce7165Smrg  # always write the preprocessed file to stdout.
49464ce7165Smrg  "$@" || exit $?
49564ce7165Smrg
49664ce7165Smrg  # Remove the call to Libtool.
49764ce7165Smrg  if test "$libtool" = yes; then
49864ce7165Smrg    while test $1 != '--mode=compile'; do
49964ce7165Smrg      shift
50064ce7165Smrg    done
50164ce7165Smrg    shift
50264ce7165Smrg  fi
50364ce7165Smrg
50464ce7165Smrg  # Remove `-o $object'.
50564ce7165Smrg  IFS=" "
50664ce7165Smrg  for arg
50764ce7165Smrg  do
50864ce7165Smrg    case $arg in
50964ce7165Smrg    -o)
51064ce7165Smrg      shift
51164ce7165Smrg      ;;
51264ce7165Smrg    $object)
51364ce7165Smrg      shift
51464ce7165Smrg      ;;
51564ce7165Smrg    *)
51664ce7165Smrg      set fnord "$@" "$arg"
51764ce7165Smrg      shift # fnord
51864ce7165Smrg      shift # $arg
51964ce7165Smrg      ;;
52064ce7165Smrg    esac
52164ce7165Smrg  done
52264ce7165Smrg
52364ce7165Smrg  "$@" -E |
52464ce7165Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
52564ce7165Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
52664ce7165Smrg    sed '$ s: \\$::' > "$tmpdepfile"
52764ce7165Smrg  rm -f "$depfile"
52864ce7165Smrg  echo "$object : \\" > "$depfile"
52964ce7165Smrg  cat < "$tmpdepfile" >> "$depfile"
53064ce7165Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
53164ce7165Smrg  rm -f "$tmpdepfile"
53264ce7165Smrg  ;;
53364ce7165Smrg
53464ce7165Smrgmsvisualcpp)
53564ce7165Smrg  # Important note: in order to support this mode, a compiler *must*
53664ce7165Smrg  # always write the preprocessed file to stdout, regardless of -o,
53764ce7165Smrg  # because we must use -o when running libtool.
53864ce7165Smrg  "$@" || exit $?
53964ce7165Smrg  IFS=" "
54064ce7165Smrg  for arg
54164ce7165Smrg  do
54264ce7165Smrg    case "$arg" in
54364ce7165Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
54464ce7165Smrg	set fnord "$@"
54564ce7165Smrg	shift
54664ce7165Smrg	shift
54764ce7165Smrg	;;
54864ce7165Smrg    *)
54964ce7165Smrg	set fnord "$@" "$arg"
55064ce7165Smrg	shift
55164ce7165Smrg	shift
55264ce7165Smrg	;;
55364ce7165Smrg    esac
55464ce7165Smrg  done
55564ce7165Smrg  "$@" -E |
55664ce7165Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
55764ce7165Smrg  rm -f "$depfile"
55864ce7165Smrg  echo "$object : \\" > "$depfile"
55964ce7165Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
56064ce7165Smrg  echo "	" >> "$depfile"
56164ce7165Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
56264ce7165Smrg  rm -f "$tmpdepfile"
56364ce7165Smrg  ;;
56464ce7165Smrg
56564ce7165Smrgnone)
56664ce7165Smrg  exec "$@"
56764ce7165Smrg  ;;
56864ce7165Smrg
56964ce7165Smrg*)
57064ce7165Smrg  echo "Unknown depmode $depmode" 1>&2
57164ce7165Smrg  exit 1
57264ce7165Smrg  ;;
57364ce7165Smrgesac
57464ce7165Smrg
57564ce7165Smrgexit 0
57664ce7165Smrg
57764ce7165Smrg# Local Variables:
57864ce7165Smrg# mode: shell-script
57964ce7165Smrg# sh-indentation: 2
58064ce7165Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
58164ce7165Smrg# time-stamp-start: "scriptversion="
58264ce7165Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
58364ce7165Smrg# time-stamp-end: "$"
58464ce7165Smrg# End:
585