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