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