depcomp revision 549e21da
1ba6a1819Smrg#! /bin/sh
2ba6a1819Smrg# depcomp - compile a program generating dependencies as side-effects
3ba6a1819Smrg
4549e21daSmrgscriptversion=2009-04-28.21; # UTC
5ba6a1819Smrg
6549e21daSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7549e21daSmrg# Software Foundation, Inc.
8ba6a1819Smrg
9ba6a1819Smrg# This program is free software; you can redistribute it and/or modify
10ba6a1819Smrg# it under the terms of the GNU General Public License as published by
11ba6a1819Smrg# the Free Software Foundation; either version 2, or (at your option)
12ba6a1819Smrg# any later version.
13ba6a1819Smrg
14ba6a1819Smrg# This program is distributed in the hope that it will be useful,
15ba6a1819Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16ba6a1819Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17ba6a1819Smrg# GNU General Public License for more details.
18ba6a1819Smrg
19ba6a1819Smrg# You should have received a copy of the GNU General Public License
20549e21daSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21ba6a1819Smrg
22ba6a1819Smrg# As a special exception to the GNU General Public License, if you
23ba6a1819Smrg# distribute this file as part of a program that contains a
24ba6a1819Smrg# configuration script generated by Autoconf, you may include it under
25ba6a1819Smrg# the same distribution terms that you use for the rest of that program.
26ba6a1819Smrg
27ba6a1819Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28ba6a1819Smrg
29ba6a1819Smrgcase $1 in
30ba6a1819Smrg  '')
31ba6a1819Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32ba6a1819Smrg     exit 1;
33ba6a1819Smrg     ;;
34ba6a1819Smrg  -h | --h*)
35ba6a1819Smrg    cat <<\EOF
36ba6a1819SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37ba6a1819Smrg
38ba6a1819SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39ba6a1819Smrgas side-effects.
40ba6a1819Smrg
41ba6a1819SmrgEnvironment variables:
42ba6a1819Smrg  depmode     Dependency tracking mode.
43ba6a1819Smrg  source      Source file read by `PROGRAMS ARGS'.
44ba6a1819Smrg  object      Object file output by `PROGRAMS ARGS'.
45ba6a1819Smrg  DEPDIR      directory where to store dependencies.
46ba6a1819Smrg  depfile     Dependency file to output.
47ba6a1819Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48ba6a1819Smrg  libtool     Whether libtool is used (yes/no).
49ba6a1819Smrg
50ba6a1819SmrgReport bugs to <bug-automake@gnu.org>.
51ba6a1819SmrgEOF
52ba6a1819Smrg    exit $?
53ba6a1819Smrg    ;;
54ba6a1819Smrg  -v | --v*)
55ba6a1819Smrg    echo "depcomp $scriptversion"
56ba6a1819Smrg    exit $?
57ba6a1819Smrg    ;;
58ba6a1819Smrgesac
59ba6a1819Smrg
60ba6a1819Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61ba6a1819Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62ba6a1819Smrg  exit 1
63ba6a1819Smrgfi
64ba6a1819Smrg
65ba6a1819Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66ba6a1819Smrgdepfile=${depfile-`echo "$object" |
67ba6a1819Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68ba6a1819Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69ba6a1819Smrg
70ba6a1819Smrgrm -f "$tmpdepfile"
71ba6a1819Smrg
72ba6a1819Smrg# Some modes work just like other modes, but use different flags.  We
73ba6a1819Smrg# parameterize here, but still list the modes in the big case below,
74ba6a1819Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75ba6a1819Smrg# here, because this file can only contain one case statement.
76ba6a1819Smrgif test "$depmode" = hp; then
77ba6a1819Smrg  # HP compiler uses -M and no extra arg.
78ba6a1819Smrg  gccflag=-M
79ba6a1819Smrg  depmode=gcc
80ba6a1819Smrgfi
81ba6a1819Smrg
82ba6a1819Smrgif test "$depmode" = dashXmstdout; then
83ba6a1819Smrg   # This is just like dashmstdout with a different argument.
84ba6a1819Smrg   dashmflag=-xM
85ba6a1819Smrg   depmode=dashmstdout
86ba6a1819Smrgfi
87ba6a1819Smrg
88549e21daSmrgcygpath_u="cygpath -u -f -"
89549e21daSmrgif test "$depmode" = msvcmsys; then
90549e21daSmrg   # This is just like msvisualcpp but w/o cygpath translation.
91549e21daSmrg   # Just convert the backslash-escaped backslashes to single forward
92549e21daSmrg   # slashes to satisfy depend.m4
93549e21daSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
94549e21daSmrg   depmode=msvisualcpp
95549e21daSmrgfi
96549e21daSmrg
97ba6a1819Smrgcase "$depmode" in
98ba6a1819Smrggcc3)
99ba6a1819Smrg## gcc 3 implements dependency tracking that does exactly what
100ba6a1819Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101ba6a1819Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102ba6a1819Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103ba6a1819Smrg## the command line argument order; so add the flags where they
104ba6a1819Smrg## appear in depend2.am.  Note that the slowdown incurred here
105ba6a1819Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106ba6a1819Smrg  for arg
107ba6a1819Smrg  do
108ba6a1819Smrg    case $arg in
109ba6a1819Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110ba6a1819Smrg    *)  set fnord "$@" "$arg" ;;
111ba6a1819Smrg    esac
112ba6a1819Smrg    shift # fnord
113ba6a1819Smrg    shift # $arg
114ba6a1819Smrg  done
115ba6a1819Smrg  "$@"
116ba6a1819Smrg  stat=$?
117ba6a1819Smrg  if test $stat -eq 0; then :
118ba6a1819Smrg  else
119ba6a1819Smrg    rm -f "$tmpdepfile"
120ba6a1819Smrg    exit $stat
121ba6a1819Smrg  fi
122ba6a1819Smrg  mv "$tmpdepfile" "$depfile"
123ba6a1819Smrg  ;;
124ba6a1819Smrg
125ba6a1819Smrggcc)
126ba6a1819Smrg## There are various ways to get dependency output from gcc.  Here's
127ba6a1819Smrg## why we pick this rather obscure method:
128ba6a1819Smrg## - Don't want to use -MD because we'd like the dependencies to end
129ba6a1819Smrg##   up in a subdir.  Having to rename by hand is ugly.
130ba6a1819Smrg##   (We might end up doing this anyway to support other compilers.)
131ba6a1819Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132ba6a1819Smrg##   -MM, not -M (despite what the docs say).
133ba6a1819Smrg## - Using -M directly means running the compiler twice (even worse
134ba6a1819Smrg##   than renaming).
135ba6a1819Smrg  if test -z "$gccflag"; then
136ba6a1819Smrg    gccflag=-MD,
137ba6a1819Smrg  fi
138ba6a1819Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139ba6a1819Smrg  stat=$?
140ba6a1819Smrg  if test $stat -eq 0; then :
141ba6a1819Smrg  else
142ba6a1819Smrg    rm -f "$tmpdepfile"
143ba6a1819Smrg    exit $stat
144ba6a1819Smrg  fi
145ba6a1819Smrg  rm -f "$depfile"
146ba6a1819Smrg  echo "$object : \\" > "$depfile"
147ba6a1819Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148ba6a1819Smrg## The second -e expression handles DOS-style file names with drive letters.
149ba6a1819Smrg  sed -e 's/^[^:]*: / /' \
150ba6a1819Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151ba6a1819Smrg## This next piece of magic avoids the `deleted header file' problem.
152ba6a1819Smrg## The problem is that when a header file which appears in a .P file
153ba6a1819Smrg## is deleted, the dependency causes make to die (because there is
154ba6a1819Smrg## typically no way to rebuild the header).  We avoid this by adding
155ba6a1819Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156ba6a1819Smrg## this for us directly.
157ba6a1819Smrg  tr ' ' '
158ba6a1819Smrg' < "$tmpdepfile" |
159ba6a1819Smrg## Some versions of gcc put a space before the `:'.  On the theory
160ba6a1819Smrg## that the space means something, we add a space to the output as
161ba6a1819Smrg## well.
162ba6a1819Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163ba6a1819Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164ba6a1819Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165ba6a1819Smrg  rm -f "$tmpdepfile"
166ba6a1819Smrg  ;;
167ba6a1819Smrg
168ba6a1819Smrghp)
169ba6a1819Smrg  # This case exists only to let depend.m4 do its work.  It works by
170ba6a1819Smrg  # looking at the text of this script.  This case will never be run,
171ba6a1819Smrg  # since it is checked for above.
172ba6a1819Smrg  exit 1
173ba6a1819Smrg  ;;
174ba6a1819Smrg
175ba6a1819Smrgsgi)
176ba6a1819Smrg  if test "$libtool" = yes; then
177ba6a1819Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178ba6a1819Smrg  else
179ba6a1819Smrg    "$@" -MDupdate "$tmpdepfile"
180ba6a1819Smrg  fi
181ba6a1819Smrg  stat=$?
182ba6a1819Smrg  if test $stat -eq 0; then :
183ba6a1819Smrg  else
184ba6a1819Smrg    rm -f "$tmpdepfile"
185ba6a1819Smrg    exit $stat
186ba6a1819Smrg  fi
187ba6a1819Smrg  rm -f "$depfile"
188ba6a1819Smrg
189ba6a1819Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190ba6a1819Smrg    echo "$object : \\" > "$depfile"
191ba6a1819Smrg
192ba6a1819Smrg    # Clip off the initial element (the dependent).  Don't try to be
193ba6a1819Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194ba6a1819Smrg    # lines with more than a fixed number of characters (4096 in
195ba6a1819Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196ba6a1819Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197ba6a1819Smrg    # dependency line.
198ba6a1819Smrg    tr ' ' '
199ba6a1819Smrg' < "$tmpdepfile" \
200ba6a1819Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201ba6a1819Smrg    tr '
202549e21daSmrg' ' ' >> "$depfile"
203549e21daSmrg    echo >> "$depfile"
204ba6a1819Smrg
205ba6a1819Smrg    # The second pass generates a dummy entry for each header file.
206ba6a1819Smrg    tr ' ' '
207ba6a1819Smrg' < "$tmpdepfile" \
208ba6a1819Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209549e21daSmrg   >> "$depfile"
210ba6a1819Smrg  else
211ba6a1819Smrg    # The sourcefile does not contain any dependencies, so just
212ba6a1819Smrg    # store a dummy comment line, to avoid errors with the Makefile
213ba6a1819Smrg    # "include basename.Plo" scheme.
214ba6a1819Smrg    echo "#dummy" > "$depfile"
215ba6a1819Smrg  fi
216ba6a1819Smrg  rm -f "$tmpdepfile"
217ba6a1819Smrg  ;;
218ba6a1819Smrg
219ba6a1819Smrgaix)
220ba6a1819Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221ba6a1819Smrg  # in a .u file.  In older versions, this file always lives in the
222ba6a1819Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223ba6a1819Smrg  # start of each line; $object doesn't have directory information.
224ba6a1819Smrg  # Version 6 uses the directory in both cases.
225549e21daSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226549e21daSmrg  test "x$dir" = "x$object" && dir=
227549e21daSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228ba6a1819Smrg  if test "$libtool" = yes; then
229549e21daSmrg    tmpdepfile1=$dir$base.u
230549e21daSmrg    tmpdepfile2=$base.u
231549e21daSmrg    tmpdepfile3=$dir.libs/$base.u
232ba6a1819Smrg    "$@" -Wc,-M
233ba6a1819Smrg  else
234549e21daSmrg    tmpdepfile1=$dir$base.u
235549e21daSmrg    tmpdepfile2=$dir$base.u
236549e21daSmrg    tmpdepfile3=$dir$base.u
237ba6a1819Smrg    "$@" -M
238ba6a1819Smrg  fi
239ba6a1819Smrg  stat=$?
240ba6a1819Smrg
241ba6a1819Smrg  if test $stat -eq 0; then :
242ba6a1819Smrg  else
243549e21daSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244ba6a1819Smrg    exit $stat
245ba6a1819Smrg  fi
246ba6a1819Smrg
247549e21daSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248549e21daSmrg  do
249549e21daSmrg    test -f "$tmpdepfile" && break
250549e21daSmrg  done
251ba6a1819Smrg  if test -f "$tmpdepfile"; then
252ba6a1819Smrg    # Each line is of the form `foo.o: dependent.h'.
253ba6a1819Smrg    # Do two passes, one to just change these to
254ba6a1819Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255549e21daSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256549e21daSmrg    # That's a tab and a space in the [].
257549e21daSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258ba6a1819Smrg  else
259ba6a1819Smrg    # The sourcefile does not contain any dependencies, so just
260ba6a1819Smrg    # store a dummy comment line, to avoid errors with the Makefile
261ba6a1819Smrg    # "include basename.Plo" scheme.
262ba6a1819Smrg    echo "#dummy" > "$depfile"
263ba6a1819Smrg  fi
264ba6a1819Smrg  rm -f "$tmpdepfile"
265ba6a1819Smrg  ;;
266ba6a1819Smrg
267ba6a1819Smrgicc)
268ba6a1819Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269ba6a1819Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270ba6a1819Smrg  # ICC 7.0 will fill foo.d with something like
271ba6a1819Smrg  #    foo.o: sub/foo.c
272ba6a1819Smrg  #    foo.o: sub/foo.h
273ba6a1819Smrg  # which is wrong.  We want:
274ba6a1819Smrg  #    sub/foo.o: sub/foo.c
275ba6a1819Smrg  #    sub/foo.o: sub/foo.h
276ba6a1819Smrg  #    sub/foo.c:
277ba6a1819Smrg  #    sub/foo.h:
278ba6a1819Smrg  # ICC 7.1 will output
279ba6a1819Smrg  #    foo.o: sub/foo.c sub/foo.h
280ba6a1819Smrg  # and will wrap long lines using \ :
281ba6a1819Smrg  #    foo.o: sub/foo.c ... \
282ba6a1819Smrg  #     sub/foo.h ... \
283ba6a1819Smrg  #     ...
284ba6a1819Smrg
285ba6a1819Smrg  "$@" -MD -MF "$tmpdepfile"
286ba6a1819Smrg  stat=$?
287ba6a1819Smrg  if test $stat -eq 0; then :
288ba6a1819Smrg  else
289ba6a1819Smrg    rm -f "$tmpdepfile"
290ba6a1819Smrg    exit $stat
291ba6a1819Smrg  fi
292ba6a1819Smrg  rm -f "$depfile"
293ba6a1819Smrg  # Each line is of the form `foo.o: dependent.h',
294ba6a1819Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295ba6a1819Smrg  # Do two passes, one to just change these to
296ba6a1819Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297ba6a1819Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298ba6a1819Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299ba6a1819Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300ba6a1819Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301ba6a1819Smrg    sed -e 's/$/ :/' >> "$depfile"
302ba6a1819Smrg  rm -f "$tmpdepfile"
303ba6a1819Smrg  ;;
304ba6a1819Smrg
305ba6a1819Smrghp2)
306ba6a1819Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307ba6a1819Smrg  # compilers, which have integrated preprocessors.  The correct option
308ba6a1819Smrg  # to use with these is +Maked; it writes dependencies to a file named
309ba6a1819Smrg  # 'foo.d', which lands next to the object file, wherever that
310ba6a1819Smrg  # happens to be.
311ba6a1819Smrg  # Much of this is similar to the tru64 case; see comments there.
312ba6a1819Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313ba6a1819Smrg  test "x$dir" = "x$object" && dir=
314ba6a1819Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315ba6a1819Smrg  if test "$libtool" = yes; then
316ba6a1819Smrg    tmpdepfile1=$dir$base.d
317ba6a1819Smrg    tmpdepfile2=$dir.libs/$base.d
318ba6a1819Smrg    "$@" -Wc,+Maked
319ba6a1819Smrg  else
320ba6a1819Smrg    tmpdepfile1=$dir$base.d
321ba6a1819Smrg    tmpdepfile2=$dir$base.d
322ba6a1819Smrg    "$@" +Maked
323ba6a1819Smrg  fi
324ba6a1819Smrg  stat=$?
325ba6a1819Smrg  if test $stat -eq 0; then :
326ba6a1819Smrg  else
327ba6a1819Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328ba6a1819Smrg     exit $stat
329ba6a1819Smrg  fi
330ba6a1819Smrg
331ba6a1819Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332ba6a1819Smrg  do
333ba6a1819Smrg    test -f "$tmpdepfile" && break
334ba6a1819Smrg  done
335ba6a1819Smrg  if test -f "$tmpdepfile"; then
336ba6a1819Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337ba6a1819Smrg    # Add `dependent.h:' lines.
338549e21daSmrg    sed -ne '2,${
339549e21daSmrg	       s/^ *//
340549e21daSmrg	       s/ \\*$//
341549e21daSmrg	       s/$/:/
342549e21daSmrg	       p
343549e21daSmrg	     }' "$tmpdepfile" >> "$depfile"
344ba6a1819Smrg  else
345ba6a1819Smrg    echo "#dummy" > "$depfile"
346ba6a1819Smrg  fi
347ba6a1819Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348ba6a1819Smrg  ;;
349ba6a1819Smrg
350ba6a1819Smrgtru64)
351ba6a1819Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352ba6a1819Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353ba6a1819Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354ba6a1819Smrg   # dependencies in `foo.d' instead, so we check for that too.
355ba6a1819Smrg   # Subdirectories are respected.
356ba6a1819Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357ba6a1819Smrg   test "x$dir" = "x$object" && dir=
358ba6a1819Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359ba6a1819Smrg
360ba6a1819Smrg   if test "$libtool" = yes; then
361ba6a1819Smrg      # With Tru64 cc, shared objects can also be used to make a
362ba6a1819Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363ba6a1819Smrg      # handle both shared and static libraries in a single compilation.
364ba6a1819Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365ba6a1819Smrg      #
366ba6a1819Smrg      # With libtool 1.5 this exception was removed, and libtool now
367ba6a1819Smrg      # generates 2 separate objects for the 2 libraries.  These two
368ba6a1819Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369ba6a1819Smrg      # in $dir$base.o.d.  We have to check for both files, because
370ba6a1819Smrg      # one of the two compilations can be disabled.  We should prefer
371ba6a1819Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372ba6a1819Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373ba6a1819Smrg      # the former would cause a distcleancheck panic.
374ba6a1819Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375ba6a1819Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376ba6a1819Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377ba6a1819Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378ba6a1819Smrg      "$@" -Wc,-MD
379ba6a1819Smrg   else
380ba6a1819Smrg      tmpdepfile1=$dir$base.o.d
381ba6a1819Smrg      tmpdepfile2=$dir$base.d
382ba6a1819Smrg      tmpdepfile3=$dir$base.d
383ba6a1819Smrg      tmpdepfile4=$dir$base.d
384ba6a1819Smrg      "$@" -MD
385ba6a1819Smrg   fi
386ba6a1819Smrg
387ba6a1819Smrg   stat=$?
388ba6a1819Smrg   if test $stat -eq 0; then :
389ba6a1819Smrg   else
390ba6a1819Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391ba6a1819Smrg      exit $stat
392ba6a1819Smrg   fi
393ba6a1819Smrg
394ba6a1819Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395ba6a1819Smrg   do
396ba6a1819Smrg     test -f "$tmpdepfile" && break
397ba6a1819Smrg   done
398ba6a1819Smrg   if test -f "$tmpdepfile"; then
399ba6a1819Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400ba6a1819Smrg      # That's a tab and a space in the [].
401ba6a1819Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402ba6a1819Smrg   else
403ba6a1819Smrg      echo "#dummy" > "$depfile"
404ba6a1819Smrg   fi
405ba6a1819Smrg   rm -f "$tmpdepfile"
406ba6a1819Smrg   ;;
407ba6a1819Smrg
408ba6a1819Smrg#nosideeffect)
409ba6a1819Smrg  # This comment above is used by automake to tell side-effect
410ba6a1819Smrg  # dependency tracking mechanisms from slower ones.
411ba6a1819Smrg
412ba6a1819Smrgdashmstdout)
413ba6a1819Smrg  # Important note: in order to support this mode, a compiler *must*
414ba6a1819Smrg  # always write the preprocessed file to stdout, regardless of -o.
415ba6a1819Smrg  "$@" || exit $?
416ba6a1819Smrg
417ba6a1819Smrg  # Remove the call to Libtool.
418ba6a1819Smrg  if test "$libtool" = yes; then
419549e21daSmrg    while test "X$1" != 'X--mode=compile'; do
420ba6a1819Smrg      shift
421ba6a1819Smrg    done
422ba6a1819Smrg    shift
423ba6a1819Smrg  fi
424ba6a1819Smrg
425ba6a1819Smrg  # Remove `-o $object'.
426ba6a1819Smrg  IFS=" "
427ba6a1819Smrg  for arg
428ba6a1819Smrg  do
429ba6a1819Smrg    case $arg in
430ba6a1819Smrg    -o)
431ba6a1819Smrg      shift
432ba6a1819Smrg      ;;
433ba6a1819Smrg    $object)
434ba6a1819Smrg      shift
435ba6a1819Smrg      ;;
436ba6a1819Smrg    *)
437ba6a1819Smrg      set fnord "$@" "$arg"
438ba6a1819Smrg      shift # fnord
439ba6a1819Smrg      shift # $arg
440ba6a1819Smrg      ;;
441ba6a1819Smrg    esac
442ba6a1819Smrg  done
443ba6a1819Smrg
444ba6a1819Smrg  test -z "$dashmflag" && dashmflag=-M
445ba6a1819Smrg  # Require at least two characters before searching for `:'
446ba6a1819Smrg  # in the target name.  This is to cope with DOS-style filenames:
447ba6a1819Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448ba6a1819Smrg  "$@" $dashmflag |
449ba6a1819Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450ba6a1819Smrg  rm -f "$depfile"
451ba6a1819Smrg  cat < "$tmpdepfile" > "$depfile"
452ba6a1819Smrg  tr ' ' '
453ba6a1819Smrg' < "$tmpdepfile" | \
454ba6a1819Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455ba6a1819Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456ba6a1819Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457ba6a1819Smrg  rm -f "$tmpdepfile"
458ba6a1819Smrg  ;;
459ba6a1819Smrg
460ba6a1819SmrgdashXmstdout)
461ba6a1819Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462ba6a1819Smrg  # run, as this mode is specially recognized in the preamble.
463ba6a1819Smrg  exit 1
464ba6a1819Smrg  ;;
465ba6a1819Smrg
466ba6a1819Smrgmakedepend)
467ba6a1819Smrg  "$@" || exit $?
468ba6a1819Smrg  # Remove any Libtool call
469ba6a1819Smrg  if test "$libtool" = yes; then
470549e21daSmrg    while test "X$1" != 'X--mode=compile'; do
471ba6a1819Smrg      shift
472ba6a1819Smrg    done
473ba6a1819Smrg    shift
474ba6a1819Smrg  fi
475ba6a1819Smrg  # X makedepend
476ba6a1819Smrg  shift
477549e21daSmrg  cleared=no eat=no
478549e21daSmrg  for arg
479549e21daSmrg  do
480ba6a1819Smrg    case $cleared in
481ba6a1819Smrg    no)
482ba6a1819Smrg      set ""; shift
483ba6a1819Smrg      cleared=yes ;;
484ba6a1819Smrg    esac
485549e21daSmrg    if test $eat = yes; then
486549e21daSmrg      eat=no
487549e21daSmrg      continue
488549e21daSmrg    fi
489ba6a1819Smrg    case "$arg" in
490ba6a1819Smrg    -D*|-I*)
491ba6a1819Smrg      set fnord "$@" "$arg"; shift ;;
492ba6a1819Smrg    # Strip any option that makedepend may not understand.  Remove
493ba6a1819Smrg    # the object too, otherwise makedepend will parse it as a source file.
494549e21daSmrg    -arch)
495549e21daSmrg      eat=yes ;;
496ba6a1819Smrg    -*|$object)
497ba6a1819Smrg      ;;
498ba6a1819Smrg    *)
499ba6a1819Smrg      set fnord "$@" "$arg"; shift ;;
500ba6a1819Smrg    esac
501ba6a1819Smrg  done
502549e21daSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503ba6a1819Smrg  touch "$tmpdepfile"
504ba6a1819Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505ba6a1819Smrg  rm -f "$depfile"
506ba6a1819Smrg  cat < "$tmpdepfile" > "$depfile"
507ba6a1819Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508ba6a1819Smrg' | \
509ba6a1819Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510ba6a1819Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511ba6a1819Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512ba6a1819Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513ba6a1819Smrg  ;;
514ba6a1819Smrg
515ba6a1819Smrgcpp)
516ba6a1819Smrg  # Important note: in order to support this mode, a compiler *must*
517ba6a1819Smrg  # always write the preprocessed file to stdout.
518ba6a1819Smrg  "$@" || exit $?
519ba6a1819Smrg
520ba6a1819Smrg  # Remove the call to Libtool.
521ba6a1819Smrg  if test "$libtool" = yes; then
522549e21daSmrg    while test "X$1" != 'X--mode=compile'; do
523ba6a1819Smrg      shift
524ba6a1819Smrg    done
525ba6a1819Smrg    shift
526ba6a1819Smrg  fi
527ba6a1819Smrg
528ba6a1819Smrg  # Remove `-o $object'.
529ba6a1819Smrg  IFS=" "
530ba6a1819Smrg  for arg
531ba6a1819Smrg  do
532ba6a1819Smrg    case $arg in
533ba6a1819Smrg    -o)
534ba6a1819Smrg      shift
535ba6a1819Smrg      ;;
536ba6a1819Smrg    $object)
537ba6a1819Smrg      shift
538ba6a1819Smrg      ;;
539ba6a1819Smrg    *)
540ba6a1819Smrg      set fnord "$@" "$arg"
541ba6a1819Smrg      shift # fnord
542ba6a1819Smrg      shift # $arg
543ba6a1819Smrg      ;;
544ba6a1819Smrg    esac
545ba6a1819Smrg  done
546ba6a1819Smrg
547ba6a1819Smrg  "$@" -E |
548ba6a1819Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549ba6a1819Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550ba6a1819Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551ba6a1819Smrg  rm -f "$depfile"
552ba6a1819Smrg  echo "$object : \\" > "$depfile"
553ba6a1819Smrg  cat < "$tmpdepfile" >> "$depfile"
554ba6a1819Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555ba6a1819Smrg  rm -f "$tmpdepfile"
556ba6a1819Smrg  ;;
557ba6a1819Smrg
558ba6a1819Smrgmsvisualcpp)
559ba6a1819Smrg  # Important note: in order to support this mode, a compiler *must*
560549e21daSmrg  # always write the preprocessed file to stdout.
561ba6a1819Smrg  "$@" || exit $?
562549e21daSmrg
563549e21daSmrg  # Remove the call to Libtool.
564549e21daSmrg  if test "$libtool" = yes; then
565549e21daSmrg    while test "X$1" != 'X--mode=compile'; do
566549e21daSmrg      shift
567549e21daSmrg    done
568549e21daSmrg    shift
569549e21daSmrg  fi
570549e21daSmrg
571ba6a1819Smrg  IFS=" "
572ba6a1819Smrg  for arg
573ba6a1819Smrg  do
574ba6a1819Smrg    case "$arg" in
575549e21daSmrg    -o)
576549e21daSmrg      shift
577549e21daSmrg      ;;
578549e21daSmrg    $object)
579549e21daSmrg      shift
580549e21daSmrg      ;;
581ba6a1819Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582ba6a1819Smrg	set fnord "$@"
583ba6a1819Smrg	shift
584ba6a1819Smrg	shift
585ba6a1819Smrg	;;
586ba6a1819Smrg    *)
587ba6a1819Smrg	set fnord "$@" "$arg"
588ba6a1819Smrg	shift
589ba6a1819Smrg	shift
590ba6a1819Smrg	;;
591ba6a1819Smrg    esac
592ba6a1819Smrg  done
593549e21daSmrg  "$@" -E 2>/dev/null |
594549e21daSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595ba6a1819Smrg  rm -f "$depfile"
596ba6a1819Smrg  echo "$object : \\" > "$depfile"
597549e21daSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598ba6a1819Smrg  echo "	" >> "$depfile"
599549e21daSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600ba6a1819Smrg  rm -f "$tmpdepfile"
601ba6a1819Smrg  ;;
602ba6a1819Smrg
603549e21daSmrgmsvcmsys)
604549e21daSmrg  # This case exists only to let depend.m4 do its work.  It works by
605549e21daSmrg  # looking at the text of this script.  This case will never be run,
606549e21daSmrg  # since it is checked for above.
607549e21daSmrg  exit 1
608549e21daSmrg  ;;
609549e21daSmrg
610ba6a1819Smrgnone)
611ba6a1819Smrg  exec "$@"
612ba6a1819Smrg  ;;
613ba6a1819Smrg
614ba6a1819Smrg*)
615ba6a1819Smrg  echo "Unknown depmode $depmode" 1>&2
616ba6a1819Smrg  exit 1
617ba6a1819Smrg  ;;
618ba6a1819Smrgesac
619ba6a1819Smrg
620ba6a1819Smrgexit 0
621ba6a1819Smrg
622ba6a1819Smrg# Local Variables:
623ba6a1819Smrg# mode: shell-script
624ba6a1819Smrg# sh-indentation: 2
625ba6a1819Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626ba6a1819Smrg# time-stamp-start: "scriptversion="
627ba6a1819Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628549e21daSmrg# time-stamp-time-zone: "UTC"
629549e21daSmrg# time-stamp-end: "; # UTC"
630ba6a1819Smrg# End:
631