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