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