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