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