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