depcomp revision 72313efb
1bdcaa8d0Smrg#! /bin/sh
2bdcaa8d0Smrg# depcomp - compile a program generating dependencies as side-effects
3bdcaa8d0Smrg
472313efbSmrgscriptversion=2007-03-29.01
5bdcaa8d0Smrg
672313efbSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
772313efbSmrg# 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
20bdcaa8d0Smrg# along with this program; if not, write to the Free Software
21bdcaa8d0Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22bdcaa8d0Smrg# 02110-1301, USA.
23bdcaa8d0Smrg
24bdcaa8d0Smrg# As a special exception to the GNU General Public License, if you
25bdcaa8d0Smrg# distribute this file as part of a program that contains a
26bdcaa8d0Smrg# configuration script generated by Autoconf, you may include it under
27bdcaa8d0Smrg# the same distribution terms that you use for the rest of that program.
28bdcaa8d0Smrg
29bdcaa8d0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30bdcaa8d0Smrg
31bdcaa8d0Smrgcase $1 in
32bdcaa8d0Smrg  '')
33bdcaa8d0Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34bdcaa8d0Smrg     exit 1;
35bdcaa8d0Smrg     ;;
36bdcaa8d0Smrg  -h | --h*)
37bdcaa8d0Smrg    cat <<\EOF
38bdcaa8d0SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39bdcaa8d0Smrg
40bdcaa8d0SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41bdcaa8d0Smrgas side-effects.
42bdcaa8d0Smrg
43bdcaa8d0SmrgEnvironment variables:
44bdcaa8d0Smrg  depmode     Dependency tracking mode.
45bdcaa8d0Smrg  source      Source file read by `PROGRAMS ARGS'.
46bdcaa8d0Smrg  object      Object file output by `PROGRAMS ARGS'.
47bdcaa8d0Smrg  DEPDIR      directory where to store dependencies.
48bdcaa8d0Smrg  depfile     Dependency file to output.
49bdcaa8d0Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
50bdcaa8d0Smrg  libtool     Whether libtool is used (yes/no).
51bdcaa8d0Smrg
52bdcaa8d0SmrgReport bugs to <bug-automake@gnu.org>.
53bdcaa8d0SmrgEOF
54bdcaa8d0Smrg    exit $?
55bdcaa8d0Smrg    ;;
56bdcaa8d0Smrg  -v | --v*)
57bdcaa8d0Smrg    echo "depcomp $scriptversion"
58bdcaa8d0Smrg    exit $?
59bdcaa8d0Smrg    ;;
60bdcaa8d0Smrgesac
61bdcaa8d0Smrg
62bdcaa8d0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63bdcaa8d0Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64bdcaa8d0Smrg  exit 1
65bdcaa8d0Smrgfi
66bdcaa8d0Smrg
67bdcaa8d0Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68bdcaa8d0Smrgdepfile=${depfile-`echo "$object" |
69bdcaa8d0Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70bdcaa8d0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71bdcaa8d0Smrg
72bdcaa8d0Smrgrm -f "$tmpdepfile"
73bdcaa8d0Smrg
74bdcaa8d0Smrg# Some modes work just like other modes, but use different flags.  We
75bdcaa8d0Smrg# parameterize here, but still list the modes in the big case below,
76bdcaa8d0Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77bdcaa8d0Smrg# here, because this file can only contain one case statement.
78bdcaa8d0Smrgif test "$depmode" = hp; then
79bdcaa8d0Smrg  # HP compiler uses -M and no extra arg.
80bdcaa8d0Smrg  gccflag=-M
81bdcaa8d0Smrg  depmode=gcc
82bdcaa8d0Smrgfi
83bdcaa8d0Smrg
84bdcaa8d0Smrgif test "$depmode" = dashXmstdout; then
85bdcaa8d0Smrg   # This is just like dashmstdout with a different argument.
86bdcaa8d0Smrg   dashmflag=-xM
87bdcaa8d0Smrg   depmode=dashmstdout
88bdcaa8d0Smrgfi
89bdcaa8d0Smrg
90bdcaa8d0Smrgcase "$depmode" in
91bdcaa8d0Smrggcc3)
92bdcaa8d0Smrg## gcc 3 implements dependency tracking that does exactly what
93bdcaa8d0Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94bdcaa8d0Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9572313efbSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
9672313efbSmrg## the command line argument order; so add the flags where they
9772313efbSmrg## appear in depend2.am.  Note that the slowdown incurred here
9872313efbSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
9972313efbSmrg  for arg
10072313efbSmrg  do
10172313efbSmrg    case $arg in
10272313efbSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
10372313efbSmrg    *)  set fnord "$@" "$arg" ;;
10472313efbSmrg    esac
10572313efbSmrg    shift # fnord
10672313efbSmrg    shift # $arg
10772313efbSmrg  done
10872313efbSmrg  "$@"
109bdcaa8d0Smrg  stat=$?
110bdcaa8d0Smrg  if test $stat -eq 0; then :
111bdcaa8d0Smrg  else
112bdcaa8d0Smrg    rm -f "$tmpdepfile"
113bdcaa8d0Smrg    exit $stat
114bdcaa8d0Smrg  fi
115bdcaa8d0Smrg  mv "$tmpdepfile" "$depfile"
116bdcaa8d0Smrg  ;;
117bdcaa8d0Smrg
118bdcaa8d0Smrggcc)
119bdcaa8d0Smrg## There are various ways to get dependency output from gcc.  Here's
120bdcaa8d0Smrg## why we pick this rather obscure method:
121bdcaa8d0Smrg## - Don't want to use -MD because we'd like the dependencies to end
122bdcaa8d0Smrg##   up in a subdir.  Having to rename by hand is ugly.
123bdcaa8d0Smrg##   (We might end up doing this anyway to support other compilers.)
124bdcaa8d0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125bdcaa8d0Smrg##   -MM, not -M (despite what the docs say).
126bdcaa8d0Smrg## - Using -M directly means running the compiler twice (even worse
127bdcaa8d0Smrg##   than renaming).
128bdcaa8d0Smrg  if test -z "$gccflag"; then
129bdcaa8d0Smrg    gccflag=-MD,
130bdcaa8d0Smrg  fi
131bdcaa8d0Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
132bdcaa8d0Smrg  stat=$?
133bdcaa8d0Smrg  if test $stat -eq 0; then :
134bdcaa8d0Smrg  else
135bdcaa8d0Smrg    rm -f "$tmpdepfile"
136bdcaa8d0Smrg    exit $stat
137bdcaa8d0Smrg  fi
138bdcaa8d0Smrg  rm -f "$depfile"
139bdcaa8d0Smrg  echo "$object : \\" > "$depfile"
140bdcaa8d0Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141bdcaa8d0Smrg## The second -e expression handles DOS-style file names with drive letters.
142bdcaa8d0Smrg  sed -e 's/^[^:]*: / /' \
143bdcaa8d0Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144bdcaa8d0Smrg## This next piece of magic avoids the `deleted header file' problem.
145bdcaa8d0Smrg## The problem is that when a header file which appears in a .P file
146bdcaa8d0Smrg## is deleted, the dependency causes make to die (because there is
147bdcaa8d0Smrg## typically no way to rebuild the header).  We avoid this by adding
148bdcaa8d0Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149bdcaa8d0Smrg## this for us directly.
150bdcaa8d0Smrg  tr ' ' '
151bdcaa8d0Smrg' < "$tmpdepfile" |
152bdcaa8d0Smrg## Some versions of gcc put a space before the `:'.  On the theory
153bdcaa8d0Smrg## that the space means something, we add a space to the output as
154bdcaa8d0Smrg## well.
155bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
156bdcaa8d0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
157bdcaa8d0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158bdcaa8d0Smrg  rm -f "$tmpdepfile"
159bdcaa8d0Smrg  ;;
160bdcaa8d0Smrg
161bdcaa8d0Smrghp)
162bdcaa8d0Smrg  # This case exists only to let depend.m4 do its work.  It works by
163bdcaa8d0Smrg  # looking at the text of this script.  This case will never be run,
164bdcaa8d0Smrg  # since it is checked for above.
165bdcaa8d0Smrg  exit 1
166bdcaa8d0Smrg  ;;
167bdcaa8d0Smrg
168bdcaa8d0Smrgsgi)
169bdcaa8d0Smrg  if test "$libtool" = yes; then
170bdcaa8d0Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171bdcaa8d0Smrg  else
172bdcaa8d0Smrg    "$@" -MDupdate "$tmpdepfile"
173bdcaa8d0Smrg  fi
174bdcaa8d0Smrg  stat=$?
175bdcaa8d0Smrg  if test $stat -eq 0; then :
176bdcaa8d0Smrg  else
177bdcaa8d0Smrg    rm -f "$tmpdepfile"
178bdcaa8d0Smrg    exit $stat
179bdcaa8d0Smrg  fi
180bdcaa8d0Smrg  rm -f "$depfile"
181bdcaa8d0Smrg
182bdcaa8d0Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183bdcaa8d0Smrg    echo "$object : \\" > "$depfile"
184bdcaa8d0Smrg
185bdcaa8d0Smrg    # Clip off the initial element (the dependent).  Don't try to be
186bdcaa8d0Smrg    # clever and replace this with sed code, as IRIX sed won't handle
187bdcaa8d0Smrg    # lines with more than a fixed number of characters (4096 in
188bdcaa8d0Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189bdcaa8d0Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
190bdcaa8d0Smrg    # dependency line.
191bdcaa8d0Smrg    tr ' ' '
192bdcaa8d0Smrg' < "$tmpdepfile" \
193bdcaa8d0Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194bdcaa8d0Smrg    tr '
195bdcaa8d0Smrg' ' ' >> $depfile
196bdcaa8d0Smrg    echo >> $depfile
197bdcaa8d0Smrg
198bdcaa8d0Smrg    # The second pass generates a dummy entry for each header file.
199bdcaa8d0Smrg    tr ' ' '
200bdcaa8d0Smrg' < "$tmpdepfile" \
201bdcaa8d0Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202bdcaa8d0Smrg   >> $depfile
203bdcaa8d0Smrg  else
204bdcaa8d0Smrg    # The sourcefile does not contain any dependencies, so just
205bdcaa8d0Smrg    # store a dummy comment line, to avoid errors with the Makefile
206bdcaa8d0Smrg    # "include basename.Plo" scheme.
207bdcaa8d0Smrg    echo "#dummy" > "$depfile"
208bdcaa8d0Smrg  fi
209bdcaa8d0Smrg  rm -f "$tmpdepfile"
210bdcaa8d0Smrg  ;;
211bdcaa8d0Smrg
212bdcaa8d0Smrgaix)
213bdcaa8d0Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
214bdcaa8d0Smrg  # in a .u file.  In older versions, this file always lives in the
215bdcaa8d0Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216bdcaa8d0Smrg  # start of each line; $object doesn't have directory information.
217bdcaa8d0Smrg  # Version 6 uses the directory in both cases.
21872313efbSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
21972313efbSmrg  test "x$dir" = "x$object" && dir=
22072313efbSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221bdcaa8d0Smrg  if test "$libtool" = yes; then
22272313efbSmrg    tmpdepfile1=$dir$base.u
22372313efbSmrg    tmpdepfile2=$base.u
22472313efbSmrg    tmpdepfile3=$dir.libs/$base.u
225bdcaa8d0Smrg    "$@" -Wc,-M
226bdcaa8d0Smrg  else
22772313efbSmrg    tmpdepfile1=$dir$base.u
22872313efbSmrg    tmpdepfile2=$dir$base.u
22972313efbSmrg    tmpdepfile3=$dir$base.u
230bdcaa8d0Smrg    "$@" -M
231bdcaa8d0Smrg  fi
232bdcaa8d0Smrg  stat=$?
233bdcaa8d0Smrg
234bdcaa8d0Smrg  if test $stat -eq 0; then :
235bdcaa8d0Smrg  else
23672313efbSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237bdcaa8d0Smrg    exit $stat
238bdcaa8d0Smrg  fi
239bdcaa8d0Smrg
24072313efbSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24172313efbSmrg  do
24272313efbSmrg    test -f "$tmpdepfile" && break
24372313efbSmrg  done
244bdcaa8d0Smrg  if test -f "$tmpdepfile"; then
245bdcaa8d0Smrg    # Each line is of the form `foo.o: dependent.h'.
246bdcaa8d0Smrg    # Do two passes, one to just change these to
247bdcaa8d0Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
24872313efbSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
24972313efbSmrg    # That's a tab and a space in the [].
25072313efbSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251bdcaa8d0Smrg  else
252bdcaa8d0Smrg    # The sourcefile does not contain any dependencies, so just
253bdcaa8d0Smrg    # store a dummy comment line, to avoid errors with the Makefile
254bdcaa8d0Smrg    # "include basename.Plo" scheme.
255bdcaa8d0Smrg    echo "#dummy" > "$depfile"
256bdcaa8d0Smrg  fi
257bdcaa8d0Smrg  rm -f "$tmpdepfile"
258bdcaa8d0Smrg  ;;
259bdcaa8d0Smrg
260bdcaa8d0Smrgicc)
261bdcaa8d0Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
262bdcaa8d0Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263bdcaa8d0Smrg  # ICC 7.0 will fill foo.d with something like
264bdcaa8d0Smrg  #    foo.o: sub/foo.c
265bdcaa8d0Smrg  #    foo.o: sub/foo.h
266bdcaa8d0Smrg  # which is wrong.  We want:
267bdcaa8d0Smrg  #    sub/foo.o: sub/foo.c
268bdcaa8d0Smrg  #    sub/foo.o: sub/foo.h
269bdcaa8d0Smrg  #    sub/foo.c:
270bdcaa8d0Smrg  #    sub/foo.h:
271bdcaa8d0Smrg  # ICC 7.1 will output
272bdcaa8d0Smrg  #    foo.o: sub/foo.c sub/foo.h
273bdcaa8d0Smrg  # and will wrap long lines using \ :
274bdcaa8d0Smrg  #    foo.o: sub/foo.c ... \
275bdcaa8d0Smrg  #     sub/foo.h ... \
276bdcaa8d0Smrg  #     ...
277bdcaa8d0Smrg
278bdcaa8d0Smrg  "$@" -MD -MF "$tmpdepfile"
279bdcaa8d0Smrg  stat=$?
280bdcaa8d0Smrg  if test $stat -eq 0; then :
281bdcaa8d0Smrg  else
282bdcaa8d0Smrg    rm -f "$tmpdepfile"
283bdcaa8d0Smrg    exit $stat
284bdcaa8d0Smrg  fi
285bdcaa8d0Smrg  rm -f "$depfile"
286bdcaa8d0Smrg  # Each line is of the form `foo.o: dependent.h',
287bdcaa8d0Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288bdcaa8d0Smrg  # Do two passes, one to just change these to
289bdcaa8d0Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
290bdcaa8d0Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291bdcaa8d0Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
292bdcaa8d0Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
293bdcaa8d0Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294bdcaa8d0Smrg    sed -e 's/$/ :/' >> "$depfile"
295bdcaa8d0Smrg  rm -f "$tmpdepfile"
296bdcaa8d0Smrg  ;;
297bdcaa8d0Smrg
29872313efbSmrghp2)
29972313efbSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30072313efbSmrg  # compilers, which have integrated preprocessors.  The correct option
30172313efbSmrg  # to use with these is +Maked; it writes dependencies to a file named
30272313efbSmrg  # 'foo.d', which lands next to the object file, wherever that
30372313efbSmrg  # happens to be.
30472313efbSmrg  # Much of this is similar to the tru64 case; see comments there.
30572313efbSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
30672313efbSmrg  test "x$dir" = "x$object" && dir=
30772313efbSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
30872313efbSmrg  if test "$libtool" = yes; then
30972313efbSmrg    tmpdepfile1=$dir$base.d
31072313efbSmrg    tmpdepfile2=$dir.libs/$base.d
31172313efbSmrg    "$@" -Wc,+Maked
31272313efbSmrg  else
31372313efbSmrg    tmpdepfile1=$dir$base.d
31472313efbSmrg    tmpdepfile2=$dir$base.d
31572313efbSmrg    "$@" +Maked
31672313efbSmrg  fi
31772313efbSmrg  stat=$?
31872313efbSmrg  if test $stat -eq 0; then :
31972313efbSmrg  else
32072313efbSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32172313efbSmrg     exit $stat
32272313efbSmrg  fi
32372313efbSmrg
32472313efbSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
32572313efbSmrg  do
32672313efbSmrg    test -f "$tmpdepfile" && break
32772313efbSmrg  done
32872313efbSmrg  if test -f "$tmpdepfile"; then
32972313efbSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33072313efbSmrg    # Add `dependent.h:' lines.
33172313efbSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
33272313efbSmrg  else
33372313efbSmrg    echo "#dummy" > "$depfile"
33472313efbSmrg  fi
33572313efbSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
33672313efbSmrg  ;;
33772313efbSmrg
338bdcaa8d0Smrgtru64)
339bdcaa8d0Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
340bdcaa8d0Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341bdcaa8d0Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342bdcaa8d0Smrg   # dependencies in `foo.d' instead, so we check for that too.
343bdcaa8d0Smrg   # Subdirectories are respected.
344bdcaa8d0Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345bdcaa8d0Smrg   test "x$dir" = "x$object" && dir=
346bdcaa8d0Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347bdcaa8d0Smrg
348bdcaa8d0Smrg   if test "$libtool" = yes; then
349bdcaa8d0Smrg      # With Tru64 cc, shared objects can also be used to make a
35072313efbSmrg      # static library.  This mechanism is used in libtool 1.4 series to
351bdcaa8d0Smrg      # handle both shared and static libraries in a single compilation.
352bdcaa8d0Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353bdcaa8d0Smrg      #
354bdcaa8d0Smrg      # With libtool 1.5 this exception was removed, and libtool now
355bdcaa8d0Smrg      # generates 2 separate objects for the 2 libraries.  These two
35672313efbSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
357bdcaa8d0Smrg      # in $dir$base.o.d.  We have to check for both files, because
358bdcaa8d0Smrg      # one of the two compilations can be disabled.  We should prefer
359bdcaa8d0Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360bdcaa8d0Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
361bdcaa8d0Smrg      # the former would cause a distcleancheck panic.
362bdcaa8d0Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363bdcaa8d0Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364bdcaa8d0Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365bdcaa8d0Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366bdcaa8d0Smrg      "$@" -Wc,-MD
367bdcaa8d0Smrg   else
368bdcaa8d0Smrg      tmpdepfile1=$dir$base.o.d
369bdcaa8d0Smrg      tmpdepfile2=$dir$base.d
370bdcaa8d0Smrg      tmpdepfile3=$dir$base.d
371bdcaa8d0Smrg      tmpdepfile4=$dir$base.d
372bdcaa8d0Smrg      "$@" -MD
373bdcaa8d0Smrg   fi
374bdcaa8d0Smrg
375bdcaa8d0Smrg   stat=$?
376bdcaa8d0Smrg   if test $stat -eq 0; then :
377bdcaa8d0Smrg   else
378bdcaa8d0Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379bdcaa8d0Smrg      exit $stat
380bdcaa8d0Smrg   fi
381bdcaa8d0Smrg
382bdcaa8d0Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383bdcaa8d0Smrg   do
384bdcaa8d0Smrg     test -f "$tmpdepfile" && break
385bdcaa8d0Smrg   done
386bdcaa8d0Smrg   if test -f "$tmpdepfile"; then
387bdcaa8d0Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388bdcaa8d0Smrg      # That's a tab and a space in the [].
389bdcaa8d0Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390bdcaa8d0Smrg   else
391bdcaa8d0Smrg      echo "#dummy" > "$depfile"
392bdcaa8d0Smrg   fi
393bdcaa8d0Smrg   rm -f "$tmpdepfile"
394bdcaa8d0Smrg   ;;
395bdcaa8d0Smrg
396bdcaa8d0Smrg#nosideeffect)
397bdcaa8d0Smrg  # This comment above is used by automake to tell side-effect
398bdcaa8d0Smrg  # dependency tracking mechanisms from slower ones.
399bdcaa8d0Smrg
400bdcaa8d0Smrgdashmstdout)
401bdcaa8d0Smrg  # Important note: in order to support this mode, a compiler *must*
402bdcaa8d0Smrg  # always write the preprocessed file to stdout, regardless of -o.
403bdcaa8d0Smrg  "$@" || exit $?
404bdcaa8d0Smrg
405bdcaa8d0Smrg  # Remove the call to Libtool.
406bdcaa8d0Smrg  if test "$libtool" = yes; then
407bdcaa8d0Smrg    while test $1 != '--mode=compile'; do
408bdcaa8d0Smrg      shift
409bdcaa8d0Smrg    done
410bdcaa8d0Smrg    shift
411bdcaa8d0Smrg  fi
412bdcaa8d0Smrg
413bdcaa8d0Smrg  # Remove `-o $object'.
414bdcaa8d0Smrg  IFS=" "
415bdcaa8d0Smrg  for arg
416bdcaa8d0Smrg  do
417bdcaa8d0Smrg    case $arg in
418bdcaa8d0Smrg    -o)
419bdcaa8d0Smrg      shift
420bdcaa8d0Smrg      ;;
421bdcaa8d0Smrg    $object)
422bdcaa8d0Smrg      shift
423bdcaa8d0Smrg      ;;
424bdcaa8d0Smrg    *)
425bdcaa8d0Smrg      set fnord "$@" "$arg"
426bdcaa8d0Smrg      shift # fnord
427bdcaa8d0Smrg      shift # $arg
428bdcaa8d0Smrg      ;;
429bdcaa8d0Smrg    esac
430bdcaa8d0Smrg  done
431bdcaa8d0Smrg
432bdcaa8d0Smrg  test -z "$dashmflag" && dashmflag=-M
433bdcaa8d0Smrg  # Require at least two characters before searching for `:'
434bdcaa8d0Smrg  # in the target name.  This is to cope with DOS-style filenames:
435bdcaa8d0Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436bdcaa8d0Smrg  "$@" $dashmflag |
437bdcaa8d0Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438bdcaa8d0Smrg  rm -f "$depfile"
439bdcaa8d0Smrg  cat < "$tmpdepfile" > "$depfile"
440bdcaa8d0Smrg  tr ' ' '
441bdcaa8d0Smrg' < "$tmpdepfile" | \
442bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
443bdcaa8d0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
444bdcaa8d0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445bdcaa8d0Smrg  rm -f "$tmpdepfile"
446bdcaa8d0Smrg  ;;
447bdcaa8d0Smrg
448bdcaa8d0SmrgdashXmstdout)
449bdcaa8d0Smrg  # This case only exists to satisfy depend.m4.  It is never actually
450bdcaa8d0Smrg  # run, as this mode is specially recognized in the preamble.
451bdcaa8d0Smrg  exit 1
452bdcaa8d0Smrg  ;;
453bdcaa8d0Smrg
454bdcaa8d0Smrgmakedepend)
455bdcaa8d0Smrg  "$@" || exit $?
456bdcaa8d0Smrg  # Remove any Libtool call
457bdcaa8d0Smrg  if test "$libtool" = yes; then
458bdcaa8d0Smrg    while test $1 != '--mode=compile'; do
459bdcaa8d0Smrg      shift
460bdcaa8d0Smrg    done
461bdcaa8d0Smrg    shift
462bdcaa8d0Smrg  fi
463bdcaa8d0Smrg  # X makedepend
464bdcaa8d0Smrg  shift
465bdcaa8d0Smrg  cleared=no
466bdcaa8d0Smrg  for arg in "$@"; do
467bdcaa8d0Smrg    case $cleared in
468bdcaa8d0Smrg    no)
469bdcaa8d0Smrg      set ""; shift
470bdcaa8d0Smrg      cleared=yes ;;
471bdcaa8d0Smrg    esac
472bdcaa8d0Smrg    case "$arg" in
473bdcaa8d0Smrg    -D*|-I*)
474bdcaa8d0Smrg      set fnord "$@" "$arg"; shift ;;
475bdcaa8d0Smrg    # Strip any option that makedepend may not understand.  Remove
476bdcaa8d0Smrg    # the object too, otherwise makedepend will parse it as a source file.
477bdcaa8d0Smrg    -*|$object)
478bdcaa8d0Smrg      ;;
479bdcaa8d0Smrg    *)
480bdcaa8d0Smrg      set fnord "$@" "$arg"; shift ;;
481bdcaa8d0Smrg    esac
482bdcaa8d0Smrg  done
483bdcaa8d0Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
484bdcaa8d0Smrg  touch "$tmpdepfile"
485bdcaa8d0Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486bdcaa8d0Smrg  rm -f "$depfile"
487bdcaa8d0Smrg  cat < "$tmpdepfile" > "$depfile"
488bdcaa8d0Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
489bdcaa8d0Smrg' | \
490bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
491bdcaa8d0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
492bdcaa8d0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493bdcaa8d0Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
494bdcaa8d0Smrg  ;;
495bdcaa8d0Smrg
496bdcaa8d0Smrgcpp)
497bdcaa8d0Smrg  # Important note: in order to support this mode, a compiler *must*
498bdcaa8d0Smrg  # always write the preprocessed file to stdout.
499bdcaa8d0Smrg  "$@" || exit $?
500bdcaa8d0Smrg
501bdcaa8d0Smrg  # Remove the call to Libtool.
502bdcaa8d0Smrg  if test "$libtool" = yes; then
503bdcaa8d0Smrg    while test $1 != '--mode=compile'; do
504bdcaa8d0Smrg      shift
505bdcaa8d0Smrg    done
506bdcaa8d0Smrg    shift
507bdcaa8d0Smrg  fi
508bdcaa8d0Smrg
509bdcaa8d0Smrg  # Remove `-o $object'.
510bdcaa8d0Smrg  IFS=" "
511bdcaa8d0Smrg  for arg
512bdcaa8d0Smrg  do
513bdcaa8d0Smrg    case $arg in
514bdcaa8d0Smrg    -o)
515bdcaa8d0Smrg      shift
516bdcaa8d0Smrg      ;;
517bdcaa8d0Smrg    $object)
518bdcaa8d0Smrg      shift
519bdcaa8d0Smrg      ;;
520bdcaa8d0Smrg    *)
521bdcaa8d0Smrg      set fnord "$@" "$arg"
522bdcaa8d0Smrg      shift # fnord
523bdcaa8d0Smrg      shift # $arg
524bdcaa8d0Smrg      ;;
525bdcaa8d0Smrg    esac
526bdcaa8d0Smrg  done
527bdcaa8d0Smrg
528bdcaa8d0Smrg  "$@" -E |
529bdcaa8d0Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530bdcaa8d0Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531bdcaa8d0Smrg    sed '$ s: \\$::' > "$tmpdepfile"
532bdcaa8d0Smrg  rm -f "$depfile"
533bdcaa8d0Smrg  echo "$object : \\" > "$depfile"
534bdcaa8d0Smrg  cat < "$tmpdepfile" >> "$depfile"
535bdcaa8d0Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536bdcaa8d0Smrg  rm -f "$tmpdepfile"
537bdcaa8d0Smrg  ;;
538bdcaa8d0Smrg
539bdcaa8d0Smrgmsvisualcpp)
540bdcaa8d0Smrg  # Important note: in order to support this mode, a compiler *must*
541bdcaa8d0Smrg  # always write the preprocessed file to stdout, regardless of -o,
542bdcaa8d0Smrg  # because we must use -o when running libtool.
543bdcaa8d0Smrg  "$@" || exit $?
544bdcaa8d0Smrg  IFS=" "
545bdcaa8d0Smrg  for arg
546bdcaa8d0Smrg  do
547bdcaa8d0Smrg    case "$arg" in
548bdcaa8d0Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549bdcaa8d0Smrg	set fnord "$@"
550bdcaa8d0Smrg	shift
551bdcaa8d0Smrg	shift
552bdcaa8d0Smrg	;;
553bdcaa8d0Smrg    *)
554bdcaa8d0Smrg	set fnord "$@" "$arg"
555bdcaa8d0Smrg	shift
556bdcaa8d0Smrg	shift
557bdcaa8d0Smrg	;;
558bdcaa8d0Smrg    esac
559bdcaa8d0Smrg  done
560bdcaa8d0Smrg  "$@" -E |
561bdcaa8d0Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562bdcaa8d0Smrg  rm -f "$depfile"
563bdcaa8d0Smrg  echo "$object : \\" > "$depfile"
564bdcaa8d0Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565bdcaa8d0Smrg  echo "	" >> "$depfile"
566bdcaa8d0Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567bdcaa8d0Smrg  rm -f "$tmpdepfile"
568bdcaa8d0Smrg  ;;
569bdcaa8d0Smrg
570bdcaa8d0Smrgnone)
571bdcaa8d0Smrg  exec "$@"
572bdcaa8d0Smrg  ;;
573bdcaa8d0Smrg
574bdcaa8d0Smrg*)
575bdcaa8d0Smrg  echo "Unknown depmode $depmode" 1>&2
576bdcaa8d0Smrg  exit 1
577bdcaa8d0Smrg  ;;
578bdcaa8d0Smrgesac
579bdcaa8d0Smrg
580bdcaa8d0Smrgexit 0
581bdcaa8d0Smrg
582bdcaa8d0Smrg# Local Variables:
583bdcaa8d0Smrg# mode: shell-script
584bdcaa8d0Smrg# sh-indentation: 2
585bdcaa8d0Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
586bdcaa8d0Smrg# time-stamp-start: "scriptversion="
587bdcaa8d0Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
588bdcaa8d0Smrg# time-stamp-end: "$"
589bdcaa8d0Smrg# End:
590