depcomp revision 44dda7b2
1ff559fabSmrg#! /bin/sh
2ff559fabSmrg# depcomp - compile a program generating dependencies as side-effects
3ff559fabSmrg
444dda7b2Smrgscriptversion=2009-04-28.21; # UTC
5ff559fabSmrg
644dda7b2Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
744dda7b2Smrg# Software Foundation, Inc.
8ff559fabSmrg
9ff559fabSmrg# This program is free software; you can redistribute it and/or modify
10ff559fabSmrg# it under the terms of the GNU General Public License as published by
11ff559fabSmrg# the Free Software Foundation; either version 2, or (at your option)
12ff559fabSmrg# any later version.
13ff559fabSmrg
14ff559fabSmrg# This program is distributed in the hope that it will be useful,
15ff559fabSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16ff559fabSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17ff559fabSmrg# GNU General Public License for more details.
18ff559fabSmrg
19ff559fabSmrg# You should have received a copy of the GNU General Public License
2044dda7b2Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21ff559fabSmrg
22ff559fabSmrg# As a special exception to the GNU General Public License, if you
23ff559fabSmrg# distribute this file as part of a program that contains a
24ff559fabSmrg# configuration script generated by Autoconf, you may include it under
25ff559fabSmrg# the same distribution terms that you use for the rest of that program.
26ff559fabSmrg
27ff559fabSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28ff559fabSmrg
29ff559fabSmrgcase $1 in
30ff559fabSmrg  '')
31ff559fabSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32ff559fabSmrg     exit 1;
33ff559fabSmrg     ;;
34ff559fabSmrg  -h | --h*)
35ff559fabSmrg    cat <<\EOF
36ff559fabSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37ff559fabSmrg
38ff559fabSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39ff559fabSmrgas side-effects.
40ff559fabSmrg
41ff559fabSmrgEnvironment variables:
42ff559fabSmrg  depmode     Dependency tracking mode.
43ff559fabSmrg  source      Source file read by `PROGRAMS ARGS'.
44ff559fabSmrg  object      Object file output by `PROGRAMS ARGS'.
45ff559fabSmrg  DEPDIR      directory where to store dependencies.
46ff559fabSmrg  depfile     Dependency file to output.
47ff559fabSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
48ff559fabSmrg  libtool     Whether libtool is used (yes/no).
49ff559fabSmrg
50ff559fabSmrgReport bugs to <bug-automake@gnu.org>.
51ff559fabSmrgEOF
52ff559fabSmrg    exit $?
53ff559fabSmrg    ;;
54ff559fabSmrg  -v | --v*)
55ff559fabSmrg    echo "depcomp $scriptversion"
56ff559fabSmrg    exit $?
57ff559fabSmrg    ;;
58ff559fabSmrgesac
59ff559fabSmrg
60ff559fabSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61ff559fabSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62ff559fabSmrg  exit 1
63ff559fabSmrgfi
64ff559fabSmrg
65ff559fabSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66ff559fabSmrgdepfile=${depfile-`echo "$object" |
67ff559fabSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68ff559fabSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69ff559fabSmrg
70ff559fabSmrgrm -f "$tmpdepfile"
71ff559fabSmrg
72ff559fabSmrg# Some modes work just like other modes, but use different flags.  We
73ff559fabSmrg# parameterize here, but still list the modes in the big case below,
74ff559fabSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75ff559fabSmrg# here, because this file can only contain one case statement.
76ff559fabSmrgif test "$depmode" = hp; then
77ff559fabSmrg  # HP compiler uses -M and no extra arg.
78ff559fabSmrg  gccflag=-M
79ff559fabSmrg  depmode=gcc
80ff559fabSmrgfi
81ff559fabSmrg
82ff559fabSmrgif test "$depmode" = dashXmstdout; then
83ff559fabSmrg   # This is just like dashmstdout with a different argument.
84ff559fabSmrg   dashmflag=-xM
85ff559fabSmrg   depmode=dashmstdout
86ff559fabSmrgfi
87ff559fabSmrg
8844dda7b2Smrgcygpath_u="cygpath -u -f -"
8944dda7b2Smrgif test "$depmode" = msvcmsys; then
9044dda7b2Smrg   # This is just like msvisualcpp but w/o cygpath translation.
9144dda7b2Smrg   # Just convert the backslash-escaped backslashes to single forward
9244dda7b2Smrg   # slashes to satisfy depend.m4
9344dda7b2Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
9444dda7b2Smrg   depmode=msvisualcpp
9544dda7b2Smrgfi
9644dda7b2Smrg
97ff559fabSmrgcase "$depmode" in
98ff559fabSmrggcc3)
99ff559fabSmrg## gcc 3 implements dependency tracking that does exactly what
100ff559fabSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101ff559fabSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1027a3b38f7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1037a3b38f7Smrg## the command line argument order; so add the flags where they
1047a3b38f7Smrg## appear in depend2.am.  Note that the slowdown incurred here
1057a3b38f7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1067a3b38f7Smrg  for arg
1077a3b38f7Smrg  do
1087a3b38f7Smrg    case $arg in
1097a3b38f7Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1107a3b38f7Smrg    *)  set fnord "$@" "$arg" ;;
1117a3b38f7Smrg    esac
1127a3b38f7Smrg    shift # fnord
1137a3b38f7Smrg    shift # $arg
1147a3b38f7Smrg  done
1157a3b38f7Smrg  "$@"
116ff559fabSmrg  stat=$?
117ff559fabSmrg  if test $stat -eq 0; then :
118ff559fabSmrg  else
119ff559fabSmrg    rm -f "$tmpdepfile"
120ff559fabSmrg    exit $stat
121ff559fabSmrg  fi
122ff559fabSmrg  mv "$tmpdepfile" "$depfile"
123ff559fabSmrg  ;;
124ff559fabSmrg
125ff559fabSmrggcc)
126ff559fabSmrg## There are various ways to get dependency output from gcc.  Here's
127ff559fabSmrg## why we pick this rather obscure method:
128ff559fabSmrg## - Don't want to use -MD because we'd like the dependencies to end
129ff559fabSmrg##   up in a subdir.  Having to rename by hand is ugly.
130ff559fabSmrg##   (We might end up doing this anyway to support other compilers.)
131ff559fabSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132ff559fabSmrg##   -MM, not -M (despite what the docs say).
133ff559fabSmrg## - Using -M directly means running the compiler twice (even worse
134ff559fabSmrg##   than renaming).
135ff559fabSmrg  if test -z "$gccflag"; then
136ff559fabSmrg    gccflag=-MD,
137ff559fabSmrg  fi
138ff559fabSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
139ff559fabSmrg  stat=$?
140ff559fabSmrg  if test $stat -eq 0; then :
141ff559fabSmrg  else
142ff559fabSmrg    rm -f "$tmpdepfile"
143ff559fabSmrg    exit $stat
144ff559fabSmrg  fi
145ff559fabSmrg  rm -f "$depfile"
146ff559fabSmrg  echo "$object : \\" > "$depfile"
147ff559fabSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148ff559fabSmrg## The second -e expression handles DOS-style file names with drive letters.
149ff559fabSmrg  sed -e 's/^[^:]*: / /' \
150ff559fabSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151ff559fabSmrg## This next piece of magic avoids the `deleted header file' problem.
152ff559fabSmrg## The problem is that when a header file which appears in a .P file
153ff559fabSmrg## is deleted, the dependency causes make to die (because there is
154ff559fabSmrg## typically no way to rebuild the header).  We avoid this by adding
155ff559fabSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156ff559fabSmrg## this for us directly.
157ff559fabSmrg  tr ' ' '
158ff559fabSmrg' < "$tmpdepfile" |
159ff559fabSmrg## Some versions of gcc put a space before the `:'.  On the theory
160ff559fabSmrg## that the space means something, we add a space to the output as
161ff559fabSmrg## well.
162ff559fabSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
163ff559fabSmrg## correctly.  Breaking it into two sed invocations is a workaround.
164ff559fabSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165ff559fabSmrg  rm -f "$tmpdepfile"
166ff559fabSmrg  ;;
167ff559fabSmrg
168ff559fabSmrghp)
169ff559fabSmrg  # This case exists only to let depend.m4 do its work.  It works by
170ff559fabSmrg  # looking at the text of this script.  This case will never be run,
171ff559fabSmrg  # since it is checked for above.
172ff559fabSmrg  exit 1
173ff559fabSmrg  ;;
174ff559fabSmrg
175ff559fabSmrgsgi)
176ff559fabSmrg  if test "$libtool" = yes; then
177ff559fabSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178ff559fabSmrg  else
179ff559fabSmrg    "$@" -MDupdate "$tmpdepfile"
180ff559fabSmrg  fi
181ff559fabSmrg  stat=$?
182ff559fabSmrg  if test $stat -eq 0; then :
183ff559fabSmrg  else
184ff559fabSmrg    rm -f "$tmpdepfile"
185ff559fabSmrg    exit $stat
186ff559fabSmrg  fi
187ff559fabSmrg  rm -f "$depfile"
188ff559fabSmrg
189ff559fabSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190ff559fabSmrg    echo "$object : \\" > "$depfile"
191ff559fabSmrg
192ff559fabSmrg    # Clip off the initial element (the dependent).  Don't try to be
193ff559fabSmrg    # clever and replace this with sed code, as IRIX sed won't handle
194ff559fabSmrg    # lines with more than a fixed number of characters (4096 in
195ff559fabSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196ff559fabSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
197ff559fabSmrg    # dependency line.
198ff559fabSmrg    tr ' ' '
199ff559fabSmrg' < "$tmpdepfile" \
200ff559fabSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201ff559fabSmrg    tr '
20244dda7b2Smrg' ' ' >> "$depfile"
20344dda7b2Smrg    echo >> "$depfile"
204ff559fabSmrg
205ff559fabSmrg    # The second pass generates a dummy entry for each header file.
206ff559fabSmrg    tr ' ' '
207ff559fabSmrg' < "$tmpdepfile" \
208ff559fabSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20944dda7b2Smrg   >> "$depfile"
210ff559fabSmrg  else
211ff559fabSmrg    # The sourcefile does not contain any dependencies, so just
212ff559fabSmrg    # store a dummy comment line, to avoid errors with the Makefile
213ff559fabSmrg    # "include basename.Plo" scheme.
214ff559fabSmrg    echo "#dummy" > "$depfile"
215ff559fabSmrg  fi
216ff559fabSmrg  rm -f "$tmpdepfile"
217ff559fabSmrg  ;;
218ff559fabSmrg
219ff559fabSmrgaix)
220ff559fabSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
221ff559fabSmrg  # in a .u file.  In older versions, this file always lives in the
222ff559fabSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223ff559fabSmrg  # start of each line; $object doesn't have directory information.
224ff559fabSmrg  # Version 6 uses the directory in both cases.
2257a3b38f7Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2267a3b38f7Smrg  test "x$dir" = "x$object" && dir=
2277a3b38f7Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228ff559fabSmrg  if test "$libtool" = yes; then
2297a3b38f7Smrg    tmpdepfile1=$dir$base.u
2307a3b38f7Smrg    tmpdepfile2=$base.u
2317a3b38f7Smrg    tmpdepfile3=$dir.libs/$base.u
232ff559fabSmrg    "$@" -Wc,-M
233ff559fabSmrg  else
2347a3b38f7Smrg    tmpdepfile1=$dir$base.u
2357a3b38f7Smrg    tmpdepfile2=$dir$base.u
2367a3b38f7Smrg    tmpdepfile3=$dir$base.u
237ff559fabSmrg    "$@" -M
238ff559fabSmrg  fi
239ff559fabSmrg  stat=$?
240ff559fabSmrg
241ff559fabSmrg  if test $stat -eq 0; then :
242ff559fabSmrg  else
2437a3b38f7Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244ff559fabSmrg    exit $stat
245ff559fabSmrg  fi
246ff559fabSmrg
2477a3b38f7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2487a3b38f7Smrg  do
2497a3b38f7Smrg    test -f "$tmpdepfile" && break
2507a3b38f7Smrg  done
251ff559fabSmrg  if test -f "$tmpdepfile"; then
252ff559fabSmrg    # Each line is of the form `foo.o: dependent.h'.
253ff559fabSmrg    # Do two passes, one to just change these to
254ff559fabSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2557a3b38f7Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2567a3b38f7Smrg    # That's a tab and a space in the [].
2577a3b38f7Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258ff559fabSmrg  else
259ff559fabSmrg    # The sourcefile does not contain any dependencies, so just
260ff559fabSmrg    # store a dummy comment line, to avoid errors with the Makefile
261ff559fabSmrg    # "include basename.Plo" scheme.
262ff559fabSmrg    echo "#dummy" > "$depfile"
263ff559fabSmrg  fi
264ff559fabSmrg  rm -f "$tmpdepfile"
265ff559fabSmrg  ;;
266ff559fabSmrg
267ff559fabSmrgicc)
268ff559fabSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
269ff559fabSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270ff559fabSmrg  # ICC 7.0 will fill foo.d with something like
271ff559fabSmrg  #    foo.o: sub/foo.c
272ff559fabSmrg  #    foo.o: sub/foo.h
273ff559fabSmrg  # which is wrong.  We want:
274ff559fabSmrg  #    sub/foo.o: sub/foo.c
275ff559fabSmrg  #    sub/foo.o: sub/foo.h
276ff559fabSmrg  #    sub/foo.c:
277ff559fabSmrg  #    sub/foo.h:
278ff559fabSmrg  # ICC 7.1 will output
279ff559fabSmrg  #    foo.o: sub/foo.c sub/foo.h
280ff559fabSmrg  # and will wrap long lines using \ :
281ff559fabSmrg  #    foo.o: sub/foo.c ... \
282ff559fabSmrg  #     sub/foo.h ... \
283ff559fabSmrg  #     ...
284ff559fabSmrg
285ff559fabSmrg  "$@" -MD -MF "$tmpdepfile"
286ff559fabSmrg  stat=$?
287ff559fabSmrg  if test $stat -eq 0; then :
288ff559fabSmrg  else
289ff559fabSmrg    rm -f "$tmpdepfile"
290ff559fabSmrg    exit $stat
291ff559fabSmrg  fi
292ff559fabSmrg  rm -f "$depfile"
293ff559fabSmrg  # Each line is of the form `foo.o: dependent.h',
294ff559fabSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295ff559fabSmrg  # Do two passes, one to just change these to
296ff559fabSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297ff559fabSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298ff559fabSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299ff559fabSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
300ff559fabSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301ff559fabSmrg    sed -e 's/$/ :/' >> "$depfile"
302ff559fabSmrg  rm -f "$tmpdepfile"
303ff559fabSmrg  ;;
304ff559fabSmrg
3057a3b38f7Smrghp2)
3067a3b38f7Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3077a3b38f7Smrg  # compilers, which have integrated preprocessors.  The correct option
3087a3b38f7Smrg  # to use with these is +Maked; it writes dependencies to a file named
3097a3b38f7Smrg  # 'foo.d', which lands next to the object file, wherever that
3107a3b38f7Smrg  # happens to be.
3117a3b38f7Smrg  # Much of this is similar to the tru64 case; see comments there.
3127a3b38f7Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3137a3b38f7Smrg  test "x$dir" = "x$object" && dir=
3147a3b38f7Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3157a3b38f7Smrg  if test "$libtool" = yes; then
3167a3b38f7Smrg    tmpdepfile1=$dir$base.d
3177a3b38f7Smrg    tmpdepfile2=$dir.libs/$base.d
3187a3b38f7Smrg    "$@" -Wc,+Maked
3197a3b38f7Smrg  else
3207a3b38f7Smrg    tmpdepfile1=$dir$base.d
3217a3b38f7Smrg    tmpdepfile2=$dir$base.d
3227a3b38f7Smrg    "$@" +Maked
3237a3b38f7Smrg  fi
3247a3b38f7Smrg  stat=$?
3257a3b38f7Smrg  if test $stat -eq 0; then :
3267a3b38f7Smrg  else
3277a3b38f7Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3287a3b38f7Smrg     exit $stat
3297a3b38f7Smrg  fi
3307a3b38f7Smrg
3317a3b38f7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3327a3b38f7Smrg  do
3337a3b38f7Smrg    test -f "$tmpdepfile" && break
3347a3b38f7Smrg  done
3357a3b38f7Smrg  if test -f "$tmpdepfile"; then
3367a3b38f7Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3377a3b38f7Smrg    # Add `dependent.h:' lines.
33844dda7b2Smrg    sed -ne '2,${
33944dda7b2Smrg	       s/^ *//
34044dda7b2Smrg	       s/ \\*$//
34144dda7b2Smrg	       s/$/:/
34244dda7b2Smrg	       p
34344dda7b2Smrg	     }' "$tmpdepfile" >> "$depfile"
3447a3b38f7Smrg  else
3457a3b38f7Smrg    echo "#dummy" > "$depfile"
3467a3b38f7Smrg  fi
3477a3b38f7Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3487a3b38f7Smrg  ;;
3497a3b38f7Smrg
350ff559fabSmrgtru64)
351ff559fabSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352ff559fabSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353ff559fabSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354ff559fabSmrg   # dependencies in `foo.d' instead, so we check for that too.
355ff559fabSmrg   # Subdirectories are respected.
356ff559fabSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357ff559fabSmrg   test "x$dir" = "x$object" && dir=
358ff559fabSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359ff559fabSmrg
360ff559fabSmrg   if test "$libtool" = yes; then
361ff559fabSmrg      # With Tru64 cc, shared objects can also be used to make a
3627a3b38f7Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363ff559fabSmrg      # handle both shared and static libraries in a single compilation.
364ff559fabSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365ff559fabSmrg      #
366ff559fabSmrg      # With libtool 1.5 this exception was removed, and libtool now
367ff559fabSmrg      # generates 2 separate objects for the 2 libraries.  These two
3687a3b38f7Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369ff559fabSmrg      # in $dir$base.o.d.  We have to check for both files, because
370ff559fabSmrg      # one of the two compilations can be disabled.  We should prefer
371ff559fabSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372ff559fabSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
373ff559fabSmrg      # the former would cause a distcleancheck panic.
374ff559fabSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375ff559fabSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376ff559fabSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377ff559fabSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378ff559fabSmrg      "$@" -Wc,-MD
379ff559fabSmrg   else
380ff559fabSmrg      tmpdepfile1=$dir$base.o.d
381ff559fabSmrg      tmpdepfile2=$dir$base.d
382ff559fabSmrg      tmpdepfile3=$dir$base.d
383ff559fabSmrg      tmpdepfile4=$dir$base.d
384ff559fabSmrg      "$@" -MD
385ff559fabSmrg   fi
386ff559fabSmrg
387ff559fabSmrg   stat=$?
388ff559fabSmrg   if test $stat -eq 0; then :
389ff559fabSmrg   else
390ff559fabSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391ff559fabSmrg      exit $stat
392ff559fabSmrg   fi
393ff559fabSmrg
394ff559fabSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395ff559fabSmrg   do
396ff559fabSmrg     test -f "$tmpdepfile" && break
397ff559fabSmrg   done
398ff559fabSmrg   if test -f "$tmpdepfile"; then
399ff559fabSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400ff559fabSmrg      # That's a tab and a space in the [].
401ff559fabSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402ff559fabSmrg   else
403ff559fabSmrg      echo "#dummy" > "$depfile"
404ff559fabSmrg   fi
405ff559fabSmrg   rm -f "$tmpdepfile"
406ff559fabSmrg   ;;
407ff559fabSmrg
408ff559fabSmrg#nosideeffect)
409ff559fabSmrg  # This comment above is used by automake to tell side-effect
410ff559fabSmrg  # dependency tracking mechanisms from slower ones.
411ff559fabSmrg
412ff559fabSmrgdashmstdout)
413ff559fabSmrg  # Important note: in order to support this mode, a compiler *must*
414ff559fabSmrg  # always write the preprocessed file to stdout, regardless of -o.
415ff559fabSmrg  "$@" || exit $?
416ff559fabSmrg
417ff559fabSmrg  # Remove the call to Libtool.
418ff559fabSmrg  if test "$libtool" = yes; then
41944dda7b2Smrg    while test "X$1" != 'X--mode=compile'; do
420ff559fabSmrg      shift
421ff559fabSmrg    done
422ff559fabSmrg    shift
423ff559fabSmrg  fi
424ff559fabSmrg
425ff559fabSmrg  # Remove `-o $object'.
426ff559fabSmrg  IFS=" "
427ff559fabSmrg  for arg
428ff559fabSmrg  do
429ff559fabSmrg    case $arg in
430ff559fabSmrg    -o)
431ff559fabSmrg      shift
432ff559fabSmrg      ;;
433ff559fabSmrg    $object)
434ff559fabSmrg      shift
435ff559fabSmrg      ;;
436ff559fabSmrg    *)
437ff559fabSmrg      set fnord "$@" "$arg"
438ff559fabSmrg      shift # fnord
439ff559fabSmrg      shift # $arg
440ff559fabSmrg      ;;
441ff559fabSmrg    esac
442ff559fabSmrg  done
443ff559fabSmrg
444ff559fabSmrg  test -z "$dashmflag" && dashmflag=-M
445ff559fabSmrg  # Require at least two characters before searching for `:'
446ff559fabSmrg  # in the target name.  This is to cope with DOS-style filenames:
447ff559fabSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448ff559fabSmrg  "$@" $dashmflag |
449ff559fabSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450ff559fabSmrg  rm -f "$depfile"
451ff559fabSmrg  cat < "$tmpdepfile" > "$depfile"
452ff559fabSmrg  tr ' ' '
453ff559fabSmrg' < "$tmpdepfile" | \
454ff559fabSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
455ff559fabSmrg## correctly.  Breaking it into two sed invocations is a workaround.
456ff559fabSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457ff559fabSmrg  rm -f "$tmpdepfile"
458ff559fabSmrg  ;;
459ff559fabSmrg
460ff559fabSmrgdashXmstdout)
461ff559fabSmrg  # This case only exists to satisfy depend.m4.  It is never actually
462ff559fabSmrg  # run, as this mode is specially recognized in the preamble.
463ff559fabSmrg  exit 1
464ff559fabSmrg  ;;
465ff559fabSmrg
466ff559fabSmrgmakedepend)
467ff559fabSmrg  "$@" || exit $?
468ff559fabSmrg  # Remove any Libtool call
469ff559fabSmrg  if test "$libtool" = yes; then
47044dda7b2Smrg    while test "X$1" != 'X--mode=compile'; do
471ff559fabSmrg      shift
472ff559fabSmrg    done
473ff559fabSmrg    shift
474ff559fabSmrg  fi
475ff559fabSmrg  # X makedepend
476ff559fabSmrg  shift
47744dda7b2Smrg  cleared=no eat=no
47844dda7b2Smrg  for arg
47944dda7b2Smrg  do
480ff559fabSmrg    case $cleared in
481ff559fabSmrg    no)
482ff559fabSmrg      set ""; shift
483ff559fabSmrg      cleared=yes ;;
484ff559fabSmrg    esac
48544dda7b2Smrg    if test $eat = yes; then
48644dda7b2Smrg      eat=no
48744dda7b2Smrg      continue
48844dda7b2Smrg    fi
489ff559fabSmrg    case "$arg" in
490ff559fabSmrg    -D*|-I*)
491ff559fabSmrg      set fnord "$@" "$arg"; shift ;;
492ff559fabSmrg    # Strip any option that makedepend may not understand.  Remove
493ff559fabSmrg    # the object too, otherwise makedepend will parse it as a source file.
49444dda7b2Smrg    -arch)
49544dda7b2Smrg      eat=yes ;;
496ff559fabSmrg    -*|$object)
497ff559fabSmrg      ;;
498ff559fabSmrg    *)
499ff559fabSmrg      set fnord "$@" "$arg"; shift ;;
500ff559fabSmrg    esac
501ff559fabSmrg  done
50244dda7b2Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503ff559fabSmrg  touch "$tmpdepfile"
504ff559fabSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505ff559fabSmrg  rm -f "$depfile"
506ff559fabSmrg  cat < "$tmpdepfile" > "$depfile"
507ff559fabSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508ff559fabSmrg' | \
509ff559fabSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
510ff559fabSmrg## correctly.  Breaking it into two sed invocations is a workaround.
511ff559fabSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512ff559fabSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513ff559fabSmrg  ;;
514ff559fabSmrg
515ff559fabSmrgcpp)
516ff559fabSmrg  # Important note: in order to support this mode, a compiler *must*
517ff559fabSmrg  # always write the preprocessed file to stdout.
518ff559fabSmrg  "$@" || exit $?
519ff559fabSmrg
520ff559fabSmrg  # Remove the call to Libtool.
521ff559fabSmrg  if test "$libtool" = yes; then
52244dda7b2Smrg    while test "X$1" != 'X--mode=compile'; do
523ff559fabSmrg      shift
524ff559fabSmrg    done
525ff559fabSmrg    shift
526ff559fabSmrg  fi
527ff559fabSmrg
528ff559fabSmrg  # Remove `-o $object'.
529ff559fabSmrg  IFS=" "
530ff559fabSmrg  for arg
531ff559fabSmrg  do
532ff559fabSmrg    case $arg in
533ff559fabSmrg    -o)
534ff559fabSmrg      shift
535ff559fabSmrg      ;;
536ff559fabSmrg    $object)
537ff559fabSmrg      shift
538ff559fabSmrg      ;;
539ff559fabSmrg    *)
540ff559fabSmrg      set fnord "$@" "$arg"
541ff559fabSmrg      shift # fnord
542ff559fabSmrg      shift # $arg
543ff559fabSmrg      ;;
544ff559fabSmrg    esac
545ff559fabSmrg  done
546ff559fabSmrg
547ff559fabSmrg  "$@" -E |
548ff559fabSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549ff559fabSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550ff559fabSmrg    sed '$ s: \\$::' > "$tmpdepfile"
551ff559fabSmrg  rm -f "$depfile"
552ff559fabSmrg  echo "$object : \\" > "$depfile"
553ff559fabSmrg  cat < "$tmpdepfile" >> "$depfile"
554ff559fabSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555ff559fabSmrg  rm -f "$tmpdepfile"
556ff559fabSmrg  ;;
557ff559fabSmrg
558ff559fabSmrgmsvisualcpp)
559ff559fabSmrg  # Important note: in order to support this mode, a compiler *must*
56044dda7b2Smrg  # always write the preprocessed file to stdout.
561ff559fabSmrg  "$@" || exit $?
56244dda7b2Smrg
56344dda7b2Smrg  # Remove the call to Libtool.
56444dda7b2Smrg  if test "$libtool" = yes; then
56544dda7b2Smrg    while test "X$1" != 'X--mode=compile'; do
56644dda7b2Smrg      shift
56744dda7b2Smrg    done
56844dda7b2Smrg    shift
56944dda7b2Smrg  fi
57044dda7b2Smrg
571ff559fabSmrg  IFS=" "
572ff559fabSmrg  for arg
573ff559fabSmrg  do
574ff559fabSmrg    case "$arg" in
57544dda7b2Smrg    -o)
57644dda7b2Smrg      shift
57744dda7b2Smrg      ;;
57844dda7b2Smrg    $object)
57944dda7b2Smrg      shift
58044dda7b2Smrg      ;;
581ff559fabSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582ff559fabSmrg	set fnord "$@"
583ff559fabSmrg	shift
584ff559fabSmrg	shift
585ff559fabSmrg	;;
586ff559fabSmrg    *)
587ff559fabSmrg	set fnord "$@" "$arg"
588ff559fabSmrg	shift
589ff559fabSmrg	shift
590ff559fabSmrg	;;
591ff559fabSmrg    esac
592ff559fabSmrg  done
59344dda7b2Smrg  "$@" -E 2>/dev/null |
59444dda7b2Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595ff559fabSmrg  rm -f "$depfile"
596ff559fabSmrg  echo "$object : \\" > "$depfile"
59744dda7b2Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598ff559fabSmrg  echo "	" >> "$depfile"
59944dda7b2Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600ff559fabSmrg  rm -f "$tmpdepfile"
601ff559fabSmrg  ;;
602ff559fabSmrg
60344dda7b2Smrgmsvcmsys)
60444dda7b2Smrg  # This case exists only to let depend.m4 do its work.  It works by
60544dda7b2Smrg  # looking at the text of this script.  This case will never be run,
60644dda7b2Smrg  # since it is checked for above.
60744dda7b2Smrg  exit 1
60844dda7b2Smrg  ;;
60944dda7b2Smrg
610ff559fabSmrgnone)
611ff559fabSmrg  exec "$@"
612ff559fabSmrg  ;;
613ff559fabSmrg
614ff559fabSmrg*)
615ff559fabSmrg  echo "Unknown depmode $depmode" 1>&2
616ff559fabSmrg  exit 1
617ff559fabSmrg  ;;
618ff559fabSmrgesac
619ff559fabSmrg
620ff559fabSmrgexit 0
621ff559fabSmrg
622ff559fabSmrg# Local Variables:
623ff559fabSmrg# mode: shell-script
624ff559fabSmrg# sh-indentation: 2
625ff559fabSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626ff559fabSmrg# time-stamp-start: "scriptversion="
627ff559fabSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
62844dda7b2Smrg# time-stamp-time-zone: "UTC"
62944dda7b2Smrg# time-stamp-end: "; # UTC"
630ff559fabSmrg# End:
631