166fe65f6Smrg#! /bin/sh 266fe65f6Smrg# depcomp - compile a program generating dependencies as side-effects 366fe65f6Smrg 4bc77032bSmrgscriptversion=2018-03-07.03; # UTC 566fe65f6Smrg 6bc77032bSmrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 766fe65f6Smrg 866fe65f6Smrg# This program is free software; you can redistribute it and/or modify 966fe65f6Smrg# it under the terms of the GNU General Public License as published by 1066fe65f6Smrg# the Free Software Foundation; either version 2, or (at your option) 1166fe65f6Smrg# any later version. 1266fe65f6Smrg 1366fe65f6Smrg# This program is distributed in the hope that it will be useful, 1466fe65f6Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1566fe65f6Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1666fe65f6Smrg# GNU General Public License for more details. 1766fe65f6Smrg 1866fe65f6Smrg# You should have received a copy of the GNU General Public License 19bc77032bSmrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 2066fe65f6Smrg 2166fe65f6Smrg# As a special exception to the GNU General Public License, if you 2266fe65f6Smrg# distribute this file as part of a program that contains a 2366fe65f6Smrg# configuration script generated by Autoconf, you may include it under 2466fe65f6Smrg# the same distribution terms that you use for the rest of that program. 2566fe65f6Smrg 2666fe65f6Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2766fe65f6Smrg 2866fe65f6Smrgcase $1 in 2966fe65f6Smrg '') 30c6a6acfbSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 31c6a6acfbSmrg exit 1; 32c6a6acfbSmrg ;; 3366fe65f6Smrg -h | --h*) 3466fe65f6Smrg cat <<\EOF 3566fe65f6SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3666fe65f6Smrg 3766fe65f6SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3866fe65f6Smrgas side-effects. 3966fe65f6Smrg 4066fe65f6SmrgEnvironment variables: 4166fe65f6Smrg depmode Dependency tracking mode. 42c6a6acfbSmrg source Source file read by 'PROGRAMS ARGS'. 43c6a6acfbSmrg object Object file output by 'PROGRAMS ARGS'. 4466fe65f6Smrg DEPDIR directory where to store dependencies. 4566fe65f6Smrg depfile Dependency file to output. 46c6a6acfbSmrg tmpdepfile Temporary file to use when outputting dependencies. 4766fe65f6Smrg libtool Whether libtool is used (yes/no). 4866fe65f6Smrg 4966fe65f6SmrgReport bugs to <bug-automake@gnu.org>. 5066fe65f6SmrgEOF 5166fe65f6Smrg exit $? 5266fe65f6Smrg ;; 5366fe65f6Smrg -v | --v*) 5466fe65f6Smrg echo "depcomp $scriptversion" 5566fe65f6Smrg exit $? 5666fe65f6Smrg ;; 5766fe65f6Smrgesac 5866fe65f6Smrg 59c6a6acfbSmrg# Get the directory component of the given path, and save it in the 60c6a6acfbSmrg# global variables '$dir'. Note that this directory component will 61c6a6acfbSmrg# be either empty or ending with a '/' character. This is deliberate. 62c6a6acfbSmrgset_dir_from () 63c6a6acfbSmrg{ 64c6a6acfbSmrg case $1 in 65c6a6acfbSmrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66c6a6acfbSmrg *) dir=;; 67c6a6acfbSmrg esac 68c6a6acfbSmrg} 69c6a6acfbSmrg 70c6a6acfbSmrg# Get the suffix-stripped basename of the given path, and save it the 71c6a6acfbSmrg# global variable '$base'. 72c6a6acfbSmrgset_base_from () 73c6a6acfbSmrg{ 74c6a6acfbSmrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75c6a6acfbSmrg} 76c6a6acfbSmrg 77c6a6acfbSmrg# If no dependency file was actually created by the compiler invocation, 78c6a6acfbSmrg# we still have to create a dummy depfile, to avoid errors with the 79c6a6acfbSmrg# Makefile "include basename.Plo" scheme. 80c6a6acfbSmrgmake_dummy_depfile () 81c6a6acfbSmrg{ 82c6a6acfbSmrg echo "#dummy" > "$depfile" 83c6a6acfbSmrg} 84c6a6acfbSmrg 85c6a6acfbSmrg# Factor out some common post-processing of the generated depfile. 86c6a6acfbSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 87c6a6acfbSmrgaix_post_process_depfile () 88c6a6acfbSmrg{ 89c6a6acfbSmrg # If the compiler actually managed to produce a dependency file, 90c6a6acfbSmrg # post-process it. 91c6a6acfbSmrg if test -f "$tmpdepfile"; then 92c6a6acfbSmrg # Each line is of the form 'foo.o: dependency.h'. 93c6a6acfbSmrg # Do two passes, one to just change these to 94c6a6acfbSmrg # $object: dependency.h 95c6a6acfbSmrg # and one to simply output 96c6a6acfbSmrg # dependency.h: 97c6a6acfbSmrg # which is needed to avoid the deleted-header problem. 98c6a6acfbSmrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99c6a6acfbSmrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100c6a6acfbSmrg } > "$depfile" 101c6a6acfbSmrg rm -f "$tmpdepfile" 102c6a6acfbSmrg else 103c6a6acfbSmrg make_dummy_depfile 104c6a6acfbSmrg fi 105c6a6acfbSmrg} 106c6a6acfbSmrg 107c6a6acfbSmrg# A tabulation character. 108c6a6acfbSmrgtab=' ' 109c6a6acfbSmrg# A newline character. 110c6a6acfbSmrgnl=' 111c6a6acfbSmrg' 112c6a6acfbSmrg# Character ranges might be problematic outside the C locale. 113c6a6acfbSmrg# These definitions help. 114c6a6acfbSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115c6a6acfbSmrglower=abcdefghijklmnopqrstuvwxyz 116c6a6acfbSmrgdigits=0123456789 117c6a6acfbSmrgalpha=${upper}${lower} 118c6a6acfbSmrg 11966fe65f6Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 12066fe65f6Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 12166fe65f6Smrg exit 1 12266fe65f6Smrgfi 12366fe65f6Smrg 12466fe65f6Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 12566fe65f6Smrgdepfile=${depfile-`echo "$object" | 12666fe65f6Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 12766fe65f6Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 12866fe65f6Smrg 12966fe65f6Smrgrm -f "$tmpdepfile" 13066fe65f6Smrg 131c6a6acfbSmrg# Avoid interferences from the environment. 132c6a6acfbSmrggccflag= dashmflag= 133c6a6acfbSmrg 13466fe65f6Smrg# Some modes work just like other modes, but use different flags. We 13566fe65f6Smrg# parameterize here, but still list the modes in the big case below, 13666fe65f6Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 13766fe65f6Smrg# here, because this file can only contain one case statement. 13866fe65f6Smrgif test "$depmode" = hp; then 13966fe65f6Smrg # HP compiler uses -M and no extra arg. 14066fe65f6Smrg gccflag=-M 14166fe65f6Smrg depmode=gcc 14266fe65f6Smrgfi 14366fe65f6Smrg 14466fe65f6Smrgif test "$depmode" = dashXmstdout; then 145c6a6acfbSmrg # This is just like dashmstdout with a different argument. 146c6a6acfbSmrg dashmflag=-xM 147c6a6acfbSmrg depmode=dashmstdout 14866fe65f6Smrgfi 14966fe65f6Smrg 150a9274bcdSmrgcygpath_u="cygpath -u -f -" 151a9274bcdSmrgif test "$depmode" = msvcmsys; then 152c6a6acfbSmrg # This is just like msvisualcpp but w/o cygpath translation. 153c6a6acfbSmrg # Just convert the backslash-escaped backslashes to single forward 154c6a6acfbSmrg # slashes to satisfy depend.m4 155c6a6acfbSmrg cygpath_u='sed s,\\\\,/,g' 156c6a6acfbSmrg depmode=msvisualcpp 157c6a6acfbSmrgfi 158c6a6acfbSmrg 159c6a6acfbSmrgif test "$depmode" = msvc7msys; then 160c6a6acfbSmrg # This is just like msvc7 but w/o cygpath translation. 161c6a6acfbSmrg # Just convert the backslash-escaped backslashes to single forward 162c6a6acfbSmrg # slashes to satisfy depend.m4 163c6a6acfbSmrg cygpath_u='sed s,\\\\,/,g' 164c6a6acfbSmrg depmode=msvc7 165c6a6acfbSmrgfi 166c6a6acfbSmrg 167c6a6acfbSmrgif test "$depmode" = xlc; then 168c6a6acfbSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169c6a6acfbSmrg gccflag=-qmakedep=gcc,-MF 170c6a6acfbSmrg depmode=gcc 171a9274bcdSmrgfi 172a9274bcdSmrg 17366fe65f6Smrgcase "$depmode" in 17466fe65f6Smrggcc3) 17566fe65f6Smrg## gcc 3 implements dependency tracking that does exactly what 17666fe65f6Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 17766fe65f6Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 17889d09728Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 17989d09728Smrg## the command line argument order; so add the flags where they 18089d09728Smrg## appear in depend2.am. Note that the slowdown incurred here 18189d09728Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 18289d09728Smrg for arg 18389d09728Smrg do 18489d09728Smrg case $arg in 18589d09728Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 18689d09728Smrg *) set fnord "$@" "$arg" ;; 18789d09728Smrg esac 18889d09728Smrg shift # fnord 18989d09728Smrg shift # $arg 19089d09728Smrg done 19189d09728Smrg "$@" 19266fe65f6Smrg stat=$? 193c6a6acfbSmrg if test $stat -ne 0; then 19466fe65f6Smrg rm -f "$tmpdepfile" 19566fe65f6Smrg exit $stat 19666fe65f6Smrg fi 19766fe65f6Smrg mv "$tmpdepfile" "$depfile" 19866fe65f6Smrg ;; 19966fe65f6Smrg 20066fe65f6Smrggcc) 201c6a6acfbSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202c6a6acfbSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203c6a6acfbSmrg## (see the conditional assignment to $gccflag above). 20466fe65f6Smrg## There are various ways to get dependency output from gcc. Here's 20566fe65f6Smrg## why we pick this rather obscure method: 20666fe65f6Smrg## - Don't want to use -MD because we'd like the dependencies to end 20766fe65f6Smrg## up in a subdir. Having to rename by hand is ugly. 20866fe65f6Smrg## (We might end up doing this anyway to support other compilers.) 20966fe65f6Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210c6a6acfbSmrg## -MM, not -M (despite what the docs say). Also, it might not be 211c6a6acfbSmrg## supported by the other compilers which use the 'gcc' depmode. 21266fe65f6Smrg## - Using -M directly means running the compiler twice (even worse 21366fe65f6Smrg## than renaming). 21466fe65f6Smrg if test -z "$gccflag"; then 21566fe65f6Smrg gccflag=-MD, 21666fe65f6Smrg fi 21766fe65f6Smrg "$@" -Wp,"$gccflag$tmpdepfile" 21866fe65f6Smrg stat=$? 219c6a6acfbSmrg if test $stat -ne 0; then 22066fe65f6Smrg rm -f "$tmpdepfile" 22166fe65f6Smrg exit $stat 22266fe65f6Smrg fi 22366fe65f6Smrg rm -f "$depfile" 22466fe65f6Smrg echo "$object : \\" > "$depfile" 225c6a6acfbSmrg # The second -e expression handles DOS-style file names with drive 226c6a6acfbSmrg # letters. 22766fe65f6Smrg sed -e 's/^[^:]*: / /' \ 22866fe65f6Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229c6a6acfbSmrg## This next piece of magic avoids the "deleted header file" problem. 23066fe65f6Smrg## The problem is that when a header file which appears in a .P file 23166fe65f6Smrg## is deleted, the dependency causes make to die (because there is 23266fe65f6Smrg## typically no way to rebuild the header). We avoid this by adding 23366fe65f6Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 23466fe65f6Smrg## this for us directly. 235c6a6acfbSmrg## Some versions of gcc put a space before the ':'. On the theory 23666fe65f6Smrg## that the space means something, we add a space to the output as 237c6a6acfbSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 238c6a6acfbSmrg## to the object. Take care to not repeat it in the output. 23966fe65f6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 24066fe65f6Smrg## correctly. Breaking it into two sed invocations is a workaround. 241c6a6acfbSmrg tr ' ' "$nl" < "$tmpdepfile" \ 242c6a6acfbSmrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243c6a6acfbSmrg | sed -e 's/$/ :/' >> "$depfile" 24466fe65f6Smrg rm -f "$tmpdepfile" 24566fe65f6Smrg ;; 24666fe65f6Smrg 24766fe65f6Smrghp) 24866fe65f6Smrg # This case exists only to let depend.m4 do its work. It works by 24966fe65f6Smrg # looking at the text of this script. This case will never be run, 25066fe65f6Smrg # since it is checked for above. 25166fe65f6Smrg exit 1 25266fe65f6Smrg ;; 25366fe65f6Smrg 25466fe65f6Smrgsgi) 25566fe65f6Smrg if test "$libtool" = yes; then 25666fe65f6Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 25766fe65f6Smrg else 25866fe65f6Smrg "$@" -MDupdate "$tmpdepfile" 25966fe65f6Smrg fi 26066fe65f6Smrg stat=$? 261c6a6acfbSmrg if test $stat -ne 0; then 26266fe65f6Smrg rm -f "$tmpdepfile" 26366fe65f6Smrg exit $stat 26466fe65f6Smrg fi 26566fe65f6Smrg rm -f "$depfile" 26666fe65f6Smrg 26766fe65f6Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 26866fe65f6Smrg echo "$object : \\" > "$depfile" 26966fe65f6Smrg # Clip off the initial element (the dependent). Don't try to be 27066fe65f6Smrg # clever and replace this with sed code, as IRIX sed won't handle 27166fe65f6Smrg # lines with more than a fixed number of characters (4096 in 27266fe65f6Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273c6a6acfbSmrg # the IRIX cc adds comments like '#:fec' to the end of the 27466fe65f6Smrg # dependency line. 275c6a6acfbSmrg tr ' ' "$nl" < "$tmpdepfile" \ 276c6a6acfbSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277c6a6acfbSmrg | tr "$nl" ' ' >> "$depfile" 278a9274bcdSmrg echo >> "$depfile" 27966fe65f6Smrg # The second pass generates a dummy entry for each header file. 280c6a6acfbSmrg tr ' ' "$nl" < "$tmpdepfile" \ 281c6a6acfbSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282c6a6acfbSmrg >> "$depfile" 28366fe65f6Smrg else 284c6a6acfbSmrg make_dummy_depfile 28566fe65f6Smrg fi 28666fe65f6Smrg rm -f "$tmpdepfile" 28766fe65f6Smrg ;; 28866fe65f6Smrg 289c6a6acfbSmrgxlc) 290c6a6acfbSmrg # This case exists only to let depend.m4 do its work. It works by 291c6a6acfbSmrg # looking at the text of this script. This case will never be run, 292c6a6acfbSmrg # since it is checked for above. 293c6a6acfbSmrg exit 1 294c6a6acfbSmrg ;; 295c6a6acfbSmrg 29666fe65f6Smrgaix) 29766fe65f6Smrg # The C for AIX Compiler uses -M and outputs the dependencies 29866fe65f6Smrg # in a .u file. In older versions, this file always lives in the 299c6a6acfbSmrg # current directory. Also, the AIX compiler puts '$object:' at the 30066fe65f6Smrg # start of each line; $object doesn't have directory information. 30166fe65f6Smrg # Version 6 uses the directory in both cases. 302c6a6acfbSmrg set_dir_from "$object" 303c6a6acfbSmrg set_base_from "$object" 30466fe65f6Smrg if test "$libtool" = yes; then 30589d09728Smrg tmpdepfile1=$dir$base.u 30689d09728Smrg tmpdepfile2=$base.u 30789d09728Smrg tmpdepfile3=$dir.libs/$base.u 30866fe65f6Smrg "$@" -Wc,-M 30966fe65f6Smrg else 31089d09728Smrg tmpdepfile1=$dir$base.u 31189d09728Smrg tmpdepfile2=$dir$base.u 31289d09728Smrg tmpdepfile3=$dir$base.u 31366fe65f6Smrg "$@" -M 31466fe65f6Smrg fi 31566fe65f6Smrg stat=$? 316c6a6acfbSmrg if test $stat -ne 0; then 31789d09728Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 31866fe65f6Smrg exit $stat 31966fe65f6Smrg fi 32066fe65f6Smrg 32189d09728Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 32289d09728Smrg do 32389d09728Smrg test -f "$tmpdepfile" && break 32489d09728Smrg done 325c6a6acfbSmrg aix_post_process_depfile 326c6a6acfbSmrg ;; 327c6a6acfbSmrg 328c6a6acfbSmrgtcc) 329c6a6acfbSmrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330c6a6acfbSmrg # FIXME: That version still under development at the moment of writing. 331c6a6acfbSmrg # Make that this statement remains true also for stable, released 332c6a6acfbSmrg # versions. 333c6a6acfbSmrg # It will wrap lines (doesn't matter whether long or short) with a 334c6a6acfbSmrg # trailing '\', as in: 335c6a6acfbSmrg # 336c6a6acfbSmrg # foo.o : \ 337c6a6acfbSmrg # foo.c \ 338c6a6acfbSmrg # foo.h \ 339c6a6acfbSmrg # 340c6a6acfbSmrg # It will put a trailing '\' even on the last line, and will use leading 341c6a6acfbSmrg # spaces rather than leading tabs (at least since its commit 0394caf7 342c6a6acfbSmrg # "Emit spaces for -MD"). 343c6a6acfbSmrg "$@" -MD -MF "$tmpdepfile" 344c6a6acfbSmrg stat=$? 345c6a6acfbSmrg if test $stat -ne 0; then 346c6a6acfbSmrg rm -f "$tmpdepfile" 347c6a6acfbSmrg exit $stat 34866fe65f6Smrg fi 349c6a6acfbSmrg rm -f "$depfile" 350c6a6acfbSmrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351c6a6acfbSmrg # We have to change lines of the first kind to '$object: \'. 352c6a6acfbSmrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353c6a6acfbSmrg # And for each line of the second kind, we have to emit a 'dep.h:' 354c6a6acfbSmrg # dummy dependency, to avoid the deleted-header problem. 355c6a6acfbSmrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 35666fe65f6Smrg rm -f "$tmpdepfile" 35766fe65f6Smrg ;; 35866fe65f6Smrg 359c6a6acfbSmrg## The order of this option in the case statement is important, since the 360c6a6acfbSmrg## shell code in configure will try each of these formats in the order 361c6a6acfbSmrg## listed in this file. A plain '-MD' option would be understood by many 362c6a6acfbSmrg## compilers, so we must ensure this comes after the gcc and icc options. 363c6a6acfbSmrgpgcc) 364c6a6acfbSmrg # Portland's C compiler understands '-MD'. 365c6a6acfbSmrg # Will always output deps to 'file.d' where file is the root name of the 366c6a6acfbSmrg # source file under compilation, even if file resides in a subdirectory. 367c6a6acfbSmrg # The object file name does not affect the name of the '.d' file. 368c6a6acfbSmrg # pgcc 10.2 will output 36966fe65f6Smrg # foo.o: sub/foo.c sub/foo.h 370c6a6acfbSmrg # and will wrap long lines using '\' : 37166fe65f6Smrg # foo.o: sub/foo.c ... \ 37266fe65f6Smrg # sub/foo.h ... \ 37366fe65f6Smrg # ... 374c6a6acfbSmrg set_dir_from "$object" 375c6a6acfbSmrg # Use the source, not the object, to determine the base name, since 376c6a6acfbSmrg # that's sadly what pgcc will do too. 377c6a6acfbSmrg set_base_from "$source" 378c6a6acfbSmrg tmpdepfile=$base.d 379c6a6acfbSmrg 380c6a6acfbSmrg # For projects that build the same source file twice into different object 381c6a6acfbSmrg # files, the pgcc approach of using the *source* file root name can cause 382c6a6acfbSmrg # problems in parallel builds. Use a locking strategy to avoid stomping on 383c6a6acfbSmrg # the same $tmpdepfile. 384c6a6acfbSmrg lockdir=$base.d-lock 385c6a6acfbSmrg trap " 386c6a6acfbSmrg echo '$0: caught signal, cleaning up...' >&2 387c6a6acfbSmrg rmdir '$lockdir' 388c6a6acfbSmrg exit 1 389c6a6acfbSmrg " 1 2 13 15 390c6a6acfbSmrg numtries=100 391c6a6acfbSmrg i=$numtries 392c6a6acfbSmrg while test $i -gt 0; do 393c6a6acfbSmrg # mkdir is a portable test-and-set. 394c6a6acfbSmrg if mkdir "$lockdir" 2>/dev/null; then 395c6a6acfbSmrg # This process acquired the lock. 396c6a6acfbSmrg "$@" -MD 397c6a6acfbSmrg stat=$? 398c6a6acfbSmrg # Release the lock. 399c6a6acfbSmrg rmdir "$lockdir" 400c6a6acfbSmrg break 401c6a6acfbSmrg else 402c6a6acfbSmrg # If the lock is being held by a different process, wait 403c6a6acfbSmrg # until the winning process is done or we timeout. 404c6a6acfbSmrg while test -d "$lockdir" && test $i -gt 0; do 405c6a6acfbSmrg sleep 1 406c6a6acfbSmrg i=`expr $i - 1` 407c6a6acfbSmrg done 408c6a6acfbSmrg fi 409c6a6acfbSmrg i=`expr $i - 1` 410c6a6acfbSmrg done 411c6a6acfbSmrg trap - 1 2 13 15 412c6a6acfbSmrg if test $i -le 0; then 413c6a6acfbSmrg echo "$0: failed to acquire lock after $numtries attempts" >&2 414c6a6acfbSmrg echo "$0: check lockdir '$lockdir'" >&2 415c6a6acfbSmrg exit 1 416c6a6acfbSmrg fi 41766fe65f6Smrg 418c6a6acfbSmrg if test $stat -ne 0; then 41966fe65f6Smrg rm -f "$tmpdepfile" 42066fe65f6Smrg exit $stat 42166fe65f6Smrg fi 42266fe65f6Smrg rm -f "$depfile" 42366fe65f6Smrg # Each line is of the form `foo.o: dependent.h', 42466fe65f6Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 42566fe65f6Smrg # Do two passes, one to just change these to 42666fe65f6Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 42766fe65f6Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 42866fe65f6Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 42966fe65f6Smrg # correctly. Breaking it into two sed invocations is a workaround. 430c6a6acfbSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431c6a6acfbSmrg | sed -e 's/$/ :/' >> "$depfile" 43266fe65f6Smrg rm -f "$tmpdepfile" 43366fe65f6Smrg ;; 43466fe65f6Smrg 43589d09728Smrghp2) 43689d09728Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 43789d09728Smrg # compilers, which have integrated preprocessors. The correct option 43889d09728Smrg # to use with these is +Maked; it writes dependencies to a file named 43989d09728Smrg # 'foo.d', which lands next to the object file, wherever that 44089d09728Smrg # happens to be. 44189d09728Smrg # Much of this is similar to the tru64 case; see comments there. 442c6a6acfbSmrg set_dir_from "$object" 443c6a6acfbSmrg set_base_from "$object" 44489d09728Smrg if test "$libtool" = yes; then 44589d09728Smrg tmpdepfile1=$dir$base.d 44689d09728Smrg tmpdepfile2=$dir.libs/$base.d 44789d09728Smrg "$@" -Wc,+Maked 44889d09728Smrg else 44989d09728Smrg tmpdepfile1=$dir$base.d 45089d09728Smrg tmpdepfile2=$dir$base.d 45189d09728Smrg "$@" +Maked 45289d09728Smrg fi 45389d09728Smrg stat=$? 454c6a6acfbSmrg if test $stat -ne 0; then 45589d09728Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 45689d09728Smrg exit $stat 45789d09728Smrg fi 45889d09728Smrg 45989d09728Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 46089d09728Smrg do 46189d09728Smrg test -f "$tmpdepfile" && break 46289d09728Smrg done 46389d09728Smrg if test -f "$tmpdepfile"; then 464c6a6acfbSmrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 465c6a6acfbSmrg # Add 'dependent.h:' lines. 466a9274bcdSmrg sed -ne '2,${ 467c6a6acfbSmrg s/^ *// 468c6a6acfbSmrg s/ \\*$// 469c6a6acfbSmrg s/$/:/ 470c6a6acfbSmrg p 471c6a6acfbSmrg }' "$tmpdepfile" >> "$depfile" 47289d09728Smrg else 473c6a6acfbSmrg make_dummy_depfile 47489d09728Smrg fi 47589d09728Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 47689d09728Smrg ;; 47789d09728Smrg 47866fe65f6Smrgtru64) 479c6a6acfbSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 480c6a6acfbSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481c6a6acfbSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482c6a6acfbSmrg # dependencies in 'foo.d' instead, so we check for that too. 483c6a6acfbSmrg # Subdirectories are respected. 484c6a6acfbSmrg set_dir_from "$object" 485c6a6acfbSmrg set_base_from "$object" 486c6a6acfbSmrg 487c6a6acfbSmrg if test "$libtool" = yes; then 488c6a6acfbSmrg # Libtool generates 2 separate objects for the 2 libraries. These 489c6a6acfbSmrg # two compilations output dependencies in $dir.libs/$base.o.d and 490c6a6acfbSmrg # in $dir$base.o.d. We have to check for both files, because 491c6a6acfbSmrg # one of the two compilations can be disabled. We should prefer 492c6a6acfbSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493c6a6acfbSmrg # automatically cleaned when .libs/ is deleted, while ignoring 494c6a6acfbSmrg # the former would cause a distcleancheck panic. 495c6a6acfbSmrg tmpdepfile1=$dir$base.o.d # libtool 1.5 496c6a6acfbSmrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497c6a6acfbSmrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498c6a6acfbSmrg "$@" -Wc,-MD 499c6a6acfbSmrg else 500c6a6acfbSmrg tmpdepfile1=$dir$base.d 501c6a6acfbSmrg tmpdepfile2=$dir$base.d 502c6a6acfbSmrg tmpdepfile3=$dir$base.d 503c6a6acfbSmrg "$@" -MD 504c6a6acfbSmrg fi 505c6a6acfbSmrg 506c6a6acfbSmrg stat=$? 507c6a6acfbSmrg if test $stat -ne 0; then 508c6a6acfbSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509c6a6acfbSmrg exit $stat 510c6a6acfbSmrg fi 511c6a6acfbSmrg 512c6a6acfbSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513c6a6acfbSmrg do 514c6a6acfbSmrg test -f "$tmpdepfile" && break 515c6a6acfbSmrg done 516c6a6acfbSmrg # Same post-processing that is required for AIX mode. 517c6a6acfbSmrg aix_post_process_depfile 518c6a6acfbSmrg ;; 519c6a6acfbSmrg 520c6a6acfbSmrgmsvc7) 521c6a6acfbSmrg if test "$libtool" = yes; then 522c6a6acfbSmrg showIncludes=-Wc,-showIncludes 523c6a6acfbSmrg else 524c6a6acfbSmrg showIncludes=-showIncludes 525c6a6acfbSmrg fi 526c6a6acfbSmrg "$@" $showIncludes > "$tmpdepfile" 527c6a6acfbSmrg stat=$? 528c6a6acfbSmrg grep -v '^Note: including file: ' "$tmpdepfile" 529c6a6acfbSmrg if test $stat -ne 0; then 530c6a6acfbSmrg rm -f "$tmpdepfile" 531c6a6acfbSmrg exit $stat 532c6a6acfbSmrg fi 533c6a6acfbSmrg rm -f "$depfile" 534c6a6acfbSmrg echo "$object : \\" > "$depfile" 535c6a6acfbSmrg # The first sed program below extracts the file names and escapes 536c6a6acfbSmrg # backslashes for cygpath. The second sed program outputs the file 537c6a6acfbSmrg # name when reading, but also accumulates all include files in the 538c6a6acfbSmrg # hold buffer in order to output them again at the end. This only 539c6a6acfbSmrg # works with sed implementations that can handle large buffers. 540c6a6acfbSmrg sed < "$tmpdepfile" -n ' 541c6a6acfbSmrg/^Note: including file: *\(.*\)/ { 542c6a6acfbSmrg s//\1/ 543c6a6acfbSmrg s/\\/\\\\/g 544c6a6acfbSmrg p 545c6a6acfbSmrg}' | $cygpath_u | sort -u | sed -n ' 546c6a6acfbSmrgs/ /\\ /g 547c6a6acfbSmrgs/\(.*\)/'"$tab"'\1 \\/p 548c6a6acfbSmrgs/.\(.*\) \\/\1:/ 549c6a6acfbSmrgH 550c6a6acfbSmrg$ { 551c6a6acfbSmrg s/.*/'"$tab"'/ 552c6a6acfbSmrg G 553c6a6acfbSmrg p 554c6a6acfbSmrg}' >> "$depfile" 555c6a6acfbSmrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556c6a6acfbSmrg rm -f "$tmpdepfile" 557c6a6acfbSmrg ;; 558c6a6acfbSmrg 559c6a6acfbSmrgmsvc7msys) 560c6a6acfbSmrg # This case exists only to let depend.m4 do its work. It works by 561c6a6acfbSmrg # looking at the text of this script. This case will never be run, 562c6a6acfbSmrg # since it is checked for above. 563c6a6acfbSmrg exit 1 564c6a6acfbSmrg ;; 56566fe65f6Smrg 56666fe65f6Smrg#nosideeffect) 56766fe65f6Smrg # This comment above is used by automake to tell side-effect 56866fe65f6Smrg # dependency tracking mechanisms from slower ones. 56966fe65f6Smrg 57066fe65f6Smrgdashmstdout) 57166fe65f6Smrg # Important note: in order to support this mode, a compiler *must* 57266fe65f6Smrg # always write the preprocessed file to stdout, regardless of -o. 57366fe65f6Smrg "$@" || exit $? 57466fe65f6Smrg 57566fe65f6Smrg # Remove the call to Libtool. 57666fe65f6Smrg if test "$libtool" = yes; then 577a9274bcdSmrg while test "X$1" != 'X--mode=compile'; do 57866fe65f6Smrg shift 57966fe65f6Smrg done 58066fe65f6Smrg shift 58166fe65f6Smrg fi 58266fe65f6Smrg 583c6a6acfbSmrg # Remove '-o $object'. 58466fe65f6Smrg IFS=" " 58566fe65f6Smrg for arg 58666fe65f6Smrg do 58766fe65f6Smrg case $arg in 58866fe65f6Smrg -o) 58966fe65f6Smrg shift 59066fe65f6Smrg ;; 59166fe65f6Smrg $object) 59266fe65f6Smrg shift 59366fe65f6Smrg ;; 59466fe65f6Smrg *) 59566fe65f6Smrg set fnord "$@" "$arg" 59666fe65f6Smrg shift # fnord 59766fe65f6Smrg shift # $arg 59866fe65f6Smrg ;; 59966fe65f6Smrg esac 60066fe65f6Smrg done 60166fe65f6Smrg 60266fe65f6Smrg test -z "$dashmflag" && dashmflag=-M 603c6a6acfbSmrg # Require at least two characters before searching for ':' 60466fe65f6Smrg # in the target name. This is to cope with DOS-style filenames: 605c6a6acfbSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 60666fe65f6Smrg "$@" $dashmflag | 607c6a6acfbSmrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 60866fe65f6Smrg rm -f "$depfile" 60966fe65f6Smrg cat < "$tmpdepfile" > "$depfile" 610c6a6acfbSmrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 611c6a6acfbSmrg # correctly. Breaking it into two sed invocations is a workaround. 612c6a6acfbSmrg tr ' ' "$nl" < "$tmpdepfile" \ 613c6a6acfbSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614c6a6acfbSmrg | sed -e 's/$/ :/' >> "$depfile" 61566fe65f6Smrg rm -f "$tmpdepfile" 61666fe65f6Smrg ;; 61766fe65f6Smrg 61866fe65f6SmrgdashXmstdout) 61966fe65f6Smrg # This case only exists to satisfy depend.m4. It is never actually 62066fe65f6Smrg # run, as this mode is specially recognized in the preamble. 62166fe65f6Smrg exit 1 62266fe65f6Smrg ;; 62366fe65f6Smrg 62466fe65f6Smrgmakedepend) 62566fe65f6Smrg "$@" || exit $? 62666fe65f6Smrg # Remove any Libtool call 62766fe65f6Smrg if test "$libtool" = yes; then 628a9274bcdSmrg while test "X$1" != 'X--mode=compile'; do 62966fe65f6Smrg shift 63066fe65f6Smrg done 63166fe65f6Smrg shift 63266fe65f6Smrg fi 63366fe65f6Smrg # X makedepend 63466fe65f6Smrg shift 635a9274bcdSmrg cleared=no eat=no 636a9274bcdSmrg for arg 637a9274bcdSmrg do 63866fe65f6Smrg case $cleared in 63966fe65f6Smrg no) 64066fe65f6Smrg set ""; shift 64166fe65f6Smrg cleared=yes ;; 64266fe65f6Smrg esac 643a9274bcdSmrg if test $eat = yes; then 644a9274bcdSmrg eat=no 645a9274bcdSmrg continue 646a9274bcdSmrg fi 64766fe65f6Smrg case "$arg" in 64866fe65f6Smrg -D*|-I*) 64966fe65f6Smrg set fnord "$@" "$arg"; shift ;; 65066fe65f6Smrg # Strip any option that makedepend may not understand. Remove 65166fe65f6Smrg # the object too, otherwise makedepend will parse it as a source file. 652a9274bcdSmrg -arch) 653a9274bcdSmrg eat=yes ;; 65466fe65f6Smrg -*|$object) 65566fe65f6Smrg ;; 65666fe65f6Smrg *) 65766fe65f6Smrg set fnord "$@" "$arg"; shift ;; 65866fe65f6Smrg esac 65966fe65f6Smrg done 660a9274bcdSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 66166fe65f6Smrg touch "$tmpdepfile" 66266fe65f6Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 66366fe65f6Smrg rm -f "$depfile" 664c6a6acfbSmrg # makedepend may prepend the VPATH from the source file name to the object. 665c6a6acfbSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 666c6a6acfbSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667c6a6acfbSmrg # Some versions of the HPUX 10.20 sed can't process the last invocation 668c6a6acfbSmrg # correctly. Breaking it into two sed invocations is a workaround. 669c6a6acfbSmrg sed '1,2d' "$tmpdepfile" \ 670c6a6acfbSmrg | tr ' ' "$nl" \ 671c6a6acfbSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672c6a6acfbSmrg | sed -e 's/$/ :/' >> "$depfile" 67366fe65f6Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 67466fe65f6Smrg ;; 67566fe65f6Smrg 67666fe65f6Smrgcpp) 67766fe65f6Smrg # Important note: in order to support this mode, a compiler *must* 67866fe65f6Smrg # always write the preprocessed file to stdout. 67966fe65f6Smrg "$@" || exit $? 68066fe65f6Smrg 68166fe65f6Smrg # Remove the call to Libtool. 68266fe65f6Smrg if test "$libtool" = yes; then 683a9274bcdSmrg while test "X$1" != 'X--mode=compile'; do 68466fe65f6Smrg shift 68566fe65f6Smrg done 68666fe65f6Smrg shift 68766fe65f6Smrg fi 68866fe65f6Smrg 689c6a6acfbSmrg # Remove '-o $object'. 69066fe65f6Smrg IFS=" " 69166fe65f6Smrg for arg 69266fe65f6Smrg do 69366fe65f6Smrg case $arg in 69466fe65f6Smrg -o) 69566fe65f6Smrg shift 69666fe65f6Smrg ;; 69766fe65f6Smrg $object) 69866fe65f6Smrg shift 69966fe65f6Smrg ;; 70066fe65f6Smrg *) 70166fe65f6Smrg set fnord "$@" "$arg" 70266fe65f6Smrg shift # fnord 70366fe65f6Smrg shift # $arg 70466fe65f6Smrg ;; 70566fe65f6Smrg esac 70666fe65f6Smrg done 70766fe65f6Smrg 708c6a6acfbSmrg "$@" -E \ 709c6a6acfbSmrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710c6a6acfbSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711c6a6acfbSmrg | sed '$ s: \\$::' > "$tmpdepfile" 71266fe65f6Smrg rm -f "$depfile" 71366fe65f6Smrg echo "$object : \\" > "$depfile" 71466fe65f6Smrg cat < "$tmpdepfile" >> "$depfile" 71566fe65f6Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 71666fe65f6Smrg rm -f "$tmpdepfile" 71766fe65f6Smrg ;; 71866fe65f6Smrg 71966fe65f6Smrgmsvisualcpp) 72066fe65f6Smrg # Important note: in order to support this mode, a compiler *must* 721a9274bcdSmrg # always write the preprocessed file to stdout. 72266fe65f6Smrg "$@" || exit $? 723a9274bcdSmrg 724a9274bcdSmrg # Remove the call to Libtool. 725a9274bcdSmrg if test "$libtool" = yes; then 726a9274bcdSmrg while test "X$1" != 'X--mode=compile'; do 727a9274bcdSmrg shift 728a9274bcdSmrg done 729a9274bcdSmrg shift 730a9274bcdSmrg fi 731a9274bcdSmrg 73266fe65f6Smrg IFS=" " 73366fe65f6Smrg for arg 73466fe65f6Smrg do 73566fe65f6Smrg case "$arg" in 736a9274bcdSmrg -o) 737a9274bcdSmrg shift 738a9274bcdSmrg ;; 739a9274bcdSmrg $object) 740a9274bcdSmrg shift 741a9274bcdSmrg ;; 74266fe65f6Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743c6a6acfbSmrg set fnord "$@" 744c6a6acfbSmrg shift 745c6a6acfbSmrg shift 746c6a6acfbSmrg ;; 74766fe65f6Smrg *) 748c6a6acfbSmrg set fnord "$@" "$arg" 749c6a6acfbSmrg shift 750c6a6acfbSmrg shift 751c6a6acfbSmrg ;; 75266fe65f6Smrg esac 75366fe65f6Smrg done 754a9274bcdSmrg "$@" -E 2>/dev/null | 755a9274bcdSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 75666fe65f6Smrg rm -f "$depfile" 75766fe65f6Smrg echo "$object : \\" > "$depfile" 758c6a6acfbSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 759c6a6acfbSmrg echo "$tab" >> "$depfile" 760a9274bcdSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 76166fe65f6Smrg rm -f "$tmpdepfile" 76266fe65f6Smrg ;; 76366fe65f6Smrg 764a9274bcdSmrgmsvcmsys) 765a9274bcdSmrg # This case exists only to let depend.m4 do its work. It works by 766a9274bcdSmrg # looking at the text of this script. This case will never be run, 767a9274bcdSmrg # since it is checked for above. 768a9274bcdSmrg exit 1 769a9274bcdSmrg ;; 770a9274bcdSmrg 77166fe65f6Smrgnone) 77266fe65f6Smrg exec "$@" 77366fe65f6Smrg ;; 77466fe65f6Smrg 77566fe65f6Smrg*) 77666fe65f6Smrg echo "Unknown depmode $depmode" 1>&2 77766fe65f6Smrg exit 1 77866fe65f6Smrg ;; 77966fe65f6Smrgesac 78066fe65f6Smrg 78166fe65f6Smrgexit 0 78266fe65f6Smrg 78366fe65f6Smrg# Local Variables: 78466fe65f6Smrg# mode: shell-script 78566fe65f6Smrg# sh-indentation: 2 786bc77032bSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 78766fe65f6Smrg# time-stamp-start: "scriptversion=" 78866fe65f6Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 789bc77032bSmrg# time-stamp-time-zone: "UTC0" 790a9274bcdSmrg# time-stamp-end: "; # UTC" 79166fe65f6Smrg# End: 792