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