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