1290001Sglebius#! /bin/sh
2290001Sglebius# depcomp - compile a program generating dependencies as side-effects
3290001Sglebius
4290001Sglebiusscriptversion=2009-04-28.21; # UTC
5290001Sglebius
6290001Sglebius# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7290001Sglebius# Software Foundation, Inc.
8290001Sglebius
9290001Sglebius# This program is free software; you can redistribute it and/or modify
10290001Sglebius# it under the terms of the GNU General Public License as published by
11290001Sglebius# the Free Software Foundation; either version 2, or (at your option)
12290001Sglebius# any later version.
13290001Sglebius
14290001Sglebius# This program is distributed in the hope that it will be useful,
15290001Sglebius# but WITHOUT ANY WARRANTY; without even the implied warranty of
16290001Sglebius# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17290001Sglebius# GNU General Public License for more details.
18290001Sglebius
19290001Sglebius# You should have received a copy of the GNU General Public License
20290001Sglebius# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21290001Sglebius
22290001Sglebius# As a special exception to the GNU General Public License, if you
23290001Sglebius# distribute this file as part of a program that contains a
24290001Sglebius# configuration script generated by Autoconf, you may include it under
25290001Sglebius# the same distribution terms that you use for the rest of that program.
26290001Sglebius
27290001Sglebius# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28290001Sglebius
29290001Sglebiuscase $1 in
30290001Sglebius  '')
31290001Sglebius     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32290001Sglebius     exit 1;
33290001Sglebius     ;;
34290001Sglebius  -h | --h*)
35290001Sglebius    cat <<\EOF
36290001SglebiusUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37290001Sglebius
38290001SglebiusRun PROGRAMS ARGS to compile a file, generating dependencies
39290001Sglebiusas side-effects.
40290001Sglebius
41290001SglebiusEnvironment variables:
42290001Sglebius  depmode     Dependency tracking mode.
43290001Sglebius  source      Source file read by `PROGRAMS ARGS'.
44290001Sglebius  object      Object file output by `PROGRAMS ARGS'.
45290001Sglebius  DEPDIR      directory where to store dependencies.
46290001Sglebius  depfile     Dependency file to output.
47290001Sglebius  tmpdepfile  Temporary file to use when outputing dependencies.
48290001Sglebius  libtool     Whether libtool is used (yes/no).
49290001Sglebius
50290001SglebiusReport bugs to <bug-automake@gnu.org>.
51290001SglebiusEOF
52290001Sglebius    exit $?
53290001Sglebius    ;;
54290001Sglebius  -v | --v*)
55290001Sglebius    echo "depcomp $scriptversion"
56290001Sglebius    exit $?
57290001Sglebius    ;;
58290001Sglebiusesac
59290001Sglebius
60290001Sglebiusif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61290001Sglebius  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62290001Sglebius  exit 1
63290001Sglebiusfi
64290001Sglebius
65290001Sglebius# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66290001Sglebiusdepfile=${depfile-`echo "$object" |
67290001Sglebius  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68290001Sglebiustmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69290001Sglebius
70290001Sglebiusrm -f "$tmpdepfile"
71290001Sglebius
72290001Sglebius# Some modes work just like other modes, but use different flags.  We
73290001Sglebius# parameterize here, but still list the modes in the big case below,
74290001Sglebius# to make depend.m4 easier to write.  Note that we *cannot* use a case
75290001Sglebius# here, because this file can only contain one case statement.
76290001Sglebiusif test "$depmode" = hp; then
77290001Sglebius  # HP compiler uses -M and no extra arg.
78290001Sglebius  gccflag=-M
79290001Sglebius  depmode=gcc
80290001Sglebiusfi
81290001Sglebius
82290001Sglebiusif test "$depmode" = dashXmstdout; then
83290001Sglebius   # This is just like dashmstdout with a different argument.
84290001Sglebius   dashmflag=-xM
85290001Sglebius   depmode=dashmstdout
86290001Sglebiusfi
87290001Sglebius
88290001Sglebiuscygpath_u="cygpath -u -f -"
89290001Sglebiusif test "$depmode" = msvcmsys; then
90290001Sglebius   # This is just like msvisualcpp but w/o cygpath translation.
91290001Sglebius   # Just convert the backslash-escaped backslashes to single forward
92290001Sglebius   # slashes to satisfy depend.m4
93290001Sglebius   cygpath_u="sed s,\\\\\\\\,/,g"
94290001Sglebius   depmode=msvisualcpp
95290001Sglebiusfi
96290001Sglebius
97290001Sglebiuscase "$depmode" in
98290001Sglebiusgcc3)
99290001Sglebius## gcc 3 implements dependency tracking that does exactly what
100290001Sglebius## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101290001Sglebius## it if -MD -MP comes after the -MF stuff.  Hmm.
102290001Sglebius## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103290001Sglebius## the command line argument order; so add the flags where they
104290001Sglebius## appear in depend2.am.  Note that the slowdown incurred here
105290001Sglebius## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106290001Sglebius  for arg
107290001Sglebius  do
108290001Sglebius    case $arg in
109290001Sglebius    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110290001Sglebius    *)  set fnord "$@" "$arg" ;;
111290001Sglebius    esac
112290001Sglebius    shift # fnord
113290001Sglebius    shift # $arg
114290001Sglebius  done
115290001Sglebius  "$@"
116290001Sglebius  stat=$?
117290001Sglebius  if test $stat -eq 0; then :
118290001Sglebius  else
119290001Sglebius    rm -f "$tmpdepfile"
120290001Sglebius    exit $stat
121290001Sglebius  fi
122290001Sglebius  mv "$tmpdepfile" "$depfile"
123290001Sglebius  ;;
124290001Sglebius
125290001Sglebiusgcc)
126290001Sglebius## There are various ways to get dependency output from gcc.  Here's
127290001Sglebius## why we pick this rather obscure method:
128290001Sglebius## - Don't want to use -MD because we'd like the dependencies to end
129290001Sglebius##   up in a subdir.  Having to rename by hand is ugly.
130290001Sglebius##   (We might end up doing this anyway to support other compilers.)
131290001Sglebius## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132290001Sglebius##   -MM, not -M (despite what the docs say).
133290001Sglebius## - Using -M directly means running the compiler twice (even worse
134290001Sglebius##   than renaming).
135290001Sglebius  if test -z "$gccflag"; then
136290001Sglebius    gccflag=-MD,
137290001Sglebius  fi
138290001Sglebius  "$@" -Wp,"$gccflag$tmpdepfile"
139290001Sglebius  stat=$?
140290001Sglebius  if test $stat -eq 0; then :
141290001Sglebius  else
142290001Sglebius    rm -f "$tmpdepfile"
143290001Sglebius    exit $stat
144290001Sglebius  fi
145290001Sglebius  rm -f "$depfile"
146290001Sglebius  echo "$object : \\" > "$depfile"
147290001Sglebius  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148290001Sglebius## The second -e expression handles DOS-style file names with drive letters.
149290001Sglebius  sed -e 's/^[^:]*: / /' \
150290001Sglebius      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151290001Sglebius## This next piece of magic avoids the `deleted header file' problem.
152290001Sglebius## The problem is that when a header file which appears in a .P file
153290001Sglebius## is deleted, the dependency causes make to die (because there is
154290001Sglebius## typically no way to rebuild the header).  We avoid this by adding
155290001Sglebius## dummy dependencies for each header file.  Too bad gcc doesn't do
156290001Sglebius## this for us directly.
157290001Sglebius  tr ' ' '
158290001Sglebius' < "$tmpdepfile" |
159290001Sglebius## Some versions of gcc put a space before the `:'.  On the theory
160290001Sglebius## that the space means something, we add a space to the output as
161290001Sglebius## well.
162290001Sglebius## Some versions of the HPUX 10.20 sed can't process this invocation
163290001Sglebius## correctly.  Breaking it into two sed invocations is a workaround.
164290001Sglebius    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165290001Sglebius  rm -f "$tmpdepfile"
166290001Sglebius  ;;
167290001Sglebius
168290001Sglebiushp)
169290001Sglebius  # This case exists only to let depend.m4 do its work.  It works by
170290001Sglebius  # looking at the text of this script.  This case will never be run,
171290001Sglebius  # since it is checked for above.
172290001Sglebius  exit 1
173290001Sglebius  ;;
174290001Sglebius
175290001Sglebiussgi)
176290001Sglebius  if test "$libtool" = yes; then
177290001Sglebius    "$@" "-Wp,-MDupdate,$tmpdepfile"
178290001Sglebius  else
179290001Sglebius    "$@" -MDupdate "$tmpdepfile"
180290001Sglebius  fi
181290001Sglebius  stat=$?
182290001Sglebius  if test $stat -eq 0; then :
183290001Sglebius  else
184290001Sglebius    rm -f "$tmpdepfile"
185290001Sglebius    exit $stat
186290001Sglebius  fi
187290001Sglebius  rm -f "$depfile"
188290001Sglebius
189290001Sglebius  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190290001Sglebius    echo "$object : \\" > "$depfile"
191290001Sglebius
192290001Sglebius    # Clip off the initial element (the dependent).  Don't try to be
193290001Sglebius    # clever and replace this with sed code, as IRIX sed won't handle
194290001Sglebius    # lines with more than a fixed number of characters (4096 in
195290001Sglebius    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196290001Sglebius    # the IRIX cc adds comments like `#:fec' to the end of the
197290001Sglebius    # dependency line.
198290001Sglebius    tr ' ' '
199290001Sglebius' < "$tmpdepfile" \
200290001Sglebius    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201290001Sglebius    tr '
202290001Sglebius' ' ' >> "$depfile"
203290001Sglebius    echo >> "$depfile"
204290001Sglebius
205290001Sglebius    # The second pass generates a dummy entry for each header file.
206290001Sglebius    tr ' ' '
207290001Sglebius' < "$tmpdepfile" \
208290001Sglebius   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209290001Sglebius   >> "$depfile"
210290001Sglebius  else
211290001Sglebius    # The sourcefile does not contain any dependencies, so just
212290001Sglebius    # store a dummy comment line, to avoid errors with the Makefile
213290001Sglebius    # "include basename.Plo" scheme.
214290001Sglebius    echo "#dummy" > "$depfile"
215290001Sglebius  fi
216290001Sglebius  rm -f "$tmpdepfile"
217290001Sglebius  ;;
218290001Sglebius
219290001Sglebiusaix)
220290001Sglebius  # The C for AIX Compiler uses -M and outputs the dependencies
221290001Sglebius  # in a .u file.  In older versions, this file always lives in the
222290001Sglebius  # current directory.  Also, the AIX compiler puts `$object:' at the
223290001Sglebius  # start of each line; $object doesn't have directory information.
224290001Sglebius  # Version 6 uses the directory in both cases.
225290001Sglebius  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226290001Sglebius  test "x$dir" = "x$object" && dir=
227290001Sglebius  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228290001Sglebius  if test "$libtool" = yes; then
229290001Sglebius    tmpdepfile1=$dir$base.u
230290001Sglebius    tmpdepfile2=$base.u
231290001Sglebius    tmpdepfile3=$dir.libs/$base.u
232290001Sglebius    "$@" -Wc,-M
233290001Sglebius  else
234290001Sglebius    tmpdepfile1=$dir$base.u
235290001Sglebius    tmpdepfile2=$dir$base.u
236290001Sglebius    tmpdepfile3=$dir$base.u
237290001Sglebius    "$@" -M
238290001Sglebius  fi
239290001Sglebius  stat=$?
240290001Sglebius
241290001Sglebius  if test $stat -eq 0; then :
242290001Sglebius  else
243290001Sglebius    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244290001Sglebius    exit $stat
245290001Sglebius  fi
246290001Sglebius
247290001Sglebius  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248290001Sglebius  do
249290001Sglebius    test -f "$tmpdepfile" && break
250290001Sglebius  done
251290001Sglebius  if test -f "$tmpdepfile"; then
252290001Sglebius    # Each line is of the form `foo.o: dependent.h'.
253290001Sglebius    # Do two passes, one to just change these to
254290001Sglebius    # `$object: dependent.h' and one to simply `dependent.h:'.
255290001Sglebius    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256290001Sglebius    # That's a tab and a space in the [].
257290001Sglebius    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258290001Sglebius  else
259290001Sglebius    # The sourcefile does not contain any dependencies, so just
260290001Sglebius    # store a dummy comment line, to avoid errors with the Makefile
261290001Sglebius    # "include basename.Plo" scheme.
262290001Sglebius    echo "#dummy" > "$depfile"
263290001Sglebius  fi
264290001Sglebius  rm -f "$tmpdepfile"
265290001Sglebius  ;;
266290001Sglebius
267290001Sglebiusicc)
268290001Sglebius  # Intel's C compiler understands `-MD -MF file'.  However on
269290001Sglebius  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270290001Sglebius  # ICC 7.0 will fill foo.d with something like
271290001Sglebius  #    foo.o: sub/foo.c
272290001Sglebius  #    foo.o: sub/foo.h
273290001Sglebius  # which is wrong.  We want:
274290001Sglebius  #    sub/foo.o: sub/foo.c
275290001Sglebius  #    sub/foo.o: sub/foo.h
276290001Sglebius  #    sub/foo.c:
277290001Sglebius  #    sub/foo.h:
278290001Sglebius  # ICC 7.1 will output
279290001Sglebius  #    foo.o: sub/foo.c sub/foo.h
280290001Sglebius  # and will wrap long lines using \ :
281290001Sglebius  #    foo.o: sub/foo.c ... \
282290001Sglebius  #     sub/foo.h ... \
283290001Sglebius  #     ...
284290001Sglebius
285290001Sglebius  "$@" -MD -MF "$tmpdepfile"
286290001Sglebius  stat=$?
287290001Sglebius  if test $stat -eq 0; then :
288290001Sglebius  else
289290001Sglebius    rm -f "$tmpdepfile"
290290001Sglebius    exit $stat
291290001Sglebius  fi
292290001Sglebius  rm -f "$depfile"
293290001Sglebius  # Each line is of the form `foo.o: dependent.h',
294290001Sglebius  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295290001Sglebius  # Do two passes, one to just change these to
296290001Sglebius  # `$object: dependent.h' and one to simply `dependent.h:'.
297290001Sglebius  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298290001Sglebius  # Some versions of the HPUX 10.20 sed can't process this invocation
299290001Sglebius  # correctly.  Breaking it into two sed invocations is a workaround.
300290001Sglebius  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301290001Sglebius    sed -e 's/$/ :/' >> "$depfile"
302290001Sglebius  rm -f "$tmpdepfile"
303290001Sglebius  ;;
304290001Sglebius
305290001Sglebiushp2)
306290001Sglebius  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307290001Sglebius  # compilers, which have integrated preprocessors.  The correct option
308290001Sglebius  # to use with these is +Maked; it writes dependencies to a file named
309290001Sglebius  # 'foo.d', which lands next to the object file, wherever that
310290001Sglebius  # happens to be.
311290001Sglebius  # Much of this is similar to the tru64 case; see comments there.
312290001Sglebius  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313290001Sglebius  test "x$dir" = "x$object" && dir=
314290001Sglebius  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315290001Sglebius  if test "$libtool" = yes; then
316290001Sglebius    tmpdepfile1=$dir$base.d
317290001Sglebius    tmpdepfile2=$dir.libs/$base.d
318290001Sglebius    "$@" -Wc,+Maked
319290001Sglebius  else
320290001Sglebius    tmpdepfile1=$dir$base.d
321290001Sglebius    tmpdepfile2=$dir$base.d
322290001Sglebius    "$@" +Maked
323290001Sglebius  fi
324290001Sglebius  stat=$?
325290001Sglebius  if test $stat -eq 0; then :
326290001Sglebius  else
327290001Sglebius     rm -f "$tmpdepfile1" "$tmpdepfile2"
328290001Sglebius     exit $stat
329290001Sglebius  fi
330290001Sglebius
331290001Sglebius  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332290001Sglebius  do
333290001Sglebius    test -f "$tmpdepfile" && break
334290001Sglebius  done
335290001Sglebius  if test -f "$tmpdepfile"; then
336290001Sglebius    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337290001Sglebius    # Add `dependent.h:' lines.
338290001Sglebius    sed -ne '2,${
339290001Sglebius	       s/^ *//
340290001Sglebius	       s/ \\*$//
341290001Sglebius	       s/$/:/
342290001Sglebius	       p
343290001Sglebius	     }' "$tmpdepfile" >> "$depfile"
344290001Sglebius  else
345290001Sglebius    echo "#dummy" > "$depfile"
346290001Sglebius  fi
347290001Sglebius  rm -f "$tmpdepfile" "$tmpdepfile2"
348290001Sglebius  ;;
349290001Sglebius
350290001Sglebiustru64)
351290001Sglebius   # The Tru64 compiler uses -MD to generate dependencies as a side
352290001Sglebius   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353290001Sglebius   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354290001Sglebius   # dependencies in `foo.d' instead, so we check for that too.
355290001Sglebius   # Subdirectories are respected.
356290001Sglebius   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357290001Sglebius   test "x$dir" = "x$object" && dir=
358290001Sglebius   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359290001Sglebius
360290001Sglebius   if test "$libtool" = yes; then
361290001Sglebius      # With Tru64 cc, shared objects can also be used to make a
362290001Sglebius      # static library.  This mechanism is used in libtool 1.4 series to
363290001Sglebius      # handle both shared and static libraries in a single compilation.
364290001Sglebius      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365290001Sglebius      #
366290001Sglebius      # With libtool 1.5 this exception was removed, and libtool now
367290001Sglebius      # generates 2 separate objects for the 2 libraries.  These two
368290001Sglebius      # compilations output dependencies in $dir.libs/$base.o.d and
369290001Sglebius      # in $dir$base.o.d.  We have to check for both files, because
370290001Sglebius      # one of the two compilations can be disabled.  We should prefer
371290001Sglebius      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372290001Sglebius      # automatically cleaned when .libs/ is deleted, while ignoring
373290001Sglebius      # the former would cause a distcleancheck panic.
374290001Sglebius      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375290001Sglebius      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376290001Sglebius      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377290001Sglebius      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378290001Sglebius      "$@" -Wc,-MD
379290001Sglebius   else
380290001Sglebius      tmpdepfile1=$dir$base.o.d
381290001Sglebius      tmpdepfile2=$dir$base.d
382290001Sglebius      tmpdepfile3=$dir$base.d
383290001Sglebius      tmpdepfile4=$dir$base.d
384290001Sglebius      "$@" -MD
385290001Sglebius   fi
386290001Sglebius
387290001Sglebius   stat=$?
388290001Sglebius   if test $stat -eq 0; then :
389290001Sglebius   else
390290001Sglebius      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391290001Sglebius      exit $stat
392290001Sglebius   fi
393290001Sglebius
394290001Sglebius   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395290001Sglebius   do
396290001Sglebius     test -f "$tmpdepfile" && break
397290001Sglebius   done
398290001Sglebius   if test -f "$tmpdepfile"; then
399290001Sglebius      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400290001Sglebius      # That's a tab and a space in the [].
401290001Sglebius      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402290001Sglebius   else
403290001Sglebius      echo "#dummy" > "$depfile"
404290001Sglebius   fi
405290001Sglebius   rm -f "$tmpdepfile"
406290001Sglebius   ;;
407290001Sglebius
408290001Sglebius#nosideeffect)
409290001Sglebius  # This comment above is used by automake to tell side-effect
410290001Sglebius  # dependency tracking mechanisms from slower ones.
411290001Sglebius
412290001Sglebiusdashmstdout)
413290001Sglebius  # Important note: in order to support this mode, a compiler *must*
414290001Sglebius  # always write the preprocessed file to stdout, regardless of -o.
415290001Sglebius  "$@" || exit $?
416290001Sglebius
417290001Sglebius  # Remove the call to Libtool.
418290001Sglebius  if test "$libtool" = yes; then
419290001Sglebius    while test "X$1" != 'X--mode=compile'; do
420290001Sglebius      shift
421290001Sglebius    done
422290001Sglebius    shift
423290001Sglebius  fi
424290001Sglebius
425290001Sglebius  # Remove `-o $object'.
426290001Sglebius  IFS=" "
427290001Sglebius  for arg
428290001Sglebius  do
429290001Sglebius    case $arg in
430290001Sglebius    -o)
431290001Sglebius      shift
432290001Sglebius      ;;
433290001Sglebius    $object)
434290001Sglebius      shift
435290001Sglebius      ;;
436290001Sglebius    *)
437290001Sglebius      set fnord "$@" "$arg"
438290001Sglebius      shift # fnord
439290001Sglebius      shift # $arg
440290001Sglebius      ;;
441290001Sglebius    esac
442290001Sglebius  done
443290001Sglebius
444290001Sglebius  test -z "$dashmflag" && dashmflag=-M
445290001Sglebius  # Require at least two characters before searching for `:'
446290001Sglebius  # in the target name.  This is to cope with DOS-style filenames:
447290001Sglebius  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448290001Sglebius  "$@" $dashmflag |
449290001Sglebius    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450290001Sglebius  rm -f "$depfile"
451290001Sglebius  cat < "$tmpdepfile" > "$depfile"
452290001Sglebius  tr ' ' '
453290001Sglebius' < "$tmpdepfile" | \
454290001Sglebius## Some versions of the HPUX 10.20 sed can't process this invocation
455290001Sglebius## correctly.  Breaking it into two sed invocations is a workaround.
456290001Sglebius    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457290001Sglebius  rm -f "$tmpdepfile"
458290001Sglebius  ;;
459290001Sglebius
460290001SglebiusdashXmstdout)
461290001Sglebius  # This case only exists to satisfy depend.m4.  It is never actually
462290001Sglebius  # run, as this mode is specially recognized in the preamble.
463290001Sglebius  exit 1
464290001Sglebius  ;;
465290001Sglebius
466290001Sglebiusmakedepend)
467290001Sglebius  "$@" || exit $?
468290001Sglebius  # Remove any Libtool call
469290001Sglebius  if test "$libtool" = yes; then
470290001Sglebius    while test "X$1" != 'X--mode=compile'; do
471290001Sglebius      shift
472290001Sglebius    done
473290001Sglebius    shift
474290001Sglebius  fi
475290001Sglebius  # X makedepend
476290001Sglebius  shift
477290001Sglebius  cleared=no eat=no
478290001Sglebius  for arg
479290001Sglebius  do
480290001Sglebius    case $cleared in
481290001Sglebius    no)
482290001Sglebius      set ""; shift
483290001Sglebius      cleared=yes ;;
484290001Sglebius    esac
485290001Sglebius    if test $eat = yes; then
486290001Sglebius      eat=no
487290001Sglebius      continue
488290001Sglebius    fi
489290001Sglebius    case "$arg" in
490290001Sglebius    -D*|-I*)
491290001Sglebius      set fnord "$@" "$arg"; shift ;;
492290001Sglebius    # Strip any option that makedepend may not understand.  Remove
493290001Sglebius    # the object too, otherwise makedepend will parse it as a source file.
494290001Sglebius    -arch)
495290001Sglebius      eat=yes ;;
496290001Sglebius    -*|$object)
497290001Sglebius      ;;
498290001Sglebius    *)
499290001Sglebius      set fnord "$@" "$arg"; shift ;;
500290001Sglebius    esac
501290001Sglebius  done
502290001Sglebius  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503290001Sglebius  touch "$tmpdepfile"
504290001Sglebius  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505290001Sglebius  rm -f "$depfile"
506290001Sglebius  cat < "$tmpdepfile" > "$depfile"
507290001Sglebius  sed '1,2d' "$tmpdepfile" | tr ' ' '
508290001Sglebius' | \
509290001Sglebius## Some versions of the HPUX 10.20 sed can't process this invocation
510290001Sglebius## correctly.  Breaking it into two sed invocations is a workaround.
511290001Sglebius    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512290001Sglebius  rm -f "$tmpdepfile" "$tmpdepfile".bak
513290001Sglebius  ;;
514290001Sglebius
515290001Sglebiuscpp)
516290001Sglebius  # Important note: in order to support this mode, a compiler *must*
517290001Sglebius  # always write the preprocessed file to stdout.
518290001Sglebius  "$@" || exit $?
519290001Sglebius
520290001Sglebius  # Remove the call to Libtool.
521290001Sglebius  if test "$libtool" = yes; then
522290001Sglebius    while test "X$1" != 'X--mode=compile'; do
523290001Sglebius      shift
524290001Sglebius    done
525290001Sglebius    shift
526290001Sglebius  fi
527290001Sglebius
528290001Sglebius  # Remove `-o $object'.
529290001Sglebius  IFS=" "
530290001Sglebius  for arg
531290001Sglebius  do
532290001Sglebius    case $arg in
533290001Sglebius    -o)
534290001Sglebius      shift
535290001Sglebius      ;;
536290001Sglebius    $object)
537290001Sglebius      shift
538290001Sglebius      ;;
539290001Sglebius    *)
540290001Sglebius      set fnord "$@" "$arg"
541290001Sglebius      shift # fnord
542290001Sglebius      shift # $arg
543290001Sglebius      ;;
544290001Sglebius    esac
545290001Sglebius  done
546290001Sglebius
547290001Sglebius  "$@" -E |
548290001Sglebius    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549290001Sglebius       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550290001Sglebius    sed '$ s: \\$::' > "$tmpdepfile"
551290001Sglebius  rm -f "$depfile"
552290001Sglebius  echo "$object : \\" > "$depfile"
553290001Sglebius  cat < "$tmpdepfile" >> "$depfile"
554290001Sglebius  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555290001Sglebius  rm -f "$tmpdepfile"
556290001Sglebius  ;;
557290001Sglebius
558290001Sglebiusmsvisualcpp)
559290001Sglebius  # Important note: in order to support this mode, a compiler *must*
560290001Sglebius  # always write the preprocessed file to stdout.
561290001Sglebius  "$@" || exit $?
562290001Sglebius
563290001Sglebius  # Remove the call to Libtool.
564290001Sglebius  if test "$libtool" = yes; then
565290001Sglebius    while test "X$1" != 'X--mode=compile'; do
566290001Sglebius      shift
567290001Sglebius    done
568290001Sglebius    shift
569290001Sglebius  fi
570290001Sglebius
571290001Sglebius  IFS=" "
572290001Sglebius  for arg
573290001Sglebius  do
574290001Sglebius    case "$arg" in
575290001Sglebius    -o)
576290001Sglebius      shift
577290001Sglebius      ;;
578290001Sglebius    $object)
579290001Sglebius      shift
580290001Sglebius      ;;
581290001Sglebius    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582290001Sglebius	set fnord "$@"
583290001Sglebius	shift
584290001Sglebius	shift
585290001Sglebius	;;
586290001Sglebius    *)
587290001Sglebius	set fnord "$@" "$arg"
588290001Sglebius	shift
589290001Sglebius	shift
590290001Sglebius	;;
591290001Sglebius    esac
592290001Sglebius  done
593290001Sglebius  "$@" -E 2>/dev/null |
594290001Sglebius  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595290001Sglebius  rm -f "$depfile"
596290001Sglebius  echo "$object : \\" > "$depfile"
597290001Sglebius  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598290001Sglebius  echo "	" >> "$depfile"
599290001Sglebius  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600290001Sglebius  rm -f "$tmpdepfile"
601290001Sglebius  ;;
602290001Sglebius
603290001Sglebiusmsvcmsys)
604290001Sglebius  # This case exists only to let depend.m4 do its work.  It works by
605290001Sglebius  # looking at the text of this script.  This case will never be run,
606290001Sglebius  # since it is checked for above.
607290001Sglebius  exit 1
608290001Sglebius  ;;
609290001Sglebius
610290001Sglebiusnone)
611290001Sglebius  exec "$@"
612290001Sglebius  ;;
613290001Sglebius
614290001Sglebius*)
615290001Sglebius  echo "Unknown depmode $depmode" 1>&2
616290001Sglebius  exit 1
617290001Sglebius  ;;
618290001Sglebiusesac
619290001Sglebius
620290001Sglebiusexit 0
621290001Sglebius
622290001Sglebius# Local Variables:
623290001Sglebius# mode: shell-script
624290001Sglebius# sh-indentation: 2
625290001Sglebius# eval: (add-hook 'write-file-hooks 'time-stamp)
626290001Sglebius# time-stamp-start: "scriptversion="
627290001Sglebius# time-stamp-format: "%:y-%02m-%02d.%02H"
628290001Sglebius# time-stamp-time-zone: "UTC"
629290001Sglebius# time-stamp-end: "; # UTC"
630290001Sglebius# End:
631