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