1492e1cfeSmrg#! /bin/sh 2492e1cfeSmrg# depcomp - compile a program generating dependencies as side-effects 39e0146f7Smrg 431e5d586Smrgscriptversion=2018-03-07.03; # UTC 59e0146f7Smrg 631e5d586Smrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 7492e1cfeSmrg 8492e1cfeSmrg# This program is free software; you can redistribute it and/or modify 9492e1cfeSmrg# it under the terms of the GNU General Public License as published by 10492e1cfeSmrg# the Free Software Foundation; either version 2, or (at your option) 11492e1cfeSmrg# any later version. 12492e1cfeSmrg 13492e1cfeSmrg# This program is distributed in the hope that it will be useful, 14492e1cfeSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 15492e1cfeSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16492e1cfeSmrg# GNU General Public License for more details. 17492e1cfeSmrg 18492e1cfeSmrg# You should have received a copy of the GNU General Public License 1931e5d586Smrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 20492e1cfeSmrg 21492e1cfeSmrg# As a special exception to the GNU General Public License, if you 22492e1cfeSmrg# distribute this file as part of a program that contains a 23492e1cfeSmrg# configuration script generated by Autoconf, you may include it under 24492e1cfeSmrg# the same distribution terms that you use for the rest of that program. 25492e1cfeSmrg 26492e1cfeSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27492e1cfeSmrg 289e0146f7Smrgcase $1 in 299e0146f7Smrg '') 301afad795Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 311afad795Smrg exit 1; 321afad795Smrg ;; 339e0146f7Smrg -h | --h*) 349e0146f7Smrg cat <<\EOF 359e0146f7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 369e0146f7Smrg 379e0146f7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 389e0146f7Smrgas side-effects. 399e0146f7Smrg 409e0146f7SmrgEnvironment variables: 419e0146f7Smrg depmode Dependency tracking mode. 421afad795Smrg source Source file read by 'PROGRAMS ARGS'. 431afad795Smrg object Object file output by 'PROGRAMS ARGS'. 449e0146f7Smrg DEPDIR directory where to store dependencies. 459e0146f7Smrg depfile Dependency file to output. 461afad795Smrg tmpdepfile Temporary file to use when outputting dependencies. 479e0146f7Smrg libtool Whether libtool is used (yes/no). 489e0146f7Smrg 499e0146f7SmrgReport bugs to <bug-automake@gnu.org>. 509e0146f7SmrgEOF 519e0146f7Smrg exit $? 529e0146f7Smrg ;; 539e0146f7Smrg -v | --v*) 549e0146f7Smrg echo "depcomp $scriptversion" 559e0146f7Smrg exit $? 569e0146f7Smrg ;; 579e0146f7Smrgesac 589e0146f7Smrg 591afad795Smrg# Get the directory component of the given path, and save it in the 601afad795Smrg# global variables '$dir'. Note that this directory component will 611afad795Smrg# be either empty or ending with a '/' character. This is deliberate. 621afad795Smrgset_dir_from () 631afad795Smrg{ 641afad795Smrg case $1 in 651afad795Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 661afad795Smrg *) dir=;; 671afad795Smrg esac 681afad795Smrg} 691afad795Smrg 701afad795Smrg# Get the suffix-stripped basename of the given path, and save it the 711afad795Smrg# global variable '$base'. 721afad795Smrgset_base_from () 731afad795Smrg{ 741afad795Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 751afad795Smrg} 761afad795Smrg 771afad795Smrg# If no dependency file was actually created by the compiler invocation, 781afad795Smrg# we still have to create a dummy depfile, to avoid errors with the 791afad795Smrg# Makefile "include basename.Plo" scheme. 801afad795Smrgmake_dummy_depfile () 811afad795Smrg{ 821afad795Smrg echo "#dummy" > "$depfile" 831afad795Smrg} 841afad795Smrg 851afad795Smrg# Factor out some common post-processing of the generated depfile. 861afad795Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 871afad795Smrgaix_post_process_depfile () 881afad795Smrg{ 891afad795Smrg # If the compiler actually managed to produce a dependency file, 901afad795Smrg # post-process it. 911afad795Smrg if test -f "$tmpdepfile"; then 921afad795Smrg # Each line is of the form 'foo.o: dependency.h'. 931afad795Smrg # Do two passes, one to just change these to 941afad795Smrg # $object: dependency.h 951afad795Smrg # and one to simply output 961afad795Smrg # dependency.h: 971afad795Smrg # which is needed to avoid the deleted-header problem. 981afad795Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 991afad795Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 1001afad795Smrg } > "$depfile" 1011afad795Smrg rm -f "$tmpdepfile" 1021afad795Smrg else 1031afad795Smrg make_dummy_depfile 1041afad795Smrg fi 1051afad795Smrg} 1061afad795Smrg 1071afad795Smrg# A tabulation character. 1081afad795Smrgtab=' ' 1091afad795Smrg# A newline character. 1101afad795Smrgnl=' 1111afad795Smrg' 1121afad795Smrg# Character ranges might be problematic outside the C locale. 1131afad795Smrg# These definitions help. 1141afad795Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 1151afad795Smrglower=abcdefghijklmnopqrstuvwxyz 1161afad795Smrgdigits=0123456789 1171afad795Smrgalpha=${upper}${lower} 1181afad795Smrg 119492e1cfeSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 120492e1cfeSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 121492e1cfeSmrg exit 1 122492e1cfeSmrgfi 123492e1cfeSmrg 1249e0146f7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 1259e0146f7Smrgdepfile=${depfile-`echo "$object" | 1269e0146f7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127492e1cfeSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128492e1cfeSmrg 129492e1cfeSmrgrm -f "$tmpdepfile" 130492e1cfeSmrg 1311afad795Smrg# Avoid interferences from the environment. 1321afad795Smrggccflag= dashmflag= 1331afad795Smrg 134492e1cfeSmrg# Some modes work just like other modes, but use different flags. We 135492e1cfeSmrg# parameterize here, but still list the modes in the big case below, 136492e1cfeSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 137492e1cfeSmrg# here, because this file can only contain one case statement. 138492e1cfeSmrgif test "$depmode" = hp; then 139492e1cfeSmrg # HP compiler uses -M and no extra arg. 140492e1cfeSmrg gccflag=-M 141492e1cfeSmrg depmode=gcc 142492e1cfeSmrgfi 143492e1cfeSmrg 144492e1cfeSmrgif test "$depmode" = dashXmstdout; then 1451afad795Smrg # This is just like dashmstdout with a different argument. 1461afad795Smrg dashmflag=-xM 1471afad795Smrg depmode=dashmstdout 148492e1cfeSmrgfi 149492e1cfeSmrg 1509e0146f7Smrgcygpath_u="cygpath -u -f -" 1519e0146f7Smrgif test "$depmode" = msvcmsys; then 1521afad795Smrg # This is just like msvisualcpp but w/o cygpath translation. 1531afad795Smrg # Just convert the backslash-escaped backslashes to single forward 1541afad795Smrg # slashes to satisfy depend.m4 1551afad795Smrg cygpath_u='sed s,\\\\,/,g' 1561afad795Smrg depmode=msvisualcpp 1571afad795Smrgfi 1581afad795Smrg 1591afad795Smrgif test "$depmode" = msvc7msys; then 1601afad795Smrg # This is just like msvc7 but w/o cygpath translation. 1611afad795Smrg # Just convert the backslash-escaped backslashes to single forward 1621afad795Smrg # slashes to satisfy depend.m4 1631afad795Smrg cygpath_u='sed s,\\\\,/,g' 1641afad795Smrg depmode=msvc7 1651afad795Smrgfi 1661afad795Smrg 1671afad795Smrgif test "$depmode" = xlc; then 1681afad795Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 1691afad795Smrg gccflag=-qmakedep=gcc,-MF 1701afad795Smrg depmode=gcc 1719e0146f7Smrgfi 1729e0146f7Smrg 173492e1cfeSmrgcase "$depmode" in 174492e1cfeSmrggcc3) 175492e1cfeSmrg## gcc 3 implements dependency tracking that does exactly what 176492e1cfeSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177492e1cfeSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1789e0146f7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1799e0146f7Smrg## the command line argument order; so add the flags where they 1809e0146f7Smrg## appear in depend2.am. Note that the slowdown incurred here 1819e0146f7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1829e0146f7Smrg for arg 1839e0146f7Smrg do 1849e0146f7Smrg case $arg in 1859e0146f7Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1869e0146f7Smrg *) set fnord "$@" "$arg" ;; 1879e0146f7Smrg esac 1889e0146f7Smrg shift # fnord 1899e0146f7Smrg shift # $arg 1909e0146f7Smrg done 1919e0146f7Smrg "$@" 192492e1cfeSmrg stat=$? 1931afad795Smrg if test $stat -ne 0; then 194492e1cfeSmrg rm -f "$tmpdepfile" 195492e1cfeSmrg exit $stat 196492e1cfeSmrg fi 197492e1cfeSmrg mv "$tmpdepfile" "$depfile" 198492e1cfeSmrg ;; 199492e1cfeSmrg 200492e1cfeSmrggcc) 2011afad795Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 2021afad795Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 2031afad795Smrg## (see the conditional assignment to $gccflag above). 204492e1cfeSmrg## There are various ways to get dependency output from gcc. Here's 205492e1cfeSmrg## why we pick this rather obscure method: 206492e1cfeSmrg## - Don't want to use -MD because we'd like the dependencies to end 207492e1cfeSmrg## up in a subdir. Having to rename by hand is ugly. 208492e1cfeSmrg## (We might end up doing this anyway to support other compilers.) 209492e1cfeSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 2101afad795Smrg## -MM, not -M (despite what the docs say). Also, it might not be 2111afad795Smrg## supported by the other compilers which use the 'gcc' depmode. 212492e1cfeSmrg## - Using -M directly means running the compiler twice (even worse 213492e1cfeSmrg## than renaming). 214492e1cfeSmrg if test -z "$gccflag"; then 215492e1cfeSmrg gccflag=-MD, 216492e1cfeSmrg fi 217492e1cfeSmrg "$@" -Wp,"$gccflag$tmpdepfile" 218492e1cfeSmrg stat=$? 2191afad795Smrg if test $stat -ne 0; then 220492e1cfeSmrg rm -f "$tmpdepfile" 221492e1cfeSmrg exit $stat 222492e1cfeSmrg fi 223492e1cfeSmrg rm -f "$depfile" 224492e1cfeSmrg echo "$object : \\" > "$depfile" 2251afad795Smrg # The second -e expression handles DOS-style file names with drive 2261afad795Smrg # letters. 227492e1cfeSmrg sed -e 's/^[^:]*: / /' \ 228492e1cfeSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 2291afad795Smrg## This next piece of magic avoids the "deleted header file" problem. 230492e1cfeSmrg## The problem is that when a header file which appears in a .P file 231492e1cfeSmrg## is deleted, the dependency causes make to die (because there is 232492e1cfeSmrg## typically no way to rebuild the header). We avoid this by adding 233492e1cfeSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 234492e1cfeSmrg## this for us directly. 2351afad795Smrg## Some versions of gcc put a space before the ':'. On the theory 236492e1cfeSmrg## that the space means something, we add a space to the output as 2371afad795Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 2381afad795Smrg## to the object. Take care to not repeat it in the output. 239492e1cfeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 240492e1cfeSmrg## correctly. Breaking it into two sed invocations is a workaround. 2411afad795Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2421afad795Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 2431afad795Smrg | sed -e 's/$/ :/' >> "$depfile" 244492e1cfeSmrg rm -f "$tmpdepfile" 245492e1cfeSmrg ;; 246492e1cfeSmrg 247492e1cfeSmrghp) 248492e1cfeSmrg # This case exists only to let depend.m4 do its work. It works by 249492e1cfeSmrg # looking at the text of this script. This case will never be run, 250492e1cfeSmrg # since it is checked for above. 251492e1cfeSmrg exit 1 252492e1cfeSmrg ;; 253492e1cfeSmrg 254492e1cfeSmrgsgi) 255492e1cfeSmrg if test "$libtool" = yes; then 256492e1cfeSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 257492e1cfeSmrg else 258492e1cfeSmrg "$@" -MDupdate "$tmpdepfile" 259492e1cfeSmrg fi 260492e1cfeSmrg stat=$? 2611afad795Smrg if test $stat -ne 0; then 262492e1cfeSmrg rm -f "$tmpdepfile" 263492e1cfeSmrg exit $stat 264492e1cfeSmrg fi 265492e1cfeSmrg rm -f "$depfile" 266492e1cfeSmrg 267492e1cfeSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268492e1cfeSmrg echo "$object : \\" > "$depfile" 269492e1cfeSmrg # Clip off the initial element (the dependent). Don't try to be 270492e1cfeSmrg # clever and replace this with sed code, as IRIX sed won't handle 271492e1cfeSmrg # lines with more than a fixed number of characters (4096 in 272492e1cfeSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2731afad795Smrg # the IRIX cc adds comments like '#:fec' to the end of the 274492e1cfeSmrg # dependency line. 2751afad795Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2761afad795Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 2771afad795Smrg | tr "$nl" ' ' >> "$depfile" 2789e0146f7Smrg echo >> "$depfile" 279492e1cfeSmrg # The second pass generates a dummy entry for each header file. 2801afad795Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2811afad795Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2821afad795Smrg >> "$depfile" 283492e1cfeSmrg else 2841afad795Smrg make_dummy_depfile 285492e1cfeSmrg fi 286492e1cfeSmrg rm -f "$tmpdepfile" 287492e1cfeSmrg ;; 288492e1cfeSmrg 2891afad795Smrgxlc) 2901afad795Smrg # This case exists only to let depend.m4 do its work. It works by 2911afad795Smrg # looking at the text of this script. This case will never be run, 2921afad795Smrg # since it is checked for above. 2931afad795Smrg exit 1 2941afad795Smrg ;; 2951afad795Smrg 296492e1cfeSmrgaix) 297492e1cfeSmrg # The C for AIX Compiler uses -M and outputs the dependencies 298492e1cfeSmrg # in a .u file. In older versions, this file always lives in the 2991afad795Smrg # current directory. Also, the AIX compiler puts '$object:' at the 300492e1cfeSmrg # start of each line; $object doesn't have directory information. 301492e1cfeSmrg # Version 6 uses the directory in both cases. 3021afad795Smrg set_dir_from "$object" 3031afad795Smrg set_base_from "$object" 304492e1cfeSmrg if test "$libtool" = yes; then 3059e0146f7Smrg tmpdepfile1=$dir$base.u 3069e0146f7Smrg tmpdepfile2=$base.u 3079e0146f7Smrg tmpdepfile3=$dir.libs/$base.u 308492e1cfeSmrg "$@" -Wc,-M 309492e1cfeSmrg else 3109e0146f7Smrg tmpdepfile1=$dir$base.u 3119e0146f7Smrg tmpdepfile2=$dir$base.u 3129e0146f7Smrg tmpdepfile3=$dir$base.u 313492e1cfeSmrg "$@" -M 314492e1cfeSmrg fi 315492e1cfeSmrg stat=$? 3161afad795Smrg if test $stat -ne 0; then 3179e0146f7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318492e1cfeSmrg exit $stat 319492e1cfeSmrg fi 320492e1cfeSmrg 3219e0146f7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3229e0146f7Smrg do 3239e0146f7Smrg test -f "$tmpdepfile" && break 3249e0146f7Smrg done 3251afad795Smrg aix_post_process_depfile 3261afad795Smrg ;; 3271afad795Smrg 3281afad795Smrgtcc) 3291afad795Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 3301afad795Smrg # FIXME: That version still under development at the moment of writing. 3311afad795Smrg # Make that this statement remains true also for stable, released 3321afad795Smrg # versions. 3331afad795Smrg # It will wrap lines (doesn't matter whether long or short) with a 3341afad795Smrg # trailing '\', as in: 3351afad795Smrg # 3361afad795Smrg # foo.o : \ 3371afad795Smrg # foo.c \ 3381afad795Smrg # foo.h \ 3391afad795Smrg # 3401afad795Smrg # It will put a trailing '\' even on the last line, and will use leading 3411afad795Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 3421afad795Smrg # "Emit spaces for -MD"). 3431afad795Smrg "$@" -MD -MF "$tmpdepfile" 3441afad795Smrg stat=$? 3451afad795Smrg if test $stat -ne 0; then 3461afad795Smrg rm -f "$tmpdepfile" 3471afad795Smrg exit $stat 348492e1cfeSmrg fi 3491afad795Smrg rm -f "$depfile" 3501afad795Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 3511afad795Smrg # We have to change lines of the first kind to '$object: \'. 3521afad795Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 3531afad795Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 3541afad795Smrg # dummy dependency, to avoid the deleted-header problem. 3551afad795Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356492e1cfeSmrg rm -f "$tmpdepfile" 357492e1cfeSmrg ;; 358492e1cfeSmrg 3591afad795Smrg## The order of this option in the case statement is important, since the 3601afad795Smrg## shell code in configure will try each of these formats in the order 3611afad795Smrg## listed in this file. A plain '-MD' option would be understood by many 3621afad795Smrg## compilers, so we must ensure this comes after the gcc and icc options. 3631afad795Smrgpgcc) 3641afad795Smrg # Portland's C compiler understands '-MD'. 3651afad795Smrg # Will always output deps to 'file.d' where file is the root name of the 3661afad795Smrg # source file under compilation, even if file resides in a subdirectory. 3671afad795Smrg # The object file name does not affect the name of the '.d' file. 3681afad795Smrg # pgcc 10.2 will output 369492e1cfeSmrg # foo.o: sub/foo.c sub/foo.h 3701afad795Smrg # and will wrap long lines using '\' : 371492e1cfeSmrg # foo.o: sub/foo.c ... \ 372492e1cfeSmrg # sub/foo.h ... \ 373492e1cfeSmrg # ... 3741afad795Smrg set_dir_from "$object" 3751afad795Smrg # Use the source, not the object, to determine the base name, since 3761afad795Smrg # that's sadly what pgcc will do too. 3771afad795Smrg set_base_from "$source" 3781afad795Smrg tmpdepfile=$base.d 3791afad795Smrg 3801afad795Smrg # For projects that build the same source file twice into different object 3811afad795Smrg # files, the pgcc approach of using the *source* file root name can cause 3821afad795Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 3831afad795Smrg # the same $tmpdepfile. 3841afad795Smrg lockdir=$base.d-lock 3851afad795Smrg trap " 3861afad795Smrg echo '$0: caught signal, cleaning up...' >&2 3871afad795Smrg rmdir '$lockdir' 3881afad795Smrg exit 1 3891afad795Smrg " 1 2 13 15 3901afad795Smrg numtries=100 3911afad795Smrg i=$numtries 3921afad795Smrg while test $i -gt 0; do 3931afad795Smrg # mkdir is a portable test-and-set. 3941afad795Smrg if mkdir "$lockdir" 2>/dev/null; then 3951afad795Smrg # This process acquired the lock. 3961afad795Smrg "$@" -MD 3971afad795Smrg stat=$? 3981afad795Smrg # Release the lock. 3991afad795Smrg rmdir "$lockdir" 4001afad795Smrg break 4011afad795Smrg else 4021afad795Smrg # If the lock is being held by a different process, wait 4031afad795Smrg # until the winning process is done or we timeout. 4041afad795Smrg while test -d "$lockdir" && test $i -gt 0; do 4051afad795Smrg sleep 1 4061afad795Smrg i=`expr $i - 1` 4071afad795Smrg done 4081afad795Smrg fi 4091afad795Smrg i=`expr $i - 1` 4101afad795Smrg done 4111afad795Smrg trap - 1 2 13 15 4121afad795Smrg if test $i -le 0; then 4131afad795Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 4141afad795Smrg echo "$0: check lockdir '$lockdir'" >&2 4151afad795Smrg exit 1 4161afad795Smrg fi 417492e1cfeSmrg 4181afad795Smrg if test $stat -ne 0; then 419492e1cfeSmrg rm -f "$tmpdepfile" 420492e1cfeSmrg exit $stat 421492e1cfeSmrg fi 422492e1cfeSmrg rm -f "$depfile" 423492e1cfeSmrg # Each line is of the form `foo.o: dependent.h', 424492e1cfeSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425492e1cfeSmrg # Do two passes, one to just change these to 426492e1cfeSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 427492e1cfeSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428492e1cfeSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 429492e1cfeSmrg # correctly. Breaking it into two sed invocations is a workaround. 4301afad795Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 4311afad795Smrg | sed -e 's/$/ :/' >> "$depfile" 432492e1cfeSmrg rm -f "$tmpdepfile" 433492e1cfeSmrg ;; 434492e1cfeSmrg 4359e0146f7Smrghp2) 4369e0146f7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 4379e0146f7Smrg # compilers, which have integrated preprocessors. The correct option 4389e0146f7Smrg # to use with these is +Maked; it writes dependencies to a file named 4399e0146f7Smrg # 'foo.d', which lands next to the object file, wherever that 4409e0146f7Smrg # happens to be. 4419e0146f7Smrg # Much of this is similar to the tru64 case; see comments there. 4421afad795Smrg set_dir_from "$object" 4431afad795Smrg set_base_from "$object" 4449e0146f7Smrg if test "$libtool" = yes; then 4459e0146f7Smrg tmpdepfile1=$dir$base.d 4469e0146f7Smrg tmpdepfile2=$dir.libs/$base.d 4479e0146f7Smrg "$@" -Wc,+Maked 4489e0146f7Smrg else 4499e0146f7Smrg tmpdepfile1=$dir$base.d 4509e0146f7Smrg tmpdepfile2=$dir$base.d 4519e0146f7Smrg "$@" +Maked 4529e0146f7Smrg fi 4539e0146f7Smrg stat=$? 4541afad795Smrg if test $stat -ne 0; then 4559e0146f7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 4569e0146f7Smrg exit $stat 4579e0146f7Smrg fi 4589e0146f7Smrg 4599e0146f7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 4609e0146f7Smrg do 4619e0146f7Smrg test -f "$tmpdepfile" && break 4629e0146f7Smrg done 4639e0146f7Smrg if test -f "$tmpdepfile"; then 4641afad795Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 4651afad795Smrg # Add 'dependent.h:' lines. 4669e0146f7Smrg sed -ne '2,${ 4671afad795Smrg s/^ *// 4681afad795Smrg s/ \\*$// 4691afad795Smrg s/$/:/ 4701afad795Smrg p 4711afad795Smrg }' "$tmpdepfile" >> "$depfile" 4729e0146f7Smrg else 4731afad795Smrg make_dummy_depfile 4749e0146f7Smrg fi 4759e0146f7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 4769e0146f7Smrg ;; 4779e0146f7Smrg 478492e1cfeSmrgtru64) 4791afad795Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 4801afad795Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 4811afad795Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 4821afad795Smrg # dependencies in 'foo.d' instead, so we check for that too. 4831afad795Smrg # Subdirectories are respected. 4841afad795Smrg set_dir_from "$object" 4851afad795Smrg set_base_from "$object" 4861afad795Smrg 4871afad795Smrg if test "$libtool" = yes; then 4881afad795Smrg # Libtool generates 2 separate objects for the 2 libraries. These 4891afad795Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 4901afad795Smrg # in $dir$base.o.d. We have to check for both files, because 4911afad795Smrg # one of the two compilations can be disabled. We should prefer 4921afad795Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4931afad795Smrg # automatically cleaned when .libs/ is deleted, while ignoring 4941afad795Smrg # the former would cause a distcleancheck panic. 4951afad795Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 4961afad795Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 4971afad795Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 4981afad795Smrg "$@" -Wc,-MD 4991afad795Smrg else 5001afad795Smrg tmpdepfile1=$dir$base.d 5011afad795Smrg tmpdepfile2=$dir$base.d 5021afad795Smrg tmpdepfile3=$dir$base.d 5031afad795Smrg "$@" -MD 5041afad795Smrg fi 5051afad795Smrg 5061afad795Smrg stat=$? 5071afad795Smrg if test $stat -ne 0; then 5081afad795Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5091afad795Smrg exit $stat 5101afad795Smrg fi 5111afad795Smrg 5121afad795Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5131afad795Smrg do 5141afad795Smrg test -f "$tmpdepfile" && break 5151afad795Smrg done 5161afad795Smrg # Same post-processing that is required for AIX mode. 5171afad795Smrg aix_post_process_depfile 5181afad795Smrg ;; 5191afad795Smrg 5201afad795Smrgmsvc7) 5211afad795Smrg if test "$libtool" = yes; then 5221afad795Smrg showIncludes=-Wc,-showIncludes 5231afad795Smrg else 5241afad795Smrg showIncludes=-showIncludes 5251afad795Smrg fi 5261afad795Smrg "$@" $showIncludes > "$tmpdepfile" 5271afad795Smrg stat=$? 5281afad795Smrg grep -v '^Note: including file: ' "$tmpdepfile" 5291afad795Smrg if test $stat -ne 0; then 5301afad795Smrg rm -f "$tmpdepfile" 5311afad795Smrg exit $stat 5321afad795Smrg fi 5331afad795Smrg rm -f "$depfile" 5341afad795Smrg echo "$object : \\" > "$depfile" 5351afad795Smrg # The first sed program below extracts the file names and escapes 5361afad795Smrg # backslashes for cygpath. The second sed program outputs the file 5371afad795Smrg # name when reading, but also accumulates all include files in the 5381afad795Smrg # hold buffer in order to output them again at the end. This only 5391afad795Smrg # works with sed implementations that can handle large buffers. 5401afad795Smrg sed < "$tmpdepfile" -n ' 5411afad795Smrg/^Note: including file: *\(.*\)/ { 5421afad795Smrg s//\1/ 5431afad795Smrg s/\\/\\\\/g 5441afad795Smrg p 5451afad795Smrg}' | $cygpath_u | sort -u | sed -n ' 5461afad795Smrgs/ /\\ /g 5471afad795Smrgs/\(.*\)/'"$tab"'\1 \\/p 5481afad795Smrgs/.\(.*\) \\/\1:/ 5491afad795SmrgH 5501afad795Smrg$ { 5511afad795Smrg s/.*/'"$tab"'/ 5521afad795Smrg G 5531afad795Smrg p 5541afad795Smrg}' >> "$depfile" 5551afad795Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 5561afad795Smrg rm -f "$tmpdepfile" 5571afad795Smrg ;; 5581afad795Smrg 5591afad795Smrgmsvc7msys) 5601afad795Smrg # This case exists only to let depend.m4 do its work. It works by 5611afad795Smrg # looking at the text of this script. This case will never be run, 5621afad795Smrg # since it is checked for above. 5631afad795Smrg exit 1 5641afad795Smrg ;; 565492e1cfeSmrg 566492e1cfeSmrg#nosideeffect) 567492e1cfeSmrg # This comment above is used by automake to tell side-effect 568492e1cfeSmrg # dependency tracking mechanisms from slower ones. 569492e1cfeSmrg 570492e1cfeSmrgdashmstdout) 571492e1cfeSmrg # Important note: in order to support this mode, a compiler *must* 572492e1cfeSmrg # always write the preprocessed file to stdout, regardless of -o. 573492e1cfeSmrg "$@" || exit $? 574492e1cfeSmrg 575492e1cfeSmrg # Remove the call to Libtool. 576492e1cfeSmrg if test "$libtool" = yes; then 5779e0146f7Smrg while test "X$1" != 'X--mode=compile'; do 578492e1cfeSmrg shift 579492e1cfeSmrg done 580492e1cfeSmrg shift 581492e1cfeSmrg fi 582492e1cfeSmrg 5831afad795Smrg # Remove '-o $object'. 584492e1cfeSmrg IFS=" " 585492e1cfeSmrg for arg 586492e1cfeSmrg do 587492e1cfeSmrg case $arg in 588492e1cfeSmrg -o) 589492e1cfeSmrg shift 590492e1cfeSmrg ;; 591492e1cfeSmrg $object) 592492e1cfeSmrg shift 593492e1cfeSmrg ;; 594492e1cfeSmrg *) 595492e1cfeSmrg set fnord "$@" "$arg" 596492e1cfeSmrg shift # fnord 597492e1cfeSmrg shift # $arg 598492e1cfeSmrg ;; 599492e1cfeSmrg esac 600492e1cfeSmrg done 601492e1cfeSmrg 602492e1cfeSmrg test -z "$dashmflag" && dashmflag=-M 6031afad795Smrg # Require at least two characters before searching for ':' 604492e1cfeSmrg # in the target name. This is to cope with DOS-style filenames: 6051afad795Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606492e1cfeSmrg "$@" $dashmflag | 6071afad795Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608492e1cfeSmrg rm -f "$depfile" 609492e1cfeSmrg cat < "$tmpdepfile" > "$depfile" 6101afad795Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 6111afad795Smrg # correctly. Breaking it into two sed invocations is a workaround. 6121afad795Smrg tr ' ' "$nl" < "$tmpdepfile" \ 6131afad795Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6141afad795Smrg | sed -e 's/$/ :/' >> "$depfile" 615492e1cfeSmrg rm -f "$tmpdepfile" 616492e1cfeSmrg ;; 617492e1cfeSmrg 618492e1cfeSmrgdashXmstdout) 619492e1cfeSmrg # This case only exists to satisfy depend.m4. It is never actually 620492e1cfeSmrg # run, as this mode is specially recognized in the preamble. 621492e1cfeSmrg exit 1 622492e1cfeSmrg ;; 623492e1cfeSmrg 624492e1cfeSmrgmakedepend) 625492e1cfeSmrg "$@" || exit $? 626492e1cfeSmrg # Remove any Libtool call 627492e1cfeSmrg if test "$libtool" = yes; then 6289e0146f7Smrg while test "X$1" != 'X--mode=compile'; do 629492e1cfeSmrg shift 630492e1cfeSmrg done 631492e1cfeSmrg shift 632492e1cfeSmrg fi 633492e1cfeSmrg # X makedepend 634492e1cfeSmrg shift 6359e0146f7Smrg cleared=no eat=no 6369e0146f7Smrg for arg 6379e0146f7Smrg do 638492e1cfeSmrg case $cleared in 639492e1cfeSmrg no) 640492e1cfeSmrg set ""; shift 641492e1cfeSmrg cleared=yes ;; 642492e1cfeSmrg esac 6439e0146f7Smrg if test $eat = yes; then 6449e0146f7Smrg eat=no 6459e0146f7Smrg continue 6469e0146f7Smrg fi 647492e1cfeSmrg case "$arg" in 648492e1cfeSmrg -D*|-I*) 649492e1cfeSmrg set fnord "$@" "$arg"; shift ;; 650492e1cfeSmrg # Strip any option that makedepend may not understand. Remove 651492e1cfeSmrg # the object too, otherwise makedepend will parse it as a source file. 6529e0146f7Smrg -arch) 6539e0146f7Smrg eat=yes ;; 654492e1cfeSmrg -*|$object) 655492e1cfeSmrg ;; 656492e1cfeSmrg *) 657492e1cfeSmrg set fnord "$@" "$arg"; shift ;; 658492e1cfeSmrg esac 659492e1cfeSmrg done 6609e0146f7Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 661492e1cfeSmrg touch "$tmpdepfile" 662492e1cfeSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663492e1cfeSmrg rm -f "$depfile" 6641afad795Smrg # makedepend may prepend the VPATH from the source file name to the object. 6651afad795Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 6661afad795Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 6671afad795Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 6681afad795Smrg # correctly. Breaking it into two sed invocations is a workaround. 6691afad795Smrg sed '1,2d' "$tmpdepfile" \ 6701afad795Smrg | tr ' ' "$nl" \ 6711afad795Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6721afad795Smrg | sed -e 's/$/ :/' >> "$depfile" 673492e1cfeSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 674492e1cfeSmrg ;; 675492e1cfeSmrg 676492e1cfeSmrgcpp) 677492e1cfeSmrg # Important note: in order to support this mode, a compiler *must* 678492e1cfeSmrg # always write the preprocessed file to stdout. 679492e1cfeSmrg "$@" || exit $? 680492e1cfeSmrg 681492e1cfeSmrg # Remove the call to Libtool. 682492e1cfeSmrg if test "$libtool" = yes; then 6839e0146f7Smrg while test "X$1" != 'X--mode=compile'; do 684492e1cfeSmrg shift 685492e1cfeSmrg done 686492e1cfeSmrg shift 687492e1cfeSmrg fi 688492e1cfeSmrg 6891afad795Smrg # Remove '-o $object'. 690492e1cfeSmrg IFS=" " 691492e1cfeSmrg for arg 692492e1cfeSmrg do 693492e1cfeSmrg case $arg in 694492e1cfeSmrg -o) 695492e1cfeSmrg shift 696492e1cfeSmrg ;; 697492e1cfeSmrg $object) 698492e1cfeSmrg shift 699492e1cfeSmrg ;; 700492e1cfeSmrg *) 701492e1cfeSmrg set fnord "$@" "$arg" 702492e1cfeSmrg shift # fnord 703492e1cfeSmrg shift # $arg 704492e1cfeSmrg ;; 705492e1cfeSmrg esac 706492e1cfeSmrg done 707492e1cfeSmrg 7081afad795Smrg "$@" -E \ 7091afad795Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7101afad795Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7111afad795Smrg | sed '$ s: \\$::' > "$tmpdepfile" 712492e1cfeSmrg rm -f "$depfile" 713492e1cfeSmrg echo "$object : \\" > "$depfile" 714492e1cfeSmrg cat < "$tmpdepfile" >> "$depfile" 715492e1cfeSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716492e1cfeSmrg rm -f "$tmpdepfile" 717492e1cfeSmrg ;; 718492e1cfeSmrg 719492e1cfeSmrgmsvisualcpp) 720492e1cfeSmrg # Important note: in order to support this mode, a compiler *must* 7219e0146f7Smrg # always write the preprocessed file to stdout. 722492e1cfeSmrg "$@" || exit $? 7239e0146f7Smrg 7249e0146f7Smrg # Remove the call to Libtool. 7259e0146f7Smrg if test "$libtool" = yes; then 7269e0146f7Smrg while test "X$1" != 'X--mode=compile'; do 7279e0146f7Smrg shift 7289e0146f7Smrg done 7299e0146f7Smrg shift 7309e0146f7Smrg fi 7319e0146f7Smrg 732492e1cfeSmrg IFS=" " 733492e1cfeSmrg for arg 734492e1cfeSmrg do 735492e1cfeSmrg case "$arg" in 7369e0146f7Smrg -o) 7379e0146f7Smrg shift 7389e0146f7Smrg ;; 7399e0146f7Smrg $object) 7409e0146f7Smrg shift 7419e0146f7Smrg ;; 742492e1cfeSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 7431afad795Smrg set fnord "$@" 7441afad795Smrg shift 7451afad795Smrg shift 7461afad795Smrg ;; 747492e1cfeSmrg *) 7481afad795Smrg set fnord "$@" "$arg" 7491afad795Smrg shift 7501afad795Smrg shift 7511afad795Smrg ;; 752492e1cfeSmrg esac 753492e1cfeSmrg done 7549e0146f7Smrg "$@" -E 2>/dev/null | 7559e0146f7Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756492e1cfeSmrg rm -f "$depfile" 757492e1cfeSmrg echo "$object : \\" > "$depfile" 7581afad795Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 7591afad795Smrg echo "$tab" >> "$depfile" 7609e0146f7Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761492e1cfeSmrg rm -f "$tmpdepfile" 762492e1cfeSmrg ;; 763492e1cfeSmrg 7649e0146f7Smrgmsvcmsys) 7659e0146f7Smrg # This case exists only to let depend.m4 do its work. It works by 7669e0146f7Smrg # looking at the text of this script. This case will never be run, 7679e0146f7Smrg # since it is checked for above. 7689e0146f7Smrg exit 1 7699e0146f7Smrg ;; 7709e0146f7Smrg 771492e1cfeSmrgnone) 772492e1cfeSmrg exec "$@" 773492e1cfeSmrg ;; 774492e1cfeSmrg 775492e1cfeSmrg*) 776492e1cfeSmrg echo "Unknown depmode $depmode" 1>&2 777492e1cfeSmrg exit 1 778492e1cfeSmrg ;; 779492e1cfeSmrgesac 780492e1cfeSmrg 781492e1cfeSmrgexit 0 7829e0146f7Smrg 7839e0146f7Smrg# Local Variables: 7849e0146f7Smrg# mode: shell-script 7859e0146f7Smrg# sh-indentation: 2 78631e5d586Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 7879e0146f7Smrg# time-stamp-start: "scriptversion=" 7889e0146f7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 78931e5d586Smrg# time-stamp-time-zone: "UTC0" 7909e0146f7Smrg# time-stamp-end: "; # UTC" 7919e0146f7Smrg# End: 792