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