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