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