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