depcomp revision 96ce994a
1bdcaa8d0Smrg#! /bin/sh
2bdcaa8d0Smrg# depcomp - compile a program generating dependencies as side-effects
3bdcaa8d0Smrg
496ce994aSmrgscriptversion=2009-04-28.21; # UTC
5bdcaa8d0Smrg
696ce994aSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
796ce994aSmrg# Software Foundation, Inc.
8bdcaa8d0Smrg
9bdcaa8d0Smrg# This program is free software; you can redistribute it and/or modify
10bdcaa8d0Smrg# it under the terms of the GNU General Public License as published by
11bdcaa8d0Smrg# the Free Software Foundation; either version 2, or (at your option)
12bdcaa8d0Smrg# any later version.
13bdcaa8d0Smrg
14bdcaa8d0Smrg# This program is distributed in the hope that it will be useful,
15bdcaa8d0Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16bdcaa8d0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17bdcaa8d0Smrg# GNU General Public License for more details.
18bdcaa8d0Smrg
19bdcaa8d0Smrg# You should have received a copy of the GNU General Public License
2096ce994aSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21bdcaa8d0Smrg
22bdcaa8d0Smrg# As a special exception to the GNU General Public License, if you
23bdcaa8d0Smrg# distribute this file as part of a program that contains a
24bdcaa8d0Smrg# configuration script generated by Autoconf, you may include it under
25bdcaa8d0Smrg# the same distribution terms that you use for the rest of that program.
26bdcaa8d0Smrg
27bdcaa8d0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28bdcaa8d0Smrg
29bdcaa8d0Smrgcase $1 in
30bdcaa8d0Smrg  '')
31bdcaa8d0Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32bdcaa8d0Smrg     exit 1;
33bdcaa8d0Smrg     ;;
34bdcaa8d0Smrg  -h | --h*)
35bdcaa8d0Smrg    cat <<\EOF
36bdcaa8d0SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37bdcaa8d0Smrg
38bdcaa8d0SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39bdcaa8d0Smrgas side-effects.
40bdcaa8d0Smrg
41bdcaa8d0SmrgEnvironment variables:
42bdcaa8d0Smrg  depmode     Dependency tracking mode.
43bdcaa8d0Smrg  source      Source file read by `PROGRAMS ARGS'.
44bdcaa8d0Smrg  object      Object file output by `PROGRAMS ARGS'.
45bdcaa8d0Smrg  DEPDIR      directory where to store dependencies.
46bdcaa8d0Smrg  depfile     Dependency file to output.
47bdcaa8d0Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48bdcaa8d0Smrg  libtool     Whether libtool is used (yes/no).
49bdcaa8d0Smrg
50bdcaa8d0SmrgReport bugs to <bug-automake@gnu.org>.
51bdcaa8d0SmrgEOF
52bdcaa8d0Smrg    exit $?
53bdcaa8d0Smrg    ;;
54bdcaa8d0Smrg  -v | --v*)
55bdcaa8d0Smrg    echo "depcomp $scriptversion"
56bdcaa8d0Smrg    exit $?
57bdcaa8d0Smrg    ;;
58bdcaa8d0Smrgesac
59bdcaa8d0Smrg
60bdcaa8d0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61bdcaa8d0Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62bdcaa8d0Smrg  exit 1
63bdcaa8d0Smrgfi
64bdcaa8d0Smrg
65bdcaa8d0Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66bdcaa8d0Smrgdepfile=${depfile-`echo "$object" |
67bdcaa8d0Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68bdcaa8d0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69bdcaa8d0Smrg
70bdcaa8d0Smrgrm -f "$tmpdepfile"
71bdcaa8d0Smrg
72bdcaa8d0Smrg# Some modes work just like other modes, but use different flags.  We
73bdcaa8d0Smrg# parameterize here, but still list the modes in the big case below,
74bdcaa8d0Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75bdcaa8d0Smrg# here, because this file can only contain one case statement.
76bdcaa8d0Smrgif test "$depmode" = hp; then
77bdcaa8d0Smrg  # HP compiler uses -M and no extra arg.
78bdcaa8d0Smrg  gccflag=-M
79bdcaa8d0Smrg  depmode=gcc
80bdcaa8d0Smrgfi
81bdcaa8d0Smrg
82bdcaa8d0Smrgif test "$depmode" = dashXmstdout; then
83bdcaa8d0Smrg   # This is just like dashmstdout with a different argument.
84bdcaa8d0Smrg   dashmflag=-xM
85bdcaa8d0Smrg   depmode=dashmstdout
86bdcaa8d0Smrgfi
87bdcaa8d0Smrg
8896ce994aSmrgcygpath_u="cygpath -u -f -"
8996ce994aSmrgif test "$depmode" = msvcmsys; then
9096ce994aSmrg   # This is just like msvisualcpp but w/o cygpath translation.
9196ce994aSmrg   # Just convert the backslash-escaped backslashes to single forward
9296ce994aSmrg   # slashes to satisfy depend.m4
9396ce994aSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
9496ce994aSmrg   depmode=msvisualcpp
9596ce994aSmrgfi
9696ce994aSmrg
97bdcaa8d0Smrgcase "$depmode" in
98bdcaa8d0Smrggcc3)
99bdcaa8d0Smrg## gcc 3 implements dependency tracking that does exactly what
100bdcaa8d0Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101bdcaa8d0Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
10272313efbSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
10372313efbSmrg## the command line argument order; so add the flags where they
10472313efbSmrg## appear in depend2.am.  Note that the slowdown incurred here
10572313efbSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
10672313efbSmrg  for arg
10772313efbSmrg  do
10872313efbSmrg    case $arg in
10972313efbSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11072313efbSmrg    *)  set fnord "$@" "$arg" ;;
11172313efbSmrg    esac
11272313efbSmrg    shift # fnord
11372313efbSmrg    shift # $arg
11472313efbSmrg  done
11572313efbSmrg  "$@"
116bdcaa8d0Smrg  stat=$?
117bdcaa8d0Smrg  if test $stat -eq 0; then :
118bdcaa8d0Smrg  else
119bdcaa8d0Smrg    rm -f "$tmpdepfile"
120bdcaa8d0Smrg    exit $stat
121bdcaa8d0Smrg  fi
122bdcaa8d0Smrg  mv "$tmpdepfile" "$depfile"
123bdcaa8d0Smrg  ;;
124bdcaa8d0Smrg
125bdcaa8d0Smrggcc)
126bdcaa8d0Smrg## There are various ways to get dependency output from gcc.  Here's
127bdcaa8d0Smrg## why we pick this rather obscure method:
128bdcaa8d0Smrg## - Don't want to use -MD because we'd like the dependencies to end
129bdcaa8d0Smrg##   up in a subdir.  Having to rename by hand is ugly.
130bdcaa8d0Smrg##   (We might end up doing this anyway to support other compilers.)
131bdcaa8d0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132bdcaa8d0Smrg##   -MM, not -M (despite what the docs say).
133bdcaa8d0Smrg## - Using -M directly means running the compiler twice (even worse
134bdcaa8d0Smrg##   than renaming).
135bdcaa8d0Smrg  if test -z "$gccflag"; then
136bdcaa8d0Smrg    gccflag=-MD,
137bdcaa8d0Smrg  fi
138bdcaa8d0Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139bdcaa8d0Smrg  stat=$?
140bdcaa8d0Smrg  if test $stat -eq 0; then :
141bdcaa8d0Smrg  else
142bdcaa8d0Smrg    rm -f "$tmpdepfile"
143bdcaa8d0Smrg    exit $stat
144bdcaa8d0Smrg  fi
145bdcaa8d0Smrg  rm -f "$depfile"
146bdcaa8d0Smrg  echo "$object : \\" > "$depfile"
147bdcaa8d0Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148bdcaa8d0Smrg## The second -e expression handles DOS-style file names with drive letters.
149bdcaa8d0Smrg  sed -e 's/^[^:]*: / /' \
150bdcaa8d0Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151bdcaa8d0Smrg## This next piece of magic avoids the `deleted header file' problem.
152bdcaa8d0Smrg## The problem is that when a header file which appears in a .P file
153bdcaa8d0Smrg## is deleted, the dependency causes make to die (because there is
154bdcaa8d0Smrg## typically no way to rebuild the header).  We avoid this by adding
155bdcaa8d0Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156bdcaa8d0Smrg## this for us directly.
157bdcaa8d0Smrg  tr ' ' '
158bdcaa8d0Smrg' < "$tmpdepfile" |
159bdcaa8d0Smrg## Some versions of gcc put a space before the `:'.  On the theory
160bdcaa8d0Smrg## that the space means something, we add a space to the output as
161bdcaa8d0Smrg## well.
162bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163bdcaa8d0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164bdcaa8d0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165bdcaa8d0Smrg  rm -f "$tmpdepfile"
166bdcaa8d0Smrg  ;;
167bdcaa8d0Smrg
168bdcaa8d0Smrghp)
169bdcaa8d0Smrg  # This case exists only to let depend.m4 do its work.  It works by
170bdcaa8d0Smrg  # looking at the text of this script.  This case will never be run,
171bdcaa8d0Smrg  # since it is checked for above.
172bdcaa8d0Smrg  exit 1
173bdcaa8d0Smrg  ;;
174bdcaa8d0Smrg
175bdcaa8d0Smrgsgi)
176bdcaa8d0Smrg  if test "$libtool" = yes; then
177bdcaa8d0Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178bdcaa8d0Smrg  else
179bdcaa8d0Smrg    "$@" -MDupdate "$tmpdepfile"
180bdcaa8d0Smrg  fi
181bdcaa8d0Smrg  stat=$?
182bdcaa8d0Smrg  if test $stat -eq 0; then :
183bdcaa8d0Smrg  else
184bdcaa8d0Smrg    rm -f "$tmpdepfile"
185bdcaa8d0Smrg    exit $stat
186bdcaa8d0Smrg  fi
187bdcaa8d0Smrg  rm -f "$depfile"
188bdcaa8d0Smrg
189bdcaa8d0Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190bdcaa8d0Smrg    echo "$object : \\" > "$depfile"
191bdcaa8d0Smrg
192bdcaa8d0Smrg    # Clip off the initial element (the dependent).  Don't try to be
193bdcaa8d0Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194bdcaa8d0Smrg    # lines with more than a fixed number of characters (4096 in
195bdcaa8d0Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196bdcaa8d0Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197bdcaa8d0Smrg    # dependency line.
198bdcaa8d0Smrg    tr ' ' '
199bdcaa8d0Smrg' < "$tmpdepfile" \
200bdcaa8d0Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201bdcaa8d0Smrg    tr '
20296ce994aSmrg' ' ' >> "$depfile"
20396ce994aSmrg    echo >> "$depfile"
204bdcaa8d0Smrg
205bdcaa8d0Smrg    # The second pass generates a dummy entry for each header file.
206bdcaa8d0Smrg    tr ' ' '
207bdcaa8d0Smrg' < "$tmpdepfile" \
208bdcaa8d0Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20996ce994aSmrg   >> "$depfile"
210bdcaa8d0Smrg  else
211bdcaa8d0Smrg    # The sourcefile does not contain any dependencies, so just
212bdcaa8d0Smrg    # store a dummy comment line, to avoid errors with the Makefile
213bdcaa8d0Smrg    # "include basename.Plo" scheme.
214bdcaa8d0Smrg    echo "#dummy" > "$depfile"
215bdcaa8d0Smrg  fi
216bdcaa8d0Smrg  rm -f "$tmpdepfile"
217bdcaa8d0Smrg  ;;
218bdcaa8d0Smrg
219bdcaa8d0Smrgaix)
220bdcaa8d0Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221bdcaa8d0Smrg  # in a .u file.  In older versions, this file always lives in the
222bdcaa8d0Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223bdcaa8d0Smrg  # start of each line; $object doesn't have directory information.
224bdcaa8d0Smrg  # Version 6 uses the directory in both cases.
22572313efbSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
22672313efbSmrg  test "x$dir" = "x$object" && dir=
22772313efbSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228bdcaa8d0Smrg  if test "$libtool" = yes; then
22972313efbSmrg    tmpdepfile1=$dir$base.u
23072313efbSmrg    tmpdepfile2=$base.u
23172313efbSmrg    tmpdepfile3=$dir.libs/$base.u
232bdcaa8d0Smrg    "$@" -Wc,-M
233bdcaa8d0Smrg  else
23472313efbSmrg    tmpdepfile1=$dir$base.u
23572313efbSmrg    tmpdepfile2=$dir$base.u
23672313efbSmrg    tmpdepfile3=$dir$base.u
237bdcaa8d0Smrg    "$@" -M
238bdcaa8d0Smrg  fi
239bdcaa8d0Smrg  stat=$?
240bdcaa8d0Smrg
241bdcaa8d0Smrg  if test $stat -eq 0; then :
242bdcaa8d0Smrg  else
24372313efbSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244bdcaa8d0Smrg    exit $stat
245bdcaa8d0Smrg  fi
246bdcaa8d0Smrg
24772313efbSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24872313efbSmrg  do
24972313efbSmrg    test -f "$tmpdepfile" && break
25072313efbSmrg  done
251bdcaa8d0Smrg  if test -f "$tmpdepfile"; then
252bdcaa8d0Smrg    # Each line is of the form `foo.o: dependent.h'.
253bdcaa8d0Smrg    # Do two passes, one to just change these to
254bdcaa8d0Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
25572313efbSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
25672313efbSmrg    # That's a tab and a space in the [].
25772313efbSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258bdcaa8d0Smrg  else
259bdcaa8d0Smrg    # The sourcefile does not contain any dependencies, so just
260bdcaa8d0Smrg    # store a dummy comment line, to avoid errors with the Makefile
261bdcaa8d0Smrg    # "include basename.Plo" scheme.
262bdcaa8d0Smrg    echo "#dummy" > "$depfile"
263bdcaa8d0Smrg  fi
264bdcaa8d0Smrg  rm -f "$tmpdepfile"
265bdcaa8d0Smrg  ;;
266bdcaa8d0Smrg
267bdcaa8d0Smrgicc)
268bdcaa8d0Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269bdcaa8d0Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270bdcaa8d0Smrg  # ICC 7.0 will fill foo.d with something like
271bdcaa8d0Smrg  #    foo.o: sub/foo.c
272bdcaa8d0Smrg  #    foo.o: sub/foo.h
273bdcaa8d0Smrg  # which is wrong.  We want:
274bdcaa8d0Smrg  #    sub/foo.o: sub/foo.c
275bdcaa8d0Smrg  #    sub/foo.o: sub/foo.h
276bdcaa8d0Smrg  #    sub/foo.c:
277bdcaa8d0Smrg  #    sub/foo.h:
278bdcaa8d0Smrg  # ICC 7.1 will output
279bdcaa8d0Smrg  #    foo.o: sub/foo.c sub/foo.h
280bdcaa8d0Smrg  # and will wrap long lines using \ :
281bdcaa8d0Smrg  #    foo.o: sub/foo.c ... \
282bdcaa8d0Smrg  #     sub/foo.h ... \
283bdcaa8d0Smrg  #     ...
284bdcaa8d0Smrg
285bdcaa8d0Smrg  "$@" -MD -MF "$tmpdepfile"
286bdcaa8d0Smrg  stat=$?
287bdcaa8d0Smrg  if test $stat -eq 0; then :
288bdcaa8d0Smrg  else
289bdcaa8d0Smrg    rm -f "$tmpdepfile"
290bdcaa8d0Smrg    exit $stat
291bdcaa8d0Smrg  fi
292bdcaa8d0Smrg  rm -f "$depfile"
293bdcaa8d0Smrg  # Each line is of the form `foo.o: dependent.h',
294bdcaa8d0Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295bdcaa8d0Smrg  # Do two passes, one to just change these to
296bdcaa8d0Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297bdcaa8d0Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298bdcaa8d0Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299bdcaa8d0Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300bdcaa8d0Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301bdcaa8d0Smrg    sed -e 's/$/ :/' >> "$depfile"
302bdcaa8d0Smrg  rm -f "$tmpdepfile"
303bdcaa8d0Smrg  ;;
304bdcaa8d0Smrg
30572313efbSmrghp2)
30672313efbSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30772313efbSmrg  # compilers, which have integrated preprocessors.  The correct option
30872313efbSmrg  # to use with these is +Maked; it writes dependencies to a file named
30972313efbSmrg  # 'foo.d', which lands next to the object file, wherever that
31072313efbSmrg  # happens to be.
31172313efbSmrg  # Much of this is similar to the tru64 case; see comments there.
31272313efbSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
31372313efbSmrg  test "x$dir" = "x$object" && dir=
31472313efbSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
31572313efbSmrg  if test "$libtool" = yes; then
31672313efbSmrg    tmpdepfile1=$dir$base.d
31772313efbSmrg    tmpdepfile2=$dir.libs/$base.d
31872313efbSmrg    "$@" -Wc,+Maked
31972313efbSmrg  else
32072313efbSmrg    tmpdepfile1=$dir$base.d
32172313efbSmrg    tmpdepfile2=$dir$base.d
32272313efbSmrg    "$@" +Maked
32372313efbSmrg  fi
32472313efbSmrg  stat=$?
32572313efbSmrg  if test $stat -eq 0; then :
32672313efbSmrg  else
32772313efbSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32872313efbSmrg     exit $stat
32972313efbSmrg  fi
33072313efbSmrg
33172313efbSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
33272313efbSmrg  do
33372313efbSmrg    test -f "$tmpdepfile" && break
33472313efbSmrg  done
33572313efbSmrg  if test -f "$tmpdepfile"; then
33672313efbSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33772313efbSmrg    # Add `dependent.h:' lines.
33896ce994aSmrg    sed -ne '2,${
33996ce994aSmrg	       s/^ *//
34096ce994aSmrg	       s/ \\*$//
34196ce994aSmrg	       s/$/:/
34296ce994aSmrg	       p
34396ce994aSmrg	     }' "$tmpdepfile" >> "$depfile"
34472313efbSmrg  else
34572313efbSmrg    echo "#dummy" > "$depfile"
34672313efbSmrg  fi
34772313efbSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
34872313efbSmrg  ;;
34972313efbSmrg
350bdcaa8d0Smrgtru64)
351bdcaa8d0Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352bdcaa8d0Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353bdcaa8d0Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354bdcaa8d0Smrg   # dependencies in `foo.d' instead, so we check for that too.
355bdcaa8d0Smrg   # Subdirectories are respected.
356bdcaa8d0Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357bdcaa8d0Smrg   test "x$dir" = "x$object" && dir=
358bdcaa8d0Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359bdcaa8d0Smrg
360bdcaa8d0Smrg   if test "$libtool" = yes; then
361bdcaa8d0Smrg      # With Tru64 cc, shared objects can also be used to make a
36272313efbSmrg      # static library.  This mechanism is used in libtool 1.4 series to
363bdcaa8d0Smrg      # handle both shared and static libraries in a single compilation.
364bdcaa8d0Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365bdcaa8d0Smrg      #
366bdcaa8d0Smrg      # With libtool 1.5 this exception was removed, and libtool now
367bdcaa8d0Smrg      # generates 2 separate objects for the 2 libraries.  These two
36872313efbSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
369bdcaa8d0Smrg      # in $dir$base.o.d.  We have to check for both files, because
370bdcaa8d0Smrg      # one of the two compilations can be disabled.  We should prefer
371bdcaa8d0Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372bdcaa8d0Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373bdcaa8d0Smrg      # the former would cause a distcleancheck panic.
374bdcaa8d0Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375bdcaa8d0Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376bdcaa8d0Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377bdcaa8d0Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378bdcaa8d0Smrg      "$@" -Wc,-MD
379bdcaa8d0Smrg   else
380bdcaa8d0Smrg      tmpdepfile1=$dir$base.o.d
381bdcaa8d0Smrg      tmpdepfile2=$dir$base.d
382bdcaa8d0Smrg      tmpdepfile3=$dir$base.d
383bdcaa8d0Smrg      tmpdepfile4=$dir$base.d
384bdcaa8d0Smrg      "$@" -MD
385bdcaa8d0Smrg   fi
386bdcaa8d0Smrg
387bdcaa8d0Smrg   stat=$?
388bdcaa8d0Smrg   if test $stat -eq 0; then :
389bdcaa8d0Smrg   else
390bdcaa8d0Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391bdcaa8d0Smrg      exit $stat
392bdcaa8d0Smrg   fi
393bdcaa8d0Smrg
394bdcaa8d0Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395bdcaa8d0Smrg   do
396bdcaa8d0Smrg     test -f "$tmpdepfile" && break
397bdcaa8d0Smrg   done
398bdcaa8d0Smrg   if test -f "$tmpdepfile"; then
399bdcaa8d0Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400bdcaa8d0Smrg      # That's a tab and a space in the [].
401bdcaa8d0Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402bdcaa8d0Smrg   else
403bdcaa8d0Smrg      echo "#dummy" > "$depfile"
404bdcaa8d0Smrg   fi
405bdcaa8d0Smrg   rm -f "$tmpdepfile"
406bdcaa8d0Smrg   ;;
407bdcaa8d0Smrg
408bdcaa8d0Smrg#nosideeffect)
409bdcaa8d0Smrg  # This comment above is used by automake to tell side-effect
410bdcaa8d0Smrg  # dependency tracking mechanisms from slower ones.
411bdcaa8d0Smrg
412bdcaa8d0Smrgdashmstdout)
413bdcaa8d0Smrg  # Important note: in order to support this mode, a compiler *must*
414bdcaa8d0Smrg  # always write the preprocessed file to stdout, regardless of -o.
415bdcaa8d0Smrg  "$@" || exit $?
416bdcaa8d0Smrg
417bdcaa8d0Smrg  # Remove the call to Libtool.
418bdcaa8d0Smrg  if test "$libtool" = yes; then
41996ce994aSmrg    while test "X$1" != 'X--mode=compile'; do
420bdcaa8d0Smrg      shift
421bdcaa8d0Smrg    done
422bdcaa8d0Smrg    shift
423bdcaa8d0Smrg  fi
424bdcaa8d0Smrg
425bdcaa8d0Smrg  # Remove `-o $object'.
426bdcaa8d0Smrg  IFS=" "
427bdcaa8d0Smrg  for arg
428bdcaa8d0Smrg  do
429bdcaa8d0Smrg    case $arg in
430bdcaa8d0Smrg    -o)
431bdcaa8d0Smrg      shift
432bdcaa8d0Smrg      ;;
433bdcaa8d0Smrg    $object)
434bdcaa8d0Smrg      shift
435bdcaa8d0Smrg      ;;
436bdcaa8d0Smrg    *)
437bdcaa8d0Smrg      set fnord "$@" "$arg"
438bdcaa8d0Smrg      shift # fnord
439bdcaa8d0Smrg      shift # $arg
440bdcaa8d0Smrg      ;;
441bdcaa8d0Smrg    esac
442bdcaa8d0Smrg  done
443bdcaa8d0Smrg
444bdcaa8d0Smrg  test -z "$dashmflag" && dashmflag=-M
445bdcaa8d0Smrg  # Require at least two characters before searching for `:'
446bdcaa8d0Smrg  # in the target name.  This is to cope with DOS-style filenames:
447bdcaa8d0Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448bdcaa8d0Smrg  "$@" $dashmflag |
449bdcaa8d0Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450bdcaa8d0Smrg  rm -f "$depfile"
451bdcaa8d0Smrg  cat < "$tmpdepfile" > "$depfile"
452bdcaa8d0Smrg  tr ' ' '
453bdcaa8d0Smrg' < "$tmpdepfile" | \
454bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455bdcaa8d0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456bdcaa8d0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457bdcaa8d0Smrg  rm -f "$tmpdepfile"
458bdcaa8d0Smrg  ;;
459bdcaa8d0Smrg
460bdcaa8d0SmrgdashXmstdout)
461bdcaa8d0Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462bdcaa8d0Smrg  # run, as this mode is specially recognized in the preamble.
463bdcaa8d0Smrg  exit 1
464bdcaa8d0Smrg  ;;
465bdcaa8d0Smrg
466bdcaa8d0Smrgmakedepend)
467bdcaa8d0Smrg  "$@" || exit $?
468bdcaa8d0Smrg  # Remove any Libtool call
469bdcaa8d0Smrg  if test "$libtool" = yes; then
47096ce994aSmrg    while test "X$1" != 'X--mode=compile'; do
471bdcaa8d0Smrg      shift
472bdcaa8d0Smrg    done
473bdcaa8d0Smrg    shift
474bdcaa8d0Smrg  fi
475bdcaa8d0Smrg  # X makedepend
476bdcaa8d0Smrg  shift
47796ce994aSmrg  cleared=no eat=no
47896ce994aSmrg  for arg
47996ce994aSmrg  do
480bdcaa8d0Smrg    case $cleared in
481bdcaa8d0Smrg    no)
482bdcaa8d0Smrg      set ""; shift
483bdcaa8d0Smrg      cleared=yes ;;
484bdcaa8d0Smrg    esac
48596ce994aSmrg    if test $eat = yes; then
48696ce994aSmrg      eat=no
48796ce994aSmrg      continue
48896ce994aSmrg    fi
489bdcaa8d0Smrg    case "$arg" in
490bdcaa8d0Smrg    -D*|-I*)
491bdcaa8d0Smrg      set fnord "$@" "$arg"; shift ;;
492bdcaa8d0Smrg    # Strip any option that makedepend may not understand.  Remove
493bdcaa8d0Smrg    # the object too, otherwise makedepend will parse it as a source file.
49496ce994aSmrg    -arch)
49596ce994aSmrg      eat=yes ;;
496bdcaa8d0Smrg    -*|$object)
497bdcaa8d0Smrg      ;;
498bdcaa8d0Smrg    *)
499bdcaa8d0Smrg      set fnord "$@" "$arg"; shift ;;
500bdcaa8d0Smrg    esac
501bdcaa8d0Smrg  done
50296ce994aSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503bdcaa8d0Smrg  touch "$tmpdepfile"
504bdcaa8d0Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505bdcaa8d0Smrg  rm -f "$depfile"
506bdcaa8d0Smrg  cat < "$tmpdepfile" > "$depfile"
507bdcaa8d0Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508bdcaa8d0Smrg' | \
509bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510bdcaa8d0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511bdcaa8d0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512bdcaa8d0Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513bdcaa8d0Smrg  ;;
514bdcaa8d0Smrg
515bdcaa8d0Smrgcpp)
516bdcaa8d0Smrg  # Important note: in order to support this mode, a compiler *must*
517bdcaa8d0Smrg  # always write the preprocessed file to stdout.
518bdcaa8d0Smrg  "$@" || exit $?
519bdcaa8d0Smrg
520bdcaa8d0Smrg  # Remove the call to Libtool.
521bdcaa8d0Smrg  if test "$libtool" = yes; then
52296ce994aSmrg    while test "X$1" != 'X--mode=compile'; do
523bdcaa8d0Smrg      shift
524bdcaa8d0Smrg    done
525bdcaa8d0Smrg    shift
526bdcaa8d0Smrg  fi
527bdcaa8d0Smrg
528bdcaa8d0Smrg  # Remove `-o $object'.
529bdcaa8d0Smrg  IFS=" "
530bdcaa8d0Smrg  for arg
531bdcaa8d0Smrg  do
532bdcaa8d0Smrg    case $arg in
533bdcaa8d0Smrg    -o)
534bdcaa8d0Smrg      shift
535bdcaa8d0Smrg      ;;
536bdcaa8d0Smrg    $object)
537bdcaa8d0Smrg      shift
538bdcaa8d0Smrg      ;;
539bdcaa8d0Smrg    *)
540bdcaa8d0Smrg      set fnord "$@" "$arg"
541bdcaa8d0Smrg      shift # fnord
542bdcaa8d0Smrg      shift # $arg
543bdcaa8d0Smrg      ;;
544bdcaa8d0Smrg    esac
545bdcaa8d0Smrg  done
546bdcaa8d0Smrg
547bdcaa8d0Smrg  "$@" -E |
548bdcaa8d0Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549bdcaa8d0Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550bdcaa8d0Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551bdcaa8d0Smrg  rm -f "$depfile"
552bdcaa8d0Smrg  echo "$object : \\" > "$depfile"
553bdcaa8d0Smrg  cat < "$tmpdepfile" >> "$depfile"
554bdcaa8d0Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555bdcaa8d0Smrg  rm -f "$tmpdepfile"
556bdcaa8d0Smrg  ;;
557bdcaa8d0Smrg
558bdcaa8d0Smrgmsvisualcpp)
559bdcaa8d0Smrg  # Important note: in order to support this mode, a compiler *must*
56096ce994aSmrg  # always write the preprocessed file to stdout.
561bdcaa8d0Smrg  "$@" || exit $?
56296ce994aSmrg
56396ce994aSmrg  # Remove the call to Libtool.
56496ce994aSmrg  if test "$libtool" = yes; then
56596ce994aSmrg    while test "X$1" != 'X--mode=compile'; do
56696ce994aSmrg      shift
56796ce994aSmrg    done
56896ce994aSmrg    shift
56996ce994aSmrg  fi
57096ce994aSmrg
571bdcaa8d0Smrg  IFS=" "
572bdcaa8d0Smrg  for arg
573bdcaa8d0Smrg  do
574bdcaa8d0Smrg    case "$arg" in
57596ce994aSmrg    -o)
57696ce994aSmrg      shift
57796ce994aSmrg      ;;
57896ce994aSmrg    $object)
57996ce994aSmrg      shift
58096ce994aSmrg      ;;
581bdcaa8d0Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582bdcaa8d0Smrg	set fnord "$@"
583bdcaa8d0Smrg	shift
584bdcaa8d0Smrg	shift
585bdcaa8d0Smrg	;;
586bdcaa8d0Smrg    *)
587bdcaa8d0Smrg	set fnord "$@" "$arg"
588bdcaa8d0Smrg	shift
589bdcaa8d0Smrg	shift
590bdcaa8d0Smrg	;;
591bdcaa8d0Smrg    esac
592bdcaa8d0Smrg  done
59396ce994aSmrg  "$@" -E 2>/dev/null |
59496ce994aSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595bdcaa8d0Smrg  rm -f "$depfile"
596bdcaa8d0Smrg  echo "$object : \\" > "$depfile"
59796ce994aSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598bdcaa8d0Smrg  echo "	" >> "$depfile"
59996ce994aSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600bdcaa8d0Smrg  rm -f "$tmpdepfile"
601bdcaa8d0Smrg  ;;
602bdcaa8d0Smrg
60396ce994aSmrgmsvcmsys)
60496ce994aSmrg  # This case exists only to let depend.m4 do its work.  It works by
60596ce994aSmrg  # looking at the text of this script.  This case will never be run,
60696ce994aSmrg  # since it is checked for above.
60796ce994aSmrg  exit 1
60896ce994aSmrg  ;;
60996ce994aSmrg
610bdcaa8d0Smrgnone)
611bdcaa8d0Smrg  exec "$@"
612bdcaa8d0Smrg  ;;
613bdcaa8d0Smrg
614bdcaa8d0Smrg*)
615bdcaa8d0Smrg  echo "Unknown depmode $depmode" 1>&2
616bdcaa8d0Smrg  exit 1
617bdcaa8d0Smrg  ;;
618bdcaa8d0Smrgesac
619bdcaa8d0Smrg
620bdcaa8d0Smrgexit 0
621bdcaa8d0Smrg
622bdcaa8d0Smrg# Local Variables:
623bdcaa8d0Smrg# mode: shell-script
624bdcaa8d0Smrg# sh-indentation: 2
625bdcaa8d0Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626bdcaa8d0Smrg# time-stamp-start: "scriptversion="
627bdcaa8d0Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
62896ce994aSmrg# time-stamp-time-zone: "UTC"
62996ce994aSmrg# time-stamp-end: "; # UTC"
630bdcaa8d0Smrg# End:
631