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