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