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