depcomp revision 0bb88ba4
1fe5e51b7Smrg#! /bin/sh
2fe5e51b7Smrg# depcomp - compile a program generating dependencies as side-effects
3fe5e51b7Smrg
40bb88ba4Smrgscriptversion=2011-12-04.11; # UTC
5fe5e51b7Smrg
60bb88ba4Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
70bb88ba4Smrg# 2011 Free Software Foundation, Inc.
8fe5e51b7Smrg
9fe5e51b7Smrg# This program is free software; you can redistribute it and/or modify
10fe5e51b7Smrg# it under the terms of the GNU General Public License as published by
11fe5e51b7Smrg# the Free Software Foundation; either version 2, or (at your option)
12fe5e51b7Smrg# any later version.
13fe5e51b7Smrg
14fe5e51b7Smrg# This program is distributed in the hope that it will be useful,
15fe5e51b7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16fe5e51b7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17fe5e51b7Smrg# GNU General Public License for more details.
18fe5e51b7Smrg
19fe5e51b7Smrg# You should have received a copy of the GNU General Public License
200bb88ba4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21fe5e51b7Smrg
22fe5e51b7Smrg# As a special exception to the GNU General Public License, if you
23fe5e51b7Smrg# distribute this file as part of a program that contains a
24fe5e51b7Smrg# configuration script generated by Autoconf, you may include it under
25fe5e51b7Smrg# the same distribution terms that you use for the rest of that program.
26fe5e51b7Smrg
27fe5e51b7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28fe5e51b7Smrg
29fe5e51b7Smrgcase $1 in
30fe5e51b7Smrg  '')
31fe5e51b7Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32fe5e51b7Smrg     exit 1;
33fe5e51b7Smrg     ;;
34fe5e51b7Smrg  -h | --h*)
35fe5e51b7Smrg    cat <<\EOF
36fe5e51b7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37fe5e51b7Smrg
38fe5e51b7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39fe5e51b7Smrgas side-effects.
40fe5e51b7Smrg
41fe5e51b7SmrgEnvironment variables:
42fe5e51b7Smrg  depmode     Dependency tracking mode.
43fe5e51b7Smrg  source      Source file read by `PROGRAMS ARGS'.
44fe5e51b7Smrg  object      Object file output by `PROGRAMS ARGS'.
45fe5e51b7Smrg  DEPDIR      directory where to store dependencies.
46fe5e51b7Smrg  depfile     Dependency file to output.
470bb88ba4Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
48fe5e51b7Smrg  libtool     Whether libtool is used (yes/no).
49fe5e51b7Smrg
50fe5e51b7SmrgReport bugs to <bug-automake@gnu.org>.
51fe5e51b7SmrgEOF
52fe5e51b7Smrg    exit $?
53fe5e51b7Smrg    ;;
54fe5e51b7Smrg  -v | --v*)
55fe5e51b7Smrg    echo "depcomp $scriptversion"
56fe5e51b7Smrg    exit $?
57fe5e51b7Smrg    ;;
58fe5e51b7Smrgesac
59fe5e51b7Smrg
60fe5e51b7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61fe5e51b7Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62fe5e51b7Smrg  exit 1
63fe5e51b7Smrgfi
64fe5e51b7Smrg
65fe5e51b7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66fe5e51b7Smrgdepfile=${depfile-`echo "$object" |
67fe5e51b7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68fe5e51b7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69fe5e51b7Smrg
70fe5e51b7Smrgrm -f "$tmpdepfile"
71fe5e51b7Smrg
72fe5e51b7Smrg# Some modes work just like other modes, but use different flags.  We
73fe5e51b7Smrg# parameterize here, but still list the modes in the big case below,
74fe5e51b7Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75fe5e51b7Smrg# here, because this file can only contain one case statement.
76fe5e51b7Smrgif test "$depmode" = hp; then
77fe5e51b7Smrg  # HP compiler uses -M and no extra arg.
78fe5e51b7Smrg  gccflag=-M
79fe5e51b7Smrg  depmode=gcc
80fe5e51b7Smrgfi
81fe5e51b7Smrg
82fe5e51b7Smrgif test "$depmode" = dashXmstdout; then
83fe5e51b7Smrg   # This is just like dashmstdout with a different argument.
84fe5e51b7Smrg   dashmflag=-xM
85fe5e51b7Smrg   depmode=dashmstdout
86fe5e51b7Smrgfi
87fe5e51b7Smrg
880bb88ba4Smrgcygpath_u="cygpath -u -f -"
890bb88ba4Smrgif test "$depmode" = msvcmsys; then
900bb88ba4Smrg   # This is just like msvisualcpp but w/o cygpath translation.
910bb88ba4Smrg   # Just convert the backslash-escaped backslashes to single forward
920bb88ba4Smrg   # slashes to satisfy depend.m4
930bb88ba4Smrg   cygpath_u='sed s,\\\\,/,g'
940bb88ba4Smrg   depmode=msvisualcpp
950bb88ba4Smrgfi
960bb88ba4Smrg
970bb88ba4Smrgif test "$depmode" = msvc7msys; then
980bb88ba4Smrg   # This is just like msvc7 but w/o cygpath translation.
990bb88ba4Smrg   # Just convert the backslash-escaped backslashes to single forward
1000bb88ba4Smrg   # slashes to satisfy depend.m4
1010bb88ba4Smrg   cygpath_u='sed s,\\\\,/,g'
1020bb88ba4Smrg   depmode=msvc7
1030bb88ba4Smrgfi
1040bb88ba4Smrg
105fe5e51b7Smrgcase "$depmode" in
106fe5e51b7Smrggcc3)
107fe5e51b7Smrg## gcc 3 implements dependency tracking that does exactly what
108fe5e51b7Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
109fe5e51b7Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110fe5e51b7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111fe5e51b7Smrg## the command line argument order; so add the flags where they
112fe5e51b7Smrg## appear in depend2.am.  Note that the slowdown incurred here
113fe5e51b7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114fe5e51b7Smrg  for arg
115fe5e51b7Smrg  do
116fe5e51b7Smrg    case $arg in
117fe5e51b7Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118fe5e51b7Smrg    *)  set fnord "$@" "$arg" ;;
119fe5e51b7Smrg    esac
120fe5e51b7Smrg    shift # fnord
121fe5e51b7Smrg    shift # $arg
122fe5e51b7Smrg  done
123fe5e51b7Smrg  "$@"
124fe5e51b7Smrg  stat=$?
125fe5e51b7Smrg  if test $stat -eq 0; then :
126fe5e51b7Smrg  else
127fe5e51b7Smrg    rm -f "$tmpdepfile"
128fe5e51b7Smrg    exit $stat
129fe5e51b7Smrg  fi
130fe5e51b7Smrg  mv "$tmpdepfile" "$depfile"
131fe5e51b7Smrg  ;;
132fe5e51b7Smrg
133fe5e51b7Smrggcc)
134fe5e51b7Smrg## There are various ways to get dependency output from gcc.  Here's
135fe5e51b7Smrg## why we pick this rather obscure method:
136fe5e51b7Smrg## - Don't want to use -MD because we'd like the dependencies to end
137fe5e51b7Smrg##   up in a subdir.  Having to rename by hand is ugly.
138fe5e51b7Smrg##   (We might end up doing this anyway to support other compilers.)
139fe5e51b7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140fe5e51b7Smrg##   -MM, not -M (despite what the docs say).
141fe5e51b7Smrg## - Using -M directly means running the compiler twice (even worse
142fe5e51b7Smrg##   than renaming).
143fe5e51b7Smrg  if test -z "$gccflag"; then
144fe5e51b7Smrg    gccflag=-MD,
145fe5e51b7Smrg  fi
146fe5e51b7Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
147fe5e51b7Smrg  stat=$?
148fe5e51b7Smrg  if test $stat -eq 0; then :
149fe5e51b7Smrg  else
150fe5e51b7Smrg    rm -f "$tmpdepfile"
151fe5e51b7Smrg    exit $stat
152fe5e51b7Smrg  fi
153fe5e51b7Smrg  rm -f "$depfile"
154fe5e51b7Smrg  echo "$object : \\" > "$depfile"
155fe5e51b7Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156fe5e51b7Smrg## The second -e expression handles DOS-style file names with drive letters.
157fe5e51b7Smrg  sed -e 's/^[^:]*: / /' \
158fe5e51b7Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159fe5e51b7Smrg## This next piece of magic avoids the `deleted header file' problem.
160fe5e51b7Smrg## The problem is that when a header file which appears in a .P file
161fe5e51b7Smrg## is deleted, the dependency causes make to die (because there is
162fe5e51b7Smrg## typically no way to rebuild the header).  We avoid this by adding
163fe5e51b7Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
164fe5e51b7Smrg## this for us directly.
165fe5e51b7Smrg  tr ' ' '
166fe5e51b7Smrg' < "$tmpdepfile" |
167fe5e51b7Smrg## Some versions of gcc put a space before the `:'.  On the theory
168fe5e51b7Smrg## that the space means something, we add a space to the output as
1690bb88ba4Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1700bb88ba4Smrg## to the object.  Take care to not repeat it in the output.
171fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
172fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1730bb88ba4Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1740bb88ba4Smrg      | sed -e 's/$/ :/' >> "$depfile"
175fe5e51b7Smrg  rm -f "$tmpdepfile"
176fe5e51b7Smrg  ;;
177fe5e51b7Smrg
178fe5e51b7Smrghp)
179fe5e51b7Smrg  # This case exists only to let depend.m4 do its work.  It works by
180fe5e51b7Smrg  # looking at the text of this script.  This case will never be run,
181fe5e51b7Smrg  # since it is checked for above.
182fe5e51b7Smrg  exit 1
183fe5e51b7Smrg  ;;
184fe5e51b7Smrg
185fe5e51b7Smrgsgi)
186fe5e51b7Smrg  if test "$libtool" = yes; then
187fe5e51b7Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
188fe5e51b7Smrg  else
189fe5e51b7Smrg    "$@" -MDupdate "$tmpdepfile"
190fe5e51b7Smrg  fi
191fe5e51b7Smrg  stat=$?
192fe5e51b7Smrg  if test $stat -eq 0; then :
193fe5e51b7Smrg  else
194fe5e51b7Smrg    rm -f "$tmpdepfile"
195fe5e51b7Smrg    exit $stat
196fe5e51b7Smrg  fi
197fe5e51b7Smrg  rm -f "$depfile"
198fe5e51b7Smrg
199fe5e51b7Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
200fe5e51b7Smrg    echo "$object : \\" > "$depfile"
201fe5e51b7Smrg
202fe5e51b7Smrg    # Clip off the initial element (the dependent).  Don't try to be
203fe5e51b7Smrg    # clever and replace this with sed code, as IRIX sed won't handle
204fe5e51b7Smrg    # lines with more than a fixed number of characters (4096 in
205fe5e51b7Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206fe5e51b7Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
207fe5e51b7Smrg    # dependency line.
208fe5e51b7Smrg    tr ' ' '
209fe5e51b7Smrg' < "$tmpdepfile" \
210fe5e51b7Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211fe5e51b7Smrg    tr '
2120bb88ba4Smrg' ' ' >> "$depfile"
2130bb88ba4Smrg    echo >> "$depfile"
214fe5e51b7Smrg
215fe5e51b7Smrg    # The second pass generates a dummy entry for each header file.
216fe5e51b7Smrg    tr ' ' '
217fe5e51b7Smrg' < "$tmpdepfile" \
218fe5e51b7Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2190bb88ba4Smrg   >> "$depfile"
220fe5e51b7Smrg  else
221fe5e51b7Smrg    # The sourcefile does not contain any dependencies, so just
222fe5e51b7Smrg    # store a dummy comment line, to avoid errors with the Makefile
223fe5e51b7Smrg    # "include basename.Plo" scheme.
224fe5e51b7Smrg    echo "#dummy" > "$depfile"
225fe5e51b7Smrg  fi
226fe5e51b7Smrg  rm -f "$tmpdepfile"
227fe5e51b7Smrg  ;;
228fe5e51b7Smrg
229fe5e51b7Smrgaix)
230fe5e51b7Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
231fe5e51b7Smrg  # in a .u file.  In older versions, this file always lives in the
232fe5e51b7Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
233fe5e51b7Smrg  # start of each line; $object doesn't have directory information.
234fe5e51b7Smrg  # Version 6 uses the directory in both cases.
235eda3803bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236eda3803bSmrg  test "x$dir" = "x$object" && dir=
237eda3803bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
238fe5e51b7Smrg  if test "$libtool" = yes; then
239eda3803bSmrg    tmpdepfile1=$dir$base.u
240eda3803bSmrg    tmpdepfile2=$base.u
241eda3803bSmrg    tmpdepfile3=$dir.libs/$base.u
242fe5e51b7Smrg    "$@" -Wc,-M
243fe5e51b7Smrg  else
244eda3803bSmrg    tmpdepfile1=$dir$base.u
245eda3803bSmrg    tmpdepfile2=$dir$base.u
246eda3803bSmrg    tmpdepfile3=$dir$base.u
247fe5e51b7Smrg    "$@" -M
248fe5e51b7Smrg  fi
249fe5e51b7Smrg  stat=$?
250fe5e51b7Smrg
251fe5e51b7Smrg  if test $stat -eq 0; then :
252fe5e51b7Smrg  else
253eda3803bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
254fe5e51b7Smrg    exit $stat
255fe5e51b7Smrg  fi
256fe5e51b7Smrg
257eda3803bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258eda3803bSmrg  do
259eda3803bSmrg    test -f "$tmpdepfile" && break
260eda3803bSmrg  done
261fe5e51b7Smrg  if test -f "$tmpdepfile"; then
262fe5e51b7Smrg    # Each line is of the form `foo.o: dependent.h'.
263fe5e51b7Smrg    # Do two passes, one to just change these to
264fe5e51b7Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265eda3803bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266eda3803bSmrg    # That's a tab and a space in the [].
267eda3803bSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268fe5e51b7Smrg  else
269fe5e51b7Smrg    # The sourcefile does not contain any dependencies, so just
270fe5e51b7Smrg    # store a dummy comment line, to avoid errors with the Makefile
271fe5e51b7Smrg    # "include basename.Plo" scheme.
272fe5e51b7Smrg    echo "#dummy" > "$depfile"
273fe5e51b7Smrg  fi
274fe5e51b7Smrg  rm -f "$tmpdepfile"
275fe5e51b7Smrg  ;;
276fe5e51b7Smrg
277fe5e51b7Smrgicc)
278fe5e51b7Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
279fe5e51b7Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280fe5e51b7Smrg  # ICC 7.0 will fill foo.d with something like
281fe5e51b7Smrg  #    foo.o: sub/foo.c
282fe5e51b7Smrg  #    foo.o: sub/foo.h
283fe5e51b7Smrg  # which is wrong.  We want:
284fe5e51b7Smrg  #    sub/foo.o: sub/foo.c
285fe5e51b7Smrg  #    sub/foo.o: sub/foo.h
286fe5e51b7Smrg  #    sub/foo.c:
287fe5e51b7Smrg  #    sub/foo.h:
288fe5e51b7Smrg  # ICC 7.1 will output
289fe5e51b7Smrg  #    foo.o: sub/foo.c sub/foo.h
290fe5e51b7Smrg  # and will wrap long lines using \ :
291fe5e51b7Smrg  #    foo.o: sub/foo.c ... \
292fe5e51b7Smrg  #     sub/foo.h ... \
293fe5e51b7Smrg  #     ...
294fe5e51b7Smrg
295fe5e51b7Smrg  "$@" -MD -MF "$tmpdepfile"
296fe5e51b7Smrg  stat=$?
297fe5e51b7Smrg  if test $stat -eq 0; then :
298fe5e51b7Smrg  else
299fe5e51b7Smrg    rm -f "$tmpdepfile"
300fe5e51b7Smrg    exit $stat
301fe5e51b7Smrg  fi
302fe5e51b7Smrg  rm -f "$depfile"
303fe5e51b7Smrg  # Each line is of the form `foo.o: dependent.h',
304fe5e51b7Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
305fe5e51b7Smrg  # Do two passes, one to just change these to
306fe5e51b7Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307fe5e51b7Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308fe5e51b7Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309fe5e51b7Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
310fe5e51b7Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311fe5e51b7Smrg    sed -e 's/$/ :/' >> "$depfile"
312fe5e51b7Smrg  rm -f "$tmpdepfile"
313fe5e51b7Smrg  ;;
314fe5e51b7Smrg
315fe5e51b7Smrghp2)
316fe5e51b7Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317fe5e51b7Smrg  # compilers, which have integrated preprocessors.  The correct option
318fe5e51b7Smrg  # to use with these is +Maked; it writes dependencies to a file named
319fe5e51b7Smrg  # 'foo.d', which lands next to the object file, wherever that
320fe5e51b7Smrg  # happens to be.
321fe5e51b7Smrg  # Much of this is similar to the tru64 case; see comments there.
322fe5e51b7Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323fe5e51b7Smrg  test "x$dir" = "x$object" && dir=
324fe5e51b7Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325fe5e51b7Smrg  if test "$libtool" = yes; then
326fe5e51b7Smrg    tmpdepfile1=$dir$base.d
327fe5e51b7Smrg    tmpdepfile2=$dir.libs/$base.d
328fe5e51b7Smrg    "$@" -Wc,+Maked
329fe5e51b7Smrg  else
330fe5e51b7Smrg    tmpdepfile1=$dir$base.d
331fe5e51b7Smrg    tmpdepfile2=$dir$base.d
332fe5e51b7Smrg    "$@" +Maked
333fe5e51b7Smrg  fi
334fe5e51b7Smrg  stat=$?
335fe5e51b7Smrg  if test $stat -eq 0; then :
336fe5e51b7Smrg  else
337fe5e51b7Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338fe5e51b7Smrg     exit $stat
339fe5e51b7Smrg  fi
340fe5e51b7Smrg
341fe5e51b7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342fe5e51b7Smrg  do
343fe5e51b7Smrg    test -f "$tmpdepfile" && break
344fe5e51b7Smrg  done
345fe5e51b7Smrg  if test -f "$tmpdepfile"; then
346fe5e51b7Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347fe5e51b7Smrg    # Add `dependent.h:' lines.
3480bb88ba4Smrg    sed -ne '2,${
3490bb88ba4Smrg	       s/^ *//
3500bb88ba4Smrg	       s/ \\*$//
3510bb88ba4Smrg	       s/$/:/
3520bb88ba4Smrg	       p
3530bb88ba4Smrg	     }' "$tmpdepfile" >> "$depfile"
354fe5e51b7Smrg  else
355fe5e51b7Smrg    echo "#dummy" > "$depfile"
356fe5e51b7Smrg  fi
357fe5e51b7Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358fe5e51b7Smrg  ;;
359fe5e51b7Smrg
360fe5e51b7Smrgtru64)
361fe5e51b7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362fe5e51b7Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363fe5e51b7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364fe5e51b7Smrg   # dependencies in `foo.d' instead, so we check for that too.
365fe5e51b7Smrg   # Subdirectories are respected.
366fe5e51b7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367fe5e51b7Smrg   test "x$dir" = "x$object" && dir=
368fe5e51b7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369fe5e51b7Smrg
370fe5e51b7Smrg   if test "$libtool" = yes; then
371fe5e51b7Smrg      # With Tru64 cc, shared objects can also be used to make a
372fe5e51b7Smrg      # static library.  This mechanism is used in libtool 1.4 series to
373fe5e51b7Smrg      # handle both shared and static libraries in a single compilation.
374fe5e51b7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375fe5e51b7Smrg      #
376fe5e51b7Smrg      # With libtool 1.5 this exception was removed, and libtool now
377fe5e51b7Smrg      # generates 2 separate objects for the 2 libraries.  These two
378fe5e51b7Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
379fe5e51b7Smrg      # in $dir$base.o.d.  We have to check for both files, because
380fe5e51b7Smrg      # one of the two compilations can be disabled.  We should prefer
381fe5e51b7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382fe5e51b7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
383fe5e51b7Smrg      # the former would cause a distcleancheck panic.
384fe5e51b7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385fe5e51b7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386fe5e51b7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387fe5e51b7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388fe5e51b7Smrg      "$@" -Wc,-MD
389fe5e51b7Smrg   else
390fe5e51b7Smrg      tmpdepfile1=$dir$base.o.d
391fe5e51b7Smrg      tmpdepfile2=$dir$base.d
392fe5e51b7Smrg      tmpdepfile3=$dir$base.d
393fe5e51b7Smrg      tmpdepfile4=$dir$base.d
394fe5e51b7Smrg      "$@" -MD
395fe5e51b7Smrg   fi
396fe5e51b7Smrg
397fe5e51b7Smrg   stat=$?
398fe5e51b7Smrg   if test $stat -eq 0; then :
399fe5e51b7Smrg   else
400fe5e51b7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401fe5e51b7Smrg      exit $stat
402fe5e51b7Smrg   fi
403fe5e51b7Smrg
404fe5e51b7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405fe5e51b7Smrg   do
406fe5e51b7Smrg     test -f "$tmpdepfile" && break
407fe5e51b7Smrg   done
408fe5e51b7Smrg   if test -f "$tmpdepfile"; then
409fe5e51b7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410fe5e51b7Smrg      # That's a tab and a space in the [].
411fe5e51b7Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412fe5e51b7Smrg   else
413fe5e51b7Smrg      echo "#dummy" > "$depfile"
414fe5e51b7Smrg   fi
415fe5e51b7Smrg   rm -f "$tmpdepfile"
416fe5e51b7Smrg   ;;
417fe5e51b7Smrg
4180bb88ba4Smrgmsvc7)
4190bb88ba4Smrg  if test "$libtool" = yes; then
4200bb88ba4Smrg    showIncludes=-Wc,-showIncludes
4210bb88ba4Smrg  else
4220bb88ba4Smrg    showIncludes=-showIncludes
4230bb88ba4Smrg  fi
4240bb88ba4Smrg  "$@" $showIncludes > "$tmpdepfile"
4250bb88ba4Smrg  stat=$?
4260bb88ba4Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
4270bb88ba4Smrg  if test "$stat" = 0; then :
4280bb88ba4Smrg  else
4290bb88ba4Smrg    rm -f "$tmpdepfile"
4300bb88ba4Smrg    exit $stat
4310bb88ba4Smrg  fi
4320bb88ba4Smrg  rm -f "$depfile"
4330bb88ba4Smrg  echo "$object : \\" > "$depfile"
4340bb88ba4Smrg  # The first sed program below extracts the file names and escapes
4350bb88ba4Smrg  # backslashes for cygpath.  The second sed program outputs the file
4360bb88ba4Smrg  # name when reading, but also accumulates all include files in the
4370bb88ba4Smrg  # hold buffer in order to output them again at the end.  This only
4380bb88ba4Smrg  # works with sed implementations that can handle large buffers.
4390bb88ba4Smrg  sed < "$tmpdepfile" -n '
4400bb88ba4Smrg/^Note: including file:  *\(.*\)/ {
4410bb88ba4Smrg  s//\1/
4420bb88ba4Smrg  s/\\/\\\\/g
4430bb88ba4Smrg  p
4440bb88ba4Smrg}' | $cygpath_u | sort -u | sed -n '
4450bb88ba4Smrgs/ /\\ /g
4460bb88ba4Smrgs/\(.*\)/	\1 \\/p
4470bb88ba4Smrgs/.\(.*\) \\/\1:/
4480bb88ba4SmrgH
4490bb88ba4Smrg$ {
4500bb88ba4Smrg  s/.*/	/
4510bb88ba4Smrg  G
4520bb88ba4Smrg  p
4530bb88ba4Smrg}' >> "$depfile"
4540bb88ba4Smrg  rm -f "$tmpdepfile"
4550bb88ba4Smrg  ;;
4560bb88ba4Smrg
4570bb88ba4Smrgmsvc7msys)
4580bb88ba4Smrg  # This case exists only to let depend.m4 do its work.  It works by
4590bb88ba4Smrg  # looking at the text of this script.  This case will never be run,
4600bb88ba4Smrg  # since it is checked for above.
4610bb88ba4Smrg  exit 1
4620bb88ba4Smrg  ;;
4630bb88ba4Smrg
464fe5e51b7Smrg#nosideeffect)
465fe5e51b7Smrg  # This comment above is used by automake to tell side-effect
466fe5e51b7Smrg  # dependency tracking mechanisms from slower ones.
467fe5e51b7Smrg
468fe5e51b7Smrgdashmstdout)
469fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
470fe5e51b7Smrg  # always write the preprocessed file to stdout, regardless of -o.
471fe5e51b7Smrg  "$@" || exit $?
472fe5e51b7Smrg
473fe5e51b7Smrg  # Remove the call to Libtool.
474fe5e51b7Smrg  if test "$libtool" = yes; then
4750bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
476fe5e51b7Smrg      shift
477fe5e51b7Smrg    done
478fe5e51b7Smrg    shift
479fe5e51b7Smrg  fi
480fe5e51b7Smrg
481fe5e51b7Smrg  # Remove `-o $object'.
482fe5e51b7Smrg  IFS=" "
483fe5e51b7Smrg  for arg
484fe5e51b7Smrg  do
485fe5e51b7Smrg    case $arg in
486fe5e51b7Smrg    -o)
487fe5e51b7Smrg      shift
488fe5e51b7Smrg      ;;
489fe5e51b7Smrg    $object)
490fe5e51b7Smrg      shift
491fe5e51b7Smrg      ;;
492fe5e51b7Smrg    *)
493fe5e51b7Smrg      set fnord "$@" "$arg"
494fe5e51b7Smrg      shift # fnord
495fe5e51b7Smrg      shift # $arg
496fe5e51b7Smrg      ;;
497fe5e51b7Smrg    esac
498fe5e51b7Smrg  done
499fe5e51b7Smrg
500fe5e51b7Smrg  test -z "$dashmflag" && dashmflag=-M
501fe5e51b7Smrg  # Require at least two characters before searching for `:'
502fe5e51b7Smrg  # in the target name.  This is to cope with DOS-style filenames:
503fe5e51b7Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
504fe5e51b7Smrg  "$@" $dashmflag |
505fe5e51b7Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
506fe5e51b7Smrg  rm -f "$depfile"
507fe5e51b7Smrg  cat < "$tmpdepfile" > "$depfile"
508fe5e51b7Smrg  tr ' ' '
509fe5e51b7Smrg' < "$tmpdepfile" | \
510fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
511fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
512fe5e51b7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
513fe5e51b7Smrg  rm -f "$tmpdepfile"
514fe5e51b7Smrg  ;;
515fe5e51b7Smrg
516fe5e51b7SmrgdashXmstdout)
517fe5e51b7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
518fe5e51b7Smrg  # run, as this mode is specially recognized in the preamble.
519fe5e51b7Smrg  exit 1
520fe5e51b7Smrg  ;;
521fe5e51b7Smrg
522fe5e51b7Smrgmakedepend)
523fe5e51b7Smrg  "$@" || exit $?
524fe5e51b7Smrg  # Remove any Libtool call
525fe5e51b7Smrg  if test "$libtool" = yes; then
5260bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
527fe5e51b7Smrg      shift
528fe5e51b7Smrg    done
529fe5e51b7Smrg    shift
530fe5e51b7Smrg  fi
531fe5e51b7Smrg  # X makedepend
532fe5e51b7Smrg  shift
5330bb88ba4Smrg  cleared=no eat=no
5340bb88ba4Smrg  for arg
5350bb88ba4Smrg  do
536fe5e51b7Smrg    case $cleared in
537fe5e51b7Smrg    no)
538fe5e51b7Smrg      set ""; shift
539fe5e51b7Smrg      cleared=yes ;;
540fe5e51b7Smrg    esac
5410bb88ba4Smrg    if test $eat = yes; then
5420bb88ba4Smrg      eat=no
5430bb88ba4Smrg      continue
5440bb88ba4Smrg    fi
545fe5e51b7Smrg    case "$arg" in
546fe5e51b7Smrg    -D*|-I*)
547fe5e51b7Smrg      set fnord "$@" "$arg"; shift ;;
548fe5e51b7Smrg    # Strip any option that makedepend may not understand.  Remove
549fe5e51b7Smrg    # the object too, otherwise makedepend will parse it as a source file.
5500bb88ba4Smrg    -arch)
5510bb88ba4Smrg      eat=yes ;;
552fe5e51b7Smrg    -*|$object)
553fe5e51b7Smrg      ;;
554fe5e51b7Smrg    *)
555fe5e51b7Smrg      set fnord "$@" "$arg"; shift ;;
556fe5e51b7Smrg    esac
557fe5e51b7Smrg  done
5580bb88ba4Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
559fe5e51b7Smrg  touch "$tmpdepfile"
560fe5e51b7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
561fe5e51b7Smrg  rm -f "$depfile"
5620bb88ba4Smrg  # makedepend may prepend the VPATH from the source file name to the object.
5630bb88ba4Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5640bb88ba4Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565fe5e51b7Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566fe5e51b7Smrg' | \
567fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
568fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
569fe5e51b7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
570fe5e51b7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
571fe5e51b7Smrg  ;;
572fe5e51b7Smrg
573fe5e51b7Smrgcpp)
574fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
575fe5e51b7Smrg  # always write the preprocessed file to stdout.
576fe5e51b7Smrg  "$@" || exit $?
577fe5e51b7Smrg
578fe5e51b7Smrg  # Remove the call to Libtool.
579fe5e51b7Smrg  if test "$libtool" = yes; then
5800bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
581fe5e51b7Smrg      shift
582fe5e51b7Smrg    done
583fe5e51b7Smrg    shift
584fe5e51b7Smrg  fi
585fe5e51b7Smrg
586fe5e51b7Smrg  # Remove `-o $object'.
587fe5e51b7Smrg  IFS=" "
588fe5e51b7Smrg  for arg
589fe5e51b7Smrg  do
590fe5e51b7Smrg    case $arg in
591fe5e51b7Smrg    -o)
592fe5e51b7Smrg      shift
593fe5e51b7Smrg      ;;
594fe5e51b7Smrg    $object)
595fe5e51b7Smrg      shift
596fe5e51b7Smrg      ;;
597fe5e51b7Smrg    *)
598fe5e51b7Smrg      set fnord "$@" "$arg"
599fe5e51b7Smrg      shift # fnord
600fe5e51b7Smrg      shift # $arg
601fe5e51b7Smrg      ;;
602fe5e51b7Smrg    esac
603fe5e51b7Smrg  done
604fe5e51b7Smrg
605fe5e51b7Smrg  "$@" -E |
606fe5e51b7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607fe5e51b7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608fe5e51b7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
609fe5e51b7Smrg  rm -f "$depfile"
610fe5e51b7Smrg  echo "$object : \\" > "$depfile"
611fe5e51b7Smrg  cat < "$tmpdepfile" >> "$depfile"
612fe5e51b7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
613fe5e51b7Smrg  rm -f "$tmpdepfile"
614fe5e51b7Smrg  ;;
615fe5e51b7Smrg
616fe5e51b7Smrgmsvisualcpp)
617fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
6180bb88ba4Smrg  # always write the preprocessed file to stdout.
619fe5e51b7Smrg  "$@" || exit $?
6200bb88ba4Smrg
6210bb88ba4Smrg  # Remove the call to Libtool.
6220bb88ba4Smrg  if test "$libtool" = yes; then
6230bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
6240bb88ba4Smrg      shift
6250bb88ba4Smrg    done
6260bb88ba4Smrg    shift
6270bb88ba4Smrg  fi
6280bb88ba4Smrg
629fe5e51b7Smrg  IFS=" "
630fe5e51b7Smrg  for arg
631fe5e51b7Smrg  do
632fe5e51b7Smrg    case "$arg" in
6330bb88ba4Smrg    -o)
6340bb88ba4Smrg      shift
6350bb88ba4Smrg      ;;
6360bb88ba4Smrg    $object)
6370bb88ba4Smrg      shift
6380bb88ba4Smrg      ;;
639fe5e51b7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640fe5e51b7Smrg	set fnord "$@"
641fe5e51b7Smrg	shift
642fe5e51b7Smrg	shift
643fe5e51b7Smrg	;;
644fe5e51b7Smrg    *)
645fe5e51b7Smrg	set fnord "$@" "$arg"
646fe5e51b7Smrg	shift
647fe5e51b7Smrg	shift
648fe5e51b7Smrg	;;
649fe5e51b7Smrg    esac
650fe5e51b7Smrg  done
6510bb88ba4Smrg  "$@" -E 2>/dev/null |
6520bb88ba4Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
653fe5e51b7Smrg  rm -f "$depfile"
654fe5e51b7Smrg  echo "$object : \\" > "$depfile"
6550bb88ba4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656fe5e51b7Smrg  echo "	" >> "$depfile"
6570bb88ba4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
658fe5e51b7Smrg  rm -f "$tmpdepfile"
659fe5e51b7Smrg  ;;
660fe5e51b7Smrg
6610bb88ba4Smrgmsvcmsys)
6620bb88ba4Smrg  # This case exists only to let depend.m4 do its work.  It works by
6630bb88ba4Smrg  # looking at the text of this script.  This case will never be run,
6640bb88ba4Smrg  # since it is checked for above.
6650bb88ba4Smrg  exit 1
6660bb88ba4Smrg  ;;
6670bb88ba4Smrg
668fe5e51b7Smrgnone)
669fe5e51b7Smrg  exec "$@"
670fe5e51b7Smrg  ;;
671fe5e51b7Smrg
672fe5e51b7Smrg*)
673fe5e51b7Smrg  echo "Unknown depmode $depmode" 1>&2
674fe5e51b7Smrg  exit 1
675fe5e51b7Smrg  ;;
676fe5e51b7Smrgesac
677fe5e51b7Smrg
678fe5e51b7Smrgexit 0
679fe5e51b7Smrg
680fe5e51b7Smrg# Local Variables:
681fe5e51b7Smrg# mode: shell-script
682fe5e51b7Smrg# sh-indentation: 2
683fe5e51b7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
684fe5e51b7Smrg# time-stamp-start: "scriptversion="
685fe5e51b7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6860bb88ba4Smrg# time-stamp-time-zone: "UTC"
6870bb88ba4Smrg# time-stamp-end: "; # UTC"
688fe5e51b7Smrg# End:
689