depcomp revision acd6767f
1fe5e51b7Smrg#! /bin/sh
2fe5e51b7Smrg# depcomp - compile a program generating dependencies as side-effects
3fe5e51b7Smrg
4acd6767fSmrgscriptversion=2012-03-27.16; # UTC
5fe5e51b7Smrg
6acd6767fSmrg# Copyright (C) 1999-2012 Free Software Foundation, Inc.
7fe5e51b7Smrg
8fe5e51b7Smrg# This program is free software; you can redistribute it and/or modify
9fe5e51b7Smrg# it under the terms of the GNU General Public License as published by
10fe5e51b7Smrg# the Free Software Foundation; either version 2, or (at your option)
11fe5e51b7Smrg# any later version.
12fe5e51b7Smrg
13fe5e51b7Smrg# This program is distributed in the hope that it will be useful,
14fe5e51b7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
15fe5e51b7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16fe5e51b7Smrg# GNU General Public License for more details.
17fe5e51b7Smrg
18fe5e51b7Smrg# You should have received a copy of the GNU General Public License
190bb88ba4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20fe5e51b7Smrg
21fe5e51b7Smrg# As a special exception to the GNU General Public License, if you
22fe5e51b7Smrg# distribute this file as part of a program that contains a
23fe5e51b7Smrg# configuration script generated by Autoconf, you may include it under
24fe5e51b7Smrg# the same distribution terms that you use for the rest of that program.
25fe5e51b7Smrg
26fe5e51b7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27fe5e51b7Smrg
28fe5e51b7Smrgcase $1 in
29fe5e51b7Smrg  '')
30acd6767fSmrg     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31fe5e51b7Smrg     exit 1;
32fe5e51b7Smrg     ;;
33fe5e51b7Smrg  -h | --h*)
34fe5e51b7Smrg    cat <<\EOF
35fe5e51b7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36fe5e51b7Smrg
37fe5e51b7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
38fe5e51b7Smrgas side-effects.
39fe5e51b7Smrg
40fe5e51b7SmrgEnvironment variables:
41fe5e51b7Smrg  depmode     Dependency tracking mode.
42acd6767fSmrg  source      Source file read by 'PROGRAMS ARGS'.
43acd6767fSmrg  object      Object file output by 'PROGRAMS ARGS'.
44fe5e51b7Smrg  DEPDIR      directory where to store dependencies.
45fe5e51b7Smrg  depfile     Dependency file to output.
460bb88ba4Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
47fe5e51b7Smrg  libtool     Whether libtool is used (yes/no).
48fe5e51b7Smrg
49fe5e51b7SmrgReport bugs to <bug-automake@gnu.org>.
50fe5e51b7SmrgEOF
51fe5e51b7Smrg    exit $?
52fe5e51b7Smrg    ;;
53fe5e51b7Smrg  -v | --v*)
54fe5e51b7Smrg    echo "depcomp $scriptversion"
55fe5e51b7Smrg    exit $?
56fe5e51b7Smrg    ;;
57fe5e51b7Smrgesac
58fe5e51b7Smrg
59acd6767fSmrg# A tabulation character.
60acd6767fSmrgtab='	'
61acd6767fSmrg# A newline character.
62acd6767fSmrgnl='
63acd6767fSmrg'
64acd6767fSmrg
65fe5e51b7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
66fe5e51b7Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
67fe5e51b7Smrg  exit 1
68fe5e51b7Smrgfi
69fe5e51b7Smrg
70fe5e51b7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
71fe5e51b7Smrgdepfile=${depfile-`echo "$object" |
72fe5e51b7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
73fe5e51b7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
74fe5e51b7Smrg
75fe5e51b7Smrgrm -f "$tmpdepfile"
76fe5e51b7Smrg
77fe5e51b7Smrg# Some modes work just like other modes, but use different flags.  We
78fe5e51b7Smrg# parameterize here, but still list the modes in the big case below,
79fe5e51b7Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
80fe5e51b7Smrg# here, because this file can only contain one case statement.
81fe5e51b7Smrgif test "$depmode" = hp; then
82fe5e51b7Smrg  # HP compiler uses -M and no extra arg.
83fe5e51b7Smrg  gccflag=-M
84fe5e51b7Smrg  depmode=gcc
85fe5e51b7Smrgfi
86fe5e51b7Smrg
87fe5e51b7Smrgif test "$depmode" = dashXmstdout; then
88fe5e51b7Smrg   # This is just like dashmstdout with a different argument.
89fe5e51b7Smrg   dashmflag=-xM
90fe5e51b7Smrg   depmode=dashmstdout
91fe5e51b7Smrgfi
92fe5e51b7Smrg
930bb88ba4Smrgcygpath_u="cygpath -u -f -"
940bb88ba4Smrgif test "$depmode" = msvcmsys; then
950bb88ba4Smrg   # This is just like msvisualcpp but w/o cygpath translation.
960bb88ba4Smrg   # Just convert the backslash-escaped backslashes to single forward
970bb88ba4Smrg   # slashes to satisfy depend.m4
980bb88ba4Smrg   cygpath_u='sed s,\\\\,/,g'
990bb88ba4Smrg   depmode=msvisualcpp
1000bb88ba4Smrgfi
1010bb88ba4Smrg
1020bb88ba4Smrgif test "$depmode" = msvc7msys; then
1030bb88ba4Smrg   # This is just like msvc7 but w/o cygpath translation.
1040bb88ba4Smrg   # Just convert the backslash-escaped backslashes to single forward
1050bb88ba4Smrg   # slashes to satisfy depend.m4
1060bb88ba4Smrg   cygpath_u='sed s,\\\\,/,g'
1070bb88ba4Smrg   depmode=msvc7
1080bb88ba4Smrgfi
1090bb88ba4Smrg
110acd6767fSmrgif test "$depmode" = xlc; then
111acd6767fSmrg   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
112acd6767fSmrg   gccflag=-qmakedep=gcc,-MF
113acd6767fSmrg   depmode=gcc
114acd6767fSmrgfi
115acd6767fSmrg
116fe5e51b7Smrgcase "$depmode" in
117fe5e51b7Smrggcc3)
118fe5e51b7Smrg## gcc 3 implements dependency tracking that does exactly what
119fe5e51b7Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
120fe5e51b7Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
121fe5e51b7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
122fe5e51b7Smrg## the command line argument order; so add the flags where they
123fe5e51b7Smrg## appear in depend2.am.  Note that the slowdown incurred here
124fe5e51b7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
125fe5e51b7Smrg  for arg
126fe5e51b7Smrg  do
127fe5e51b7Smrg    case $arg in
128fe5e51b7Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
129fe5e51b7Smrg    *)  set fnord "$@" "$arg" ;;
130fe5e51b7Smrg    esac
131fe5e51b7Smrg    shift # fnord
132fe5e51b7Smrg    shift # $arg
133fe5e51b7Smrg  done
134fe5e51b7Smrg  "$@"
135fe5e51b7Smrg  stat=$?
136fe5e51b7Smrg  if test $stat -eq 0; then :
137fe5e51b7Smrg  else
138fe5e51b7Smrg    rm -f "$tmpdepfile"
139fe5e51b7Smrg    exit $stat
140fe5e51b7Smrg  fi
141fe5e51b7Smrg  mv "$tmpdepfile" "$depfile"
142fe5e51b7Smrg  ;;
143fe5e51b7Smrg
144fe5e51b7Smrggcc)
145fe5e51b7Smrg## There are various ways to get dependency output from gcc.  Here's
146fe5e51b7Smrg## why we pick this rather obscure method:
147fe5e51b7Smrg## - Don't want to use -MD because we'd like the dependencies to end
148fe5e51b7Smrg##   up in a subdir.  Having to rename by hand is ugly.
149fe5e51b7Smrg##   (We might end up doing this anyway to support other compilers.)
150fe5e51b7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
151fe5e51b7Smrg##   -MM, not -M (despite what the docs say).
152fe5e51b7Smrg## - Using -M directly means running the compiler twice (even worse
153fe5e51b7Smrg##   than renaming).
154fe5e51b7Smrg  if test -z "$gccflag"; then
155fe5e51b7Smrg    gccflag=-MD,
156fe5e51b7Smrg  fi
157fe5e51b7Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
158fe5e51b7Smrg  stat=$?
159fe5e51b7Smrg  if test $stat -eq 0; then :
160fe5e51b7Smrg  else
161fe5e51b7Smrg    rm -f "$tmpdepfile"
162fe5e51b7Smrg    exit $stat
163fe5e51b7Smrg  fi
164fe5e51b7Smrg  rm -f "$depfile"
165fe5e51b7Smrg  echo "$object : \\" > "$depfile"
166fe5e51b7Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
167fe5e51b7Smrg## The second -e expression handles DOS-style file names with drive letters.
168fe5e51b7Smrg  sed -e 's/^[^:]*: / /' \
169fe5e51b7Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
170acd6767fSmrg## This next piece of magic avoids the "deleted header file" problem.
171fe5e51b7Smrg## The problem is that when a header file which appears in a .P file
172fe5e51b7Smrg## is deleted, the dependency causes make to die (because there is
173fe5e51b7Smrg## typically no way to rebuild the header).  We avoid this by adding
174fe5e51b7Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
175fe5e51b7Smrg## this for us directly.
176acd6767fSmrg  tr ' ' "$nl" < "$tmpdepfile" |
177acd6767fSmrg## Some versions of gcc put a space before the ':'.  On the theory
178fe5e51b7Smrg## that the space means something, we add a space to the output as
1790bb88ba4Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1800bb88ba4Smrg## to the object.  Take care to not repeat it in the output.
181fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
182fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1830bb88ba4Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1840bb88ba4Smrg      | sed -e 's/$/ :/' >> "$depfile"
185fe5e51b7Smrg  rm -f "$tmpdepfile"
186fe5e51b7Smrg  ;;
187fe5e51b7Smrg
188fe5e51b7Smrghp)
189fe5e51b7Smrg  # This case exists only to let depend.m4 do its work.  It works by
190fe5e51b7Smrg  # looking at the text of this script.  This case will never be run,
191fe5e51b7Smrg  # since it is checked for above.
192fe5e51b7Smrg  exit 1
193fe5e51b7Smrg  ;;
194fe5e51b7Smrg
195fe5e51b7Smrgsgi)
196fe5e51b7Smrg  if test "$libtool" = yes; then
197fe5e51b7Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
198fe5e51b7Smrg  else
199fe5e51b7Smrg    "$@" -MDupdate "$tmpdepfile"
200fe5e51b7Smrg  fi
201fe5e51b7Smrg  stat=$?
202fe5e51b7Smrg  if test $stat -eq 0; then :
203fe5e51b7Smrg  else
204fe5e51b7Smrg    rm -f "$tmpdepfile"
205fe5e51b7Smrg    exit $stat
206fe5e51b7Smrg  fi
207fe5e51b7Smrg  rm -f "$depfile"
208fe5e51b7Smrg
209fe5e51b7Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
210fe5e51b7Smrg    echo "$object : \\" > "$depfile"
211fe5e51b7Smrg
212fe5e51b7Smrg    # Clip off the initial element (the dependent).  Don't try to be
213fe5e51b7Smrg    # clever and replace this with sed code, as IRIX sed won't handle
214fe5e51b7Smrg    # lines with more than a fixed number of characters (4096 in
215fe5e51b7Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
216acd6767fSmrg    # the IRIX cc adds comments like '#:fec' to the end of the
217fe5e51b7Smrg    # dependency line.
218acd6767fSmrg    tr ' ' "$nl" < "$tmpdepfile" \
219fe5e51b7Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
220acd6767fSmrg    tr "$nl" ' ' >> "$depfile"
2210bb88ba4Smrg    echo >> "$depfile"
222fe5e51b7Smrg
223fe5e51b7Smrg    # The second pass generates a dummy entry for each header file.
224acd6767fSmrg    tr ' ' "$nl" < "$tmpdepfile" \
225fe5e51b7Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2260bb88ba4Smrg   >> "$depfile"
227fe5e51b7Smrg  else
228fe5e51b7Smrg    # The sourcefile does not contain any dependencies, so just
229fe5e51b7Smrg    # store a dummy comment line, to avoid errors with the Makefile
230fe5e51b7Smrg    # "include basename.Plo" scheme.
231fe5e51b7Smrg    echo "#dummy" > "$depfile"
232fe5e51b7Smrg  fi
233fe5e51b7Smrg  rm -f "$tmpdepfile"
234fe5e51b7Smrg  ;;
235fe5e51b7Smrg
236acd6767fSmrgxlc)
237acd6767fSmrg  # This case exists only to let depend.m4 do its work.  It works by
238acd6767fSmrg  # looking at the text of this script.  This case will never be run,
239acd6767fSmrg  # since it is checked for above.
240acd6767fSmrg  exit 1
241acd6767fSmrg  ;;
242acd6767fSmrg
243fe5e51b7Smrgaix)
244fe5e51b7Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
245fe5e51b7Smrg  # in a .u file.  In older versions, this file always lives in the
246acd6767fSmrg  # current directory.  Also, the AIX compiler puts '$object:' at the
247fe5e51b7Smrg  # start of each line; $object doesn't have directory information.
248fe5e51b7Smrg  # Version 6 uses the directory in both cases.
249eda3803bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
250eda3803bSmrg  test "x$dir" = "x$object" && dir=
251eda3803bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
252fe5e51b7Smrg  if test "$libtool" = yes; then
253eda3803bSmrg    tmpdepfile1=$dir$base.u
254eda3803bSmrg    tmpdepfile2=$base.u
255eda3803bSmrg    tmpdepfile3=$dir.libs/$base.u
256fe5e51b7Smrg    "$@" -Wc,-M
257fe5e51b7Smrg  else
258eda3803bSmrg    tmpdepfile1=$dir$base.u
259eda3803bSmrg    tmpdepfile2=$dir$base.u
260eda3803bSmrg    tmpdepfile3=$dir$base.u
261fe5e51b7Smrg    "$@" -M
262fe5e51b7Smrg  fi
263fe5e51b7Smrg  stat=$?
264fe5e51b7Smrg
265fe5e51b7Smrg  if test $stat -eq 0; then :
266fe5e51b7Smrg  else
267eda3803bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
268fe5e51b7Smrg    exit $stat
269fe5e51b7Smrg  fi
270fe5e51b7Smrg
271eda3803bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
272eda3803bSmrg  do
273eda3803bSmrg    test -f "$tmpdepfile" && break
274eda3803bSmrg  done
275fe5e51b7Smrg  if test -f "$tmpdepfile"; then
276acd6767fSmrg    # Each line is of the form 'foo.o: dependent.h'.
277fe5e51b7Smrg    # Do two passes, one to just change these to
278acd6767fSmrg    # '$object: dependent.h' and one to simply 'dependent.h:'.
279eda3803bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
280acd6767fSmrg    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
281fe5e51b7Smrg  else
282fe5e51b7Smrg    # The sourcefile does not contain any dependencies, so just
283fe5e51b7Smrg    # store a dummy comment line, to avoid errors with the Makefile
284fe5e51b7Smrg    # "include basename.Plo" scheme.
285fe5e51b7Smrg    echo "#dummy" > "$depfile"
286fe5e51b7Smrg  fi
287fe5e51b7Smrg  rm -f "$tmpdepfile"
288fe5e51b7Smrg  ;;
289fe5e51b7Smrg
290fe5e51b7Smrgicc)
291acd6767fSmrg  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
292acd6767fSmrg  # However on
293acd6767fSmrg  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
294fe5e51b7Smrg  # ICC 7.0 will fill foo.d with something like
295fe5e51b7Smrg  #    foo.o: sub/foo.c
296fe5e51b7Smrg  #    foo.o: sub/foo.h
297acd6767fSmrg  # which is wrong.  We want
298fe5e51b7Smrg  #    sub/foo.o: sub/foo.c
299fe5e51b7Smrg  #    sub/foo.o: sub/foo.h
300fe5e51b7Smrg  #    sub/foo.c:
301fe5e51b7Smrg  #    sub/foo.h:
302fe5e51b7Smrg  # ICC 7.1 will output
303fe5e51b7Smrg  #    foo.o: sub/foo.c sub/foo.h
304acd6767fSmrg  # and will wrap long lines using '\':
305fe5e51b7Smrg  #    foo.o: sub/foo.c ... \
306fe5e51b7Smrg  #     sub/foo.h ... \
307fe5e51b7Smrg  #     ...
308acd6767fSmrg  # tcc 0.9.26 (FIXME still under development at the moment of writing)
309acd6767fSmrg  # will emit a similar output, but also prepend the continuation lines
310acd6767fSmrg  # with horizontal tabulation characters.
311fe5e51b7Smrg  "$@" -MD -MF "$tmpdepfile"
312fe5e51b7Smrg  stat=$?
313fe5e51b7Smrg  if test $stat -eq 0; then :
314fe5e51b7Smrg  else
315fe5e51b7Smrg    rm -f "$tmpdepfile"
316fe5e51b7Smrg    exit $stat
317fe5e51b7Smrg  fi
318fe5e51b7Smrg  rm -f "$depfile"
319acd6767fSmrg  # Each line is of the form 'foo.o: dependent.h',
320acd6767fSmrg  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
321fe5e51b7Smrg  # Do two passes, one to just change these to
322acd6767fSmrg  # '$object: dependent.h' and one to simply 'dependent.h:'.
323acd6767fSmrg  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
324acd6767fSmrg    < "$tmpdepfile" > "$depfile"
325acd6767fSmrg  sed '
326acd6767fSmrg    s/[ '"$tab"'][ '"$tab"']*/ /g
327acd6767fSmrg    s/^ *//
328acd6767fSmrg    s/ *\\*$//
329acd6767fSmrg    s/^[^:]*: *//
330acd6767fSmrg    /^$/d
331acd6767fSmrg    /:$/d
332acd6767fSmrg    s/$/ :/
333acd6767fSmrg  ' < "$tmpdepfile" >> "$depfile"
334fe5e51b7Smrg  rm -f "$tmpdepfile"
335fe5e51b7Smrg  ;;
336fe5e51b7Smrg
337fe5e51b7Smrghp2)
338fe5e51b7Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
339fe5e51b7Smrg  # compilers, which have integrated preprocessors.  The correct option
340fe5e51b7Smrg  # to use with these is +Maked; it writes dependencies to a file named
341fe5e51b7Smrg  # 'foo.d', which lands next to the object file, wherever that
342fe5e51b7Smrg  # happens to be.
343fe5e51b7Smrg  # Much of this is similar to the tru64 case; see comments there.
344fe5e51b7Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345fe5e51b7Smrg  test "x$dir" = "x$object" && dir=
346fe5e51b7Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347fe5e51b7Smrg  if test "$libtool" = yes; then
348fe5e51b7Smrg    tmpdepfile1=$dir$base.d
349fe5e51b7Smrg    tmpdepfile2=$dir.libs/$base.d
350fe5e51b7Smrg    "$@" -Wc,+Maked
351fe5e51b7Smrg  else
352fe5e51b7Smrg    tmpdepfile1=$dir$base.d
353fe5e51b7Smrg    tmpdepfile2=$dir$base.d
354fe5e51b7Smrg    "$@" +Maked
355fe5e51b7Smrg  fi
356fe5e51b7Smrg  stat=$?
357fe5e51b7Smrg  if test $stat -eq 0; then :
358fe5e51b7Smrg  else
359fe5e51b7Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
360fe5e51b7Smrg     exit $stat
361fe5e51b7Smrg  fi
362fe5e51b7Smrg
363fe5e51b7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
364fe5e51b7Smrg  do
365fe5e51b7Smrg    test -f "$tmpdepfile" && break
366fe5e51b7Smrg  done
367fe5e51b7Smrg  if test -f "$tmpdepfile"; then
368fe5e51b7Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
369acd6767fSmrg    # Add 'dependent.h:' lines.
3700bb88ba4Smrg    sed -ne '2,${
3710bb88ba4Smrg	       s/^ *//
3720bb88ba4Smrg	       s/ \\*$//
3730bb88ba4Smrg	       s/$/:/
3740bb88ba4Smrg	       p
3750bb88ba4Smrg	     }' "$tmpdepfile" >> "$depfile"
376fe5e51b7Smrg  else
377fe5e51b7Smrg    echo "#dummy" > "$depfile"
378fe5e51b7Smrg  fi
379fe5e51b7Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
380fe5e51b7Smrg  ;;
381fe5e51b7Smrg
382fe5e51b7Smrgtru64)
383fe5e51b7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
384acd6767fSmrg   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
385fe5e51b7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
386acd6767fSmrg   # dependencies in 'foo.d' instead, so we check for that too.
387fe5e51b7Smrg   # Subdirectories are respected.
388fe5e51b7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
389fe5e51b7Smrg   test "x$dir" = "x$object" && dir=
390fe5e51b7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
391fe5e51b7Smrg
392fe5e51b7Smrg   if test "$libtool" = yes; then
393fe5e51b7Smrg      # With Tru64 cc, shared objects can also be used to make a
394fe5e51b7Smrg      # static library.  This mechanism is used in libtool 1.4 series to
395fe5e51b7Smrg      # handle both shared and static libraries in a single compilation.
396fe5e51b7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
397fe5e51b7Smrg      #
398fe5e51b7Smrg      # With libtool 1.5 this exception was removed, and libtool now
399fe5e51b7Smrg      # generates 2 separate objects for the 2 libraries.  These two
400fe5e51b7Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
401fe5e51b7Smrg      # in $dir$base.o.d.  We have to check for both files, because
402fe5e51b7Smrg      # one of the two compilations can be disabled.  We should prefer
403fe5e51b7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
404fe5e51b7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
405fe5e51b7Smrg      # the former would cause a distcleancheck panic.
406fe5e51b7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
407fe5e51b7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
408fe5e51b7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
409fe5e51b7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
410fe5e51b7Smrg      "$@" -Wc,-MD
411fe5e51b7Smrg   else
412fe5e51b7Smrg      tmpdepfile1=$dir$base.o.d
413fe5e51b7Smrg      tmpdepfile2=$dir$base.d
414fe5e51b7Smrg      tmpdepfile3=$dir$base.d
415fe5e51b7Smrg      tmpdepfile4=$dir$base.d
416fe5e51b7Smrg      "$@" -MD
417fe5e51b7Smrg   fi
418fe5e51b7Smrg
419fe5e51b7Smrg   stat=$?
420fe5e51b7Smrg   if test $stat -eq 0; then :
421fe5e51b7Smrg   else
422fe5e51b7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
423fe5e51b7Smrg      exit $stat
424fe5e51b7Smrg   fi
425fe5e51b7Smrg
426fe5e51b7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
427fe5e51b7Smrg   do
428fe5e51b7Smrg     test -f "$tmpdepfile" && break
429fe5e51b7Smrg   done
430fe5e51b7Smrg   if test -f "$tmpdepfile"; then
431fe5e51b7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
432acd6767fSmrg      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
433fe5e51b7Smrg   else
434fe5e51b7Smrg      echo "#dummy" > "$depfile"
435fe5e51b7Smrg   fi
436fe5e51b7Smrg   rm -f "$tmpdepfile"
437fe5e51b7Smrg   ;;
438fe5e51b7Smrg
4390bb88ba4Smrgmsvc7)
4400bb88ba4Smrg  if test "$libtool" = yes; then
4410bb88ba4Smrg    showIncludes=-Wc,-showIncludes
4420bb88ba4Smrg  else
4430bb88ba4Smrg    showIncludes=-showIncludes
4440bb88ba4Smrg  fi
4450bb88ba4Smrg  "$@" $showIncludes > "$tmpdepfile"
4460bb88ba4Smrg  stat=$?
4470bb88ba4Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
4480bb88ba4Smrg  if test "$stat" = 0; then :
4490bb88ba4Smrg  else
4500bb88ba4Smrg    rm -f "$tmpdepfile"
4510bb88ba4Smrg    exit $stat
4520bb88ba4Smrg  fi
4530bb88ba4Smrg  rm -f "$depfile"
4540bb88ba4Smrg  echo "$object : \\" > "$depfile"
4550bb88ba4Smrg  # The first sed program below extracts the file names and escapes
4560bb88ba4Smrg  # backslashes for cygpath.  The second sed program outputs the file
4570bb88ba4Smrg  # name when reading, but also accumulates all include files in the
4580bb88ba4Smrg  # hold buffer in order to output them again at the end.  This only
4590bb88ba4Smrg  # works with sed implementations that can handle large buffers.
4600bb88ba4Smrg  sed < "$tmpdepfile" -n '
4610bb88ba4Smrg/^Note: including file:  *\(.*\)/ {
4620bb88ba4Smrg  s//\1/
4630bb88ba4Smrg  s/\\/\\\\/g
4640bb88ba4Smrg  p
4650bb88ba4Smrg}' | $cygpath_u | sort -u | sed -n '
4660bb88ba4Smrgs/ /\\ /g
467acd6767fSmrgs/\(.*\)/'"$tab"'\1 \\/p
4680bb88ba4Smrgs/.\(.*\) \\/\1:/
4690bb88ba4SmrgH
4700bb88ba4Smrg$ {
471acd6767fSmrg  s/.*/'"$tab"'/
4720bb88ba4Smrg  G
4730bb88ba4Smrg  p
4740bb88ba4Smrg}' >> "$depfile"
4750bb88ba4Smrg  rm -f "$tmpdepfile"
4760bb88ba4Smrg  ;;
4770bb88ba4Smrg
4780bb88ba4Smrgmsvc7msys)
4790bb88ba4Smrg  # This case exists only to let depend.m4 do its work.  It works by
4800bb88ba4Smrg  # looking at the text of this script.  This case will never be run,
4810bb88ba4Smrg  # since it is checked for above.
4820bb88ba4Smrg  exit 1
4830bb88ba4Smrg  ;;
4840bb88ba4Smrg
485fe5e51b7Smrg#nosideeffect)
486fe5e51b7Smrg  # This comment above is used by automake to tell side-effect
487fe5e51b7Smrg  # dependency tracking mechanisms from slower ones.
488fe5e51b7Smrg
489fe5e51b7Smrgdashmstdout)
490fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
491fe5e51b7Smrg  # always write the preprocessed file to stdout, regardless of -o.
492fe5e51b7Smrg  "$@" || exit $?
493fe5e51b7Smrg
494fe5e51b7Smrg  # Remove the call to Libtool.
495fe5e51b7Smrg  if test "$libtool" = yes; then
4960bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
497fe5e51b7Smrg      shift
498fe5e51b7Smrg    done
499fe5e51b7Smrg    shift
500fe5e51b7Smrg  fi
501fe5e51b7Smrg
502acd6767fSmrg  # Remove '-o $object'.
503fe5e51b7Smrg  IFS=" "
504fe5e51b7Smrg  for arg
505fe5e51b7Smrg  do
506fe5e51b7Smrg    case $arg in
507fe5e51b7Smrg    -o)
508fe5e51b7Smrg      shift
509fe5e51b7Smrg      ;;
510fe5e51b7Smrg    $object)
511fe5e51b7Smrg      shift
512fe5e51b7Smrg      ;;
513fe5e51b7Smrg    *)
514fe5e51b7Smrg      set fnord "$@" "$arg"
515fe5e51b7Smrg      shift # fnord
516fe5e51b7Smrg      shift # $arg
517fe5e51b7Smrg      ;;
518fe5e51b7Smrg    esac
519fe5e51b7Smrg  done
520fe5e51b7Smrg
521fe5e51b7Smrg  test -z "$dashmflag" && dashmflag=-M
522acd6767fSmrg  # Require at least two characters before searching for ':'
523fe5e51b7Smrg  # in the target name.  This is to cope with DOS-style filenames:
524acd6767fSmrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
525fe5e51b7Smrg  "$@" $dashmflag |
526acd6767fSmrg    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
527fe5e51b7Smrg  rm -f "$depfile"
528fe5e51b7Smrg  cat < "$tmpdepfile" > "$depfile"
529acd6767fSmrg  tr ' ' "$nl" < "$tmpdepfile" | \
530fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
531fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
532fe5e51b7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
533fe5e51b7Smrg  rm -f "$tmpdepfile"
534fe5e51b7Smrg  ;;
535fe5e51b7Smrg
536fe5e51b7SmrgdashXmstdout)
537fe5e51b7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
538fe5e51b7Smrg  # run, as this mode is specially recognized in the preamble.
539fe5e51b7Smrg  exit 1
540fe5e51b7Smrg  ;;
541fe5e51b7Smrg
542fe5e51b7Smrgmakedepend)
543fe5e51b7Smrg  "$@" || exit $?
544fe5e51b7Smrg  # Remove any Libtool call
545fe5e51b7Smrg  if test "$libtool" = yes; then
5460bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
547fe5e51b7Smrg      shift
548fe5e51b7Smrg    done
549fe5e51b7Smrg    shift
550fe5e51b7Smrg  fi
551fe5e51b7Smrg  # X makedepend
552fe5e51b7Smrg  shift
5530bb88ba4Smrg  cleared=no eat=no
5540bb88ba4Smrg  for arg
5550bb88ba4Smrg  do
556fe5e51b7Smrg    case $cleared in
557fe5e51b7Smrg    no)
558fe5e51b7Smrg      set ""; shift
559fe5e51b7Smrg      cleared=yes ;;
560fe5e51b7Smrg    esac
5610bb88ba4Smrg    if test $eat = yes; then
5620bb88ba4Smrg      eat=no
5630bb88ba4Smrg      continue
5640bb88ba4Smrg    fi
565fe5e51b7Smrg    case "$arg" in
566fe5e51b7Smrg    -D*|-I*)
567fe5e51b7Smrg      set fnord "$@" "$arg"; shift ;;
568fe5e51b7Smrg    # Strip any option that makedepend may not understand.  Remove
569fe5e51b7Smrg    # the object too, otherwise makedepend will parse it as a source file.
5700bb88ba4Smrg    -arch)
5710bb88ba4Smrg      eat=yes ;;
572fe5e51b7Smrg    -*|$object)
573fe5e51b7Smrg      ;;
574fe5e51b7Smrg    *)
575fe5e51b7Smrg      set fnord "$@" "$arg"; shift ;;
576fe5e51b7Smrg    esac
577fe5e51b7Smrg  done
5780bb88ba4Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
579fe5e51b7Smrg  touch "$tmpdepfile"
580fe5e51b7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
581fe5e51b7Smrg  rm -f "$depfile"
5820bb88ba4Smrg  # makedepend may prepend the VPATH from the source file name to the object.
5830bb88ba4Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5840bb88ba4Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
585acd6767fSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
586fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
587fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
588fe5e51b7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
589fe5e51b7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
590fe5e51b7Smrg  ;;
591fe5e51b7Smrg
592fe5e51b7Smrgcpp)
593fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
594fe5e51b7Smrg  # always write the preprocessed file to stdout.
595fe5e51b7Smrg  "$@" || exit $?
596fe5e51b7Smrg
597fe5e51b7Smrg  # Remove the call to Libtool.
598fe5e51b7Smrg  if test "$libtool" = yes; then
5990bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
600fe5e51b7Smrg      shift
601fe5e51b7Smrg    done
602fe5e51b7Smrg    shift
603fe5e51b7Smrg  fi
604fe5e51b7Smrg
605acd6767fSmrg  # Remove '-o $object'.
606fe5e51b7Smrg  IFS=" "
607fe5e51b7Smrg  for arg
608fe5e51b7Smrg  do
609fe5e51b7Smrg    case $arg in
610fe5e51b7Smrg    -o)
611fe5e51b7Smrg      shift
612fe5e51b7Smrg      ;;
613fe5e51b7Smrg    $object)
614fe5e51b7Smrg      shift
615fe5e51b7Smrg      ;;
616fe5e51b7Smrg    *)
617fe5e51b7Smrg      set fnord "$@" "$arg"
618fe5e51b7Smrg      shift # fnord
619fe5e51b7Smrg      shift # $arg
620fe5e51b7Smrg      ;;
621fe5e51b7Smrg    esac
622fe5e51b7Smrg  done
623fe5e51b7Smrg
624fe5e51b7Smrg  "$@" -E |
625fe5e51b7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
626fe5e51b7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
627fe5e51b7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
628fe5e51b7Smrg  rm -f "$depfile"
629fe5e51b7Smrg  echo "$object : \\" > "$depfile"
630fe5e51b7Smrg  cat < "$tmpdepfile" >> "$depfile"
631fe5e51b7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
632fe5e51b7Smrg  rm -f "$tmpdepfile"
633fe5e51b7Smrg  ;;
634fe5e51b7Smrg
635fe5e51b7Smrgmsvisualcpp)
636fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
6370bb88ba4Smrg  # always write the preprocessed file to stdout.
638fe5e51b7Smrg  "$@" || exit $?
6390bb88ba4Smrg
6400bb88ba4Smrg  # Remove the call to Libtool.
6410bb88ba4Smrg  if test "$libtool" = yes; then
6420bb88ba4Smrg    while test "X$1" != 'X--mode=compile'; do
6430bb88ba4Smrg      shift
6440bb88ba4Smrg    done
6450bb88ba4Smrg    shift
6460bb88ba4Smrg  fi
6470bb88ba4Smrg
648fe5e51b7Smrg  IFS=" "
649fe5e51b7Smrg  for arg
650fe5e51b7Smrg  do
651fe5e51b7Smrg    case "$arg" in
6520bb88ba4Smrg    -o)
6530bb88ba4Smrg      shift
6540bb88ba4Smrg      ;;
6550bb88ba4Smrg    $object)
6560bb88ba4Smrg      shift
6570bb88ba4Smrg      ;;
658fe5e51b7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
659fe5e51b7Smrg	set fnord "$@"
660fe5e51b7Smrg	shift
661fe5e51b7Smrg	shift
662fe5e51b7Smrg	;;
663fe5e51b7Smrg    *)
664fe5e51b7Smrg	set fnord "$@" "$arg"
665fe5e51b7Smrg	shift
666fe5e51b7Smrg	shift
667fe5e51b7Smrg	;;
668fe5e51b7Smrg    esac
669fe5e51b7Smrg  done
6700bb88ba4Smrg  "$@" -E 2>/dev/null |
6710bb88ba4Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
672fe5e51b7Smrg  rm -f "$depfile"
673fe5e51b7Smrg  echo "$object : \\" > "$depfile"
674acd6767fSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
675acd6767fSmrg  echo "$tab" >> "$depfile"
6760bb88ba4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
677fe5e51b7Smrg  rm -f "$tmpdepfile"
678fe5e51b7Smrg  ;;
679fe5e51b7Smrg
6800bb88ba4Smrgmsvcmsys)
6810bb88ba4Smrg  # This case exists only to let depend.m4 do its work.  It works by
6820bb88ba4Smrg  # looking at the text of this script.  This case will never be run,
6830bb88ba4Smrg  # since it is checked for above.
6840bb88ba4Smrg  exit 1
6850bb88ba4Smrg  ;;
6860bb88ba4Smrg
687fe5e51b7Smrgnone)
688fe5e51b7Smrg  exec "$@"
689fe5e51b7Smrg  ;;
690fe5e51b7Smrg
691fe5e51b7Smrg*)
692fe5e51b7Smrg  echo "Unknown depmode $depmode" 1>&2
693fe5e51b7Smrg  exit 1
694fe5e51b7Smrg  ;;
695fe5e51b7Smrgesac
696fe5e51b7Smrg
697fe5e51b7Smrgexit 0
698fe5e51b7Smrg
699fe5e51b7Smrg# Local Variables:
700fe5e51b7Smrg# mode: shell-script
701fe5e51b7Smrg# sh-indentation: 2
702fe5e51b7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
703fe5e51b7Smrg# time-stamp-start: "scriptversion="
704fe5e51b7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
7050bb88ba4Smrg# time-stamp-time-zone: "UTC"
7060bb88ba4Smrg# time-stamp-end: "; # UTC"
707fe5e51b7Smrg# End:
708