depcomp revision 1b5d61b8
11b5d61b8Smrg#!/bin/sh 205b261ecSmrg# depcomp - compile a program generating dependencies as side-effects 305b261ecSmrg 41b5d61b8Smrgscriptversion=2016-01-11.22; # UTC 505b261ecSmrg 61b5d61b8Smrg# Copyright (C) 1999-2017 Free Software Foundation, Inc. 705b261ecSmrg 805b261ecSmrg# This program is free software; you can redistribute it and/or modify 905b261ecSmrg# it under the terms of the GNU General Public License as published by 1005b261ecSmrg# the Free Software Foundation; either version 2, or (at your option) 1105b261ecSmrg# any later version. 1205b261ecSmrg 1305b261ecSmrg# This program is distributed in the hope that it will be useful, 1405b261ecSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1505b261ecSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1605b261ecSmrg# GNU General Public License for more details. 1705b261ecSmrg 1805b261ecSmrg# You should have received a copy of the GNU General Public License 1935c4bbdfSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2005b261ecSmrg 2105b261ecSmrg# As a special exception to the GNU General Public License, if you 2205b261ecSmrg# distribute this file as part of a program that contains a 2305b261ecSmrg# configuration script generated by Autoconf, you may include it under 2405b261ecSmrg# the same distribution terms that you use for the rest of that program. 2505b261ecSmrg 2605b261ecSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2705b261ecSmrg 2805b261ecSmrgcase $1 in 2905b261ecSmrg '') 3035c4bbdfSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 3135c4bbdfSmrg exit 1; 3235c4bbdfSmrg ;; 3305b261ecSmrg -h | --h*) 3405b261ecSmrg cat <<\EOF 3505b261ecSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3605b261ecSmrg 3705b261ecSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3805b261ecSmrgas side-effects. 3905b261ecSmrg 4005b261ecSmrgEnvironment variables: 4105b261ecSmrg depmode Dependency tracking mode. 4235c4bbdfSmrg source Source file read by 'PROGRAMS ARGS'. 4335c4bbdfSmrg object Object file output by 'PROGRAMS ARGS'. 4405b261ecSmrg DEPDIR directory where to store dependencies. 4505b261ecSmrg depfile Dependency file to output. 4635c4bbdfSmrg tmpdepfile Temporary file to use when outputting dependencies. 4705b261ecSmrg libtool Whether libtool is used (yes/no). 4805b261ecSmrg 4905b261ecSmrgReport bugs to <bug-automake@gnu.org>. 5005b261ecSmrgEOF 5105b261ecSmrg exit $? 5205b261ecSmrg ;; 5305b261ecSmrg -v | --v*) 5405b261ecSmrg echo "depcomp $scriptversion" 5505b261ecSmrg exit $? 5605b261ecSmrg ;; 5705b261ecSmrgesac 5805b261ecSmrg 5935c4bbdfSmrg# Get the directory component of the given path, and save it in the 6035c4bbdfSmrg# global variables '$dir'. Note that this directory component will 6135c4bbdfSmrg# be either empty or ending with a '/' character. This is deliberate. 6235c4bbdfSmrgset_dir_from () 6335c4bbdfSmrg{ 6435c4bbdfSmrg case $1 in 6535c4bbdfSmrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 6635c4bbdfSmrg *) dir=;; 6735c4bbdfSmrg esac 6835c4bbdfSmrg} 6935c4bbdfSmrg 7035c4bbdfSmrg# Get the suffix-stripped basename of the given path, and save it the 7135c4bbdfSmrg# global variable '$base'. 7235c4bbdfSmrgset_base_from () 7335c4bbdfSmrg{ 7435c4bbdfSmrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 7535c4bbdfSmrg} 7635c4bbdfSmrg 7735c4bbdfSmrg# If no dependency file was actually created by the compiler invocation, 7835c4bbdfSmrg# we still have to create a dummy depfile, to avoid errors with the 7935c4bbdfSmrg# Makefile "include basename.Plo" scheme. 8035c4bbdfSmrgmake_dummy_depfile () 8135c4bbdfSmrg{ 8235c4bbdfSmrg echo "#dummy" > "$depfile" 8335c4bbdfSmrg} 8435c4bbdfSmrg 8535c4bbdfSmrg# Factor out some common post-processing of the generated depfile. 8635c4bbdfSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 8735c4bbdfSmrgaix_post_process_depfile () 8835c4bbdfSmrg{ 8935c4bbdfSmrg # If the compiler actually managed to produce a dependency file, 9035c4bbdfSmrg # post-process it. 9135c4bbdfSmrg if test -f "$tmpdepfile"; then 9235c4bbdfSmrg # Each line is of the form 'foo.o: dependency.h'. 9335c4bbdfSmrg # Do two passes, one to just change these to 9435c4bbdfSmrg # $object: dependency.h 9535c4bbdfSmrg # and one to simply output 9635c4bbdfSmrg # dependency.h: 9735c4bbdfSmrg # which is needed to avoid the deleted-header problem. 9835c4bbdfSmrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 9935c4bbdfSmrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 10035c4bbdfSmrg } > "$depfile" 10135c4bbdfSmrg rm -f "$tmpdepfile" 10235c4bbdfSmrg else 10335c4bbdfSmrg make_dummy_depfile 10435c4bbdfSmrg fi 10535c4bbdfSmrg} 10635c4bbdfSmrg 10735c4bbdfSmrg# A tabulation character. 10835c4bbdfSmrgtab=' ' 10935c4bbdfSmrg# A newline character. 11035c4bbdfSmrgnl=' 11135c4bbdfSmrg' 11235c4bbdfSmrg# Character ranges might be problematic outside the C locale. 11335c4bbdfSmrg# These definitions help. 11435c4bbdfSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 11535c4bbdfSmrglower=abcdefghijklmnopqrstuvwxyz 11635c4bbdfSmrgdigits=0123456789 11735c4bbdfSmrgalpha=${upper}${lower} 11835c4bbdfSmrg 11905b261ecSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 12005b261ecSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 12105b261ecSmrg exit 1 12205b261ecSmrgfi 12305b261ecSmrg 12405b261ecSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 12505b261ecSmrgdepfile=${depfile-`echo "$object" | 12605b261ecSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 12705b261ecSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 12805b261ecSmrg 12905b261ecSmrgrm -f "$tmpdepfile" 13005b261ecSmrg 13135c4bbdfSmrg# Avoid interferences from the environment. 13235c4bbdfSmrggccflag= dashmflag= 13335c4bbdfSmrg 13405b261ecSmrg# Some modes work just like other modes, but use different flags. We 13505b261ecSmrg# parameterize here, but still list the modes in the big case below, 13605b261ecSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 13705b261ecSmrg# here, because this file can only contain one case statement. 13805b261ecSmrgif test "$depmode" = hp; then 13905b261ecSmrg # HP compiler uses -M and no extra arg. 14005b261ecSmrg gccflag=-M 14105b261ecSmrg depmode=gcc 14205b261ecSmrgfi 14305b261ecSmrg 14405b261ecSmrgif test "$depmode" = dashXmstdout; then 14535c4bbdfSmrg # This is just like dashmstdout with a different argument. 14635c4bbdfSmrg dashmflag=-xM 14735c4bbdfSmrg depmode=dashmstdout 14835c4bbdfSmrgfi 14935c4bbdfSmrg 15035c4bbdfSmrgcygpath_u="cygpath -u -f -" 15135c4bbdfSmrgif test "$depmode" = msvcmsys; then 15235c4bbdfSmrg # This is just like msvisualcpp but w/o cygpath translation. 15335c4bbdfSmrg # Just convert the backslash-escaped backslashes to single forward 15435c4bbdfSmrg # slashes to satisfy depend.m4 15535c4bbdfSmrg cygpath_u='sed s,\\\\,/,g' 15635c4bbdfSmrg depmode=msvisualcpp 15735c4bbdfSmrgfi 15835c4bbdfSmrg 15935c4bbdfSmrgif test "$depmode" = msvc7msys; then 16035c4bbdfSmrg # This is just like msvc7 but w/o cygpath translation. 16135c4bbdfSmrg # Just convert the backslash-escaped backslashes to single forward 16235c4bbdfSmrg # slashes to satisfy depend.m4 16335c4bbdfSmrg cygpath_u='sed s,\\\\,/,g' 16435c4bbdfSmrg depmode=msvc7 16535c4bbdfSmrgfi 16635c4bbdfSmrg 16735c4bbdfSmrgif test "$depmode" = xlc; then 16835c4bbdfSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 16935c4bbdfSmrg gccflag=-qmakedep=gcc,-MF 17035c4bbdfSmrg depmode=gcc 17105b261ecSmrgfi 17205b261ecSmrg 17305b261ecSmrgcase "$depmode" in 17405b261ecSmrggcc3) 17505b261ecSmrg## gcc 3 implements dependency tracking that does exactly what 17605b261ecSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 17705b261ecSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 17805b261ecSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 17905b261ecSmrg## the command line argument order; so add the flags where they 18005b261ecSmrg## appear in depend2.am. Note that the slowdown incurred here 18105b261ecSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 18205b261ecSmrg for arg 18305b261ecSmrg do 18405b261ecSmrg case $arg in 18505b261ecSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 18605b261ecSmrg *) set fnord "$@" "$arg" ;; 18705b261ecSmrg esac 18805b261ecSmrg shift # fnord 18905b261ecSmrg shift # $arg 19005b261ecSmrg done 19105b261ecSmrg "$@" 19205b261ecSmrg stat=$? 19335c4bbdfSmrg if test $stat -ne 0; then 19405b261ecSmrg rm -f "$tmpdepfile" 19505b261ecSmrg exit $stat 19605b261ecSmrg fi 19705b261ecSmrg mv "$tmpdepfile" "$depfile" 19805b261ecSmrg ;; 19905b261ecSmrg 20005b261ecSmrggcc) 20135c4bbdfSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 20235c4bbdfSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 20335c4bbdfSmrg## (see the conditional assignment to $gccflag above). 20405b261ecSmrg## There are various ways to get dependency output from gcc. Here's 20505b261ecSmrg## why we pick this rather obscure method: 20605b261ecSmrg## - Don't want to use -MD because we'd like the dependencies to end 20705b261ecSmrg## up in a subdir. Having to rename by hand is ugly. 20805b261ecSmrg## (We might end up doing this anyway to support other compilers.) 20905b261ecSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 21035c4bbdfSmrg## -MM, not -M (despite what the docs say). Also, it might not be 21135c4bbdfSmrg## supported by the other compilers which use the 'gcc' depmode. 21205b261ecSmrg## - Using -M directly means running the compiler twice (even worse 21305b261ecSmrg## than renaming). 21405b261ecSmrg if test -z "$gccflag"; then 21505b261ecSmrg gccflag=-MD, 21605b261ecSmrg fi 21705b261ecSmrg "$@" -Wp,"$gccflag$tmpdepfile" 21805b261ecSmrg stat=$? 21935c4bbdfSmrg if test $stat -ne 0; then 22005b261ecSmrg rm -f "$tmpdepfile" 22105b261ecSmrg exit $stat 22205b261ecSmrg fi 22305b261ecSmrg rm -f "$depfile" 22405b261ecSmrg echo "$object : \\" > "$depfile" 22535c4bbdfSmrg # The second -e expression handles DOS-style file names with drive 22635c4bbdfSmrg # letters. 22705b261ecSmrg sed -e 's/^[^:]*: / /' \ 22805b261ecSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 22935c4bbdfSmrg## This next piece of magic avoids the "deleted header file" problem. 23005b261ecSmrg## The problem is that when a header file which appears in a .P file 23105b261ecSmrg## is deleted, the dependency causes make to die (because there is 23205b261ecSmrg## typically no way to rebuild the header). We avoid this by adding 23305b261ecSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 23405b261ecSmrg## this for us directly. 23535c4bbdfSmrg## Some versions of gcc put a space before the ':'. On the theory 23605b261ecSmrg## that the space means something, we add a space to the output as 23735c4bbdfSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 23835c4bbdfSmrg## to the object. Take care to not repeat it in the output. 23905b261ecSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 24005b261ecSmrg## correctly. Breaking it into two sed invocations is a workaround. 24135c4bbdfSmrg tr ' ' "$nl" < "$tmpdepfile" \ 24235c4bbdfSmrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 24335c4bbdfSmrg | sed -e 's/$/ :/' >> "$depfile" 24405b261ecSmrg rm -f "$tmpdepfile" 24505b261ecSmrg ;; 24605b261ecSmrg 24705b261ecSmrghp) 24805b261ecSmrg # This case exists only to let depend.m4 do its work. It works by 24905b261ecSmrg # looking at the text of this script. This case will never be run, 25005b261ecSmrg # since it is checked for above. 25105b261ecSmrg exit 1 25205b261ecSmrg ;; 25305b261ecSmrg 25405b261ecSmrgsgi) 25505b261ecSmrg if test "$libtool" = yes; then 25605b261ecSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 25705b261ecSmrg else 25805b261ecSmrg "$@" -MDupdate "$tmpdepfile" 25905b261ecSmrg fi 26005b261ecSmrg stat=$? 26135c4bbdfSmrg if test $stat -ne 0; then 26205b261ecSmrg rm -f "$tmpdepfile" 26305b261ecSmrg exit $stat 26405b261ecSmrg fi 26505b261ecSmrg rm -f "$depfile" 26605b261ecSmrg 26705b261ecSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 26805b261ecSmrg echo "$object : \\" > "$depfile" 26905b261ecSmrg # Clip off the initial element (the dependent). Don't try to be 27005b261ecSmrg # clever and replace this with sed code, as IRIX sed won't handle 27105b261ecSmrg # lines with more than a fixed number of characters (4096 in 27205b261ecSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 27335c4bbdfSmrg # the IRIX cc adds comments like '#:fec' to the end of the 27405b261ecSmrg # dependency line. 27535c4bbdfSmrg tr ' ' "$nl" < "$tmpdepfile" \ 27635c4bbdfSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 27735c4bbdfSmrg | tr "$nl" ' ' >> "$depfile" 27835c4bbdfSmrg echo >> "$depfile" 27905b261ecSmrg # The second pass generates a dummy entry for each header file. 28035c4bbdfSmrg tr ' ' "$nl" < "$tmpdepfile" \ 28135c4bbdfSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 28235c4bbdfSmrg >> "$depfile" 28305b261ecSmrg else 28435c4bbdfSmrg make_dummy_depfile 28505b261ecSmrg fi 28605b261ecSmrg rm -f "$tmpdepfile" 28705b261ecSmrg ;; 28805b261ecSmrg 28935c4bbdfSmrgxlc) 29035c4bbdfSmrg # This case exists only to let depend.m4 do its work. It works by 29135c4bbdfSmrg # looking at the text of this script. This case will never be run, 29235c4bbdfSmrg # since it is checked for above. 29335c4bbdfSmrg exit 1 29435c4bbdfSmrg ;; 29535c4bbdfSmrg 29605b261ecSmrgaix) 29705b261ecSmrg # The C for AIX Compiler uses -M and outputs the dependencies 29805b261ecSmrg # in a .u file. In older versions, this file always lives in the 29935c4bbdfSmrg # current directory. Also, the AIX compiler puts '$object:' at the 30005b261ecSmrg # start of each line; $object doesn't have directory information. 30105b261ecSmrg # Version 6 uses the directory in both cases. 30235c4bbdfSmrg set_dir_from "$object" 30335c4bbdfSmrg set_base_from "$object" 30405b261ecSmrg if test "$libtool" = yes; then 30535c4bbdfSmrg tmpdepfile1=$dir$base.u 30635c4bbdfSmrg tmpdepfile2=$base.u 30735c4bbdfSmrg tmpdepfile3=$dir.libs/$base.u 30805b261ecSmrg "$@" -Wc,-M 30905b261ecSmrg else 31035c4bbdfSmrg tmpdepfile1=$dir$base.u 31135c4bbdfSmrg tmpdepfile2=$dir$base.u 31235c4bbdfSmrg tmpdepfile3=$dir$base.u 31305b261ecSmrg "$@" -M 31405b261ecSmrg fi 31505b261ecSmrg stat=$? 31635c4bbdfSmrg if test $stat -ne 0; then 31735c4bbdfSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 31835c4bbdfSmrg exit $stat 319475c125cSmrg fi 320475c125cSmrg 32135c4bbdfSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 32235c4bbdfSmrg do 32335c4bbdfSmrg test -f "$tmpdepfile" && break 32435c4bbdfSmrg done 32535c4bbdfSmrg aix_post_process_depfile 32635c4bbdfSmrg ;; 32735c4bbdfSmrg 32835c4bbdfSmrgtcc) 32935c4bbdfSmrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 33035c4bbdfSmrg # FIXME: That version still under development at the moment of writing. 33135c4bbdfSmrg # Make that this statement remains true also for stable, released 33235c4bbdfSmrg # versions. 33335c4bbdfSmrg # It will wrap lines (doesn't matter whether long or short) with a 33435c4bbdfSmrg # trailing '\', as in: 33535c4bbdfSmrg # 33635c4bbdfSmrg # foo.o : \ 33735c4bbdfSmrg # foo.c \ 33835c4bbdfSmrg # foo.h \ 33935c4bbdfSmrg # 34035c4bbdfSmrg # It will put a trailing '\' even on the last line, and will use leading 34135c4bbdfSmrg # spaces rather than leading tabs (at least since its commit 0394caf7 34235c4bbdfSmrg # "Emit spaces for -MD"). 34335c4bbdfSmrg "$@" -MD -MF "$tmpdepfile" 34435c4bbdfSmrg stat=$? 34535c4bbdfSmrg if test $stat -ne 0; then 346475c125cSmrg rm -f "$tmpdepfile" 34705b261ecSmrg exit $stat 34805b261ecSmrg fi 34935c4bbdfSmrg rm -f "$depfile" 35035c4bbdfSmrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 35135c4bbdfSmrg # We have to change lines of the first kind to '$object: \'. 35235c4bbdfSmrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 35335c4bbdfSmrg # And for each line of the second kind, we have to emit a 'dep.h:' 35435c4bbdfSmrg # dummy dependency, to avoid the deleted-header problem. 35535c4bbdfSmrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 35605b261ecSmrg rm -f "$tmpdepfile" 35705b261ecSmrg ;; 35805b261ecSmrg 35935c4bbdfSmrg## The order of this option in the case statement is important, since the 36035c4bbdfSmrg## shell code in configure will try each of these formats in the order 36135c4bbdfSmrg## listed in this file. A plain '-MD' option would be understood by many 36235c4bbdfSmrg## compilers, so we must ensure this comes after the gcc and icc options. 36335c4bbdfSmrgpgcc) 36435c4bbdfSmrg # Portland's C compiler understands '-MD'. 36535c4bbdfSmrg # Will always output deps to 'file.d' where file is the root name of the 36635c4bbdfSmrg # source file under compilation, even if file resides in a subdirectory. 36735c4bbdfSmrg # The object file name does not affect the name of the '.d' file. 36835c4bbdfSmrg # pgcc 10.2 will output 36905b261ecSmrg # foo.o: sub/foo.c sub/foo.h 37035c4bbdfSmrg # and will wrap long lines using '\' : 37105b261ecSmrg # foo.o: sub/foo.c ... \ 37205b261ecSmrg # sub/foo.h ... \ 37305b261ecSmrg # ... 37435c4bbdfSmrg set_dir_from "$object" 37535c4bbdfSmrg # Use the source, not the object, to determine the base name, since 37635c4bbdfSmrg # that's sadly what pgcc will do too. 37735c4bbdfSmrg set_base_from "$source" 37835c4bbdfSmrg tmpdepfile=$base.d 37935c4bbdfSmrg 38035c4bbdfSmrg # For projects that build the same source file twice into different object 38135c4bbdfSmrg # files, the pgcc approach of using the *source* file root name can cause 38235c4bbdfSmrg # problems in parallel builds. Use a locking strategy to avoid stomping on 38335c4bbdfSmrg # the same $tmpdepfile. 38435c4bbdfSmrg lockdir=$base.d-lock 38535c4bbdfSmrg trap " 38635c4bbdfSmrg echo '$0: caught signal, cleaning up...' >&2 38735c4bbdfSmrg rmdir '$lockdir' 38835c4bbdfSmrg exit 1 38935c4bbdfSmrg " 1 2 13 15 39035c4bbdfSmrg numtries=100 39135c4bbdfSmrg i=$numtries 39235c4bbdfSmrg while test $i -gt 0; do 39335c4bbdfSmrg # mkdir is a portable test-and-set. 39435c4bbdfSmrg if mkdir "$lockdir" 2>/dev/null; then 39535c4bbdfSmrg # This process acquired the lock. 39635c4bbdfSmrg "$@" -MD 39735c4bbdfSmrg stat=$? 39835c4bbdfSmrg # Release the lock. 39935c4bbdfSmrg rmdir "$lockdir" 40035c4bbdfSmrg break 40135c4bbdfSmrg else 40235c4bbdfSmrg # If the lock is being held by a different process, wait 40335c4bbdfSmrg # until the winning process is done or we timeout. 40435c4bbdfSmrg while test -d "$lockdir" && test $i -gt 0; do 40535c4bbdfSmrg sleep 1 40635c4bbdfSmrg i=`expr $i - 1` 40735c4bbdfSmrg done 40835c4bbdfSmrg fi 40935c4bbdfSmrg i=`expr $i - 1` 41035c4bbdfSmrg done 41135c4bbdfSmrg trap - 1 2 13 15 41235c4bbdfSmrg if test $i -le 0; then 41335c4bbdfSmrg echo "$0: failed to acquire lock after $numtries attempts" >&2 41435c4bbdfSmrg echo "$0: check lockdir '$lockdir'" >&2 41535c4bbdfSmrg exit 1 41635c4bbdfSmrg fi 41705b261ecSmrg 41835c4bbdfSmrg if test $stat -ne 0; then 41905b261ecSmrg rm -f "$tmpdepfile" 42005b261ecSmrg exit $stat 42105b261ecSmrg fi 42205b261ecSmrg rm -f "$depfile" 42305b261ecSmrg # Each line is of the form `foo.o: dependent.h', 42405b261ecSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 42505b261ecSmrg # Do two passes, one to just change these to 42605b261ecSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 42705b261ecSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 42805b261ecSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 42905b261ecSmrg # correctly. Breaking it into two sed invocations is a workaround. 43035c4bbdfSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 43135c4bbdfSmrg | sed -e 's/$/ :/' >> "$depfile" 43205b261ecSmrg rm -f "$tmpdepfile" 43305b261ecSmrg ;; 43405b261ecSmrg 43505b261ecSmrghp2) 43605b261ecSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 43705b261ecSmrg # compilers, which have integrated preprocessors. The correct option 43805b261ecSmrg # to use with these is +Maked; it writes dependencies to a file named 43905b261ecSmrg # 'foo.d', which lands next to the object file, wherever that 44005b261ecSmrg # happens to be. 44105b261ecSmrg # Much of this is similar to the tru64 case; see comments there. 44235c4bbdfSmrg set_dir_from "$object" 44335c4bbdfSmrg set_base_from "$object" 44405b261ecSmrg if test "$libtool" = yes; then 44505b261ecSmrg tmpdepfile1=$dir$base.d 44605b261ecSmrg tmpdepfile2=$dir.libs/$base.d 44705b261ecSmrg "$@" -Wc,+Maked 44805b261ecSmrg else 44905b261ecSmrg tmpdepfile1=$dir$base.d 45005b261ecSmrg tmpdepfile2=$dir$base.d 45105b261ecSmrg "$@" +Maked 45205b261ecSmrg fi 45305b261ecSmrg stat=$? 45435c4bbdfSmrg if test $stat -ne 0; then 45505b261ecSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 45605b261ecSmrg exit $stat 45705b261ecSmrg fi 45805b261ecSmrg 45905b261ecSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 46005b261ecSmrg do 46105b261ecSmrg test -f "$tmpdepfile" && break 46205b261ecSmrg done 46305b261ecSmrg if test -f "$tmpdepfile"; then 46435c4bbdfSmrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 46535c4bbdfSmrg # Add 'dependent.h:' lines. 46635c4bbdfSmrg sed -ne '2,${ 46735c4bbdfSmrg s/^ *// 46835c4bbdfSmrg s/ \\*$// 46935c4bbdfSmrg s/$/:/ 47035c4bbdfSmrg p 47135c4bbdfSmrg }' "$tmpdepfile" >> "$depfile" 47205b261ecSmrg else 47335c4bbdfSmrg make_dummy_depfile 47405b261ecSmrg fi 47505b261ecSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 47605b261ecSmrg ;; 47705b261ecSmrg 47805b261ecSmrgtru64) 47935c4bbdfSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 48035c4bbdfSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 48135c4bbdfSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 48235c4bbdfSmrg # dependencies in 'foo.d' instead, so we check for that too. 48335c4bbdfSmrg # Subdirectories are respected. 48435c4bbdfSmrg set_dir_from "$object" 48535c4bbdfSmrg set_base_from "$object" 48635c4bbdfSmrg 48735c4bbdfSmrg if test "$libtool" = yes; then 48835c4bbdfSmrg # Libtool generates 2 separate objects for the 2 libraries. These 48935c4bbdfSmrg # two compilations output dependencies in $dir.libs/$base.o.d and 49035c4bbdfSmrg # in $dir$base.o.d. We have to check for both files, because 49135c4bbdfSmrg # one of the two compilations can be disabled. We should prefer 49235c4bbdfSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 49335c4bbdfSmrg # automatically cleaned when .libs/ is deleted, while ignoring 49435c4bbdfSmrg # the former would cause a distcleancheck panic. 49535c4bbdfSmrg tmpdepfile1=$dir$base.o.d # libtool 1.5 49635c4bbdfSmrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 49735c4bbdfSmrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 49835c4bbdfSmrg "$@" -Wc,-MD 49935c4bbdfSmrg else 50035c4bbdfSmrg tmpdepfile1=$dir$base.d 50135c4bbdfSmrg tmpdepfile2=$dir$base.d 50235c4bbdfSmrg tmpdepfile3=$dir$base.d 50335c4bbdfSmrg "$@" -MD 50435c4bbdfSmrg fi 50535c4bbdfSmrg 50635c4bbdfSmrg stat=$? 50735c4bbdfSmrg if test $stat -ne 0; then 50835c4bbdfSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 50935c4bbdfSmrg exit $stat 51035c4bbdfSmrg fi 51135c4bbdfSmrg 51235c4bbdfSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 51335c4bbdfSmrg do 51435c4bbdfSmrg test -f "$tmpdepfile" && break 51535c4bbdfSmrg done 51635c4bbdfSmrg # Same post-processing that is required for AIX mode. 51735c4bbdfSmrg aix_post_process_depfile 51835c4bbdfSmrg ;; 51935c4bbdfSmrg 52035c4bbdfSmrgmsvc7) 52135c4bbdfSmrg if test "$libtool" = yes; then 52235c4bbdfSmrg showIncludes=-Wc,-showIncludes 52335c4bbdfSmrg else 52435c4bbdfSmrg showIncludes=-showIncludes 52535c4bbdfSmrg fi 52635c4bbdfSmrg "$@" $showIncludes > "$tmpdepfile" 52735c4bbdfSmrg stat=$? 52835c4bbdfSmrg grep -v '^Note: including file: ' "$tmpdepfile" 52935c4bbdfSmrg if test $stat -ne 0; then 53035c4bbdfSmrg rm -f "$tmpdepfile" 53135c4bbdfSmrg exit $stat 53235c4bbdfSmrg fi 53335c4bbdfSmrg rm -f "$depfile" 53435c4bbdfSmrg echo "$object : \\" > "$depfile" 53535c4bbdfSmrg # The first sed program below extracts the file names and escapes 53635c4bbdfSmrg # backslashes for cygpath. The second sed program outputs the file 53735c4bbdfSmrg # name when reading, but also accumulates all include files in the 53835c4bbdfSmrg # hold buffer in order to output them again at the end. This only 53935c4bbdfSmrg # works with sed implementations that can handle large buffers. 54035c4bbdfSmrg sed < "$tmpdepfile" -n ' 54135c4bbdfSmrg/^Note: including file: *\(.*\)/ { 54235c4bbdfSmrg s//\1/ 54335c4bbdfSmrg s/\\/\\\\/g 54435c4bbdfSmrg p 54535c4bbdfSmrg}' | $cygpath_u | sort -u | sed -n ' 54635c4bbdfSmrgs/ /\\ /g 54735c4bbdfSmrgs/\(.*\)/'"$tab"'\1 \\/p 54835c4bbdfSmrgs/.\(.*\) \\/\1:/ 54935c4bbdfSmrgH 55035c4bbdfSmrg$ { 55135c4bbdfSmrg s/.*/'"$tab"'/ 55235c4bbdfSmrg G 55335c4bbdfSmrg p 55435c4bbdfSmrg}' >> "$depfile" 55535c4bbdfSmrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 55635c4bbdfSmrg rm -f "$tmpdepfile" 55735c4bbdfSmrg ;; 55835c4bbdfSmrg 55935c4bbdfSmrgmsvc7msys) 56035c4bbdfSmrg # This case exists only to let depend.m4 do its work. It works by 56135c4bbdfSmrg # looking at the text of this script. This case will never be run, 56235c4bbdfSmrg # since it is checked for above. 56335c4bbdfSmrg exit 1 56435c4bbdfSmrg ;; 56505b261ecSmrg 56605b261ecSmrg#nosideeffect) 56705b261ecSmrg # This comment above is used by automake to tell side-effect 56805b261ecSmrg # dependency tracking mechanisms from slower ones. 56905b261ecSmrg 57005b261ecSmrgdashmstdout) 57105b261ecSmrg # Important note: in order to support this mode, a compiler *must* 57205b261ecSmrg # always write the preprocessed file to stdout, regardless of -o. 57305b261ecSmrg "$@" || exit $? 57405b261ecSmrg 57505b261ecSmrg # Remove the call to Libtool. 57605b261ecSmrg if test "$libtool" = yes; then 57735c4bbdfSmrg while test "X$1" != 'X--mode=compile'; do 57805b261ecSmrg shift 57905b261ecSmrg done 58005b261ecSmrg shift 58105b261ecSmrg fi 58205b261ecSmrg 58335c4bbdfSmrg # Remove '-o $object'. 58405b261ecSmrg IFS=" " 58505b261ecSmrg for arg 58605b261ecSmrg do 58705b261ecSmrg case $arg in 58805b261ecSmrg -o) 58905b261ecSmrg shift 59005b261ecSmrg ;; 59105b261ecSmrg $object) 59205b261ecSmrg shift 59305b261ecSmrg ;; 59405b261ecSmrg *) 59505b261ecSmrg set fnord "$@" "$arg" 59605b261ecSmrg shift # fnord 59705b261ecSmrg shift # $arg 59805b261ecSmrg ;; 59905b261ecSmrg esac 60005b261ecSmrg done 60105b261ecSmrg 60205b261ecSmrg test -z "$dashmflag" && dashmflag=-M 60335c4bbdfSmrg # Require at least two characters before searching for ':' 60405b261ecSmrg # in the target name. This is to cope with DOS-style filenames: 60535c4bbdfSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 60605b261ecSmrg "$@" $dashmflag | 60735c4bbdfSmrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 60805b261ecSmrg rm -f "$depfile" 60905b261ecSmrg cat < "$tmpdepfile" > "$depfile" 61035c4bbdfSmrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 61135c4bbdfSmrg # correctly. Breaking it into two sed invocations is a workaround. 61235c4bbdfSmrg tr ' ' "$nl" < "$tmpdepfile" \ 61335c4bbdfSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 61435c4bbdfSmrg | sed -e 's/$/ :/' >> "$depfile" 61505b261ecSmrg rm -f "$tmpdepfile" 61605b261ecSmrg ;; 61705b261ecSmrg 61805b261ecSmrgdashXmstdout) 61905b261ecSmrg # This case only exists to satisfy depend.m4. It is never actually 62005b261ecSmrg # run, as this mode is specially recognized in the preamble. 62105b261ecSmrg exit 1 62205b261ecSmrg ;; 62305b261ecSmrg 62405b261ecSmrgmakedepend) 62505b261ecSmrg "$@" || exit $? 62605b261ecSmrg # Remove any Libtool call 62705b261ecSmrg if test "$libtool" = yes; then 62835c4bbdfSmrg while test "X$1" != 'X--mode=compile'; do 62905b261ecSmrg shift 63005b261ecSmrg done 63105b261ecSmrg shift 63205b261ecSmrg fi 63305b261ecSmrg # X makedepend 63405b261ecSmrg shift 63535c4bbdfSmrg cleared=no eat=no 63635c4bbdfSmrg for arg 63735c4bbdfSmrg do 63805b261ecSmrg case $cleared in 63905b261ecSmrg no) 64005b261ecSmrg set ""; shift 64105b261ecSmrg cleared=yes ;; 64205b261ecSmrg esac 64335c4bbdfSmrg if test $eat = yes; then 64435c4bbdfSmrg eat=no 64535c4bbdfSmrg continue 64635c4bbdfSmrg fi 64705b261ecSmrg case "$arg" in 64805b261ecSmrg -D*|-I*) 64905b261ecSmrg set fnord "$@" "$arg"; shift ;; 65005b261ecSmrg # Strip any option that makedepend may not understand. Remove 65105b261ecSmrg # the object too, otherwise makedepend will parse it as a source file. 65235c4bbdfSmrg -arch) 65335c4bbdfSmrg eat=yes ;; 65405b261ecSmrg -*|$object) 65505b261ecSmrg ;; 65605b261ecSmrg *) 65705b261ecSmrg set fnord "$@" "$arg"; shift ;; 65805b261ecSmrg esac 65905b261ecSmrg done 66035c4bbdfSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 66105b261ecSmrg touch "$tmpdepfile" 66205b261ecSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 66305b261ecSmrg rm -f "$depfile" 66435c4bbdfSmrg # makedepend may prepend the VPATH from the source file name to the object. 66535c4bbdfSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 66635c4bbdfSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 66735c4bbdfSmrg # Some versions of the HPUX 10.20 sed can't process the last invocation 66835c4bbdfSmrg # correctly. Breaking it into two sed invocations is a workaround. 66935c4bbdfSmrg sed '1,2d' "$tmpdepfile" \ 67035c4bbdfSmrg | tr ' ' "$nl" \ 67135c4bbdfSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 67235c4bbdfSmrg | sed -e 's/$/ :/' >> "$depfile" 67305b261ecSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 67405b261ecSmrg ;; 67505b261ecSmrg 67605b261ecSmrgcpp) 67705b261ecSmrg # Important note: in order to support this mode, a compiler *must* 67805b261ecSmrg # always write the preprocessed file to stdout. 67905b261ecSmrg "$@" || exit $? 68005b261ecSmrg 68105b261ecSmrg # Remove the call to Libtool. 68205b261ecSmrg if test "$libtool" = yes; then 68335c4bbdfSmrg while test "X$1" != 'X--mode=compile'; do 68405b261ecSmrg shift 68505b261ecSmrg done 68605b261ecSmrg shift 68705b261ecSmrg fi 68805b261ecSmrg 68935c4bbdfSmrg # Remove '-o $object'. 69005b261ecSmrg IFS=" " 69105b261ecSmrg for arg 69205b261ecSmrg do 69305b261ecSmrg case $arg in 69405b261ecSmrg -o) 69505b261ecSmrg shift 69605b261ecSmrg ;; 69705b261ecSmrg $object) 69805b261ecSmrg shift 69905b261ecSmrg ;; 70005b261ecSmrg *) 70105b261ecSmrg set fnord "$@" "$arg" 70205b261ecSmrg shift # fnord 70305b261ecSmrg shift # $arg 70405b261ecSmrg ;; 70505b261ecSmrg esac 70605b261ecSmrg done 70705b261ecSmrg 70835c4bbdfSmrg "$@" -E \ 70935c4bbdfSmrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 71035c4bbdfSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 71135c4bbdfSmrg | sed '$ s: \\$::' > "$tmpdepfile" 71205b261ecSmrg rm -f "$depfile" 71305b261ecSmrg echo "$object : \\" > "$depfile" 71405b261ecSmrg cat < "$tmpdepfile" >> "$depfile" 71505b261ecSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 71605b261ecSmrg rm -f "$tmpdepfile" 71705b261ecSmrg ;; 71805b261ecSmrg 71905b261ecSmrgmsvisualcpp) 72005b261ecSmrg # Important note: in order to support this mode, a compiler *must* 72135c4bbdfSmrg # always write the preprocessed file to stdout. 72205b261ecSmrg "$@" || exit $? 72335c4bbdfSmrg 72435c4bbdfSmrg # Remove the call to Libtool. 72535c4bbdfSmrg if test "$libtool" = yes; then 72635c4bbdfSmrg while test "X$1" != 'X--mode=compile'; do 72735c4bbdfSmrg shift 72835c4bbdfSmrg done 72935c4bbdfSmrg shift 73035c4bbdfSmrg fi 73135c4bbdfSmrg 73205b261ecSmrg IFS=" " 73305b261ecSmrg for arg 73405b261ecSmrg do 73505b261ecSmrg case "$arg" in 73635c4bbdfSmrg -o) 73735c4bbdfSmrg shift 73835c4bbdfSmrg ;; 73935c4bbdfSmrg $object) 74035c4bbdfSmrg shift 74135c4bbdfSmrg ;; 74205b261ecSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 74335c4bbdfSmrg set fnord "$@" 74435c4bbdfSmrg shift 74535c4bbdfSmrg shift 74635c4bbdfSmrg ;; 74705b261ecSmrg *) 74835c4bbdfSmrg set fnord "$@" "$arg" 74935c4bbdfSmrg shift 75035c4bbdfSmrg shift 75135c4bbdfSmrg ;; 75205b261ecSmrg esac 75305b261ecSmrg done 75435c4bbdfSmrg "$@" -E 2>/dev/null | 75535c4bbdfSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 75605b261ecSmrg rm -f "$depfile" 75705b261ecSmrg echo "$object : \\" > "$depfile" 75835c4bbdfSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 75935c4bbdfSmrg echo "$tab" >> "$depfile" 76035c4bbdfSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 76105b261ecSmrg rm -f "$tmpdepfile" 76205b261ecSmrg ;; 76305b261ecSmrg 76435c4bbdfSmrgmsvcmsys) 76535c4bbdfSmrg # This case exists only to let depend.m4 do its work. It works by 76635c4bbdfSmrg # looking at the text of this script. This case will never be run, 76735c4bbdfSmrg # since it is checked for above. 76835c4bbdfSmrg exit 1 76935c4bbdfSmrg ;; 77035c4bbdfSmrg 77105b261ecSmrgnone) 77205b261ecSmrg exec "$@" 77305b261ecSmrg ;; 77405b261ecSmrg 77505b261ecSmrg*) 77605b261ecSmrg echo "Unknown depmode $depmode" 1>&2 77705b261ecSmrg exit 1 77805b261ecSmrg ;; 77905b261ecSmrgesac 78005b261ecSmrg 78105b261ecSmrgexit 0 78205b261ecSmrg 78305b261ecSmrg# Local Variables: 78405b261ecSmrg# mode: shell-script 78505b261ecSmrg# sh-indentation: 2 78605b261ecSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 78705b261ecSmrg# time-stamp-start: "scriptversion=" 78805b261ecSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7891b5d61b8Smrg# time-stamp-time-zone: "UTC0" 79035c4bbdfSmrg# time-stamp-end: "; # UTC" 79105b261ecSmrg# End: 792