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