depcomp revision 7bd0f98d
1cbeba4aeSmrg#! /bin/sh
2cbeba4aeSmrg# depcomp - compile a program generating dependencies as side-effects
37bd0f98dSmrg
47bd0f98dSmrgscriptversion=2009-04-28.21; # UTC
57bd0f98dSmrg
67bd0f98dSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
77bd0f98dSmrg# Software Foundation, Inc.
8cbeba4aeSmrg
9cbeba4aeSmrg# This program is free software; you can redistribute it and/or modify
10cbeba4aeSmrg# it under the terms of the GNU General Public License as published by
11cbeba4aeSmrg# the Free Software Foundation; either version 2, or (at your option)
12cbeba4aeSmrg# any later version.
13cbeba4aeSmrg
14cbeba4aeSmrg# This program is distributed in the hope that it will be useful,
15cbeba4aeSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16cbeba4aeSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17cbeba4aeSmrg# GNU General Public License for more details.
18cbeba4aeSmrg
19cbeba4aeSmrg# You should have received a copy of the GNU General Public License
207bd0f98dSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21cbeba4aeSmrg
22cbeba4aeSmrg# As a special exception to the GNU General Public License, if you
23cbeba4aeSmrg# distribute this file as part of a program that contains a
24cbeba4aeSmrg# configuration script generated by Autoconf, you may include it under
25cbeba4aeSmrg# the same distribution terms that you use for the rest of that program.
26cbeba4aeSmrg
27cbeba4aeSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28cbeba4aeSmrg
297bd0f98dSmrgcase $1 in
307bd0f98dSmrg  '')
317bd0f98dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
327bd0f98dSmrg     exit 1;
337bd0f98dSmrg     ;;
347bd0f98dSmrg  -h | --h*)
357bd0f98dSmrg    cat <<\EOF
367bd0f98dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
377bd0f98dSmrg
387bd0f98dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
397bd0f98dSmrgas side-effects.
407bd0f98dSmrg
417bd0f98dSmrgEnvironment variables:
427bd0f98dSmrg  depmode     Dependency tracking mode.
437bd0f98dSmrg  source      Source file read by `PROGRAMS ARGS'.
447bd0f98dSmrg  object      Object file output by `PROGRAMS ARGS'.
457bd0f98dSmrg  DEPDIR      directory where to store dependencies.
467bd0f98dSmrg  depfile     Dependency file to output.
477bd0f98dSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
487bd0f98dSmrg  libtool     Whether libtool is used (yes/no).
497bd0f98dSmrg
507bd0f98dSmrgReport bugs to <bug-automake@gnu.org>.
517bd0f98dSmrgEOF
527bd0f98dSmrg    exit $?
537bd0f98dSmrg    ;;
547bd0f98dSmrg  -v | --v*)
557bd0f98dSmrg    echo "depcomp $scriptversion"
567bd0f98dSmrg    exit $?
577bd0f98dSmrg    ;;
587bd0f98dSmrgesac
597bd0f98dSmrg
60cbeba4aeSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61cbeba4aeSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62cbeba4aeSmrg  exit 1
63cbeba4aeSmrgfi
64cbeba4aeSmrg
657bd0f98dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
667bd0f98dSmrgdepfile=${depfile-`echo "$object" |
677bd0f98dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68cbeba4aeSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69cbeba4aeSmrg
70cbeba4aeSmrgrm -f "$tmpdepfile"
71cbeba4aeSmrg
72cbeba4aeSmrg# Some modes work just like other modes, but use different flags.  We
73cbeba4aeSmrg# parameterize here, but still list the modes in the big case below,
74cbeba4aeSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75cbeba4aeSmrg# here, because this file can only contain one case statement.
76cbeba4aeSmrgif test "$depmode" = hp; then
77cbeba4aeSmrg  # HP compiler uses -M and no extra arg.
78cbeba4aeSmrg  gccflag=-M
79cbeba4aeSmrg  depmode=gcc
80cbeba4aeSmrgfi
81cbeba4aeSmrg
82cbeba4aeSmrgif test "$depmode" = dashXmstdout; then
83cbeba4aeSmrg   # This is just like dashmstdout with a different argument.
84cbeba4aeSmrg   dashmflag=-xM
85cbeba4aeSmrg   depmode=dashmstdout
86cbeba4aeSmrgfi
87cbeba4aeSmrg
887bd0f98dSmrgcygpath_u="cygpath -u -f -"
897bd0f98dSmrgif test "$depmode" = msvcmsys; then
907bd0f98dSmrg   # This is just like msvisualcpp but w/o cygpath translation.
917bd0f98dSmrg   # Just convert the backslash-escaped backslashes to single forward
927bd0f98dSmrg   # slashes to satisfy depend.m4
937bd0f98dSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
947bd0f98dSmrg   depmode=msvisualcpp
957bd0f98dSmrgfi
967bd0f98dSmrg
97cbeba4aeSmrgcase "$depmode" in
98cbeba4aeSmrggcc3)
99cbeba4aeSmrg## gcc 3 implements dependency tracking that does exactly what
100cbeba4aeSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101cbeba4aeSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1027bd0f98dSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1037bd0f98dSmrg## the command line argument order; so add the flags where they
1047bd0f98dSmrg## appear in depend2.am.  Note that the slowdown incurred here
1057bd0f98dSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1067bd0f98dSmrg  for arg
1077bd0f98dSmrg  do
1087bd0f98dSmrg    case $arg in
1097bd0f98dSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1107bd0f98dSmrg    *)  set fnord "$@" "$arg" ;;
1117bd0f98dSmrg    esac
1127bd0f98dSmrg    shift # fnord
1137bd0f98dSmrg    shift # $arg
1147bd0f98dSmrg  done
1157bd0f98dSmrg  "$@"
116cbeba4aeSmrg  stat=$?
117cbeba4aeSmrg  if test $stat -eq 0; then :
118cbeba4aeSmrg  else
119cbeba4aeSmrg    rm -f "$tmpdepfile"
120cbeba4aeSmrg    exit $stat
121cbeba4aeSmrg  fi
122cbeba4aeSmrg  mv "$tmpdepfile" "$depfile"
123cbeba4aeSmrg  ;;
124cbeba4aeSmrg
125cbeba4aeSmrggcc)
126cbeba4aeSmrg## There are various ways to get dependency output from gcc.  Here's
127cbeba4aeSmrg## why we pick this rather obscure method:
128cbeba4aeSmrg## - Don't want to use -MD because we'd like the dependencies to end
129cbeba4aeSmrg##   up in a subdir.  Having to rename by hand is ugly.
130cbeba4aeSmrg##   (We might end up doing this anyway to support other compilers.)
131cbeba4aeSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132cbeba4aeSmrg##   -MM, not -M (despite what the docs say).
133cbeba4aeSmrg## - Using -M directly means running the compiler twice (even worse
134cbeba4aeSmrg##   than renaming).
135cbeba4aeSmrg  if test -z "$gccflag"; then
136cbeba4aeSmrg    gccflag=-MD,
137cbeba4aeSmrg  fi
138cbeba4aeSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
139cbeba4aeSmrg  stat=$?
140cbeba4aeSmrg  if test $stat -eq 0; then :
141cbeba4aeSmrg  else
142cbeba4aeSmrg    rm -f "$tmpdepfile"
143cbeba4aeSmrg    exit $stat
144cbeba4aeSmrg  fi
145cbeba4aeSmrg  rm -f "$depfile"
146cbeba4aeSmrg  echo "$object : \\" > "$depfile"
147cbeba4aeSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148cbeba4aeSmrg## The second -e expression handles DOS-style file names with drive letters.
149cbeba4aeSmrg  sed -e 's/^[^:]*: / /' \
150cbeba4aeSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151cbeba4aeSmrg## This next piece of magic avoids the `deleted header file' problem.
152cbeba4aeSmrg## The problem is that when a header file which appears in a .P file
153cbeba4aeSmrg## is deleted, the dependency causes make to die (because there is
154cbeba4aeSmrg## typically no way to rebuild the header).  We avoid this by adding
155cbeba4aeSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156cbeba4aeSmrg## this for us directly.
157cbeba4aeSmrg  tr ' ' '
158cbeba4aeSmrg' < "$tmpdepfile" |
159cbeba4aeSmrg## Some versions of gcc put a space before the `:'.  On the theory
160cbeba4aeSmrg## that the space means something, we add a space to the output as
161cbeba4aeSmrg## well.
162cbeba4aeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
163cbeba4aeSmrg## correctly.  Breaking it into two sed invocations is a workaround.
164cbeba4aeSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165cbeba4aeSmrg  rm -f "$tmpdepfile"
166cbeba4aeSmrg  ;;
167cbeba4aeSmrg
168cbeba4aeSmrghp)
169cbeba4aeSmrg  # This case exists only to let depend.m4 do its work.  It works by
170cbeba4aeSmrg  # looking at the text of this script.  This case will never be run,
171cbeba4aeSmrg  # since it is checked for above.
172cbeba4aeSmrg  exit 1
173cbeba4aeSmrg  ;;
174cbeba4aeSmrg
175cbeba4aeSmrgsgi)
176cbeba4aeSmrg  if test "$libtool" = yes; then
177cbeba4aeSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178cbeba4aeSmrg  else
179cbeba4aeSmrg    "$@" -MDupdate "$tmpdepfile"
180cbeba4aeSmrg  fi
181cbeba4aeSmrg  stat=$?
182cbeba4aeSmrg  if test $stat -eq 0; then :
183cbeba4aeSmrg  else
184cbeba4aeSmrg    rm -f "$tmpdepfile"
185cbeba4aeSmrg    exit $stat
186cbeba4aeSmrg  fi
187cbeba4aeSmrg  rm -f "$depfile"
188cbeba4aeSmrg
189cbeba4aeSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190cbeba4aeSmrg    echo "$object : \\" > "$depfile"
191cbeba4aeSmrg
192cbeba4aeSmrg    # Clip off the initial element (the dependent).  Don't try to be
193cbeba4aeSmrg    # clever and replace this with sed code, as IRIX sed won't handle
194cbeba4aeSmrg    # lines with more than a fixed number of characters (4096 in
195cbeba4aeSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196cbeba4aeSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
197cbeba4aeSmrg    # dependency line.
198cbeba4aeSmrg    tr ' ' '
199cbeba4aeSmrg' < "$tmpdepfile" \
200cbeba4aeSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201cbeba4aeSmrg    tr '
2027bd0f98dSmrg' ' ' >> "$depfile"
2037bd0f98dSmrg    echo >> "$depfile"
204cbeba4aeSmrg
205cbeba4aeSmrg    # The second pass generates a dummy entry for each header file.
206cbeba4aeSmrg    tr ' ' '
207cbeba4aeSmrg' < "$tmpdepfile" \
208cbeba4aeSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2097bd0f98dSmrg   >> "$depfile"
210cbeba4aeSmrg  else
211cbeba4aeSmrg    # The sourcefile does not contain any dependencies, so just
212cbeba4aeSmrg    # store a dummy comment line, to avoid errors with the Makefile
213cbeba4aeSmrg    # "include basename.Plo" scheme.
214cbeba4aeSmrg    echo "#dummy" > "$depfile"
215cbeba4aeSmrg  fi
216cbeba4aeSmrg  rm -f "$tmpdepfile"
217cbeba4aeSmrg  ;;
218cbeba4aeSmrg
219cbeba4aeSmrgaix)
220cbeba4aeSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
221cbeba4aeSmrg  # in a .u file.  In older versions, this file always lives in the
222cbeba4aeSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223cbeba4aeSmrg  # start of each line; $object doesn't have directory information.
224cbeba4aeSmrg  # Version 6 uses the directory in both cases.
2257bd0f98dSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2267bd0f98dSmrg  test "x$dir" = "x$object" && dir=
2277bd0f98dSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228cbeba4aeSmrg  if test "$libtool" = yes; then
2297bd0f98dSmrg    tmpdepfile1=$dir$base.u
2307bd0f98dSmrg    tmpdepfile2=$base.u
2317bd0f98dSmrg    tmpdepfile3=$dir.libs/$base.u
232cbeba4aeSmrg    "$@" -Wc,-M
233cbeba4aeSmrg  else
2347bd0f98dSmrg    tmpdepfile1=$dir$base.u
2357bd0f98dSmrg    tmpdepfile2=$dir$base.u
2367bd0f98dSmrg    tmpdepfile3=$dir$base.u
237cbeba4aeSmrg    "$@" -M
238cbeba4aeSmrg  fi
239cbeba4aeSmrg  stat=$?
240cbeba4aeSmrg
241cbeba4aeSmrg  if test $stat -eq 0; then :
242cbeba4aeSmrg  else
2437bd0f98dSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244cbeba4aeSmrg    exit $stat
245cbeba4aeSmrg  fi
246cbeba4aeSmrg
2477bd0f98dSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2487bd0f98dSmrg  do
2497bd0f98dSmrg    test -f "$tmpdepfile" && break
2507bd0f98dSmrg  done
251cbeba4aeSmrg  if test -f "$tmpdepfile"; then
252cbeba4aeSmrg    # Each line is of the form `foo.o: dependent.h'.
253cbeba4aeSmrg    # Do two passes, one to just change these to
254cbeba4aeSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2557bd0f98dSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2567bd0f98dSmrg    # That's a tab and a space in the [].
2577bd0f98dSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258cbeba4aeSmrg  else
259cbeba4aeSmrg    # The sourcefile does not contain any dependencies, so just
260cbeba4aeSmrg    # store a dummy comment line, to avoid errors with the Makefile
261cbeba4aeSmrg    # "include basename.Plo" scheme.
262cbeba4aeSmrg    echo "#dummy" > "$depfile"
263cbeba4aeSmrg  fi
264cbeba4aeSmrg  rm -f "$tmpdepfile"
265cbeba4aeSmrg  ;;
266cbeba4aeSmrg
267cbeba4aeSmrgicc)
268cbeba4aeSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
269cbeba4aeSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270cbeba4aeSmrg  # ICC 7.0 will fill foo.d with something like
271cbeba4aeSmrg  #    foo.o: sub/foo.c
272cbeba4aeSmrg  #    foo.o: sub/foo.h
273cbeba4aeSmrg  # which is wrong.  We want:
274cbeba4aeSmrg  #    sub/foo.o: sub/foo.c
275cbeba4aeSmrg  #    sub/foo.o: sub/foo.h
276cbeba4aeSmrg  #    sub/foo.c:
277cbeba4aeSmrg  #    sub/foo.h:
278cbeba4aeSmrg  # ICC 7.1 will output
279cbeba4aeSmrg  #    foo.o: sub/foo.c sub/foo.h
280cbeba4aeSmrg  # and will wrap long lines using \ :
281cbeba4aeSmrg  #    foo.o: sub/foo.c ... \
282cbeba4aeSmrg  #     sub/foo.h ... \
283cbeba4aeSmrg  #     ...
284cbeba4aeSmrg
285cbeba4aeSmrg  "$@" -MD -MF "$tmpdepfile"
286cbeba4aeSmrg  stat=$?
287cbeba4aeSmrg  if test $stat -eq 0; then :
288cbeba4aeSmrg  else
289cbeba4aeSmrg    rm -f "$tmpdepfile"
290cbeba4aeSmrg    exit $stat
291cbeba4aeSmrg  fi
292cbeba4aeSmrg  rm -f "$depfile"
293cbeba4aeSmrg  # Each line is of the form `foo.o: dependent.h',
294cbeba4aeSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295cbeba4aeSmrg  # Do two passes, one to just change these to
296cbeba4aeSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297cbeba4aeSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298cbeba4aeSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299cbeba4aeSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
300cbeba4aeSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301cbeba4aeSmrg    sed -e 's/$/ :/' >> "$depfile"
302cbeba4aeSmrg  rm -f "$tmpdepfile"
303cbeba4aeSmrg  ;;
304cbeba4aeSmrg
3057bd0f98dSmrghp2)
3067bd0f98dSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3077bd0f98dSmrg  # compilers, which have integrated preprocessors.  The correct option
3087bd0f98dSmrg  # to use with these is +Maked; it writes dependencies to a file named
3097bd0f98dSmrg  # 'foo.d', which lands next to the object file, wherever that
3107bd0f98dSmrg  # happens to be.
3117bd0f98dSmrg  # Much of this is similar to the tru64 case; see comments there.
3127bd0f98dSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3137bd0f98dSmrg  test "x$dir" = "x$object" && dir=
3147bd0f98dSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3157bd0f98dSmrg  if test "$libtool" = yes; then
3167bd0f98dSmrg    tmpdepfile1=$dir$base.d
3177bd0f98dSmrg    tmpdepfile2=$dir.libs/$base.d
3187bd0f98dSmrg    "$@" -Wc,+Maked
3197bd0f98dSmrg  else
3207bd0f98dSmrg    tmpdepfile1=$dir$base.d
3217bd0f98dSmrg    tmpdepfile2=$dir$base.d
3227bd0f98dSmrg    "$@" +Maked
3237bd0f98dSmrg  fi
3247bd0f98dSmrg  stat=$?
3257bd0f98dSmrg  if test $stat -eq 0; then :
3267bd0f98dSmrg  else
3277bd0f98dSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3287bd0f98dSmrg     exit $stat
3297bd0f98dSmrg  fi
3307bd0f98dSmrg
3317bd0f98dSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3327bd0f98dSmrg  do
3337bd0f98dSmrg    test -f "$tmpdepfile" && break
3347bd0f98dSmrg  done
3357bd0f98dSmrg  if test -f "$tmpdepfile"; then
3367bd0f98dSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3377bd0f98dSmrg    # Add `dependent.h:' lines.
3387bd0f98dSmrg    sed -ne '2,${
3397bd0f98dSmrg	       s/^ *//
3407bd0f98dSmrg	       s/ \\*$//
3417bd0f98dSmrg	       s/$/:/
3427bd0f98dSmrg	       p
3437bd0f98dSmrg	     }' "$tmpdepfile" >> "$depfile"
3447bd0f98dSmrg  else
3457bd0f98dSmrg    echo "#dummy" > "$depfile"
3467bd0f98dSmrg  fi
3477bd0f98dSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3487bd0f98dSmrg  ;;
3497bd0f98dSmrg
350cbeba4aeSmrgtru64)
351cbeba4aeSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352cbeba4aeSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353cbeba4aeSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354cbeba4aeSmrg   # dependencies in `foo.d' instead, so we check for that too.
355cbeba4aeSmrg   # Subdirectories are respected.
356cbeba4aeSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357cbeba4aeSmrg   test "x$dir" = "x$object" && dir=
358cbeba4aeSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359cbeba4aeSmrg
360cbeba4aeSmrg   if test "$libtool" = yes; then
3617bd0f98dSmrg      # With Tru64 cc, shared objects can also be used to make a
3627bd0f98dSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3637bd0f98dSmrg      # handle both shared and static libraries in a single compilation.
3647bd0f98dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3657bd0f98dSmrg      #
3667bd0f98dSmrg      # With libtool 1.5 this exception was removed, and libtool now
3677bd0f98dSmrg      # generates 2 separate objects for the 2 libraries.  These two
3687bd0f98dSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3697bd0f98dSmrg      # in $dir$base.o.d.  We have to check for both files, because
3707bd0f98dSmrg      # one of the two compilations can be disabled.  We should prefer
3717bd0f98dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3727bd0f98dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3737bd0f98dSmrg      # the former would cause a distcleancheck panic.
3747bd0f98dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3757bd0f98dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3767bd0f98dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3777bd0f98dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378cbeba4aeSmrg      "$@" -Wc,-MD
379cbeba4aeSmrg   else
3807bd0f98dSmrg      tmpdepfile1=$dir$base.o.d
3817bd0f98dSmrg      tmpdepfile2=$dir$base.d
3827bd0f98dSmrg      tmpdepfile3=$dir$base.d
3837bd0f98dSmrg      tmpdepfile4=$dir$base.d
384cbeba4aeSmrg      "$@" -MD
385cbeba4aeSmrg   fi
386cbeba4aeSmrg
387cbeba4aeSmrg   stat=$?
388cbeba4aeSmrg   if test $stat -eq 0; then :
389cbeba4aeSmrg   else
3907bd0f98dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391cbeba4aeSmrg      exit $stat
392cbeba4aeSmrg   fi
393cbeba4aeSmrg
3947bd0f98dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3957bd0f98dSmrg   do
3967bd0f98dSmrg     test -f "$tmpdepfile" && break
3977bd0f98dSmrg   done
398cbeba4aeSmrg   if test -f "$tmpdepfile"; then
399cbeba4aeSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400cbeba4aeSmrg      # That's a tab and a space in the [].
401cbeba4aeSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402cbeba4aeSmrg   else
403cbeba4aeSmrg      echo "#dummy" > "$depfile"
404cbeba4aeSmrg   fi
405cbeba4aeSmrg   rm -f "$tmpdepfile"
406cbeba4aeSmrg   ;;
407cbeba4aeSmrg
408cbeba4aeSmrg#nosideeffect)
409cbeba4aeSmrg  # This comment above is used by automake to tell side-effect
410cbeba4aeSmrg  # dependency tracking mechanisms from slower ones.
411cbeba4aeSmrg
412cbeba4aeSmrgdashmstdout)
413cbeba4aeSmrg  # Important note: in order to support this mode, a compiler *must*
414cbeba4aeSmrg  # always write the preprocessed file to stdout, regardless of -o.
415cbeba4aeSmrg  "$@" || exit $?
416cbeba4aeSmrg
417cbeba4aeSmrg  # Remove the call to Libtool.
418cbeba4aeSmrg  if test "$libtool" = yes; then
4197bd0f98dSmrg    while test "X$1" != 'X--mode=compile'; do
420cbeba4aeSmrg      shift
421cbeba4aeSmrg    done
422cbeba4aeSmrg    shift
423cbeba4aeSmrg  fi
424cbeba4aeSmrg
425cbeba4aeSmrg  # Remove `-o $object'.
426cbeba4aeSmrg  IFS=" "
427cbeba4aeSmrg  for arg
428cbeba4aeSmrg  do
429cbeba4aeSmrg    case $arg in
430cbeba4aeSmrg    -o)
431cbeba4aeSmrg      shift
432cbeba4aeSmrg      ;;
433cbeba4aeSmrg    $object)
434cbeba4aeSmrg      shift
435cbeba4aeSmrg      ;;
436cbeba4aeSmrg    *)
437cbeba4aeSmrg      set fnord "$@" "$arg"
438cbeba4aeSmrg      shift # fnord
439cbeba4aeSmrg      shift # $arg
440cbeba4aeSmrg      ;;
441cbeba4aeSmrg    esac
442cbeba4aeSmrg  done
443cbeba4aeSmrg
444cbeba4aeSmrg  test -z "$dashmflag" && dashmflag=-M
445cbeba4aeSmrg  # Require at least two characters before searching for `:'
446cbeba4aeSmrg  # in the target name.  This is to cope with DOS-style filenames:
447cbeba4aeSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448cbeba4aeSmrg  "$@" $dashmflag |
449cbeba4aeSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450cbeba4aeSmrg  rm -f "$depfile"
451cbeba4aeSmrg  cat < "$tmpdepfile" > "$depfile"
452cbeba4aeSmrg  tr ' ' '
453cbeba4aeSmrg' < "$tmpdepfile" | \
454cbeba4aeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
455cbeba4aeSmrg## correctly.  Breaking it into two sed invocations is a workaround.
456cbeba4aeSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457cbeba4aeSmrg  rm -f "$tmpdepfile"
458cbeba4aeSmrg  ;;
459cbeba4aeSmrg
460cbeba4aeSmrgdashXmstdout)
461cbeba4aeSmrg  # This case only exists to satisfy depend.m4.  It is never actually
462cbeba4aeSmrg  # run, as this mode is specially recognized in the preamble.
463cbeba4aeSmrg  exit 1
464cbeba4aeSmrg  ;;
465cbeba4aeSmrg
466cbeba4aeSmrgmakedepend)
467cbeba4aeSmrg  "$@" || exit $?
468cbeba4aeSmrg  # Remove any Libtool call
469cbeba4aeSmrg  if test "$libtool" = yes; then
4707bd0f98dSmrg    while test "X$1" != 'X--mode=compile'; do
471cbeba4aeSmrg      shift
472cbeba4aeSmrg    done
473cbeba4aeSmrg    shift
474cbeba4aeSmrg  fi
475cbeba4aeSmrg  # X makedepend
476cbeba4aeSmrg  shift
4777bd0f98dSmrg  cleared=no eat=no
4787bd0f98dSmrg  for arg
4797bd0f98dSmrg  do
480cbeba4aeSmrg    case $cleared in
481cbeba4aeSmrg    no)
482cbeba4aeSmrg      set ""; shift
483cbeba4aeSmrg      cleared=yes ;;
484cbeba4aeSmrg    esac
4857bd0f98dSmrg    if test $eat = yes; then
4867bd0f98dSmrg      eat=no
4877bd0f98dSmrg      continue
4887bd0f98dSmrg    fi
489cbeba4aeSmrg    case "$arg" in
490cbeba4aeSmrg    -D*|-I*)
491cbeba4aeSmrg      set fnord "$@" "$arg"; shift ;;
492cbeba4aeSmrg    # Strip any option that makedepend may not understand.  Remove
493cbeba4aeSmrg    # the object too, otherwise makedepend will parse it as a source file.
4947bd0f98dSmrg    -arch)
4957bd0f98dSmrg      eat=yes ;;
496cbeba4aeSmrg    -*|$object)
497cbeba4aeSmrg      ;;
498cbeba4aeSmrg    *)
499cbeba4aeSmrg      set fnord "$@" "$arg"; shift ;;
500cbeba4aeSmrg    esac
501cbeba4aeSmrg  done
5027bd0f98dSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503cbeba4aeSmrg  touch "$tmpdepfile"
504cbeba4aeSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505cbeba4aeSmrg  rm -f "$depfile"
506cbeba4aeSmrg  cat < "$tmpdepfile" > "$depfile"
507cbeba4aeSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508cbeba4aeSmrg' | \
509cbeba4aeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
510cbeba4aeSmrg## correctly.  Breaking it into two sed invocations is a workaround.
511cbeba4aeSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512cbeba4aeSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513cbeba4aeSmrg  ;;
514cbeba4aeSmrg
515cbeba4aeSmrgcpp)
516cbeba4aeSmrg  # Important note: in order to support this mode, a compiler *must*
517cbeba4aeSmrg  # always write the preprocessed file to stdout.
518cbeba4aeSmrg  "$@" || exit $?
519cbeba4aeSmrg
520cbeba4aeSmrg  # Remove the call to Libtool.
521cbeba4aeSmrg  if test "$libtool" = yes; then
5227bd0f98dSmrg    while test "X$1" != 'X--mode=compile'; do
523cbeba4aeSmrg      shift
524cbeba4aeSmrg    done
525cbeba4aeSmrg    shift
526cbeba4aeSmrg  fi
527cbeba4aeSmrg
528cbeba4aeSmrg  # Remove `-o $object'.
529cbeba4aeSmrg  IFS=" "
530cbeba4aeSmrg  for arg
531cbeba4aeSmrg  do
532cbeba4aeSmrg    case $arg in
533cbeba4aeSmrg    -o)
534cbeba4aeSmrg      shift
535cbeba4aeSmrg      ;;
536cbeba4aeSmrg    $object)
537cbeba4aeSmrg      shift
538cbeba4aeSmrg      ;;
539cbeba4aeSmrg    *)
540cbeba4aeSmrg      set fnord "$@" "$arg"
541cbeba4aeSmrg      shift # fnord
542cbeba4aeSmrg      shift # $arg
543cbeba4aeSmrg      ;;
544cbeba4aeSmrg    esac
545cbeba4aeSmrg  done
546cbeba4aeSmrg
547cbeba4aeSmrg  "$@" -E |
5487bd0f98dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5497bd0f98dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550cbeba4aeSmrg    sed '$ s: \\$::' > "$tmpdepfile"
551cbeba4aeSmrg  rm -f "$depfile"
552cbeba4aeSmrg  echo "$object : \\" > "$depfile"
553cbeba4aeSmrg  cat < "$tmpdepfile" >> "$depfile"
554cbeba4aeSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555cbeba4aeSmrg  rm -f "$tmpdepfile"
556cbeba4aeSmrg  ;;
557cbeba4aeSmrg
558cbeba4aeSmrgmsvisualcpp)
559cbeba4aeSmrg  # Important note: in order to support this mode, a compiler *must*
5607bd0f98dSmrg  # always write the preprocessed file to stdout.
561cbeba4aeSmrg  "$@" || exit $?
5627bd0f98dSmrg
5637bd0f98dSmrg  # Remove the call to Libtool.
5647bd0f98dSmrg  if test "$libtool" = yes; then
5657bd0f98dSmrg    while test "X$1" != 'X--mode=compile'; do
5667bd0f98dSmrg      shift
5677bd0f98dSmrg    done
5687bd0f98dSmrg    shift
5697bd0f98dSmrg  fi
5707bd0f98dSmrg
571cbeba4aeSmrg  IFS=" "
572cbeba4aeSmrg  for arg
573cbeba4aeSmrg  do
574cbeba4aeSmrg    case "$arg" in
5757bd0f98dSmrg    -o)
5767bd0f98dSmrg      shift
5777bd0f98dSmrg      ;;
5787bd0f98dSmrg    $object)
5797bd0f98dSmrg      shift
5807bd0f98dSmrg      ;;
581cbeba4aeSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582cbeba4aeSmrg	set fnord "$@"
583cbeba4aeSmrg	shift
584cbeba4aeSmrg	shift
585cbeba4aeSmrg	;;
586cbeba4aeSmrg    *)
587cbeba4aeSmrg	set fnord "$@" "$arg"
588cbeba4aeSmrg	shift
589cbeba4aeSmrg	shift
590cbeba4aeSmrg	;;
591cbeba4aeSmrg    esac
592cbeba4aeSmrg  done
5937bd0f98dSmrg  "$@" -E 2>/dev/null |
5947bd0f98dSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595cbeba4aeSmrg  rm -f "$depfile"
596cbeba4aeSmrg  echo "$object : \\" > "$depfile"
5977bd0f98dSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598cbeba4aeSmrg  echo "	" >> "$depfile"
5997bd0f98dSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600cbeba4aeSmrg  rm -f "$tmpdepfile"
601cbeba4aeSmrg  ;;
602cbeba4aeSmrg
6037bd0f98dSmrgmsvcmsys)
6047bd0f98dSmrg  # This case exists only to let depend.m4 do its work.  It works by
6057bd0f98dSmrg  # looking at the text of this script.  This case will never be run,
6067bd0f98dSmrg  # since it is checked for above.
6077bd0f98dSmrg  exit 1
6087bd0f98dSmrg  ;;
6097bd0f98dSmrg
610cbeba4aeSmrgnone)
611cbeba4aeSmrg  exec "$@"
612cbeba4aeSmrg  ;;
613cbeba4aeSmrg
614cbeba4aeSmrg*)
615cbeba4aeSmrg  echo "Unknown depmode $depmode" 1>&2
616cbeba4aeSmrg  exit 1
617cbeba4aeSmrg  ;;
618cbeba4aeSmrgesac
619cbeba4aeSmrg
620cbeba4aeSmrgexit 0
6217bd0f98dSmrg
6227bd0f98dSmrg# Local Variables:
6237bd0f98dSmrg# mode: shell-script
6247bd0f98dSmrg# sh-indentation: 2
6257bd0f98dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6267bd0f98dSmrg# time-stamp-start: "scriptversion="
6277bd0f98dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6287bd0f98dSmrg# time-stamp-time-zone: "UTC"
6297bd0f98dSmrg# time-stamp-end: "; # UTC"
6307bd0f98dSmrg# End:
631