depcomp revision f67b85aa
1943345d3Smrg#! /bin/sh
2943345d3Smrg# depcomp - compile a program generating dependencies as side-effects
3943345d3Smrg
4f67b85aaSmrgscriptversion=2006-10-15.18
5943345d3Smrg
6f67b85aaSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
7f67b85aaSmrg# Foundation, Inc.
8943345d3Smrg
9943345d3Smrg# This program is free software; you can redistribute it and/or modify
10943345d3Smrg# it under the terms of the GNU General Public License as published by
11943345d3Smrg# the Free Software Foundation; either version 2, or (at your option)
12943345d3Smrg# any later version.
13943345d3Smrg
14943345d3Smrg# This program is distributed in the hope that it will be useful,
15943345d3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16943345d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17943345d3Smrg# GNU General Public License for more details.
18943345d3Smrg
19943345d3Smrg# You should have received a copy of the GNU General Public License
20943345d3Smrg# along with this program; if not, write to the Free Software
21943345d3Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22943345d3Smrg# 02110-1301, USA.
23943345d3Smrg
24943345d3Smrg# As a special exception to the GNU General Public License, if you
25943345d3Smrg# distribute this file as part of a program that contains a
26943345d3Smrg# configuration script generated by Autoconf, you may include it under
27943345d3Smrg# the same distribution terms that you use for the rest of that program.
28943345d3Smrg
29943345d3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30943345d3Smrg
31943345d3Smrgcase $1 in
32943345d3Smrg  '')
33943345d3Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34943345d3Smrg     exit 1;
35943345d3Smrg     ;;
36943345d3Smrg  -h | --h*)
37943345d3Smrg    cat <<\EOF
38943345d3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39943345d3Smrg
40943345d3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41943345d3Smrgas side-effects.
42943345d3Smrg
43943345d3SmrgEnvironment variables:
44943345d3Smrg  depmode     Dependency tracking mode.
45943345d3Smrg  source      Source file read by `PROGRAMS ARGS'.
46943345d3Smrg  object      Object file output by `PROGRAMS ARGS'.
47943345d3Smrg  DEPDIR      directory where to store dependencies.
48943345d3Smrg  depfile     Dependency file to output.
49943345d3Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
50943345d3Smrg  libtool     Whether libtool is used (yes/no).
51943345d3Smrg
52943345d3SmrgReport bugs to <bug-automake@gnu.org>.
53943345d3SmrgEOF
54943345d3Smrg    exit $?
55943345d3Smrg    ;;
56943345d3Smrg  -v | --v*)
57943345d3Smrg    echo "depcomp $scriptversion"
58943345d3Smrg    exit $?
59943345d3Smrg    ;;
60943345d3Smrgesac
61943345d3Smrg
62943345d3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63943345d3Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64943345d3Smrg  exit 1
65943345d3Smrgfi
66943345d3Smrg
67943345d3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68943345d3Smrgdepfile=${depfile-`echo "$object" |
69943345d3Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70943345d3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71943345d3Smrg
72943345d3Smrgrm -f "$tmpdepfile"
73943345d3Smrg
74943345d3Smrg# Some modes work just like other modes, but use different flags.  We
75943345d3Smrg# parameterize here, but still list the modes in the big case below,
76943345d3Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77943345d3Smrg# here, because this file can only contain one case statement.
78943345d3Smrgif test "$depmode" = hp; then
79943345d3Smrg  # HP compiler uses -M and no extra arg.
80943345d3Smrg  gccflag=-M
81943345d3Smrg  depmode=gcc
82943345d3Smrgfi
83943345d3Smrg
84943345d3Smrgif test "$depmode" = dashXmstdout; then
85943345d3Smrg   # This is just like dashmstdout with a different argument.
86943345d3Smrg   dashmflag=-xM
87943345d3Smrg   depmode=dashmstdout
88943345d3Smrgfi
89943345d3Smrg
90943345d3Smrgcase "$depmode" in
91943345d3Smrggcc3)
92943345d3Smrg## gcc 3 implements dependency tracking that does exactly what
93943345d3Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94943345d3Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95f67b85aaSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96f67b85aaSmrg## the command line argument order; so add the flags where they
97f67b85aaSmrg## appear in depend2.am.  Note that the slowdown incurred here
98f67b85aaSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99f67b85aaSmrg  for arg
100f67b85aaSmrg  do
101f67b85aaSmrg    case $arg in
102f67b85aaSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103f67b85aaSmrg    *)  set fnord "$@" "$arg" ;;
104f67b85aaSmrg    esac
105f67b85aaSmrg    shift # fnord
106f67b85aaSmrg    shift # $arg
107f67b85aaSmrg  done
108f67b85aaSmrg  "$@"
109943345d3Smrg  stat=$?
110943345d3Smrg  if test $stat -eq 0; then :
111943345d3Smrg  else
112943345d3Smrg    rm -f "$tmpdepfile"
113943345d3Smrg    exit $stat
114943345d3Smrg  fi
115943345d3Smrg  mv "$tmpdepfile" "$depfile"
116943345d3Smrg  ;;
117943345d3Smrg
118943345d3Smrggcc)
119943345d3Smrg## There are various ways to get dependency output from gcc.  Here's
120943345d3Smrg## why we pick this rather obscure method:
121943345d3Smrg## - Don't want to use -MD because we'd like the dependencies to end
122943345d3Smrg##   up in a subdir.  Having to rename by hand is ugly.
123943345d3Smrg##   (We might end up doing this anyway to support other compilers.)
124943345d3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125943345d3Smrg##   -MM, not -M (despite what the docs say).
126943345d3Smrg## - Using -M directly means running the compiler twice (even worse
127943345d3Smrg##   than renaming).
128943345d3Smrg  if test -z "$gccflag"; then
129943345d3Smrg    gccflag=-MD,
130943345d3Smrg  fi
131943345d3Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
132943345d3Smrg  stat=$?
133943345d3Smrg  if test $stat -eq 0; then :
134943345d3Smrg  else
135943345d3Smrg    rm -f "$tmpdepfile"
136943345d3Smrg    exit $stat
137943345d3Smrg  fi
138943345d3Smrg  rm -f "$depfile"
139943345d3Smrg  echo "$object : \\" > "$depfile"
140943345d3Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141943345d3Smrg## The second -e expression handles DOS-style file names with drive letters.
142943345d3Smrg  sed -e 's/^[^:]*: / /' \
143943345d3Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144943345d3Smrg## This next piece of magic avoids the `deleted header file' problem.
145943345d3Smrg## The problem is that when a header file which appears in a .P file
146943345d3Smrg## is deleted, the dependency causes make to die (because there is
147943345d3Smrg## typically no way to rebuild the header).  We avoid this by adding
148943345d3Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149943345d3Smrg## this for us directly.
150943345d3Smrg  tr ' ' '
151943345d3Smrg' < "$tmpdepfile" |
152943345d3Smrg## Some versions of gcc put a space before the `:'.  On the theory
153943345d3Smrg## that the space means something, we add a space to the output as
154943345d3Smrg## well.
155943345d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
156943345d3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
157943345d3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158943345d3Smrg  rm -f "$tmpdepfile"
159943345d3Smrg  ;;
160943345d3Smrg
161943345d3Smrghp)
162943345d3Smrg  # This case exists only to let depend.m4 do its work.  It works by
163943345d3Smrg  # looking at the text of this script.  This case will never be run,
164943345d3Smrg  # since it is checked for above.
165943345d3Smrg  exit 1
166943345d3Smrg  ;;
167943345d3Smrg
168943345d3Smrgsgi)
169943345d3Smrg  if test "$libtool" = yes; then
170943345d3Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171943345d3Smrg  else
172943345d3Smrg    "$@" -MDupdate "$tmpdepfile"
173943345d3Smrg  fi
174943345d3Smrg  stat=$?
175943345d3Smrg  if test $stat -eq 0; then :
176943345d3Smrg  else
177943345d3Smrg    rm -f "$tmpdepfile"
178943345d3Smrg    exit $stat
179943345d3Smrg  fi
180943345d3Smrg  rm -f "$depfile"
181943345d3Smrg
182943345d3Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183943345d3Smrg    echo "$object : \\" > "$depfile"
184943345d3Smrg
185943345d3Smrg    # Clip off the initial element (the dependent).  Don't try to be
186943345d3Smrg    # clever and replace this with sed code, as IRIX sed won't handle
187943345d3Smrg    # lines with more than a fixed number of characters (4096 in
188943345d3Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189943345d3Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
190943345d3Smrg    # dependency line.
191943345d3Smrg    tr ' ' '
192943345d3Smrg' < "$tmpdepfile" \
193943345d3Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194943345d3Smrg    tr '
195943345d3Smrg' ' ' >> $depfile
196943345d3Smrg    echo >> $depfile
197943345d3Smrg
198943345d3Smrg    # The second pass generates a dummy entry for each header file.
199943345d3Smrg    tr ' ' '
200943345d3Smrg' < "$tmpdepfile" \
201943345d3Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202943345d3Smrg   >> $depfile
203943345d3Smrg  else
204943345d3Smrg    # The sourcefile does not contain any dependencies, so just
205943345d3Smrg    # store a dummy comment line, to avoid errors with the Makefile
206943345d3Smrg    # "include basename.Plo" scheme.
207943345d3Smrg    echo "#dummy" > "$depfile"
208943345d3Smrg  fi
209943345d3Smrg  rm -f "$tmpdepfile"
210943345d3Smrg  ;;
211943345d3Smrg
212943345d3Smrgaix)
213943345d3Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
214943345d3Smrg  # in a .u file.  In older versions, this file always lives in the
215943345d3Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216943345d3Smrg  # start of each line; $object doesn't have directory information.
217943345d3Smrg  # Version 6 uses the directory in both cases.
218943345d3Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219943345d3Smrg  tmpdepfile="$stripped.u"
220943345d3Smrg  if test "$libtool" = yes; then
221943345d3Smrg    "$@" -Wc,-M
222943345d3Smrg  else
223943345d3Smrg    "$@" -M
224943345d3Smrg  fi
225943345d3Smrg  stat=$?
226943345d3Smrg
227943345d3Smrg  if test -f "$tmpdepfile"; then :
228943345d3Smrg  else
229943345d3Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
230943345d3Smrg    tmpdepfile="$stripped.u"
231943345d3Smrg  fi
232943345d3Smrg
233943345d3Smrg  if test $stat -eq 0; then :
234943345d3Smrg  else
235943345d3Smrg    rm -f "$tmpdepfile"
236943345d3Smrg    exit $stat
237943345d3Smrg  fi
238943345d3Smrg
239943345d3Smrg  if test -f "$tmpdepfile"; then
240943345d3Smrg    outname="$stripped.o"
241943345d3Smrg    # Each line is of the form `foo.o: dependent.h'.
242943345d3Smrg    # Do two passes, one to just change these to
243943345d3Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
244943345d3Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245943345d3Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
246943345d3Smrg  else
247943345d3Smrg    # The sourcefile does not contain any dependencies, so just
248943345d3Smrg    # store a dummy comment line, to avoid errors with the Makefile
249943345d3Smrg    # "include basename.Plo" scheme.
250943345d3Smrg    echo "#dummy" > "$depfile"
251943345d3Smrg  fi
252943345d3Smrg  rm -f "$tmpdepfile"
253943345d3Smrg  ;;
254943345d3Smrg
255943345d3Smrgicc)
256943345d3Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
257943345d3Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
258943345d3Smrg  # ICC 7.0 will fill foo.d with something like
259943345d3Smrg  #    foo.o: sub/foo.c
260943345d3Smrg  #    foo.o: sub/foo.h
261943345d3Smrg  # which is wrong.  We want:
262943345d3Smrg  #    sub/foo.o: sub/foo.c
263943345d3Smrg  #    sub/foo.o: sub/foo.h
264943345d3Smrg  #    sub/foo.c:
265943345d3Smrg  #    sub/foo.h:
266943345d3Smrg  # ICC 7.1 will output
267943345d3Smrg  #    foo.o: sub/foo.c sub/foo.h
268943345d3Smrg  # and will wrap long lines using \ :
269943345d3Smrg  #    foo.o: sub/foo.c ... \
270943345d3Smrg  #     sub/foo.h ... \
271943345d3Smrg  #     ...
272943345d3Smrg
273943345d3Smrg  "$@" -MD -MF "$tmpdepfile"
274943345d3Smrg  stat=$?
275943345d3Smrg  if test $stat -eq 0; then :
276943345d3Smrg  else
277943345d3Smrg    rm -f "$tmpdepfile"
278943345d3Smrg    exit $stat
279943345d3Smrg  fi
280943345d3Smrg  rm -f "$depfile"
281943345d3Smrg  # Each line is of the form `foo.o: dependent.h',
282943345d3Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
283943345d3Smrg  # Do two passes, one to just change these to
284943345d3Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
285943345d3Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
286943345d3Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
287943345d3Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
288943345d3Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
289943345d3Smrg    sed -e 's/$/ :/' >> "$depfile"
290943345d3Smrg  rm -f "$tmpdepfile"
291943345d3Smrg  ;;
292943345d3Smrg
293f67b85aaSmrghp2)
294f67b85aaSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
295f67b85aaSmrg  # compilers, which have integrated preprocessors.  The correct option
296f67b85aaSmrg  # to use with these is +Maked; it writes dependencies to a file named
297f67b85aaSmrg  # 'foo.d', which lands next to the object file, wherever that
298f67b85aaSmrg  # happens to be.
299f67b85aaSmrg  # Much of this is similar to the tru64 case; see comments there.
300f67b85aaSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
301f67b85aaSmrg  test "x$dir" = "x$object" && dir=
302f67b85aaSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
303f67b85aaSmrg  if test "$libtool" = yes; then
304f67b85aaSmrg    tmpdepfile1=$dir$base.d
305f67b85aaSmrg    tmpdepfile2=$dir.libs/$base.d
306f67b85aaSmrg    "$@" -Wc,+Maked
307f67b85aaSmrg  else
308f67b85aaSmrg    tmpdepfile1=$dir$base.d
309f67b85aaSmrg    tmpdepfile2=$dir$base.d
310f67b85aaSmrg    "$@" +Maked
311f67b85aaSmrg  fi
312f67b85aaSmrg  stat=$?
313f67b85aaSmrg  if test $stat -eq 0; then :
314f67b85aaSmrg  else
315f67b85aaSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
316f67b85aaSmrg     exit $stat
317f67b85aaSmrg  fi
318f67b85aaSmrg
319f67b85aaSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
320f67b85aaSmrg  do
321f67b85aaSmrg    test -f "$tmpdepfile" && break
322f67b85aaSmrg  done
323f67b85aaSmrg  if test -f "$tmpdepfile"; then
324f67b85aaSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
325f67b85aaSmrg    # Add `dependent.h:' lines.
326f67b85aaSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
327f67b85aaSmrg  else
328f67b85aaSmrg    echo "#dummy" > "$depfile"
329f67b85aaSmrg  fi
330f67b85aaSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
331f67b85aaSmrg  ;;
332f67b85aaSmrg
333943345d3Smrgtru64)
334943345d3Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
335943345d3Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
336943345d3Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
337943345d3Smrg   # dependencies in `foo.d' instead, so we check for that too.
338943345d3Smrg   # Subdirectories are respected.
339943345d3Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
340943345d3Smrg   test "x$dir" = "x$object" && dir=
341943345d3Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
342943345d3Smrg
343943345d3Smrg   if test "$libtool" = yes; then
344943345d3Smrg      # With Tru64 cc, shared objects can also be used to make a
345f67b85aaSmrg      # static library.  This mechanism is used in libtool 1.4 series to
346943345d3Smrg      # handle both shared and static libraries in a single compilation.
347943345d3Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
348943345d3Smrg      #
349943345d3Smrg      # With libtool 1.5 this exception was removed, and libtool now
350943345d3Smrg      # generates 2 separate objects for the 2 libraries.  These two
351f67b85aaSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
352943345d3Smrg      # in $dir$base.o.d.  We have to check for both files, because
353943345d3Smrg      # one of the two compilations can be disabled.  We should prefer
354943345d3Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
355943345d3Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
356943345d3Smrg      # the former would cause a distcleancheck panic.
357943345d3Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
358943345d3Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
359943345d3Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
360943345d3Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
361943345d3Smrg      "$@" -Wc,-MD
362943345d3Smrg   else
363943345d3Smrg      tmpdepfile1=$dir$base.o.d
364943345d3Smrg      tmpdepfile2=$dir$base.d
365943345d3Smrg      tmpdepfile3=$dir$base.d
366943345d3Smrg      tmpdepfile4=$dir$base.d
367943345d3Smrg      "$@" -MD
368943345d3Smrg   fi
369943345d3Smrg
370943345d3Smrg   stat=$?
371943345d3Smrg   if test $stat -eq 0; then :
372943345d3Smrg   else
373943345d3Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
374943345d3Smrg      exit $stat
375943345d3Smrg   fi
376943345d3Smrg
377943345d3Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
378943345d3Smrg   do
379943345d3Smrg     test -f "$tmpdepfile" && break
380943345d3Smrg   done
381943345d3Smrg   if test -f "$tmpdepfile"; then
382943345d3Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
383943345d3Smrg      # That's a tab and a space in the [].
384943345d3Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
385943345d3Smrg   else
386943345d3Smrg      echo "#dummy" > "$depfile"
387943345d3Smrg   fi
388943345d3Smrg   rm -f "$tmpdepfile"
389943345d3Smrg   ;;
390943345d3Smrg
391943345d3Smrg#nosideeffect)
392943345d3Smrg  # This comment above is used by automake to tell side-effect
393943345d3Smrg  # dependency tracking mechanisms from slower ones.
394943345d3Smrg
395943345d3Smrgdashmstdout)
396943345d3Smrg  # Important note: in order to support this mode, a compiler *must*
397943345d3Smrg  # always write the preprocessed file to stdout, regardless of -o.
398943345d3Smrg  "$@" || exit $?
399943345d3Smrg
400943345d3Smrg  # Remove the call to Libtool.
401943345d3Smrg  if test "$libtool" = yes; then
402943345d3Smrg    while test $1 != '--mode=compile'; do
403943345d3Smrg      shift
404943345d3Smrg    done
405943345d3Smrg    shift
406943345d3Smrg  fi
407943345d3Smrg
408943345d3Smrg  # Remove `-o $object'.
409943345d3Smrg  IFS=" "
410943345d3Smrg  for arg
411943345d3Smrg  do
412943345d3Smrg    case $arg in
413943345d3Smrg    -o)
414943345d3Smrg      shift
415943345d3Smrg      ;;
416943345d3Smrg    $object)
417943345d3Smrg      shift
418943345d3Smrg      ;;
419943345d3Smrg    *)
420943345d3Smrg      set fnord "$@" "$arg"
421943345d3Smrg      shift # fnord
422943345d3Smrg      shift # $arg
423943345d3Smrg      ;;
424943345d3Smrg    esac
425943345d3Smrg  done
426943345d3Smrg
427943345d3Smrg  test -z "$dashmflag" && dashmflag=-M
428943345d3Smrg  # Require at least two characters before searching for `:'
429943345d3Smrg  # in the target name.  This is to cope with DOS-style filenames:
430943345d3Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
431943345d3Smrg  "$@" $dashmflag |
432943345d3Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
433943345d3Smrg  rm -f "$depfile"
434943345d3Smrg  cat < "$tmpdepfile" > "$depfile"
435943345d3Smrg  tr ' ' '
436943345d3Smrg' < "$tmpdepfile" | \
437943345d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
438943345d3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
439943345d3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
440943345d3Smrg  rm -f "$tmpdepfile"
441943345d3Smrg  ;;
442943345d3Smrg
443943345d3SmrgdashXmstdout)
444943345d3Smrg  # This case only exists to satisfy depend.m4.  It is never actually
445943345d3Smrg  # run, as this mode is specially recognized in the preamble.
446943345d3Smrg  exit 1
447943345d3Smrg  ;;
448943345d3Smrg
449943345d3Smrgmakedepend)
450943345d3Smrg  "$@" || exit $?
451943345d3Smrg  # Remove any Libtool call
452943345d3Smrg  if test "$libtool" = yes; then
453943345d3Smrg    while test $1 != '--mode=compile'; do
454943345d3Smrg      shift
455943345d3Smrg    done
456943345d3Smrg    shift
457943345d3Smrg  fi
458943345d3Smrg  # X makedepend
459943345d3Smrg  shift
460943345d3Smrg  cleared=no
461943345d3Smrg  for arg in "$@"; do
462943345d3Smrg    case $cleared in
463943345d3Smrg    no)
464943345d3Smrg      set ""; shift
465943345d3Smrg      cleared=yes ;;
466943345d3Smrg    esac
467943345d3Smrg    case "$arg" in
468943345d3Smrg    -D*|-I*)
469943345d3Smrg      set fnord "$@" "$arg"; shift ;;
470943345d3Smrg    # Strip any option that makedepend may not understand.  Remove
471943345d3Smrg    # the object too, otherwise makedepend will parse it as a source file.
472943345d3Smrg    -*|$object)
473943345d3Smrg      ;;
474943345d3Smrg    *)
475943345d3Smrg      set fnord "$@" "$arg"; shift ;;
476943345d3Smrg    esac
477943345d3Smrg  done
478943345d3Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
479943345d3Smrg  touch "$tmpdepfile"
480943345d3Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
481943345d3Smrg  rm -f "$depfile"
482943345d3Smrg  cat < "$tmpdepfile" > "$depfile"
483943345d3Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
484943345d3Smrg' | \
485943345d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
486943345d3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
487943345d3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
488943345d3Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
489943345d3Smrg  ;;
490943345d3Smrg
491943345d3Smrgcpp)
492943345d3Smrg  # Important note: in order to support this mode, a compiler *must*
493943345d3Smrg  # always write the preprocessed file to stdout.
494943345d3Smrg  "$@" || exit $?
495943345d3Smrg
496943345d3Smrg  # Remove the call to Libtool.
497943345d3Smrg  if test "$libtool" = yes; then
498943345d3Smrg    while test $1 != '--mode=compile'; do
499943345d3Smrg      shift
500943345d3Smrg    done
501943345d3Smrg    shift
502943345d3Smrg  fi
503943345d3Smrg
504943345d3Smrg  # Remove `-o $object'.
505943345d3Smrg  IFS=" "
506943345d3Smrg  for arg
507943345d3Smrg  do
508943345d3Smrg    case $arg in
509943345d3Smrg    -o)
510943345d3Smrg      shift
511943345d3Smrg      ;;
512943345d3Smrg    $object)
513943345d3Smrg      shift
514943345d3Smrg      ;;
515943345d3Smrg    *)
516943345d3Smrg      set fnord "$@" "$arg"
517943345d3Smrg      shift # fnord
518943345d3Smrg      shift # $arg
519943345d3Smrg      ;;
520943345d3Smrg    esac
521943345d3Smrg  done
522943345d3Smrg
523943345d3Smrg  "$@" -E |
524943345d3Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
525943345d3Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
526943345d3Smrg    sed '$ s: \\$::' > "$tmpdepfile"
527943345d3Smrg  rm -f "$depfile"
528943345d3Smrg  echo "$object : \\" > "$depfile"
529943345d3Smrg  cat < "$tmpdepfile" >> "$depfile"
530943345d3Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
531943345d3Smrg  rm -f "$tmpdepfile"
532943345d3Smrg  ;;
533943345d3Smrg
534943345d3Smrgmsvisualcpp)
535943345d3Smrg  # Important note: in order to support this mode, a compiler *must*
536943345d3Smrg  # always write the preprocessed file to stdout, regardless of -o,
537943345d3Smrg  # because we must use -o when running libtool.
538943345d3Smrg  "$@" || exit $?
539943345d3Smrg  IFS=" "
540943345d3Smrg  for arg
541943345d3Smrg  do
542943345d3Smrg    case "$arg" in
543943345d3Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
544943345d3Smrg	set fnord "$@"
545943345d3Smrg	shift
546943345d3Smrg	shift
547943345d3Smrg	;;
548943345d3Smrg    *)
549943345d3Smrg	set fnord "$@" "$arg"
550943345d3Smrg	shift
551943345d3Smrg	shift
552943345d3Smrg	;;
553943345d3Smrg    esac
554943345d3Smrg  done
555943345d3Smrg  "$@" -E |
556943345d3Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
557943345d3Smrg  rm -f "$depfile"
558943345d3Smrg  echo "$object : \\" > "$depfile"
559943345d3Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
560943345d3Smrg  echo "	" >> "$depfile"
561943345d3Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
562943345d3Smrg  rm -f "$tmpdepfile"
563943345d3Smrg  ;;
564943345d3Smrg
565943345d3Smrgnone)
566943345d3Smrg  exec "$@"
567943345d3Smrg  ;;
568943345d3Smrg
569943345d3Smrg*)
570943345d3Smrg  echo "Unknown depmode $depmode" 1>&2
571943345d3Smrg  exit 1
572943345d3Smrg  ;;
573943345d3Smrgesac
574943345d3Smrg
575943345d3Smrgexit 0
576943345d3Smrg
577943345d3Smrg# Local Variables:
578943345d3Smrg# mode: shell-script
579943345d3Smrg# sh-indentation: 2
580943345d3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
581943345d3Smrg# time-stamp-start: "scriptversion="
582943345d3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
583943345d3Smrg# time-stamp-end: "$"
584943345d3Smrg# End:
585