depcomp revision fc27e79c
1659607e0Smrg#! /bin/sh
2659607e0Smrg# depcomp - compile a program generating dependencies as side-effects
3659607e0Smrg
4fc27e79cSmrgscriptversion=2007-03-29.01
5659607e0Smrg
6fc27e79cSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7659607e0Smrg# Foundation, Inc.
8659607e0Smrg
9659607e0Smrg# This program is free software; you can redistribute it and/or modify
10659607e0Smrg# it under the terms of the GNU General Public License as published by
11659607e0Smrg# the Free Software Foundation; either version 2, or (at your option)
12659607e0Smrg# any later version.
13659607e0Smrg
14659607e0Smrg# This program is distributed in the hope that it will be useful,
15659607e0Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16659607e0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17659607e0Smrg# GNU General Public License for more details.
18659607e0Smrg
19659607e0Smrg# You should have received a copy of the GNU General Public License
20659607e0Smrg# along with this program; if not, write to the Free Software
21659607e0Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22659607e0Smrg# 02110-1301, USA.
23659607e0Smrg
24659607e0Smrg# As a special exception to the GNU General Public License, if you
25659607e0Smrg# distribute this file as part of a program that contains a
26659607e0Smrg# configuration script generated by Autoconf, you may include it under
27659607e0Smrg# the same distribution terms that you use for the rest of that program.
28659607e0Smrg
29659607e0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30659607e0Smrg
31659607e0Smrgcase $1 in
32659607e0Smrg  '')
33659607e0Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34659607e0Smrg     exit 1;
35659607e0Smrg     ;;
36659607e0Smrg  -h | --h*)
37659607e0Smrg    cat <<\EOF
38659607e0SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39659607e0Smrg
40659607e0SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41659607e0Smrgas side-effects.
42659607e0Smrg
43659607e0SmrgEnvironment variables:
44659607e0Smrg  depmode     Dependency tracking mode.
45659607e0Smrg  source      Source file read by `PROGRAMS ARGS'.
46659607e0Smrg  object      Object file output by `PROGRAMS ARGS'.
47659607e0Smrg  DEPDIR      directory where to store dependencies.
48659607e0Smrg  depfile     Dependency file to output.
49659607e0Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
50659607e0Smrg  libtool     Whether libtool is used (yes/no).
51659607e0Smrg
52659607e0SmrgReport bugs to <bug-automake@gnu.org>.
53659607e0SmrgEOF
54659607e0Smrg    exit $?
55659607e0Smrg    ;;
56659607e0Smrg  -v | --v*)
57659607e0Smrg    echo "depcomp $scriptversion"
58659607e0Smrg    exit $?
59659607e0Smrg    ;;
60659607e0Smrgesac
61659607e0Smrg
62659607e0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63659607e0Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64659607e0Smrg  exit 1
65659607e0Smrgfi
66659607e0Smrg
67659607e0Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68659607e0Smrgdepfile=${depfile-`echo "$object" |
69659607e0Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70659607e0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71659607e0Smrg
72659607e0Smrgrm -f "$tmpdepfile"
73659607e0Smrg
74659607e0Smrg# Some modes work just like other modes, but use different flags.  We
75659607e0Smrg# parameterize here, but still list the modes in the big case below,
76659607e0Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77659607e0Smrg# here, because this file can only contain one case statement.
78659607e0Smrgif test "$depmode" = hp; then
79659607e0Smrg  # HP compiler uses -M and no extra arg.
80659607e0Smrg  gccflag=-M
81659607e0Smrg  depmode=gcc
82659607e0Smrgfi
83659607e0Smrg
84659607e0Smrgif test "$depmode" = dashXmstdout; then
85659607e0Smrg   # This is just like dashmstdout with a different argument.
86659607e0Smrg   dashmflag=-xM
87659607e0Smrg   depmode=dashmstdout
88659607e0Smrgfi
89659607e0Smrg
90659607e0Smrgcase "$depmode" in
91659607e0Smrggcc3)
92659607e0Smrg## gcc 3 implements dependency tracking that does exactly what
93659607e0Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94659607e0Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95659607e0Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96659607e0Smrg## the command line argument order; so add the flags where they
97659607e0Smrg## appear in depend2.am.  Note that the slowdown incurred here
98659607e0Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99659607e0Smrg  for arg
100659607e0Smrg  do
101659607e0Smrg    case $arg in
102659607e0Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103659607e0Smrg    *)  set fnord "$@" "$arg" ;;
104659607e0Smrg    esac
105659607e0Smrg    shift # fnord
106659607e0Smrg    shift # $arg
107659607e0Smrg  done
108659607e0Smrg  "$@"
109659607e0Smrg  stat=$?
110659607e0Smrg  if test $stat -eq 0; then :
111659607e0Smrg  else
112659607e0Smrg    rm -f "$tmpdepfile"
113659607e0Smrg    exit $stat
114659607e0Smrg  fi
115659607e0Smrg  mv "$tmpdepfile" "$depfile"
116659607e0Smrg  ;;
117659607e0Smrg
118659607e0Smrggcc)
119659607e0Smrg## There are various ways to get dependency output from gcc.  Here's
120659607e0Smrg## why we pick this rather obscure method:
121659607e0Smrg## - Don't want to use -MD because we'd like the dependencies to end
122659607e0Smrg##   up in a subdir.  Having to rename by hand is ugly.
123659607e0Smrg##   (We might end up doing this anyway to support other compilers.)
124659607e0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125659607e0Smrg##   -MM, not -M (despite what the docs say).
126659607e0Smrg## - Using -M directly means running the compiler twice (even worse
127659607e0Smrg##   than renaming).
128659607e0Smrg  if test -z "$gccflag"; then
129659607e0Smrg    gccflag=-MD,
130659607e0Smrg  fi
131659607e0Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
132659607e0Smrg  stat=$?
133659607e0Smrg  if test $stat -eq 0; then :
134659607e0Smrg  else
135659607e0Smrg    rm -f "$tmpdepfile"
136659607e0Smrg    exit $stat
137659607e0Smrg  fi
138659607e0Smrg  rm -f "$depfile"
139659607e0Smrg  echo "$object : \\" > "$depfile"
140659607e0Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141659607e0Smrg## The second -e expression handles DOS-style file names with drive letters.
142659607e0Smrg  sed -e 's/^[^:]*: / /' \
143659607e0Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144659607e0Smrg## This next piece of magic avoids the `deleted header file' problem.
145659607e0Smrg## The problem is that when a header file which appears in a .P file
146659607e0Smrg## is deleted, the dependency causes make to die (because there is
147659607e0Smrg## typically no way to rebuild the header).  We avoid this by adding
148659607e0Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149659607e0Smrg## this for us directly.
150659607e0Smrg  tr ' ' '
151659607e0Smrg' < "$tmpdepfile" |
152659607e0Smrg## Some versions of gcc put a space before the `:'.  On the theory
153659607e0Smrg## that the space means something, we add a space to the output as
154659607e0Smrg## well.
155659607e0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
156659607e0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
157659607e0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158659607e0Smrg  rm -f "$tmpdepfile"
159659607e0Smrg  ;;
160659607e0Smrg
161659607e0Smrghp)
162659607e0Smrg  # This case exists only to let depend.m4 do its work.  It works by
163659607e0Smrg  # looking at the text of this script.  This case will never be run,
164659607e0Smrg  # since it is checked for above.
165659607e0Smrg  exit 1
166659607e0Smrg  ;;
167659607e0Smrg
168659607e0Smrgsgi)
169659607e0Smrg  if test "$libtool" = yes; then
170659607e0Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171659607e0Smrg  else
172659607e0Smrg    "$@" -MDupdate "$tmpdepfile"
173659607e0Smrg  fi
174659607e0Smrg  stat=$?
175659607e0Smrg  if test $stat -eq 0; then :
176659607e0Smrg  else
177659607e0Smrg    rm -f "$tmpdepfile"
178659607e0Smrg    exit $stat
179659607e0Smrg  fi
180659607e0Smrg  rm -f "$depfile"
181659607e0Smrg
182659607e0Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183659607e0Smrg    echo "$object : \\" > "$depfile"
184659607e0Smrg
185659607e0Smrg    # Clip off the initial element (the dependent).  Don't try to be
186659607e0Smrg    # clever and replace this with sed code, as IRIX sed won't handle
187659607e0Smrg    # lines with more than a fixed number of characters (4096 in
188659607e0Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189659607e0Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
190659607e0Smrg    # dependency line.
191659607e0Smrg    tr ' ' '
192659607e0Smrg' < "$tmpdepfile" \
193659607e0Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194659607e0Smrg    tr '
195659607e0Smrg' ' ' >> $depfile
196659607e0Smrg    echo >> $depfile
197659607e0Smrg
198659607e0Smrg    # The second pass generates a dummy entry for each header file.
199659607e0Smrg    tr ' ' '
200659607e0Smrg' < "$tmpdepfile" \
201659607e0Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202659607e0Smrg   >> $depfile
203659607e0Smrg  else
204659607e0Smrg    # The sourcefile does not contain any dependencies, so just
205659607e0Smrg    # store a dummy comment line, to avoid errors with the Makefile
206659607e0Smrg    # "include basename.Plo" scheme.
207659607e0Smrg    echo "#dummy" > "$depfile"
208659607e0Smrg  fi
209659607e0Smrg  rm -f "$tmpdepfile"
210659607e0Smrg  ;;
211659607e0Smrg
212659607e0Smrgaix)
213659607e0Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
214659607e0Smrg  # in a .u file.  In older versions, this file always lives in the
215659607e0Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216659607e0Smrg  # start of each line; $object doesn't have directory information.
217659607e0Smrg  # Version 6 uses the directory in both cases.
218fc27e79cSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219fc27e79cSmrg  test "x$dir" = "x$object" && dir=
220fc27e79cSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221659607e0Smrg  if test "$libtool" = yes; then
222fc27e79cSmrg    tmpdepfile1=$dir$base.u
223fc27e79cSmrg    tmpdepfile2=$base.u
224fc27e79cSmrg    tmpdepfile3=$dir.libs/$base.u
225659607e0Smrg    "$@" -Wc,-M
226659607e0Smrg  else
227fc27e79cSmrg    tmpdepfile1=$dir$base.u
228fc27e79cSmrg    tmpdepfile2=$dir$base.u
229fc27e79cSmrg    tmpdepfile3=$dir$base.u
230659607e0Smrg    "$@" -M
231659607e0Smrg  fi
232659607e0Smrg  stat=$?
233659607e0Smrg
234659607e0Smrg  if test $stat -eq 0; then :
235659607e0Smrg  else
236fc27e79cSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237659607e0Smrg    exit $stat
238659607e0Smrg  fi
239659607e0Smrg
240fc27e79cSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241fc27e79cSmrg  do
242fc27e79cSmrg    test -f "$tmpdepfile" && break
243fc27e79cSmrg  done
244659607e0Smrg  if test -f "$tmpdepfile"; then
245659607e0Smrg    # Each line is of the form `foo.o: dependent.h'.
246659607e0Smrg    # Do two passes, one to just change these to
247659607e0Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248fc27e79cSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249fc27e79cSmrg    # That's a tab and a space in the [].
250fc27e79cSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251659607e0Smrg  else
252659607e0Smrg    # The sourcefile does not contain any dependencies, so just
253659607e0Smrg    # store a dummy comment line, to avoid errors with the Makefile
254659607e0Smrg    # "include basename.Plo" scheme.
255659607e0Smrg    echo "#dummy" > "$depfile"
256659607e0Smrg  fi
257659607e0Smrg  rm -f "$tmpdepfile"
258659607e0Smrg  ;;
259659607e0Smrg
260659607e0Smrgicc)
261659607e0Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
262659607e0Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263659607e0Smrg  # ICC 7.0 will fill foo.d with something like
264659607e0Smrg  #    foo.o: sub/foo.c
265659607e0Smrg  #    foo.o: sub/foo.h
266659607e0Smrg  # which is wrong.  We want:
267659607e0Smrg  #    sub/foo.o: sub/foo.c
268659607e0Smrg  #    sub/foo.o: sub/foo.h
269659607e0Smrg  #    sub/foo.c:
270659607e0Smrg  #    sub/foo.h:
271659607e0Smrg  # ICC 7.1 will output
272659607e0Smrg  #    foo.o: sub/foo.c sub/foo.h
273659607e0Smrg  # and will wrap long lines using \ :
274659607e0Smrg  #    foo.o: sub/foo.c ... \
275659607e0Smrg  #     sub/foo.h ... \
276659607e0Smrg  #     ...
277659607e0Smrg
278659607e0Smrg  "$@" -MD -MF "$tmpdepfile"
279659607e0Smrg  stat=$?
280659607e0Smrg  if test $stat -eq 0; then :
281659607e0Smrg  else
282659607e0Smrg    rm -f "$tmpdepfile"
283659607e0Smrg    exit $stat
284659607e0Smrg  fi
285659607e0Smrg  rm -f "$depfile"
286659607e0Smrg  # Each line is of the form `foo.o: dependent.h',
287659607e0Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288659607e0Smrg  # Do two passes, one to just change these to
289659607e0Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
290659607e0Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291659607e0Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
292659607e0Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
293659607e0Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294659607e0Smrg    sed -e 's/$/ :/' >> "$depfile"
295659607e0Smrg  rm -f "$tmpdepfile"
296659607e0Smrg  ;;
297659607e0Smrg
298659607e0Smrghp2)
299659607e0Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300659607e0Smrg  # compilers, which have integrated preprocessors.  The correct option
301659607e0Smrg  # to use with these is +Maked; it writes dependencies to a file named
302659607e0Smrg  # 'foo.d', which lands next to the object file, wherever that
303659607e0Smrg  # happens to be.
304659607e0Smrg  # Much of this is similar to the tru64 case; see comments there.
305659607e0Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306659607e0Smrg  test "x$dir" = "x$object" && dir=
307659607e0Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308659607e0Smrg  if test "$libtool" = yes; then
309659607e0Smrg    tmpdepfile1=$dir$base.d
310659607e0Smrg    tmpdepfile2=$dir.libs/$base.d
311659607e0Smrg    "$@" -Wc,+Maked
312659607e0Smrg  else
313659607e0Smrg    tmpdepfile1=$dir$base.d
314659607e0Smrg    tmpdepfile2=$dir$base.d
315659607e0Smrg    "$@" +Maked
316659607e0Smrg  fi
317659607e0Smrg  stat=$?
318659607e0Smrg  if test $stat -eq 0; then :
319659607e0Smrg  else
320659607e0Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321659607e0Smrg     exit $stat
322659607e0Smrg  fi
323659607e0Smrg
324659607e0Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325659607e0Smrg  do
326659607e0Smrg    test -f "$tmpdepfile" && break
327659607e0Smrg  done
328659607e0Smrg  if test -f "$tmpdepfile"; then
329659607e0Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330659607e0Smrg    # Add `dependent.h:' lines.
331659607e0Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332659607e0Smrg  else
333659607e0Smrg    echo "#dummy" > "$depfile"
334659607e0Smrg  fi
335659607e0Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336659607e0Smrg  ;;
337659607e0Smrg
338659607e0Smrgtru64)
339659607e0Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
340659607e0Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341659607e0Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342659607e0Smrg   # dependencies in `foo.d' instead, so we check for that too.
343659607e0Smrg   # Subdirectories are respected.
344659607e0Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345659607e0Smrg   test "x$dir" = "x$object" && dir=
346659607e0Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347659607e0Smrg
348659607e0Smrg   if test "$libtool" = yes; then
349659607e0Smrg      # With Tru64 cc, shared objects can also be used to make a
350659607e0Smrg      # static library.  This mechanism is used in libtool 1.4 series to
351659607e0Smrg      # handle both shared and static libraries in a single compilation.
352659607e0Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353659607e0Smrg      #
354659607e0Smrg      # With libtool 1.5 this exception was removed, and libtool now
355659607e0Smrg      # generates 2 separate objects for the 2 libraries.  These two
356659607e0Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
357659607e0Smrg      # in $dir$base.o.d.  We have to check for both files, because
358659607e0Smrg      # one of the two compilations can be disabled.  We should prefer
359659607e0Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360659607e0Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
361659607e0Smrg      # the former would cause a distcleancheck panic.
362659607e0Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363659607e0Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364659607e0Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365659607e0Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366659607e0Smrg      "$@" -Wc,-MD
367659607e0Smrg   else
368659607e0Smrg      tmpdepfile1=$dir$base.o.d
369659607e0Smrg      tmpdepfile2=$dir$base.d
370659607e0Smrg      tmpdepfile3=$dir$base.d
371659607e0Smrg      tmpdepfile4=$dir$base.d
372659607e0Smrg      "$@" -MD
373659607e0Smrg   fi
374659607e0Smrg
375659607e0Smrg   stat=$?
376659607e0Smrg   if test $stat -eq 0; then :
377659607e0Smrg   else
378659607e0Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379659607e0Smrg      exit $stat
380659607e0Smrg   fi
381659607e0Smrg
382659607e0Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383659607e0Smrg   do
384659607e0Smrg     test -f "$tmpdepfile" && break
385659607e0Smrg   done
386659607e0Smrg   if test -f "$tmpdepfile"; then
387659607e0Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388659607e0Smrg      # That's a tab and a space in the [].
389659607e0Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390659607e0Smrg   else
391659607e0Smrg      echo "#dummy" > "$depfile"
392659607e0Smrg   fi
393659607e0Smrg   rm -f "$tmpdepfile"
394659607e0Smrg   ;;
395659607e0Smrg
396659607e0Smrg#nosideeffect)
397659607e0Smrg  # This comment above is used by automake to tell side-effect
398659607e0Smrg  # dependency tracking mechanisms from slower ones.
399659607e0Smrg
400659607e0Smrgdashmstdout)
401659607e0Smrg  # Important note: in order to support this mode, a compiler *must*
402659607e0Smrg  # always write the preprocessed file to stdout, regardless of -o.
403659607e0Smrg  "$@" || exit $?
404659607e0Smrg
405659607e0Smrg  # Remove the call to Libtool.
406659607e0Smrg  if test "$libtool" = yes; then
407659607e0Smrg    while test $1 != '--mode=compile'; do
408659607e0Smrg      shift
409659607e0Smrg    done
410659607e0Smrg    shift
411659607e0Smrg  fi
412659607e0Smrg
413659607e0Smrg  # Remove `-o $object'.
414659607e0Smrg  IFS=" "
415659607e0Smrg  for arg
416659607e0Smrg  do
417659607e0Smrg    case $arg in
418659607e0Smrg    -o)
419659607e0Smrg      shift
420659607e0Smrg      ;;
421659607e0Smrg    $object)
422659607e0Smrg      shift
423659607e0Smrg      ;;
424659607e0Smrg    *)
425659607e0Smrg      set fnord "$@" "$arg"
426659607e0Smrg      shift # fnord
427659607e0Smrg      shift # $arg
428659607e0Smrg      ;;
429659607e0Smrg    esac
430659607e0Smrg  done
431659607e0Smrg
432659607e0Smrg  test -z "$dashmflag" && dashmflag=-M
433659607e0Smrg  # Require at least two characters before searching for `:'
434659607e0Smrg  # in the target name.  This is to cope with DOS-style filenames:
435659607e0Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436659607e0Smrg  "$@" $dashmflag |
437659607e0Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438659607e0Smrg  rm -f "$depfile"
439659607e0Smrg  cat < "$tmpdepfile" > "$depfile"
440659607e0Smrg  tr ' ' '
441659607e0Smrg' < "$tmpdepfile" | \
442659607e0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
443659607e0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
444659607e0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445659607e0Smrg  rm -f "$tmpdepfile"
446659607e0Smrg  ;;
447659607e0Smrg
448659607e0SmrgdashXmstdout)
449659607e0Smrg  # This case only exists to satisfy depend.m4.  It is never actually
450659607e0Smrg  # run, as this mode is specially recognized in the preamble.
451659607e0Smrg  exit 1
452659607e0Smrg  ;;
453659607e0Smrg
454659607e0Smrgmakedepend)
455659607e0Smrg  "$@" || exit $?
456659607e0Smrg  # Remove any Libtool call
457659607e0Smrg  if test "$libtool" = yes; then
458659607e0Smrg    while test $1 != '--mode=compile'; do
459659607e0Smrg      shift
460659607e0Smrg    done
461659607e0Smrg    shift
462659607e0Smrg  fi
463659607e0Smrg  # X makedepend
464659607e0Smrg  shift
465659607e0Smrg  cleared=no
466659607e0Smrg  for arg in "$@"; do
467659607e0Smrg    case $cleared in
468659607e0Smrg    no)
469659607e0Smrg      set ""; shift
470659607e0Smrg      cleared=yes ;;
471659607e0Smrg    esac
472659607e0Smrg    case "$arg" in
473659607e0Smrg    -D*|-I*)
474659607e0Smrg      set fnord "$@" "$arg"; shift ;;
475659607e0Smrg    # Strip any option that makedepend may not understand.  Remove
476659607e0Smrg    # the object too, otherwise makedepend will parse it as a source file.
477659607e0Smrg    -*|$object)
478659607e0Smrg      ;;
479659607e0Smrg    *)
480659607e0Smrg      set fnord "$@" "$arg"; shift ;;
481659607e0Smrg    esac
482659607e0Smrg  done
483659607e0Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
484659607e0Smrg  touch "$tmpdepfile"
485659607e0Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486659607e0Smrg  rm -f "$depfile"
487659607e0Smrg  cat < "$tmpdepfile" > "$depfile"
488659607e0Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
489659607e0Smrg' | \
490659607e0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
491659607e0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
492659607e0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493659607e0Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
494659607e0Smrg  ;;
495659607e0Smrg
496659607e0Smrgcpp)
497659607e0Smrg  # Important note: in order to support this mode, a compiler *must*
498659607e0Smrg  # always write the preprocessed file to stdout.
499659607e0Smrg  "$@" || exit $?
500659607e0Smrg
501659607e0Smrg  # Remove the call to Libtool.
502659607e0Smrg  if test "$libtool" = yes; then
503659607e0Smrg    while test $1 != '--mode=compile'; do
504659607e0Smrg      shift
505659607e0Smrg    done
506659607e0Smrg    shift
507659607e0Smrg  fi
508659607e0Smrg
509659607e0Smrg  # Remove `-o $object'.
510659607e0Smrg  IFS=" "
511659607e0Smrg  for arg
512659607e0Smrg  do
513659607e0Smrg    case $arg in
514659607e0Smrg    -o)
515659607e0Smrg      shift
516659607e0Smrg      ;;
517659607e0Smrg    $object)
518659607e0Smrg      shift
519659607e0Smrg      ;;
520659607e0Smrg    *)
521659607e0Smrg      set fnord "$@" "$arg"
522659607e0Smrg      shift # fnord
523659607e0Smrg      shift # $arg
524659607e0Smrg      ;;
525659607e0Smrg    esac
526659607e0Smrg  done
527659607e0Smrg
528659607e0Smrg  "$@" -E |
529659607e0Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530659607e0Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531659607e0Smrg    sed '$ s: \\$::' > "$tmpdepfile"
532659607e0Smrg  rm -f "$depfile"
533659607e0Smrg  echo "$object : \\" > "$depfile"
534659607e0Smrg  cat < "$tmpdepfile" >> "$depfile"
535659607e0Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536659607e0Smrg  rm -f "$tmpdepfile"
537659607e0Smrg  ;;
538659607e0Smrg
539659607e0Smrgmsvisualcpp)
540659607e0Smrg  # Important note: in order to support this mode, a compiler *must*
541659607e0Smrg  # always write the preprocessed file to stdout, regardless of -o,
542659607e0Smrg  # because we must use -o when running libtool.
543659607e0Smrg  "$@" || exit $?
544659607e0Smrg  IFS=" "
545659607e0Smrg  for arg
546659607e0Smrg  do
547659607e0Smrg    case "$arg" in
548659607e0Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549659607e0Smrg	set fnord "$@"
550659607e0Smrg	shift
551659607e0Smrg	shift
552659607e0Smrg	;;
553659607e0Smrg    *)
554659607e0Smrg	set fnord "$@" "$arg"
555659607e0Smrg	shift
556659607e0Smrg	shift
557659607e0Smrg	;;
558659607e0Smrg    esac
559659607e0Smrg  done
560659607e0Smrg  "$@" -E |
561659607e0Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562659607e0Smrg  rm -f "$depfile"
563659607e0Smrg  echo "$object : \\" > "$depfile"
564659607e0Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565659607e0Smrg  echo "	" >> "$depfile"
566659607e0Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567659607e0Smrg  rm -f "$tmpdepfile"
568659607e0Smrg  ;;
569659607e0Smrg
570659607e0Smrgnone)
571659607e0Smrg  exec "$@"
572659607e0Smrg  ;;
573659607e0Smrg
574659607e0Smrg*)
575659607e0Smrg  echo "Unknown depmode $depmode" 1>&2
576659607e0Smrg  exit 1
577659607e0Smrg  ;;
578659607e0Smrgesac
579659607e0Smrg
580659607e0Smrgexit 0
581659607e0Smrg
582659607e0Smrg# Local Variables:
583659607e0Smrg# mode: shell-script
584659607e0Smrg# sh-indentation: 2
585659607e0Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
586659607e0Smrg# time-stamp-start: "scriptversion="
587659607e0Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
588659607e0Smrg# time-stamp-end: "$"
589659607e0Smrg# End:
590