depcomp revision 1b1389ee
1bccedf53Smrg#! /bin/sh
2bccedf53Smrg# depcomp - compile a program generating dependencies as side-effects
37c5f6000Smrg
41b1389eeSmrgscriptversion=2011-12-04.11; # UTC
57c5f6000Smrg
61b1389eeSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
71b1389eeSmrg# 2011 Free Software Foundation, Inc.
8bccedf53Smrg
9bccedf53Smrg# This program is free software; you can redistribute it and/or modify
10bccedf53Smrg# it under the terms of the GNU General Public License as published by
11bccedf53Smrg# the Free Software Foundation; either version 2, or (at your option)
12bccedf53Smrg# any later version.
13bccedf53Smrg
14bccedf53Smrg# This program is distributed in the hope that it will be useful,
15bccedf53Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16bccedf53Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17bccedf53Smrg# GNU General Public License for more details.
18bccedf53Smrg
19bccedf53Smrg# You should have received a copy of the GNU General Public License
207c5f6000Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21bccedf53Smrg
22bccedf53Smrg# As a special exception to the GNU General Public License, if you
23bccedf53Smrg# distribute this file as part of a program that contains a
24bccedf53Smrg# configuration script generated by Autoconf, you may include it under
25bccedf53Smrg# the same distribution terms that you use for the rest of that program.
26bccedf53Smrg
27bccedf53Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28bccedf53Smrg
297c5f6000Smrgcase $1 in
307c5f6000Smrg  '')
317c5f6000Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
327c5f6000Smrg     exit 1;
337c5f6000Smrg     ;;
347c5f6000Smrg  -h | --h*)
357c5f6000Smrg    cat <<\EOF
367c5f6000SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
377c5f6000Smrg
387c5f6000SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
397c5f6000Smrgas side-effects.
407c5f6000Smrg
417c5f6000SmrgEnvironment variables:
427c5f6000Smrg  depmode     Dependency tracking mode.
437c5f6000Smrg  source      Source file read by `PROGRAMS ARGS'.
447c5f6000Smrg  object      Object file output by `PROGRAMS ARGS'.
457c5f6000Smrg  DEPDIR      directory where to store dependencies.
467c5f6000Smrg  depfile     Dependency file to output.
471b1389eeSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
487c5f6000Smrg  libtool     Whether libtool is used (yes/no).
497c5f6000Smrg
507c5f6000SmrgReport bugs to <bug-automake@gnu.org>.
517c5f6000SmrgEOF
527c5f6000Smrg    exit $?
537c5f6000Smrg    ;;
547c5f6000Smrg  -v | --v*)
557c5f6000Smrg    echo "depcomp $scriptversion"
567c5f6000Smrg    exit $?
577c5f6000Smrg    ;;
587c5f6000Smrgesac
597c5f6000Smrg
60bccedf53Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61bccedf53Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62bccedf53Smrg  exit 1
63bccedf53Smrgfi
64bccedf53Smrg
657c5f6000Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
667c5f6000Smrgdepfile=${depfile-`echo "$object" |
677c5f6000Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68bccedf53Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69bccedf53Smrg
70bccedf53Smrgrm -f "$tmpdepfile"
71bccedf53Smrg
72bccedf53Smrg# Some modes work just like other modes, but use different flags.  We
73bccedf53Smrg# parameterize here, but still list the modes in the big case below,
74bccedf53Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75bccedf53Smrg# here, because this file can only contain one case statement.
76bccedf53Smrgif test "$depmode" = hp; then
77bccedf53Smrg  # HP compiler uses -M and no extra arg.
78bccedf53Smrg  gccflag=-M
79bccedf53Smrg  depmode=gcc
80bccedf53Smrgfi
81bccedf53Smrg
82bccedf53Smrgif test "$depmode" = dashXmstdout; then
83bccedf53Smrg   # This is just like dashmstdout with a different argument.
84bccedf53Smrg   dashmflag=-xM
85bccedf53Smrg   depmode=dashmstdout
86bccedf53Smrgfi
87bccedf53Smrg
887c5f6000Smrgcygpath_u="cygpath -u -f -"
897c5f6000Smrgif test "$depmode" = msvcmsys; then
907c5f6000Smrg   # This is just like msvisualcpp but w/o cygpath translation.
917c5f6000Smrg   # Just convert the backslash-escaped backslashes to single forward
927c5f6000Smrg   # slashes to satisfy depend.m4
931b1389eeSmrg   cygpath_u='sed s,\\\\,/,g'
947c5f6000Smrg   depmode=msvisualcpp
957c5f6000Smrgfi
967c5f6000Smrg
971b1389eeSmrgif test "$depmode" = msvc7msys; then
981b1389eeSmrg   # This is just like msvc7 but w/o cygpath translation.
991b1389eeSmrg   # Just convert the backslash-escaped backslashes to single forward
1001b1389eeSmrg   # slashes to satisfy depend.m4
1011b1389eeSmrg   cygpath_u='sed s,\\\\,/,g'
1021b1389eeSmrg   depmode=msvc7
1031b1389eeSmrgfi
1041b1389eeSmrg
105bccedf53Smrgcase "$depmode" in
106bccedf53Smrggcc3)
107bccedf53Smrg## gcc 3 implements dependency tracking that does exactly what
108bccedf53Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
109bccedf53Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1107c5f6000Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1117c5f6000Smrg## the command line argument order; so add the flags where they
1127c5f6000Smrg## appear in depend2.am.  Note that the slowdown incurred here
1137c5f6000Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1147c5f6000Smrg  for arg
1157c5f6000Smrg  do
1167c5f6000Smrg    case $arg in
1177c5f6000Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1187c5f6000Smrg    *)  set fnord "$@" "$arg" ;;
1197c5f6000Smrg    esac
1207c5f6000Smrg    shift # fnord
1217c5f6000Smrg    shift # $arg
1227c5f6000Smrg  done
1237c5f6000Smrg  "$@"
124bccedf53Smrg  stat=$?
125bccedf53Smrg  if test $stat -eq 0; then :
126bccedf53Smrg  else
127bccedf53Smrg    rm -f "$tmpdepfile"
128bccedf53Smrg    exit $stat
129bccedf53Smrg  fi
130bccedf53Smrg  mv "$tmpdepfile" "$depfile"
131bccedf53Smrg  ;;
132bccedf53Smrg
133bccedf53Smrggcc)
134bccedf53Smrg## There are various ways to get dependency output from gcc.  Here's
135bccedf53Smrg## why we pick this rather obscure method:
136bccedf53Smrg## - Don't want to use -MD because we'd like the dependencies to end
137bccedf53Smrg##   up in a subdir.  Having to rename by hand is ugly.
138bccedf53Smrg##   (We might end up doing this anyway to support other compilers.)
139bccedf53Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140bccedf53Smrg##   -MM, not -M (despite what the docs say).
141bccedf53Smrg## - Using -M directly means running the compiler twice (even worse
142bccedf53Smrg##   than renaming).
143bccedf53Smrg  if test -z "$gccflag"; then
144bccedf53Smrg    gccflag=-MD,
145bccedf53Smrg  fi
146bccedf53Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
147bccedf53Smrg  stat=$?
148bccedf53Smrg  if test $stat -eq 0; then :
149bccedf53Smrg  else
150bccedf53Smrg    rm -f "$tmpdepfile"
151bccedf53Smrg    exit $stat
152bccedf53Smrg  fi
153bccedf53Smrg  rm -f "$depfile"
154bccedf53Smrg  echo "$object : \\" > "$depfile"
155bccedf53Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156bccedf53Smrg## The second -e expression handles DOS-style file names with drive letters.
157bccedf53Smrg  sed -e 's/^[^:]*: / /' \
158bccedf53Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159bccedf53Smrg## This next piece of magic avoids the `deleted header file' problem.
160bccedf53Smrg## The problem is that when a header file which appears in a .P file
161bccedf53Smrg## is deleted, the dependency causes make to die (because there is
162bccedf53Smrg## typically no way to rebuild the header).  We avoid this by adding
163bccedf53Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
164bccedf53Smrg## this for us directly.
165bccedf53Smrg  tr ' ' '
166bccedf53Smrg' < "$tmpdepfile" |
167bccedf53Smrg## Some versions of gcc put a space before the `:'.  On the theory
168bccedf53Smrg## that the space means something, we add a space to the output as
1691b1389eeSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1701b1389eeSmrg## to the object.  Take care to not repeat it in the output.
171bccedf53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
172bccedf53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1731b1389eeSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1741b1389eeSmrg      | sed -e 's/$/ :/' >> "$depfile"
175bccedf53Smrg  rm -f "$tmpdepfile"
176bccedf53Smrg  ;;
177bccedf53Smrg
178bccedf53Smrghp)
179bccedf53Smrg  # This case exists only to let depend.m4 do its work.  It works by
180bccedf53Smrg  # looking at the text of this script.  This case will never be run,
181bccedf53Smrg  # since it is checked for above.
182bccedf53Smrg  exit 1
183bccedf53Smrg  ;;
184bccedf53Smrg
185bccedf53Smrgsgi)
186bccedf53Smrg  if test "$libtool" = yes; then
187bccedf53Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
188bccedf53Smrg  else
189bccedf53Smrg    "$@" -MDupdate "$tmpdepfile"
190bccedf53Smrg  fi
191bccedf53Smrg  stat=$?
192bccedf53Smrg  if test $stat -eq 0; then :
193bccedf53Smrg  else
194bccedf53Smrg    rm -f "$tmpdepfile"
195bccedf53Smrg    exit $stat
196bccedf53Smrg  fi
197bccedf53Smrg  rm -f "$depfile"
198bccedf53Smrg
199bccedf53Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
200bccedf53Smrg    echo "$object : \\" > "$depfile"
201bccedf53Smrg
202bccedf53Smrg    # Clip off the initial element (the dependent).  Don't try to be
203bccedf53Smrg    # clever and replace this with sed code, as IRIX sed won't handle
204bccedf53Smrg    # lines with more than a fixed number of characters (4096 in
205bccedf53Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206bccedf53Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
207bccedf53Smrg    # dependency line.
208bccedf53Smrg    tr ' ' '
209bccedf53Smrg' < "$tmpdepfile" \
210bccedf53Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211bccedf53Smrg    tr '
2127c5f6000Smrg' ' ' >> "$depfile"
2137c5f6000Smrg    echo >> "$depfile"
214bccedf53Smrg
215bccedf53Smrg    # The second pass generates a dummy entry for each header file.
216bccedf53Smrg    tr ' ' '
217bccedf53Smrg' < "$tmpdepfile" \
218bccedf53Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2197c5f6000Smrg   >> "$depfile"
220bccedf53Smrg  else
221bccedf53Smrg    # The sourcefile does not contain any dependencies, so just
222bccedf53Smrg    # store a dummy comment line, to avoid errors with the Makefile
223bccedf53Smrg    # "include basename.Plo" scheme.
224bccedf53Smrg    echo "#dummy" > "$depfile"
225bccedf53Smrg  fi
226bccedf53Smrg  rm -f "$tmpdepfile"
227bccedf53Smrg  ;;
228bccedf53Smrg
229bccedf53Smrgaix)
230bccedf53Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
231bccedf53Smrg  # in a .u file.  In older versions, this file always lives in the
232bccedf53Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
233bccedf53Smrg  # start of each line; $object doesn't have directory information.
234bccedf53Smrg  # Version 6 uses the directory in both cases.
2357c5f6000Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2367c5f6000Smrg  test "x$dir" = "x$object" && dir=
2377c5f6000Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
238bccedf53Smrg  if test "$libtool" = yes; then
2397c5f6000Smrg    tmpdepfile1=$dir$base.u
2407c5f6000Smrg    tmpdepfile2=$base.u
2417c5f6000Smrg    tmpdepfile3=$dir.libs/$base.u
242bccedf53Smrg    "$@" -Wc,-M
243bccedf53Smrg  else
2447c5f6000Smrg    tmpdepfile1=$dir$base.u
2457c5f6000Smrg    tmpdepfile2=$dir$base.u
2467c5f6000Smrg    tmpdepfile3=$dir$base.u
247bccedf53Smrg    "$@" -M
248bccedf53Smrg  fi
249bccedf53Smrg  stat=$?
250bccedf53Smrg
251bccedf53Smrg  if test $stat -eq 0; then :
252bccedf53Smrg  else
2537c5f6000Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
254bccedf53Smrg    exit $stat
255bccedf53Smrg  fi
256bccedf53Smrg
2577c5f6000Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2587c5f6000Smrg  do
2597c5f6000Smrg    test -f "$tmpdepfile" && break
2607c5f6000Smrg  done
261bccedf53Smrg  if test -f "$tmpdepfile"; then
262bccedf53Smrg    # Each line is of the form `foo.o: dependent.h'.
263bccedf53Smrg    # Do two passes, one to just change these to
264bccedf53Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2657c5f6000Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2667c5f6000Smrg    # That's a tab and a space in the [].
2677c5f6000Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268bccedf53Smrg  else
269bccedf53Smrg    # The sourcefile does not contain any dependencies, so just
270bccedf53Smrg    # store a dummy comment line, to avoid errors with the Makefile
271bccedf53Smrg    # "include basename.Plo" scheme.
272bccedf53Smrg    echo "#dummy" > "$depfile"
273bccedf53Smrg  fi
274bccedf53Smrg  rm -f "$tmpdepfile"
275bccedf53Smrg  ;;
276bccedf53Smrg
277bccedf53Smrgicc)
278bccedf53Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
279bccedf53Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280bccedf53Smrg  # ICC 7.0 will fill foo.d with something like
281bccedf53Smrg  #    foo.o: sub/foo.c
282bccedf53Smrg  #    foo.o: sub/foo.h
283bccedf53Smrg  # which is wrong.  We want:
284bccedf53Smrg  #    sub/foo.o: sub/foo.c
285bccedf53Smrg  #    sub/foo.o: sub/foo.h
286bccedf53Smrg  #    sub/foo.c:
287bccedf53Smrg  #    sub/foo.h:
288bccedf53Smrg  # ICC 7.1 will output
289bccedf53Smrg  #    foo.o: sub/foo.c sub/foo.h
290bccedf53Smrg  # and will wrap long lines using \ :
291bccedf53Smrg  #    foo.o: sub/foo.c ... \
292bccedf53Smrg  #     sub/foo.h ... \
293bccedf53Smrg  #     ...
294bccedf53Smrg
295bccedf53Smrg  "$@" -MD -MF "$tmpdepfile"
296bccedf53Smrg  stat=$?
297bccedf53Smrg  if test $stat -eq 0; then :
298bccedf53Smrg  else
299bccedf53Smrg    rm -f "$tmpdepfile"
300bccedf53Smrg    exit $stat
301bccedf53Smrg  fi
302bccedf53Smrg  rm -f "$depfile"
303bccedf53Smrg  # Each line is of the form `foo.o: dependent.h',
304bccedf53Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
305bccedf53Smrg  # Do two passes, one to just change these to
306bccedf53Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307bccedf53Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308bccedf53Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309bccedf53Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
310bccedf53Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311bccedf53Smrg    sed -e 's/$/ :/' >> "$depfile"
312bccedf53Smrg  rm -f "$tmpdepfile"
313bccedf53Smrg  ;;
314bccedf53Smrg
3157c5f6000Smrghp2)
3167c5f6000Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3177c5f6000Smrg  # compilers, which have integrated preprocessors.  The correct option
3187c5f6000Smrg  # to use with these is +Maked; it writes dependencies to a file named
3197c5f6000Smrg  # 'foo.d', which lands next to the object file, wherever that
3207c5f6000Smrg  # happens to be.
3217c5f6000Smrg  # Much of this is similar to the tru64 case; see comments there.
3227c5f6000Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3237c5f6000Smrg  test "x$dir" = "x$object" && dir=
3247c5f6000Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3257c5f6000Smrg  if test "$libtool" = yes; then
3267c5f6000Smrg    tmpdepfile1=$dir$base.d
3277c5f6000Smrg    tmpdepfile2=$dir.libs/$base.d
3287c5f6000Smrg    "$@" -Wc,+Maked
3297c5f6000Smrg  else
3307c5f6000Smrg    tmpdepfile1=$dir$base.d
3317c5f6000Smrg    tmpdepfile2=$dir$base.d
3327c5f6000Smrg    "$@" +Maked
3337c5f6000Smrg  fi
3347c5f6000Smrg  stat=$?
3357c5f6000Smrg  if test $stat -eq 0; then :
3367c5f6000Smrg  else
3377c5f6000Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3387c5f6000Smrg     exit $stat
3397c5f6000Smrg  fi
3407c5f6000Smrg
3417c5f6000Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3427c5f6000Smrg  do
3437c5f6000Smrg    test -f "$tmpdepfile" && break
3447c5f6000Smrg  done
3457c5f6000Smrg  if test -f "$tmpdepfile"; then
3467c5f6000Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3477c5f6000Smrg    # Add `dependent.h:' lines.
3487c5f6000Smrg    sed -ne '2,${
3497c5f6000Smrg	       s/^ *//
3507c5f6000Smrg	       s/ \\*$//
3517c5f6000Smrg	       s/$/:/
3527c5f6000Smrg	       p
3537c5f6000Smrg	     }' "$tmpdepfile" >> "$depfile"
3547c5f6000Smrg  else
3557c5f6000Smrg    echo "#dummy" > "$depfile"
3567c5f6000Smrg  fi
3577c5f6000Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3587c5f6000Smrg  ;;
3597c5f6000Smrg
360bccedf53Smrgtru64)
361bccedf53Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362bccedf53Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363bccedf53Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364bccedf53Smrg   # dependencies in `foo.d' instead, so we check for that too.
365bccedf53Smrg   # Subdirectories are respected.
366bccedf53Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367bccedf53Smrg   test "x$dir" = "x$object" && dir=
368bccedf53Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369bccedf53Smrg
370bccedf53Smrg   if test "$libtool" = yes; then
3717c5f6000Smrg      # With Tru64 cc, shared objects can also be used to make a
3727c5f6000Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3737c5f6000Smrg      # handle both shared and static libraries in a single compilation.
3747c5f6000Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3757c5f6000Smrg      #
3767c5f6000Smrg      # With libtool 1.5 this exception was removed, and libtool now
3777c5f6000Smrg      # generates 2 separate objects for the 2 libraries.  These two
3787c5f6000Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3797c5f6000Smrg      # in $dir$base.o.d.  We have to check for both files, because
3807c5f6000Smrg      # one of the two compilations can be disabled.  We should prefer
3817c5f6000Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3827c5f6000Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3837c5f6000Smrg      # the former would cause a distcleancheck panic.
3847c5f6000Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3857c5f6000Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3867c5f6000Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3877c5f6000Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388bccedf53Smrg      "$@" -Wc,-MD
389bccedf53Smrg   else
3907c5f6000Smrg      tmpdepfile1=$dir$base.o.d
3917c5f6000Smrg      tmpdepfile2=$dir$base.d
3927c5f6000Smrg      tmpdepfile3=$dir$base.d
3937c5f6000Smrg      tmpdepfile4=$dir$base.d
394bccedf53Smrg      "$@" -MD
395bccedf53Smrg   fi
396bccedf53Smrg
397bccedf53Smrg   stat=$?
398bccedf53Smrg   if test $stat -eq 0; then :
399bccedf53Smrg   else
4007c5f6000Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401bccedf53Smrg      exit $stat
402bccedf53Smrg   fi
403bccedf53Smrg
4047c5f6000Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4057c5f6000Smrg   do
4067c5f6000Smrg     test -f "$tmpdepfile" && break
4077c5f6000Smrg   done
408bccedf53Smrg   if test -f "$tmpdepfile"; then
409bccedf53Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410bccedf53Smrg      # That's a tab and a space in the [].
411bccedf53Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412bccedf53Smrg   else
413bccedf53Smrg      echo "#dummy" > "$depfile"
414bccedf53Smrg   fi
415bccedf53Smrg   rm -f "$tmpdepfile"
416bccedf53Smrg   ;;
417bccedf53Smrg
4181b1389eeSmrgmsvc7)
4191b1389eeSmrg  if test "$libtool" = yes; then
4201b1389eeSmrg    showIncludes=-Wc,-showIncludes
4211b1389eeSmrg  else
4221b1389eeSmrg    showIncludes=-showIncludes
4231b1389eeSmrg  fi
4241b1389eeSmrg  "$@" $showIncludes > "$tmpdepfile"
4251b1389eeSmrg  stat=$?
4261b1389eeSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
4271b1389eeSmrg  if test "$stat" = 0; then :
4281b1389eeSmrg  else
4291b1389eeSmrg    rm -f "$tmpdepfile"
4301b1389eeSmrg    exit $stat
4311b1389eeSmrg  fi
4321b1389eeSmrg  rm -f "$depfile"
4331b1389eeSmrg  echo "$object : \\" > "$depfile"
4341b1389eeSmrg  # The first sed program below extracts the file names and escapes
4351b1389eeSmrg  # backslashes for cygpath.  The second sed program outputs the file
4361b1389eeSmrg  # name when reading, but also accumulates all include files in the
4371b1389eeSmrg  # hold buffer in order to output them again at the end.  This only
4381b1389eeSmrg  # works with sed implementations that can handle large buffers.
4391b1389eeSmrg  sed < "$tmpdepfile" -n '
4401b1389eeSmrg/^Note: including file:  *\(.*\)/ {
4411b1389eeSmrg  s//\1/
4421b1389eeSmrg  s/\\/\\\\/g
4431b1389eeSmrg  p
4441b1389eeSmrg}' | $cygpath_u | sort -u | sed -n '
4451b1389eeSmrgs/ /\\ /g
4461b1389eeSmrgs/\(.*\)/	\1 \\/p
4471b1389eeSmrgs/.\(.*\) \\/\1:/
4481b1389eeSmrgH
4491b1389eeSmrg$ {
4501b1389eeSmrg  s/.*/	/
4511b1389eeSmrg  G
4521b1389eeSmrg  p
4531b1389eeSmrg}' >> "$depfile"
4541b1389eeSmrg  rm -f "$tmpdepfile"
4551b1389eeSmrg  ;;
4561b1389eeSmrg
4571b1389eeSmrgmsvc7msys)
4581b1389eeSmrg  # This case exists only to let depend.m4 do its work.  It works by
4591b1389eeSmrg  # looking at the text of this script.  This case will never be run,
4601b1389eeSmrg  # since it is checked for above.
4611b1389eeSmrg  exit 1
4621b1389eeSmrg  ;;
4631b1389eeSmrg
464bccedf53Smrg#nosideeffect)
465bccedf53Smrg  # This comment above is used by automake to tell side-effect
466bccedf53Smrg  # dependency tracking mechanisms from slower ones.
467bccedf53Smrg
468bccedf53Smrgdashmstdout)
469bccedf53Smrg  # Important note: in order to support this mode, a compiler *must*
470bccedf53Smrg  # always write the preprocessed file to stdout, regardless of -o.
471bccedf53Smrg  "$@" || exit $?
472bccedf53Smrg
473bccedf53Smrg  # Remove the call to Libtool.
474bccedf53Smrg  if test "$libtool" = yes; then
4757c5f6000Smrg    while test "X$1" != 'X--mode=compile'; do
476bccedf53Smrg      shift
477bccedf53Smrg    done
478bccedf53Smrg    shift
479bccedf53Smrg  fi
480bccedf53Smrg
481bccedf53Smrg  # Remove `-o $object'.
482bccedf53Smrg  IFS=" "
483bccedf53Smrg  for arg
484bccedf53Smrg  do
485bccedf53Smrg    case $arg in
486bccedf53Smrg    -o)
487bccedf53Smrg      shift
488bccedf53Smrg      ;;
489bccedf53Smrg    $object)
490bccedf53Smrg      shift
491bccedf53Smrg      ;;
492bccedf53Smrg    *)
493bccedf53Smrg      set fnord "$@" "$arg"
494bccedf53Smrg      shift # fnord
495bccedf53Smrg      shift # $arg
496bccedf53Smrg      ;;
497bccedf53Smrg    esac
498bccedf53Smrg  done
499bccedf53Smrg
500bccedf53Smrg  test -z "$dashmflag" && dashmflag=-M
501bccedf53Smrg  # Require at least two characters before searching for `:'
502bccedf53Smrg  # in the target name.  This is to cope with DOS-style filenames:
503bccedf53Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
504bccedf53Smrg  "$@" $dashmflag |
505bccedf53Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
506bccedf53Smrg  rm -f "$depfile"
507bccedf53Smrg  cat < "$tmpdepfile" > "$depfile"
508bccedf53Smrg  tr ' ' '
509bccedf53Smrg' < "$tmpdepfile" | \
510bccedf53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
511bccedf53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
512bccedf53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
513bccedf53Smrg  rm -f "$tmpdepfile"
514bccedf53Smrg  ;;
515bccedf53Smrg
516bccedf53SmrgdashXmstdout)
517bccedf53Smrg  # This case only exists to satisfy depend.m4.  It is never actually
518bccedf53Smrg  # run, as this mode is specially recognized in the preamble.
519bccedf53Smrg  exit 1
520bccedf53Smrg  ;;
521bccedf53Smrg
522bccedf53Smrgmakedepend)
523bccedf53Smrg  "$@" || exit $?
524bccedf53Smrg  # Remove any Libtool call
525bccedf53Smrg  if test "$libtool" = yes; then
5267c5f6000Smrg    while test "X$1" != 'X--mode=compile'; do
527bccedf53Smrg      shift
528bccedf53Smrg    done
529bccedf53Smrg    shift
530bccedf53Smrg  fi
531bccedf53Smrg  # X makedepend
532bccedf53Smrg  shift
5337c5f6000Smrg  cleared=no eat=no
5347c5f6000Smrg  for arg
5357c5f6000Smrg  do
536bccedf53Smrg    case $cleared in
537bccedf53Smrg    no)
538bccedf53Smrg      set ""; shift
539bccedf53Smrg      cleared=yes ;;
540bccedf53Smrg    esac
5417c5f6000Smrg    if test $eat = yes; then
5427c5f6000Smrg      eat=no
5437c5f6000Smrg      continue
5447c5f6000Smrg    fi
545bccedf53Smrg    case "$arg" in
546bccedf53Smrg    -D*|-I*)
547bccedf53Smrg      set fnord "$@" "$arg"; shift ;;
548bccedf53Smrg    # Strip any option that makedepend may not understand.  Remove
549bccedf53Smrg    # the object too, otherwise makedepend will parse it as a source file.
5507c5f6000Smrg    -arch)
5517c5f6000Smrg      eat=yes ;;
552bccedf53Smrg    -*|$object)
553bccedf53Smrg      ;;
554bccedf53Smrg    *)
555bccedf53Smrg      set fnord "$@" "$arg"; shift ;;
556bccedf53Smrg    esac
557bccedf53Smrg  done
5587c5f6000Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
559bccedf53Smrg  touch "$tmpdepfile"
560bccedf53Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
561bccedf53Smrg  rm -f "$depfile"
5621b1389eeSmrg  # makedepend may prepend the VPATH from the source file name to the object.
5631b1389eeSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5641b1389eeSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565bccedf53Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566bccedf53Smrg' | \
567bccedf53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
568bccedf53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
569bccedf53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
570bccedf53Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
571bccedf53Smrg  ;;
572bccedf53Smrg
573bccedf53Smrgcpp)
574bccedf53Smrg  # Important note: in order to support this mode, a compiler *must*
575bccedf53Smrg  # always write the preprocessed file to stdout.
576bccedf53Smrg  "$@" || exit $?
577bccedf53Smrg
578bccedf53Smrg  # Remove the call to Libtool.
579bccedf53Smrg  if test "$libtool" = yes; then
5807c5f6000Smrg    while test "X$1" != 'X--mode=compile'; do
581bccedf53Smrg      shift
582bccedf53Smrg    done
583bccedf53Smrg    shift
584bccedf53Smrg  fi
585bccedf53Smrg
586bccedf53Smrg  # Remove `-o $object'.
587bccedf53Smrg  IFS=" "
588bccedf53Smrg  for arg
589bccedf53Smrg  do
590bccedf53Smrg    case $arg in
591bccedf53Smrg    -o)
592bccedf53Smrg      shift
593bccedf53Smrg      ;;
594bccedf53Smrg    $object)
595bccedf53Smrg      shift
596bccedf53Smrg      ;;
597bccedf53Smrg    *)
598bccedf53Smrg      set fnord "$@" "$arg"
599bccedf53Smrg      shift # fnord
600bccedf53Smrg      shift # $arg
601bccedf53Smrg      ;;
602bccedf53Smrg    esac
603bccedf53Smrg  done
604bccedf53Smrg
605bccedf53Smrg  "$@" -E |
6067c5f6000Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6077c5f6000Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608bccedf53Smrg    sed '$ s: \\$::' > "$tmpdepfile"
609bccedf53Smrg  rm -f "$depfile"
610bccedf53Smrg  echo "$object : \\" > "$depfile"
611bccedf53Smrg  cat < "$tmpdepfile" >> "$depfile"
612bccedf53Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
613bccedf53Smrg  rm -f "$tmpdepfile"
614bccedf53Smrg  ;;
615bccedf53Smrg
616bccedf53Smrgmsvisualcpp)
617bccedf53Smrg  # Important note: in order to support this mode, a compiler *must*
6187c5f6000Smrg  # always write the preprocessed file to stdout.
619bccedf53Smrg  "$@" || exit $?
6207c5f6000Smrg
6217c5f6000Smrg  # Remove the call to Libtool.
6227c5f6000Smrg  if test "$libtool" = yes; then
6237c5f6000Smrg    while test "X$1" != 'X--mode=compile'; do
6247c5f6000Smrg      shift
6257c5f6000Smrg    done
6267c5f6000Smrg    shift
6277c5f6000Smrg  fi
6287c5f6000Smrg
629bccedf53Smrg  IFS=" "
630bccedf53Smrg  for arg
631bccedf53Smrg  do
632bccedf53Smrg    case "$arg" in
6337c5f6000Smrg    -o)
6347c5f6000Smrg      shift
6357c5f6000Smrg      ;;
6367c5f6000Smrg    $object)
6377c5f6000Smrg      shift
6387c5f6000Smrg      ;;
639bccedf53Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640bccedf53Smrg	set fnord "$@"
641bccedf53Smrg	shift
642bccedf53Smrg	shift
643bccedf53Smrg	;;
644bccedf53Smrg    *)
645bccedf53Smrg	set fnord "$@" "$arg"
646bccedf53Smrg	shift
647bccedf53Smrg	shift
648bccedf53Smrg	;;
649bccedf53Smrg    esac
650bccedf53Smrg  done
6517c5f6000Smrg  "$@" -E 2>/dev/null |
6527c5f6000Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
653bccedf53Smrg  rm -f "$depfile"
654bccedf53Smrg  echo "$object : \\" > "$depfile"
6557c5f6000Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656bccedf53Smrg  echo "	" >> "$depfile"
6577c5f6000Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
658bccedf53Smrg  rm -f "$tmpdepfile"
659bccedf53Smrg  ;;
660bccedf53Smrg
6617c5f6000Smrgmsvcmsys)
6627c5f6000Smrg  # This case exists only to let depend.m4 do its work.  It works by
6637c5f6000Smrg  # looking at the text of this script.  This case will never be run,
6647c5f6000Smrg  # since it is checked for above.
6657c5f6000Smrg  exit 1
6667c5f6000Smrg  ;;
6677c5f6000Smrg
668bccedf53Smrgnone)
669bccedf53Smrg  exec "$@"
670bccedf53Smrg  ;;
671bccedf53Smrg
672bccedf53Smrg*)
673bccedf53Smrg  echo "Unknown depmode $depmode" 1>&2
674bccedf53Smrg  exit 1
675bccedf53Smrg  ;;
676bccedf53Smrgesac
677bccedf53Smrg
678bccedf53Smrgexit 0
6797c5f6000Smrg
6807c5f6000Smrg# Local Variables:
6817c5f6000Smrg# mode: shell-script
6827c5f6000Smrg# sh-indentation: 2
6837c5f6000Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6847c5f6000Smrg# time-stamp-start: "scriptversion="
6857c5f6000Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6867c5f6000Smrg# time-stamp-time-zone: "UTC"
6877c5f6000Smrg# time-stamp-end: "; # UTC"
6887c5f6000Smrg# End:
689