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