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