depcomp revision bd1da9d7
1bd1da9d7Smrg#! /bin/sh
2bd1da9d7Smrg# depcomp - compile a program generating dependencies as side-effects
3bd1da9d7Smrg
4bd1da9d7Smrgscriptversion=2005-07-09.11
5bd1da9d7Smrg
6bd1da9d7Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
7bd1da9d7Smrg
8bd1da9d7Smrg# This program is free software; you can redistribute it and/or modify
9bd1da9d7Smrg# it under the terms of the GNU General Public License as published by
10bd1da9d7Smrg# the Free Software Foundation; either version 2, or (at your option)
11bd1da9d7Smrg# any later version.
12bd1da9d7Smrg
13bd1da9d7Smrg# This program is distributed in the hope that it will be useful,
14bd1da9d7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
15bd1da9d7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16bd1da9d7Smrg# GNU General Public License for more details.
17bd1da9d7Smrg
18bd1da9d7Smrg# You should have received a copy of the GNU General Public License
19bd1da9d7Smrg# along with this program; if not, write to the Free Software
20bd1da9d7Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21bd1da9d7Smrg# 02110-1301, USA.
22bd1da9d7Smrg
23bd1da9d7Smrg# As a special exception to the GNU General Public License, if you
24bd1da9d7Smrg# distribute this file as part of a program that contains a
25bd1da9d7Smrg# configuration script generated by Autoconf, you may include it under
26bd1da9d7Smrg# the same distribution terms that you use for the rest of that program.
27bd1da9d7Smrg
28bd1da9d7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
29bd1da9d7Smrg
30bd1da9d7Smrgcase $1 in
31bd1da9d7Smrg  '')
32bd1da9d7Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
33bd1da9d7Smrg     exit 1;
34bd1da9d7Smrg     ;;
35bd1da9d7Smrg  -h | --h*)
36bd1da9d7Smrg    cat <<\EOF
37bd1da9d7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
38bd1da9d7Smrg
39bd1da9d7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
40bd1da9d7Smrgas side-effects.
41bd1da9d7Smrg
42bd1da9d7SmrgEnvironment variables:
43bd1da9d7Smrg  depmode     Dependency tracking mode.
44bd1da9d7Smrg  source      Source file read by `PROGRAMS ARGS'.
45bd1da9d7Smrg  object      Object file output by `PROGRAMS ARGS'.
46bd1da9d7Smrg  DEPDIR      directory where to store dependencies.
47bd1da9d7Smrg  depfile     Dependency file to output.
48bd1da9d7Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
49bd1da9d7Smrg  libtool     Whether libtool is used (yes/no).
50bd1da9d7Smrg
51bd1da9d7SmrgReport bugs to <bug-automake@gnu.org>.
52bd1da9d7SmrgEOF
53bd1da9d7Smrg    exit $?
54bd1da9d7Smrg    ;;
55bd1da9d7Smrg  -v | --v*)
56bd1da9d7Smrg    echo "depcomp $scriptversion"
57bd1da9d7Smrg    exit $?
58bd1da9d7Smrg    ;;
59bd1da9d7Smrgesac
60bd1da9d7Smrg
61bd1da9d7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
62bd1da9d7Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
63bd1da9d7Smrg  exit 1
64bd1da9d7Smrgfi
65bd1da9d7Smrg
66bd1da9d7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
67bd1da9d7Smrgdepfile=${depfile-`echo "$object" |
68bd1da9d7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
69bd1da9d7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
70bd1da9d7Smrg
71bd1da9d7Smrgrm -f "$tmpdepfile"
72bd1da9d7Smrg
73bd1da9d7Smrg# Some modes work just like other modes, but use different flags.  We
74bd1da9d7Smrg# parameterize here, but still list the modes in the big case below,
75bd1da9d7Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
76bd1da9d7Smrg# here, because this file can only contain one case statement.
77bd1da9d7Smrgif test "$depmode" = hp; then
78bd1da9d7Smrg  # HP compiler uses -M and no extra arg.
79bd1da9d7Smrg  gccflag=-M
80bd1da9d7Smrg  depmode=gcc
81bd1da9d7Smrgfi
82bd1da9d7Smrg
83bd1da9d7Smrgif test "$depmode" = dashXmstdout; then
84bd1da9d7Smrg   # This is just like dashmstdout with a different argument.
85bd1da9d7Smrg   dashmflag=-xM
86bd1da9d7Smrg   depmode=dashmstdout
87bd1da9d7Smrgfi
88bd1da9d7Smrg
89bd1da9d7Smrgcase "$depmode" in
90bd1da9d7Smrggcc3)
91bd1da9d7Smrg## gcc 3 implements dependency tracking that does exactly what
92bd1da9d7Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
93bd1da9d7Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
94bd1da9d7Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
95bd1da9d7Smrg  stat=$?
96bd1da9d7Smrg  if test $stat -eq 0; then :
97bd1da9d7Smrg  else
98bd1da9d7Smrg    rm -f "$tmpdepfile"
99bd1da9d7Smrg    exit $stat
100bd1da9d7Smrg  fi
101bd1da9d7Smrg  mv "$tmpdepfile" "$depfile"
102bd1da9d7Smrg  ;;
103bd1da9d7Smrg
104bd1da9d7Smrggcc)
105bd1da9d7Smrg## There are various ways to get dependency output from gcc.  Here's
106bd1da9d7Smrg## why we pick this rather obscure method:
107bd1da9d7Smrg## - Don't want to use -MD because we'd like the dependencies to end
108bd1da9d7Smrg##   up in a subdir.  Having to rename by hand is ugly.
109bd1da9d7Smrg##   (We might end up doing this anyway to support other compilers.)
110bd1da9d7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
111bd1da9d7Smrg##   -MM, not -M (despite what the docs say).
112bd1da9d7Smrg## - Using -M directly means running the compiler twice (even worse
113bd1da9d7Smrg##   than renaming).
114bd1da9d7Smrg  if test -z "$gccflag"; then
115bd1da9d7Smrg    gccflag=-MD,
116bd1da9d7Smrg  fi
117bd1da9d7Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
118bd1da9d7Smrg  stat=$?
119bd1da9d7Smrg  if test $stat -eq 0; then :
120bd1da9d7Smrg  else
121bd1da9d7Smrg    rm -f "$tmpdepfile"
122bd1da9d7Smrg    exit $stat
123bd1da9d7Smrg  fi
124bd1da9d7Smrg  rm -f "$depfile"
125bd1da9d7Smrg  echo "$object : \\" > "$depfile"
126bd1da9d7Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
127bd1da9d7Smrg## The second -e expression handles DOS-style file names with drive letters.
128bd1da9d7Smrg  sed -e 's/^[^:]*: / /' \
129bd1da9d7Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
130bd1da9d7Smrg## This next piece of magic avoids the `deleted header file' problem.
131bd1da9d7Smrg## The problem is that when a header file which appears in a .P file
132bd1da9d7Smrg## is deleted, the dependency causes make to die (because there is
133bd1da9d7Smrg## typically no way to rebuild the header).  We avoid this by adding
134bd1da9d7Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
135bd1da9d7Smrg## this for us directly.
136bd1da9d7Smrg  tr ' ' '
137bd1da9d7Smrg' < "$tmpdepfile" |
138bd1da9d7Smrg## Some versions of gcc put a space before the `:'.  On the theory
139bd1da9d7Smrg## that the space means something, we add a space to the output as
140bd1da9d7Smrg## well.
141bd1da9d7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
142bd1da9d7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
143bd1da9d7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
144bd1da9d7Smrg  rm -f "$tmpdepfile"
145bd1da9d7Smrg  ;;
146bd1da9d7Smrg
147bd1da9d7Smrghp)
148bd1da9d7Smrg  # This case exists only to let depend.m4 do its work.  It works by
149bd1da9d7Smrg  # looking at the text of this script.  This case will never be run,
150bd1da9d7Smrg  # since it is checked for above.
151bd1da9d7Smrg  exit 1
152bd1da9d7Smrg  ;;
153bd1da9d7Smrg
154bd1da9d7Smrgsgi)
155bd1da9d7Smrg  if test "$libtool" = yes; then
156bd1da9d7Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
157bd1da9d7Smrg  else
158bd1da9d7Smrg    "$@" -MDupdate "$tmpdepfile"
159bd1da9d7Smrg  fi
160bd1da9d7Smrg  stat=$?
161bd1da9d7Smrg  if test $stat -eq 0; then :
162bd1da9d7Smrg  else
163bd1da9d7Smrg    rm -f "$tmpdepfile"
164bd1da9d7Smrg    exit $stat
165bd1da9d7Smrg  fi
166bd1da9d7Smrg  rm -f "$depfile"
167bd1da9d7Smrg
168bd1da9d7Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
169bd1da9d7Smrg    echo "$object : \\" > "$depfile"
170bd1da9d7Smrg
171bd1da9d7Smrg    # Clip off the initial element (the dependent).  Don't try to be
172bd1da9d7Smrg    # clever and replace this with sed code, as IRIX sed won't handle
173bd1da9d7Smrg    # lines with more than a fixed number of characters (4096 in
174bd1da9d7Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
175bd1da9d7Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
176bd1da9d7Smrg    # dependency line.
177bd1da9d7Smrg    tr ' ' '
178bd1da9d7Smrg' < "$tmpdepfile" \
179bd1da9d7Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
180bd1da9d7Smrg    tr '
181bd1da9d7Smrg' ' ' >> $depfile
182bd1da9d7Smrg    echo >> $depfile
183bd1da9d7Smrg
184bd1da9d7Smrg    # The second pass generates a dummy entry for each header file.
185bd1da9d7Smrg    tr ' ' '
186bd1da9d7Smrg' < "$tmpdepfile" \
187bd1da9d7Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
188bd1da9d7Smrg   >> $depfile
189bd1da9d7Smrg  else
190bd1da9d7Smrg    # The sourcefile does not contain any dependencies, so just
191bd1da9d7Smrg    # store a dummy comment line, to avoid errors with the Makefile
192bd1da9d7Smrg    # "include basename.Plo" scheme.
193bd1da9d7Smrg    echo "#dummy" > "$depfile"
194bd1da9d7Smrg  fi
195bd1da9d7Smrg  rm -f "$tmpdepfile"
196bd1da9d7Smrg  ;;
197bd1da9d7Smrg
198bd1da9d7Smrgaix)
199bd1da9d7Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
200bd1da9d7Smrg  # in a .u file.  In older versions, this file always lives in the
201bd1da9d7Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
202bd1da9d7Smrg  # start of each line; $object doesn't have directory information.
203bd1da9d7Smrg  # Version 6 uses the directory in both cases.
204bd1da9d7Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
205bd1da9d7Smrg  tmpdepfile="$stripped.u"
206bd1da9d7Smrg  if test "$libtool" = yes; then
207bd1da9d7Smrg    "$@" -Wc,-M
208bd1da9d7Smrg  else
209bd1da9d7Smrg    "$@" -M
210bd1da9d7Smrg  fi
211bd1da9d7Smrg  stat=$?
212bd1da9d7Smrg
213bd1da9d7Smrg  if test -f "$tmpdepfile"; then :
214bd1da9d7Smrg  else
215bd1da9d7Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
216bd1da9d7Smrg    tmpdepfile="$stripped.u"
217bd1da9d7Smrg  fi
218bd1da9d7Smrg
219bd1da9d7Smrg  if test $stat -eq 0; then :
220bd1da9d7Smrg  else
221bd1da9d7Smrg    rm -f "$tmpdepfile"
222bd1da9d7Smrg    exit $stat
223bd1da9d7Smrg  fi
224bd1da9d7Smrg
225bd1da9d7Smrg  if test -f "$tmpdepfile"; then
226bd1da9d7Smrg    outname="$stripped.o"
227bd1da9d7Smrg    # Each line is of the form `foo.o: dependent.h'.
228bd1da9d7Smrg    # Do two passes, one to just change these to
229bd1da9d7Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
230bd1da9d7Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
231bd1da9d7Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
232bd1da9d7Smrg  else
233bd1da9d7Smrg    # The sourcefile does not contain any dependencies, so just
234bd1da9d7Smrg    # store a dummy comment line, to avoid errors with the Makefile
235bd1da9d7Smrg    # "include basename.Plo" scheme.
236bd1da9d7Smrg    echo "#dummy" > "$depfile"
237bd1da9d7Smrg  fi
238bd1da9d7Smrg  rm -f "$tmpdepfile"
239bd1da9d7Smrg  ;;
240bd1da9d7Smrg
241bd1da9d7Smrgicc)
242bd1da9d7Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
243bd1da9d7Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
244bd1da9d7Smrg  # ICC 7.0 will fill foo.d with something like
245bd1da9d7Smrg  #    foo.o: sub/foo.c
246bd1da9d7Smrg  #    foo.o: sub/foo.h
247bd1da9d7Smrg  # which is wrong.  We want:
248bd1da9d7Smrg  #    sub/foo.o: sub/foo.c
249bd1da9d7Smrg  #    sub/foo.o: sub/foo.h
250bd1da9d7Smrg  #    sub/foo.c:
251bd1da9d7Smrg  #    sub/foo.h:
252bd1da9d7Smrg  # ICC 7.1 will output
253bd1da9d7Smrg  #    foo.o: sub/foo.c sub/foo.h
254bd1da9d7Smrg  # and will wrap long lines using \ :
255bd1da9d7Smrg  #    foo.o: sub/foo.c ... \
256bd1da9d7Smrg  #     sub/foo.h ... \
257bd1da9d7Smrg  #     ...
258bd1da9d7Smrg
259bd1da9d7Smrg  "$@" -MD -MF "$tmpdepfile"
260bd1da9d7Smrg  stat=$?
261bd1da9d7Smrg  if test $stat -eq 0; then :
262bd1da9d7Smrg  else
263bd1da9d7Smrg    rm -f "$tmpdepfile"
264bd1da9d7Smrg    exit $stat
265bd1da9d7Smrg  fi
266bd1da9d7Smrg  rm -f "$depfile"
267bd1da9d7Smrg  # Each line is of the form `foo.o: dependent.h',
268bd1da9d7Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
269bd1da9d7Smrg  # Do two passes, one to just change these to
270bd1da9d7Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
271bd1da9d7Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
272bd1da9d7Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
273bd1da9d7Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
274bd1da9d7Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
275bd1da9d7Smrg    sed -e 's/$/ :/' >> "$depfile"
276bd1da9d7Smrg  rm -f "$tmpdepfile"
277bd1da9d7Smrg  ;;
278bd1da9d7Smrg
279bd1da9d7Smrgtru64)
280bd1da9d7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
281bd1da9d7Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
282bd1da9d7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
283bd1da9d7Smrg   # dependencies in `foo.d' instead, so we check for that too.
284bd1da9d7Smrg   # Subdirectories are respected.
285bd1da9d7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
286bd1da9d7Smrg   test "x$dir" = "x$object" && dir=
287bd1da9d7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
288bd1da9d7Smrg
289bd1da9d7Smrg   if test "$libtool" = yes; then
290bd1da9d7Smrg      # With Tru64 cc, shared objects can also be used to make a
291bd1da9d7Smrg      # static library.  This mecanism is used in libtool 1.4 series to
292bd1da9d7Smrg      # handle both shared and static libraries in a single compilation.
293bd1da9d7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
294bd1da9d7Smrg      #
295bd1da9d7Smrg      # With libtool 1.5 this exception was removed, and libtool now
296bd1da9d7Smrg      # generates 2 separate objects for the 2 libraries.  These two
297bd1da9d7Smrg      # compilations output dependencies in in $dir.libs/$base.o.d and
298bd1da9d7Smrg      # in $dir$base.o.d.  We have to check for both files, because
299bd1da9d7Smrg      # one of the two compilations can be disabled.  We should prefer
300bd1da9d7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
301bd1da9d7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
302bd1da9d7Smrg      # the former would cause a distcleancheck panic.
303bd1da9d7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
304bd1da9d7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
305bd1da9d7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
306bd1da9d7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
307bd1da9d7Smrg      "$@" -Wc,-MD
308bd1da9d7Smrg   else
309bd1da9d7Smrg      tmpdepfile1=$dir$base.o.d
310bd1da9d7Smrg      tmpdepfile2=$dir$base.d
311bd1da9d7Smrg      tmpdepfile3=$dir$base.d
312bd1da9d7Smrg      tmpdepfile4=$dir$base.d
313bd1da9d7Smrg      "$@" -MD
314bd1da9d7Smrg   fi
315bd1da9d7Smrg
316bd1da9d7Smrg   stat=$?
317bd1da9d7Smrg   if test $stat -eq 0; then :
318bd1da9d7Smrg   else
319bd1da9d7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
320bd1da9d7Smrg      exit $stat
321bd1da9d7Smrg   fi
322bd1da9d7Smrg
323bd1da9d7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
324bd1da9d7Smrg   do
325bd1da9d7Smrg     test -f "$tmpdepfile" && break
326bd1da9d7Smrg   done
327bd1da9d7Smrg   if test -f "$tmpdepfile"; then
328bd1da9d7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
329bd1da9d7Smrg      # That's a tab and a space in the [].
330bd1da9d7Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
331bd1da9d7Smrg   else
332bd1da9d7Smrg      echo "#dummy" > "$depfile"
333bd1da9d7Smrg   fi
334bd1da9d7Smrg   rm -f "$tmpdepfile"
335bd1da9d7Smrg   ;;
336bd1da9d7Smrg
337bd1da9d7Smrg#nosideeffect)
338bd1da9d7Smrg  # This comment above is used by automake to tell side-effect
339bd1da9d7Smrg  # dependency tracking mechanisms from slower ones.
340bd1da9d7Smrg
341bd1da9d7Smrgdashmstdout)
342bd1da9d7Smrg  # Important note: in order to support this mode, a compiler *must*
343bd1da9d7Smrg  # always write the preprocessed file to stdout, regardless of -o.
344bd1da9d7Smrg  "$@" || exit $?
345bd1da9d7Smrg
346bd1da9d7Smrg  # Remove the call to Libtool.
347bd1da9d7Smrg  if test "$libtool" = yes; then
348bd1da9d7Smrg    while test $1 != '--mode=compile'; do
349bd1da9d7Smrg      shift
350bd1da9d7Smrg    done
351bd1da9d7Smrg    shift
352bd1da9d7Smrg  fi
353bd1da9d7Smrg
354bd1da9d7Smrg  # Remove `-o $object'.
355bd1da9d7Smrg  IFS=" "
356bd1da9d7Smrg  for arg
357bd1da9d7Smrg  do
358bd1da9d7Smrg    case $arg in
359bd1da9d7Smrg    -o)
360bd1da9d7Smrg      shift
361bd1da9d7Smrg      ;;
362bd1da9d7Smrg    $object)
363bd1da9d7Smrg      shift
364bd1da9d7Smrg      ;;
365bd1da9d7Smrg    *)
366bd1da9d7Smrg      set fnord "$@" "$arg"
367bd1da9d7Smrg      shift # fnord
368bd1da9d7Smrg      shift # $arg
369bd1da9d7Smrg      ;;
370bd1da9d7Smrg    esac
371bd1da9d7Smrg  done
372bd1da9d7Smrg
373bd1da9d7Smrg  test -z "$dashmflag" && dashmflag=-M
374bd1da9d7Smrg  # Require at least two characters before searching for `:'
375bd1da9d7Smrg  # in the target name.  This is to cope with DOS-style filenames:
376bd1da9d7Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
377bd1da9d7Smrg  "$@" $dashmflag |
378bd1da9d7Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
379bd1da9d7Smrg  rm -f "$depfile"
380bd1da9d7Smrg  cat < "$tmpdepfile" > "$depfile"
381bd1da9d7Smrg  tr ' ' '
382bd1da9d7Smrg' < "$tmpdepfile" | \
383bd1da9d7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
384bd1da9d7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
385bd1da9d7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
386bd1da9d7Smrg  rm -f "$tmpdepfile"
387bd1da9d7Smrg  ;;
388bd1da9d7Smrg
389bd1da9d7SmrgdashXmstdout)
390bd1da9d7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
391bd1da9d7Smrg  # run, as this mode is specially recognized in the preamble.
392bd1da9d7Smrg  exit 1
393bd1da9d7Smrg  ;;
394bd1da9d7Smrg
395bd1da9d7Smrgmakedepend)
396bd1da9d7Smrg  "$@" || exit $?
397bd1da9d7Smrg  # Remove any Libtool call
398bd1da9d7Smrg  if test "$libtool" = yes; then
399bd1da9d7Smrg    while test $1 != '--mode=compile'; do
400bd1da9d7Smrg      shift
401bd1da9d7Smrg    done
402bd1da9d7Smrg    shift
403bd1da9d7Smrg  fi
404bd1da9d7Smrg  # X makedepend
405bd1da9d7Smrg  shift
406bd1da9d7Smrg  cleared=no
407bd1da9d7Smrg  for arg in "$@"; do
408bd1da9d7Smrg    case $cleared in
409bd1da9d7Smrg    no)
410bd1da9d7Smrg      set ""; shift
411bd1da9d7Smrg      cleared=yes ;;
412bd1da9d7Smrg    esac
413bd1da9d7Smrg    case "$arg" in
414bd1da9d7Smrg    -D*|-I*)
415bd1da9d7Smrg      set fnord "$@" "$arg"; shift ;;
416bd1da9d7Smrg    # Strip any option that makedepend may not understand.  Remove
417bd1da9d7Smrg    # the object too, otherwise makedepend will parse it as a source file.
418bd1da9d7Smrg    -*|$object)
419bd1da9d7Smrg      ;;
420bd1da9d7Smrg    *)
421bd1da9d7Smrg      set fnord "$@" "$arg"; shift ;;
422bd1da9d7Smrg    esac
423bd1da9d7Smrg  done
424bd1da9d7Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
425bd1da9d7Smrg  touch "$tmpdepfile"
426bd1da9d7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
427bd1da9d7Smrg  rm -f "$depfile"
428bd1da9d7Smrg  cat < "$tmpdepfile" > "$depfile"
429bd1da9d7Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
430bd1da9d7Smrg' | \
431bd1da9d7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
432bd1da9d7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
433bd1da9d7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
434bd1da9d7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
435bd1da9d7Smrg  ;;
436bd1da9d7Smrg
437bd1da9d7Smrgcpp)
438bd1da9d7Smrg  # Important note: in order to support this mode, a compiler *must*
439bd1da9d7Smrg  # always write the preprocessed file to stdout.
440bd1da9d7Smrg  "$@" || exit $?
441bd1da9d7Smrg
442bd1da9d7Smrg  # Remove the call to Libtool.
443bd1da9d7Smrg  if test "$libtool" = yes; then
444bd1da9d7Smrg    while test $1 != '--mode=compile'; do
445bd1da9d7Smrg      shift
446bd1da9d7Smrg    done
447bd1da9d7Smrg    shift
448bd1da9d7Smrg  fi
449bd1da9d7Smrg
450bd1da9d7Smrg  # Remove `-o $object'.
451bd1da9d7Smrg  IFS=" "
452bd1da9d7Smrg  for arg
453bd1da9d7Smrg  do
454bd1da9d7Smrg    case $arg in
455bd1da9d7Smrg    -o)
456bd1da9d7Smrg      shift
457bd1da9d7Smrg      ;;
458bd1da9d7Smrg    $object)
459bd1da9d7Smrg      shift
460bd1da9d7Smrg      ;;
461bd1da9d7Smrg    *)
462bd1da9d7Smrg      set fnord "$@" "$arg"
463bd1da9d7Smrg      shift # fnord
464bd1da9d7Smrg      shift # $arg
465bd1da9d7Smrg      ;;
466bd1da9d7Smrg    esac
467bd1da9d7Smrg  done
468bd1da9d7Smrg
469bd1da9d7Smrg  "$@" -E |
470bd1da9d7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
471bd1da9d7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
472bd1da9d7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
473bd1da9d7Smrg  rm -f "$depfile"
474bd1da9d7Smrg  echo "$object : \\" > "$depfile"
475bd1da9d7Smrg  cat < "$tmpdepfile" >> "$depfile"
476bd1da9d7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
477bd1da9d7Smrg  rm -f "$tmpdepfile"
478bd1da9d7Smrg  ;;
479bd1da9d7Smrg
480bd1da9d7Smrgmsvisualcpp)
481bd1da9d7Smrg  # Important note: in order to support this mode, a compiler *must*
482bd1da9d7Smrg  # always write the preprocessed file to stdout, regardless of -o,
483bd1da9d7Smrg  # because we must use -o when running libtool.
484bd1da9d7Smrg  "$@" || exit $?
485bd1da9d7Smrg  IFS=" "
486bd1da9d7Smrg  for arg
487bd1da9d7Smrg  do
488bd1da9d7Smrg    case "$arg" in
489bd1da9d7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
490bd1da9d7Smrg	set fnord "$@"
491bd1da9d7Smrg	shift
492bd1da9d7Smrg	shift
493bd1da9d7Smrg	;;
494bd1da9d7Smrg    *)
495bd1da9d7Smrg	set fnord "$@" "$arg"
496bd1da9d7Smrg	shift
497bd1da9d7Smrg	shift
498bd1da9d7Smrg	;;
499bd1da9d7Smrg    esac
500bd1da9d7Smrg  done
501bd1da9d7Smrg  "$@" -E |
502bd1da9d7Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
503bd1da9d7Smrg  rm -f "$depfile"
504bd1da9d7Smrg  echo "$object : \\" > "$depfile"
505bd1da9d7Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
506bd1da9d7Smrg  echo "	" >> "$depfile"
507bd1da9d7Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
508bd1da9d7Smrg  rm -f "$tmpdepfile"
509bd1da9d7Smrg  ;;
510bd1da9d7Smrg
511bd1da9d7Smrgnone)
512bd1da9d7Smrg  exec "$@"
513bd1da9d7Smrg  ;;
514bd1da9d7Smrg
515bd1da9d7Smrg*)
516bd1da9d7Smrg  echo "Unknown depmode $depmode" 1>&2
517bd1da9d7Smrg  exit 1
518bd1da9d7Smrg  ;;
519bd1da9d7Smrgesac
520bd1da9d7Smrg
521bd1da9d7Smrgexit 0
522bd1da9d7Smrg
523bd1da9d7Smrg# Local Variables:
524bd1da9d7Smrg# mode: shell-script
525bd1da9d7Smrg# sh-indentation: 2
526bd1da9d7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
527bd1da9d7Smrg# time-stamp-start: "scriptversion="
528bd1da9d7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
529bd1da9d7Smrg# time-stamp-end: "$"
530bd1da9d7Smrg# End:
531