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