1ab47cfaaSmrg#! /bin/sh 2ab47cfaaSmrg# depcomp - compile a program generating dependencies as side-effects 3ab47cfaaSmrg 42b2b4fcbSmrgscriptversion=2018-03-07.03; # UTC 5ab47cfaaSmrg 62b2b4fcbSmrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 7ab47cfaaSmrg 8ab47cfaaSmrg# This program is free software; you can redistribute it and/or modify 9ab47cfaaSmrg# it under the terms of the GNU General Public License as published by 10ab47cfaaSmrg# the Free Software Foundation; either version 2, or (at your option) 11ab47cfaaSmrg# any later version. 12ab47cfaaSmrg 13ab47cfaaSmrg# This program is distributed in the hope that it will be useful, 14ab47cfaaSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 15ab47cfaaSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16ab47cfaaSmrg# GNU General Public License for more details. 17ab47cfaaSmrg 18ab47cfaaSmrg# You should have received a copy of the GNU General Public License 192b2b4fcbSmrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 20ab47cfaaSmrg 21ab47cfaaSmrg# As a special exception to the GNU General Public License, if you 22ab47cfaaSmrg# distribute this file as part of a program that contains a 23ab47cfaaSmrg# configuration script generated by Autoconf, you may include it under 24ab47cfaaSmrg# the same distribution terms that you use for the rest of that program. 25ab47cfaaSmrg 26ab47cfaaSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27ab47cfaaSmrg 28ab47cfaaSmrgcase $1 in 29ab47cfaaSmrg '') 301e449e82Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 311e449e82Smrg exit 1; 321e449e82Smrg ;; 33ab47cfaaSmrg -h | --h*) 34ab47cfaaSmrg cat <<\EOF 35ab47cfaaSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36ab47cfaaSmrg 37ab47cfaaSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 38ab47cfaaSmrgas side-effects. 39ab47cfaaSmrg 40ab47cfaaSmrgEnvironment variables: 41ab47cfaaSmrg depmode Dependency tracking mode. 421e449e82Smrg source Source file read by 'PROGRAMS ARGS'. 431e449e82Smrg object Object file output by 'PROGRAMS ARGS'. 44ab47cfaaSmrg DEPDIR directory where to store dependencies. 45ab47cfaaSmrg depfile Dependency file to output. 46aa9e3350Smrg tmpdepfile Temporary file to use when outputting dependencies. 47ab47cfaaSmrg libtool Whether libtool is used (yes/no). 48ab47cfaaSmrg 49ab47cfaaSmrgReport bugs to <bug-automake@gnu.org>. 50ab47cfaaSmrgEOF 51ab47cfaaSmrg exit $? 52ab47cfaaSmrg ;; 53ab47cfaaSmrg -v | --v*) 54ab47cfaaSmrg echo "depcomp $scriptversion" 55ab47cfaaSmrg exit $? 56ab47cfaaSmrg ;; 57ab47cfaaSmrgesac 58ab47cfaaSmrg 591e449e82Smrg# Get the directory component of the given path, and save it in the 601e449e82Smrg# global variables '$dir'. Note that this directory component will 611e449e82Smrg# be either empty or ending with a '/' character. This is deliberate. 621e449e82Smrgset_dir_from () 631e449e82Smrg{ 641e449e82Smrg case $1 in 651e449e82Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 661e449e82Smrg *) dir=;; 671e449e82Smrg esac 681e449e82Smrg} 691e449e82Smrg 701e449e82Smrg# Get the suffix-stripped basename of the given path, and save it the 711e449e82Smrg# global variable '$base'. 721e449e82Smrgset_base_from () 731e449e82Smrg{ 741e449e82Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 751e449e82Smrg} 761e449e82Smrg 771e449e82Smrg# If no dependency file was actually created by the compiler invocation, 781e449e82Smrg# we still have to create a dummy depfile, to avoid errors with the 791e449e82Smrg# Makefile "include basename.Plo" scheme. 801e449e82Smrgmake_dummy_depfile () 811e449e82Smrg{ 821e449e82Smrg echo "#dummy" > "$depfile" 831e449e82Smrg} 841e449e82Smrg 851e449e82Smrg# Factor out some common post-processing of the generated depfile. 861e449e82Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 871e449e82Smrgaix_post_process_depfile () 881e449e82Smrg{ 891e449e82Smrg # If the compiler actually managed to produce a dependency file, 901e449e82Smrg # post-process it. 911e449e82Smrg if test -f "$tmpdepfile"; then 921e449e82Smrg # Each line is of the form 'foo.o: dependency.h'. 931e449e82Smrg # Do two passes, one to just change these to 941e449e82Smrg # $object: dependency.h 951e449e82Smrg # and one to simply output 961e449e82Smrg # dependency.h: 971e449e82Smrg # which is needed to avoid the deleted-header problem. 981e449e82Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 991e449e82Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 1001e449e82Smrg } > "$depfile" 1011e449e82Smrg rm -f "$tmpdepfile" 1021e449e82Smrg else 1031e449e82Smrg make_dummy_depfile 1041e449e82Smrg fi 1051e449e82Smrg} 1061e449e82Smrg 1071e449e82Smrg# A tabulation character. 1081e449e82Smrgtab=' ' 1091e449e82Smrg# A newline character. 1101e449e82Smrgnl=' 1111e449e82Smrg' 1121e449e82Smrg# Character ranges might be problematic outside the C locale. 1131e449e82Smrg# These definitions help. 1141e449e82Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 1151e449e82Smrglower=abcdefghijklmnopqrstuvwxyz 1161e449e82Smrgdigits=0123456789 1171e449e82Smrgalpha=${upper}${lower} 1181e449e82Smrg 119ab47cfaaSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 120ab47cfaaSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 121ab47cfaaSmrg exit 1 122ab47cfaaSmrgfi 123ab47cfaaSmrg 124ab47cfaaSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125ab47cfaaSmrgdepfile=${depfile-`echo "$object" | 126ab47cfaaSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127ab47cfaaSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128ab47cfaaSmrg 129ab47cfaaSmrgrm -f "$tmpdepfile" 130ab47cfaaSmrg 1311e449e82Smrg# Avoid interferences from the environment. 1321e449e82Smrggccflag= dashmflag= 1331e449e82Smrg 134ab47cfaaSmrg# Some modes work just like other modes, but use different flags. We 135ab47cfaaSmrg# parameterize here, but still list the modes in the big case below, 136ab47cfaaSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 137ab47cfaaSmrg# here, because this file can only contain one case statement. 138ab47cfaaSmrgif test "$depmode" = hp; then 139ab47cfaaSmrg # HP compiler uses -M and no extra arg. 140ab47cfaaSmrg gccflag=-M 141ab47cfaaSmrg depmode=gcc 142ab47cfaaSmrgfi 143ab47cfaaSmrg 144ab47cfaaSmrgif test "$depmode" = dashXmstdout; then 1451e449e82Smrg # This is just like dashmstdout with a different argument. 1461e449e82Smrg dashmflag=-xM 1471e449e82Smrg depmode=dashmstdout 148ab47cfaaSmrgfi 149ab47cfaaSmrg 1505c42550eSmrgcygpath_u="cygpath -u -f -" 1515c42550eSmrgif test "$depmode" = msvcmsys; then 1521e449e82Smrg # This is just like msvisualcpp but w/o cygpath translation. 1531e449e82Smrg # Just convert the backslash-escaped backslashes to single forward 1541e449e82Smrg # slashes to satisfy depend.m4 1551e449e82Smrg cygpath_u='sed s,\\\\,/,g' 1561e449e82Smrg depmode=msvisualcpp 1575c42550eSmrgfi 1585c42550eSmrg 159aa9e3350Smrgif test "$depmode" = msvc7msys; then 1601e449e82Smrg # This is just like msvc7 but w/o cygpath translation. 1611e449e82Smrg # Just convert the backslash-escaped backslashes to single forward 1621e449e82Smrg # slashes to satisfy depend.m4 1631e449e82Smrg cygpath_u='sed s,\\\\,/,g' 1641e449e82Smrg depmode=msvc7 1651e449e82Smrgfi 1661e449e82Smrg 1671e449e82Smrgif test "$depmode" = xlc; then 1681e449e82Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 1691e449e82Smrg gccflag=-qmakedep=gcc,-MF 1701e449e82Smrg depmode=gcc 171aa9e3350Smrgfi 172aa9e3350Smrg 173ab47cfaaSmrgcase "$depmode" in 174ab47cfaaSmrggcc3) 175ab47cfaaSmrg## gcc 3 implements dependency tracking that does exactly what 176ab47cfaaSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177ab47cfaaSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1788697ee19Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1798697ee19Smrg## the command line argument order; so add the flags where they 1808697ee19Smrg## appear in depend2.am. Note that the slowdown incurred here 1818697ee19Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1828697ee19Smrg for arg 1838697ee19Smrg do 1848697ee19Smrg case $arg in 1858697ee19Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1868697ee19Smrg *) set fnord "$@" "$arg" ;; 1878697ee19Smrg esac 1888697ee19Smrg shift # fnord 1898697ee19Smrg shift # $arg 1908697ee19Smrg done 1918697ee19Smrg "$@" 192ab47cfaaSmrg stat=$? 1931e449e82Smrg if test $stat -ne 0; then 194ab47cfaaSmrg rm -f "$tmpdepfile" 195ab47cfaaSmrg exit $stat 196ab47cfaaSmrg fi 197ab47cfaaSmrg mv "$tmpdepfile" "$depfile" 198ab47cfaaSmrg ;; 199ab47cfaaSmrg 200ab47cfaaSmrggcc) 2011e449e82Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 2021e449e82Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 2031e449e82Smrg## (see the conditional assignment to $gccflag above). 204ab47cfaaSmrg## There are various ways to get dependency output from gcc. Here's 205ab47cfaaSmrg## why we pick this rather obscure method: 206ab47cfaaSmrg## - Don't want to use -MD because we'd like the dependencies to end 207ab47cfaaSmrg## up in a subdir. Having to rename by hand is ugly. 208ab47cfaaSmrg## (We might end up doing this anyway to support other compilers.) 209ab47cfaaSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 2101e449e82Smrg## -MM, not -M (despite what the docs say). Also, it might not be 2111e449e82Smrg## supported by the other compilers which use the 'gcc' depmode. 212ab47cfaaSmrg## - Using -M directly means running the compiler twice (even worse 213ab47cfaaSmrg## than renaming). 214ab47cfaaSmrg if test -z "$gccflag"; then 215ab47cfaaSmrg gccflag=-MD, 216ab47cfaaSmrg fi 217ab47cfaaSmrg "$@" -Wp,"$gccflag$tmpdepfile" 218ab47cfaaSmrg stat=$? 2191e449e82Smrg if test $stat -ne 0; then 220ab47cfaaSmrg rm -f "$tmpdepfile" 221ab47cfaaSmrg exit $stat 222ab47cfaaSmrg fi 223ab47cfaaSmrg rm -f "$depfile" 224ab47cfaaSmrg echo "$object : \\" > "$depfile" 2251e449e82Smrg # The second -e expression handles DOS-style file names with drive 2261e449e82Smrg # letters. 227ab47cfaaSmrg sed -e 's/^[^:]*: / /' \ 228ab47cfaaSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 2291e449e82Smrg## This next piece of magic avoids the "deleted header file" problem. 230ab47cfaaSmrg## The problem is that when a header file which appears in a .P file 231ab47cfaaSmrg## is deleted, the dependency causes make to die (because there is 232ab47cfaaSmrg## typically no way to rebuild the header). We avoid this by adding 233ab47cfaaSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 234ab47cfaaSmrg## this for us directly. 2351e449e82Smrg## Some versions of gcc put a space before the ':'. On the theory 236ab47cfaaSmrg## that the space means something, we add a space to the output as 237aa9e3350Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 238aa9e3350Smrg## to the object. Take care to not repeat it in the output. 239ab47cfaaSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 240ab47cfaaSmrg## correctly. Breaking it into two sed invocations is a workaround. 2411e449e82Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2421e449e82Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 2431e449e82Smrg | sed -e 's/$/ :/' >> "$depfile" 244ab47cfaaSmrg rm -f "$tmpdepfile" 245ab47cfaaSmrg ;; 246ab47cfaaSmrg 247ab47cfaaSmrghp) 248ab47cfaaSmrg # This case exists only to let depend.m4 do its work. It works by 249ab47cfaaSmrg # looking at the text of this script. This case will never be run, 250ab47cfaaSmrg # since it is checked for above. 251ab47cfaaSmrg exit 1 252ab47cfaaSmrg ;; 253ab47cfaaSmrg 254ab47cfaaSmrgsgi) 255ab47cfaaSmrg if test "$libtool" = yes; then 256ab47cfaaSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 257ab47cfaaSmrg else 258ab47cfaaSmrg "$@" -MDupdate "$tmpdepfile" 259ab47cfaaSmrg fi 260ab47cfaaSmrg stat=$? 2611e449e82Smrg if test $stat -ne 0; then 262ab47cfaaSmrg rm -f "$tmpdepfile" 263ab47cfaaSmrg exit $stat 264ab47cfaaSmrg fi 265ab47cfaaSmrg rm -f "$depfile" 266ab47cfaaSmrg 267ab47cfaaSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268ab47cfaaSmrg echo "$object : \\" > "$depfile" 269ab47cfaaSmrg # Clip off the initial element (the dependent). Don't try to be 270ab47cfaaSmrg # clever and replace this with sed code, as IRIX sed won't handle 271ab47cfaaSmrg # lines with more than a fixed number of characters (4096 in 272ab47cfaaSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2731e449e82Smrg # the IRIX cc adds comments like '#:fec' to the end of the 274ab47cfaaSmrg # dependency line. 2751e449e82Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2761e449e82Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 2771e449e82Smrg | tr "$nl" ' ' >> "$depfile" 2785c42550eSmrg echo >> "$depfile" 279ab47cfaaSmrg # The second pass generates a dummy entry for each header file. 2801e449e82Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2811e449e82Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2821e449e82Smrg >> "$depfile" 283ab47cfaaSmrg else 2841e449e82Smrg make_dummy_depfile 285ab47cfaaSmrg fi 286ab47cfaaSmrg rm -f "$tmpdepfile" 287ab47cfaaSmrg ;; 288ab47cfaaSmrg 2891e449e82Smrgxlc) 2901e449e82Smrg # This case exists only to let depend.m4 do its work. It works by 2911e449e82Smrg # looking at the text of this script. This case will never be run, 2921e449e82Smrg # since it is checked for above. 2931e449e82Smrg exit 1 2941e449e82Smrg ;; 2951e449e82Smrg 296ab47cfaaSmrgaix) 297ab47cfaaSmrg # The C for AIX Compiler uses -M and outputs the dependencies 298ab47cfaaSmrg # in a .u file. In older versions, this file always lives in the 2991e449e82Smrg # current directory. Also, the AIX compiler puts '$object:' at the 300ab47cfaaSmrg # start of each line; $object doesn't have directory information. 301ab47cfaaSmrg # Version 6 uses the directory in both cases. 3021e449e82Smrg set_dir_from "$object" 3031e449e82Smrg set_base_from "$object" 304ab47cfaaSmrg if test "$libtool" = yes; then 3051473d951Smrg tmpdepfile1=$dir$base.u 3061473d951Smrg tmpdepfile2=$base.u 3071473d951Smrg tmpdepfile3=$dir.libs/$base.u 308ab47cfaaSmrg "$@" -Wc,-M 309ab47cfaaSmrg else 3101473d951Smrg tmpdepfile1=$dir$base.u 3111473d951Smrg tmpdepfile2=$dir$base.u 3121473d951Smrg tmpdepfile3=$dir$base.u 313ab47cfaaSmrg "$@" -M 314ab47cfaaSmrg fi 315ab47cfaaSmrg stat=$? 3161e449e82Smrg if test $stat -ne 0; then 3171473d951Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318ab47cfaaSmrg exit $stat 319ab47cfaaSmrg fi 320ab47cfaaSmrg 3211473d951Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3221473d951Smrg do 3231473d951Smrg test -f "$tmpdepfile" && break 3241473d951Smrg done 3251e449e82Smrg aix_post_process_depfile 3261e449e82Smrg ;; 3271e449e82Smrg 3281e449e82Smrgtcc) 3291e449e82Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 3301e449e82Smrg # FIXME: That version still under development at the moment of writing. 3311e449e82Smrg # Make that this statement remains true also for stable, released 3321e449e82Smrg # versions. 3331e449e82Smrg # It will wrap lines (doesn't matter whether long or short) with a 3341e449e82Smrg # trailing '\', as in: 3351e449e82Smrg # 3361e449e82Smrg # foo.o : \ 3371e449e82Smrg # foo.c \ 3381e449e82Smrg # foo.h \ 3391e449e82Smrg # 3401e449e82Smrg # It will put a trailing '\' even on the last line, and will use leading 3411e449e82Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 3421e449e82Smrg # "Emit spaces for -MD"). 3431e449e82Smrg "$@" -MD -MF "$tmpdepfile" 3441e449e82Smrg stat=$? 3451e449e82Smrg if test $stat -ne 0; then 3461e449e82Smrg rm -f "$tmpdepfile" 3471e449e82Smrg exit $stat 348ab47cfaaSmrg fi 3491e449e82Smrg rm -f "$depfile" 3501e449e82Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 3511e449e82Smrg # We have to change lines of the first kind to '$object: \'. 3521e449e82Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 3531e449e82Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 3541e449e82Smrg # dummy dependency, to avoid the deleted-header problem. 3551e449e82Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356ab47cfaaSmrg rm -f "$tmpdepfile" 357ab47cfaaSmrg ;; 358ab47cfaaSmrg 3591e449e82Smrg## The order of this option in the case statement is important, since the 3601e449e82Smrg## shell code in configure will try each of these formats in the order 3611e449e82Smrg## listed in this file. A plain '-MD' option would be understood by many 3621e449e82Smrg## compilers, so we must ensure this comes after the gcc and icc options. 3631e449e82Smrgpgcc) 3641e449e82Smrg # Portland's C compiler understands '-MD'. 3651e449e82Smrg # Will always output deps to 'file.d' where file is the root name of the 3661e449e82Smrg # source file under compilation, even if file resides in a subdirectory. 3671e449e82Smrg # The object file name does not affect the name of the '.d' file. 3681e449e82Smrg # pgcc 10.2 will output 369ab47cfaaSmrg # foo.o: sub/foo.c sub/foo.h 3701e449e82Smrg # and will wrap long lines using '\' : 371ab47cfaaSmrg # foo.o: sub/foo.c ... \ 372ab47cfaaSmrg # sub/foo.h ... \ 373ab47cfaaSmrg # ... 3741e449e82Smrg set_dir_from "$object" 3751e449e82Smrg # Use the source, not the object, to determine the base name, since 3761e449e82Smrg # that's sadly what pgcc will do too. 3771e449e82Smrg set_base_from "$source" 3781e449e82Smrg tmpdepfile=$base.d 3791e449e82Smrg 3801e449e82Smrg # For projects that build the same source file twice into different object 3811e449e82Smrg # files, the pgcc approach of using the *source* file root name can cause 3821e449e82Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 3831e449e82Smrg # the same $tmpdepfile. 3841e449e82Smrg lockdir=$base.d-lock 3851e449e82Smrg trap " 3861e449e82Smrg echo '$0: caught signal, cleaning up...' >&2 3871e449e82Smrg rmdir '$lockdir' 3881e449e82Smrg exit 1 3891e449e82Smrg " 1 2 13 15 3901e449e82Smrg numtries=100 3911e449e82Smrg i=$numtries 3921e449e82Smrg while test $i -gt 0; do 3931e449e82Smrg # mkdir is a portable test-and-set. 3941e449e82Smrg if mkdir "$lockdir" 2>/dev/null; then 3951e449e82Smrg # This process acquired the lock. 3961e449e82Smrg "$@" -MD 3971e449e82Smrg stat=$? 3981e449e82Smrg # Release the lock. 3991e449e82Smrg rmdir "$lockdir" 4001e449e82Smrg break 4011e449e82Smrg else 4021e449e82Smrg # If the lock is being held by a different process, wait 4031e449e82Smrg # until the winning process is done or we timeout. 4041e449e82Smrg while test -d "$lockdir" && test $i -gt 0; do 4051e449e82Smrg sleep 1 4061e449e82Smrg i=`expr $i - 1` 4071e449e82Smrg done 4081e449e82Smrg fi 4091e449e82Smrg i=`expr $i - 1` 4101e449e82Smrg done 4111e449e82Smrg trap - 1 2 13 15 4121e449e82Smrg if test $i -le 0; then 4131e449e82Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 4141e449e82Smrg echo "$0: check lockdir '$lockdir'" >&2 4151e449e82Smrg exit 1 4161e449e82Smrg fi 417ab47cfaaSmrg 4181e449e82Smrg if test $stat -ne 0; then 419ab47cfaaSmrg rm -f "$tmpdepfile" 420ab47cfaaSmrg exit $stat 421ab47cfaaSmrg fi 422ab47cfaaSmrg rm -f "$depfile" 423ab47cfaaSmrg # Each line is of the form `foo.o: dependent.h', 424ab47cfaaSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425ab47cfaaSmrg # Do two passes, one to just change these to 426ab47cfaaSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 427ab47cfaaSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428ab47cfaaSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 429ab47cfaaSmrg # correctly. Breaking it into two sed invocations is a workaround. 4301e449e82Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 4311e449e82Smrg | sed -e 's/$/ :/' >> "$depfile" 432ab47cfaaSmrg rm -f "$tmpdepfile" 433ab47cfaaSmrg ;; 434ab47cfaaSmrg 4358697ee19Smrghp2) 4368697ee19Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 4378697ee19Smrg # compilers, which have integrated preprocessors. The correct option 4388697ee19Smrg # to use with these is +Maked; it writes dependencies to a file named 4398697ee19Smrg # 'foo.d', which lands next to the object file, wherever that 4408697ee19Smrg # happens to be. 4418697ee19Smrg # Much of this is similar to the tru64 case; see comments there. 4421e449e82Smrg set_dir_from "$object" 4431e449e82Smrg set_base_from "$object" 4448697ee19Smrg if test "$libtool" = yes; then 4458697ee19Smrg tmpdepfile1=$dir$base.d 4468697ee19Smrg tmpdepfile2=$dir.libs/$base.d 4478697ee19Smrg "$@" -Wc,+Maked 4488697ee19Smrg else 4498697ee19Smrg tmpdepfile1=$dir$base.d 4508697ee19Smrg tmpdepfile2=$dir$base.d 4518697ee19Smrg "$@" +Maked 4528697ee19Smrg fi 4538697ee19Smrg stat=$? 4541e449e82Smrg if test $stat -ne 0; then 4558697ee19Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 4568697ee19Smrg exit $stat 4578697ee19Smrg fi 4588697ee19Smrg 4598697ee19Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 4608697ee19Smrg do 4618697ee19Smrg test -f "$tmpdepfile" && break 4628697ee19Smrg done 4638697ee19Smrg if test -f "$tmpdepfile"; then 4641e449e82Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 4651e449e82Smrg # Add 'dependent.h:' lines. 4665c42550eSmrg sed -ne '2,${ 4671e449e82Smrg s/^ *// 4681e449e82Smrg s/ \\*$// 4691e449e82Smrg s/$/:/ 4701e449e82Smrg p 4711e449e82Smrg }' "$tmpdepfile" >> "$depfile" 4728697ee19Smrg else 4731e449e82Smrg make_dummy_depfile 4748697ee19Smrg fi 4758697ee19Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 4768697ee19Smrg ;; 4778697ee19Smrg 478ab47cfaaSmrgtru64) 4791e449e82Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 4801e449e82Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 4811e449e82Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 4821e449e82Smrg # dependencies in 'foo.d' instead, so we check for that too. 4831e449e82Smrg # Subdirectories are respected. 4841e449e82Smrg set_dir_from "$object" 4851e449e82Smrg set_base_from "$object" 4861e449e82Smrg 4871e449e82Smrg if test "$libtool" = yes; then 4881e449e82Smrg # Libtool generates 2 separate objects for the 2 libraries. These 4891e449e82Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 4901e449e82Smrg # in $dir$base.o.d. We have to check for both files, because 4911e449e82Smrg # one of the two compilations can be disabled. We should prefer 4921e449e82Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4931e449e82Smrg # automatically cleaned when .libs/ is deleted, while ignoring 4941e449e82Smrg # the former would cause a distcleancheck panic. 4951e449e82Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 4961e449e82Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 4971e449e82Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 4981e449e82Smrg "$@" -Wc,-MD 4991e449e82Smrg else 5001e449e82Smrg tmpdepfile1=$dir$base.d 5011e449e82Smrg tmpdepfile2=$dir$base.d 5021e449e82Smrg tmpdepfile3=$dir$base.d 5031e449e82Smrg "$@" -MD 5041e449e82Smrg fi 5051e449e82Smrg 5061e449e82Smrg stat=$? 5071e449e82Smrg if test $stat -ne 0; then 5081e449e82Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5091e449e82Smrg exit $stat 5101e449e82Smrg fi 5111e449e82Smrg 5121e449e82Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5131e449e82Smrg do 5141e449e82Smrg test -f "$tmpdepfile" && break 5151e449e82Smrg done 5161e449e82Smrg # Same post-processing that is required for AIX mode. 5171e449e82Smrg aix_post_process_depfile 5181e449e82Smrg ;; 519ab47cfaaSmrg 520aa9e3350Smrgmsvc7) 521aa9e3350Smrg if test "$libtool" = yes; then 522aa9e3350Smrg showIncludes=-Wc,-showIncludes 523aa9e3350Smrg else 524aa9e3350Smrg showIncludes=-showIncludes 525aa9e3350Smrg fi 526aa9e3350Smrg "$@" $showIncludes > "$tmpdepfile" 527aa9e3350Smrg stat=$? 528aa9e3350Smrg grep -v '^Note: including file: ' "$tmpdepfile" 5291e449e82Smrg if test $stat -ne 0; then 530aa9e3350Smrg rm -f "$tmpdepfile" 531aa9e3350Smrg exit $stat 532aa9e3350Smrg fi 533aa9e3350Smrg rm -f "$depfile" 534aa9e3350Smrg echo "$object : \\" > "$depfile" 535aa9e3350Smrg # The first sed program below extracts the file names and escapes 536aa9e3350Smrg # backslashes for cygpath. The second sed program outputs the file 537aa9e3350Smrg # name when reading, but also accumulates all include files in the 538aa9e3350Smrg # hold buffer in order to output them again at the end. This only 539aa9e3350Smrg # works with sed implementations that can handle large buffers. 540aa9e3350Smrg sed < "$tmpdepfile" -n ' 541aa9e3350Smrg/^Note: including file: *\(.*\)/ { 542aa9e3350Smrg s//\1/ 543aa9e3350Smrg s/\\/\\\\/g 544aa9e3350Smrg p 545aa9e3350Smrg}' | $cygpath_u | sort -u | sed -n ' 546aa9e3350Smrgs/ /\\ /g 5471e449e82Smrgs/\(.*\)/'"$tab"'\1 \\/p 548aa9e3350Smrgs/.\(.*\) \\/\1:/ 549aa9e3350SmrgH 550aa9e3350Smrg$ { 5511e449e82Smrg s/.*/'"$tab"'/ 552aa9e3350Smrg G 553aa9e3350Smrg p 554aa9e3350Smrg}' >> "$depfile" 5551e449e82Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556aa9e3350Smrg rm -f "$tmpdepfile" 557aa9e3350Smrg ;; 558aa9e3350Smrg 559aa9e3350Smrgmsvc7msys) 560aa9e3350Smrg # This case exists only to let depend.m4 do its work. It works by 561aa9e3350Smrg # looking at the text of this script. This case will never be run, 562aa9e3350Smrg # since it is checked for above. 563aa9e3350Smrg exit 1 564aa9e3350Smrg ;; 565aa9e3350Smrg 566ab47cfaaSmrg#nosideeffect) 567ab47cfaaSmrg # This comment above is used by automake to tell side-effect 568ab47cfaaSmrg # dependency tracking mechanisms from slower ones. 569ab47cfaaSmrg 570ab47cfaaSmrgdashmstdout) 571ab47cfaaSmrg # Important note: in order to support this mode, a compiler *must* 572ab47cfaaSmrg # always write the preprocessed file to stdout, regardless of -o. 573ab47cfaaSmrg "$@" || exit $? 574ab47cfaaSmrg 575ab47cfaaSmrg # Remove the call to Libtool. 576ab47cfaaSmrg if test "$libtool" = yes; then 5775c42550eSmrg while test "X$1" != 'X--mode=compile'; do 578ab47cfaaSmrg shift 579ab47cfaaSmrg done 580ab47cfaaSmrg shift 581ab47cfaaSmrg fi 582ab47cfaaSmrg 5831e449e82Smrg # Remove '-o $object'. 584ab47cfaaSmrg IFS=" " 585ab47cfaaSmrg for arg 586ab47cfaaSmrg do 587ab47cfaaSmrg case $arg in 588ab47cfaaSmrg -o) 589ab47cfaaSmrg shift 590ab47cfaaSmrg ;; 591ab47cfaaSmrg $object) 592ab47cfaaSmrg shift 593ab47cfaaSmrg ;; 594ab47cfaaSmrg *) 595ab47cfaaSmrg set fnord "$@" "$arg" 596ab47cfaaSmrg shift # fnord 597ab47cfaaSmrg shift # $arg 598ab47cfaaSmrg ;; 599ab47cfaaSmrg esac 600ab47cfaaSmrg done 601ab47cfaaSmrg 602ab47cfaaSmrg test -z "$dashmflag" && dashmflag=-M 6031e449e82Smrg # Require at least two characters before searching for ':' 604ab47cfaaSmrg # in the target name. This is to cope with DOS-style filenames: 6051e449e82Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606ab47cfaaSmrg "$@" $dashmflag | 6071e449e82Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608ab47cfaaSmrg rm -f "$depfile" 609ab47cfaaSmrg cat < "$tmpdepfile" > "$depfile" 6101e449e82Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 6111e449e82Smrg # correctly. Breaking it into two sed invocations is a workaround. 6121e449e82Smrg tr ' ' "$nl" < "$tmpdepfile" \ 6131e449e82Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6141e449e82Smrg | sed -e 's/$/ :/' >> "$depfile" 615ab47cfaaSmrg rm -f "$tmpdepfile" 616ab47cfaaSmrg ;; 617ab47cfaaSmrg 618ab47cfaaSmrgdashXmstdout) 619ab47cfaaSmrg # This case only exists to satisfy depend.m4. It is never actually 620ab47cfaaSmrg # run, as this mode is specially recognized in the preamble. 621ab47cfaaSmrg exit 1 622ab47cfaaSmrg ;; 623ab47cfaaSmrg 624ab47cfaaSmrgmakedepend) 625ab47cfaaSmrg "$@" || exit $? 626ab47cfaaSmrg # Remove any Libtool call 627ab47cfaaSmrg if test "$libtool" = yes; then 6285c42550eSmrg while test "X$1" != 'X--mode=compile'; do 629ab47cfaaSmrg shift 630ab47cfaaSmrg done 631ab47cfaaSmrg shift 632ab47cfaaSmrg fi 633ab47cfaaSmrg # X makedepend 634ab47cfaaSmrg shift 6355c42550eSmrg cleared=no eat=no 6365c42550eSmrg for arg 6375c42550eSmrg do 638ab47cfaaSmrg case $cleared in 639ab47cfaaSmrg no) 640ab47cfaaSmrg set ""; shift 641ab47cfaaSmrg cleared=yes ;; 642ab47cfaaSmrg esac 6435c42550eSmrg if test $eat = yes; then 6445c42550eSmrg eat=no 6455c42550eSmrg continue 6465c42550eSmrg fi 647ab47cfaaSmrg case "$arg" in 648ab47cfaaSmrg -D*|-I*) 649ab47cfaaSmrg set fnord "$@" "$arg"; shift ;; 650ab47cfaaSmrg # Strip any option that makedepend may not understand. Remove 651ab47cfaaSmrg # the object too, otherwise makedepend will parse it as a source file. 6525c42550eSmrg -arch) 6535c42550eSmrg eat=yes ;; 654ab47cfaaSmrg -*|$object) 655ab47cfaaSmrg ;; 656ab47cfaaSmrg *) 657ab47cfaaSmrg set fnord "$@" "$arg"; shift ;; 658ab47cfaaSmrg esac 659ab47cfaaSmrg done 6605c42550eSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 661ab47cfaaSmrg touch "$tmpdepfile" 662ab47cfaaSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663ab47cfaaSmrg rm -f "$depfile" 664aa9e3350Smrg # makedepend may prepend the VPATH from the source file name to the object. 665aa9e3350Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 666aa9e3350Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 6671e449e82Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 6681e449e82Smrg # correctly. Breaking it into two sed invocations is a workaround. 6691e449e82Smrg sed '1,2d' "$tmpdepfile" \ 6701e449e82Smrg | tr ' ' "$nl" \ 6711e449e82Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6721e449e82Smrg | sed -e 's/$/ :/' >> "$depfile" 673ab47cfaaSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 674ab47cfaaSmrg ;; 675ab47cfaaSmrg 676ab47cfaaSmrgcpp) 677ab47cfaaSmrg # Important note: in order to support this mode, a compiler *must* 678ab47cfaaSmrg # always write the preprocessed file to stdout. 679ab47cfaaSmrg "$@" || exit $? 680ab47cfaaSmrg 681ab47cfaaSmrg # Remove the call to Libtool. 682ab47cfaaSmrg if test "$libtool" = yes; then 6835c42550eSmrg while test "X$1" != 'X--mode=compile'; do 684ab47cfaaSmrg shift 685ab47cfaaSmrg done 686ab47cfaaSmrg shift 687ab47cfaaSmrg fi 688ab47cfaaSmrg 6891e449e82Smrg # Remove '-o $object'. 690ab47cfaaSmrg IFS=" " 691ab47cfaaSmrg for arg 692ab47cfaaSmrg do 693ab47cfaaSmrg case $arg in 694ab47cfaaSmrg -o) 695ab47cfaaSmrg shift 696ab47cfaaSmrg ;; 697ab47cfaaSmrg $object) 698ab47cfaaSmrg shift 699ab47cfaaSmrg ;; 700ab47cfaaSmrg *) 701ab47cfaaSmrg set fnord "$@" "$arg" 702ab47cfaaSmrg shift # fnord 703ab47cfaaSmrg shift # $arg 704ab47cfaaSmrg ;; 705ab47cfaaSmrg esac 706ab47cfaaSmrg done 707ab47cfaaSmrg 7081e449e82Smrg "$@" -E \ 7091e449e82Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7101e449e82Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7111e449e82Smrg | sed '$ s: \\$::' > "$tmpdepfile" 712ab47cfaaSmrg rm -f "$depfile" 713ab47cfaaSmrg echo "$object : \\" > "$depfile" 714ab47cfaaSmrg cat < "$tmpdepfile" >> "$depfile" 715ab47cfaaSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716ab47cfaaSmrg rm -f "$tmpdepfile" 717ab47cfaaSmrg ;; 718ab47cfaaSmrg 719ab47cfaaSmrgmsvisualcpp) 720ab47cfaaSmrg # Important note: in order to support this mode, a compiler *must* 7215c42550eSmrg # always write the preprocessed file to stdout. 722ab47cfaaSmrg "$@" || exit $? 7235c42550eSmrg 7245c42550eSmrg # Remove the call to Libtool. 7255c42550eSmrg if test "$libtool" = yes; then 7265c42550eSmrg while test "X$1" != 'X--mode=compile'; do 7275c42550eSmrg shift 7285c42550eSmrg done 7295c42550eSmrg shift 7305c42550eSmrg fi 7315c42550eSmrg 732ab47cfaaSmrg IFS=" " 733ab47cfaaSmrg for arg 734ab47cfaaSmrg do 735ab47cfaaSmrg case "$arg" in 7365c42550eSmrg -o) 7375c42550eSmrg shift 7385c42550eSmrg ;; 7395c42550eSmrg $object) 7405c42550eSmrg shift 7415c42550eSmrg ;; 742ab47cfaaSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 7431e449e82Smrg set fnord "$@" 7441e449e82Smrg shift 7451e449e82Smrg shift 7461e449e82Smrg ;; 747ab47cfaaSmrg *) 7481e449e82Smrg set fnord "$@" "$arg" 7491e449e82Smrg shift 7501e449e82Smrg shift 7511e449e82Smrg ;; 752ab47cfaaSmrg esac 753ab47cfaaSmrg done 7545c42550eSmrg "$@" -E 2>/dev/null | 7555c42550eSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756ab47cfaaSmrg rm -f "$depfile" 757ab47cfaaSmrg echo "$object : \\" > "$depfile" 7581e449e82Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 7591e449e82Smrg echo "$tab" >> "$depfile" 7605c42550eSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761ab47cfaaSmrg rm -f "$tmpdepfile" 762ab47cfaaSmrg ;; 763ab47cfaaSmrg 7645c42550eSmrgmsvcmsys) 7655c42550eSmrg # This case exists only to let depend.m4 do its work. It works by 7665c42550eSmrg # looking at the text of this script. This case will never be run, 7675c42550eSmrg # since it is checked for above. 7685c42550eSmrg exit 1 7695c42550eSmrg ;; 7705c42550eSmrg 771ab47cfaaSmrgnone) 772ab47cfaaSmrg exec "$@" 773ab47cfaaSmrg ;; 774ab47cfaaSmrg 775ab47cfaaSmrg*) 776ab47cfaaSmrg echo "Unknown depmode $depmode" 1>&2 777ab47cfaaSmrg exit 1 778ab47cfaaSmrg ;; 779ab47cfaaSmrgesac 780ab47cfaaSmrg 781ab47cfaaSmrgexit 0 782ab47cfaaSmrg 783ab47cfaaSmrg# Local Variables: 784ab47cfaaSmrg# mode: shell-script 785ab47cfaaSmrg# sh-indentation: 2 7862b2b4fcbSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 787ab47cfaaSmrg# time-stamp-start: "scriptversion=" 788ab47cfaaSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7892b2b4fcbSmrg# time-stamp-time-zone: "UTC0" 7905c42550eSmrg# time-stamp-end: "; # UTC" 791ab47cfaaSmrg# End: 792