1de2362d3Smrg#! /bin/sh 2de2362d3Smrg# depcomp - compile a program generating dependencies as side-effects 3de2362d3Smrg 439413783Smrgscriptversion=2018-03-07.03; # UTC 5de2362d3Smrg 60a1d3ae0Smrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 7de2362d3Smrg 8de2362d3Smrg# This program is free software; you can redistribute it and/or modify 9de2362d3Smrg# it under the terms of the GNU General Public License as published by 10de2362d3Smrg# the Free Software Foundation; either version 2, or (at your option) 11de2362d3Smrg# any later version. 12de2362d3Smrg 13de2362d3Smrg# This program is distributed in the hope that it will be useful, 14de2362d3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 15de2362d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16de2362d3Smrg# GNU General Public License for more details. 17de2362d3Smrg 18de2362d3Smrg# You should have received a copy of the GNU General Public License 1939413783Smrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 20de2362d3Smrg 21de2362d3Smrg# As a special exception to the GNU General Public License, if you 22de2362d3Smrg# distribute this file as part of a program that contains a 23de2362d3Smrg# configuration script generated by Autoconf, you may include it under 24de2362d3Smrg# the same distribution terms that you use for the rest of that program. 25de2362d3Smrg 26de2362d3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27de2362d3Smrg 28de2362d3Smrgcase $1 in 29de2362d3Smrg '') 3018781e08Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 3118781e08Smrg exit 1; 3218781e08Smrg ;; 33de2362d3Smrg -h | --h*) 34de2362d3Smrg cat <<\EOF 35de2362d3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36de2362d3Smrg 37de2362d3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 38de2362d3Smrgas side-effects. 39de2362d3Smrg 40de2362d3SmrgEnvironment variables: 41de2362d3Smrg depmode Dependency tracking mode. 4218781e08Smrg source Source file read by 'PROGRAMS ARGS'. 4318781e08Smrg object Object file output by 'PROGRAMS ARGS'. 44de2362d3Smrg DEPDIR directory where to store dependencies. 45de2362d3Smrg depfile Dependency file to output. 4618781e08Smrg tmpdepfile Temporary file to use when outputting dependencies. 47de2362d3Smrg libtool Whether libtool is used (yes/no). 48de2362d3Smrg 49de2362d3SmrgReport bugs to <bug-automake@gnu.org>. 50de2362d3SmrgEOF 51de2362d3Smrg exit $? 52de2362d3Smrg ;; 53de2362d3Smrg -v | --v*) 54de2362d3Smrg echo "depcomp $scriptversion" 55de2362d3Smrg exit $? 56de2362d3Smrg ;; 57de2362d3Smrgesac 58de2362d3Smrg 5918781e08Smrg# Get the directory component of the given path, and save it in the 6018781e08Smrg# global variables '$dir'. Note that this directory component will 6118781e08Smrg# be either empty or ending with a '/' character. This is deliberate. 6218781e08Smrgset_dir_from () 6318781e08Smrg{ 6418781e08Smrg case $1 in 6518781e08Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 6618781e08Smrg *) dir=;; 6718781e08Smrg esac 6818781e08Smrg} 6918781e08Smrg 7018781e08Smrg# Get the suffix-stripped basename of the given path, and save it the 7118781e08Smrg# global variable '$base'. 7218781e08Smrgset_base_from () 7318781e08Smrg{ 7418781e08Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 7518781e08Smrg} 7618781e08Smrg 7718781e08Smrg# If no dependency file was actually created by the compiler invocation, 7818781e08Smrg# we still have to create a dummy depfile, to avoid errors with the 7918781e08Smrg# Makefile "include basename.Plo" scheme. 8018781e08Smrgmake_dummy_depfile () 8118781e08Smrg{ 8218781e08Smrg echo "#dummy" > "$depfile" 8318781e08Smrg} 8418781e08Smrg 8518781e08Smrg# Factor out some common post-processing of the generated depfile. 8618781e08Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 8718781e08Smrgaix_post_process_depfile () 8818781e08Smrg{ 8918781e08Smrg # If the compiler actually managed to produce a dependency file, 9018781e08Smrg # post-process it. 9118781e08Smrg if test -f "$tmpdepfile"; then 9218781e08Smrg # Each line is of the form 'foo.o: dependency.h'. 9318781e08Smrg # Do two passes, one to just change these to 9418781e08Smrg # $object: dependency.h 9518781e08Smrg # and one to simply output 9618781e08Smrg # dependency.h: 9718781e08Smrg # which is needed to avoid the deleted-header problem. 9818781e08Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 9918781e08Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 10018781e08Smrg } > "$depfile" 10118781e08Smrg rm -f "$tmpdepfile" 10218781e08Smrg else 10318781e08Smrg make_dummy_depfile 10418781e08Smrg fi 10518781e08Smrg} 10618781e08Smrg 10718781e08Smrg# A tabulation character. 10818781e08Smrgtab=' ' 10918781e08Smrg# A newline character. 11018781e08Smrgnl=' 11118781e08Smrg' 11218781e08Smrg# Character ranges might be problematic outside the C locale. 11318781e08Smrg# These definitions help. 11418781e08Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 11518781e08Smrglower=abcdefghijklmnopqrstuvwxyz 11618781e08Smrgdigits=0123456789 11718781e08Smrgalpha=${upper}${lower} 11818781e08Smrg 119de2362d3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 120de2362d3Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 121de2362d3Smrg exit 1 122de2362d3Smrgfi 123de2362d3Smrg 124de2362d3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125de2362d3Smrgdepfile=${depfile-`echo "$object" | 126de2362d3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127de2362d3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128de2362d3Smrg 129de2362d3Smrgrm -f "$tmpdepfile" 130de2362d3Smrg 13118781e08Smrg# Avoid interferences from the environment. 13218781e08Smrggccflag= dashmflag= 13318781e08Smrg 134de2362d3Smrg# Some modes work just like other modes, but use different flags. We 135de2362d3Smrg# parameterize here, but still list the modes in the big case below, 136de2362d3Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 137de2362d3Smrg# here, because this file can only contain one case statement. 138de2362d3Smrgif test "$depmode" = hp; then 139de2362d3Smrg # HP compiler uses -M and no extra arg. 140de2362d3Smrg gccflag=-M 141de2362d3Smrg depmode=gcc 142de2362d3Smrgfi 143de2362d3Smrg 144de2362d3Smrgif test "$depmode" = dashXmstdout; then 14518781e08Smrg # This is just like dashmstdout with a different argument. 14618781e08Smrg dashmflag=-xM 14718781e08Smrg depmode=dashmstdout 1480d16fef4Smrgfi 1490d16fef4Smrg 1500d16fef4Smrgcygpath_u="cygpath -u -f -" 1510d16fef4Smrgif test "$depmode" = msvcmsys; then 15218781e08Smrg # This is just like msvisualcpp but w/o cygpath translation. 15318781e08Smrg # Just convert the backslash-escaped backslashes to single forward 15418781e08Smrg # slashes to satisfy depend.m4 15518781e08Smrg cygpath_u='sed s,\\\\,/,g' 15618781e08Smrg depmode=msvisualcpp 15718781e08Smrgfi 15818781e08Smrg 15918781e08Smrgif test "$depmode" = msvc7msys; then 16018781e08Smrg # This is just like msvc7 but w/o cygpath translation. 16118781e08Smrg # Just convert the backslash-escaped backslashes to single forward 16218781e08Smrg # slashes to satisfy depend.m4 16318781e08Smrg cygpath_u='sed s,\\\\,/,g' 16418781e08Smrg depmode=msvc7 16518781e08Smrgfi 16618781e08Smrg 16718781e08Smrgif test "$depmode" = xlc; then 16818781e08Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 16918781e08Smrg gccflag=-qmakedep=gcc,-MF 17018781e08Smrg depmode=gcc 171de2362d3Smrgfi 172de2362d3Smrg 173de2362d3Smrgcase "$depmode" in 174de2362d3Smrggcc3) 175de2362d3Smrg## gcc 3 implements dependency tracking that does exactly what 176de2362d3Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177de2362d3Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 178de2362d3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 179de2362d3Smrg## the command line argument order; so add the flags where they 180de2362d3Smrg## appear in depend2.am. Note that the slowdown incurred here 181de2362d3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 182de2362d3Smrg for arg 183de2362d3Smrg do 184de2362d3Smrg case $arg in 185de2362d3Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 186de2362d3Smrg *) set fnord "$@" "$arg" ;; 187de2362d3Smrg esac 188de2362d3Smrg shift # fnord 189de2362d3Smrg shift # $arg 190de2362d3Smrg done 191de2362d3Smrg "$@" 192de2362d3Smrg stat=$? 19318781e08Smrg if test $stat -ne 0; then 194de2362d3Smrg rm -f "$tmpdepfile" 195de2362d3Smrg exit $stat 196de2362d3Smrg fi 197de2362d3Smrg mv "$tmpdepfile" "$depfile" 198de2362d3Smrg ;; 199de2362d3Smrg 200de2362d3Smrggcc) 20118781e08Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 20218781e08Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 20318781e08Smrg## (see the conditional assignment to $gccflag above). 204de2362d3Smrg## There are various ways to get dependency output from gcc. Here's 205de2362d3Smrg## why we pick this rather obscure method: 206de2362d3Smrg## - Don't want to use -MD because we'd like the dependencies to end 207de2362d3Smrg## up in a subdir. Having to rename by hand is ugly. 208de2362d3Smrg## (We might end up doing this anyway to support other compilers.) 209de2362d3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 21018781e08Smrg## -MM, not -M (despite what the docs say). Also, it might not be 21118781e08Smrg## supported by the other compilers which use the 'gcc' depmode. 212de2362d3Smrg## - Using -M directly means running the compiler twice (even worse 213de2362d3Smrg## than renaming). 214de2362d3Smrg if test -z "$gccflag"; then 215de2362d3Smrg gccflag=-MD, 216de2362d3Smrg fi 217de2362d3Smrg "$@" -Wp,"$gccflag$tmpdepfile" 218de2362d3Smrg stat=$? 21918781e08Smrg if test $stat -ne 0; then 220de2362d3Smrg rm -f "$tmpdepfile" 221de2362d3Smrg exit $stat 222de2362d3Smrg fi 223de2362d3Smrg rm -f "$depfile" 224de2362d3Smrg echo "$object : \\" > "$depfile" 22518781e08Smrg # The second -e expression handles DOS-style file names with drive 22618781e08Smrg # letters. 227de2362d3Smrg sed -e 's/^[^:]*: / /' \ 228de2362d3Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 22918781e08Smrg## This next piece of magic avoids the "deleted header file" problem. 230de2362d3Smrg## The problem is that when a header file which appears in a .P file 231de2362d3Smrg## is deleted, the dependency causes make to die (because there is 232de2362d3Smrg## typically no way to rebuild the header). We avoid this by adding 233de2362d3Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 234de2362d3Smrg## this for us directly. 23518781e08Smrg## Some versions of gcc put a space before the ':'. On the theory 236de2362d3Smrg## that the space means something, we add a space to the output as 23718781e08Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 23818781e08Smrg## to the object. Take care to not repeat it in the output. 239de2362d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 240de2362d3Smrg## correctly. Breaking it into two sed invocations is a workaround. 24118781e08Smrg tr ' ' "$nl" < "$tmpdepfile" \ 24218781e08Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 24318781e08Smrg | sed -e 's/$/ :/' >> "$depfile" 244de2362d3Smrg rm -f "$tmpdepfile" 245de2362d3Smrg ;; 246de2362d3Smrg 247de2362d3Smrghp) 248de2362d3Smrg # This case exists only to let depend.m4 do its work. It works by 249de2362d3Smrg # looking at the text of this script. This case will never be run, 250de2362d3Smrg # since it is checked for above. 251de2362d3Smrg exit 1 252de2362d3Smrg ;; 253de2362d3Smrg 254de2362d3Smrgsgi) 255de2362d3Smrg if test "$libtool" = yes; then 256de2362d3Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 257de2362d3Smrg else 258de2362d3Smrg "$@" -MDupdate "$tmpdepfile" 259de2362d3Smrg fi 260de2362d3Smrg stat=$? 26118781e08Smrg if test $stat -ne 0; then 262de2362d3Smrg rm -f "$tmpdepfile" 263de2362d3Smrg exit $stat 264de2362d3Smrg fi 265de2362d3Smrg rm -f "$depfile" 266de2362d3Smrg 267de2362d3Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268de2362d3Smrg echo "$object : \\" > "$depfile" 269de2362d3Smrg # Clip off the initial element (the dependent). Don't try to be 270de2362d3Smrg # clever and replace this with sed code, as IRIX sed won't handle 271de2362d3Smrg # lines with more than a fixed number of characters (4096 in 272de2362d3Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 27318781e08Smrg # the IRIX cc adds comments like '#:fec' to the end of the 274de2362d3Smrg # dependency line. 27518781e08Smrg tr ' ' "$nl" < "$tmpdepfile" \ 27618781e08Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 27718781e08Smrg | tr "$nl" ' ' >> "$depfile" 2780d16fef4Smrg echo >> "$depfile" 279de2362d3Smrg # The second pass generates a dummy entry for each header file. 28018781e08Smrg tr ' ' "$nl" < "$tmpdepfile" \ 28118781e08Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 28218781e08Smrg >> "$depfile" 283de2362d3Smrg else 28418781e08Smrg make_dummy_depfile 285de2362d3Smrg fi 286de2362d3Smrg rm -f "$tmpdepfile" 287de2362d3Smrg ;; 288de2362d3Smrg 28918781e08Smrgxlc) 29018781e08Smrg # This case exists only to let depend.m4 do its work. It works by 29118781e08Smrg # looking at the text of this script. This case will never be run, 29218781e08Smrg # since it is checked for above. 29318781e08Smrg exit 1 29418781e08Smrg ;; 29518781e08Smrg 296de2362d3Smrgaix) 297de2362d3Smrg # The C for AIX Compiler uses -M and outputs the dependencies 298de2362d3Smrg # in a .u file. In older versions, this file always lives in the 29918781e08Smrg # current directory. Also, the AIX compiler puts '$object:' at the 300de2362d3Smrg # start of each line; $object doesn't have directory information. 301de2362d3Smrg # Version 6 uses the directory in both cases. 30218781e08Smrg set_dir_from "$object" 30318781e08Smrg set_base_from "$object" 304de2362d3Smrg if test "$libtool" = yes; then 305de2362d3Smrg tmpdepfile1=$dir$base.u 306de2362d3Smrg tmpdepfile2=$base.u 307de2362d3Smrg tmpdepfile3=$dir.libs/$base.u 308de2362d3Smrg "$@" -Wc,-M 309de2362d3Smrg else 310de2362d3Smrg tmpdepfile1=$dir$base.u 311de2362d3Smrg tmpdepfile2=$dir$base.u 312de2362d3Smrg tmpdepfile3=$dir$base.u 313de2362d3Smrg "$@" -M 314de2362d3Smrg fi 315de2362d3Smrg stat=$? 31618781e08Smrg if test $stat -ne 0; then 317de2362d3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318de2362d3Smrg exit $stat 319de2362d3Smrg fi 320de2362d3Smrg 321de2362d3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 322de2362d3Smrg do 323de2362d3Smrg test -f "$tmpdepfile" && break 324de2362d3Smrg done 32518781e08Smrg aix_post_process_depfile 32618781e08Smrg ;; 32718781e08Smrg 32818781e08Smrgtcc) 32918781e08Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 33018781e08Smrg # FIXME: That version still under development at the moment of writing. 33118781e08Smrg # Make that this statement remains true also for stable, released 33218781e08Smrg # versions. 33318781e08Smrg # It will wrap lines (doesn't matter whether long or short) with a 33418781e08Smrg # trailing '\', as in: 33518781e08Smrg # 33618781e08Smrg # foo.o : \ 33718781e08Smrg # foo.c \ 33818781e08Smrg # foo.h \ 33918781e08Smrg # 34018781e08Smrg # It will put a trailing '\' even on the last line, and will use leading 34118781e08Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 34218781e08Smrg # "Emit spaces for -MD"). 34318781e08Smrg "$@" -MD -MF "$tmpdepfile" 34418781e08Smrg stat=$? 34518781e08Smrg if test $stat -ne 0; then 34618781e08Smrg rm -f "$tmpdepfile" 34718781e08Smrg exit $stat 348de2362d3Smrg fi 34918781e08Smrg rm -f "$depfile" 35018781e08Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 35118781e08Smrg # We have to change lines of the first kind to '$object: \'. 35218781e08Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 35318781e08Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 35418781e08Smrg # dummy dependency, to avoid the deleted-header problem. 35518781e08Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356de2362d3Smrg rm -f "$tmpdepfile" 357de2362d3Smrg ;; 358de2362d3Smrg 35918781e08Smrg## The order of this option in the case statement is important, since the 36018781e08Smrg## shell code in configure will try each of these formats in the order 36118781e08Smrg## listed in this file. A plain '-MD' option would be understood by many 36218781e08Smrg## compilers, so we must ensure this comes after the gcc and icc options. 36318781e08Smrgpgcc) 36418781e08Smrg # Portland's C compiler understands '-MD'. 36518781e08Smrg # Will always output deps to 'file.d' where file is the root name of the 36618781e08Smrg # source file under compilation, even if file resides in a subdirectory. 36718781e08Smrg # The object file name does not affect the name of the '.d' file. 36818781e08Smrg # pgcc 10.2 will output 369de2362d3Smrg # foo.o: sub/foo.c sub/foo.h 37018781e08Smrg # and will wrap long lines using '\' : 371de2362d3Smrg # foo.o: sub/foo.c ... \ 372de2362d3Smrg # sub/foo.h ... \ 373de2362d3Smrg # ... 37418781e08Smrg set_dir_from "$object" 37518781e08Smrg # Use the source, not the object, to determine the base name, since 37618781e08Smrg # that's sadly what pgcc will do too. 37718781e08Smrg set_base_from "$source" 37818781e08Smrg tmpdepfile=$base.d 37918781e08Smrg 38018781e08Smrg # For projects that build the same source file twice into different object 38118781e08Smrg # files, the pgcc approach of using the *source* file root name can cause 38218781e08Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 38318781e08Smrg # the same $tmpdepfile. 38418781e08Smrg lockdir=$base.d-lock 38518781e08Smrg trap " 38618781e08Smrg echo '$0: caught signal, cleaning up...' >&2 38718781e08Smrg rmdir '$lockdir' 38818781e08Smrg exit 1 38918781e08Smrg " 1 2 13 15 39018781e08Smrg numtries=100 39118781e08Smrg i=$numtries 39218781e08Smrg while test $i -gt 0; do 39318781e08Smrg # mkdir is a portable test-and-set. 39418781e08Smrg if mkdir "$lockdir" 2>/dev/null; then 39518781e08Smrg # This process acquired the lock. 39618781e08Smrg "$@" -MD 39718781e08Smrg stat=$? 39818781e08Smrg # Release the lock. 39918781e08Smrg rmdir "$lockdir" 40018781e08Smrg break 40118781e08Smrg else 40218781e08Smrg # If the lock is being held by a different process, wait 40318781e08Smrg # until the winning process is done or we timeout. 40418781e08Smrg while test -d "$lockdir" && test $i -gt 0; do 40518781e08Smrg sleep 1 40618781e08Smrg i=`expr $i - 1` 40718781e08Smrg done 40818781e08Smrg fi 40918781e08Smrg i=`expr $i - 1` 41018781e08Smrg done 41118781e08Smrg trap - 1 2 13 15 41218781e08Smrg if test $i -le 0; then 41318781e08Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 41418781e08Smrg echo "$0: check lockdir '$lockdir'" >&2 41518781e08Smrg exit 1 41618781e08Smrg fi 417de2362d3Smrg 41818781e08Smrg if test $stat -ne 0; then 419de2362d3Smrg rm -f "$tmpdepfile" 420de2362d3Smrg exit $stat 421de2362d3Smrg fi 422de2362d3Smrg rm -f "$depfile" 423de2362d3Smrg # Each line is of the form `foo.o: dependent.h', 424de2362d3Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425de2362d3Smrg # Do two passes, one to just change these to 426de2362d3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 427de2362d3Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428de2362d3Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 429de2362d3Smrg # correctly. Breaking it into two sed invocations is a workaround. 43018781e08Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 43118781e08Smrg | sed -e 's/$/ :/' >> "$depfile" 432de2362d3Smrg rm -f "$tmpdepfile" 433de2362d3Smrg ;; 434de2362d3Smrg 435de2362d3Smrghp2) 436de2362d3Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 437de2362d3Smrg # compilers, which have integrated preprocessors. The correct option 438de2362d3Smrg # to use with these is +Maked; it writes dependencies to a file named 439de2362d3Smrg # 'foo.d', which lands next to the object file, wherever that 440de2362d3Smrg # happens to be. 441de2362d3Smrg # Much of this is similar to the tru64 case; see comments there. 44218781e08Smrg set_dir_from "$object" 44318781e08Smrg set_base_from "$object" 444de2362d3Smrg if test "$libtool" = yes; then 445de2362d3Smrg tmpdepfile1=$dir$base.d 446de2362d3Smrg tmpdepfile2=$dir.libs/$base.d 447de2362d3Smrg "$@" -Wc,+Maked 448de2362d3Smrg else 449de2362d3Smrg tmpdepfile1=$dir$base.d 450de2362d3Smrg tmpdepfile2=$dir$base.d 451de2362d3Smrg "$@" +Maked 452de2362d3Smrg fi 453de2362d3Smrg stat=$? 45418781e08Smrg if test $stat -ne 0; then 455de2362d3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 456de2362d3Smrg exit $stat 457de2362d3Smrg fi 458de2362d3Smrg 459de2362d3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 460de2362d3Smrg do 461de2362d3Smrg test -f "$tmpdepfile" && break 462de2362d3Smrg done 463de2362d3Smrg if test -f "$tmpdepfile"; then 46418781e08Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 46518781e08Smrg # Add 'dependent.h:' lines. 4660d16fef4Smrg sed -ne '2,${ 46718781e08Smrg s/^ *// 46818781e08Smrg s/ \\*$// 46918781e08Smrg s/$/:/ 47018781e08Smrg p 47118781e08Smrg }' "$tmpdepfile" >> "$depfile" 472de2362d3Smrg else 47318781e08Smrg make_dummy_depfile 474de2362d3Smrg fi 475de2362d3Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 476de2362d3Smrg ;; 477de2362d3Smrg 478de2362d3Smrgtru64) 47918781e08Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 48018781e08Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 48118781e08Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 48218781e08Smrg # dependencies in 'foo.d' instead, so we check for that too. 48318781e08Smrg # Subdirectories are respected. 48418781e08Smrg set_dir_from "$object" 48518781e08Smrg set_base_from "$object" 48618781e08Smrg 48718781e08Smrg if test "$libtool" = yes; then 48818781e08Smrg # Libtool generates 2 separate objects for the 2 libraries. These 48918781e08Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 49018781e08Smrg # in $dir$base.o.d. We have to check for both files, because 49118781e08Smrg # one of the two compilations can be disabled. We should prefer 49218781e08Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 49318781e08Smrg # automatically cleaned when .libs/ is deleted, while ignoring 49418781e08Smrg # the former would cause a distcleancheck panic. 49518781e08Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 49618781e08Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 49718781e08Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 49818781e08Smrg "$@" -Wc,-MD 49918781e08Smrg else 50018781e08Smrg tmpdepfile1=$dir$base.d 50118781e08Smrg tmpdepfile2=$dir$base.d 50218781e08Smrg tmpdepfile3=$dir$base.d 50318781e08Smrg "$@" -MD 50418781e08Smrg fi 50518781e08Smrg 50618781e08Smrg stat=$? 50718781e08Smrg if test $stat -ne 0; then 50818781e08Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 50918781e08Smrg exit $stat 51018781e08Smrg fi 51118781e08Smrg 51218781e08Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 51318781e08Smrg do 51418781e08Smrg test -f "$tmpdepfile" && break 51518781e08Smrg done 51618781e08Smrg # Same post-processing that is required for AIX mode. 51718781e08Smrg aix_post_process_depfile 51818781e08Smrg ;; 51918781e08Smrg 52018781e08Smrgmsvc7) 52118781e08Smrg if test "$libtool" = yes; then 52218781e08Smrg showIncludes=-Wc,-showIncludes 52318781e08Smrg else 52418781e08Smrg showIncludes=-showIncludes 52518781e08Smrg fi 52618781e08Smrg "$@" $showIncludes > "$tmpdepfile" 52718781e08Smrg stat=$? 52818781e08Smrg grep -v '^Note: including file: ' "$tmpdepfile" 52918781e08Smrg if test $stat -ne 0; then 53018781e08Smrg rm -f "$tmpdepfile" 53118781e08Smrg exit $stat 53218781e08Smrg fi 53318781e08Smrg rm -f "$depfile" 53418781e08Smrg echo "$object : \\" > "$depfile" 53518781e08Smrg # The first sed program below extracts the file names and escapes 53618781e08Smrg # backslashes for cygpath. The second sed program outputs the file 53718781e08Smrg # name when reading, but also accumulates all include files in the 53818781e08Smrg # hold buffer in order to output them again at the end. This only 53918781e08Smrg # works with sed implementations that can handle large buffers. 54018781e08Smrg sed < "$tmpdepfile" -n ' 54118781e08Smrg/^Note: including file: *\(.*\)/ { 54218781e08Smrg s//\1/ 54318781e08Smrg s/\\/\\\\/g 54418781e08Smrg p 54518781e08Smrg}' | $cygpath_u | sort -u | sed -n ' 54618781e08Smrgs/ /\\ /g 54718781e08Smrgs/\(.*\)/'"$tab"'\1 \\/p 54818781e08Smrgs/.\(.*\) \\/\1:/ 54918781e08SmrgH 55018781e08Smrg$ { 55118781e08Smrg s/.*/'"$tab"'/ 55218781e08Smrg G 55318781e08Smrg p 55418781e08Smrg}' >> "$depfile" 55518781e08Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 55618781e08Smrg rm -f "$tmpdepfile" 55718781e08Smrg ;; 55818781e08Smrg 55918781e08Smrgmsvc7msys) 56018781e08Smrg # This case exists only to let depend.m4 do its work. It works by 56118781e08Smrg # looking at the text of this script. This case will never be run, 56218781e08Smrg # since it is checked for above. 56318781e08Smrg exit 1 56418781e08Smrg ;; 565de2362d3Smrg 566de2362d3Smrg#nosideeffect) 567de2362d3Smrg # This comment above is used by automake to tell side-effect 568de2362d3Smrg # dependency tracking mechanisms from slower ones. 569de2362d3Smrg 570de2362d3Smrgdashmstdout) 571de2362d3Smrg # Important note: in order to support this mode, a compiler *must* 572de2362d3Smrg # always write the preprocessed file to stdout, regardless of -o. 573de2362d3Smrg "$@" || exit $? 574de2362d3Smrg 575de2362d3Smrg # Remove the call to Libtool. 576de2362d3Smrg if test "$libtool" = yes; then 5770d16fef4Smrg while test "X$1" != 'X--mode=compile'; do 578de2362d3Smrg shift 579de2362d3Smrg done 580de2362d3Smrg shift 581de2362d3Smrg fi 582de2362d3Smrg 58318781e08Smrg # Remove '-o $object'. 584de2362d3Smrg IFS=" " 585de2362d3Smrg for arg 586de2362d3Smrg do 587de2362d3Smrg case $arg in 588de2362d3Smrg -o) 589de2362d3Smrg shift 590de2362d3Smrg ;; 591de2362d3Smrg $object) 592de2362d3Smrg shift 593de2362d3Smrg ;; 594de2362d3Smrg *) 595de2362d3Smrg set fnord "$@" "$arg" 596de2362d3Smrg shift # fnord 597de2362d3Smrg shift # $arg 598de2362d3Smrg ;; 599de2362d3Smrg esac 600de2362d3Smrg done 601de2362d3Smrg 602de2362d3Smrg test -z "$dashmflag" && dashmflag=-M 60318781e08Smrg # Require at least two characters before searching for ':' 604de2362d3Smrg # in the target name. This is to cope with DOS-style filenames: 60518781e08Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606de2362d3Smrg "$@" $dashmflag | 60718781e08Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608de2362d3Smrg rm -f "$depfile" 609de2362d3Smrg cat < "$tmpdepfile" > "$depfile" 61018781e08Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 61118781e08Smrg # correctly. Breaking it into two sed invocations is a workaround. 61218781e08Smrg tr ' ' "$nl" < "$tmpdepfile" \ 61318781e08Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 61418781e08Smrg | sed -e 's/$/ :/' >> "$depfile" 615de2362d3Smrg rm -f "$tmpdepfile" 616de2362d3Smrg ;; 617de2362d3Smrg 618de2362d3SmrgdashXmstdout) 619de2362d3Smrg # This case only exists to satisfy depend.m4. It is never actually 620de2362d3Smrg # run, as this mode is specially recognized in the preamble. 621de2362d3Smrg exit 1 622de2362d3Smrg ;; 623de2362d3Smrg 624de2362d3Smrgmakedepend) 625de2362d3Smrg "$@" || exit $? 626de2362d3Smrg # Remove any Libtool call 627de2362d3Smrg if test "$libtool" = yes; then 6280d16fef4Smrg while test "X$1" != 'X--mode=compile'; do 629de2362d3Smrg shift 630de2362d3Smrg done 631de2362d3Smrg shift 632de2362d3Smrg fi 633de2362d3Smrg # X makedepend 634de2362d3Smrg shift 6350d16fef4Smrg cleared=no eat=no 6360d16fef4Smrg for arg 6370d16fef4Smrg do 638de2362d3Smrg case $cleared in 639de2362d3Smrg no) 640de2362d3Smrg set ""; shift 641de2362d3Smrg cleared=yes ;; 642de2362d3Smrg esac 6430d16fef4Smrg if test $eat = yes; then 6440d16fef4Smrg eat=no 6450d16fef4Smrg continue 6460d16fef4Smrg fi 647de2362d3Smrg case "$arg" in 648de2362d3Smrg -D*|-I*) 649de2362d3Smrg set fnord "$@" "$arg"; shift ;; 650de2362d3Smrg # Strip any option that makedepend may not understand. Remove 651de2362d3Smrg # the object too, otherwise makedepend will parse it as a source file. 6520d16fef4Smrg -arch) 6530d16fef4Smrg eat=yes ;; 654de2362d3Smrg -*|$object) 655de2362d3Smrg ;; 656de2362d3Smrg *) 657de2362d3Smrg set fnord "$@" "$arg"; shift ;; 658de2362d3Smrg esac 659de2362d3Smrg done 6600d16fef4Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 661de2362d3Smrg touch "$tmpdepfile" 662de2362d3Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663de2362d3Smrg rm -f "$depfile" 66418781e08Smrg # makedepend may prepend the VPATH from the source file name to the object. 66518781e08Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 66618781e08Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 66718781e08Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 66818781e08Smrg # correctly. Breaking it into two sed invocations is a workaround. 66918781e08Smrg sed '1,2d' "$tmpdepfile" \ 67018781e08Smrg | tr ' ' "$nl" \ 67118781e08Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 67218781e08Smrg | sed -e 's/$/ :/' >> "$depfile" 673de2362d3Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 674de2362d3Smrg ;; 675de2362d3Smrg 676de2362d3Smrgcpp) 677de2362d3Smrg # Important note: in order to support this mode, a compiler *must* 678de2362d3Smrg # always write the preprocessed file to stdout. 679de2362d3Smrg "$@" || exit $? 680de2362d3Smrg 681de2362d3Smrg # Remove the call to Libtool. 682de2362d3Smrg if test "$libtool" = yes; then 6830d16fef4Smrg while test "X$1" != 'X--mode=compile'; do 684de2362d3Smrg shift 685de2362d3Smrg done 686de2362d3Smrg shift 687de2362d3Smrg fi 688de2362d3Smrg 68918781e08Smrg # Remove '-o $object'. 690de2362d3Smrg IFS=" " 691de2362d3Smrg for arg 692de2362d3Smrg do 693de2362d3Smrg case $arg in 694de2362d3Smrg -o) 695de2362d3Smrg shift 696de2362d3Smrg ;; 697de2362d3Smrg $object) 698de2362d3Smrg shift 699de2362d3Smrg ;; 700de2362d3Smrg *) 701de2362d3Smrg set fnord "$@" "$arg" 702de2362d3Smrg shift # fnord 703de2362d3Smrg shift # $arg 704de2362d3Smrg ;; 705de2362d3Smrg esac 706de2362d3Smrg done 707de2362d3Smrg 70818781e08Smrg "$@" -E \ 70918781e08Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 71018781e08Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 71118781e08Smrg | sed '$ s: \\$::' > "$tmpdepfile" 712de2362d3Smrg rm -f "$depfile" 713de2362d3Smrg echo "$object : \\" > "$depfile" 714de2362d3Smrg cat < "$tmpdepfile" >> "$depfile" 715de2362d3Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716de2362d3Smrg rm -f "$tmpdepfile" 717de2362d3Smrg ;; 718de2362d3Smrg 719de2362d3Smrgmsvisualcpp) 720de2362d3Smrg # Important note: in order to support this mode, a compiler *must* 7210d16fef4Smrg # always write the preprocessed file to stdout. 722de2362d3Smrg "$@" || exit $? 7230d16fef4Smrg 7240d16fef4Smrg # Remove the call to Libtool. 7250d16fef4Smrg if test "$libtool" = yes; then 7260d16fef4Smrg while test "X$1" != 'X--mode=compile'; do 7270d16fef4Smrg shift 7280d16fef4Smrg done 7290d16fef4Smrg shift 7300d16fef4Smrg fi 7310d16fef4Smrg 732de2362d3Smrg IFS=" " 733de2362d3Smrg for arg 734de2362d3Smrg do 735de2362d3Smrg case "$arg" in 7360d16fef4Smrg -o) 7370d16fef4Smrg shift 7380d16fef4Smrg ;; 7390d16fef4Smrg $object) 7400d16fef4Smrg shift 7410d16fef4Smrg ;; 742de2362d3Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 74318781e08Smrg set fnord "$@" 74418781e08Smrg shift 74518781e08Smrg shift 74618781e08Smrg ;; 747de2362d3Smrg *) 74818781e08Smrg set fnord "$@" "$arg" 74918781e08Smrg shift 75018781e08Smrg shift 75118781e08Smrg ;; 752de2362d3Smrg esac 753de2362d3Smrg done 7540d16fef4Smrg "$@" -E 2>/dev/null | 7550d16fef4Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756de2362d3Smrg rm -f "$depfile" 757de2362d3Smrg echo "$object : \\" > "$depfile" 75818781e08Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 75918781e08Smrg echo "$tab" >> "$depfile" 7600d16fef4Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761de2362d3Smrg rm -f "$tmpdepfile" 762de2362d3Smrg ;; 763de2362d3Smrg 7640d16fef4Smrgmsvcmsys) 7650d16fef4Smrg # This case exists only to let depend.m4 do its work. It works by 7660d16fef4Smrg # looking at the text of this script. This case will never be run, 7670d16fef4Smrg # since it is checked for above. 7680d16fef4Smrg exit 1 7690d16fef4Smrg ;; 7700d16fef4Smrg 771de2362d3Smrgnone) 772de2362d3Smrg exec "$@" 773de2362d3Smrg ;; 774de2362d3Smrg 775de2362d3Smrg*) 776de2362d3Smrg echo "Unknown depmode $depmode" 1>&2 777de2362d3Smrg exit 1 778de2362d3Smrg ;; 779de2362d3Smrgesac 780de2362d3Smrg 781de2362d3Smrgexit 0 782de2362d3Smrg 783de2362d3Smrg# Local Variables: 784de2362d3Smrg# mode: shell-script 785de2362d3Smrg# sh-indentation: 2 78639413783Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 787de2362d3Smrg# time-stamp-start: "scriptversion=" 788de2362d3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7898bf5c682Smrg# time-stamp-time-zone: "UTC0" 7900d16fef4Smrg# time-stamp-end: "; # UTC" 791de2362d3Smrg# End: 792