xref: /aosp_15_r20/external/libogg/depcomp (revision 4d5d8b54cec1a9622d79143ad0e145ea73da2224)
1*4d5d8b54SAndroid Build Coastguard Worker#! /bin/sh
2*4d5d8b54SAndroid Build Coastguard Worker# depcomp - compile a program generating dependencies as side-effects
3*4d5d8b54SAndroid Build Coastguard Worker
4*4d5d8b54SAndroid Build Coastguard Workerscriptversion=2018-03-07.03; # UTC
5*4d5d8b54SAndroid Build Coastguard Worker
6*4d5d8b54SAndroid Build Coastguard Worker# Copyright (C) 1999-2021 Free Software Foundation, Inc.
7*4d5d8b54SAndroid Build Coastguard Worker
8*4d5d8b54SAndroid Build Coastguard Worker# This program is free software; you can redistribute it and/or modify
9*4d5d8b54SAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by
10*4d5d8b54SAndroid Build Coastguard Worker# the Free Software Foundation; either version 2, or (at your option)
11*4d5d8b54SAndroid Build Coastguard Worker# any later version.
12*4d5d8b54SAndroid Build Coastguard Worker
13*4d5d8b54SAndroid Build Coastguard Worker# This program is distributed in the hope that it will be useful,
14*4d5d8b54SAndroid Build Coastguard Worker# but WITHOUT ANY WARRANTY; without even the implied warranty of
15*4d5d8b54SAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*4d5d8b54SAndroid Build Coastguard Worker# GNU General Public License for more details.
17*4d5d8b54SAndroid Build Coastguard Worker
18*4d5d8b54SAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License
19*4d5d8b54SAndroid Build Coastguard Worker# along with this program.  If not, see <https://www.gnu.org/licenses/>.
20*4d5d8b54SAndroid Build Coastguard Worker
21*4d5d8b54SAndroid Build Coastguard Worker# As a special exception to the GNU General Public License, if you
22*4d5d8b54SAndroid Build Coastguard Worker# distribute this file as part of a program that contains a
23*4d5d8b54SAndroid Build Coastguard Worker# configuration script generated by Autoconf, you may include it under
24*4d5d8b54SAndroid Build Coastguard Worker# the same distribution terms that you use for the rest of that program.
25*4d5d8b54SAndroid Build Coastguard Worker
26*4d5d8b54SAndroid Build Coastguard Worker# Originally written by Alexandre Oliva <[email protected]>.
27*4d5d8b54SAndroid Build Coastguard Worker
28*4d5d8b54SAndroid Build Coastguard Workercase $1 in
29*4d5d8b54SAndroid Build Coastguard Worker  '')
30*4d5d8b54SAndroid Build Coastguard Worker    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31*4d5d8b54SAndroid Build Coastguard Worker    exit 1;
32*4d5d8b54SAndroid Build Coastguard Worker    ;;
33*4d5d8b54SAndroid Build Coastguard Worker  -h | --h*)
34*4d5d8b54SAndroid Build Coastguard Worker    cat <<\EOF
35*4d5d8b54SAndroid Build Coastguard WorkerUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36*4d5d8b54SAndroid Build Coastguard Worker
37*4d5d8b54SAndroid Build Coastguard WorkerRun PROGRAMS ARGS to compile a file, generating dependencies
38*4d5d8b54SAndroid Build Coastguard Workeras side-effects.
39*4d5d8b54SAndroid Build Coastguard Worker
40*4d5d8b54SAndroid Build Coastguard WorkerEnvironment variables:
41*4d5d8b54SAndroid Build Coastguard Worker  depmode     Dependency tracking mode.
42*4d5d8b54SAndroid Build Coastguard Worker  source      Source file read by 'PROGRAMS ARGS'.
43*4d5d8b54SAndroid Build Coastguard Worker  object      Object file output by 'PROGRAMS ARGS'.
44*4d5d8b54SAndroid Build Coastguard Worker  DEPDIR      directory where to store dependencies.
45*4d5d8b54SAndroid Build Coastguard Worker  depfile     Dependency file to output.
46*4d5d8b54SAndroid Build Coastguard Worker  tmpdepfile  Temporary file to use when outputting dependencies.
47*4d5d8b54SAndroid Build Coastguard Worker  libtool     Whether libtool is used (yes/no).
48*4d5d8b54SAndroid Build Coastguard Worker
49*4d5d8b54SAndroid Build Coastguard WorkerReport bugs to <bug-automake@gnu.org>.
50*4d5d8b54SAndroid Build Coastguard WorkerEOF
51*4d5d8b54SAndroid Build Coastguard Worker    exit $?
52*4d5d8b54SAndroid Build Coastguard Worker    ;;
53*4d5d8b54SAndroid Build Coastguard Worker  -v | --v*)
54*4d5d8b54SAndroid Build Coastguard Worker    echo "depcomp $scriptversion"
55*4d5d8b54SAndroid Build Coastguard Worker    exit $?
56*4d5d8b54SAndroid Build Coastguard Worker    ;;
57*4d5d8b54SAndroid Build Coastguard Workeresac
58*4d5d8b54SAndroid Build Coastguard Worker
59*4d5d8b54SAndroid Build Coastguard Worker# Get the directory component of the given path, and save it in the
60*4d5d8b54SAndroid Build Coastguard Worker# global variables '$dir'.  Note that this directory component will
61*4d5d8b54SAndroid Build Coastguard Worker# be either empty or ending with a '/' character.  This is deliberate.
62*4d5d8b54SAndroid Build Coastguard Workerset_dir_from ()
63*4d5d8b54SAndroid Build Coastguard Worker{
64*4d5d8b54SAndroid Build Coastguard Worker  case $1 in
65*4d5d8b54SAndroid Build Coastguard Worker    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66*4d5d8b54SAndroid Build Coastguard Worker      *) dir=;;
67*4d5d8b54SAndroid Build Coastguard Worker  esac
68*4d5d8b54SAndroid Build Coastguard Worker}
69*4d5d8b54SAndroid Build Coastguard Worker
70*4d5d8b54SAndroid Build Coastguard Worker# Get the suffix-stripped basename of the given path, and save it the
71*4d5d8b54SAndroid Build Coastguard Worker# global variable '$base'.
72*4d5d8b54SAndroid Build Coastguard Workerset_base_from ()
73*4d5d8b54SAndroid Build Coastguard Worker{
74*4d5d8b54SAndroid Build Coastguard Worker  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75*4d5d8b54SAndroid Build Coastguard Worker}
76*4d5d8b54SAndroid Build Coastguard Worker
77*4d5d8b54SAndroid Build Coastguard Worker# If no dependency file was actually created by the compiler invocation,
78*4d5d8b54SAndroid Build Coastguard Worker# we still have to create a dummy depfile, to avoid errors with the
79*4d5d8b54SAndroid Build Coastguard Worker# Makefile "include basename.Plo" scheme.
80*4d5d8b54SAndroid Build Coastguard Workermake_dummy_depfile ()
81*4d5d8b54SAndroid Build Coastguard Worker{
82*4d5d8b54SAndroid Build Coastguard Worker  echo "#dummy" > "$depfile"
83*4d5d8b54SAndroid Build Coastguard Worker}
84*4d5d8b54SAndroid Build Coastguard Worker
85*4d5d8b54SAndroid Build Coastguard Worker# Factor out some common post-processing of the generated depfile.
86*4d5d8b54SAndroid Build Coastguard Worker# Requires the auxiliary global variable '$tmpdepfile' to be set.
87*4d5d8b54SAndroid Build Coastguard Workeraix_post_process_depfile ()
88*4d5d8b54SAndroid Build Coastguard Worker{
89*4d5d8b54SAndroid Build Coastguard Worker  # If the compiler actually managed to produce a dependency file,
90*4d5d8b54SAndroid Build Coastguard Worker  # post-process it.
91*4d5d8b54SAndroid Build Coastguard Worker  if test -f "$tmpdepfile"; then
92*4d5d8b54SAndroid Build Coastguard Worker    # Each line is of the form 'foo.o: dependency.h'.
93*4d5d8b54SAndroid Build Coastguard Worker    # Do two passes, one to just change these to
94*4d5d8b54SAndroid Build Coastguard Worker    #   $object: dependency.h
95*4d5d8b54SAndroid Build Coastguard Worker    # and one to simply output
96*4d5d8b54SAndroid Build Coastguard Worker    #   dependency.h:
97*4d5d8b54SAndroid Build Coastguard Worker    # which is needed to avoid the deleted-header problem.
98*4d5d8b54SAndroid Build Coastguard Worker    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99*4d5d8b54SAndroid Build Coastguard Worker      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100*4d5d8b54SAndroid Build Coastguard Worker    } > "$depfile"
101*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
102*4d5d8b54SAndroid Build Coastguard Worker  else
103*4d5d8b54SAndroid Build Coastguard Worker    make_dummy_depfile
104*4d5d8b54SAndroid Build Coastguard Worker  fi
105*4d5d8b54SAndroid Build Coastguard Worker}
106*4d5d8b54SAndroid Build Coastguard Worker
107*4d5d8b54SAndroid Build Coastguard Worker# A tabulation character.
108*4d5d8b54SAndroid Build Coastguard Workertab='	'
109*4d5d8b54SAndroid Build Coastguard Worker# A newline character.
110*4d5d8b54SAndroid Build Coastguard Workernl='
111*4d5d8b54SAndroid Build Coastguard Worker'
112*4d5d8b54SAndroid Build Coastguard Worker# Character ranges might be problematic outside the C locale.
113*4d5d8b54SAndroid Build Coastguard Worker# These definitions help.
114*4d5d8b54SAndroid Build Coastguard Workerupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115*4d5d8b54SAndroid Build Coastguard Workerlower=abcdefghijklmnopqrstuvwxyz
116*4d5d8b54SAndroid Build Coastguard Workerdigits=0123456789
117*4d5d8b54SAndroid Build Coastguard Workeralpha=${upper}${lower}
118*4d5d8b54SAndroid Build Coastguard Worker
119*4d5d8b54SAndroid Build Coastguard Workerif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120*4d5d8b54SAndroid Build Coastguard Worker  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121*4d5d8b54SAndroid Build Coastguard Worker  exit 1
122*4d5d8b54SAndroid Build Coastguard Workerfi
123*4d5d8b54SAndroid Build Coastguard Worker
124*4d5d8b54SAndroid Build Coastguard Worker# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125*4d5d8b54SAndroid Build Coastguard Workerdepfile=${depfile-`echo "$object" |
126*4d5d8b54SAndroid Build Coastguard Worker  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127*4d5d8b54SAndroid Build Coastguard Workertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128*4d5d8b54SAndroid Build Coastguard Worker
129*4d5d8b54SAndroid Build Coastguard Workerrm -f "$tmpdepfile"
130*4d5d8b54SAndroid Build Coastguard Worker
131*4d5d8b54SAndroid Build Coastguard Worker# Avoid interferences from the environment.
132*4d5d8b54SAndroid Build Coastguard Workergccflag= dashmflag=
133*4d5d8b54SAndroid Build Coastguard Worker
134*4d5d8b54SAndroid Build Coastguard Worker# Some modes work just like other modes, but use different flags.  We
135*4d5d8b54SAndroid Build Coastguard Worker# parameterize here, but still list the modes in the big case below,
136*4d5d8b54SAndroid Build Coastguard Worker# to make depend.m4 easier to write.  Note that we *cannot* use a case
137*4d5d8b54SAndroid Build Coastguard Worker# here, because this file can only contain one case statement.
138*4d5d8b54SAndroid Build Coastguard Workerif test "$depmode" = hp; then
139*4d5d8b54SAndroid Build Coastguard Worker  # HP compiler uses -M and no extra arg.
140*4d5d8b54SAndroid Build Coastguard Worker  gccflag=-M
141*4d5d8b54SAndroid Build Coastguard Worker  depmode=gcc
142*4d5d8b54SAndroid Build Coastguard Workerfi
143*4d5d8b54SAndroid Build Coastguard Worker
144*4d5d8b54SAndroid Build Coastguard Workerif test "$depmode" = dashXmstdout; then
145*4d5d8b54SAndroid Build Coastguard Worker  # This is just like dashmstdout with a different argument.
146*4d5d8b54SAndroid Build Coastguard Worker  dashmflag=-xM
147*4d5d8b54SAndroid Build Coastguard Worker  depmode=dashmstdout
148*4d5d8b54SAndroid Build Coastguard Workerfi
149*4d5d8b54SAndroid Build Coastguard Worker
150*4d5d8b54SAndroid Build Coastguard Workercygpath_u="cygpath -u -f -"
151*4d5d8b54SAndroid Build Coastguard Workerif test "$depmode" = msvcmsys; then
152*4d5d8b54SAndroid Build Coastguard Worker  # This is just like msvisualcpp but w/o cygpath translation.
153*4d5d8b54SAndroid Build Coastguard Worker  # Just convert the backslash-escaped backslashes to single forward
154*4d5d8b54SAndroid Build Coastguard Worker  # slashes to satisfy depend.m4
155*4d5d8b54SAndroid Build Coastguard Worker  cygpath_u='sed s,\\\\,/,g'
156*4d5d8b54SAndroid Build Coastguard Worker  depmode=msvisualcpp
157*4d5d8b54SAndroid Build Coastguard Workerfi
158*4d5d8b54SAndroid Build Coastguard Worker
159*4d5d8b54SAndroid Build Coastguard Workerif test "$depmode" = msvc7msys; then
160*4d5d8b54SAndroid Build Coastguard Worker  # This is just like msvc7 but w/o cygpath translation.
161*4d5d8b54SAndroid Build Coastguard Worker  # Just convert the backslash-escaped backslashes to single forward
162*4d5d8b54SAndroid Build Coastguard Worker  # slashes to satisfy depend.m4
163*4d5d8b54SAndroid Build Coastguard Worker  cygpath_u='sed s,\\\\,/,g'
164*4d5d8b54SAndroid Build Coastguard Worker  depmode=msvc7
165*4d5d8b54SAndroid Build Coastguard Workerfi
166*4d5d8b54SAndroid Build Coastguard Worker
167*4d5d8b54SAndroid Build Coastguard Workerif test "$depmode" = xlc; then
168*4d5d8b54SAndroid Build Coastguard Worker  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169*4d5d8b54SAndroid Build Coastguard Worker  gccflag=-qmakedep=gcc,-MF
170*4d5d8b54SAndroid Build Coastguard Worker  depmode=gcc
171*4d5d8b54SAndroid Build Coastguard Workerfi
172*4d5d8b54SAndroid Build Coastguard Worker
173*4d5d8b54SAndroid Build Coastguard Workercase "$depmode" in
174*4d5d8b54SAndroid Build Coastguard Workergcc3)
175*4d5d8b54SAndroid Build Coastguard Worker## gcc 3 implements dependency tracking that does exactly what
176*4d5d8b54SAndroid Build Coastguard Worker## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177*4d5d8b54SAndroid Build Coastguard Worker## it if -MD -MP comes after the -MF stuff.  Hmm.
178*4d5d8b54SAndroid Build Coastguard Worker## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179*4d5d8b54SAndroid Build Coastguard Worker## the command line argument order; so add the flags where they
180*4d5d8b54SAndroid Build Coastguard Worker## appear in depend2.am.  Note that the slowdown incurred here
181*4d5d8b54SAndroid Build Coastguard Worker## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182*4d5d8b54SAndroid Build Coastguard Worker  for arg
183*4d5d8b54SAndroid Build Coastguard Worker  do
184*4d5d8b54SAndroid Build Coastguard Worker    case $arg in
185*4d5d8b54SAndroid Build Coastguard Worker    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186*4d5d8b54SAndroid Build Coastguard Worker    *)  set fnord "$@" "$arg" ;;
187*4d5d8b54SAndroid Build Coastguard Worker    esac
188*4d5d8b54SAndroid Build Coastguard Worker    shift # fnord
189*4d5d8b54SAndroid Build Coastguard Worker    shift # $arg
190*4d5d8b54SAndroid Build Coastguard Worker  done
191*4d5d8b54SAndroid Build Coastguard Worker  "$@"
192*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
193*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
194*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
195*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
196*4d5d8b54SAndroid Build Coastguard Worker  fi
197*4d5d8b54SAndroid Build Coastguard Worker  mv "$tmpdepfile" "$depfile"
198*4d5d8b54SAndroid Build Coastguard Worker  ;;
199*4d5d8b54SAndroid Build Coastguard Worker
200*4d5d8b54SAndroid Build Coastguard Workergcc)
201*4d5d8b54SAndroid Build Coastguard Worker## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202*4d5d8b54SAndroid Build Coastguard Worker## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203*4d5d8b54SAndroid Build Coastguard Worker## (see the conditional assignment to $gccflag above).
204*4d5d8b54SAndroid Build Coastguard Worker## There are various ways to get dependency output from gcc.  Here's
205*4d5d8b54SAndroid Build Coastguard Worker## why we pick this rather obscure method:
206*4d5d8b54SAndroid Build Coastguard Worker## - Don't want to use -MD because we'd like the dependencies to end
207*4d5d8b54SAndroid Build Coastguard Worker##   up in a subdir.  Having to rename by hand is ugly.
208*4d5d8b54SAndroid Build Coastguard Worker##   (We might end up doing this anyway to support other compilers.)
209*4d5d8b54SAndroid Build Coastguard Worker## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210*4d5d8b54SAndroid Build Coastguard Worker##   -MM, not -M (despite what the docs say).  Also, it might not be
211*4d5d8b54SAndroid Build Coastguard Worker##   supported by the other compilers which use the 'gcc' depmode.
212*4d5d8b54SAndroid Build Coastguard Worker## - Using -M directly means running the compiler twice (even worse
213*4d5d8b54SAndroid Build Coastguard Worker##   than renaming).
214*4d5d8b54SAndroid Build Coastguard Worker  if test -z "$gccflag"; then
215*4d5d8b54SAndroid Build Coastguard Worker    gccflag=-MD,
216*4d5d8b54SAndroid Build Coastguard Worker  fi
217*4d5d8b54SAndroid Build Coastguard Worker  "$@" -Wp,"$gccflag$tmpdepfile"
218*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
219*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
220*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
221*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
222*4d5d8b54SAndroid Build Coastguard Worker  fi
223*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
224*4d5d8b54SAndroid Build Coastguard Worker  echo "$object : \\" > "$depfile"
225*4d5d8b54SAndroid Build Coastguard Worker  # The second -e expression handles DOS-style file names with drive
226*4d5d8b54SAndroid Build Coastguard Worker  # letters.
227*4d5d8b54SAndroid Build Coastguard Worker  sed -e 's/^[^:]*: / /' \
228*4d5d8b54SAndroid Build Coastguard Worker      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229*4d5d8b54SAndroid Build Coastguard Worker## This next piece of magic avoids the "deleted header file" problem.
230*4d5d8b54SAndroid Build Coastguard Worker## The problem is that when a header file which appears in a .P file
231*4d5d8b54SAndroid Build Coastguard Worker## is deleted, the dependency causes make to die (because there is
232*4d5d8b54SAndroid Build Coastguard Worker## typically no way to rebuild the header).  We avoid this by adding
233*4d5d8b54SAndroid Build Coastguard Worker## dummy dependencies for each header file.  Too bad gcc doesn't do
234*4d5d8b54SAndroid Build Coastguard Worker## this for us directly.
235*4d5d8b54SAndroid Build Coastguard Worker## Some versions of gcc put a space before the ':'.  On the theory
236*4d5d8b54SAndroid Build Coastguard Worker## that the space means something, we add a space to the output as
237*4d5d8b54SAndroid Build Coastguard Worker## well.  hp depmode also adds that space, but also prefixes the VPATH
238*4d5d8b54SAndroid Build Coastguard Worker## to the object.  Take care to not repeat it in the output.
239*4d5d8b54SAndroid Build Coastguard Worker## Some versions of the HPUX 10.20 sed can't process this invocation
240*4d5d8b54SAndroid Build Coastguard Worker## correctly.  Breaking it into two sed invocations is a workaround.
241*4d5d8b54SAndroid Build Coastguard Worker  tr ' ' "$nl" < "$tmpdepfile" \
242*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/$/ :/' >> "$depfile"
244*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
245*4d5d8b54SAndroid Build Coastguard Worker  ;;
246*4d5d8b54SAndroid Build Coastguard Worker
247*4d5d8b54SAndroid Build Coastguard Workerhp)
248*4d5d8b54SAndroid Build Coastguard Worker  # This case exists only to let depend.m4 do its work.  It works by
249*4d5d8b54SAndroid Build Coastguard Worker  # looking at the text of this script.  This case will never be run,
250*4d5d8b54SAndroid Build Coastguard Worker  # since it is checked for above.
251*4d5d8b54SAndroid Build Coastguard Worker  exit 1
252*4d5d8b54SAndroid Build Coastguard Worker  ;;
253*4d5d8b54SAndroid Build Coastguard Worker
254*4d5d8b54SAndroid Build Coastguard Workersgi)
255*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
256*4d5d8b54SAndroid Build Coastguard Worker    "$@" "-Wp,-MDupdate,$tmpdepfile"
257*4d5d8b54SAndroid Build Coastguard Worker  else
258*4d5d8b54SAndroid Build Coastguard Worker    "$@" -MDupdate "$tmpdepfile"
259*4d5d8b54SAndroid Build Coastguard Worker  fi
260*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
261*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
262*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
263*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
264*4d5d8b54SAndroid Build Coastguard Worker  fi
265*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
266*4d5d8b54SAndroid Build Coastguard Worker
267*4d5d8b54SAndroid Build Coastguard Worker  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268*4d5d8b54SAndroid Build Coastguard Worker    echo "$object : \\" > "$depfile"
269*4d5d8b54SAndroid Build Coastguard Worker    # Clip off the initial element (the dependent).  Don't try to be
270*4d5d8b54SAndroid Build Coastguard Worker    # clever and replace this with sed code, as IRIX sed won't handle
271*4d5d8b54SAndroid Build Coastguard Worker    # lines with more than a fixed number of characters (4096 in
272*4d5d8b54SAndroid Build Coastguard Worker    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273*4d5d8b54SAndroid Build Coastguard Worker    # the IRIX cc adds comments like '#:fec' to the end of the
274*4d5d8b54SAndroid Build Coastguard Worker    # dependency line.
275*4d5d8b54SAndroid Build Coastguard Worker    tr ' ' "$nl" < "$tmpdepfile" \
276*4d5d8b54SAndroid Build Coastguard Worker      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277*4d5d8b54SAndroid Build Coastguard Worker      | tr "$nl" ' ' >> "$depfile"
278*4d5d8b54SAndroid Build Coastguard Worker    echo >> "$depfile"
279*4d5d8b54SAndroid Build Coastguard Worker    # The second pass generates a dummy entry for each header file.
280*4d5d8b54SAndroid Build Coastguard Worker    tr ' ' "$nl" < "$tmpdepfile" \
281*4d5d8b54SAndroid Build Coastguard Worker      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282*4d5d8b54SAndroid Build Coastguard Worker      >> "$depfile"
283*4d5d8b54SAndroid Build Coastguard Worker  else
284*4d5d8b54SAndroid Build Coastguard Worker    make_dummy_depfile
285*4d5d8b54SAndroid Build Coastguard Worker  fi
286*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
287*4d5d8b54SAndroid Build Coastguard Worker  ;;
288*4d5d8b54SAndroid Build Coastguard Worker
289*4d5d8b54SAndroid Build Coastguard Workerxlc)
290*4d5d8b54SAndroid Build Coastguard Worker  # This case exists only to let depend.m4 do its work.  It works by
291*4d5d8b54SAndroid Build Coastguard Worker  # looking at the text of this script.  This case will never be run,
292*4d5d8b54SAndroid Build Coastguard Worker  # since it is checked for above.
293*4d5d8b54SAndroid Build Coastguard Worker  exit 1
294*4d5d8b54SAndroid Build Coastguard Worker  ;;
295*4d5d8b54SAndroid Build Coastguard Worker
296*4d5d8b54SAndroid Build Coastguard Workeraix)
297*4d5d8b54SAndroid Build Coastguard Worker  # The C for AIX Compiler uses -M and outputs the dependencies
298*4d5d8b54SAndroid Build Coastguard Worker  # in a .u file.  In older versions, this file always lives in the
299*4d5d8b54SAndroid Build Coastguard Worker  # current directory.  Also, the AIX compiler puts '$object:' at the
300*4d5d8b54SAndroid Build Coastguard Worker  # start of each line; $object doesn't have directory information.
301*4d5d8b54SAndroid Build Coastguard Worker  # Version 6 uses the directory in both cases.
302*4d5d8b54SAndroid Build Coastguard Worker  set_dir_from "$object"
303*4d5d8b54SAndroid Build Coastguard Worker  set_base_from "$object"
304*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
305*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile1=$dir$base.u
306*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile2=$base.u
307*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile3=$dir.libs/$base.u
308*4d5d8b54SAndroid Build Coastguard Worker    "$@" -Wc,-M
309*4d5d8b54SAndroid Build Coastguard Worker  else
310*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile1=$dir$base.u
311*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile2=$dir$base.u
312*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile3=$dir$base.u
313*4d5d8b54SAndroid Build Coastguard Worker    "$@" -M
314*4d5d8b54SAndroid Build Coastguard Worker  fi
315*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
316*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
317*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
319*4d5d8b54SAndroid Build Coastguard Worker  fi
320*4d5d8b54SAndroid Build Coastguard Worker
321*4d5d8b54SAndroid Build Coastguard Worker  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322*4d5d8b54SAndroid Build Coastguard Worker  do
323*4d5d8b54SAndroid Build Coastguard Worker    test -f "$tmpdepfile" && break
324*4d5d8b54SAndroid Build Coastguard Worker  done
325*4d5d8b54SAndroid Build Coastguard Worker  aix_post_process_depfile
326*4d5d8b54SAndroid Build Coastguard Worker  ;;
327*4d5d8b54SAndroid Build Coastguard Worker
328*4d5d8b54SAndroid Build Coastguard Workertcc)
329*4d5d8b54SAndroid Build Coastguard Worker  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330*4d5d8b54SAndroid Build Coastguard Worker  # FIXME: That version still under development at the moment of writing.
331*4d5d8b54SAndroid Build Coastguard Worker  #        Make that this statement remains true also for stable, released
332*4d5d8b54SAndroid Build Coastguard Worker  #        versions.
333*4d5d8b54SAndroid Build Coastguard Worker  # It will wrap lines (doesn't matter whether long or short) with a
334*4d5d8b54SAndroid Build Coastguard Worker  # trailing '\', as in:
335*4d5d8b54SAndroid Build Coastguard Worker  #
336*4d5d8b54SAndroid Build Coastguard Worker  #   foo.o : \
337*4d5d8b54SAndroid Build Coastguard Worker  #    foo.c \
338*4d5d8b54SAndroid Build Coastguard Worker  #    foo.h \
339*4d5d8b54SAndroid Build Coastguard Worker  #
340*4d5d8b54SAndroid Build Coastguard Worker  # It will put a trailing '\' even on the last line, and will use leading
341*4d5d8b54SAndroid Build Coastguard Worker  # spaces rather than leading tabs (at least since its commit 0394caf7
342*4d5d8b54SAndroid Build Coastguard Worker  # "Emit spaces for -MD").
343*4d5d8b54SAndroid Build Coastguard Worker  "$@" -MD -MF "$tmpdepfile"
344*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
345*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
346*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
347*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
348*4d5d8b54SAndroid Build Coastguard Worker  fi
349*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
350*4d5d8b54SAndroid Build Coastguard Worker  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351*4d5d8b54SAndroid Build Coastguard Worker  # We have to change lines of the first kind to '$object: \'.
352*4d5d8b54SAndroid Build Coastguard Worker  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353*4d5d8b54SAndroid Build Coastguard Worker  # And for each line of the second kind, we have to emit a 'dep.h:'
354*4d5d8b54SAndroid Build Coastguard Worker  # dummy dependency, to avoid the deleted-header problem.
355*4d5d8b54SAndroid Build Coastguard Worker  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
357*4d5d8b54SAndroid Build Coastguard Worker  ;;
358*4d5d8b54SAndroid Build Coastguard Worker
359*4d5d8b54SAndroid Build Coastguard Worker## The order of this option in the case statement is important, since the
360*4d5d8b54SAndroid Build Coastguard Worker## shell code in configure will try each of these formats in the order
361*4d5d8b54SAndroid Build Coastguard Worker## listed in this file.  A plain '-MD' option would be understood by many
362*4d5d8b54SAndroid Build Coastguard Worker## compilers, so we must ensure this comes after the gcc and icc options.
363*4d5d8b54SAndroid Build Coastguard Workerpgcc)
364*4d5d8b54SAndroid Build Coastguard Worker  # Portland's C compiler understands '-MD'.
365*4d5d8b54SAndroid Build Coastguard Worker  # Will always output deps to 'file.d' where file is the root name of the
366*4d5d8b54SAndroid Build Coastguard Worker  # source file under compilation, even if file resides in a subdirectory.
367*4d5d8b54SAndroid Build Coastguard Worker  # The object file name does not affect the name of the '.d' file.
368*4d5d8b54SAndroid Build Coastguard Worker  # pgcc 10.2 will output
369*4d5d8b54SAndroid Build Coastguard Worker  #    foo.o: sub/foo.c sub/foo.h
370*4d5d8b54SAndroid Build Coastguard Worker  # and will wrap long lines using '\' :
371*4d5d8b54SAndroid Build Coastguard Worker  #    foo.o: sub/foo.c ... \
372*4d5d8b54SAndroid Build Coastguard Worker  #     sub/foo.h ... \
373*4d5d8b54SAndroid Build Coastguard Worker  #     ...
374*4d5d8b54SAndroid Build Coastguard Worker  set_dir_from "$object"
375*4d5d8b54SAndroid Build Coastguard Worker  # Use the source, not the object, to determine the base name, since
376*4d5d8b54SAndroid Build Coastguard Worker  # that's sadly what pgcc will do too.
377*4d5d8b54SAndroid Build Coastguard Worker  set_base_from "$source"
378*4d5d8b54SAndroid Build Coastguard Worker  tmpdepfile=$base.d
379*4d5d8b54SAndroid Build Coastguard Worker
380*4d5d8b54SAndroid Build Coastguard Worker  # For projects that build the same source file twice into different object
381*4d5d8b54SAndroid Build Coastguard Worker  # files, the pgcc approach of using the *source* file root name can cause
382*4d5d8b54SAndroid Build Coastguard Worker  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383*4d5d8b54SAndroid Build Coastguard Worker  # the same $tmpdepfile.
384*4d5d8b54SAndroid Build Coastguard Worker  lockdir=$base.d-lock
385*4d5d8b54SAndroid Build Coastguard Worker  trap "
386*4d5d8b54SAndroid Build Coastguard Worker    echo '$0: caught signal, cleaning up...' >&2
387*4d5d8b54SAndroid Build Coastguard Worker    rmdir '$lockdir'
388*4d5d8b54SAndroid Build Coastguard Worker    exit 1
389*4d5d8b54SAndroid Build Coastguard Worker  " 1 2 13 15
390*4d5d8b54SAndroid Build Coastguard Worker  numtries=100
391*4d5d8b54SAndroid Build Coastguard Worker  i=$numtries
392*4d5d8b54SAndroid Build Coastguard Worker  while test $i -gt 0; do
393*4d5d8b54SAndroid Build Coastguard Worker    # mkdir is a portable test-and-set.
394*4d5d8b54SAndroid Build Coastguard Worker    if mkdir "$lockdir" 2>/dev/null; then
395*4d5d8b54SAndroid Build Coastguard Worker      # This process acquired the lock.
396*4d5d8b54SAndroid Build Coastguard Worker      "$@" -MD
397*4d5d8b54SAndroid Build Coastguard Worker      stat=$?
398*4d5d8b54SAndroid Build Coastguard Worker      # Release the lock.
399*4d5d8b54SAndroid Build Coastguard Worker      rmdir "$lockdir"
400*4d5d8b54SAndroid Build Coastguard Worker      break
401*4d5d8b54SAndroid Build Coastguard Worker    else
402*4d5d8b54SAndroid Build Coastguard Worker      # If the lock is being held by a different process, wait
403*4d5d8b54SAndroid Build Coastguard Worker      # until the winning process is done or we timeout.
404*4d5d8b54SAndroid Build Coastguard Worker      while test -d "$lockdir" && test $i -gt 0; do
405*4d5d8b54SAndroid Build Coastguard Worker        sleep 1
406*4d5d8b54SAndroid Build Coastguard Worker        i=`expr $i - 1`
407*4d5d8b54SAndroid Build Coastguard Worker      done
408*4d5d8b54SAndroid Build Coastguard Worker    fi
409*4d5d8b54SAndroid Build Coastguard Worker    i=`expr $i - 1`
410*4d5d8b54SAndroid Build Coastguard Worker  done
411*4d5d8b54SAndroid Build Coastguard Worker  trap - 1 2 13 15
412*4d5d8b54SAndroid Build Coastguard Worker  if test $i -le 0; then
413*4d5d8b54SAndroid Build Coastguard Worker    echo "$0: failed to acquire lock after $numtries attempts" >&2
414*4d5d8b54SAndroid Build Coastguard Worker    echo "$0: check lockdir '$lockdir'" >&2
415*4d5d8b54SAndroid Build Coastguard Worker    exit 1
416*4d5d8b54SAndroid Build Coastguard Worker  fi
417*4d5d8b54SAndroid Build Coastguard Worker
418*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
419*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
420*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
421*4d5d8b54SAndroid Build Coastguard Worker  fi
422*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
423*4d5d8b54SAndroid Build Coastguard Worker  # Each line is of the form `foo.o: dependent.h',
424*4d5d8b54SAndroid Build Coastguard Worker  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425*4d5d8b54SAndroid Build Coastguard Worker  # Do two passes, one to just change these to
426*4d5d8b54SAndroid Build Coastguard Worker  # `$object: dependent.h' and one to simply `dependent.h:'.
427*4d5d8b54SAndroid Build Coastguard Worker  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428*4d5d8b54SAndroid Build Coastguard Worker  # Some versions of the HPUX 10.20 sed can't process this invocation
429*4d5d8b54SAndroid Build Coastguard Worker  # correctly.  Breaking it into two sed invocations is a workaround.
430*4d5d8b54SAndroid Build Coastguard Worker  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/$/ :/' >> "$depfile"
432*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
433*4d5d8b54SAndroid Build Coastguard Worker  ;;
434*4d5d8b54SAndroid Build Coastguard Worker
435*4d5d8b54SAndroid Build Coastguard Workerhp2)
436*4d5d8b54SAndroid Build Coastguard Worker  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437*4d5d8b54SAndroid Build Coastguard Worker  # compilers, which have integrated preprocessors.  The correct option
438*4d5d8b54SAndroid Build Coastguard Worker  # to use with these is +Maked; it writes dependencies to a file named
439*4d5d8b54SAndroid Build Coastguard Worker  # 'foo.d', which lands next to the object file, wherever that
440*4d5d8b54SAndroid Build Coastguard Worker  # happens to be.
441*4d5d8b54SAndroid Build Coastguard Worker  # Much of this is similar to the tru64 case; see comments there.
442*4d5d8b54SAndroid Build Coastguard Worker  set_dir_from  "$object"
443*4d5d8b54SAndroid Build Coastguard Worker  set_base_from "$object"
444*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
445*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile1=$dir$base.d
446*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile2=$dir.libs/$base.d
447*4d5d8b54SAndroid Build Coastguard Worker    "$@" -Wc,+Maked
448*4d5d8b54SAndroid Build Coastguard Worker  else
449*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile1=$dir$base.d
450*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile2=$dir$base.d
451*4d5d8b54SAndroid Build Coastguard Worker    "$@" +Maked
452*4d5d8b54SAndroid Build Coastguard Worker  fi
453*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
454*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
455*4d5d8b54SAndroid Build Coastguard Worker     rm -f "$tmpdepfile1" "$tmpdepfile2"
456*4d5d8b54SAndroid Build Coastguard Worker     exit $stat
457*4d5d8b54SAndroid Build Coastguard Worker  fi
458*4d5d8b54SAndroid Build Coastguard Worker
459*4d5d8b54SAndroid Build Coastguard Worker  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460*4d5d8b54SAndroid Build Coastguard Worker  do
461*4d5d8b54SAndroid Build Coastguard Worker    test -f "$tmpdepfile" && break
462*4d5d8b54SAndroid Build Coastguard Worker  done
463*4d5d8b54SAndroid Build Coastguard Worker  if test -f "$tmpdepfile"; then
464*4d5d8b54SAndroid Build Coastguard Worker    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465*4d5d8b54SAndroid Build Coastguard Worker    # Add 'dependent.h:' lines.
466*4d5d8b54SAndroid Build Coastguard Worker    sed -ne '2,${
467*4d5d8b54SAndroid Build Coastguard Worker               s/^ *//
468*4d5d8b54SAndroid Build Coastguard Worker               s/ \\*$//
469*4d5d8b54SAndroid Build Coastguard Worker               s/$/:/
470*4d5d8b54SAndroid Build Coastguard Worker               p
471*4d5d8b54SAndroid Build Coastguard Worker             }' "$tmpdepfile" >> "$depfile"
472*4d5d8b54SAndroid Build Coastguard Worker  else
473*4d5d8b54SAndroid Build Coastguard Worker    make_dummy_depfile
474*4d5d8b54SAndroid Build Coastguard Worker  fi
475*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile" "$tmpdepfile2"
476*4d5d8b54SAndroid Build Coastguard Worker  ;;
477*4d5d8b54SAndroid Build Coastguard Worker
478*4d5d8b54SAndroid Build Coastguard Workertru64)
479*4d5d8b54SAndroid Build Coastguard Worker  # The Tru64 compiler uses -MD to generate dependencies as a side
480*4d5d8b54SAndroid Build Coastguard Worker  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481*4d5d8b54SAndroid Build Coastguard Worker  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482*4d5d8b54SAndroid Build Coastguard Worker  # dependencies in 'foo.d' instead, so we check for that too.
483*4d5d8b54SAndroid Build Coastguard Worker  # Subdirectories are respected.
484*4d5d8b54SAndroid Build Coastguard Worker  set_dir_from  "$object"
485*4d5d8b54SAndroid Build Coastguard Worker  set_base_from "$object"
486*4d5d8b54SAndroid Build Coastguard Worker
487*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
488*4d5d8b54SAndroid Build Coastguard Worker    # Libtool generates 2 separate objects for the 2 libraries.  These
489*4d5d8b54SAndroid Build Coastguard Worker    # two compilations output dependencies in $dir.libs/$base.o.d and
490*4d5d8b54SAndroid Build Coastguard Worker    # in $dir$base.o.d.  We have to check for both files, because
491*4d5d8b54SAndroid Build Coastguard Worker    # one of the two compilations can be disabled.  We should prefer
492*4d5d8b54SAndroid Build Coastguard Worker    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493*4d5d8b54SAndroid Build Coastguard Worker    # automatically cleaned when .libs/ is deleted, while ignoring
494*4d5d8b54SAndroid Build Coastguard Worker    # the former would cause a distcleancheck panic.
495*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498*4d5d8b54SAndroid Build Coastguard Worker    "$@" -Wc,-MD
499*4d5d8b54SAndroid Build Coastguard Worker  else
500*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile1=$dir$base.d
501*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile2=$dir$base.d
502*4d5d8b54SAndroid Build Coastguard Worker    tmpdepfile3=$dir$base.d
503*4d5d8b54SAndroid Build Coastguard Worker    "$@" -MD
504*4d5d8b54SAndroid Build Coastguard Worker  fi
505*4d5d8b54SAndroid Build Coastguard Worker
506*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
507*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
508*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
510*4d5d8b54SAndroid Build Coastguard Worker  fi
511*4d5d8b54SAndroid Build Coastguard Worker
512*4d5d8b54SAndroid Build Coastguard Worker  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513*4d5d8b54SAndroid Build Coastguard Worker  do
514*4d5d8b54SAndroid Build Coastguard Worker    test -f "$tmpdepfile" && break
515*4d5d8b54SAndroid Build Coastguard Worker  done
516*4d5d8b54SAndroid Build Coastguard Worker  # Same post-processing that is required for AIX mode.
517*4d5d8b54SAndroid Build Coastguard Worker  aix_post_process_depfile
518*4d5d8b54SAndroid Build Coastguard Worker  ;;
519*4d5d8b54SAndroid Build Coastguard Worker
520*4d5d8b54SAndroid Build Coastguard Workermsvc7)
521*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
522*4d5d8b54SAndroid Build Coastguard Worker    showIncludes=-Wc,-showIncludes
523*4d5d8b54SAndroid Build Coastguard Worker  else
524*4d5d8b54SAndroid Build Coastguard Worker    showIncludes=-showIncludes
525*4d5d8b54SAndroid Build Coastguard Worker  fi
526*4d5d8b54SAndroid Build Coastguard Worker  "$@" $showIncludes > "$tmpdepfile"
527*4d5d8b54SAndroid Build Coastguard Worker  stat=$?
528*4d5d8b54SAndroid Build Coastguard Worker  grep -v '^Note: including file: ' "$tmpdepfile"
529*4d5d8b54SAndroid Build Coastguard Worker  if test $stat -ne 0; then
530*4d5d8b54SAndroid Build Coastguard Worker    rm -f "$tmpdepfile"
531*4d5d8b54SAndroid Build Coastguard Worker    exit $stat
532*4d5d8b54SAndroid Build Coastguard Worker  fi
533*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
534*4d5d8b54SAndroid Build Coastguard Worker  echo "$object : \\" > "$depfile"
535*4d5d8b54SAndroid Build Coastguard Worker  # The first sed program below extracts the file names and escapes
536*4d5d8b54SAndroid Build Coastguard Worker  # backslashes for cygpath.  The second sed program outputs the file
537*4d5d8b54SAndroid Build Coastguard Worker  # name when reading, but also accumulates all include files in the
538*4d5d8b54SAndroid Build Coastguard Worker  # hold buffer in order to output them again at the end.  This only
539*4d5d8b54SAndroid Build Coastguard Worker  # works with sed implementations that can handle large buffers.
540*4d5d8b54SAndroid Build Coastguard Worker  sed < "$tmpdepfile" -n '
541*4d5d8b54SAndroid Build Coastguard Worker/^Note: including file:  *\(.*\)/ {
542*4d5d8b54SAndroid Build Coastguard Worker  s//\1/
543*4d5d8b54SAndroid Build Coastguard Worker  s/\\/\\\\/g
544*4d5d8b54SAndroid Build Coastguard Worker  p
545*4d5d8b54SAndroid Build Coastguard Worker}' | $cygpath_u | sort -u | sed -n '
546*4d5d8b54SAndroid Build Coastguard Workers/ /\\ /g
547*4d5d8b54SAndroid Build Coastguard Workers/\(.*\)/'"$tab"'\1 \\/p
548*4d5d8b54SAndroid Build Coastguard Workers/.\(.*\) \\/\1:/
549*4d5d8b54SAndroid Build Coastguard WorkerH
550*4d5d8b54SAndroid Build Coastguard Worker$ {
551*4d5d8b54SAndroid Build Coastguard Worker  s/.*/'"$tab"'/
552*4d5d8b54SAndroid Build Coastguard Worker  G
553*4d5d8b54SAndroid Build Coastguard Worker  p
554*4d5d8b54SAndroid Build Coastguard Worker}' >> "$depfile"
555*4d5d8b54SAndroid Build Coastguard Worker  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
557*4d5d8b54SAndroid Build Coastguard Worker  ;;
558*4d5d8b54SAndroid Build Coastguard Worker
559*4d5d8b54SAndroid Build Coastguard Workermsvc7msys)
560*4d5d8b54SAndroid Build Coastguard Worker  # This case exists only to let depend.m4 do its work.  It works by
561*4d5d8b54SAndroid Build Coastguard Worker  # looking at the text of this script.  This case will never be run,
562*4d5d8b54SAndroid Build Coastguard Worker  # since it is checked for above.
563*4d5d8b54SAndroid Build Coastguard Worker  exit 1
564*4d5d8b54SAndroid Build Coastguard Worker  ;;
565*4d5d8b54SAndroid Build Coastguard Worker
566*4d5d8b54SAndroid Build Coastguard Worker#nosideeffect)
567*4d5d8b54SAndroid Build Coastguard Worker  # This comment above is used by automake to tell side-effect
568*4d5d8b54SAndroid Build Coastguard Worker  # dependency tracking mechanisms from slower ones.
569*4d5d8b54SAndroid Build Coastguard Worker
570*4d5d8b54SAndroid Build Coastguard Workerdashmstdout)
571*4d5d8b54SAndroid Build Coastguard Worker  # Important note: in order to support this mode, a compiler *must*
572*4d5d8b54SAndroid Build Coastguard Worker  # always write the preprocessed file to stdout, regardless of -o.
573*4d5d8b54SAndroid Build Coastguard Worker  "$@" || exit $?
574*4d5d8b54SAndroid Build Coastguard Worker
575*4d5d8b54SAndroid Build Coastguard Worker  # Remove the call to Libtool.
576*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
577*4d5d8b54SAndroid Build Coastguard Worker    while test "X$1" != 'X--mode=compile'; do
578*4d5d8b54SAndroid Build Coastguard Worker      shift
579*4d5d8b54SAndroid Build Coastguard Worker    done
580*4d5d8b54SAndroid Build Coastguard Worker    shift
581*4d5d8b54SAndroid Build Coastguard Worker  fi
582*4d5d8b54SAndroid Build Coastguard Worker
583*4d5d8b54SAndroid Build Coastguard Worker  # Remove '-o $object'.
584*4d5d8b54SAndroid Build Coastguard Worker  IFS=" "
585*4d5d8b54SAndroid Build Coastguard Worker  for arg
586*4d5d8b54SAndroid Build Coastguard Worker  do
587*4d5d8b54SAndroid Build Coastguard Worker    case $arg in
588*4d5d8b54SAndroid Build Coastguard Worker    -o)
589*4d5d8b54SAndroid Build Coastguard Worker      shift
590*4d5d8b54SAndroid Build Coastguard Worker      ;;
591*4d5d8b54SAndroid Build Coastguard Worker    $object)
592*4d5d8b54SAndroid Build Coastguard Worker      shift
593*4d5d8b54SAndroid Build Coastguard Worker      ;;
594*4d5d8b54SAndroid Build Coastguard Worker    *)
595*4d5d8b54SAndroid Build Coastguard Worker      set fnord "$@" "$arg"
596*4d5d8b54SAndroid Build Coastguard Worker      shift # fnord
597*4d5d8b54SAndroid Build Coastguard Worker      shift # $arg
598*4d5d8b54SAndroid Build Coastguard Worker      ;;
599*4d5d8b54SAndroid Build Coastguard Worker    esac
600*4d5d8b54SAndroid Build Coastguard Worker  done
601*4d5d8b54SAndroid Build Coastguard Worker
602*4d5d8b54SAndroid Build Coastguard Worker  test -z "$dashmflag" && dashmflag=-M
603*4d5d8b54SAndroid Build Coastguard Worker  # Require at least two characters before searching for ':'
604*4d5d8b54SAndroid Build Coastguard Worker  # in the target name.  This is to cope with DOS-style filenames:
605*4d5d8b54SAndroid Build Coastguard Worker  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606*4d5d8b54SAndroid Build Coastguard Worker  "$@" $dashmflag |
607*4d5d8b54SAndroid Build Coastguard Worker    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
609*4d5d8b54SAndroid Build Coastguard Worker  cat < "$tmpdepfile" > "$depfile"
610*4d5d8b54SAndroid Build Coastguard Worker  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611*4d5d8b54SAndroid Build Coastguard Worker  # correctly.  Breaking it into two sed invocations is a workaround.
612*4d5d8b54SAndroid Build Coastguard Worker  tr ' ' "$nl" < "$tmpdepfile" \
613*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/$/ :/' >> "$depfile"
615*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
616*4d5d8b54SAndroid Build Coastguard Worker  ;;
617*4d5d8b54SAndroid Build Coastguard Worker
618*4d5d8b54SAndroid Build Coastguard WorkerdashXmstdout)
619*4d5d8b54SAndroid Build Coastguard Worker  # This case only exists to satisfy depend.m4.  It is never actually
620*4d5d8b54SAndroid Build Coastguard Worker  # run, as this mode is specially recognized in the preamble.
621*4d5d8b54SAndroid Build Coastguard Worker  exit 1
622*4d5d8b54SAndroid Build Coastguard Worker  ;;
623*4d5d8b54SAndroid Build Coastguard Worker
624*4d5d8b54SAndroid Build Coastguard Workermakedepend)
625*4d5d8b54SAndroid Build Coastguard Worker  "$@" || exit $?
626*4d5d8b54SAndroid Build Coastguard Worker  # Remove any Libtool call
627*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
628*4d5d8b54SAndroid Build Coastguard Worker    while test "X$1" != 'X--mode=compile'; do
629*4d5d8b54SAndroid Build Coastguard Worker      shift
630*4d5d8b54SAndroid Build Coastguard Worker    done
631*4d5d8b54SAndroid Build Coastguard Worker    shift
632*4d5d8b54SAndroid Build Coastguard Worker  fi
633*4d5d8b54SAndroid Build Coastguard Worker  # X makedepend
634*4d5d8b54SAndroid Build Coastguard Worker  shift
635*4d5d8b54SAndroid Build Coastguard Worker  cleared=no eat=no
636*4d5d8b54SAndroid Build Coastguard Worker  for arg
637*4d5d8b54SAndroid Build Coastguard Worker  do
638*4d5d8b54SAndroid Build Coastguard Worker    case $cleared in
639*4d5d8b54SAndroid Build Coastguard Worker    no)
640*4d5d8b54SAndroid Build Coastguard Worker      set ""; shift
641*4d5d8b54SAndroid Build Coastguard Worker      cleared=yes ;;
642*4d5d8b54SAndroid Build Coastguard Worker    esac
643*4d5d8b54SAndroid Build Coastguard Worker    if test $eat = yes; then
644*4d5d8b54SAndroid Build Coastguard Worker      eat=no
645*4d5d8b54SAndroid Build Coastguard Worker      continue
646*4d5d8b54SAndroid Build Coastguard Worker    fi
647*4d5d8b54SAndroid Build Coastguard Worker    case "$arg" in
648*4d5d8b54SAndroid Build Coastguard Worker    -D*|-I*)
649*4d5d8b54SAndroid Build Coastguard Worker      set fnord "$@" "$arg"; shift ;;
650*4d5d8b54SAndroid Build Coastguard Worker    # Strip any option that makedepend may not understand.  Remove
651*4d5d8b54SAndroid Build Coastguard Worker    # the object too, otherwise makedepend will parse it as a source file.
652*4d5d8b54SAndroid Build Coastguard Worker    -arch)
653*4d5d8b54SAndroid Build Coastguard Worker      eat=yes ;;
654*4d5d8b54SAndroid Build Coastguard Worker    -*|$object)
655*4d5d8b54SAndroid Build Coastguard Worker      ;;
656*4d5d8b54SAndroid Build Coastguard Worker    *)
657*4d5d8b54SAndroid Build Coastguard Worker      set fnord "$@" "$arg"; shift ;;
658*4d5d8b54SAndroid Build Coastguard Worker    esac
659*4d5d8b54SAndroid Build Coastguard Worker  done
660*4d5d8b54SAndroid Build Coastguard Worker  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661*4d5d8b54SAndroid Build Coastguard Worker  touch "$tmpdepfile"
662*4d5d8b54SAndroid Build Coastguard Worker  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
664*4d5d8b54SAndroid Build Coastguard Worker  # makedepend may prepend the VPATH from the source file name to the object.
665*4d5d8b54SAndroid Build Coastguard Worker  # No need to regex-escape $object, excess matching of '.' is harmless.
666*4d5d8b54SAndroid Build Coastguard Worker  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667*4d5d8b54SAndroid Build Coastguard Worker  # Some versions of the HPUX 10.20 sed can't process the last invocation
668*4d5d8b54SAndroid Build Coastguard Worker  # correctly.  Breaking it into two sed invocations is a workaround.
669*4d5d8b54SAndroid Build Coastguard Worker  sed '1,2d' "$tmpdepfile" \
670*4d5d8b54SAndroid Build Coastguard Worker    | tr ' ' "$nl" \
671*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672*4d5d8b54SAndroid Build Coastguard Worker    | sed -e 's/$/ :/' >> "$depfile"
673*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile" "$tmpdepfile".bak
674*4d5d8b54SAndroid Build Coastguard Worker  ;;
675*4d5d8b54SAndroid Build Coastguard Worker
676*4d5d8b54SAndroid Build Coastguard Workercpp)
677*4d5d8b54SAndroid Build Coastguard Worker  # Important note: in order to support this mode, a compiler *must*
678*4d5d8b54SAndroid Build Coastguard Worker  # always write the preprocessed file to stdout.
679*4d5d8b54SAndroid Build Coastguard Worker  "$@" || exit $?
680*4d5d8b54SAndroid Build Coastguard Worker
681*4d5d8b54SAndroid Build Coastguard Worker  # Remove the call to Libtool.
682*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
683*4d5d8b54SAndroid Build Coastguard Worker    while test "X$1" != 'X--mode=compile'; do
684*4d5d8b54SAndroid Build Coastguard Worker      shift
685*4d5d8b54SAndroid Build Coastguard Worker    done
686*4d5d8b54SAndroid Build Coastguard Worker    shift
687*4d5d8b54SAndroid Build Coastguard Worker  fi
688*4d5d8b54SAndroid Build Coastguard Worker
689*4d5d8b54SAndroid Build Coastguard Worker  # Remove '-o $object'.
690*4d5d8b54SAndroid Build Coastguard Worker  IFS=" "
691*4d5d8b54SAndroid Build Coastguard Worker  for arg
692*4d5d8b54SAndroid Build Coastguard Worker  do
693*4d5d8b54SAndroid Build Coastguard Worker    case $arg in
694*4d5d8b54SAndroid Build Coastguard Worker    -o)
695*4d5d8b54SAndroid Build Coastguard Worker      shift
696*4d5d8b54SAndroid Build Coastguard Worker      ;;
697*4d5d8b54SAndroid Build Coastguard Worker    $object)
698*4d5d8b54SAndroid Build Coastguard Worker      shift
699*4d5d8b54SAndroid Build Coastguard Worker      ;;
700*4d5d8b54SAndroid Build Coastguard Worker    *)
701*4d5d8b54SAndroid Build Coastguard Worker      set fnord "$@" "$arg"
702*4d5d8b54SAndroid Build Coastguard Worker      shift # fnord
703*4d5d8b54SAndroid Build Coastguard Worker      shift # $arg
704*4d5d8b54SAndroid Build Coastguard Worker      ;;
705*4d5d8b54SAndroid Build Coastguard Worker    esac
706*4d5d8b54SAndroid Build Coastguard Worker  done
707*4d5d8b54SAndroid Build Coastguard Worker
708*4d5d8b54SAndroid Build Coastguard Worker  "$@" -E \
709*4d5d8b54SAndroid Build Coastguard Worker    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710*4d5d8b54SAndroid Build Coastguard Worker             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711*4d5d8b54SAndroid Build Coastguard Worker    | sed '$ s: \\$::' > "$tmpdepfile"
712*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
713*4d5d8b54SAndroid Build Coastguard Worker  echo "$object : \\" > "$depfile"
714*4d5d8b54SAndroid Build Coastguard Worker  cat < "$tmpdepfile" >> "$depfile"
715*4d5d8b54SAndroid Build Coastguard Worker  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
717*4d5d8b54SAndroid Build Coastguard Worker  ;;
718*4d5d8b54SAndroid Build Coastguard Worker
719*4d5d8b54SAndroid Build Coastguard Workermsvisualcpp)
720*4d5d8b54SAndroid Build Coastguard Worker  # Important note: in order to support this mode, a compiler *must*
721*4d5d8b54SAndroid Build Coastguard Worker  # always write the preprocessed file to stdout.
722*4d5d8b54SAndroid Build Coastguard Worker  "$@" || exit $?
723*4d5d8b54SAndroid Build Coastguard Worker
724*4d5d8b54SAndroid Build Coastguard Worker  # Remove the call to Libtool.
725*4d5d8b54SAndroid Build Coastguard Worker  if test "$libtool" = yes; then
726*4d5d8b54SAndroid Build Coastguard Worker    while test "X$1" != 'X--mode=compile'; do
727*4d5d8b54SAndroid Build Coastguard Worker      shift
728*4d5d8b54SAndroid Build Coastguard Worker    done
729*4d5d8b54SAndroid Build Coastguard Worker    shift
730*4d5d8b54SAndroid Build Coastguard Worker  fi
731*4d5d8b54SAndroid Build Coastguard Worker
732*4d5d8b54SAndroid Build Coastguard Worker  IFS=" "
733*4d5d8b54SAndroid Build Coastguard Worker  for arg
734*4d5d8b54SAndroid Build Coastguard Worker  do
735*4d5d8b54SAndroid Build Coastguard Worker    case "$arg" in
736*4d5d8b54SAndroid Build Coastguard Worker    -o)
737*4d5d8b54SAndroid Build Coastguard Worker      shift
738*4d5d8b54SAndroid Build Coastguard Worker      ;;
739*4d5d8b54SAndroid Build Coastguard Worker    $object)
740*4d5d8b54SAndroid Build Coastguard Worker      shift
741*4d5d8b54SAndroid Build Coastguard Worker      ;;
742*4d5d8b54SAndroid Build Coastguard Worker    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743*4d5d8b54SAndroid Build Coastguard Worker        set fnord "$@"
744*4d5d8b54SAndroid Build Coastguard Worker        shift
745*4d5d8b54SAndroid Build Coastguard Worker        shift
746*4d5d8b54SAndroid Build Coastguard Worker        ;;
747*4d5d8b54SAndroid Build Coastguard Worker    *)
748*4d5d8b54SAndroid Build Coastguard Worker        set fnord "$@" "$arg"
749*4d5d8b54SAndroid Build Coastguard Worker        shift
750*4d5d8b54SAndroid Build Coastguard Worker        shift
751*4d5d8b54SAndroid Build Coastguard Worker        ;;
752*4d5d8b54SAndroid Build Coastguard Worker    esac
753*4d5d8b54SAndroid Build Coastguard Worker  done
754*4d5d8b54SAndroid Build Coastguard Worker  "$@" -E 2>/dev/null |
755*4d5d8b54SAndroid Build Coastguard Worker  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$depfile"
757*4d5d8b54SAndroid Build Coastguard Worker  echo "$object : \\" > "$depfile"
758*4d5d8b54SAndroid Build Coastguard Worker  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759*4d5d8b54SAndroid Build Coastguard Worker  echo "$tab" >> "$depfile"
760*4d5d8b54SAndroid Build Coastguard Worker  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761*4d5d8b54SAndroid Build Coastguard Worker  rm -f "$tmpdepfile"
762*4d5d8b54SAndroid Build Coastguard Worker  ;;
763*4d5d8b54SAndroid Build Coastguard Worker
764*4d5d8b54SAndroid Build Coastguard Workermsvcmsys)
765*4d5d8b54SAndroid Build Coastguard Worker  # This case exists only to let depend.m4 do its work.  It works by
766*4d5d8b54SAndroid Build Coastguard Worker  # looking at the text of this script.  This case will never be run,
767*4d5d8b54SAndroid Build Coastguard Worker  # since it is checked for above.
768*4d5d8b54SAndroid Build Coastguard Worker  exit 1
769*4d5d8b54SAndroid Build Coastguard Worker  ;;
770*4d5d8b54SAndroid Build Coastguard Worker
771*4d5d8b54SAndroid Build Coastguard Workernone)
772*4d5d8b54SAndroid Build Coastguard Worker  exec "$@"
773*4d5d8b54SAndroid Build Coastguard Worker  ;;
774*4d5d8b54SAndroid Build Coastguard Worker
775*4d5d8b54SAndroid Build Coastguard Worker*)
776*4d5d8b54SAndroid Build Coastguard Worker  echo "Unknown depmode $depmode" 1>&2
777*4d5d8b54SAndroid Build Coastguard Worker  exit 1
778*4d5d8b54SAndroid Build Coastguard Worker  ;;
779*4d5d8b54SAndroid Build Coastguard Workeresac
780*4d5d8b54SAndroid Build Coastguard Worker
781*4d5d8b54SAndroid Build Coastguard Workerexit 0
782*4d5d8b54SAndroid Build Coastguard Worker
783*4d5d8b54SAndroid Build Coastguard Worker# Local Variables:
784*4d5d8b54SAndroid Build Coastguard Worker# mode: shell-script
785*4d5d8b54SAndroid Build Coastguard Worker# sh-indentation: 2
786*4d5d8b54SAndroid Build Coastguard Worker# eval: (add-hook 'before-save-hook 'time-stamp)
787*4d5d8b54SAndroid Build Coastguard Worker# time-stamp-start: "scriptversion="
788*4d5d8b54SAndroid Build Coastguard Worker# time-stamp-format: "%:y-%02m-%02d.%02H"
789*4d5d8b54SAndroid Build Coastguard Worker# time-stamp-time-zone: "UTC0"
790*4d5d8b54SAndroid Build Coastguard Worker# time-stamp-end: "; # UTC"
791*4d5d8b54SAndroid Build Coastguard Worker# End:
792