1441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#! /bin/sh
2441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# depcomp - compile a program generating dependencies as side-effects
3cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
4cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengscriptversion=2007-03-29.01
5cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# Foundation, Inc.
8441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
9441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# This program is free software; you can redistribute it and/or modify
10441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# it under the terms of the GNU General Public License as published by
11441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# the Free Software Foundation; either version 2, or (at your option)
12441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# any later version.
13441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
14441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# This program is distributed in the hope that it will be useful,
15441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
16441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# GNU General Public License for more details.
18441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
19441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# You should have received a copy of the GNU General Public License
20441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# along with this program; if not, write to the Free Software
21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# 02110-1301, USA.
23441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
24441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# As a special exception to the GNU General Public License, if you
25441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# distribute this file as part of a program that contains a
26441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# configuration script generated by Autoconf, you may include it under
27441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# the same distribution terms that you use for the rest of that program.
28441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
29441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
31cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengcase $1 in
32cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  '')
33cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     exit 1;
35cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     ;;
36cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  -h | --h*)
37cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    cat <<\EOF
38cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
40cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengRun PROGRAMS ARGS to compile a file, generating dependencies
41cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengas side-effects.
42cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
43cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengEnvironment variables:
44cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  depmode     Dependency tracking mode.
45cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  source      Source file read by `PROGRAMS ARGS'.
46cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  object      Object file output by `PROGRAMS ARGS'.
47cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  DEPDIR      directory where to store dependencies.
48cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  depfile     Dependency file to output.
49cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  tmpdepfile  Temporary file to use when outputing dependencies.
50cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  libtool     Whether libtool is used (yes/no).
51cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
52cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengReport bugs to <bug-automake@gnu.org>.
53cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengEOF
54cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    exit $?
55cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    ;;
56cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  -v | --v*)
57cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    echo "depcomp $scriptversion"
58cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    exit $?
59cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    ;;
60cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengesac
61cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  exit 1
65441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectfi
66441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
67cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengdepfile=${depfile-`echo "$object" |
69cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectrm -f "$tmpdepfile"
73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# Some modes work just like other modes, but use different flags.  We
75441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# parameterize here, but still list the modes in the big case below,
76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# to make depend.m4 easier to write.  Note that we *cannot* use a case
77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# here, because this file can only contain one case statement.
78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectif test "$depmode" = hp; then
79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # HP compiler uses -M and no extra arg.
80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  gccflag=-M
81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  depmode=gcc
82441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectfi
83441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
84441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectif test "$depmode" = dashXmstdout; then
85441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   # This is just like dashmstdout with a different argument.
86441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   dashmflag=-xM
87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   depmode=dashmstdout
88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectfi
89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectcase "$depmode" in
91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectgcc3)
92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## gcc 3 implements dependency tracking that does exactly what
93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## it if -MD -MP comes after the -MF stuff.  Hmm.
95cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng## the command line argument order; so add the flags where they
97cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng## appear in depend2.am.  Note that the slowdown incurred here
98cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for arg
100cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do
101cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    case $arg in
102cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    *)  set fnord "$@" "$arg" ;;
104cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    esac
105cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    shift # fnord
106cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    shift # $arg
107cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
108cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@"
109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  stat=$?
110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test $stat -eq 0; then :
111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    rm -f "$tmpdepfile"
113441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    exit $stat
114441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
115441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  mv "$tmpdepfile" "$depfile"
116441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
117441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
118441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectgcc)
119441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## There are various ways to get dependency output from gcc.  Here's
120441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## why we pick this rather obscure method:
121441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## - Don't want to use -MD because we'd like the dependencies to end
122441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project##   up in a subdir.  Having to rename by hand is ugly.
123441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project##   (We might end up doing this anyway to support other compilers.)
124441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project##   -MM, not -M (despite what the docs say).
126441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## - Using -M directly means running the compiler twice (even worse
127441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project##   than renaming).
128441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test -z "$gccflag"; then
129441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    gccflag=-MD,
130441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
131441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  "$@" -Wp,"$gccflag$tmpdepfile"
132441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  stat=$?
133441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test $stat -eq 0; then :
134441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
135441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    rm -f "$tmpdepfile"
136441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    exit $stat
137441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
138441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$depfile"
139441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  echo "$object : \\" > "$depfile"
140441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## The second -e expression handles DOS-style file names with drive letters.
142441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  sed -e 's/^[^:]*: / /' \
143441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## This next piece of magic avoids the `deleted header file' problem.
145441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## The problem is that when a header file which appears in a .P file
146441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## is deleted, the dependency causes make to die (because there is
147441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## typically no way to rebuild the header).  We avoid this by adding
148441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## dummy dependencies for each header file.  Too bad gcc doesn't do
149441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## this for us directly.
150441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  tr ' ' '
151441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project' < "$tmpdepfile" |
152441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## Some versions of gcc put a space before the `:'.  On the theory
153441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## that the space means something, we add a space to the output as
154441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## well.
155441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## Some versions of the HPUX 10.20 sed can't process this invocation
156441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## correctly.  Breaking it into two sed invocations is a workaround.
157441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile"
159441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
160441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
161441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecthp)
162441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # This case exists only to let depend.m4 do its work.  It works by
163441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # looking at the text of this script.  This case will never be run,
164441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # since it is checked for above.
165441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  exit 1
166441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
167441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
168441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectsgi)
169441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test "$libtool" = yes; then
170441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    "$@" "-Wp,-MDupdate,$tmpdepfile"
171441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
172441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    "$@" -MDupdate "$tmpdepfile"
173441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
174441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  stat=$?
175441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test $stat -eq 0; then :
176441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
177441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    rm -f "$tmpdepfile"
178441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    exit $stat
179441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
180441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$depfile"
181441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
182441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    echo "$object : \\" > "$depfile"
184441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
185441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # Clip off the initial element (the dependent).  Don't try to be
186441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # clever and replace this with sed code, as IRIX sed won't handle
187441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # lines with more than a fixed number of characters (4096 in
188441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # the IRIX cc adds comments like `#:fec' to the end of the
190441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # dependency line.
191441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    tr ' ' '
192441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project' < "$tmpdepfile" \
193441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    tr '
195441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project' ' ' >> $depfile
196441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    echo >> $depfile
197441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
198441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # The second pass generates a dummy entry for each header file.
199441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    tr ' ' '
200441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project' < "$tmpdepfile" \
201441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   >> $depfile
203441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
204441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # The sourcefile does not contain any dependencies, so just
205441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # store a dummy comment line, to avoid errors with the Makefile
206441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # "include basename.Plo" scheme.
207441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    echo "#dummy" > "$depfile"
208441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
209441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile"
210441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
211441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
212441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectaix)
213441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # The C for AIX Compiler uses -M and outputs the dependencies
214cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # in a .u file.  In older versions, this file always lives in the
215cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # current directory.  Also, the AIX compiler puts `$object:' at the
216cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # start of each line; $object doesn't have directory information.
217cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Version 6 uses the directory in both cases.
218cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  test "x$dir" = "x$object" && dir=
220cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test "$libtool" = yes; then
222cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile1=$dir$base.u
223cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile2=$base.u
224cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile3=$dir.libs/$base.u
225441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    "$@" -Wc,-M
226441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
227cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile1=$dir$base.u
228cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile2=$dir$base.u
229cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile3=$dir$base.u
230441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    "$@" -M
231441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
232441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  stat=$?
233cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
234441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test $stat -eq 0; then :
235441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
236cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    exit $stat
238441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
239441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
240cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do
242cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    test -f "$tmpdepfile" && break
243cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
244441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  if test -f "$tmpdepfile"; then
245441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # Each line is of the form `foo.o: dependent.h'.
246441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # Do two passes, one to just change these to
247441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # `$object: dependent.h' and one to simply `dependent.h:'.
248cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    # That's a tab and a space in the [].
250cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  else
252441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # The sourcefile does not contain any dependencies, so just
253441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # store a dummy comment line, to avoid errors with the Makefile
254441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    # "include basename.Plo" scheme.
255441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    echo "#dummy" > "$depfile"
256441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  fi
257441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile"
258441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
259441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
260cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengicc)
261cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Intel's C compiler understands `-MD -MF file'.  However on
262cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # ICC 7.0 will fill foo.d with something like
264cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    foo.o: sub/foo.c
265cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    foo.o: sub/foo.h
266cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # which is wrong.  We want:
267cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    sub/foo.o: sub/foo.c
268cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    sub/foo.o: sub/foo.h
269cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    sub/foo.c:
270cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    sub/foo.h:
271cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # ICC 7.1 will output
272cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    foo.o: sub/foo.c sub/foo.h
273cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # and will wrap long lines using \ :
274cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #    foo.o: sub/foo.c ... \
275cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #     sub/foo.h ... \
276cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  #     ...
277cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
278cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" -MD -MF "$tmpdepfile"
279cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  stat=$?
280cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test $stat -eq 0; then :
281cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  else
282cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    rm -f "$tmpdepfile"
283cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    exit $stat
284cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
285cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  rm -f "$depfile"
286cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Each line is of the form `foo.o: dependent.h',
287cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Do two passes, one to just change these to
289cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # `$object: dependent.h' and one to simply `dependent.h:'.
290cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Some versions of the HPUX 10.20 sed can't process this invocation
292cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # correctly.  Breaking it into two sed invocations is a workaround.
293cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed -e 's/$/ :/' >> "$depfile"
295cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  rm -f "$tmpdepfile"
296cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ;;
297cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
298cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chenghp2)
299cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # compilers, which have integrated preprocessors.  The correct option
301cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # to use with these is +Maked; it writes dependencies to a file named
302cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # 'foo.d', which lands next to the object file, wherever that
303cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # happens to be.
304cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Much of this is similar to the tru64 case; see comments there.
305cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  test "x$dir" = "x$object" && dir=
307cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test "$libtool" = yes; then
309cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile1=$dir$base.d
310cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile2=$dir.libs/$base.d
311cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    "$@" -Wc,+Maked
312cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  else
313cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile1=$dir$base.d
314cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    tmpdepfile2=$dir$base.d
315cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    "$@" +Maked
316cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
317cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  stat=$?
318cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test $stat -eq 0; then :
319cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  else
320cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     rm -f "$tmpdepfile1" "$tmpdepfile2"
321cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     exit $stat
322cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
323cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
324cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do
326cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    test -f "$tmpdepfile" && break
327cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
328cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test -f "$tmpdepfile"; then
329cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    # Add `dependent.h:' lines.
331cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  else
333cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    echo "#dummy" > "$depfile"
334cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
335cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  rm -f "$tmpdepfile" "$tmpdepfile2"
336cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ;;
337cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
338441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttru64)
339cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   # The Tru64 compiler uses -MD to generate dependencies as a side
340441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   # dependencies in `foo.d' instead, so we check for that too.
343441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   # Subdirectories are respected.
344cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   test "x$dir" = "x$object" && dir=
346cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
348441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   if test "$libtool" = yes; then
349cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # With Tru64 cc, shared objects can also be used to make a
350cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # static library.  This mechanism is used in libtool 1.4 series to
351cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # handle both shared and static libraries in a single compilation.
352cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      #
354cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # With libtool 1.5 this exception was removed, and libtool now
355cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # generates 2 separate objects for the 2 libraries.  These two
356cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # compilations output dependencies in $dir.libs/$base.o.d and
357cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # in $dir$base.o.d.  We have to check for both files, because
358cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # one of the two compilations can be disabled.  We should prefer
359cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # automatically cleaned when .libs/ is deleted, while ignoring
361cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # the former would cause a distcleancheck panic.
362cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      "$@" -Wc,-MD
367441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   else
368cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile1=$dir$base.o.d
369cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile2=$dir$base.d
370cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile3=$dir$base.d
371cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      tmpdepfile4=$dir$base.d
372441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      "$@" -MD
373441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   fi
374441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
375441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   stat=$?
376441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   if test $stat -eq 0; then :
377441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   else
378cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      exit $stat
380441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   fi
381441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
382cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   do
384cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     test -f "$tmpdepfile" && break
385cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   done
386441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   if test -f "$tmpdepfile"; then
387441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      # That's a tab and a space in the [].
389cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   else
391441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      echo "#dummy" > "$depfile"
392441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   fi
393441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   rm -f "$tmpdepfile"
394441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   ;;
395441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
396441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#nosideeffect)
397441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # This comment above is used by automake to tell side-effect
398441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # dependency tracking mechanisms from slower ones.
399441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
400441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectdashmstdout)
401441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # Important note: in order to support this mode, a compiler *must*
402cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # always write the preprocessed file to stdout, regardless of -o.
403cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" || exit $?
404cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
405cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Remove the call to Libtool.
406cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test "$libtool" = yes; then
407cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    while test $1 != '--mode=compile'; do
408cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
409cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    done
410cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    shift
411cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
412cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
413cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Remove `-o $object'.
414cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  IFS=" "
415cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for arg
416cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do
417cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    case $arg in
418cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    -o)
419cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
420cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      ;;
421cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    $object)
422cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
423cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      ;;
424cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    *)
425cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      set fnord "$@" "$arg"
426cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift # fnord
427cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift # $arg
428441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      ;;
429441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    esac
430cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
431cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
432cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  test -z "$dashmflag" && dashmflag=-M
433cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Require at least two characters before searching for `:'
434cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # in the target name.  This is to cope with DOS-style filenames:
435cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" $dashmflag |
437cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$depfile"
439441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  cat < "$tmpdepfile" > "$depfile"
440441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  tr ' ' '
441441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project' < "$tmpdepfile" | \
442441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## Some versions of the HPUX 10.20 sed can't process this invocation
443441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## correctly.  Breaking it into two sed invocations is a workaround.
444441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile"
446441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
447441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
448441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source ProjectdashXmstdout)
449441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # This case only exists to satisfy depend.m4.  It is never actually
450441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # run, as this mode is specially recognized in the preamble.
451441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  exit 1
452441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
453441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
454441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectmakedepend)
455cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" || exit $?
456cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Remove any Libtool call
457cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test "$libtool" = yes; then
458cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    while test $1 != '--mode=compile'; do
459cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
460441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    done
461cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    shift
462cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
463cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # X makedepend
464cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  shift
465cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  cleared=no
466cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for arg in "$@"; do
467cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    case $cleared in
468cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    no)
469cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      set ""; shift
470cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      cleared=yes ;;
471cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    esac
472cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    case "$arg" in
473cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    -D*|-I*)
474cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      set fnord "$@" "$arg"; shift ;;
475cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    # Strip any option that makedepend may not understand.  Remove
476cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    # the object too, otherwise makedepend will parse it as a source file.
477cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    -*|$object)
478cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      ;;
479cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    *)
480cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      set fnord "$@" "$arg"; shift ;;
481cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    esac
482cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
483cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  obj_suffix="`echo $object | sed 's/^.*\././'`"
484cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  touch "$tmpdepfile"
485cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$depfile"
487441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  cat < "$tmpdepfile" > "$depfile"
488441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  sed '1,2d' "$tmpdepfile" | tr ' ' '
489441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project' | \
490441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## Some versions of the HPUX 10.20 sed can't process this invocation
491441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project## correctly.  Breaking it into two sed invocations is a workaround.
492441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile" "$tmpdepfile".bak
494441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
495441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
496441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectcpp)
497441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # Important note: in order to support this mode, a compiler *must*
498cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # always write the preprocessed file to stdout.
499cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" || exit $?
500cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
501cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Remove the call to Libtool.
502cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  if test "$libtool" = yes; then
503cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    while test $1 != '--mode=compile'; do
504cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
505cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    done
506cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    shift
507cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  fi
508cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
509cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # Remove `-o $object'.
510cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  IFS=" "
511cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for arg
512cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do
513cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    case $arg in
514cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    -o)
515cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
516cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      ;;
517cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    $object)
518cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift
519cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      ;;
520cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    *)
521cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      set fnord "$@" "$arg"
522cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift # fnord
523cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      shift # $arg
524441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project      ;;
525441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    esac
526cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
527cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
528cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" -E |
529cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    sed '$ s: \\$::' > "$tmpdepfile"
532441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$depfile"
533441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  echo "$object : \\" > "$depfile"
534441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  cat < "$tmpdepfile" >> "$depfile"
535441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile"
537441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
538441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
539441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectmsvisualcpp)
540441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # Important note: in order to support this mode, a compiler *must*
541cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  # always write the preprocessed file to stdout, regardless of -o,
542441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  # because we must use -o when running libtool.
543cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" || exit $?
544cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  IFS=" "
545cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  for arg
546cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do
547cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    case "$arg" in
548cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	set fnord "$@"
550441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	shift
551441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	shift
552441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	;;
553cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    *)
554441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	set fnord "$@" "$arg"
555441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	shift
556441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	shift
557441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project	;;
558cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    esac
559cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  done
560cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  "$@" -E |
561cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$depfile"
563441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  echo "$object : \\" > "$depfile"
564441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  echo "	" >> "$depfile"
566441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  rm -f "$tmpdepfile"
568441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
569441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
570441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectnone)
571441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  exec "$@"
572441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
573441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
574441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project*)
575441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  echo "Unknown depmode $depmode" 1>&2
576441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  exit 1
577441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  ;;
578441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectesac
579441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
580441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectexit 0
581cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
582cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# Local Variables:
583cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# mode: shell-script
584cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# sh-indentation: 2
585cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# eval: (add-hook 'write-file-hooks 'time-stamp)
586cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# time-stamp-start: "scriptversion="
587cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# time-stamp-format: "%:y-%02m-%02d.%02H"
588cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# time-stamp-end: "$"
589cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# End:
590