181404Speter#! /bin/sh
281404Speter# depcomp - compile a program generating dependencies as side-effects
381404Speter
4177391Sobrienscriptversion=2006-10-15.18
5177391Sobrien
6177391Sobrien# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
7177391Sobrien# Foundation, Inc.
8177391Sobrien
981404Speter# This program is free software; you can redistribute it and/or modify
1081404Speter# it under the terms of the GNU General Public License as published by
1181404Speter# the Free Software Foundation; either version 2, or (at your option)
1281404Speter# any later version.
1381404Speter
1481404Speter# This program is distributed in the hope that it will be useful,
1581404Speter# but WITHOUT ANY WARRANTY; without even the implied warranty of
1681404Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1781404Speter# GNU General Public License for more details.
1881404Speter
1981404Speter# You should have received a copy of the GNU General Public License
2081404Speter# along with this program; if not, write to the Free Software
21177391Sobrien# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22177391Sobrien# 02110-1301, USA.
2381404Speter
24128266Speter# As a special exception to the GNU General Public License, if you
25128266Speter# distribute this file as part of a program that contains a
26128266Speter# configuration script generated by Autoconf, you may include it under
27128266Speter# the same distribution terms that you use for the rest of that program.
28128266Speter
2981404Speter# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
3081404Speter
31177391Sobriencase $1 in
32177391Sobrien  '')
33177391Sobrien     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34177391Sobrien     exit 1;
35177391Sobrien     ;;
36177391Sobrien  -h | --h*)
37177391Sobrien    cat <<\EOF
38177391SobrienUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39177391Sobrien
40177391SobrienRun PROGRAMS ARGS to compile a file, generating dependencies
41177391Sobrienas side-effects.
42177391Sobrien
43177391SobrienEnvironment variables:
44177391Sobrien  depmode     Dependency tracking mode.
45177391Sobrien  source      Source file read by `PROGRAMS ARGS'.
46177391Sobrien  object      Object file output by `PROGRAMS ARGS'.
47177391Sobrien  DEPDIR      directory where to store dependencies.
48177391Sobrien  depfile     Dependency file to output.
49177391Sobrien  tmpdepfile  Temporary file to use when outputing dependencies.
50177391Sobrien  libtool     Whether libtool is used (yes/no).
51177391Sobrien
52177391SobrienReport bugs to <bug-automake@gnu.org>.
53177391SobrienEOF
54177391Sobrien    exit $?
55177391Sobrien    ;;
56177391Sobrien  -v | --v*)
57177391Sobrien    echo "depcomp $scriptversion"
58177391Sobrien    exit $?
59177391Sobrien    ;;
60177391Sobrienesac
61177391Sobrien
6281404Speterif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6381404Speter  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6481404Speter  exit 1
6581404Speterfi
6681404Speter
67177391Sobrien# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68177391Sobriendepfile=${depfile-`echo "$object" |
69177391Sobrien  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
7081404Spetertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7181404Speter
7281404Speterrm -f "$tmpdepfile"
7381404Speter
7481404Speter# Some modes work just like other modes, but use different flags.  We
7581404Speter# parameterize here, but still list the modes in the big case below,
7681404Speter# to make depend.m4 easier to write.  Note that we *cannot* use a case
7781404Speter# here, because this file can only contain one case statement.
7881404Speterif test "$depmode" = hp; then
7981404Speter  # HP compiler uses -M and no extra arg.
8081404Speter  gccflag=-M
8181404Speter  depmode=gcc
8281404Speterfi
8381404Speter
8481404Speterif test "$depmode" = dashXmstdout; then
8581404Speter   # This is just like dashmstdout with a different argument.
8681404Speter   dashmflag=-xM
8781404Speter   depmode=dashmstdout
8881404Speterfi
8981404Speter
9081404Spetercase "$depmode" in
9181404Spetergcc3)
9281404Speter## gcc 3 implements dependency tracking that does exactly what
93128266Speter## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94128266Speter## it if -MD -MP comes after the -MF stuff.  Hmm.
95177391Sobrien## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96177391Sobrien## the command line argument order; so add the flags where they
97177391Sobrien## appear in depend2.am.  Note that the slowdown incurred here
98177391Sobrien## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99177391Sobrien  for arg
100177391Sobrien  do
101177391Sobrien    case $arg in
102177391Sobrien    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103177391Sobrien    *)  set fnord "$@" "$arg" ;;
104177391Sobrien    esac
105177391Sobrien    shift # fnord
106177391Sobrien    shift # $arg
107177391Sobrien  done
108177391Sobrien  "$@"
10981404Speter  stat=$?
11081404Speter  if test $stat -eq 0; then :
11181404Speter  else
11281404Speter    rm -f "$tmpdepfile"
11381404Speter    exit $stat
11481404Speter  fi
11581404Speter  mv "$tmpdepfile" "$depfile"
11681404Speter  ;;
11781404Speter
11881404Spetergcc)
11981404Speter## There are various ways to get dependency output from gcc.  Here's
12081404Speter## why we pick this rather obscure method:
12181404Speter## - Don't want to use -MD because we'd like the dependencies to end
12281404Speter##   up in a subdir.  Having to rename by hand is ugly.
12381404Speter##   (We might end up doing this anyway to support other compilers.)
12481404Speter## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
12581404Speter##   -MM, not -M (despite what the docs say).
12681404Speter## - Using -M directly means running the compiler twice (even worse
12781404Speter##   than renaming).
12881404Speter  if test -z "$gccflag"; then
12981404Speter    gccflag=-MD,
13081404Speter  fi
13181404Speter  "$@" -Wp,"$gccflag$tmpdepfile"
13281404Speter  stat=$?
13381404Speter  if test $stat -eq 0; then :
13481404Speter  else
13581404Speter    rm -f "$tmpdepfile"
13681404Speter    exit $stat
13781404Speter  fi
13881404Speter  rm -f "$depfile"
13981404Speter  echo "$object : \\" > "$depfile"
14081404Speter  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14181404Speter## The second -e expression handles DOS-style file names with drive letters.
14281404Speter  sed -e 's/^[^:]*: / /' \
14381404Speter      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
14481404Speter## This next piece of magic avoids the `deleted header file' problem.
14581404Speter## The problem is that when a header file which appears in a .P file
14681404Speter## is deleted, the dependency causes make to die (because there is
14781404Speter## typically no way to rebuild the header).  We avoid this by adding
14881404Speter## dummy dependencies for each header file.  Too bad gcc doesn't do
14981404Speter## this for us directly.
15081404Speter  tr ' ' '
15181404Speter' < "$tmpdepfile" |
15281404Speter## Some versions of gcc put a space before the `:'.  On the theory
15381404Speter## that the space means something, we add a space to the output as
15481404Speter## well.
15581404Speter## Some versions of the HPUX 10.20 sed can't process this invocation
15681404Speter## correctly.  Breaking it into two sed invocations is a workaround.
15781404Speter    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
15881404Speter  rm -f "$tmpdepfile"
15981404Speter  ;;
16081404Speter
16181404Speterhp)
16281404Speter  # This case exists only to let depend.m4 do its work.  It works by
16381404Speter  # looking at the text of this script.  This case will never be run,
16481404Speter  # since it is checked for above.
16581404Speter  exit 1
16681404Speter  ;;
16781404Speter
16881404Spetersgi)
16981404Speter  if test "$libtool" = yes; then
17081404Speter    "$@" "-Wp,-MDupdate,$tmpdepfile"
17181404Speter  else
17281404Speter    "$@" -MDupdate "$tmpdepfile"
17381404Speter  fi
17481404Speter  stat=$?
17581404Speter  if test $stat -eq 0; then :
17681404Speter  else
17781404Speter    rm -f "$tmpdepfile"
17881404Speter    exit $stat
17981404Speter  fi
180102840Speter  rm -f "$depfile"
18181404Speter
18281404Speter  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183102840Speter    echo "$object : \\" > "$depfile"
184102840Speter
185102840Speter    # Clip off the initial element (the dependent).  Don't try to be
186102840Speter    # clever and replace this with sed code, as IRIX sed won't handle
187102840Speter    # lines with more than a fixed number of characters (4096 in
188102840Speter    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189102840Speter    # the IRIX cc adds comments like `#:fec' to the end of the
190102840Speter    # dependency line.
19181404Speter    tr ' ' '
192102840Speter' < "$tmpdepfile" \
193102840Speter    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194102840Speter    tr '
195102840Speter' ' ' >> $depfile
196102840Speter    echo >> $depfile
197102840Speter
198102840Speter    # The second pass generates a dummy entry for each header file.
199102840Speter    tr ' ' '
200102840Speter' < "$tmpdepfile" \
201102840Speter   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202102840Speter   >> $depfile
20381404Speter  else
20481404Speter    # The sourcefile does not contain any dependencies, so just
20581404Speter    # store a dummy comment line, to avoid errors with the Makefile
20681404Speter    # "include basename.Plo" scheme.
20781404Speter    echo "#dummy" > "$depfile"
20881404Speter  fi
20981404Speter  rm -f "$tmpdepfile"
21081404Speter  ;;
21181404Speter
21281404Speteraix)
21381404Speter  # The C for AIX Compiler uses -M and outputs the dependencies
214128266Speter  # in a .u file.  In older versions, this file always lives in the
215128266Speter  # current directory.  Also, the AIX compiler puts `$object:' at the
216128266Speter  # start of each line; $object doesn't have directory information.
217128266Speter  # Version 6 uses the directory in both cases.
218128266Speter  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219102840Speter  tmpdepfile="$stripped.u"
22081404Speter  if test "$libtool" = yes; then
22181404Speter    "$@" -Wc,-M
22281404Speter  else
22381404Speter    "$@" -M
22481404Speter  fi
225128266Speter  stat=$?
22681404Speter
227128266Speter  if test -f "$tmpdepfile"; then :
228128266Speter  else
229128266Speter    stripped=`echo "$stripped" | sed 's,^.*/,,'`
230128266Speter    tmpdepfile="$stripped.u"
231128266Speter  fi
232128266Speter
23381404Speter  if test $stat -eq 0; then :
23481404Speter  else
23581404Speter    rm -f "$tmpdepfile"
23681404Speter    exit $stat
23781404Speter  fi
23881404Speter
23981404Speter  if test -f "$tmpdepfile"; then
240128266Speter    outname="$stripped.o"
241102840Speter    # Each line is of the form `foo.o: dependent.h'.
242102840Speter    # Do two passes, one to just change these to
243102840Speter    # `$object: dependent.h' and one to simply `dependent.h:'.
244102840Speter    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245102840Speter    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
24681404Speter  else
24781404Speter    # The sourcefile does not contain any dependencies, so just
24881404Speter    # store a dummy comment line, to avoid errors with the Makefile
24981404Speter    # "include basename.Plo" scheme.
25081404Speter    echo "#dummy" > "$depfile"
25181404Speter  fi
25281404Speter  rm -f "$tmpdepfile"
25381404Speter  ;;
25481404Speter
255128266Spetericc)
256128266Speter  # Intel's C compiler understands `-MD -MF file'.  However on
257128266Speter  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
258128266Speter  # ICC 7.0 will fill foo.d with something like
259128266Speter  #    foo.o: sub/foo.c
260128266Speter  #    foo.o: sub/foo.h
261128266Speter  # which is wrong.  We want:
262128266Speter  #    sub/foo.o: sub/foo.c
263128266Speter  #    sub/foo.o: sub/foo.h
264128266Speter  #    sub/foo.c:
265128266Speter  #    sub/foo.h:
266128266Speter  # ICC 7.1 will output
267128266Speter  #    foo.o: sub/foo.c sub/foo.h
268128266Speter  # and will wrap long lines using \ :
269128266Speter  #    foo.o: sub/foo.c ... \
270128266Speter  #     sub/foo.h ... \
271128266Speter  #     ...
272128266Speter
273128266Speter  "$@" -MD -MF "$tmpdepfile"
274128266Speter  stat=$?
275128266Speter  if test $stat -eq 0; then :
276128266Speter  else
277128266Speter    rm -f "$tmpdepfile"
278128266Speter    exit $stat
279128266Speter  fi
280128266Speter  rm -f "$depfile"
281128266Speter  # Each line is of the form `foo.o: dependent.h',
282128266Speter  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
283128266Speter  # Do two passes, one to just change these to
284128266Speter  # `$object: dependent.h' and one to simply `dependent.h:'.
285128266Speter  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
286128266Speter  # Some versions of the HPUX 10.20 sed can't process this invocation
287128266Speter  # correctly.  Breaking it into two sed invocations is a workaround.
288128266Speter  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
289128266Speter    sed -e 's/$/ :/' >> "$depfile"
290128266Speter  rm -f "$tmpdepfile"
291128266Speter  ;;
292128266Speter
293177391Sobrienhp2)
294177391Sobrien  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
295177391Sobrien  # compilers, which have integrated preprocessors.  The correct option
296177391Sobrien  # to use with these is +Maked; it writes dependencies to a file named
297177391Sobrien  # 'foo.d', which lands next to the object file, wherever that
298177391Sobrien  # happens to be.
299177391Sobrien  # Much of this is similar to the tru64 case; see comments there.
300177391Sobrien  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
301177391Sobrien  test "x$dir" = "x$object" && dir=
302177391Sobrien  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
303177391Sobrien  if test "$libtool" = yes; then
304177391Sobrien    tmpdepfile1=$dir$base.d
305177391Sobrien    tmpdepfile2=$dir.libs/$base.d
306177391Sobrien    "$@" -Wc,+Maked
307177391Sobrien  else
308177391Sobrien    tmpdepfile1=$dir$base.d
309177391Sobrien    tmpdepfile2=$dir$base.d
310177391Sobrien    "$@" +Maked
311177391Sobrien  fi
312177391Sobrien  stat=$?
313177391Sobrien  if test $stat -eq 0; then :
314177391Sobrien  else
315177391Sobrien     rm -f "$tmpdepfile1" "$tmpdepfile2"
316177391Sobrien     exit $stat
317177391Sobrien  fi
318177391Sobrien
319177391Sobrien  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
320177391Sobrien  do
321177391Sobrien    test -f "$tmpdepfile" && break
322177391Sobrien  done
323177391Sobrien  if test -f "$tmpdepfile"; then
324177391Sobrien    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
325177391Sobrien    # Add `dependent.h:' lines.
326177391Sobrien    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
327177391Sobrien  else
328177391Sobrien    echo "#dummy" > "$depfile"
329177391Sobrien  fi
330177391Sobrien  rm -f "$tmpdepfile" "$tmpdepfile2"
331177391Sobrien  ;;
332177391Sobrien
333102840Spetertru64)
334128266Speter   # The Tru64 compiler uses -MD to generate dependencies as a side
335102840Speter   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
336128266Speter   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
337128266Speter   # dependencies in `foo.d' instead, so we check for that too.
338102840Speter   # Subdirectories are respected.
339128266Speter   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
340128266Speter   test "x$dir" = "x$object" && dir=
341128266Speter   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
342102840Speter
343102840Speter   if test "$libtool" = yes; then
344177391Sobrien      # With Tru64 cc, shared objects can also be used to make a
345177391Sobrien      # static library.  This mechanism is used in libtool 1.4 series to
346177391Sobrien      # handle both shared and static libraries in a single compilation.
347177391Sobrien      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
348177391Sobrien      #
349177391Sobrien      # With libtool 1.5 this exception was removed, and libtool now
350177391Sobrien      # generates 2 separate objects for the 2 libraries.  These two
351177391Sobrien      # compilations output dependencies in $dir.libs/$base.o.d and
352177391Sobrien      # in $dir$base.o.d.  We have to check for both files, because
353177391Sobrien      # one of the two compilations can be disabled.  We should prefer
354177391Sobrien      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
355177391Sobrien      # automatically cleaned when .libs/ is deleted, while ignoring
356177391Sobrien      # the former would cause a distcleancheck panic.
357177391Sobrien      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
358177391Sobrien      tmpdepfile2=$dir$base.o.d          # libtool 1.5
359177391Sobrien      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
360177391Sobrien      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
361102840Speter      "$@" -Wc,-MD
362102840Speter   else
363177391Sobrien      tmpdepfile1=$dir$base.o.d
364177391Sobrien      tmpdepfile2=$dir$base.d
365177391Sobrien      tmpdepfile3=$dir$base.d
366177391Sobrien      tmpdepfile4=$dir$base.d
367102840Speter      "$@" -MD
368102840Speter   fi
369102840Speter
370102840Speter   stat=$?
371102840Speter   if test $stat -eq 0; then :
372102840Speter   else
373177391Sobrien      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
374102840Speter      exit $stat
375102840Speter   fi
376102840Speter
377177391Sobrien   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
378177391Sobrien   do
379177391Sobrien     test -f "$tmpdepfile" && break
380177391Sobrien   done
381102840Speter   if test -f "$tmpdepfile"; then
382102840Speter      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
383128266Speter      # That's a tab and a space in the [].
384128266Speter      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
385102840Speter   else
386102840Speter      echo "#dummy" > "$depfile"
387102840Speter   fi
388102840Speter   rm -f "$tmpdepfile"
389102840Speter   ;;
390102840Speter
39181404Speter#nosideeffect)
39281404Speter  # This comment above is used by automake to tell side-effect
39381404Speter  # dependency tracking mechanisms from slower ones.
39481404Speter
39581404Speterdashmstdout)
39681404Speter  # Important note: in order to support this mode, a compiler *must*
397128266Speter  # always write the preprocessed file to stdout, regardless of -o.
398128266Speter  "$@" || exit $?
399128266Speter
400128266Speter  # Remove the call to Libtool.
401128266Speter  if test "$libtool" = yes; then
402128266Speter    while test $1 != '--mode=compile'; do
403128266Speter      shift
404128266Speter    done
405128266Speter    shift
406128266Speter  fi
407128266Speter
408128266Speter  # Remove `-o $object'.
409128266Speter  IFS=" "
410128266Speter  for arg
411128266Speter  do
412128266Speter    case $arg in
413128266Speter    -o)
414128266Speter      shift
41581404Speter      ;;
416128266Speter    $object)
417128266Speter      shift
418128266Speter      ;;
419128266Speter    *)
420128266Speter      set fnord "$@" "$arg"
421128266Speter      shift # fnord
422128266Speter      shift # $arg
423128266Speter      ;;
42481404Speter    esac
425128266Speter  done
426128266Speter
427128266Speter  test -z "$dashmflag" && dashmflag=-M
428128266Speter  # Require at least two characters before searching for `:'
429128266Speter  # in the target name.  This is to cope with DOS-style filenames:
430128266Speter  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
431128266Speter  "$@" $dashmflag |
432128266Speter    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
43381404Speter  rm -f "$depfile"
43481404Speter  cat < "$tmpdepfile" > "$depfile"
43581404Speter  tr ' ' '
43681404Speter' < "$tmpdepfile" | \
43781404Speter## Some versions of the HPUX 10.20 sed can't process this invocation
43881404Speter## correctly.  Breaking it into two sed invocations is a workaround.
43981404Speter    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
44081404Speter  rm -f "$tmpdepfile"
44181404Speter  ;;
44281404Speter
44381404SpeterdashXmstdout)
44481404Speter  # This case only exists to satisfy depend.m4.  It is never actually
44581404Speter  # run, as this mode is specially recognized in the preamble.
44681404Speter  exit 1
44781404Speter  ;;
44881404Speter
44981404Spetermakedepend)
450128266Speter  "$@" || exit $?
451128266Speter  # Remove any Libtool call
452128266Speter  if test "$libtool" = yes; then
453128266Speter    while test $1 != '--mode=compile'; do
454128266Speter      shift
455128266Speter    done
456128266Speter    shift
457128266Speter  fi
45881404Speter  # X makedepend
459128266Speter  shift
460128266Speter  cleared=no
461128266Speter  for arg in "$@"; do
462128266Speter    case $cleared in
463128266Speter    no)
464128266Speter      set ""; shift
465128266Speter      cleared=yes ;;
466128266Speter    esac
467128266Speter    case "$arg" in
468128266Speter    -D*|-I*)
469128266Speter      set fnord "$@" "$arg"; shift ;;
470128266Speter    # Strip any option that makedepend may not understand.  Remove
471128266Speter    # the object too, otherwise makedepend will parse it as a source file.
472128266Speter    -*|$object)
473128266Speter      ;;
474128266Speter    *)
475128266Speter      set fnord "$@" "$arg"; shift ;;
476128266Speter    esac
477128266Speter  done
478128266Speter  obj_suffix="`echo $object | sed 's/^.*\././'`"
479128266Speter  touch "$tmpdepfile"
480128266Speter  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
48181404Speter  rm -f "$depfile"
48281404Speter  cat < "$tmpdepfile" > "$depfile"
483128266Speter  sed '1,2d' "$tmpdepfile" | tr ' ' '
48481404Speter' | \
48581404Speter## Some versions of the HPUX 10.20 sed can't process this invocation
48681404Speter## correctly.  Breaking it into two sed invocations is a workaround.
48781404Speter    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
48881404Speter  rm -f "$tmpdepfile" "$tmpdepfile".bak
48981404Speter  ;;
49081404Speter
49181404Spetercpp)
49281404Speter  # Important note: in order to support this mode, a compiler *must*
493128266Speter  # always write the preprocessed file to stdout.
494128266Speter  "$@" || exit $?
495128266Speter
496128266Speter  # Remove the call to Libtool.
497128266Speter  if test "$libtool" = yes; then
498128266Speter    while test $1 != '--mode=compile'; do
499128266Speter      shift
500128266Speter    done
501128266Speter    shift
502128266Speter  fi
503128266Speter
504128266Speter  # Remove `-o $object'.
505128266Speter  IFS=" "
506128266Speter  for arg
507128266Speter  do
508128266Speter    case $arg in
509128266Speter    -o)
510128266Speter      shift
51181404Speter      ;;
512128266Speter    $object)
513128266Speter      shift
514128266Speter      ;;
515128266Speter    *)
516128266Speter      set fnord "$@" "$arg"
517128266Speter      shift # fnord
518128266Speter      shift # $arg
519128266Speter      ;;
52081404Speter    esac
521128266Speter  done
522128266Speter
523128266Speter  "$@" -E |
524177391Sobrien    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
525177391Sobrien       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
52681404Speter    sed '$ s: \\$::' > "$tmpdepfile"
52781404Speter  rm -f "$depfile"
52881404Speter  echo "$object : \\" > "$depfile"
52981404Speter  cat < "$tmpdepfile" >> "$depfile"
53081404Speter  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
53181404Speter  rm -f "$tmpdepfile"
53281404Speter  ;;
53381404Speter
53481404Spetermsvisualcpp)
53581404Speter  # Important note: in order to support this mode, a compiler *must*
536128266Speter  # always write the preprocessed file to stdout, regardless of -o,
53781404Speter  # because we must use -o when running libtool.
538128266Speter  "$@" || exit $?
539128266Speter  IFS=" "
540128266Speter  for arg
541128266Speter  do
542128266Speter    case "$arg" in
543128266Speter    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
544128266Speter	set fnord "$@"
545128266Speter	shift
546128266Speter	shift
547128266Speter	;;
548128266Speter    *)
54981404Speter	set fnord "$@" "$arg"
550128266Speter	shift
551128266Speter	shift
552128266Speter	;;
55381404Speter    esac
554128266Speter  done
555128266Speter  "$@" -E |
556128266Speter  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
55781404Speter  rm -f "$depfile"
55881404Speter  echo "$object : \\" > "$depfile"
55981404Speter  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
56081404Speter  echo "	" >> "$depfile"
56181404Speter  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
56281404Speter  rm -f "$tmpdepfile"
56381404Speter  ;;
56481404Speter
56581404Speternone)
56681404Speter  exec "$@"
56781404Speter  ;;
56881404Speter
56981404Speter*)
57081404Speter  echo "Unknown depmode $depmode" 1>&2
57181404Speter  exit 1
57281404Speter  ;;
57381404Speteresac
57481404Speter
57581404Speterexit 0
576177391Sobrien
577177391Sobrien# Local Variables:
578177391Sobrien# mode: shell-script
579177391Sobrien# sh-indentation: 2
580177391Sobrien# eval: (add-hook 'write-file-hooks 'time-stamp)
581177391Sobrien# time-stamp-start: "scriptversion="
582177391Sobrien# time-stamp-format: "%:y-%02m-%02d.%02H"
583177391Sobrien# time-stamp-end: "$"
584177391Sobrien# End:
585