1ca236e63SDag-Erling Smørgrav#! /bin/sh 2ca236e63SDag-Erling Smørgrav# depcomp - compile a program generating dependencies as side-effects 3b33ab329SDag-Erling Smørgrav 423d17223SDag-Erling Smørgravscriptversion=2018-03-07.03; # UTC 5b33ab329SDag-Erling Smørgrav 63ba4c8c8SDag-Erling Smørgrav# Copyright (C) 1999-2021 Free Software Foundation, Inc. 7ca236e63SDag-Erling Smørgrav 8ca236e63SDag-Erling Smørgrav# This program is free software; you can redistribute it and/or modify 9ca236e63SDag-Erling Smørgrav# it under the terms of the GNU General Public License as published by 10ca236e63SDag-Erling Smørgrav# the Free Software Foundation; either version 2, or (at your option) 11ca236e63SDag-Erling Smørgrav# any later version. 12ca236e63SDag-Erling Smørgrav 13ca236e63SDag-Erling Smørgrav# This program is distributed in the hope that it will be useful, 14ca236e63SDag-Erling Smørgrav# but WITHOUT ANY WARRANTY; without even the implied warranty of 15ca236e63SDag-Erling Smørgrav# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16ca236e63SDag-Erling Smørgrav# GNU General Public License for more details. 17ca236e63SDag-Erling Smørgrav 18ca236e63SDag-Erling Smørgrav# You should have received a copy of the GNU General Public License 1923d17223SDag-Erling Smørgrav# along with this program. If not, see <https://www.gnu.org/licenses/>. 20ca236e63SDag-Erling Smørgrav 21ca236e63SDag-Erling Smørgrav# As a special exception to the GNU General Public License, if you 22ca236e63SDag-Erling Smørgrav# distribute this file as part of a program that contains a 23ca236e63SDag-Erling Smørgrav# configuration script generated by Autoconf, you may include it under 24ca236e63SDag-Erling Smørgrav# the same distribution terms that you use for the rest of that program. 25ca236e63SDag-Erling Smørgrav 26ca236e63SDag-Erling Smørgrav# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27ca236e63SDag-Erling Smørgrav 28b33ab329SDag-Erling Smørgravcase $1 in 29b33ab329SDag-Erling Smørgrav '') 30ce77a8d6SDag-Erling Smørgrav echo "$0: No command. Try '$0 --help' for more information." 1>&2 31b33ab329SDag-Erling Smørgrav exit 1; 32b33ab329SDag-Erling Smørgrav ;; 33b33ab329SDag-Erling Smørgrav -h | --h*) 34b33ab329SDag-Erling Smørgrav cat <<\EOF 35b33ab329SDag-Erling SmørgravUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36b33ab329SDag-Erling Smørgrav 37b33ab329SDag-Erling SmørgravRun PROGRAMS ARGS to compile a file, generating dependencies 38b33ab329SDag-Erling Smørgravas side-effects. 39b33ab329SDag-Erling Smørgrav 40b33ab329SDag-Erling SmørgravEnvironment variables: 41b33ab329SDag-Erling Smørgrav depmode Dependency tracking mode. 42ce77a8d6SDag-Erling Smørgrav source Source file read by 'PROGRAMS ARGS'. 43ce77a8d6SDag-Erling Smørgrav object Object file output by 'PROGRAMS ARGS'. 44fe980754SDag-Erling Smørgrav DEPDIR directory where to store dependencies. 45b33ab329SDag-Erling Smørgrav depfile Dependency file to output. 46ce77a8d6SDag-Erling Smørgrav tmpdepfile Temporary file to use when outputting dependencies. 47b33ab329SDag-Erling Smørgrav libtool Whether libtool is used (yes/no). 48b33ab329SDag-Erling Smørgrav 49b33ab329SDag-Erling SmørgravReport bugs to <bug-automake@gnu.org>. 50b33ab329SDag-Erling SmørgravEOF 51fe980754SDag-Erling Smørgrav exit $? 52b33ab329SDag-Erling Smørgrav ;; 53b33ab329SDag-Erling Smørgrav -v | --v*) 54b33ab329SDag-Erling Smørgrav echo "depcomp $scriptversion" 55fe980754SDag-Erling Smørgrav exit $? 56b33ab329SDag-Erling Smørgrav ;; 57b33ab329SDag-Erling Smørgravesac 58b33ab329SDag-Erling Smørgrav 59ce77a8d6SDag-Erling Smørgrav# Get the directory component of the given path, and save it in the 60ce77a8d6SDag-Erling Smørgrav# global variables '$dir'. Note that this directory component will 61ce77a8d6SDag-Erling Smørgrav# be either empty or ending with a '/' character. This is deliberate. 62ce77a8d6SDag-Erling Smørgravset_dir_from () 63ce77a8d6SDag-Erling Smørgrav{ 64ce77a8d6SDag-Erling Smørgrav case $1 in 65ce77a8d6SDag-Erling Smørgrav */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66ce77a8d6SDag-Erling Smørgrav *) dir=;; 67ce77a8d6SDag-Erling Smørgrav esac 68ce77a8d6SDag-Erling Smørgrav} 69ce77a8d6SDag-Erling Smørgrav 70ce77a8d6SDag-Erling Smørgrav# Get the suffix-stripped basename of the given path, and save it the 71ce77a8d6SDag-Erling Smørgrav# global variable '$base'. 72ce77a8d6SDag-Erling Smørgravset_base_from () 73ce77a8d6SDag-Erling Smørgrav{ 74ce77a8d6SDag-Erling Smørgrav base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75ce77a8d6SDag-Erling Smørgrav} 76ce77a8d6SDag-Erling Smørgrav 77ce77a8d6SDag-Erling Smørgrav# If no dependency file was actually created by the compiler invocation, 78ce77a8d6SDag-Erling Smørgrav# we still have to create a dummy depfile, to avoid errors with the 79ce77a8d6SDag-Erling Smørgrav# Makefile "include basename.Plo" scheme. 80ce77a8d6SDag-Erling Smørgravmake_dummy_depfile () 81ce77a8d6SDag-Erling Smørgrav{ 82ce77a8d6SDag-Erling Smørgrav echo "#dummy" > "$depfile" 83ce77a8d6SDag-Erling Smørgrav} 84ce77a8d6SDag-Erling Smørgrav 85ce77a8d6SDag-Erling Smørgrav# Factor out some common post-processing of the generated depfile. 86ce77a8d6SDag-Erling Smørgrav# Requires the auxiliary global variable '$tmpdepfile' to be set. 87ce77a8d6SDag-Erling Smørgravaix_post_process_depfile () 88ce77a8d6SDag-Erling Smørgrav{ 89ce77a8d6SDag-Erling Smørgrav # If the compiler actually managed to produce a dependency file, 90ce77a8d6SDag-Erling Smørgrav # post-process it. 91ce77a8d6SDag-Erling Smørgrav if test -f "$tmpdepfile"; then 92ce77a8d6SDag-Erling Smørgrav # Each line is of the form 'foo.o: dependency.h'. 93ce77a8d6SDag-Erling Smørgrav # Do two passes, one to just change these to 94ce77a8d6SDag-Erling Smørgrav # $object: dependency.h 95ce77a8d6SDag-Erling Smørgrav # and one to simply output 96ce77a8d6SDag-Erling Smørgrav # dependency.h: 97ce77a8d6SDag-Erling Smørgrav # which is needed to avoid the deleted-header problem. 98ce77a8d6SDag-Erling Smørgrav { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99ce77a8d6SDag-Erling Smørgrav sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100ce77a8d6SDag-Erling Smørgrav } > "$depfile" 101ce77a8d6SDag-Erling Smørgrav rm -f "$tmpdepfile" 102ce77a8d6SDag-Erling Smørgrav else 103ce77a8d6SDag-Erling Smørgrav make_dummy_depfile 104ce77a8d6SDag-Erling Smørgrav fi 105ce77a8d6SDag-Erling Smørgrav} 106ce77a8d6SDag-Erling Smørgrav 107ce77a8d6SDag-Erling Smørgrav# A tabulation character. 108ce77a8d6SDag-Erling Smørgravtab=' ' 109ce77a8d6SDag-Erling Smørgrav# A newline character. 110ce77a8d6SDag-Erling Smørgravnl=' 111ce77a8d6SDag-Erling Smørgrav' 112ce77a8d6SDag-Erling Smørgrav# Character ranges might be problematic outside the C locale. 113ce77a8d6SDag-Erling Smørgrav# These definitions help. 114ce77a8d6SDag-Erling Smørgravupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115ce77a8d6SDag-Erling Smørgravlower=abcdefghijklmnopqrstuvwxyz 116ce77a8d6SDag-Erling Smørgravdigits=0123456789 117ce77a8d6SDag-Erling Smørgravalpha=${upper}${lower} 118ce77a8d6SDag-Erling Smørgrav 119ca236e63SDag-Erling Smørgravif test -z "$depmode" || test -z "$source" || test -z "$object"; then 120ca236e63SDag-Erling Smørgrav echo "depcomp: Variables source, object and depmode must be set" 1>&2 121ca236e63SDag-Erling Smørgrav exit 1 122ca236e63SDag-Erling Smørgravfi 123ca236e63SDag-Erling Smørgrav 124fe980754SDag-Erling Smørgrav# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125fe980754SDag-Erling Smørgravdepfile=${depfile-`echo "$object" | 126fe980754SDag-Erling Smørgrav sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127ca236e63SDag-Erling Smørgravtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128ca236e63SDag-Erling Smørgrav 129ca236e63SDag-Erling Smørgravrm -f "$tmpdepfile" 130ca236e63SDag-Erling Smørgrav 131ce77a8d6SDag-Erling Smørgrav# Avoid interferences from the environment. 132ce77a8d6SDag-Erling Smørgravgccflag= dashmflag= 133ce77a8d6SDag-Erling Smørgrav 134ca236e63SDag-Erling Smørgrav# Some modes work just like other modes, but use different flags. We 135ca236e63SDag-Erling Smørgrav# parameterize here, but still list the modes in the big case below, 136ca236e63SDag-Erling Smørgrav# to make depend.m4 easier to write. Note that we *cannot* use a case 137ca236e63SDag-Erling Smørgrav# here, because this file can only contain one case statement. 138ca236e63SDag-Erling Smørgravif test "$depmode" = hp; then 139ca236e63SDag-Erling Smørgrav # HP compiler uses -M and no extra arg. 140ca236e63SDag-Erling Smørgrav gccflag=-M 141ca236e63SDag-Erling Smørgrav depmode=gcc 142ca236e63SDag-Erling Smørgravfi 143ca236e63SDag-Erling Smørgrav 144ca236e63SDag-Erling Smørgravif test "$depmode" = dashXmstdout; then 145ca236e63SDag-Erling Smørgrav # This is just like dashmstdout with a different argument. 146ca236e63SDag-Erling Smørgrav dashmflag=-xM 147ca236e63SDag-Erling Smørgrav depmode=dashmstdout 148ca236e63SDag-Erling Smørgravfi 149ca236e63SDag-Erling Smørgrav 1507f106882SDag-Erling Smørgravcygpath_u="cygpath -u -f -" 1517f106882SDag-Erling Smørgravif test "$depmode" = msvcmsys; then 1527f106882SDag-Erling Smørgrav # This is just like msvisualcpp but w/o cygpath translation. 1537f106882SDag-Erling Smørgrav # Just convert the backslash-escaped backslashes to single forward 1547f106882SDag-Erling Smørgrav # slashes to satisfy depend.m4 155ce77a8d6SDag-Erling Smørgrav cygpath_u='sed s,\\\\,/,g' 1567f106882SDag-Erling Smørgrav depmode=msvisualcpp 1577f106882SDag-Erling Smørgravfi 1587f106882SDag-Erling Smørgrav 159ce77a8d6SDag-Erling Smørgravif test "$depmode" = msvc7msys; then 160ce77a8d6SDag-Erling Smørgrav # This is just like msvc7 but w/o cygpath translation. 161ce77a8d6SDag-Erling Smørgrav # Just convert the backslash-escaped backslashes to single forward 162ce77a8d6SDag-Erling Smørgrav # slashes to satisfy depend.m4 163ce77a8d6SDag-Erling Smørgrav cygpath_u='sed s,\\\\,/,g' 164ce77a8d6SDag-Erling Smørgrav depmode=msvc7 165ce77a8d6SDag-Erling Smørgravfi 166ce77a8d6SDag-Erling Smørgrav 167ce77a8d6SDag-Erling Smørgravif test "$depmode" = xlc; then 168ce77a8d6SDag-Erling Smørgrav # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169ce77a8d6SDag-Erling Smørgrav gccflag=-qmakedep=gcc,-MF 170ce77a8d6SDag-Erling Smørgrav depmode=gcc 171ce77a8d6SDag-Erling Smørgravfi 172ce77a8d6SDag-Erling Smørgrav 173ca236e63SDag-Erling Smørgravcase "$depmode" in 174ca236e63SDag-Erling Smørgravgcc3) 175ca236e63SDag-Erling Smørgrav## gcc 3 implements dependency tracking that does exactly what 176ca236e63SDag-Erling Smørgrav## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177ca236e63SDag-Erling Smørgrav## it if -MD -MP comes after the -MF stuff. Hmm. 1787f106882SDag-Erling Smørgrav## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1797f106882SDag-Erling Smørgrav## the command line argument order; so add the flags where they 1807f106882SDag-Erling Smørgrav## appear in depend2.am. Note that the slowdown incurred here 1817f106882SDag-Erling Smørgrav## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1827f106882SDag-Erling Smørgrav for arg 1837f106882SDag-Erling Smørgrav do 1847f106882SDag-Erling Smørgrav case $arg in 1857f106882SDag-Erling Smørgrav -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1867f106882SDag-Erling Smørgrav *) set fnord "$@" "$arg" ;; 1877f106882SDag-Erling Smørgrav esac 1887f106882SDag-Erling Smørgrav shift # fnord 1897f106882SDag-Erling Smørgrav shift # $arg 1907f106882SDag-Erling Smørgrav done 1917f106882SDag-Erling Smørgrav "$@" 192ca236e63SDag-Erling Smørgrav stat=$? 193ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 194ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 195ca236e63SDag-Erling Smørgrav exit $stat 196ca236e63SDag-Erling Smørgrav fi 197ca236e63SDag-Erling Smørgrav mv "$tmpdepfile" "$depfile" 198ca236e63SDag-Erling Smørgrav ;; 199ca236e63SDag-Erling Smørgrav 200ca236e63SDag-Erling Smørgravgcc) 201ce77a8d6SDag-Erling Smørgrav## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202ce77a8d6SDag-Erling Smørgrav## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203ce77a8d6SDag-Erling Smørgrav## (see the conditional assignment to $gccflag above). 204ca236e63SDag-Erling Smørgrav## There are various ways to get dependency output from gcc. Here's 205ca236e63SDag-Erling Smørgrav## why we pick this rather obscure method: 206ca236e63SDag-Erling Smørgrav## - Don't want to use -MD because we'd like the dependencies to end 207ca236e63SDag-Erling Smørgrav## up in a subdir. Having to rename by hand is ugly. 208ca236e63SDag-Erling Smørgrav## (We might end up doing this anyway to support other compilers.) 209ca236e63SDag-Erling Smørgrav## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210ce77a8d6SDag-Erling Smørgrav## -MM, not -M (despite what the docs say). Also, it might not be 211ce77a8d6SDag-Erling Smørgrav## supported by the other compilers which use the 'gcc' depmode. 212ca236e63SDag-Erling Smørgrav## - Using -M directly means running the compiler twice (even worse 213ca236e63SDag-Erling Smørgrav## than renaming). 214ca236e63SDag-Erling Smørgrav if test -z "$gccflag"; then 215ca236e63SDag-Erling Smørgrav gccflag=-MD, 216ca236e63SDag-Erling Smørgrav fi 217ca236e63SDag-Erling Smørgrav "$@" -Wp,"$gccflag$tmpdepfile" 218ca236e63SDag-Erling Smørgrav stat=$? 219ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 220ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 221ca236e63SDag-Erling Smørgrav exit $stat 222ca236e63SDag-Erling Smørgrav fi 223ca236e63SDag-Erling Smørgrav rm -f "$depfile" 224ca236e63SDag-Erling Smørgrav echo "$object : \\" > "$depfile" 225ce77a8d6SDag-Erling Smørgrav # The second -e expression handles DOS-style file names with drive 226ce77a8d6SDag-Erling Smørgrav # letters. 227ca236e63SDag-Erling Smørgrav sed -e 's/^[^:]*: / /' \ 228ca236e63SDag-Erling Smørgrav -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229ce77a8d6SDag-Erling Smørgrav## This next piece of magic avoids the "deleted header file" problem. 230ca236e63SDag-Erling Smørgrav## The problem is that when a header file which appears in a .P file 231ca236e63SDag-Erling Smørgrav## is deleted, the dependency causes make to die (because there is 232ca236e63SDag-Erling Smørgrav## typically no way to rebuild the header). We avoid this by adding 233ca236e63SDag-Erling Smørgrav## dummy dependencies for each header file. Too bad gcc doesn't do 234ca236e63SDag-Erling Smørgrav## this for us directly. 235ce77a8d6SDag-Erling Smørgrav## Some versions of gcc put a space before the ':'. On the theory 236ca236e63SDag-Erling Smørgrav## that the space means something, we add a space to the output as 237ce77a8d6SDag-Erling Smørgrav## well. hp depmode also adds that space, but also prefixes the VPATH 238ce77a8d6SDag-Erling Smørgrav## to the object. Take care to not repeat it in the output. 239ca236e63SDag-Erling Smørgrav## Some versions of the HPUX 10.20 sed can't process this invocation 240ca236e63SDag-Erling Smørgrav## correctly. Breaking it into two sed invocations is a workaround. 241ce77a8d6SDag-Erling Smørgrav tr ' ' "$nl" < "$tmpdepfile" \ 242ce77a8d6SDag-Erling Smørgrav | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243ce77a8d6SDag-Erling Smørgrav | sed -e 's/$/ :/' >> "$depfile" 244ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 245ca236e63SDag-Erling Smørgrav ;; 246ca236e63SDag-Erling Smørgrav 247ca236e63SDag-Erling Smørgravhp) 248ca236e63SDag-Erling Smørgrav # This case exists only to let depend.m4 do its work. It works by 249ca236e63SDag-Erling Smørgrav # looking at the text of this script. This case will never be run, 250ca236e63SDag-Erling Smørgrav # since it is checked for above. 251ca236e63SDag-Erling Smørgrav exit 1 252ca236e63SDag-Erling Smørgrav ;; 253ca236e63SDag-Erling Smørgrav 254ca236e63SDag-Erling Smørgravsgi) 255ca236e63SDag-Erling Smørgrav if test "$libtool" = yes; then 256ca236e63SDag-Erling Smørgrav "$@" "-Wp,-MDupdate,$tmpdepfile" 257ca236e63SDag-Erling Smørgrav else 258ca236e63SDag-Erling Smørgrav "$@" -MDupdate "$tmpdepfile" 259ca236e63SDag-Erling Smørgrav fi 260ca236e63SDag-Erling Smørgrav stat=$? 261ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 262ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 263ca236e63SDag-Erling Smørgrav exit $stat 264ca236e63SDag-Erling Smørgrav fi 265ca236e63SDag-Erling Smørgrav rm -f "$depfile" 266ca236e63SDag-Erling Smørgrav 267ca236e63SDag-Erling Smørgrav if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268ca236e63SDag-Erling Smørgrav echo "$object : \\" > "$depfile" 269ca236e63SDag-Erling Smørgrav # Clip off the initial element (the dependent). Don't try to be 270ca236e63SDag-Erling Smørgrav # clever and replace this with sed code, as IRIX sed won't handle 271ca236e63SDag-Erling Smørgrav # lines with more than a fixed number of characters (4096 in 272ca236e63SDag-Erling Smørgrav # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273ce77a8d6SDag-Erling Smørgrav # the IRIX cc adds comments like '#:fec' to the end of the 274ca236e63SDag-Erling Smørgrav # dependency line. 275ce77a8d6SDag-Erling Smørgrav tr ' ' "$nl" < "$tmpdepfile" \ 276ce77a8d6SDag-Erling Smørgrav | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277ce77a8d6SDag-Erling Smørgrav | tr "$nl" ' ' >> "$depfile" 2787f106882SDag-Erling Smørgrav echo >> "$depfile" 279ca236e63SDag-Erling Smørgrav # The second pass generates a dummy entry for each header file. 280ce77a8d6SDag-Erling Smørgrav tr ' ' "$nl" < "$tmpdepfile" \ 281ca236e63SDag-Erling Smørgrav | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2827f106882SDag-Erling Smørgrav >> "$depfile" 283ca236e63SDag-Erling Smørgrav else 284ce77a8d6SDag-Erling Smørgrav make_dummy_depfile 285ca236e63SDag-Erling Smørgrav fi 286ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 287ca236e63SDag-Erling Smørgrav ;; 288ca236e63SDag-Erling Smørgrav 289ce77a8d6SDag-Erling Smørgravxlc) 290ce77a8d6SDag-Erling Smørgrav # This case exists only to let depend.m4 do its work. It works by 291ce77a8d6SDag-Erling Smørgrav # looking at the text of this script. This case will never be run, 292ce77a8d6SDag-Erling Smørgrav # since it is checked for above. 293ce77a8d6SDag-Erling Smørgrav exit 1 294ce77a8d6SDag-Erling Smørgrav ;; 295ce77a8d6SDag-Erling Smørgrav 296ca236e63SDag-Erling Smørgravaix) 297ca236e63SDag-Erling Smørgrav # The C for AIX Compiler uses -M and outputs the dependencies 298b33ab329SDag-Erling Smørgrav # in a .u file. In older versions, this file always lives in the 299ce77a8d6SDag-Erling Smørgrav # current directory. Also, the AIX compiler puts '$object:' at the 300b33ab329SDag-Erling Smørgrav # start of each line; $object doesn't have directory information. 301b33ab329SDag-Erling Smørgrav # Version 6 uses the directory in both cases. 302ce77a8d6SDag-Erling Smørgrav set_dir_from "$object" 303ce77a8d6SDag-Erling Smørgrav set_base_from "$object" 304ca236e63SDag-Erling Smørgrav if test "$libtool" = yes; then 3057f106882SDag-Erling Smørgrav tmpdepfile1=$dir$base.u 3067f106882SDag-Erling Smørgrav tmpdepfile2=$base.u 3077f106882SDag-Erling Smørgrav tmpdepfile3=$dir.libs/$base.u 308ca236e63SDag-Erling Smørgrav "$@" -Wc,-M 309ca236e63SDag-Erling Smørgrav else 3107f106882SDag-Erling Smørgrav tmpdepfile1=$dir$base.u 3117f106882SDag-Erling Smørgrav tmpdepfile2=$dir$base.u 3127f106882SDag-Erling Smørgrav tmpdepfile3=$dir$base.u 313ca236e63SDag-Erling Smørgrav "$@" -M 314ca236e63SDag-Erling Smørgrav fi 315ca236e63SDag-Erling Smørgrav stat=$? 316ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 3177f106882SDag-Erling Smørgrav rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318ca236e63SDag-Erling Smørgrav exit $stat 319ca236e63SDag-Erling Smørgrav fi 320ca236e63SDag-Erling Smørgrav 3217f106882SDag-Erling Smørgrav for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3227f106882SDag-Erling Smørgrav do 3237f106882SDag-Erling Smørgrav test -f "$tmpdepfile" && break 3247f106882SDag-Erling Smørgrav done 325ce77a8d6SDag-Erling Smørgrav aix_post_process_depfile 326ce77a8d6SDag-Erling Smørgrav ;; 327ce77a8d6SDag-Erling Smørgrav 328ce77a8d6SDag-Erling Smørgravtcc) 329ce77a8d6SDag-Erling Smørgrav # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330ce77a8d6SDag-Erling Smørgrav # FIXME: That version still under development at the moment of writing. 331ce77a8d6SDag-Erling Smørgrav # Make that this statement remains true also for stable, released 332ce77a8d6SDag-Erling Smørgrav # versions. 333ce77a8d6SDag-Erling Smørgrav # It will wrap lines (doesn't matter whether long or short) with a 334ce77a8d6SDag-Erling Smørgrav # trailing '\', as in: 335ce77a8d6SDag-Erling Smørgrav # 336ce77a8d6SDag-Erling Smørgrav # foo.o : \ 337ce77a8d6SDag-Erling Smørgrav # foo.c \ 338ce77a8d6SDag-Erling Smørgrav # foo.h \ 339ce77a8d6SDag-Erling Smørgrav # 340ce77a8d6SDag-Erling Smørgrav # It will put a trailing '\' even on the last line, and will use leading 341ce77a8d6SDag-Erling Smørgrav # spaces rather than leading tabs (at least since its commit 0394caf7 342ce77a8d6SDag-Erling Smørgrav # "Emit spaces for -MD"). 343ce77a8d6SDag-Erling Smørgrav "$@" -MD -MF "$tmpdepfile" 344ce77a8d6SDag-Erling Smørgrav stat=$? 345ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 346ce77a8d6SDag-Erling Smørgrav rm -f "$tmpdepfile" 347ce77a8d6SDag-Erling Smørgrav exit $stat 348ca236e63SDag-Erling Smørgrav fi 349ce77a8d6SDag-Erling Smørgrav rm -f "$depfile" 350ce77a8d6SDag-Erling Smørgrav # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351ce77a8d6SDag-Erling Smørgrav # We have to change lines of the first kind to '$object: \'. 352ce77a8d6SDag-Erling Smørgrav sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353ce77a8d6SDag-Erling Smørgrav # And for each line of the second kind, we have to emit a 'dep.h:' 354ce77a8d6SDag-Erling Smørgrav # dummy dependency, to avoid the deleted-header problem. 355ce77a8d6SDag-Erling Smørgrav sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 357ca236e63SDag-Erling Smørgrav ;; 358ca236e63SDag-Erling Smørgrav 359ce77a8d6SDag-Erling Smørgrav## The order of this option in the case statement is important, since the 360ce77a8d6SDag-Erling Smørgrav## shell code in configure will try each of these formats in the order 361ce77a8d6SDag-Erling Smørgrav## listed in this file. A plain '-MD' option would be understood by many 362ce77a8d6SDag-Erling Smørgrav## compilers, so we must ensure this comes after the gcc and icc options. 363ce77a8d6SDag-Erling Smørgravpgcc) 364ce77a8d6SDag-Erling Smørgrav # Portland's C compiler understands '-MD'. 365ce77a8d6SDag-Erling Smørgrav # Will always output deps to 'file.d' where file is the root name of the 366ce77a8d6SDag-Erling Smørgrav # source file under compilation, even if file resides in a subdirectory. 367ce77a8d6SDag-Erling Smørgrav # The object file name does not affect the name of the '.d' file. 368ce77a8d6SDag-Erling Smørgrav # pgcc 10.2 will output 369b33ab329SDag-Erling Smørgrav # foo.o: sub/foo.c sub/foo.h 370ce77a8d6SDag-Erling Smørgrav # and will wrap long lines using '\' : 371b33ab329SDag-Erling Smørgrav # foo.o: sub/foo.c ... \ 372b33ab329SDag-Erling Smørgrav # sub/foo.h ... \ 373b33ab329SDag-Erling Smørgrav # ... 374ce77a8d6SDag-Erling Smørgrav set_dir_from "$object" 375ce77a8d6SDag-Erling Smørgrav # Use the source, not the object, to determine the base name, since 376ce77a8d6SDag-Erling Smørgrav # that's sadly what pgcc will do too. 377ce77a8d6SDag-Erling Smørgrav set_base_from "$source" 378ce77a8d6SDag-Erling Smørgrav tmpdepfile=$base.d 379b33ab329SDag-Erling Smørgrav 380ce77a8d6SDag-Erling Smørgrav # For projects that build the same source file twice into different object 381ce77a8d6SDag-Erling Smørgrav # files, the pgcc approach of using the *source* file root name can cause 382ce77a8d6SDag-Erling Smørgrav # problems in parallel builds. Use a locking strategy to avoid stomping on 383ce77a8d6SDag-Erling Smørgrav # the same $tmpdepfile. 384ce77a8d6SDag-Erling Smørgrav lockdir=$base.d-lock 385ce77a8d6SDag-Erling Smørgrav trap " 386ce77a8d6SDag-Erling Smørgrav echo '$0: caught signal, cleaning up...' >&2 387ce77a8d6SDag-Erling Smørgrav rmdir '$lockdir' 388ce77a8d6SDag-Erling Smørgrav exit 1 389ce77a8d6SDag-Erling Smørgrav " 1 2 13 15 390ce77a8d6SDag-Erling Smørgrav numtries=100 391ce77a8d6SDag-Erling Smørgrav i=$numtries 392ce77a8d6SDag-Erling Smørgrav while test $i -gt 0; do 393ce77a8d6SDag-Erling Smørgrav # mkdir is a portable test-and-set. 394ce77a8d6SDag-Erling Smørgrav if mkdir "$lockdir" 2>/dev/null; then 395ce77a8d6SDag-Erling Smørgrav # This process acquired the lock. 396ce77a8d6SDag-Erling Smørgrav "$@" -MD 397b33ab329SDag-Erling Smørgrav stat=$? 398ce77a8d6SDag-Erling Smørgrav # Release the lock. 399ce77a8d6SDag-Erling Smørgrav rmdir "$lockdir" 400ce77a8d6SDag-Erling Smørgrav break 401b33ab329SDag-Erling Smørgrav else 402ce77a8d6SDag-Erling Smørgrav # If the lock is being held by a different process, wait 403ce77a8d6SDag-Erling Smørgrav # until the winning process is done or we timeout. 404ce77a8d6SDag-Erling Smørgrav while test -d "$lockdir" && test $i -gt 0; do 405ce77a8d6SDag-Erling Smørgrav sleep 1 406ce77a8d6SDag-Erling Smørgrav i=`expr $i - 1` 407ce77a8d6SDag-Erling Smørgrav done 408ce77a8d6SDag-Erling Smørgrav fi 409ce77a8d6SDag-Erling Smørgrav i=`expr $i - 1` 410ce77a8d6SDag-Erling Smørgrav done 411ce77a8d6SDag-Erling Smørgrav trap - 1 2 13 15 412ce77a8d6SDag-Erling Smørgrav if test $i -le 0; then 413ce77a8d6SDag-Erling Smørgrav echo "$0: failed to acquire lock after $numtries attempts" >&2 414ce77a8d6SDag-Erling Smørgrav echo "$0: check lockdir '$lockdir'" >&2 415ce77a8d6SDag-Erling Smørgrav exit 1 416ce77a8d6SDag-Erling Smørgrav fi 417ce77a8d6SDag-Erling Smørgrav 418ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 419b33ab329SDag-Erling Smørgrav rm -f "$tmpdepfile" 420b33ab329SDag-Erling Smørgrav exit $stat 421b33ab329SDag-Erling Smørgrav fi 422b33ab329SDag-Erling Smørgrav rm -f "$depfile" 423b33ab329SDag-Erling Smørgrav # Each line is of the form `foo.o: dependent.h', 424b33ab329SDag-Erling Smørgrav # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425b33ab329SDag-Erling Smørgrav # Do two passes, one to just change these to 426b33ab329SDag-Erling Smørgrav # `$object: dependent.h' and one to simply `dependent.h:'. 427b33ab329SDag-Erling Smørgrav sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428b33ab329SDag-Erling Smørgrav # Some versions of the HPUX 10.20 sed can't process this invocation 429b33ab329SDag-Erling Smørgrav # correctly. Breaking it into two sed invocations is a workaround. 430ce77a8d6SDag-Erling Smørgrav sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431ce77a8d6SDag-Erling Smørgrav | sed -e 's/$/ :/' >> "$depfile" 432b33ab329SDag-Erling Smørgrav rm -f "$tmpdepfile" 433b33ab329SDag-Erling Smørgrav ;; 434b33ab329SDag-Erling Smørgrav 4357f106882SDag-Erling Smørgravhp2) 4367f106882SDag-Erling Smørgrav # The "hp" stanza above does not work with aCC (C++) and HP's ia64 4377f106882SDag-Erling Smørgrav # compilers, which have integrated preprocessors. The correct option 4387f106882SDag-Erling Smørgrav # to use with these is +Maked; it writes dependencies to a file named 4397f106882SDag-Erling Smørgrav # 'foo.d', which lands next to the object file, wherever that 4407f106882SDag-Erling Smørgrav # happens to be. 4417f106882SDag-Erling Smørgrav # Much of this is similar to the tru64 case; see comments there. 442ce77a8d6SDag-Erling Smørgrav set_dir_from "$object" 443ce77a8d6SDag-Erling Smørgrav set_base_from "$object" 4447f106882SDag-Erling Smørgrav if test "$libtool" = yes; then 4457f106882SDag-Erling Smørgrav tmpdepfile1=$dir$base.d 4467f106882SDag-Erling Smørgrav tmpdepfile2=$dir.libs/$base.d 4477f106882SDag-Erling Smørgrav "$@" -Wc,+Maked 4487f106882SDag-Erling Smørgrav else 4497f106882SDag-Erling Smørgrav tmpdepfile1=$dir$base.d 4507f106882SDag-Erling Smørgrav tmpdepfile2=$dir$base.d 4517f106882SDag-Erling Smørgrav "$@" +Maked 4527f106882SDag-Erling Smørgrav fi 4537f106882SDag-Erling Smørgrav stat=$? 454ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 4557f106882SDag-Erling Smørgrav rm -f "$tmpdepfile1" "$tmpdepfile2" 4567f106882SDag-Erling Smørgrav exit $stat 4577f106882SDag-Erling Smørgrav fi 4587f106882SDag-Erling Smørgrav 4597f106882SDag-Erling Smørgrav for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 4607f106882SDag-Erling Smørgrav do 4617f106882SDag-Erling Smørgrav test -f "$tmpdepfile" && break 4627f106882SDag-Erling Smørgrav done 4637f106882SDag-Erling Smørgrav if test -f "$tmpdepfile"; then 464ce77a8d6SDag-Erling Smørgrav sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 465ce77a8d6SDag-Erling Smørgrav # Add 'dependent.h:' lines. 4667f106882SDag-Erling Smørgrav sed -ne '2,${ 4677f106882SDag-Erling Smørgrav s/^ *// 4687f106882SDag-Erling Smørgrav s/ \\*$// 4697f106882SDag-Erling Smørgrav s/$/:/ 4707f106882SDag-Erling Smørgrav p 4717f106882SDag-Erling Smørgrav }' "$tmpdepfile" >> "$depfile" 4727f106882SDag-Erling Smørgrav else 473ce77a8d6SDag-Erling Smørgrav make_dummy_depfile 4747f106882SDag-Erling Smørgrav fi 4757f106882SDag-Erling Smørgrav rm -f "$tmpdepfile" "$tmpdepfile2" 4767f106882SDag-Erling Smørgrav ;; 4777f106882SDag-Erling Smørgrav 478ca236e63SDag-Erling Smørgravtru64) 479b33ab329SDag-Erling Smørgrav # The Tru64 compiler uses -MD to generate dependencies as a side 480ce77a8d6SDag-Erling Smørgrav # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481ca236e63SDag-Erling Smørgrav # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482ce77a8d6SDag-Erling Smørgrav # dependencies in 'foo.d' instead, so we check for that too. 483ca236e63SDag-Erling Smørgrav # Subdirectories are respected. 484ce77a8d6SDag-Erling Smørgrav set_dir_from "$object" 485ce77a8d6SDag-Erling Smørgrav set_base_from "$object" 486ca236e63SDag-Erling Smørgrav 487ca236e63SDag-Erling Smørgrav if test "$libtool" = yes; then 488ce77a8d6SDag-Erling Smørgrav # Libtool generates 2 separate objects for the 2 libraries. These 489ce77a8d6SDag-Erling Smørgrav # two compilations output dependencies in $dir.libs/$base.o.d and 490fe980754SDag-Erling Smørgrav # in $dir$base.o.d. We have to check for both files, because 491fe980754SDag-Erling Smørgrav # one of the two compilations can be disabled. We should prefer 492fe980754SDag-Erling Smørgrav # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493fe980754SDag-Erling Smørgrav # automatically cleaned when .libs/ is deleted, while ignoring 494fe980754SDag-Erling Smørgrav # the former would cause a distcleancheck panic. 495ce77a8d6SDag-Erling Smørgrav tmpdepfile1=$dir$base.o.d # libtool 1.5 496ce77a8d6SDag-Erling Smørgrav tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497ce77a8d6SDag-Erling Smørgrav tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498ca236e63SDag-Erling Smørgrav "$@" -Wc,-MD 499ca236e63SDag-Erling Smørgrav else 500ce77a8d6SDag-Erling Smørgrav tmpdepfile1=$dir$base.d 501fe980754SDag-Erling Smørgrav tmpdepfile2=$dir$base.d 502fe980754SDag-Erling Smørgrav tmpdepfile3=$dir$base.d 503ca236e63SDag-Erling Smørgrav "$@" -MD 504ca236e63SDag-Erling Smørgrav fi 505ca236e63SDag-Erling Smørgrav 506ca236e63SDag-Erling Smørgrav stat=$? 507ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 508ce77a8d6SDag-Erling Smørgrav rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509ca236e63SDag-Erling Smørgrav exit $stat 510ca236e63SDag-Erling Smørgrav fi 511ca236e63SDag-Erling Smørgrav 512ce77a8d6SDag-Erling Smørgrav for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513fe980754SDag-Erling Smørgrav do 514fe980754SDag-Erling Smørgrav test -f "$tmpdepfile" && break 515fe980754SDag-Erling Smørgrav done 516ce77a8d6SDag-Erling Smørgrav # Same post-processing that is required for AIX mode. 517ce77a8d6SDag-Erling Smørgrav aix_post_process_depfile 518ce77a8d6SDag-Erling Smørgrav ;; 519ce77a8d6SDag-Erling Smørgrav 520ce77a8d6SDag-Erling Smørgravmsvc7) 521ce77a8d6SDag-Erling Smørgrav if test "$libtool" = yes; then 522ce77a8d6SDag-Erling Smørgrav showIncludes=-Wc,-showIncludes 523ca236e63SDag-Erling Smørgrav else 524ce77a8d6SDag-Erling Smørgrav showIncludes=-showIncludes 525ca236e63SDag-Erling Smørgrav fi 526ce77a8d6SDag-Erling Smørgrav "$@" $showIncludes > "$tmpdepfile" 527ce77a8d6SDag-Erling Smørgrav stat=$? 528ce77a8d6SDag-Erling Smørgrav grep -v '^Note: including file: ' "$tmpdepfile" 529ce77a8d6SDag-Erling Smørgrav if test $stat -ne 0; then 530ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 531ce77a8d6SDag-Erling Smørgrav exit $stat 532ce77a8d6SDag-Erling Smørgrav fi 533ce77a8d6SDag-Erling Smørgrav rm -f "$depfile" 534ce77a8d6SDag-Erling Smørgrav echo "$object : \\" > "$depfile" 535ce77a8d6SDag-Erling Smørgrav # The first sed program below extracts the file names and escapes 536ce77a8d6SDag-Erling Smørgrav # backslashes for cygpath. The second sed program outputs the file 537ce77a8d6SDag-Erling Smørgrav # name when reading, but also accumulates all include files in the 538ce77a8d6SDag-Erling Smørgrav # hold buffer in order to output them again at the end. This only 539ce77a8d6SDag-Erling Smørgrav # works with sed implementations that can handle large buffers. 540ce77a8d6SDag-Erling Smørgrav sed < "$tmpdepfile" -n ' 541ce77a8d6SDag-Erling Smørgrav/^Note: including file: *\(.*\)/ { 542ce77a8d6SDag-Erling Smørgrav s//\1/ 543ce77a8d6SDag-Erling Smørgrav s/\\/\\\\/g 544ce77a8d6SDag-Erling Smørgrav p 545ce77a8d6SDag-Erling Smørgrav}' | $cygpath_u | sort -u | sed -n ' 546ce77a8d6SDag-Erling Smørgravs/ /\\ /g 547ce77a8d6SDag-Erling Smørgravs/\(.*\)/'"$tab"'\1 \\/p 548ce77a8d6SDag-Erling Smørgravs/.\(.*\) \\/\1:/ 549ce77a8d6SDag-Erling SmørgravH 550ce77a8d6SDag-Erling Smørgrav$ { 551ce77a8d6SDag-Erling Smørgrav s/.*/'"$tab"'/ 552ce77a8d6SDag-Erling Smørgrav G 553ce77a8d6SDag-Erling Smørgrav p 554ce77a8d6SDag-Erling Smørgrav}' >> "$depfile" 555ce77a8d6SDag-Erling Smørgrav echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556ce77a8d6SDag-Erling Smørgrav rm -f "$tmpdepfile" 557ce77a8d6SDag-Erling Smørgrav ;; 558ce77a8d6SDag-Erling Smørgrav 559ce77a8d6SDag-Erling Smørgravmsvc7msys) 560ce77a8d6SDag-Erling Smørgrav # This case exists only to let depend.m4 do its work. It works by 561ce77a8d6SDag-Erling Smørgrav # looking at the text of this script. This case will never be run, 562ce77a8d6SDag-Erling Smørgrav # since it is checked for above. 563ce77a8d6SDag-Erling Smørgrav exit 1 564ca236e63SDag-Erling Smørgrav ;; 565ca236e63SDag-Erling Smørgrav 566ca236e63SDag-Erling Smørgrav#nosideeffect) 567ca236e63SDag-Erling Smørgrav # This comment above is used by automake to tell side-effect 568ca236e63SDag-Erling Smørgrav # dependency tracking mechanisms from slower ones. 569ca236e63SDag-Erling Smørgrav 570ca236e63SDag-Erling Smørgravdashmstdout) 571ca236e63SDag-Erling Smørgrav # Important note: in order to support this mode, a compiler *must* 572b33ab329SDag-Erling Smørgrav # always write the preprocessed file to stdout, regardless of -o. 573b33ab329SDag-Erling Smørgrav "$@" || exit $? 574b33ab329SDag-Erling Smørgrav 575b33ab329SDag-Erling Smørgrav # Remove the call to Libtool. 576b33ab329SDag-Erling Smørgrav if test "$libtool" = yes; then 5777f106882SDag-Erling Smørgrav while test "X$1" != 'X--mode=compile'; do 578b33ab329SDag-Erling Smørgrav shift 579b33ab329SDag-Erling Smørgrav done 580b33ab329SDag-Erling Smørgrav shift 581b33ab329SDag-Erling Smørgrav fi 582b33ab329SDag-Erling Smørgrav 583ce77a8d6SDag-Erling Smørgrav # Remove '-o $object'. 584b33ab329SDag-Erling Smørgrav IFS=" " 585ca236e63SDag-Erling Smørgrav for arg 586b33ab329SDag-Erling Smørgrav do 587b33ab329SDag-Erling Smørgrav case $arg in 588b33ab329SDag-Erling Smørgrav -o) 589b33ab329SDag-Erling Smørgrav shift 590ca236e63SDag-Erling Smørgrav ;; 591b33ab329SDag-Erling Smørgrav $object) 592b33ab329SDag-Erling Smørgrav shift 593b33ab329SDag-Erling Smørgrav ;; 594b33ab329SDag-Erling Smørgrav *) 595ca236e63SDag-Erling Smørgrav set fnord "$@" "$arg" 596ca236e63SDag-Erling Smørgrav shift # fnord 597b33ab329SDag-Erling Smørgrav shift # $arg 598ca236e63SDag-Erling Smørgrav ;; 599ca236e63SDag-Erling Smørgrav esac 600b33ab329SDag-Erling Smørgrav done 601b33ab329SDag-Erling Smørgrav 602b33ab329SDag-Erling Smørgrav test -z "$dashmflag" && dashmflag=-M 603ce77a8d6SDag-Erling Smørgrav # Require at least two characters before searching for ':' 604b33ab329SDag-Erling Smørgrav # in the target name. This is to cope with DOS-style filenames: 605ce77a8d6SDag-Erling Smørgrav # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606b33ab329SDag-Erling Smørgrav "$@" $dashmflag | 607ce77a8d6SDag-Erling Smørgrav sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608ca236e63SDag-Erling Smørgrav rm -f "$depfile" 609ca236e63SDag-Erling Smørgrav cat < "$tmpdepfile" > "$depfile" 610ce77a8d6SDag-Erling Smørgrav # Some versions of the HPUX 10.20 sed can't process this sed invocation 611ce77a8d6SDag-Erling Smørgrav # correctly. Breaking it into two sed invocations is a workaround. 612ce77a8d6SDag-Erling Smørgrav tr ' ' "$nl" < "$tmpdepfile" \ 613ce77a8d6SDag-Erling Smørgrav | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614ce77a8d6SDag-Erling Smørgrav | sed -e 's/$/ :/' >> "$depfile" 615ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 616ca236e63SDag-Erling Smørgrav ;; 617ca236e63SDag-Erling Smørgrav 618ca236e63SDag-Erling SmørgravdashXmstdout) 619ca236e63SDag-Erling Smørgrav # This case only exists to satisfy depend.m4. It is never actually 620ca236e63SDag-Erling Smørgrav # run, as this mode is specially recognized in the preamble. 621ca236e63SDag-Erling Smørgrav exit 1 622ca236e63SDag-Erling Smørgrav ;; 623ca236e63SDag-Erling Smørgrav 624ca236e63SDag-Erling Smørgravmakedepend) 625b33ab329SDag-Erling Smørgrav "$@" || exit $? 626b33ab329SDag-Erling Smørgrav # Remove any Libtool call 627b33ab329SDag-Erling Smørgrav if test "$libtool" = yes; then 6287f106882SDag-Erling Smørgrav while test "X$1" != 'X--mode=compile'; do 629b33ab329SDag-Erling Smørgrav shift 630b33ab329SDag-Erling Smørgrav done 631b33ab329SDag-Erling Smørgrav shift 632b33ab329SDag-Erling Smørgrav fi 633ca236e63SDag-Erling Smørgrav # X makedepend 634ca236e63SDag-Erling Smørgrav shift 6357f106882SDag-Erling Smørgrav cleared=no eat=no 6367f106882SDag-Erling Smørgrav for arg 6377f106882SDag-Erling Smørgrav do 638b33ab329SDag-Erling Smørgrav case $cleared in 639b33ab329SDag-Erling Smørgrav no) 640ca236e63SDag-Erling Smørgrav set ""; shift 641b33ab329SDag-Erling Smørgrav cleared=yes ;; 642ca236e63SDag-Erling Smørgrav esac 6437f106882SDag-Erling Smørgrav if test $eat = yes; then 6447f106882SDag-Erling Smørgrav eat=no 6457f106882SDag-Erling Smørgrav continue 6467f106882SDag-Erling Smørgrav fi 647ca236e63SDag-Erling Smørgrav case "$arg" in 648ca236e63SDag-Erling Smørgrav -D*|-I*) 649ca236e63SDag-Erling Smørgrav set fnord "$@" "$arg"; shift ;; 650b33ab329SDag-Erling Smørgrav # Strip any option that makedepend may not understand. Remove 651b33ab329SDag-Erling Smørgrav # the object too, otherwise makedepend will parse it as a source file. 6527f106882SDag-Erling Smørgrav -arch) 6537f106882SDag-Erling Smørgrav eat=yes ;; 654b33ab329SDag-Erling Smørgrav -*|$object) 655ca236e63SDag-Erling Smørgrav ;; 656ca236e63SDag-Erling Smørgrav *) 657ca236e63SDag-Erling Smørgrav set fnord "$@" "$arg"; shift ;; 658ca236e63SDag-Erling Smørgrav esac 659ca236e63SDag-Erling Smørgrav done 6607f106882SDag-Erling Smørgrav obj_suffix=`echo "$object" | sed 's/^.*\././'` 661ca236e63SDag-Erling Smørgrav touch "$tmpdepfile" 662b33ab329SDag-Erling Smørgrav ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663ca236e63SDag-Erling Smørgrav rm -f "$depfile" 664ce77a8d6SDag-Erling Smørgrav # makedepend may prepend the VPATH from the source file name to the object. 665ce77a8d6SDag-Erling Smørgrav # No need to regex-escape $object, excess matching of '.' is harmless. 666ce77a8d6SDag-Erling Smørgrav sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667ce77a8d6SDag-Erling Smørgrav # Some versions of the HPUX 10.20 sed can't process the last invocation 668ce77a8d6SDag-Erling Smørgrav # correctly. Breaking it into two sed invocations is a workaround. 669ce77a8d6SDag-Erling Smørgrav sed '1,2d' "$tmpdepfile" \ 670ce77a8d6SDag-Erling Smørgrav | tr ' ' "$nl" \ 671ce77a8d6SDag-Erling Smørgrav | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672ce77a8d6SDag-Erling Smørgrav | sed -e 's/$/ :/' >> "$depfile" 673ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" "$tmpdepfile".bak 674ca236e63SDag-Erling Smørgrav ;; 675ca236e63SDag-Erling Smørgrav 676ca236e63SDag-Erling Smørgravcpp) 677ca236e63SDag-Erling Smørgrav # Important note: in order to support this mode, a compiler *must* 678b33ab329SDag-Erling Smørgrav # always write the preprocessed file to stdout. 679b33ab329SDag-Erling Smørgrav "$@" || exit $? 680b33ab329SDag-Erling Smørgrav 681b33ab329SDag-Erling Smørgrav # Remove the call to Libtool. 682b33ab329SDag-Erling Smørgrav if test "$libtool" = yes; then 6837f106882SDag-Erling Smørgrav while test "X$1" != 'X--mode=compile'; do 684b33ab329SDag-Erling Smørgrav shift 685b33ab329SDag-Erling Smørgrav done 686b33ab329SDag-Erling Smørgrav shift 687b33ab329SDag-Erling Smørgrav fi 688b33ab329SDag-Erling Smørgrav 689ce77a8d6SDag-Erling Smørgrav # Remove '-o $object'. 690b33ab329SDag-Erling Smørgrav IFS=" " 691ca236e63SDag-Erling Smørgrav for arg 692b33ab329SDag-Erling Smørgrav do 693ca236e63SDag-Erling Smørgrav case $arg in 694b33ab329SDag-Erling Smørgrav -o) 695b33ab329SDag-Erling Smørgrav shift 696ca236e63SDag-Erling Smørgrav ;; 697b33ab329SDag-Erling Smørgrav $object) 698b33ab329SDag-Erling Smørgrav shift 699b33ab329SDag-Erling Smørgrav ;; 700b33ab329SDag-Erling Smørgrav *) 701ca236e63SDag-Erling Smørgrav set fnord "$@" "$arg" 702ca236e63SDag-Erling Smørgrav shift # fnord 703b33ab329SDag-Erling Smørgrav shift # $arg 704ca236e63SDag-Erling Smørgrav ;; 705ca236e63SDag-Erling Smørgrav esac 706b33ab329SDag-Erling Smørgrav done 707b33ab329SDag-Erling Smørgrav 708ce77a8d6SDag-Erling Smørgrav "$@" -E \ 709ce77a8d6SDag-Erling Smørgrav | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710ce77a8d6SDag-Erling Smørgrav -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711ce77a8d6SDag-Erling Smørgrav | sed '$ s: \\$::' > "$tmpdepfile" 712ca236e63SDag-Erling Smørgrav rm -f "$depfile" 713ca236e63SDag-Erling Smørgrav echo "$object : \\" > "$depfile" 714ca236e63SDag-Erling Smørgrav cat < "$tmpdepfile" >> "$depfile" 715ca236e63SDag-Erling Smørgrav sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 717ca236e63SDag-Erling Smørgrav ;; 718ca236e63SDag-Erling Smørgrav 719ca236e63SDag-Erling Smørgravmsvisualcpp) 720ca236e63SDag-Erling Smørgrav # Important note: in order to support this mode, a compiler *must* 7217f106882SDag-Erling Smørgrav # always write the preprocessed file to stdout. 722b33ab329SDag-Erling Smørgrav "$@" || exit $? 7237f106882SDag-Erling Smørgrav 7247f106882SDag-Erling Smørgrav # Remove the call to Libtool. 7257f106882SDag-Erling Smørgrav if test "$libtool" = yes; then 7267f106882SDag-Erling Smørgrav while test "X$1" != 'X--mode=compile'; do 7277f106882SDag-Erling Smørgrav shift 7287f106882SDag-Erling Smørgrav done 7297f106882SDag-Erling Smørgrav shift 7307f106882SDag-Erling Smørgrav fi 7317f106882SDag-Erling Smørgrav 732b33ab329SDag-Erling Smørgrav IFS=" " 733ca236e63SDag-Erling Smørgrav for arg 734b33ab329SDag-Erling Smørgrav do 735b33ab329SDag-Erling Smørgrav case "$arg" in 7367f106882SDag-Erling Smørgrav -o) 7377f106882SDag-Erling Smørgrav shift 7387f106882SDag-Erling Smørgrav ;; 7397f106882SDag-Erling Smørgrav $object) 7407f106882SDag-Erling Smørgrav shift 7417f106882SDag-Erling Smørgrav ;; 742b33ab329SDag-Erling Smørgrav "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743b33ab329SDag-Erling Smørgrav set fnord "$@" 744b33ab329SDag-Erling Smørgrav shift 745b33ab329SDag-Erling Smørgrav shift 746ca236e63SDag-Erling Smørgrav ;; 747b33ab329SDag-Erling Smørgrav *) 748ca236e63SDag-Erling Smørgrav set fnord "$@" "$arg" 749b33ab329SDag-Erling Smørgrav shift 750b33ab329SDag-Erling Smørgrav shift 751ca236e63SDag-Erling Smørgrav ;; 752ca236e63SDag-Erling Smørgrav esac 753b33ab329SDag-Erling Smørgrav done 7547f106882SDag-Erling Smørgrav "$@" -E 2>/dev/null | 7557f106882SDag-Erling Smørgrav sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756ca236e63SDag-Erling Smørgrav rm -f "$depfile" 757ca236e63SDag-Erling Smørgrav echo "$object : \\" > "$depfile" 758ce77a8d6SDag-Erling Smørgrav sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 759ce77a8d6SDag-Erling Smørgrav echo "$tab" >> "$depfile" 7607f106882SDag-Erling Smørgrav sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761ca236e63SDag-Erling Smørgrav rm -f "$tmpdepfile" 762ca236e63SDag-Erling Smørgrav ;; 763ca236e63SDag-Erling Smørgrav 7647f106882SDag-Erling Smørgravmsvcmsys) 7657f106882SDag-Erling Smørgrav # This case exists only to let depend.m4 do its work. It works by 7667f106882SDag-Erling Smørgrav # looking at the text of this script. This case will never be run, 7677f106882SDag-Erling Smørgrav # since it is checked for above. 7687f106882SDag-Erling Smørgrav exit 1 7697f106882SDag-Erling Smørgrav ;; 7707f106882SDag-Erling Smørgrav 771ca236e63SDag-Erling Smørgravnone) 772ca236e63SDag-Erling Smørgrav exec "$@" 773ca236e63SDag-Erling Smørgrav ;; 774ca236e63SDag-Erling Smørgrav 775ca236e63SDag-Erling Smørgrav*) 776ca236e63SDag-Erling Smørgrav echo "Unknown depmode $depmode" 1>&2 777ca236e63SDag-Erling Smørgrav exit 1 778ca236e63SDag-Erling Smørgrav ;; 779ca236e63SDag-Erling Smørgravesac 780ca236e63SDag-Erling Smørgrav 781ca236e63SDag-Erling Smørgravexit 0 782b33ab329SDag-Erling Smørgrav 783b33ab329SDag-Erling Smørgrav# Local Variables: 784b33ab329SDag-Erling Smørgrav# mode: shell-script 785b33ab329SDag-Erling Smørgrav# sh-indentation: 2 78623d17223SDag-Erling Smørgrav# eval: (add-hook 'before-save-hook 'time-stamp) 787b33ab329SDag-Erling Smørgrav# time-stamp-start: "scriptversion=" 788b33ab329SDag-Erling Smørgrav# time-stamp-format: "%:y-%02m-%02d.%02H" 78923d17223SDag-Erling Smørgrav# time-stamp-time-zone: "UTC0" 7907f106882SDag-Erling Smørgrav# time-stamp-end: "; # UTC" 791b33ab329SDag-Erling Smørgrav# End: 792