1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#! /bin/sh
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# depcomp - compile a program generating dependencies as side-effects
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
405436638acc7c010349a69c3395f1a57c642dc62Ying Wangscriptversion=2012-10-18.11; # UTC
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Copyright (C) 1999-2012 Free Software Foundation, Inc.
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is free software; you can redistribute it and/or modify
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# it under the terms of the GNU General Public License as published by
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# the Free Software Foundation; either version 2, or (at your option)
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# any later version.
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is distributed in the hope that it will be useful,
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# GNU General Public License for more details.
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# You should have received a copy of the GNU General Public License
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# As a special exception to the GNU General Public License, if you
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# distribute this file as part of a program that contains a
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# configuration script generated by Autoconf, you may include it under
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# the same distribution terms that you use for the rest of that program.
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectcase $1 in
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  '')
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    exit 1;
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    ;;
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -h | --h*)
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    cat <<\EOF
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectRun PROGRAMS ARGS to compile a file, generating dependencies
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectas side-effects.
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectEnvironment variables:
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  depmode     Dependency tracking mode.
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  source      Source file read by 'PROGRAMS ARGS'.
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  object      Object file output by 'PROGRAMS ARGS'.
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  DEPDIR      directory where to store dependencies.
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  depfile     Dependency file to output.
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  tmpdepfile  Temporary file to use when outputting dependencies.
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  libtool     Whether libtool is used (yes/no).
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectReport bugs to <bug-automake@gnu.org>.
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectEOF
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $?
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ;;
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -v | --v*)
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    echo "depcomp $scriptversion"
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $?
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ;;
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectesac
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Get the directory component of the given path, and save it in the
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# global variables '$dir'.  Note that this directory component will
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# be either empty or ending with a '/' character.  This is deliberate.
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wangset_dir_from ()
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  case $1 in
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      *) dir=;;
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  esac
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Get the suffix-stripped basename of the given path, and save it the
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# global variable '$base'.
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wangset_base_from ()
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# If no dependency file was actually created by the compiler invocation,
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# we still have to create a dummy depfile, to avoid errors with the
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Makefile "include basename.Plo" scheme.
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wangmake_dummy_depfile ()
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  echo "#dummy" > "$depfile"
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Factor out some common post-processing of the generated depfile.
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Requires the auxiliary global variable '$tmpdepfile' to be set.
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wangaix_post_process_depfile ()
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # If the compiler actually managed to produce a dependency file,
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # post-process it.
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test -f "$tmpdepfile"; then
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # Each line is of the form 'foo.o: dependency.h'.
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # Do two passes, one to just change these to
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    #   $object: dependency.h
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # and one to simply output
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    #   dependency.h:
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # which is needed to avoid the deleted-header problem.
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    } > "$depfile"
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    rm -f "$tmpdepfile"
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    make_dummy_depfile
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# A tabulation character.
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtab='	'
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# A newline character.
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wangnl='
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang'
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Character ranges might be problematic outside the C locale.
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# These definitions help.
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wangupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wanglower=abcdefghijklmnopqrstuvwxyz
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wangdigits=0123456789
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wangalpha=${upper}${lower}
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  exit 1
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectfi
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdepfile=${depfile-`echo "$object" |
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectrm -f "$tmpdepfile"
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Avoid interferences from the environment.
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wanggccflag= dashmflag=
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Some modes work just like other modes, but use different flags.  We
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# parameterize here, but still list the modes in the big case below,
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# to make depend.m4 easier to write.  Note that we *cannot* use a case
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# here, because this file can only contain one case statement.
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectif test "$depmode" = hp; then
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # HP compiler uses -M and no extra arg.
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  gccflag=-M
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  depmode=gcc
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectfi
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectif test "$depmode" = dashXmstdout; then
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # This is just like dashmstdout with a different argument.
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  dashmflag=-xM
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  depmode=dashmstdout
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wangfi
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcygpath_u="cygpath -u -f -"
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wangif test "$depmode" = msvcmsys; then
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # This is just like msvisualcpp but w/o cygpath translation.
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Just convert the backslash-escaped backslashes to single forward
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # slashes to satisfy depend.m4
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  cygpath_u='sed s,\\\\,/,g'
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  depmode=msvisualcpp
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wangfi
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wangif test "$depmode" = msvc7msys; then
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # This is just like msvc7 but w/o cygpath translation.
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Just convert the backslash-escaped backslashes to single forward
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # slashes to satisfy depend.m4
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  cygpath_u='sed s,\\\\,/,g'
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  depmode=msvc7
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wangfi
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wangif test "$depmode" = xlc; then
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  gccflag=-qmakedep=gcc,-MF
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  depmode=gcc
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectfi
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectcase "$depmode" in
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectgcc3)
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## gcc 3 implements dependency tracking that does exactly what
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## it if -MD -MP comes after the -MF stuff.  Hmm.
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang## Unfortunately, FreeBSD c89 acceptance of flags depends upon
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang## the command line argument order; so add the flags where they
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang## appear in depend2.am.  Note that the slowdown incurred here
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang## affects only configure: in makefiles, %FASTDEP% shortcuts this.
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for arg
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    case $arg in
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    *)  set fnord "$@" "$arg" ;;
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    esac
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    shift # fnord
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    shift # $arg
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  done
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  "$@"
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  stat=$?
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    rm -f "$tmpdepfile"
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $stat
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  mv "$tmpdepfile" "$depfile"
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectgcc)
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang## (see the conditional assignment to $gccflag above).
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## There are various ways to get dependency output from gcc.  Here's
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## why we pick this rather obscure method:
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## - Don't want to use -MD because we'd like the dependencies to end
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project##   up in a subdir.  Having to rename by hand is ugly.
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project##   (We might end up doing this anyway to support other compilers.)
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang##   -MM, not -M (despite what the docs say).  Also, it might not be
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang##   supported by the other compilers which use the 'gcc' depmode.
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## - Using -M directly means running the compiler twice (even worse
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project##   than renaming).
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test -z "$gccflag"; then
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    gccflag=-MD,
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "$@" -Wp,"$gccflag$tmpdepfile"
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  stat=$?
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    rm -f "$tmpdepfile"
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $stat
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  echo "$object : \\" > "$depfile"
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # The second -e expression handles DOS-style file names with drive
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # letters.
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  sed -e 's/^[^:]*: / /' \
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang## This next piece of magic avoids the "deleted header file" problem.
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## The problem is that when a header file which appears in a .P file
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## is deleted, the dependency causes make to die (because there is
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## typically no way to rebuild the header).  We avoid this by adding
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## dummy dependencies for each header file.  Too bad gcc doesn't do
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## this for us directly.
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang## Some versions of gcc put a space before the ':'.  On the theory
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## that the space means something, we add a space to the output as
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang## well.  hp depmode also adds that space, but also prefixes the VPATH
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang## to the object.  Take care to not repeat it in the output.
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Some versions of the HPUX 10.20 sed can't process this invocation
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## correctly.  Breaking it into two sed invocations is a workaround.
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  tr ' ' "$nl" < "$tmpdepfile" \
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/$/ :/' >> "$depfile"
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecthp)
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # This case exists only to let depend.m4 do its work.  It works by
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # looking at the text of this script.  This case will never be run,
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # since it is checked for above.
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  exit 1
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsgi)
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test "$libtool" = yes; then
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    "$@" "-Wp,-MDupdate,$tmpdepfile"
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    "$@" -MDupdate "$tmpdepfile"
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  stat=$?
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    rm -f "$tmpdepfile"
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $stat
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    echo "$object : \\" > "$depfile"
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # Clip off the initial element (the dependent).  Don't try to be
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # clever and replace this with sed code, as IRIX sed won't handle
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # lines with more than a fixed number of characters (4096 in
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # the IRIX cc adds comments like '#:fec' to the end of the
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # dependency line.
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tr ' ' "$nl" < "$tmpdepfile" \
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      | tr "$nl" ' ' >> "$depfile"
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    echo >> "$depfile"
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # The second pass generates a dummy entry for each header file.
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tr ' ' "$nl" < "$tmpdepfile" \
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      >> "$depfile"
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    make_dummy_depfile
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wangxlc)
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # This case exists only to let depend.m4 do its work.  It works by
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # looking at the text of this script.  This case will never be run,
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # since it is checked for above.
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  exit 1
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectaix)
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # The C for AIX Compiler uses -M and outputs the dependencies
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # in a .u file.  In older versions, this file always lives in the
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # current directory.  Also, the AIX compiler puts '$object:' at the
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # start of each line; $object doesn't have directory information.
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Version 6 uses the directory in both cases.
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_dir_from "$object"
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_base_from "$object"
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test "$libtool" = yes; then
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile1=$dir$base.u
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile2=$base.u
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile3=$dir.libs/$base.u
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    "$@" -Wc,-M
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile1=$dir$base.u
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile2=$dir$base.u
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile3=$dir$base.u
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    "$@" -M
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  stat=$?
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    exit $stat
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    test -f "$tmpdepfile" && break
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  done
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  aix_post_process_depfile
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtcc)
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # FIXME: That version still under development at the moment of writing.
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #        Make that this statement remains true also for stable, released
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #        versions.
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # It will wrap lines (doesn't matter whether long or short) with a
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # trailing '\', as in:
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #   foo.o : \
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #    foo.c \
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #    foo.h \
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # It will put a trailing '\' even on the last line, and will use leading
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # spaces rather than leading tabs (at least since its commit 0394caf7
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # "Emit spaces for -MD").
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  "$@" -MD -MF "$tmpdepfile"
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  stat=$?
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    rm -f "$tmpdepfile"
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $stat
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  rm -f "$depfile"
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # We have to change lines of the first kind to '$object: \'.
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # And for each line of the second kind, we have to emit a 'dep.h:'
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # dummy dependency, to avoid the deleted-header problem.
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang## The order of this option in the case statement is important, since the
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang## shell code in configure will try each of these formats in the order
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang## listed in this file.  A plain '-MD' option would be understood by many
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang## compilers, so we must ensure this comes after the gcc and icc options.
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wangpgcc)
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Portland's C compiler understands '-MD'.
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Will always output deps to 'file.d' where file is the root name of the
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # source file under compilation, even if file resides in a subdirectory.
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # The object file name does not affect the name of the '.d' file.
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # pgcc 10.2 will output
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #    foo.o: sub/foo.c sub/foo.h
37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # and will wrap long lines using '\' :
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #    foo.o: sub/foo.c ... \
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #     sub/foo.h ... \
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #     ...
37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_dir_from "$object"
37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Use the source, not the object, to determine the base name, since
37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # that's sadly what pgcc will do too.
37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_base_from "$source"
37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  tmpdepfile=$base.d
37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # For projects that build the same source file twice into different object
38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # files, the pgcc approach of using the *source* file root name can cause
38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # problems in parallel builds.  Use a locking strategy to avoid stomping on
38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # the same $tmpdepfile.
38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  lockdir=$base.d-lock
38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  trap "
38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    echo '$0: caught signal, cleaning up...' >&2
38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    rmdir '$lockdir'
38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    exit 1
38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  " 1 2 13 15
39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  numtries=100
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  i=$numtries
39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  while test $i -gt 0; do
39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # mkdir is a portable test-and-set.
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if mkdir "$lockdir" 2>/dev/null; then
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      # This process acquired the lock.
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      "$@" -MD
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      stat=$?
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      # Release the lock.
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rmdir "$lockdir"
40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      break
40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    else
40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      # If the lock is being held by a different process, wait
40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      # until the winning process is done or we timeout.
40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      while test -d "$lockdir" && test $i -gt 0; do
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        sleep 1
40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        i=`expr $i - 1`
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      done
40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    fi
40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    i=`expr $i - 1`
41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  done
41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  trap - 1 2 13 15
41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $i -le 0; then
41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    echo "$0: failed to acquire lock after $numtries attempts" >&2
41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    echo "$0: check lockdir '$lockdir'" >&2
41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    exit 1
41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    rm -f "$tmpdepfile"
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    exit $stat
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Each line is of the form `foo.o: dependent.h',
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Do two passes, one to just change these to
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # `$object: dependent.h' and one to simply `dependent.h:'.
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Some versions of the HPUX 10.20 sed can't process this invocation
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # correctly.  Breaking it into two sed invocations is a workaround.
43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/$/ :/' >> "$depfile"
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
43505436638acc7c010349a69c3395f1a57c642dc62Ying Wanghp2)
43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # compilers, which have integrated preprocessors.  The correct option
43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # to use with these is +Maked; it writes dependencies to a file named
43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # 'foo.d', which lands next to the object file, wherever that
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # happens to be.
44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Much of this is similar to the tru64 case; see comments there.
44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_dir_from  "$object"
44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_base_from "$object"
44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test "$libtool" = yes; then
44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile1=$dir$base.d
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile2=$dir.libs/$base.d
44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    "$@" -Wc,+Maked
44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else
44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile1=$dir$base.d
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile2=$dir$base.d
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    "$@" +Maked
45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  stat=$?
45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     rm -f "$tmpdepfile1" "$tmpdepfile2"
45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     exit $stat
45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do
46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    test -f "$tmpdepfile" && break
46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  done
46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test -f "$tmpdepfile"; then
46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # Add 'dependent.h:' lines.
46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    sed -ne '2,${
46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang               s/^ *//
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang               s/ \\*$//
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang               s/$/:/
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang               p
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang             }' "$tmpdepfile" >> "$depfile"
47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else
47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    make_dummy_depfile
47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  rm -f "$tmpdepfile" "$tmpdepfile2"
47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttru64)
47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # The Tru64 compiler uses -MD to generate dependencies as a side
48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # dependencies in 'foo.d' instead, so we check for that too.
48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Subdirectories are respected.
48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_dir_from  "$object"
48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  set_base_from "$object"
48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test "$libtool" = yes; then
48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # Libtool generates 2 separate objects for the 2 libraries.  These
48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # two compilations output dependencies in $dir.libs/$base.o.d and
49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # in $dir$base.o.d.  We have to check for both files, because
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # one of the two compilations can be disabled.  We should prefer
49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # automatically cleaned when .libs/ is deleted, while ignoring
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    # the former would cause a distcleancheck panic.
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile1=$dir$base.o.d          # libtool 1.5
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    "$@" -Wc,-MD
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile1=$dir$base.d
50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile2=$dir$base.d
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    tmpdepfile3=$dir$base.d
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    "$@" -MD
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  stat=$?
50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    exit $stat
51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    test -f "$tmpdepfile" && break
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  done
51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Same post-processing that is required for AIX mode.
51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  aix_post_process_depfile
51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wangmsvc7)
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test "$libtool" = yes; then
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    showIncludes=-Wc,-showIncludes
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    showIncludes=-showIncludes
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  "$@" $showIncludes > "$tmpdepfile"
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  stat=$?
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  grep -v '^Note: including file: ' "$tmpdepfile"
52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test $stat -ne 0; then
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    rm -f "$tmpdepfile"
53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    exit $stat
53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  rm -f "$depfile"
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  echo "$object : \\" > "$depfile"
53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # The first sed program below extracts the file names and escapes
53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # backslashes for cygpath.  The second sed program outputs the file
53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # name when reading, but also accumulates all include files in the
53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # hold buffer in order to output them again at the end.  This only
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # works with sed implementations that can handle large buffers.
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed < "$tmpdepfile" -n '
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/^Note: including file:  *\(.*\)/ {
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  s//\1/
54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  s/\\/\\\\/g
54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  p
54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}' | $cygpath_u | sort -u | sed -n '
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wangs/ /\\ /g
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wangs/\(.*\)/'"$tab"'\1 \\/p
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wangs/.\(.*\) \\/\1:/
54905436638acc7c010349a69c3395f1a57c642dc62Ying WangH
55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang$ {
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  s/.*/'"$tab"'/
55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  G
55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  p
55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}' >> "$depfile"
55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  rm -f "$tmpdepfile"
55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
55805436638acc7c010349a69c3395f1a57c642dc62Ying Wangmsvc7msys)
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # This case exists only to let depend.m4 do its work.  It works by
56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # looking at the text of this script.  This case will never be run,
56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # since it is checked for above.
56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  exit 1
56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#nosideeffect)
566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # This comment above is used by automake to tell side-effect
567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # dependency tracking mechanisms from slower ones.
568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdashmstdout)
570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Important note: in order to support this mode, a compiler *must*
571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # always write the preprocessed file to stdout, regardless of -o.
572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "$@" || exit $?
573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Remove the call to Libtool.
575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test "$libtool" = yes; then
57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    while test "X$1" != 'X--mode=compile'; do
577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    done
579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    shift
580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Remove '-o $object'.
583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  IFS=" "
584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for arg
585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  do
586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case $arg in
587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    -o)
588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    $object)
591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *)
594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      set fnord "$@" "$arg"
595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift # fnord
596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift # $arg
597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    esac
599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  done
600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  test -z "$dashmflag" && dashmflag=-M
60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Require at least two characters before searching for ':'
603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # in the target name.  This is to cope with DOS-style filenames:
60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "$@" $dashmflag |
60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  cat < "$tmpdepfile" > "$depfile"
60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Some versions of the HPUX 10.20 sed can't process this sed invocation
61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # correctly.  Breaking it into two sed invocations is a workaround.
61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  tr ' ' "$nl" < "$tmpdepfile" \
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/$/ :/' >> "$depfile"
614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectdashXmstdout)
618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # This case only exists to satisfy depend.m4.  It is never actually
619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # run, as this mode is specially recognized in the preamble.
620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  exit 1
621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectmakedepend)
624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "$@" || exit $?
625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Remove any Libtool call
626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test "$libtool" = yes; then
62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    while test "X$1" != 'X--mode=compile'; do
628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    done
630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    shift
631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # X makedepend
633cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  shift
63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  cleared=no eat=no
63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for arg
63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do
637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case $cleared in
638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    no)
639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      set ""; shift
640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      cleared=yes ;;
641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    esac
64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if test $eat = yes; then
64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      eat=no
64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      continue
64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    fi
646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case "$arg" in
647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    -D*|-I*)
648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      set fnord "$@" "$arg"; shift ;;
649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # Strip any option that makedepend may not understand.  Remove
650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    # the object too, otherwise makedepend will parse it as a source file.
65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    -arch)
65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      eat=yes ;;
653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    -*|$object)
654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *)
656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      set fnord "$@" "$arg"; shift ;;
657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    esac
658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  done
65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  obj_suffix=`echo "$object" | sed 's/^.*\././'`
660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  touch "$tmpdepfile"
661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # makedepend may prepend the VPATH from the source file name to the object.
66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # No need to regex-escape $object, excess matching of '.' is harmless.
66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Some versions of the HPUX 10.20 sed can't process the last invocation
66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # correctly.  Breaking it into two sed invocations is a workaround.
66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed '1,2d' "$tmpdepfile" \
66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | tr ' ' "$nl" \
67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -e 's/$/ :/' >> "$depfile"
672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile" "$tmpdepfile".bak
673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectcpp)
676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Important note: in order to support this mode, a compiler *must*
677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # always write the preprocessed file to stdout.
678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "$@" || exit $?
679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Remove the call to Libtool.
681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if test "$libtool" = yes; then
68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    while test "X$1" != 'X--mode=compile'; do
683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    done
685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    shift
686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fi
687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Remove '-o $object'.
689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  IFS=" "
690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for arg
691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  do
692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case $arg in
693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    -o)
694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    $object)
697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift
698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *)
700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      set fnord "$@" "$arg"
701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift # fnord
702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      shift # $arg
703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ;;
704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    esac
705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  done
706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  "$@" -E \
70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    | sed '$ s: \\$::' > "$tmpdepfile"
711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  echo "$object : \\" > "$depfile"
713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  cat < "$tmpdepfile" >> "$depfile"
714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectmsvisualcpp)
719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  # Important note: in order to support this mode, a compiler *must*
72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # always write the preprocessed file to stdout.
721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "$@" || exit $?
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # Remove the call to Libtool.
72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if test "$libtool" = yes; then
72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    while test "X$1" != 'X--mode=compile'; do
72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      shift
72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    done
72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    shift
72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  fi
73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  IFS=" "
732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for arg
733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  do
734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case "$arg" in
73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    -o)
73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      shift
73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ;;
73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    $object)
73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      shift
74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ;;
741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        set fnord "$@"
74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        shift
74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        shift
74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        ;;
746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *)
74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        set fnord "$@" "$arg"
74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        shift
74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        shift
75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        ;;
751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    esac
752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  done
75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  "$@" -E 2>/dev/null |
75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$depfile"
756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  echo "$object : \\" > "$depfile"
75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  echo "$tab" >> "$depfile"
75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rm -f "$tmpdepfile"
761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
76305436638acc7c010349a69c3395f1a57c642dc62Ying Wangmsvcmsys)
76405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # This case exists only to let depend.m4 do its work.  It works by
76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # looking at the text of this script.  This case will never be run,
76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  # since it is checked for above.
76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  exit 1
76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ;;
76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnone)
771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  exec "$@"
772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project*)
775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  echo "Unknown depmode $depmode" 1>&2
776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  exit 1
777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ;;
778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectesac
779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectexit 0
781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Local Variables:
783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# mode: shell-script
784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# sh-indentation: 2
785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# eval: (add-hook 'write-file-hooks 'time-stamp)
786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# time-stamp-start: "scriptversion="
787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# time-stamp-format: "%:y-%02m-%02d.%02H"
78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# time-stamp-time-zone: "UTC"
78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# time-stamp-end: "; # UTC"
790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# End:
791