depcomp revision c5629e66
1266e564dSmrg#! /bin/sh
2266e564dSmrg# depcomp - compile a program generating dependencies as side-effects
3266e564dSmrg
4c5629e66Smrgscriptversion=2007-03-29.01
5266e564dSmrg
6c5629e66Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7266e564dSmrg# Foundation, Inc.
8266e564dSmrg
9266e564dSmrg# This program is free software; you can redistribute it and/or modify
10266e564dSmrg# it under the terms of the GNU General Public License as published by
11266e564dSmrg# the Free Software Foundation; either version 2, or (at your option)
12266e564dSmrg# any later version.
13266e564dSmrg
14266e564dSmrg# This program is distributed in the hope that it will be useful,
15266e564dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16266e564dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17266e564dSmrg# GNU General Public License for more details.
18266e564dSmrg
19266e564dSmrg# You should have received a copy of the GNU General Public License
20266e564dSmrg# along with this program; if not, write to the Free Software
21266e564dSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22266e564dSmrg# 02110-1301, USA.
23266e564dSmrg
24266e564dSmrg# As a special exception to the GNU General Public License, if you
25266e564dSmrg# distribute this file as part of a program that contains a
26266e564dSmrg# configuration script generated by Autoconf, you may include it under
27266e564dSmrg# the same distribution terms that you use for the rest of that program.
28266e564dSmrg
29266e564dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30266e564dSmrg
31266e564dSmrgcase $1 in
32266e564dSmrg  '')
33266e564dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34266e564dSmrg     exit 1;
35266e564dSmrg     ;;
36266e564dSmrg  -h | --h*)
37266e564dSmrg    cat <<\EOF
38266e564dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39266e564dSmrg
40266e564dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41266e564dSmrgas side-effects.
42266e564dSmrg
43266e564dSmrgEnvironment variables:
44266e564dSmrg  depmode     Dependency tracking mode.
45266e564dSmrg  source      Source file read by `PROGRAMS ARGS'.
46266e564dSmrg  object      Object file output by `PROGRAMS ARGS'.
47266e564dSmrg  DEPDIR      directory where to store dependencies.
48266e564dSmrg  depfile     Dependency file to output.
49266e564dSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
50266e564dSmrg  libtool     Whether libtool is used (yes/no).
51266e564dSmrg
52266e564dSmrgReport bugs to <bug-automake@gnu.org>.
53266e564dSmrgEOF
54266e564dSmrg    exit $?
55266e564dSmrg    ;;
56266e564dSmrg  -v | --v*)
57266e564dSmrg    echo "depcomp $scriptversion"
58266e564dSmrg    exit $?
59266e564dSmrg    ;;
60266e564dSmrgesac
61266e564dSmrg
62266e564dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63266e564dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64266e564dSmrg  exit 1
65266e564dSmrgfi
66266e564dSmrg
67266e564dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68266e564dSmrgdepfile=${depfile-`echo "$object" |
69266e564dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70266e564dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71266e564dSmrg
72266e564dSmrgrm -f "$tmpdepfile"
73266e564dSmrg
74266e564dSmrg# Some modes work just like other modes, but use different flags.  We
75266e564dSmrg# parameterize here, but still list the modes in the big case below,
76266e564dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77266e564dSmrg# here, because this file can only contain one case statement.
78266e564dSmrgif test "$depmode" = hp; then
79266e564dSmrg  # HP compiler uses -M and no extra arg.
80266e564dSmrg  gccflag=-M
81266e564dSmrg  depmode=gcc
82266e564dSmrgfi
83266e564dSmrg
84266e564dSmrgif test "$depmode" = dashXmstdout; then
85266e564dSmrg   # This is just like dashmstdout with a different argument.
86266e564dSmrg   dashmflag=-xM
87266e564dSmrg   depmode=dashmstdout
88266e564dSmrgfi
89266e564dSmrg
90266e564dSmrgcase "$depmode" in
91266e564dSmrggcc3)
92266e564dSmrg## gcc 3 implements dependency tracking that does exactly what
93266e564dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94266e564dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95266e564dSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96266e564dSmrg## the command line argument order; so add the flags where they
97266e564dSmrg## appear in depend2.am.  Note that the slowdown incurred here
98266e564dSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99266e564dSmrg  for arg
100266e564dSmrg  do
101266e564dSmrg    case $arg in
102266e564dSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103266e564dSmrg    *)  set fnord "$@" "$arg" ;;
104266e564dSmrg    esac
105266e564dSmrg    shift # fnord
106266e564dSmrg    shift # $arg
107266e564dSmrg  done
108266e564dSmrg  "$@"
109266e564dSmrg  stat=$?
110266e564dSmrg  if test $stat -eq 0; then :
111266e564dSmrg  else
112266e564dSmrg    rm -f "$tmpdepfile"
113266e564dSmrg    exit $stat
114266e564dSmrg  fi
115266e564dSmrg  mv "$tmpdepfile" "$depfile"
116266e564dSmrg  ;;
117266e564dSmrg
118266e564dSmrggcc)
119266e564dSmrg## There are various ways to get dependency output from gcc.  Here's
120266e564dSmrg## why we pick this rather obscure method:
121266e564dSmrg## - Don't want to use -MD because we'd like the dependencies to end
122266e564dSmrg##   up in a subdir.  Having to rename by hand is ugly.
123266e564dSmrg##   (We might end up doing this anyway to support other compilers.)
124266e564dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125266e564dSmrg##   -MM, not -M (despite what the docs say).
126266e564dSmrg## - Using -M directly means running the compiler twice (even worse
127266e564dSmrg##   than renaming).
128266e564dSmrg  if test -z "$gccflag"; then
129266e564dSmrg    gccflag=-MD,
130266e564dSmrg  fi
131266e564dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
132266e564dSmrg  stat=$?
133266e564dSmrg  if test $stat -eq 0; then :
134266e564dSmrg  else
135266e564dSmrg    rm -f "$tmpdepfile"
136266e564dSmrg    exit $stat
137266e564dSmrg  fi
138266e564dSmrg  rm -f "$depfile"
139266e564dSmrg  echo "$object : \\" > "$depfile"
140266e564dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141266e564dSmrg## The second -e expression handles DOS-style file names with drive letters.
142266e564dSmrg  sed -e 's/^[^:]*: / /' \
143266e564dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144266e564dSmrg## This next piece of magic avoids the `deleted header file' problem.
145266e564dSmrg## The problem is that when a header file which appears in a .P file
146266e564dSmrg## is deleted, the dependency causes make to die (because there is
147266e564dSmrg## typically no way to rebuild the header).  We avoid this by adding
148266e564dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149266e564dSmrg## this for us directly.
150266e564dSmrg  tr ' ' '
151266e564dSmrg' < "$tmpdepfile" |
152266e564dSmrg## Some versions of gcc put a space before the `:'.  On the theory
153266e564dSmrg## that the space means something, we add a space to the output as
154266e564dSmrg## well.
155266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
156266e564dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
157266e564dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158266e564dSmrg  rm -f "$tmpdepfile"
159266e564dSmrg  ;;
160266e564dSmrg
161266e564dSmrghp)
162266e564dSmrg  # This case exists only to let depend.m4 do its work.  It works by
163266e564dSmrg  # looking at the text of this script.  This case will never be run,
164266e564dSmrg  # since it is checked for above.
165266e564dSmrg  exit 1
166266e564dSmrg  ;;
167266e564dSmrg
168266e564dSmrgsgi)
169266e564dSmrg  if test "$libtool" = yes; then
170266e564dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171266e564dSmrg  else
172266e564dSmrg    "$@" -MDupdate "$tmpdepfile"
173266e564dSmrg  fi
174266e564dSmrg  stat=$?
175266e564dSmrg  if test $stat -eq 0; then :
176266e564dSmrg  else
177266e564dSmrg    rm -f "$tmpdepfile"
178266e564dSmrg    exit $stat
179266e564dSmrg  fi
180266e564dSmrg  rm -f "$depfile"
181266e564dSmrg
182266e564dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183266e564dSmrg    echo "$object : \\" > "$depfile"
184266e564dSmrg
185266e564dSmrg    # Clip off the initial element (the dependent).  Don't try to be
186266e564dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
187266e564dSmrg    # lines with more than a fixed number of characters (4096 in
188266e564dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189266e564dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
190266e564dSmrg    # dependency line.
191266e564dSmrg    tr ' ' '
192266e564dSmrg' < "$tmpdepfile" \
193266e564dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194266e564dSmrg    tr '
195266e564dSmrg' ' ' >> $depfile
196266e564dSmrg    echo >> $depfile
197266e564dSmrg
198266e564dSmrg    # The second pass generates a dummy entry for each header file.
199266e564dSmrg    tr ' ' '
200266e564dSmrg' < "$tmpdepfile" \
201266e564dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202266e564dSmrg   >> $depfile
203266e564dSmrg  else
204266e564dSmrg    # The sourcefile does not contain any dependencies, so just
205266e564dSmrg    # store a dummy comment line, to avoid errors with the Makefile
206266e564dSmrg    # "include basename.Plo" scheme.
207266e564dSmrg    echo "#dummy" > "$depfile"
208266e564dSmrg  fi
209266e564dSmrg  rm -f "$tmpdepfile"
210266e564dSmrg  ;;
211266e564dSmrg
212266e564dSmrgaix)
213266e564dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
214266e564dSmrg  # in a .u file.  In older versions, this file always lives in the
215266e564dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216266e564dSmrg  # start of each line; $object doesn't have directory information.
217266e564dSmrg  # Version 6 uses the directory in both cases.
218c5629e66Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219c5629e66Smrg  test "x$dir" = "x$object" && dir=
220c5629e66Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221266e564dSmrg  if test "$libtool" = yes; then
222c5629e66Smrg    tmpdepfile1=$dir$base.u
223c5629e66Smrg    tmpdepfile2=$base.u
224c5629e66Smrg    tmpdepfile3=$dir.libs/$base.u
225266e564dSmrg    "$@" -Wc,-M
226266e564dSmrg  else
227c5629e66Smrg    tmpdepfile1=$dir$base.u
228c5629e66Smrg    tmpdepfile2=$dir$base.u
229c5629e66Smrg    tmpdepfile3=$dir$base.u
230266e564dSmrg    "$@" -M
231266e564dSmrg  fi
232266e564dSmrg  stat=$?
233266e564dSmrg
234266e564dSmrg  if test $stat -eq 0; then :
235266e564dSmrg  else
236c5629e66Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237266e564dSmrg    exit $stat
238266e564dSmrg  fi
239266e564dSmrg
240c5629e66Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241c5629e66Smrg  do
242c5629e66Smrg    test -f "$tmpdepfile" && break
243c5629e66Smrg  done
244266e564dSmrg  if test -f "$tmpdepfile"; then
245266e564dSmrg    # Each line is of the form `foo.o: dependent.h'.
246266e564dSmrg    # Do two passes, one to just change these to
247266e564dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248c5629e66Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249c5629e66Smrg    # That's a tab and a space in the [].
250c5629e66Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251266e564dSmrg  else
252266e564dSmrg    # The sourcefile does not contain any dependencies, so just
253266e564dSmrg    # store a dummy comment line, to avoid errors with the Makefile
254266e564dSmrg    # "include basename.Plo" scheme.
255266e564dSmrg    echo "#dummy" > "$depfile"
256266e564dSmrg  fi
257266e564dSmrg  rm -f "$tmpdepfile"
258266e564dSmrg  ;;
259266e564dSmrg
260266e564dSmrgicc)
261266e564dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
262266e564dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263266e564dSmrg  # ICC 7.0 will fill foo.d with something like
264266e564dSmrg  #    foo.o: sub/foo.c
265266e564dSmrg  #    foo.o: sub/foo.h
266266e564dSmrg  # which is wrong.  We want:
267266e564dSmrg  #    sub/foo.o: sub/foo.c
268266e564dSmrg  #    sub/foo.o: sub/foo.h
269266e564dSmrg  #    sub/foo.c:
270266e564dSmrg  #    sub/foo.h:
271266e564dSmrg  # ICC 7.1 will output
272266e564dSmrg  #    foo.o: sub/foo.c sub/foo.h
273266e564dSmrg  # and will wrap long lines using \ :
274266e564dSmrg  #    foo.o: sub/foo.c ... \
275266e564dSmrg  #     sub/foo.h ... \
276266e564dSmrg  #     ...
277266e564dSmrg
278266e564dSmrg  "$@" -MD -MF "$tmpdepfile"
279266e564dSmrg  stat=$?
280266e564dSmrg  if test $stat -eq 0; then :
281266e564dSmrg  else
282266e564dSmrg    rm -f "$tmpdepfile"
283266e564dSmrg    exit $stat
284266e564dSmrg  fi
285266e564dSmrg  rm -f "$depfile"
286266e564dSmrg  # Each line is of the form `foo.o: dependent.h',
287266e564dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288266e564dSmrg  # Do two passes, one to just change these to
289266e564dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
290266e564dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291266e564dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
292266e564dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
293266e564dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294266e564dSmrg    sed -e 's/$/ :/' >> "$depfile"
295266e564dSmrg  rm -f "$tmpdepfile"
296266e564dSmrg  ;;
297266e564dSmrg
298266e564dSmrghp2)
299266e564dSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300266e564dSmrg  # compilers, which have integrated preprocessors.  The correct option
301266e564dSmrg  # to use with these is +Maked; it writes dependencies to a file named
302266e564dSmrg  # 'foo.d', which lands next to the object file, wherever that
303266e564dSmrg  # happens to be.
304266e564dSmrg  # Much of this is similar to the tru64 case; see comments there.
305266e564dSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306266e564dSmrg  test "x$dir" = "x$object" && dir=
307266e564dSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308266e564dSmrg  if test "$libtool" = yes; then
309266e564dSmrg    tmpdepfile1=$dir$base.d
310266e564dSmrg    tmpdepfile2=$dir.libs/$base.d
311266e564dSmrg    "$@" -Wc,+Maked
312266e564dSmrg  else
313266e564dSmrg    tmpdepfile1=$dir$base.d
314266e564dSmrg    tmpdepfile2=$dir$base.d
315266e564dSmrg    "$@" +Maked
316266e564dSmrg  fi
317266e564dSmrg  stat=$?
318266e564dSmrg  if test $stat -eq 0; then :
319266e564dSmrg  else
320266e564dSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321266e564dSmrg     exit $stat
322266e564dSmrg  fi
323266e564dSmrg
324266e564dSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325266e564dSmrg  do
326266e564dSmrg    test -f "$tmpdepfile" && break
327266e564dSmrg  done
328266e564dSmrg  if test -f "$tmpdepfile"; then
329266e564dSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330266e564dSmrg    # Add `dependent.h:' lines.
331266e564dSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332266e564dSmrg  else
333266e564dSmrg    echo "#dummy" > "$depfile"
334266e564dSmrg  fi
335266e564dSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336266e564dSmrg  ;;
337266e564dSmrg
338266e564dSmrgtru64)
339266e564dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
340266e564dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341266e564dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342266e564dSmrg   # dependencies in `foo.d' instead, so we check for that too.
343266e564dSmrg   # Subdirectories are respected.
344266e564dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345266e564dSmrg   test "x$dir" = "x$object" && dir=
346266e564dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347266e564dSmrg
348266e564dSmrg   if test "$libtool" = yes; then
349266e564dSmrg      # With Tru64 cc, shared objects can also be used to make a
350266e564dSmrg      # static library.  This mechanism is used in libtool 1.4 series to
351266e564dSmrg      # handle both shared and static libraries in a single compilation.
352266e564dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353266e564dSmrg      #
354266e564dSmrg      # With libtool 1.5 this exception was removed, and libtool now
355266e564dSmrg      # generates 2 separate objects for the 2 libraries.  These two
356266e564dSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
357266e564dSmrg      # in $dir$base.o.d.  We have to check for both files, because
358266e564dSmrg      # one of the two compilations can be disabled.  We should prefer
359266e564dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360266e564dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
361266e564dSmrg      # the former would cause a distcleancheck panic.
362266e564dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363266e564dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364266e564dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365266e564dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366266e564dSmrg      "$@" -Wc,-MD
367266e564dSmrg   else
368266e564dSmrg      tmpdepfile1=$dir$base.o.d
369266e564dSmrg      tmpdepfile2=$dir$base.d
370266e564dSmrg      tmpdepfile3=$dir$base.d
371266e564dSmrg      tmpdepfile4=$dir$base.d
372266e564dSmrg      "$@" -MD
373266e564dSmrg   fi
374266e564dSmrg
375266e564dSmrg   stat=$?
376266e564dSmrg   if test $stat -eq 0; then :
377266e564dSmrg   else
378266e564dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379266e564dSmrg      exit $stat
380266e564dSmrg   fi
381266e564dSmrg
382266e564dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383266e564dSmrg   do
384266e564dSmrg     test -f "$tmpdepfile" && break
385266e564dSmrg   done
386266e564dSmrg   if test -f "$tmpdepfile"; then
387266e564dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388266e564dSmrg      # That's a tab and a space in the [].
389266e564dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390266e564dSmrg   else
391266e564dSmrg      echo "#dummy" > "$depfile"
392266e564dSmrg   fi
393266e564dSmrg   rm -f "$tmpdepfile"
394266e564dSmrg   ;;
395266e564dSmrg
396266e564dSmrg#nosideeffect)
397266e564dSmrg  # This comment above is used by automake to tell side-effect
398266e564dSmrg  # dependency tracking mechanisms from slower ones.
399266e564dSmrg
400266e564dSmrgdashmstdout)
401266e564dSmrg  # Important note: in order to support this mode, a compiler *must*
402266e564dSmrg  # always write the preprocessed file to stdout, regardless of -o.
403266e564dSmrg  "$@" || exit $?
404266e564dSmrg
405266e564dSmrg  # Remove the call to Libtool.
406266e564dSmrg  if test "$libtool" = yes; then
407266e564dSmrg    while test $1 != '--mode=compile'; do
408266e564dSmrg      shift
409266e564dSmrg    done
410266e564dSmrg    shift
411266e564dSmrg  fi
412266e564dSmrg
413266e564dSmrg  # Remove `-o $object'.
414266e564dSmrg  IFS=" "
415266e564dSmrg  for arg
416266e564dSmrg  do
417266e564dSmrg    case $arg in
418266e564dSmrg    -o)
419266e564dSmrg      shift
420266e564dSmrg      ;;
421266e564dSmrg    $object)
422266e564dSmrg      shift
423266e564dSmrg      ;;
424266e564dSmrg    *)
425266e564dSmrg      set fnord "$@" "$arg"
426266e564dSmrg      shift # fnord
427266e564dSmrg      shift # $arg
428266e564dSmrg      ;;
429266e564dSmrg    esac
430266e564dSmrg  done
431266e564dSmrg
432266e564dSmrg  test -z "$dashmflag" && dashmflag=-M
433266e564dSmrg  # Require at least two characters before searching for `:'
434266e564dSmrg  # in the target name.  This is to cope with DOS-style filenames:
435266e564dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436266e564dSmrg  "$@" $dashmflag |
437266e564dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438266e564dSmrg  rm -f "$depfile"
439266e564dSmrg  cat < "$tmpdepfile" > "$depfile"
440266e564dSmrg  tr ' ' '
441266e564dSmrg' < "$tmpdepfile" | \
442266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
443266e564dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
444266e564dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445266e564dSmrg  rm -f "$tmpdepfile"
446266e564dSmrg  ;;
447266e564dSmrg
448266e564dSmrgdashXmstdout)
449266e564dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
450266e564dSmrg  # run, as this mode is specially recognized in the preamble.
451266e564dSmrg  exit 1
452266e564dSmrg  ;;
453266e564dSmrg
454266e564dSmrgmakedepend)
455266e564dSmrg  "$@" || exit $?
456266e564dSmrg  # Remove any Libtool call
457266e564dSmrg  if test "$libtool" = yes; then
458266e564dSmrg    while test $1 != '--mode=compile'; do
459266e564dSmrg      shift
460266e564dSmrg    done
461266e564dSmrg    shift
462266e564dSmrg  fi
463266e564dSmrg  # X makedepend
464266e564dSmrg  shift
465266e564dSmrg  cleared=no
466266e564dSmrg  for arg in "$@"; do
467266e564dSmrg    case $cleared in
468266e564dSmrg    no)
469266e564dSmrg      set ""; shift
470266e564dSmrg      cleared=yes ;;
471266e564dSmrg    esac
472266e564dSmrg    case "$arg" in
473266e564dSmrg    -D*|-I*)
474266e564dSmrg      set fnord "$@" "$arg"; shift ;;
475266e564dSmrg    # Strip any option that makedepend may not understand.  Remove
476266e564dSmrg    # the object too, otherwise makedepend will parse it as a source file.
477266e564dSmrg    -*|$object)
478266e564dSmrg      ;;
479266e564dSmrg    *)
480266e564dSmrg      set fnord "$@" "$arg"; shift ;;
481266e564dSmrg    esac
482266e564dSmrg  done
483266e564dSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
484266e564dSmrg  touch "$tmpdepfile"
485266e564dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486266e564dSmrg  rm -f "$depfile"
487266e564dSmrg  cat < "$tmpdepfile" > "$depfile"
488266e564dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
489266e564dSmrg' | \
490266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
491266e564dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
492266e564dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493266e564dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
494266e564dSmrg  ;;
495266e564dSmrg
496266e564dSmrgcpp)
497266e564dSmrg  # Important note: in order to support this mode, a compiler *must*
498266e564dSmrg  # always write the preprocessed file to stdout.
499266e564dSmrg  "$@" || exit $?
500266e564dSmrg
501266e564dSmrg  # Remove the call to Libtool.
502266e564dSmrg  if test "$libtool" = yes; then
503266e564dSmrg    while test $1 != '--mode=compile'; do
504266e564dSmrg      shift
505266e564dSmrg    done
506266e564dSmrg    shift
507266e564dSmrg  fi
508266e564dSmrg
509266e564dSmrg  # Remove `-o $object'.
510266e564dSmrg  IFS=" "
511266e564dSmrg  for arg
512266e564dSmrg  do
513266e564dSmrg    case $arg in
514266e564dSmrg    -o)
515266e564dSmrg      shift
516266e564dSmrg      ;;
517266e564dSmrg    $object)
518266e564dSmrg      shift
519266e564dSmrg      ;;
520266e564dSmrg    *)
521266e564dSmrg      set fnord "$@" "$arg"
522266e564dSmrg      shift # fnord
523266e564dSmrg      shift # $arg
524266e564dSmrg      ;;
525266e564dSmrg    esac
526266e564dSmrg  done
527266e564dSmrg
528266e564dSmrg  "$@" -E |
529266e564dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530266e564dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531266e564dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
532266e564dSmrg  rm -f "$depfile"
533266e564dSmrg  echo "$object : \\" > "$depfile"
534266e564dSmrg  cat < "$tmpdepfile" >> "$depfile"
535266e564dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536266e564dSmrg  rm -f "$tmpdepfile"
537266e564dSmrg  ;;
538266e564dSmrg
539266e564dSmrgmsvisualcpp)
540266e564dSmrg  # Important note: in order to support this mode, a compiler *must*
541266e564dSmrg  # always write the preprocessed file to stdout, regardless of -o,
542266e564dSmrg  # because we must use -o when running libtool.
543266e564dSmrg  "$@" || exit $?
544266e564dSmrg  IFS=" "
545266e564dSmrg  for arg
546266e564dSmrg  do
547266e564dSmrg    case "$arg" in
548266e564dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549266e564dSmrg	set fnord "$@"
550266e564dSmrg	shift
551266e564dSmrg	shift
552266e564dSmrg	;;
553266e564dSmrg    *)
554266e564dSmrg	set fnord "$@" "$arg"
555266e564dSmrg	shift
556266e564dSmrg	shift
557266e564dSmrg	;;
558266e564dSmrg    esac
559266e564dSmrg  done
560266e564dSmrg  "$@" -E |
561266e564dSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562266e564dSmrg  rm -f "$depfile"
563266e564dSmrg  echo "$object : \\" > "$depfile"
564266e564dSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565266e564dSmrg  echo "	" >> "$depfile"
566266e564dSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567266e564dSmrg  rm -f "$tmpdepfile"
568266e564dSmrg  ;;
569266e564dSmrg
570266e564dSmrgnone)
571266e564dSmrg  exec "$@"
572266e564dSmrg  ;;
573266e564dSmrg
574266e564dSmrg*)
575266e564dSmrg  echo "Unknown depmode $depmode" 1>&2
576266e564dSmrg  exit 1
577266e564dSmrg  ;;
578266e564dSmrgesac
579266e564dSmrg
580266e564dSmrgexit 0
581266e564dSmrg
582266e564dSmrg# Local Variables:
583266e564dSmrg# mode: shell-script
584266e564dSmrg# sh-indentation: 2
585266e564dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
586266e564dSmrg# time-stamp-start: "scriptversion="
587266e564dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
588266e564dSmrg# time-stamp-end: "$"
589266e564dSmrg# End:
590