depcomp revision b290cf36
1191cded7Smrg#! /bin/sh
2191cded7Smrg# depcomp - compile a program generating dependencies as side-effects
3191cded7Smrg
4b290cf36Smrgscriptversion=2007-03-29.01
5191cded7Smrg
6b290cf36Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7b290cf36Smrg# Foundation, Inc.
8191cded7Smrg
9191cded7Smrg# This program is free software; you can redistribute it and/or modify
10191cded7Smrg# it under the terms of the GNU General Public License as published by
11191cded7Smrg# the Free Software Foundation; either version 2, or (at your option)
12191cded7Smrg# any later version.
13191cded7Smrg
14191cded7Smrg# This program is distributed in the hope that it will be useful,
15191cded7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16191cded7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17191cded7Smrg# GNU General Public License for more details.
18191cded7Smrg
19191cded7Smrg# You should have received a copy of the GNU General Public License
20191cded7Smrg# along with this program; if not, write to the Free Software
21191cded7Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22191cded7Smrg# 02110-1301, USA.
23191cded7Smrg
24191cded7Smrg# As a special exception to the GNU General Public License, if you
25191cded7Smrg# distribute this file as part of a program that contains a
26191cded7Smrg# configuration script generated by Autoconf, you may include it under
27191cded7Smrg# the same distribution terms that you use for the rest of that program.
28191cded7Smrg
29191cded7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30191cded7Smrg
31191cded7Smrgcase $1 in
32191cded7Smrg  '')
33191cded7Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34191cded7Smrg     exit 1;
35191cded7Smrg     ;;
36191cded7Smrg  -h | --h*)
37191cded7Smrg    cat <<\EOF
38191cded7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39191cded7Smrg
40191cded7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41191cded7Smrgas side-effects.
42191cded7Smrg
43191cded7SmrgEnvironment variables:
44191cded7Smrg  depmode     Dependency tracking mode.
45191cded7Smrg  source      Source file read by `PROGRAMS ARGS'.
46191cded7Smrg  object      Object file output by `PROGRAMS ARGS'.
47191cded7Smrg  DEPDIR      directory where to store dependencies.
48191cded7Smrg  depfile     Dependency file to output.
49191cded7Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
50191cded7Smrg  libtool     Whether libtool is used (yes/no).
51191cded7Smrg
52191cded7SmrgReport bugs to <bug-automake@gnu.org>.
53191cded7SmrgEOF
54191cded7Smrg    exit $?
55191cded7Smrg    ;;
56191cded7Smrg  -v | --v*)
57191cded7Smrg    echo "depcomp $scriptversion"
58191cded7Smrg    exit $?
59191cded7Smrg    ;;
60191cded7Smrgesac
61191cded7Smrg
62191cded7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63191cded7Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64191cded7Smrg  exit 1
65191cded7Smrgfi
66191cded7Smrg
67191cded7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68191cded7Smrgdepfile=${depfile-`echo "$object" |
69191cded7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70191cded7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71191cded7Smrg
72191cded7Smrgrm -f "$tmpdepfile"
73191cded7Smrg
74191cded7Smrg# Some modes work just like other modes, but use different flags.  We
75191cded7Smrg# parameterize here, but still list the modes in the big case below,
76191cded7Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77191cded7Smrg# here, because this file can only contain one case statement.
78191cded7Smrgif test "$depmode" = hp; then
79191cded7Smrg  # HP compiler uses -M and no extra arg.
80191cded7Smrg  gccflag=-M
81191cded7Smrg  depmode=gcc
82191cded7Smrgfi
83191cded7Smrg
84191cded7Smrgif test "$depmode" = dashXmstdout; then
85191cded7Smrg   # This is just like dashmstdout with a different argument.
86191cded7Smrg   dashmflag=-xM
87191cded7Smrg   depmode=dashmstdout
88191cded7Smrgfi
89191cded7Smrg
90191cded7Smrgcase "$depmode" in
91191cded7Smrggcc3)
92191cded7Smrg## gcc 3 implements dependency tracking that does exactly what
93191cded7Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94191cded7Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95b290cf36Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96b290cf36Smrg## the command line argument order; so add the flags where they
97b290cf36Smrg## appear in depend2.am.  Note that the slowdown incurred here
98b290cf36Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99b290cf36Smrg  for arg
100b290cf36Smrg  do
101b290cf36Smrg    case $arg in
102b290cf36Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103b290cf36Smrg    *)  set fnord "$@" "$arg" ;;
104b290cf36Smrg    esac
105b290cf36Smrg    shift # fnord
106b290cf36Smrg    shift # $arg
107b290cf36Smrg  done
108b290cf36Smrg  "$@"
109191cded7Smrg  stat=$?
110191cded7Smrg  if test $stat -eq 0; then :
111191cded7Smrg  else
112191cded7Smrg    rm -f "$tmpdepfile"
113191cded7Smrg    exit $stat
114191cded7Smrg  fi
115191cded7Smrg  mv "$tmpdepfile" "$depfile"
116191cded7Smrg  ;;
117191cded7Smrg
118191cded7Smrggcc)
119191cded7Smrg## There are various ways to get dependency output from gcc.  Here's
120191cded7Smrg## why we pick this rather obscure method:
121191cded7Smrg## - Don't want to use -MD because we'd like the dependencies to end
122191cded7Smrg##   up in a subdir.  Having to rename by hand is ugly.
123191cded7Smrg##   (We might end up doing this anyway to support other compilers.)
124191cded7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125191cded7Smrg##   -MM, not -M (despite what the docs say).
126191cded7Smrg## - Using -M directly means running the compiler twice (even worse
127191cded7Smrg##   than renaming).
128191cded7Smrg  if test -z "$gccflag"; then
129191cded7Smrg    gccflag=-MD,
130191cded7Smrg  fi
131191cded7Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
132191cded7Smrg  stat=$?
133191cded7Smrg  if test $stat -eq 0; then :
134191cded7Smrg  else
135191cded7Smrg    rm -f "$tmpdepfile"
136191cded7Smrg    exit $stat
137191cded7Smrg  fi
138191cded7Smrg  rm -f "$depfile"
139191cded7Smrg  echo "$object : \\" > "$depfile"
140191cded7Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141191cded7Smrg## The second -e expression handles DOS-style file names with drive letters.
142191cded7Smrg  sed -e 's/^[^:]*: / /' \
143191cded7Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144191cded7Smrg## This next piece of magic avoids the `deleted header file' problem.
145191cded7Smrg## The problem is that when a header file which appears in a .P file
146191cded7Smrg## is deleted, the dependency causes make to die (because there is
147191cded7Smrg## typically no way to rebuild the header).  We avoid this by adding
148191cded7Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149191cded7Smrg## this for us directly.
150191cded7Smrg  tr ' ' '
151191cded7Smrg' < "$tmpdepfile" |
152191cded7Smrg## Some versions of gcc put a space before the `:'.  On the theory
153191cded7Smrg## that the space means something, we add a space to the output as
154191cded7Smrg## well.
155191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
156191cded7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
157191cded7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158191cded7Smrg  rm -f "$tmpdepfile"
159191cded7Smrg  ;;
160191cded7Smrg
161191cded7Smrghp)
162191cded7Smrg  # This case exists only to let depend.m4 do its work.  It works by
163191cded7Smrg  # looking at the text of this script.  This case will never be run,
164191cded7Smrg  # since it is checked for above.
165191cded7Smrg  exit 1
166191cded7Smrg  ;;
167191cded7Smrg
168191cded7Smrgsgi)
169191cded7Smrg  if test "$libtool" = yes; then
170191cded7Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171191cded7Smrg  else
172191cded7Smrg    "$@" -MDupdate "$tmpdepfile"
173191cded7Smrg  fi
174191cded7Smrg  stat=$?
175191cded7Smrg  if test $stat -eq 0; then :
176191cded7Smrg  else
177191cded7Smrg    rm -f "$tmpdepfile"
178191cded7Smrg    exit $stat
179191cded7Smrg  fi
180191cded7Smrg  rm -f "$depfile"
181191cded7Smrg
182191cded7Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183191cded7Smrg    echo "$object : \\" > "$depfile"
184191cded7Smrg
185191cded7Smrg    # Clip off the initial element (the dependent).  Don't try to be
186191cded7Smrg    # clever and replace this with sed code, as IRIX sed won't handle
187191cded7Smrg    # lines with more than a fixed number of characters (4096 in
188191cded7Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189191cded7Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
190191cded7Smrg    # dependency line.
191191cded7Smrg    tr ' ' '
192191cded7Smrg' < "$tmpdepfile" \
193191cded7Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194191cded7Smrg    tr '
195191cded7Smrg' ' ' >> $depfile
196191cded7Smrg    echo >> $depfile
197191cded7Smrg
198191cded7Smrg    # The second pass generates a dummy entry for each header file.
199191cded7Smrg    tr ' ' '
200191cded7Smrg' < "$tmpdepfile" \
201191cded7Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202191cded7Smrg   >> $depfile
203191cded7Smrg  else
204191cded7Smrg    # The sourcefile does not contain any dependencies, so just
205191cded7Smrg    # store a dummy comment line, to avoid errors with the Makefile
206191cded7Smrg    # "include basename.Plo" scheme.
207191cded7Smrg    echo "#dummy" > "$depfile"
208191cded7Smrg  fi
209191cded7Smrg  rm -f "$tmpdepfile"
210191cded7Smrg  ;;
211191cded7Smrg
212191cded7Smrgaix)
213191cded7Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
214191cded7Smrg  # in a .u file.  In older versions, this file always lives in the
215191cded7Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216191cded7Smrg  # start of each line; $object doesn't have directory information.
217191cded7Smrg  # Version 6 uses the directory in both cases.
218b290cf36Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219b290cf36Smrg  test "x$dir" = "x$object" && dir=
220b290cf36Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221191cded7Smrg  if test "$libtool" = yes; then
222b290cf36Smrg    tmpdepfile1=$dir$base.u
223b290cf36Smrg    tmpdepfile2=$base.u
224b290cf36Smrg    tmpdepfile3=$dir.libs/$base.u
225191cded7Smrg    "$@" -Wc,-M
226191cded7Smrg  else
227b290cf36Smrg    tmpdepfile1=$dir$base.u
228b290cf36Smrg    tmpdepfile2=$dir$base.u
229b290cf36Smrg    tmpdepfile3=$dir$base.u
230191cded7Smrg    "$@" -M
231191cded7Smrg  fi
232191cded7Smrg  stat=$?
233191cded7Smrg
234191cded7Smrg  if test $stat -eq 0; then :
235191cded7Smrg  else
236b290cf36Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237191cded7Smrg    exit $stat
238191cded7Smrg  fi
239191cded7Smrg
240b290cf36Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241b290cf36Smrg  do
242b290cf36Smrg    test -f "$tmpdepfile" && break
243b290cf36Smrg  done
244191cded7Smrg  if test -f "$tmpdepfile"; then
245191cded7Smrg    # Each line is of the form `foo.o: dependent.h'.
246191cded7Smrg    # Do two passes, one to just change these to
247191cded7Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248b290cf36Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249b290cf36Smrg    # That's a tab and a space in the [].
250b290cf36Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251191cded7Smrg  else
252191cded7Smrg    # The sourcefile does not contain any dependencies, so just
253191cded7Smrg    # store a dummy comment line, to avoid errors with the Makefile
254191cded7Smrg    # "include basename.Plo" scheme.
255191cded7Smrg    echo "#dummy" > "$depfile"
256191cded7Smrg  fi
257191cded7Smrg  rm -f "$tmpdepfile"
258191cded7Smrg  ;;
259191cded7Smrg
260191cded7Smrgicc)
261191cded7Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
262191cded7Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263191cded7Smrg  # ICC 7.0 will fill foo.d with something like
264191cded7Smrg  #    foo.o: sub/foo.c
265191cded7Smrg  #    foo.o: sub/foo.h
266191cded7Smrg  # which is wrong.  We want:
267191cded7Smrg  #    sub/foo.o: sub/foo.c
268191cded7Smrg  #    sub/foo.o: sub/foo.h
269191cded7Smrg  #    sub/foo.c:
270191cded7Smrg  #    sub/foo.h:
271191cded7Smrg  # ICC 7.1 will output
272191cded7Smrg  #    foo.o: sub/foo.c sub/foo.h
273191cded7Smrg  # and will wrap long lines using \ :
274191cded7Smrg  #    foo.o: sub/foo.c ... \
275191cded7Smrg  #     sub/foo.h ... \
276191cded7Smrg  #     ...
277191cded7Smrg
278191cded7Smrg  "$@" -MD -MF "$tmpdepfile"
279191cded7Smrg  stat=$?
280191cded7Smrg  if test $stat -eq 0; then :
281191cded7Smrg  else
282191cded7Smrg    rm -f "$tmpdepfile"
283191cded7Smrg    exit $stat
284191cded7Smrg  fi
285191cded7Smrg  rm -f "$depfile"
286191cded7Smrg  # Each line is of the form `foo.o: dependent.h',
287191cded7Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288191cded7Smrg  # Do two passes, one to just change these to
289191cded7Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
290191cded7Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291191cded7Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
292191cded7Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
293191cded7Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294191cded7Smrg    sed -e 's/$/ :/' >> "$depfile"
295191cded7Smrg  rm -f "$tmpdepfile"
296191cded7Smrg  ;;
297191cded7Smrg
298b290cf36Smrghp2)
299b290cf36Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300b290cf36Smrg  # compilers, which have integrated preprocessors.  The correct option
301b290cf36Smrg  # to use with these is +Maked; it writes dependencies to a file named
302b290cf36Smrg  # 'foo.d', which lands next to the object file, wherever that
303b290cf36Smrg  # happens to be.
304b290cf36Smrg  # Much of this is similar to the tru64 case; see comments there.
305b290cf36Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306b290cf36Smrg  test "x$dir" = "x$object" && dir=
307b290cf36Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308b290cf36Smrg  if test "$libtool" = yes; then
309b290cf36Smrg    tmpdepfile1=$dir$base.d
310b290cf36Smrg    tmpdepfile2=$dir.libs/$base.d
311b290cf36Smrg    "$@" -Wc,+Maked
312b290cf36Smrg  else
313b290cf36Smrg    tmpdepfile1=$dir$base.d
314b290cf36Smrg    tmpdepfile2=$dir$base.d
315b290cf36Smrg    "$@" +Maked
316b290cf36Smrg  fi
317b290cf36Smrg  stat=$?
318b290cf36Smrg  if test $stat -eq 0; then :
319b290cf36Smrg  else
320b290cf36Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321b290cf36Smrg     exit $stat
322b290cf36Smrg  fi
323b290cf36Smrg
324b290cf36Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325b290cf36Smrg  do
326b290cf36Smrg    test -f "$tmpdepfile" && break
327b290cf36Smrg  done
328b290cf36Smrg  if test -f "$tmpdepfile"; then
329b290cf36Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330b290cf36Smrg    # Add `dependent.h:' lines.
331b290cf36Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332b290cf36Smrg  else
333b290cf36Smrg    echo "#dummy" > "$depfile"
334b290cf36Smrg  fi
335b290cf36Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336b290cf36Smrg  ;;
337b290cf36Smrg
338191cded7Smrgtru64)
339191cded7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
340191cded7Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341191cded7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342191cded7Smrg   # dependencies in `foo.d' instead, so we check for that too.
343191cded7Smrg   # Subdirectories are respected.
344191cded7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345191cded7Smrg   test "x$dir" = "x$object" && dir=
346191cded7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347191cded7Smrg
348191cded7Smrg   if test "$libtool" = yes; then
349191cded7Smrg      # With Tru64 cc, shared objects can also be used to make a
350b290cf36Smrg      # static library.  This mechanism is used in libtool 1.4 series to
351191cded7Smrg      # handle both shared and static libraries in a single compilation.
352191cded7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353191cded7Smrg      #
354191cded7Smrg      # With libtool 1.5 this exception was removed, and libtool now
355191cded7Smrg      # generates 2 separate objects for the 2 libraries.  These two
356b290cf36Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
357191cded7Smrg      # in $dir$base.o.d.  We have to check for both files, because
358191cded7Smrg      # one of the two compilations can be disabled.  We should prefer
359191cded7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360191cded7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
361191cded7Smrg      # the former would cause a distcleancheck panic.
362191cded7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363191cded7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364191cded7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365191cded7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366191cded7Smrg      "$@" -Wc,-MD
367191cded7Smrg   else
368191cded7Smrg      tmpdepfile1=$dir$base.o.d
369191cded7Smrg      tmpdepfile2=$dir$base.d
370191cded7Smrg      tmpdepfile3=$dir$base.d
371191cded7Smrg      tmpdepfile4=$dir$base.d
372191cded7Smrg      "$@" -MD
373191cded7Smrg   fi
374191cded7Smrg
375191cded7Smrg   stat=$?
376191cded7Smrg   if test $stat -eq 0; then :
377191cded7Smrg   else
378191cded7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379191cded7Smrg      exit $stat
380191cded7Smrg   fi
381191cded7Smrg
382191cded7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383191cded7Smrg   do
384191cded7Smrg     test -f "$tmpdepfile" && break
385191cded7Smrg   done
386191cded7Smrg   if test -f "$tmpdepfile"; then
387191cded7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388191cded7Smrg      # That's a tab and a space in the [].
389191cded7Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390191cded7Smrg   else
391191cded7Smrg      echo "#dummy" > "$depfile"
392191cded7Smrg   fi
393191cded7Smrg   rm -f "$tmpdepfile"
394191cded7Smrg   ;;
395191cded7Smrg
396191cded7Smrg#nosideeffect)
397191cded7Smrg  # This comment above is used by automake to tell side-effect
398191cded7Smrg  # dependency tracking mechanisms from slower ones.
399191cded7Smrg
400191cded7Smrgdashmstdout)
401191cded7Smrg  # Important note: in order to support this mode, a compiler *must*
402191cded7Smrg  # always write the preprocessed file to stdout, regardless of -o.
403191cded7Smrg  "$@" || exit $?
404191cded7Smrg
405191cded7Smrg  # Remove the call to Libtool.
406191cded7Smrg  if test "$libtool" = yes; then
407191cded7Smrg    while test $1 != '--mode=compile'; do
408191cded7Smrg      shift
409191cded7Smrg    done
410191cded7Smrg    shift
411191cded7Smrg  fi
412191cded7Smrg
413191cded7Smrg  # Remove `-o $object'.
414191cded7Smrg  IFS=" "
415191cded7Smrg  for arg
416191cded7Smrg  do
417191cded7Smrg    case $arg in
418191cded7Smrg    -o)
419191cded7Smrg      shift
420191cded7Smrg      ;;
421191cded7Smrg    $object)
422191cded7Smrg      shift
423191cded7Smrg      ;;
424191cded7Smrg    *)
425191cded7Smrg      set fnord "$@" "$arg"
426191cded7Smrg      shift # fnord
427191cded7Smrg      shift # $arg
428191cded7Smrg      ;;
429191cded7Smrg    esac
430191cded7Smrg  done
431191cded7Smrg
432191cded7Smrg  test -z "$dashmflag" && dashmflag=-M
433191cded7Smrg  # Require at least two characters before searching for `:'
434191cded7Smrg  # in the target name.  This is to cope with DOS-style filenames:
435191cded7Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436191cded7Smrg  "$@" $dashmflag |
437191cded7Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438191cded7Smrg  rm -f "$depfile"
439191cded7Smrg  cat < "$tmpdepfile" > "$depfile"
440191cded7Smrg  tr ' ' '
441191cded7Smrg' < "$tmpdepfile" | \
442191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
443191cded7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
444191cded7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445191cded7Smrg  rm -f "$tmpdepfile"
446191cded7Smrg  ;;
447191cded7Smrg
448191cded7SmrgdashXmstdout)
449191cded7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
450191cded7Smrg  # run, as this mode is specially recognized in the preamble.
451191cded7Smrg  exit 1
452191cded7Smrg  ;;
453191cded7Smrg
454191cded7Smrgmakedepend)
455191cded7Smrg  "$@" || exit $?
456191cded7Smrg  # Remove any Libtool call
457191cded7Smrg  if test "$libtool" = yes; then
458191cded7Smrg    while test $1 != '--mode=compile'; do
459191cded7Smrg      shift
460191cded7Smrg    done
461191cded7Smrg    shift
462191cded7Smrg  fi
463191cded7Smrg  # X makedepend
464191cded7Smrg  shift
465191cded7Smrg  cleared=no
466191cded7Smrg  for arg in "$@"; do
467191cded7Smrg    case $cleared in
468191cded7Smrg    no)
469191cded7Smrg      set ""; shift
470191cded7Smrg      cleared=yes ;;
471191cded7Smrg    esac
472191cded7Smrg    case "$arg" in
473191cded7Smrg    -D*|-I*)
474191cded7Smrg      set fnord "$@" "$arg"; shift ;;
475191cded7Smrg    # Strip any option that makedepend may not understand.  Remove
476191cded7Smrg    # the object too, otherwise makedepend will parse it as a source file.
477191cded7Smrg    -*|$object)
478191cded7Smrg      ;;
479191cded7Smrg    *)
480191cded7Smrg      set fnord "$@" "$arg"; shift ;;
481191cded7Smrg    esac
482191cded7Smrg  done
483191cded7Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
484191cded7Smrg  touch "$tmpdepfile"
485191cded7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486191cded7Smrg  rm -f "$depfile"
487191cded7Smrg  cat < "$tmpdepfile" > "$depfile"
488191cded7Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
489191cded7Smrg' | \
490191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
491191cded7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
492191cded7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493191cded7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
494191cded7Smrg  ;;
495191cded7Smrg
496191cded7Smrgcpp)
497191cded7Smrg  # Important note: in order to support this mode, a compiler *must*
498191cded7Smrg  # always write the preprocessed file to stdout.
499191cded7Smrg  "$@" || exit $?
500191cded7Smrg
501191cded7Smrg  # Remove the call to Libtool.
502191cded7Smrg  if test "$libtool" = yes; then
503191cded7Smrg    while test $1 != '--mode=compile'; do
504191cded7Smrg      shift
505191cded7Smrg    done
506191cded7Smrg    shift
507191cded7Smrg  fi
508191cded7Smrg
509191cded7Smrg  # Remove `-o $object'.
510191cded7Smrg  IFS=" "
511191cded7Smrg  for arg
512191cded7Smrg  do
513191cded7Smrg    case $arg in
514191cded7Smrg    -o)
515191cded7Smrg      shift
516191cded7Smrg      ;;
517191cded7Smrg    $object)
518191cded7Smrg      shift
519191cded7Smrg      ;;
520191cded7Smrg    *)
521191cded7Smrg      set fnord "$@" "$arg"
522191cded7Smrg      shift # fnord
523191cded7Smrg      shift # $arg
524191cded7Smrg      ;;
525191cded7Smrg    esac
526191cded7Smrg  done
527191cded7Smrg
528191cded7Smrg  "$@" -E |
529191cded7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530191cded7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531191cded7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
532191cded7Smrg  rm -f "$depfile"
533191cded7Smrg  echo "$object : \\" > "$depfile"
534191cded7Smrg  cat < "$tmpdepfile" >> "$depfile"
535191cded7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536191cded7Smrg  rm -f "$tmpdepfile"
537191cded7Smrg  ;;
538191cded7Smrg
539191cded7Smrgmsvisualcpp)
540191cded7Smrg  # Important note: in order to support this mode, a compiler *must*
541191cded7Smrg  # always write the preprocessed file to stdout, regardless of -o,
542191cded7Smrg  # because we must use -o when running libtool.
543191cded7Smrg  "$@" || exit $?
544191cded7Smrg  IFS=" "
545191cded7Smrg  for arg
546191cded7Smrg  do
547191cded7Smrg    case "$arg" in
548191cded7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549191cded7Smrg	set fnord "$@"
550191cded7Smrg	shift
551191cded7Smrg	shift
552191cded7Smrg	;;
553191cded7Smrg    *)
554191cded7Smrg	set fnord "$@" "$arg"
555191cded7Smrg	shift
556191cded7Smrg	shift
557191cded7Smrg	;;
558191cded7Smrg    esac
559191cded7Smrg  done
560191cded7Smrg  "$@" -E |
561191cded7Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562191cded7Smrg  rm -f "$depfile"
563191cded7Smrg  echo "$object : \\" > "$depfile"
564191cded7Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565191cded7Smrg  echo "	" >> "$depfile"
566191cded7Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567191cded7Smrg  rm -f "$tmpdepfile"
568191cded7Smrg  ;;
569191cded7Smrg
570191cded7Smrgnone)
571191cded7Smrg  exec "$@"
572191cded7Smrg  ;;
573191cded7Smrg
574191cded7Smrg*)
575191cded7Smrg  echo "Unknown depmode $depmode" 1>&2
576191cded7Smrg  exit 1
577191cded7Smrg  ;;
578191cded7Smrgesac
579191cded7Smrg
580191cded7Smrgexit 0
581191cded7Smrg
582191cded7Smrg# Local Variables:
583191cded7Smrg# mode: shell-script
584191cded7Smrg# sh-indentation: 2
585191cded7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
586191cded7Smrg# time-stamp-start: "scriptversion="
587191cded7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
588191cded7Smrg# time-stamp-end: "$"
589191cded7Smrg# End:
590