depcomp revision 2265a131
1444c061aSmrg#! /bin/sh
2444c061aSmrg# depcomp - compile a program generating dependencies as side-effects
3444c061aSmrg
42265a131Smrgscriptversion=2007-03-29.01
5444c061aSmrg
62265a131Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
72265a131Smrg# Foundation, Inc.
8444c061aSmrg
9444c061aSmrg# This program is free software; you can redistribute it and/or modify
10444c061aSmrg# it under the terms of the GNU General Public License as published by
11444c061aSmrg# the Free Software Foundation; either version 2, or (at your option)
12444c061aSmrg# any later version.
13444c061aSmrg
14444c061aSmrg# This program is distributed in the hope that it will be useful,
15444c061aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16444c061aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17444c061aSmrg# GNU General Public License for more details.
18444c061aSmrg
19444c061aSmrg# You should have received a copy of the GNU General Public License
20444c061aSmrg# along with this program; if not, write to the Free Software
21444c061aSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22444c061aSmrg# 02110-1301, USA.
23444c061aSmrg
24444c061aSmrg# As a special exception to the GNU General Public License, if you
25444c061aSmrg# distribute this file as part of a program that contains a
26444c061aSmrg# configuration script generated by Autoconf, you may include it under
27444c061aSmrg# the same distribution terms that you use for the rest of that program.
28444c061aSmrg
29444c061aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30444c061aSmrg
31444c061aSmrgcase $1 in
32444c061aSmrg  '')
33444c061aSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34444c061aSmrg     exit 1;
35444c061aSmrg     ;;
36444c061aSmrg  -h | --h*)
37444c061aSmrg    cat <<\EOF
38444c061aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39444c061aSmrg
40444c061aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41444c061aSmrgas side-effects.
42444c061aSmrg
43444c061aSmrgEnvironment variables:
44444c061aSmrg  depmode     Dependency tracking mode.
45444c061aSmrg  source      Source file read by `PROGRAMS ARGS'.
46444c061aSmrg  object      Object file output by `PROGRAMS ARGS'.
47444c061aSmrg  DEPDIR      directory where to store dependencies.
48444c061aSmrg  depfile     Dependency file to output.
49444c061aSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
50444c061aSmrg  libtool     Whether libtool is used (yes/no).
51444c061aSmrg
52444c061aSmrgReport bugs to <bug-automake@gnu.org>.
53444c061aSmrgEOF
54444c061aSmrg    exit $?
55444c061aSmrg    ;;
56444c061aSmrg  -v | --v*)
57444c061aSmrg    echo "depcomp $scriptversion"
58444c061aSmrg    exit $?
59444c061aSmrg    ;;
60444c061aSmrgesac
61444c061aSmrg
62444c061aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63444c061aSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64444c061aSmrg  exit 1
65444c061aSmrgfi
66444c061aSmrg
67444c061aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68444c061aSmrgdepfile=${depfile-`echo "$object" |
69444c061aSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70444c061aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71444c061aSmrg
72444c061aSmrgrm -f "$tmpdepfile"
73444c061aSmrg
74444c061aSmrg# Some modes work just like other modes, but use different flags.  We
75444c061aSmrg# parameterize here, but still list the modes in the big case below,
76444c061aSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77444c061aSmrg# here, because this file can only contain one case statement.
78444c061aSmrgif test "$depmode" = hp; then
79444c061aSmrg  # HP compiler uses -M and no extra arg.
80444c061aSmrg  gccflag=-M
81444c061aSmrg  depmode=gcc
82444c061aSmrgfi
83444c061aSmrg
84444c061aSmrgif test "$depmode" = dashXmstdout; then
85444c061aSmrg   # This is just like dashmstdout with a different argument.
86444c061aSmrg   dashmflag=-xM
87444c061aSmrg   depmode=dashmstdout
88444c061aSmrgfi
89444c061aSmrg
90444c061aSmrgcase "$depmode" in
91444c061aSmrggcc3)
92444c061aSmrg## gcc 3 implements dependency tracking that does exactly what
93444c061aSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94444c061aSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
952265a131Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
962265a131Smrg## the command line argument order; so add the flags where they
972265a131Smrg## appear in depend2.am.  Note that the slowdown incurred here
982265a131Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
992265a131Smrg  for arg
1002265a131Smrg  do
1012265a131Smrg    case $arg in
1022265a131Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1032265a131Smrg    *)  set fnord "$@" "$arg" ;;
1042265a131Smrg    esac
1052265a131Smrg    shift # fnord
1062265a131Smrg    shift # $arg
1072265a131Smrg  done
1082265a131Smrg  "$@"
109444c061aSmrg  stat=$?
110444c061aSmrg  if test $stat -eq 0; then :
111444c061aSmrg  else
112444c061aSmrg    rm -f "$tmpdepfile"
113444c061aSmrg    exit $stat
114444c061aSmrg  fi
115444c061aSmrg  mv "$tmpdepfile" "$depfile"
116444c061aSmrg  ;;
117444c061aSmrg
118444c061aSmrggcc)
119444c061aSmrg## There are various ways to get dependency output from gcc.  Here's
120444c061aSmrg## why we pick this rather obscure method:
121444c061aSmrg## - Don't want to use -MD because we'd like the dependencies to end
122444c061aSmrg##   up in a subdir.  Having to rename by hand is ugly.
123444c061aSmrg##   (We might end up doing this anyway to support other compilers.)
124444c061aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125444c061aSmrg##   -MM, not -M (despite what the docs say).
126444c061aSmrg## - Using -M directly means running the compiler twice (even worse
127444c061aSmrg##   than renaming).
128444c061aSmrg  if test -z "$gccflag"; then
129444c061aSmrg    gccflag=-MD,
130444c061aSmrg  fi
131444c061aSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
132444c061aSmrg  stat=$?
133444c061aSmrg  if test $stat -eq 0; then :
134444c061aSmrg  else
135444c061aSmrg    rm -f "$tmpdepfile"
136444c061aSmrg    exit $stat
137444c061aSmrg  fi
138444c061aSmrg  rm -f "$depfile"
139444c061aSmrg  echo "$object : \\" > "$depfile"
140444c061aSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141444c061aSmrg## The second -e expression handles DOS-style file names with drive letters.
142444c061aSmrg  sed -e 's/^[^:]*: / /' \
143444c061aSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144444c061aSmrg## This next piece of magic avoids the `deleted header file' problem.
145444c061aSmrg## The problem is that when a header file which appears in a .P file
146444c061aSmrg## is deleted, the dependency causes make to die (because there is
147444c061aSmrg## typically no way to rebuild the header).  We avoid this by adding
148444c061aSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149444c061aSmrg## this for us directly.
150444c061aSmrg  tr ' ' '
151444c061aSmrg' < "$tmpdepfile" |
152444c061aSmrg## Some versions of gcc put a space before the `:'.  On the theory
153444c061aSmrg## that the space means something, we add a space to the output as
154444c061aSmrg## well.
155444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
156444c061aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
157444c061aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158444c061aSmrg  rm -f "$tmpdepfile"
159444c061aSmrg  ;;
160444c061aSmrg
161444c061aSmrghp)
162444c061aSmrg  # This case exists only to let depend.m4 do its work.  It works by
163444c061aSmrg  # looking at the text of this script.  This case will never be run,
164444c061aSmrg  # since it is checked for above.
165444c061aSmrg  exit 1
166444c061aSmrg  ;;
167444c061aSmrg
168444c061aSmrgsgi)
169444c061aSmrg  if test "$libtool" = yes; then
170444c061aSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171444c061aSmrg  else
172444c061aSmrg    "$@" -MDupdate "$tmpdepfile"
173444c061aSmrg  fi
174444c061aSmrg  stat=$?
175444c061aSmrg  if test $stat -eq 0; then :
176444c061aSmrg  else
177444c061aSmrg    rm -f "$tmpdepfile"
178444c061aSmrg    exit $stat
179444c061aSmrg  fi
180444c061aSmrg  rm -f "$depfile"
181444c061aSmrg
182444c061aSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183444c061aSmrg    echo "$object : \\" > "$depfile"
184444c061aSmrg
185444c061aSmrg    # Clip off the initial element (the dependent).  Don't try to be
186444c061aSmrg    # clever and replace this with sed code, as IRIX sed won't handle
187444c061aSmrg    # lines with more than a fixed number of characters (4096 in
188444c061aSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189444c061aSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
190444c061aSmrg    # dependency line.
191444c061aSmrg    tr ' ' '
192444c061aSmrg' < "$tmpdepfile" \
193444c061aSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194444c061aSmrg    tr '
195444c061aSmrg' ' ' >> $depfile
196444c061aSmrg    echo >> $depfile
197444c061aSmrg
198444c061aSmrg    # The second pass generates a dummy entry for each header file.
199444c061aSmrg    tr ' ' '
200444c061aSmrg' < "$tmpdepfile" \
201444c061aSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202444c061aSmrg   >> $depfile
203444c061aSmrg  else
204444c061aSmrg    # The sourcefile does not contain any dependencies, so just
205444c061aSmrg    # store a dummy comment line, to avoid errors with the Makefile
206444c061aSmrg    # "include basename.Plo" scheme.
207444c061aSmrg    echo "#dummy" > "$depfile"
208444c061aSmrg  fi
209444c061aSmrg  rm -f "$tmpdepfile"
210444c061aSmrg  ;;
211444c061aSmrg
212444c061aSmrgaix)
213444c061aSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
214444c061aSmrg  # in a .u file.  In older versions, this file always lives in the
215444c061aSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216444c061aSmrg  # start of each line; $object doesn't have directory information.
217444c061aSmrg  # Version 6 uses the directory in both cases.
2182265a131Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2192265a131Smrg  test "x$dir" = "x$object" && dir=
2202265a131Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221444c061aSmrg  if test "$libtool" = yes; then
2222265a131Smrg    tmpdepfile1=$dir$base.u
2232265a131Smrg    tmpdepfile2=$base.u
2242265a131Smrg    tmpdepfile3=$dir.libs/$base.u
225444c061aSmrg    "$@" -Wc,-M
226444c061aSmrg  else
2272265a131Smrg    tmpdepfile1=$dir$base.u
2282265a131Smrg    tmpdepfile2=$dir$base.u
2292265a131Smrg    tmpdepfile3=$dir$base.u
230444c061aSmrg    "$@" -M
231444c061aSmrg  fi
232444c061aSmrg  stat=$?
233444c061aSmrg
234444c061aSmrg  if test $stat -eq 0; then :
235444c061aSmrg  else
2362265a131Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237444c061aSmrg    exit $stat
238444c061aSmrg  fi
239444c061aSmrg
2402265a131Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2412265a131Smrg  do
2422265a131Smrg    test -f "$tmpdepfile" && break
2432265a131Smrg  done
244444c061aSmrg  if test -f "$tmpdepfile"; then
245444c061aSmrg    # Each line is of the form `foo.o: dependent.h'.
246444c061aSmrg    # Do two passes, one to just change these to
247444c061aSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2482265a131Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2492265a131Smrg    # That's a tab and a space in the [].
2502265a131Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251444c061aSmrg  else
252444c061aSmrg    # The sourcefile does not contain any dependencies, so just
253444c061aSmrg    # store a dummy comment line, to avoid errors with the Makefile
254444c061aSmrg    # "include basename.Plo" scheme.
255444c061aSmrg    echo "#dummy" > "$depfile"
256444c061aSmrg  fi
257444c061aSmrg  rm -f "$tmpdepfile"
258444c061aSmrg  ;;
259444c061aSmrg
260444c061aSmrgicc)
261444c061aSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
262444c061aSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263444c061aSmrg  # ICC 7.0 will fill foo.d with something like
264444c061aSmrg  #    foo.o: sub/foo.c
265444c061aSmrg  #    foo.o: sub/foo.h
266444c061aSmrg  # which is wrong.  We want:
267444c061aSmrg  #    sub/foo.o: sub/foo.c
268444c061aSmrg  #    sub/foo.o: sub/foo.h
269444c061aSmrg  #    sub/foo.c:
270444c061aSmrg  #    sub/foo.h:
271444c061aSmrg  # ICC 7.1 will output
272444c061aSmrg  #    foo.o: sub/foo.c sub/foo.h
273444c061aSmrg  # and will wrap long lines using \ :
274444c061aSmrg  #    foo.o: sub/foo.c ... \
275444c061aSmrg  #     sub/foo.h ... \
276444c061aSmrg  #     ...
277444c061aSmrg
278444c061aSmrg  "$@" -MD -MF "$tmpdepfile"
279444c061aSmrg  stat=$?
280444c061aSmrg  if test $stat -eq 0; then :
281444c061aSmrg  else
282444c061aSmrg    rm -f "$tmpdepfile"
283444c061aSmrg    exit $stat
284444c061aSmrg  fi
285444c061aSmrg  rm -f "$depfile"
286444c061aSmrg  # Each line is of the form `foo.o: dependent.h',
287444c061aSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288444c061aSmrg  # Do two passes, one to just change these to
289444c061aSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
290444c061aSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291444c061aSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
292444c061aSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
293444c061aSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294444c061aSmrg    sed -e 's/$/ :/' >> "$depfile"
295444c061aSmrg  rm -f "$tmpdepfile"
296444c061aSmrg  ;;
297444c061aSmrg
2982265a131Smrghp2)
2992265a131Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3002265a131Smrg  # compilers, which have integrated preprocessors.  The correct option
3012265a131Smrg  # to use with these is +Maked; it writes dependencies to a file named
3022265a131Smrg  # 'foo.d', which lands next to the object file, wherever that
3032265a131Smrg  # happens to be.
3042265a131Smrg  # Much of this is similar to the tru64 case; see comments there.
3052265a131Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3062265a131Smrg  test "x$dir" = "x$object" && dir=
3072265a131Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3082265a131Smrg  if test "$libtool" = yes; then
3092265a131Smrg    tmpdepfile1=$dir$base.d
3102265a131Smrg    tmpdepfile2=$dir.libs/$base.d
3112265a131Smrg    "$@" -Wc,+Maked
3122265a131Smrg  else
3132265a131Smrg    tmpdepfile1=$dir$base.d
3142265a131Smrg    tmpdepfile2=$dir$base.d
3152265a131Smrg    "$@" +Maked
3162265a131Smrg  fi
3172265a131Smrg  stat=$?
3182265a131Smrg  if test $stat -eq 0; then :
3192265a131Smrg  else
3202265a131Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3212265a131Smrg     exit $stat
3222265a131Smrg  fi
3232265a131Smrg
3242265a131Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3252265a131Smrg  do
3262265a131Smrg    test -f "$tmpdepfile" && break
3272265a131Smrg  done
3282265a131Smrg  if test -f "$tmpdepfile"; then
3292265a131Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3302265a131Smrg    # Add `dependent.h:' lines.
3312265a131Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3322265a131Smrg  else
3332265a131Smrg    echo "#dummy" > "$depfile"
3342265a131Smrg  fi
3352265a131Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3362265a131Smrg  ;;
3372265a131Smrg
338444c061aSmrgtru64)
339444c061aSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
340444c061aSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341444c061aSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342444c061aSmrg   # dependencies in `foo.d' instead, so we check for that too.
343444c061aSmrg   # Subdirectories are respected.
344444c061aSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345444c061aSmrg   test "x$dir" = "x$object" && dir=
346444c061aSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347444c061aSmrg
348444c061aSmrg   if test "$libtool" = yes; then
349444c061aSmrg      # With Tru64 cc, shared objects can also be used to make a
3502265a131Smrg      # static library.  This mechanism is used in libtool 1.4 series to
351444c061aSmrg      # handle both shared and static libraries in a single compilation.
352444c061aSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353444c061aSmrg      #
354444c061aSmrg      # With libtool 1.5 this exception was removed, and libtool now
355444c061aSmrg      # generates 2 separate objects for the 2 libraries.  These two
3562265a131Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
357444c061aSmrg      # in $dir$base.o.d.  We have to check for both files, because
358444c061aSmrg      # one of the two compilations can be disabled.  We should prefer
359444c061aSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360444c061aSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
361444c061aSmrg      # the former would cause a distcleancheck panic.
362444c061aSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363444c061aSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364444c061aSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365444c061aSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366444c061aSmrg      "$@" -Wc,-MD
367444c061aSmrg   else
368444c061aSmrg      tmpdepfile1=$dir$base.o.d
369444c061aSmrg      tmpdepfile2=$dir$base.d
370444c061aSmrg      tmpdepfile3=$dir$base.d
371444c061aSmrg      tmpdepfile4=$dir$base.d
372444c061aSmrg      "$@" -MD
373444c061aSmrg   fi
374444c061aSmrg
375444c061aSmrg   stat=$?
376444c061aSmrg   if test $stat -eq 0; then :
377444c061aSmrg   else
378444c061aSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379444c061aSmrg      exit $stat
380444c061aSmrg   fi
381444c061aSmrg
382444c061aSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383444c061aSmrg   do
384444c061aSmrg     test -f "$tmpdepfile" && break
385444c061aSmrg   done
386444c061aSmrg   if test -f "$tmpdepfile"; then
387444c061aSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388444c061aSmrg      # That's a tab and a space in the [].
389444c061aSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390444c061aSmrg   else
391444c061aSmrg      echo "#dummy" > "$depfile"
392444c061aSmrg   fi
393444c061aSmrg   rm -f "$tmpdepfile"
394444c061aSmrg   ;;
395444c061aSmrg
396444c061aSmrg#nosideeffect)
397444c061aSmrg  # This comment above is used by automake to tell side-effect
398444c061aSmrg  # dependency tracking mechanisms from slower ones.
399444c061aSmrg
400444c061aSmrgdashmstdout)
401444c061aSmrg  # Important note: in order to support this mode, a compiler *must*
402444c061aSmrg  # always write the preprocessed file to stdout, regardless of -o.
403444c061aSmrg  "$@" || exit $?
404444c061aSmrg
405444c061aSmrg  # Remove the call to Libtool.
406444c061aSmrg  if test "$libtool" = yes; then
407444c061aSmrg    while test $1 != '--mode=compile'; do
408444c061aSmrg      shift
409444c061aSmrg    done
410444c061aSmrg    shift
411444c061aSmrg  fi
412444c061aSmrg
413444c061aSmrg  # Remove `-o $object'.
414444c061aSmrg  IFS=" "
415444c061aSmrg  for arg
416444c061aSmrg  do
417444c061aSmrg    case $arg in
418444c061aSmrg    -o)
419444c061aSmrg      shift
420444c061aSmrg      ;;
421444c061aSmrg    $object)
422444c061aSmrg      shift
423444c061aSmrg      ;;
424444c061aSmrg    *)
425444c061aSmrg      set fnord "$@" "$arg"
426444c061aSmrg      shift # fnord
427444c061aSmrg      shift # $arg
428444c061aSmrg      ;;
429444c061aSmrg    esac
430444c061aSmrg  done
431444c061aSmrg
432444c061aSmrg  test -z "$dashmflag" && dashmflag=-M
433444c061aSmrg  # Require at least two characters before searching for `:'
434444c061aSmrg  # in the target name.  This is to cope with DOS-style filenames:
435444c061aSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436444c061aSmrg  "$@" $dashmflag |
437444c061aSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438444c061aSmrg  rm -f "$depfile"
439444c061aSmrg  cat < "$tmpdepfile" > "$depfile"
440444c061aSmrg  tr ' ' '
441444c061aSmrg' < "$tmpdepfile" | \
442444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
443444c061aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
444444c061aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445444c061aSmrg  rm -f "$tmpdepfile"
446444c061aSmrg  ;;
447444c061aSmrg
448444c061aSmrgdashXmstdout)
449444c061aSmrg  # This case only exists to satisfy depend.m4.  It is never actually
450444c061aSmrg  # run, as this mode is specially recognized in the preamble.
451444c061aSmrg  exit 1
452444c061aSmrg  ;;
453444c061aSmrg
454444c061aSmrgmakedepend)
455444c061aSmrg  "$@" || exit $?
456444c061aSmrg  # Remove any Libtool call
457444c061aSmrg  if test "$libtool" = yes; then
458444c061aSmrg    while test $1 != '--mode=compile'; do
459444c061aSmrg      shift
460444c061aSmrg    done
461444c061aSmrg    shift
462444c061aSmrg  fi
463444c061aSmrg  # X makedepend
464444c061aSmrg  shift
465444c061aSmrg  cleared=no
466444c061aSmrg  for arg in "$@"; do
467444c061aSmrg    case $cleared in
468444c061aSmrg    no)
469444c061aSmrg      set ""; shift
470444c061aSmrg      cleared=yes ;;
471444c061aSmrg    esac
472444c061aSmrg    case "$arg" in
473444c061aSmrg    -D*|-I*)
474444c061aSmrg      set fnord "$@" "$arg"; shift ;;
475444c061aSmrg    # Strip any option that makedepend may not understand.  Remove
476444c061aSmrg    # the object too, otherwise makedepend will parse it as a source file.
477444c061aSmrg    -*|$object)
478444c061aSmrg      ;;
479444c061aSmrg    *)
480444c061aSmrg      set fnord "$@" "$arg"; shift ;;
481444c061aSmrg    esac
482444c061aSmrg  done
483444c061aSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
484444c061aSmrg  touch "$tmpdepfile"
485444c061aSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486444c061aSmrg  rm -f "$depfile"
487444c061aSmrg  cat < "$tmpdepfile" > "$depfile"
488444c061aSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
489444c061aSmrg' | \
490444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
491444c061aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
492444c061aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493444c061aSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
494444c061aSmrg  ;;
495444c061aSmrg
496444c061aSmrgcpp)
497444c061aSmrg  # Important note: in order to support this mode, a compiler *must*
498444c061aSmrg  # always write the preprocessed file to stdout.
499444c061aSmrg  "$@" || exit $?
500444c061aSmrg
501444c061aSmrg  # Remove the call to Libtool.
502444c061aSmrg  if test "$libtool" = yes; then
503444c061aSmrg    while test $1 != '--mode=compile'; do
504444c061aSmrg      shift
505444c061aSmrg    done
506444c061aSmrg    shift
507444c061aSmrg  fi
508444c061aSmrg
509444c061aSmrg  # Remove `-o $object'.
510444c061aSmrg  IFS=" "
511444c061aSmrg  for arg
512444c061aSmrg  do
513444c061aSmrg    case $arg in
514444c061aSmrg    -o)
515444c061aSmrg      shift
516444c061aSmrg      ;;
517444c061aSmrg    $object)
518444c061aSmrg      shift
519444c061aSmrg      ;;
520444c061aSmrg    *)
521444c061aSmrg      set fnord "$@" "$arg"
522444c061aSmrg      shift # fnord
523444c061aSmrg      shift # $arg
524444c061aSmrg      ;;
525444c061aSmrg    esac
526444c061aSmrg  done
527444c061aSmrg
528444c061aSmrg  "$@" -E |
529444c061aSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530444c061aSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531444c061aSmrg    sed '$ s: \\$::' > "$tmpdepfile"
532444c061aSmrg  rm -f "$depfile"
533444c061aSmrg  echo "$object : \\" > "$depfile"
534444c061aSmrg  cat < "$tmpdepfile" >> "$depfile"
535444c061aSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536444c061aSmrg  rm -f "$tmpdepfile"
537444c061aSmrg  ;;
538444c061aSmrg
539444c061aSmrgmsvisualcpp)
540444c061aSmrg  # Important note: in order to support this mode, a compiler *must*
541444c061aSmrg  # always write the preprocessed file to stdout, regardless of -o,
542444c061aSmrg  # because we must use -o when running libtool.
543444c061aSmrg  "$@" || exit $?
544444c061aSmrg  IFS=" "
545444c061aSmrg  for arg
546444c061aSmrg  do
547444c061aSmrg    case "$arg" in
548444c061aSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549444c061aSmrg	set fnord "$@"
550444c061aSmrg	shift
551444c061aSmrg	shift
552444c061aSmrg	;;
553444c061aSmrg    *)
554444c061aSmrg	set fnord "$@" "$arg"
555444c061aSmrg	shift
556444c061aSmrg	shift
557444c061aSmrg	;;
558444c061aSmrg    esac
559444c061aSmrg  done
560444c061aSmrg  "$@" -E |
561444c061aSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562444c061aSmrg  rm -f "$depfile"
563444c061aSmrg  echo "$object : \\" > "$depfile"
564444c061aSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565444c061aSmrg  echo "	" >> "$depfile"
566444c061aSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567444c061aSmrg  rm -f "$tmpdepfile"
568444c061aSmrg  ;;
569444c061aSmrg
570444c061aSmrgnone)
571444c061aSmrg  exec "$@"
572444c061aSmrg  ;;
573444c061aSmrg
574444c061aSmrg*)
575444c061aSmrg  echo "Unknown depmode $depmode" 1>&2
576444c061aSmrg  exit 1
577444c061aSmrg  ;;
578444c061aSmrgesac
579444c061aSmrg
580444c061aSmrgexit 0
581444c061aSmrg
582444c061aSmrg# Local Variables:
583444c061aSmrg# mode: shell-script
584444c061aSmrg# sh-indentation: 2
585444c061aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
586444c061aSmrg# time-stamp-start: "scriptversion="
587444c061aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
588444c061aSmrg# time-stamp-end: "$"
589444c061aSmrg# End:
590