104007ebaSmrg#! /bin/sh 204007ebaSmrg# depcomp - compile a program generating dependencies as side-effects 304007ebaSmrg 405cf1079Smrgscriptversion=2018-03-07.03; # UTC 504007ebaSmrg 679d5fcd7Smrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 704007ebaSmrg 804007ebaSmrg# This program is free software; you can redistribute it and/or modify 904007ebaSmrg# it under the terms of the GNU General Public License as published by 1004007ebaSmrg# the Free Software Foundation; either version 2, or (at your option) 1104007ebaSmrg# any later version. 1204007ebaSmrg 1304007ebaSmrg# This program is distributed in the hope that it will be useful, 1404007ebaSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1504007ebaSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1604007ebaSmrg# GNU General Public License for more details. 1704007ebaSmrg 1804007ebaSmrg# You should have received a copy of the GNU General Public License 1905cf1079Smrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 2004007ebaSmrg 2104007ebaSmrg# As a special exception to the GNU General Public License, if you 2204007ebaSmrg# distribute this file as part of a program that contains a 2304007ebaSmrg# configuration script generated by Autoconf, you may include it under 2404007ebaSmrg# the same distribution terms that you use for the rest of that program. 2504007ebaSmrg 2604007ebaSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2704007ebaSmrg 2804007ebaSmrgcase $1 in 2904007ebaSmrg '') 3004007ebaSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 3104007ebaSmrg exit 1; 3204007ebaSmrg ;; 3304007ebaSmrg -h | --h*) 3404007ebaSmrg cat <<\EOF 3504007ebaSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3604007ebaSmrg 3704007ebaSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3804007ebaSmrgas side-effects. 3904007ebaSmrg 4004007ebaSmrgEnvironment variables: 4104007ebaSmrg depmode Dependency tracking mode. 4204007ebaSmrg source Source file read by 'PROGRAMS ARGS'. 4304007ebaSmrg object Object file output by 'PROGRAMS ARGS'. 4404007ebaSmrg DEPDIR directory where to store dependencies. 4504007ebaSmrg depfile Dependency file to output. 4604007ebaSmrg tmpdepfile Temporary file to use when outputting dependencies. 4704007ebaSmrg libtool Whether libtool is used (yes/no). 4804007ebaSmrg 4904007ebaSmrgReport bugs to <bug-automake@gnu.org>. 5004007ebaSmrgEOF 5104007ebaSmrg exit $? 5204007ebaSmrg ;; 5304007ebaSmrg -v | --v*) 5404007ebaSmrg echo "depcomp $scriptversion" 5504007ebaSmrg exit $? 5604007ebaSmrg ;; 5704007ebaSmrgesac 5804007ebaSmrg 5904007ebaSmrg# Get the directory component of the given path, and save it in the 6004007ebaSmrg# global variables '$dir'. Note that this directory component will 6104007ebaSmrg# be either empty or ending with a '/' character. This is deliberate. 6204007ebaSmrgset_dir_from () 6304007ebaSmrg{ 6404007ebaSmrg case $1 in 6504007ebaSmrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 6604007ebaSmrg *) dir=;; 6704007ebaSmrg esac 6804007ebaSmrg} 6904007ebaSmrg 7004007ebaSmrg# Get the suffix-stripped basename of the given path, and save it the 7104007ebaSmrg# global variable '$base'. 7204007ebaSmrgset_base_from () 7304007ebaSmrg{ 7404007ebaSmrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 7504007ebaSmrg} 7604007ebaSmrg 7704007ebaSmrg# If no dependency file was actually created by the compiler invocation, 7804007ebaSmrg# we still have to create a dummy depfile, to avoid errors with the 7904007ebaSmrg# Makefile "include basename.Plo" scheme. 8004007ebaSmrgmake_dummy_depfile () 8104007ebaSmrg{ 8204007ebaSmrg echo "#dummy" > "$depfile" 8304007ebaSmrg} 8404007ebaSmrg 8504007ebaSmrg# Factor out some common post-processing of the generated depfile. 8604007ebaSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 8704007ebaSmrgaix_post_process_depfile () 8804007ebaSmrg{ 8904007ebaSmrg # If the compiler actually managed to produce a dependency file, 9004007ebaSmrg # post-process it. 9104007ebaSmrg if test -f "$tmpdepfile"; then 9204007ebaSmrg # Each line is of the form 'foo.o: dependency.h'. 9304007ebaSmrg # Do two passes, one to just change these to 9404007ebaSmrg # $object: dependency.h 9504007ebaSmrg # and one to simply output 9604007ebaSmrg # dependency.h: 9704007ebaSmrg # which is needed to avoid the deleted-header problem. 9804007ebaSmrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 9904007ebaSmrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 10004007ebaSmrg } > "$depfile" 10104007ebaSmrg rm -f "$tmpdepfile" 10204007ebaSmrg else 10304007ebaSmrg make_dummy_depfile 10404007ebaSmrg fi 10504007ebaSmrg} 10604007ebaSmrg 10704007ebaSmrg# A tabulation character. 10804007ebaSmrgtab=' ' 10904007ebaSmrg# A newline character. 11004007ebaSmrgnl=' 11104007ebaSmrg' 11204007ebaSmrg# Character ranges might be problematic outside the C locale. 11304007ebaSmrg# These definitions help. 11404007ebaSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 11504007ebaSmrglower=abcdefghijklmnopqrstuvwxyz 11604007ebaSmrgdigits=0123456789 11704007ebaSmrgalpha=${upper}${lower} 11804007ebaSmrg 11904007ebaSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 12004007ebaSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 12104007ebaSmrg exit 1 12204007ebaSmrgfi 12304007ebaSmrg 12404007ebaSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 12504007ebaSmrgdepfile=${depfile-`echo "$object" | 12604007ebaSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 12704007ebaSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 12804007ebaSmrg 12904007ebaSmrgrm -f "$tmpdepfile" 13004007ebaSmrg 13104007ebaSmrg# Avoid interferences from the environment. 13204007ebaSmrggccflag= dashmflag= 13304007ebaSmrg 13404007ebaSmrg# Some modes work just like other modes, but use different flags. We 13504007ebaSmrg# parameterize here, but still list the modes in the big case below, 13604007ebaSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 13704007ebaSmrg# here, because this file can only contain one case statement. 13804007ebaSmrgif test "$depmode" = hp; then 13904007ebaSmrg # HP compiler uses -M and no extra arg. 14004007ebaSmrg gccflag=-M 14104007ebaSmrg depmode=gcc 14204007ebaSmrgfi 14304007ebaSmrg 14404007ebaSmrgif test "$depmode" = dashXmstdout; then 14504007ebaSmrg # This is just like dashmstdout with a different argument. 14604007ebaSmrg dashmflag=-xM 14704007ebaSmrg depmode=dashmstdout 14804007ebaSmrgfi 14904007ebaSmrg 15004007ebaSmrgcygpath_u="cygpath -u -f -" 15104007ebaSmrgif test "$depmode" = msvcmsys; then 15204007ebaSmrg # This is just like msvisualcpp but w/o cygpath translation. 15304007ebaSmrg # Just convert the backslash-escaped backslashes to single forward 15404007ebaSmrg # slashes to satisfy depend.m4 15504007ebaSmrg cygpath_u='sed s,\\\\,/,g' 15604007ebaSmrg depmode=msvisualcpp 15704007ebaSmrgfi 15804007ebaSmrg 15904007ebaSmrgif test "$depmode" = msvc7msys; then 16004007ebaSmrg # This is just like msvc7 but w/o cygpath translation. 16104007ebaSmrg # Just convert the backslash-escaped backslashes to single forward 16204007ebaSmrg # slashes to satisfy depend.m4 16304007ebaSmrg cygpath_u='sed s,\\\\,/,g' 16404007ebaSmrg depmode=msvc7 16504007ebaSmrgfi 16604007ebaSmrg 16704007ebaSmrgif test "$depmode" = xlc; then 16804007ebaSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 16904007ebaSmrg gccflag=-qmakedep=gcc,-MF 17004007ebaSmrg depmode=gcc 17104007ebaSmrgfi 17204007ebaSmrg 17304007ebaSmrgcase "$depmode" in 17404007ebaSmrggcc3) 17504007ebaSmrg## gcc 3 implements dependency tracking that does exactly what 17604007ebaSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 17704007ebaSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 17804007ebaSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 17904007ebaSmrg## the command line argument order; so add the flags where they 18004007ebaSmrg## appear in depend2.am. Note that the slowdown incurred here 18104007ebaSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 18204007ebaSmrg for arg 18304007ebaSmrg do 18404007ebaSmrg case $arg in 18504007ebaSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 18604007ebaSmrg *) set fnord "$@" "$arg" ;; 18704007ebaSmrg esac 18804007ebaSmrg shift # fnord 18904007ebaSmrg shift # $arg 19004007ebaSmrg done 19104007ebaSmrg "$@" 19204007ebaSmrg stat=$? 19304007ebaSmrg if test $stat -ne 0; then 19404007ebaSmrg rm -f "$tmpdepfile" 19504007ebaSmrg exit $stat 19604007ebaSmrg fi 19704007ebaSmrg mv "$tmpdepfile" "$depfile" 19804007ebaSmrg ;; 19904007ebaSmrg 20004007ebaSmrggcc) 20104007ebaSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 20204007ebaSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 20304007ebaSmrg## (see the conditional assignment to $gccflag above). 20404007ebaSmrg## There are various ways to get dependency output from gcc. Here's 20504007ebaSmrg## why we pick this rather obscure method: 20604007ebaSmrg## - Don't want to use -MD because we'd like the dependencies to end 20704007ebaSmrg## up in a subdir. Having to rename by hand is ugly. 20804007ebaSmrg## (We might end up doing this anyway to support other compilers.) 20904007ebaSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 21004007ebaSmrg## -MM, not -M (despite what the docs say). Also, it might not be 21104007ebaSmrg## supported by the other compilers which use the 'gcc' depmode. 21204007ebaSmrg## - Using -M directly means running the compiler twice (even worse 21304007ebaSmrg## than renaming). 21404007ebaSmrg if test -z "$gccflag"; then 21504007ebaSmrg gccflag=-MD, 21604007ebaSmrg fi 21704007ebaSmrg "$@" -Wp,"$gccflag$tmpdepfile" 21804007ebaSmrg stat=$? 21904007ebaSmrg if test $stat -ne 0; then 22004007ebaSmrg rm -f "$tmpdepfile" 22104007ebaSmrg exit $stat 22204007ebaSmrg fi 22304007ebaSmrg rm -f "$depfile" 22404007ebaSmrg echo "$object : \\" > "$depfile" 22504007ebaSmrg # The second -e expression handles DOS-style file names with drive 22604007ebaSmrg # letters. 22704007ebaSmrg sed -e 's/^[^:]*: / /' \ 22804007ebaSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 22904007ebaSmrg## This next piece of magic avoids the "deleted header file" problem. 23004007ebaSmrg## The problem is that when a header file which appears in a .P file 23104007ebaSmrg## is deleted, the dependency causes make to die (because there is 23204007ebaSmrg## typically no way to rebuild the header). We avoid this by adding 23304007ebaSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 23404007ebaSmrg## this for us directly. 23504007ebaSmrg## Some versions of gcc put a space before the ':'. On the theory 23604007ebaSmrg## that the space means something, we add a space to the output as 23704007ebaSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 23804007ebaSmrg## to the object. Take care to not repeat it in the output. 23904007ebaSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 24004007ebaSmrg## correctly. Breaking it into two sed invocations is a workaround. 24104007ebaSmrg tr ' ' "$nl" < "$tmpdepfile" \ 24204007ebaSmrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 24304007ebaSmrg | sed -e 's/$/ :/' >> "$depfile" 24404007ebaSmrg rm -f "$tmpdepfile" 24504007ebaSmrg ;; 24604007ebaSmrg 24704007ebaSmrghp) 24804007ebaSmrg # This case exists only to let depend.m4 do its work. It works by 24904007ebaSmrg # looking at the text of this script. This case will never be run, 25004007ebaSmrg # since it is checked for above. 25104007ebaSmrg exit 1 25204007ebaSmrg ;; 25304007ebaSmrg 25404007ebaSmrgsgi) 25504007ebaSmrg if test "$libtool" = yes; then 25604007ebaSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 25704007ebaSmrg else 25804007ebaSmrg "$@" -MDupdate "$tmpdepfile" 25904007ebaSmrg fi 26004007ebaSmrg stat=$? 26104007ebaSmrg if test $stat -ne 0; then 26204007ebaSmrg rm -f "$tmpdepfile" 26304007ebaSmrg exit $stat 26404007ebaSmrg fi 26504007ebaSmrg rm -f "$depfile" 26604007ebaSmrg 26704007ebaSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 26804007ebaSmrg echo "$object : \\" > "$depfile" 26904007ebaSmrg # Clip off the initial element (the dependent). Don't try to be 27004007ebaSmrg # clever and replace this with sed code, as IRIX sed won't handle 27104007ebaSmrg # lines with more than a fixed number of characters (4096 in 27204007ebaSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 27304007ebaSmrg # the IRIX cc adds comments like '#:fec' to the end of the 27404007ebaSmrg # dependency line. 27504007ebaSmrg tr ' ' "$nl" < "$tmpdepfile" \ 27604007ebaSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 27704007ebaSmrg | tr "$nl" ' ' >> "$depfile" 27804007ebaSmrg echo >> "$depfile" 27904007ebaSmrg # The second pass generates a dummy entry for each header file. 28004007ebaSmrg tr ' ' "$nl" < "$tmpdepfile" \ 28104007ebaSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 28204007ebaSmrg >> "$depfile" 28304007ebaSmrg else 28404007ebaSmrg make_dummy_depfile 28504007ebaSmrg fi 28604007ebaSmrg rm -f "$tmpdepfile" 28704007ebaSmrg ;; 28804007ebaSmrg 28904007ebaSmrgxlc) 29004007ebaSmrg # This case exists only to let depend.m4 do its work. It works by 29104007ebaSmrg # looking at the text of this script. This case will never be run, 29204007ebaSmrg # since it is checked for above. 29304007ebaSmrg exit 1 29404007ebaSmrg ;; 29504007ebaSmrg 29604007ebaSmrgaix) 29704007ebaSmrg # The C for AIX Compiler uses -M and outputs the dependencies 29804007ebaSmrg # in a .u file. In older versions, this file always lives in the 29904007ebaSmrg # current directory. Also, the AIX compiler puts '$object:' at the 30004007ebaSmrg # start of each line; $object doesn't have directory information. 30104007ebaSmrg # Version 6 uses the directory in both cases. 30204007ebaSmrg set_dir_from "$object" 30304007ebaSmrg set_base_from "$object" 30404007ebaSmrg if test "$libtool" = yes; then 30504007ebaSmrg tmpdepfile1=$dir$base.u 30604007ebaSmrg tmpdepfile2=$base.u 30704007ebaSmrg tmpdepfile3=$dir.libs/$base.u 30804007ebaSmrg "$@" -Wc,-M 30904007ebaSmrg else 31004007ebaSmrg tmpdepfile1=$dir$base.u 31104007ebaSmrg tmpdepfile2=$dir$base.u 31204007ebaSmrg tmpdepfile3=$dir$base.u 31304007ebaSmrg "$@" -M 31404007ebaSmrg fi 31504007ebaSmrg stat=$? 31604007ebaSmrg if test $stat -ne 0; then 31704007ebaSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 31804007ebaSmrg exit $stat 31904007ebaSmrg fi 32004007ebaSmrg 32104007ebaSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 32204007ebaSmrg do 32304007ebaSmrg test -f "$tmpdepfile" && break 32404007ebaSmrg done 32504007ebaSmrg aix_post_process_depfile 32604007ebaSmrg ;; 32704007ebaSmrg 32804007ebaSmrgtcc) 32904007ebaSmrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 33004007ebaSmrg # FIXME: That version still under development at the moment of writing. 33104007ebaSmrg # Make that this statement remains true also for stable, released 33204007ebaSmrg # versions. 33304007ebaSmrg # It will wrap lines (doesn't matter whether long or short) with a 33404007ebaSmrg # trailing '\', as in: 33504007ebaSmrg # 33604007ebaSmrg # foo.o : \ 33704007ebaSmrg # foo.c \ 33804007ebaSmrg # foo.h \ 33904007ebaSmrg # 34004007ebaSmrg # It will put a trailing '\' even on the last line, and will use leading 34104007ebaSmrg # spaces rather than leading tabs (at least since its commit 0394caf7 34204007ebaSmrg # "Emit spaces for -MD"). 34304007ebaSmrg "$@" -MD -MF "$tmpdepfile" 34404007ebaSmrg stat=$? 34504007ebaSmrg if test $stat -ne 0; then 34604007ebaSmrg rm -f "$tmpdepfile" 34704007ebaSmrg exit $stat 34804007ebaSmrg fi 34904007ebaSmrg rm -f "$depfile" 35004007ebaSmrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 35104007ebaSmrg # We have to change lines of the first kind to '$object: \'. 35204007ebaSmrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 35304007ebaSmrg # And for each line of the second kind, we have to emit a 'dep.h:' 35404007ebaSmrg # dummy dependency, to avoid the deleted-header problem. 35504007ebaSmrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 35604007ebaSmrg rm -f "$tmpdepfile" 35704007ebaSmrg ;; 35804007ebaSmrg 35904007ebaSmrg## The order of this option in the case statement is important, since the 36004007ebaSmrg## shell code in configure will try each of these formats in the order 36104007ebaSmrg## listed in this file. A plain '-MD' option would be understood by many 36204007ebaSmrg## compilers, so we must ensure this comes after the gcc and icc options. 36304007ebaSmrgpgcc) 36404007ebaSmrg # Portland's C compiler understands '-MD'. 36504007ebaSmrg # Will always output deps to 'file.d' where file is the root name of the 36604007ebaSmrg # source file under compilation, even if file resides in a subdirectory. 36704007ebaSmrg # The object file name does not affect the name of the '.d' file. 36804007ebaSmrg # pgcc 10.2 will output 36904007ebaSmrg # foo.o: sub/foo.c sub/foo.h 37004007ebaSmrg # and will wrap long lines using '\' : 37104007ebaSmrg # foo.o: sub/foo.c ... \ 37204007ebaSmrg # sub/foo.h ... \ 37304007ebaSmrg # ... 37404007ebaSmrg set_dir_from "$object" 37504007ebaSmrg # Use the source, not the object, to determine the base name, since 37604007ebaSmrg # that's sadly what pgcc will do too. 37704007ebaSmrg set_base_from "$source" 37804007ebaSmrg tmpdepfile=$base.d 37904007ebaSmrg 38004007ebaSmrg # For projects that build the same source file twice into different object 38104007ebaSmrg # files, the pgcc approach of using the *source* file root name can cause 38204007ebaSmrg # problems in parallel builds. Use a locking strategy to avoid stomping on 38304007ebaSmrg # the same $tmpdepfile. 38404007ebaSmrg lockdir=$base.d-lock 38504007ebaSmrg trap " 38604007ebaSmrg echo '$0: caught signal, cleaning up...' >&2 38704007ebaSmrg rmdir '$lockdir' 38804007ebaSmrg exit 1 38904007ebaSmrg " 1 2 13 15 39004007ebaSmrg numtries=100 39104007ebaSmrg i=$numtries 39204007ebaSmrg while test $i -gt 0; do 39304007ebaSmrg # mkdir is a portable test-and-set. 39404007ebaSmrg if mkdir "$lockdir" 2>/dev/null; then 39504007ebaSmrg # This process acquired the lock. 39604007ebaSmrg "$@" -MD 39704007ebaSmrg stat=$? 39804007ebaSmrg # Release the lock. 39904007ebaSmrg rmdir "$lockdir" 40004007ebaSmrg break 40104007ebaSmrg else 40204007ebaSmrg # If the lock is being held by a different process, wait 40304007ebaSmrg # until the winning process is done or we timeout. 40404007ebaSmrg while test -d "$lockdir" && test $i -gt 0; do 40504007ebaSmrg sleep 1 40604007ebaSmrg i=`expr $i - 1` 40704007ebaSmrg done 40804007ebaSmrg fi 40904007ebaSmrg i=`expr $i - 1` 41004007ebaSmrg done 41104007ebaSmrg trap - 1 2 13 15 41204007ebaSmrg if test $i -le 0; then 41304007ebaSmrg echo "$0: failed to acquire lock after $numtries attempts" >&2 41404007ebaSmrg echo "$0: check lockdir '$lockdir'" >&2 41504007ebaSmrg exit 1 41604007ebaSmrg fi 41704007ebaSmrg 41804007ebaSmrg if test $stat -ne 0; then 41904007ebaSmrg rm -f "$tmpdepfile" 42004007ebaSmrg exit $stat 42104007ebaSmrg fi 42204007ebaSmrg rm -f "$depfile" 42304007ebaSmrg # Each line is of the form `foo.o: dependent.h', 42404007ebaSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 42504007ebaSmrg # Do two passes, one to just change these to 42604007ebaSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 42704007ebaSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 42804007ebaSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 42904007ebaSmrg # correctly. Breaking it into two sed invocations is a workaround. 43004007ebaSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 43104007ebaSmrg | sed -e 's/$/ :/' >> "$depfile" 43204007ebaSmrg rm -f "$tmpdepfile" 43304007ebaSmrg ;; 43404007ebaSmrg 43504007ebaSmrghp2) 43604007ebaSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 43704007ebaSmrg # compilers, which have integrated preprocessors. The correct option 43804007ebaSmrg # to use with these is +Maked; it writes dependencies to a file named 43904007ebaSmrg # 'foo.d', which lands next to the object file, wherever that 44004007ebaSmrg # happens to be. 44104007ebaSmrg # Much of this is similar to the tru64 case; see comments there. 44204007ebaSmrg set_dir_from "$object" 44304007ebaSmrg set_base_from "$object" 44404007ebaSmrg if test "$libtool" = yes; then 44504007ebaSmrg tmpdepfile1=$dir$base.d 44604007ebaSmrg tmpdepfile2=$dir.libs/$base.d 44704007ebaSmrg "$@" -Wc,+Maked 44804007ebaSmrg else 44904007ebaSmrg tmpdepfile1=$dir$base.d 45004007ebaSmrg tmpdepfile2=$dir$base.d 45104007ebaSmrg "$@" +Maked 45204007ebaSmrg fi 45304007ebaSmrg stat=$? 45404007ebaSmrg if test $stat -ne 0; then 45504007ebaSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 45604007ebaSmrg exit $stat 45704007ebaSmrg fi 45804007ebaSmrg 45904007ebaSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 46004007ebaSmrg do 46104007ebaSmrg test -f "$tmpdepfile" && break 46204007ebaSmrg done 46304007ebaSmrg if test -f "$tmpdepfile"; then 46404007ebaSmrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 46504007ebaSmrg # Add 'dependent.h:' lines. 46604007ebaSmrg sed -ne '2,${ 46704007ebaSmrg s/^ *// 46804007ebaSmrg s/ \\*$// 46904007ebaSmrg s/$/:/ 47004007ebaSmrg p 47104007ebaSmrg }' "$tmpdepfile" >> "$depfile" 47204007ebaSmrg else 47304007ebaSmrg make_dummy_depfile 47404007ebaSmrg fi 47504007ebaSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 47604007ebaSmrg ;; 47704007ebaSmrg 47804007ebaSmrgtru64) 47904007ebaSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 48004007ebaSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 48104007ebaSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 48204007ebaSmrg # dependencies in 'foo.d' instead, so we check for that too. 48304007ebaSmrg # Subdirectories are respected. 48404007ebaSmrg set_dir_from "$object" 48504007ebaSmrg set_base_from "$object" 48604007ebaSmrg 48704007ebaSmrg if test "$libtool" = yes; then 48804007ebaSmrg # Libtool generates 2 separate objects for the 2 libraries. These 48904007ebaSmrg # two compilations output dependencies in $dir.libs/$base.o.d and 49004007ebaSmrg # in $dir$base.o.d. We have to check for both files, because 49104007ebaSmrg # one of the two compilations can be disabled. We should prefer 49204007ebaSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 49304007ebaSmrg # automatically cleaned when .libs/ is deleted, while ignoring 49404007ebaSmrg # the former would cause a distcleancheck panic. 49504007ebaSmrg tmpdepfile1=$dir$base.o.d # libtool 1.5 49604007ebaSmrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 49704007ebaSmrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 49804007ebaSmrg "$@" -Wc,-MD 49904007ebaSmrg else 50004007ebaSmrg tmpdepfile1=$dir$base.d 50104007ebaSmrg tmpdepfile2=$dir$base.d 50204007ebaSmrg tmpdepfile3=$dir$base.d 50304007ebaSmrg "$@" -MD 50404007ebaSmrg fi 50504007ebaSmrg 50604007ebaSmrg stat=$? 50704007ebaSmrg if test $stat -ne 0; then 50804007ebaSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 50904007ebaSmrg exit $stat 51004007ebaSmrg fi 51104007ebaSmrg 51204007ebaSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 51304007ebaSmrg do 51404007ebaSmrg test -f "$tmpdepfile" && break 51504007ebaSmrg done 51604007ebaSmrg # Same post-processing that is required for AIX mode. 51704007ebaSmrg aix_post_process_depfile 51804007ebaSmrg ;; 51904007ebaSmrg 52004007ebaSmrgmsvc7) 52104007ebaSmrg if test "$libtool" = yes; then 52204007ebaSmrg showIncludes=-Wc,-showIncludes 52304007ebaSmrg else 52404007ebaSmrg showIncludes=-showIncludes 52504007ebaSmrg fi 52604007ebaSmrg "$@" $showIncludes > "$tmpdepfile" 52704007ebaSmrg stat=$? 52804007ebaSmrg grep -v '^Note: including file: ' "$tmpdepfile" 52904007ebaSmrg if test $stat -ne 0; then 53004007ebaSmrg rm -f "$tmpdepfile" 53104007ebaSmrg exit $stat 53204007ebaSmrg fi 53304007ebaSmrg rm -f "$depfile" 53404007ebaSmrg echo "$object : \\" > "$depfile" 53504007ebaSmrg # The first sed program below extracts the file names and escapes 53604007ebaSmrg # backslashes for cygpath. The second sed program outputs the file 53704007ebaSmrg # name when reading, but also accumulates all include files in the 53804007ebaSmrg # hold buffer in order to output them again at the end. This only 53904007ebaSmrg # works with sed implementations that can handle large buffers. 54004007ebaSmrg sed < "$tmpdepfile" -n ' 54104007ebaSmrg/^Note: including file: *\(.*\)/ { 54204007ebaSmrg s//\1/ 54304007ebaSmrg s/\\/\\\\/g 54404007ebaSmrg p 54504007ebaSmrg}' | $cygpath_u | sort -u | sed -n ' 54604007ebaSmrgs/ /\\ /g 54704007ebaSmrgs/\(.*\)/'"$tab"'\1 \\/p 54804007ebaSmrgs/.\(.*\) \\/\1:/ 54904007ebaSmrgH 55004007ebaSmrg$ { 55104007ebaSmrg s/.*/'"$tab"'/ 55204007ebaSmrg G 55304007ebaSmrg p 55404007ebaSmrg}' >> "$depfile" 55504007ebaSmrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 55604007ebaSmrg rm -f "$tmpdepfile" 55704007ebaSmrg ;; 55804007ebaSmrg 55904007ebaSmrgmsvc7msys) 56004007ebaSmrg # This case exists only to let depend.m4 do its work. It works by 56104007ebaSmrg # looking at the text of this script. This case will never be run, 56204007ebaSmrg # since it is checked for above. 56304007ebaSmrg exit 1 56404007ebaSmrg ;; 56504007ebaSmrg 56604007ebaSmrg#nosideeffect) 56704007ebaSmrg # This comment above is used by automake to tell side-effect 56804007ebaSmrg # dependency tracking mechanisms from slower ones. 56904007ebaSmrg 57004007ebaSmrgdashmstdout) 57104007ebaSmrg # Important note: in order to support this mode, a compiler *must* 57204007ebaSmrg # always write the preprocessed file to stdout, regardless of -o. 57304007ebaSmrg "$@" || exit $? 57404007ebaSmrg 57504007ebaSmrg # Remove the call to Libtool. 57604007ebaSmrg if test "$libtool" = yes; then 57704007ebaSmrg while test "X$1" != 'X--mode=compile'; do 57804007ebaSmrg shift 57904007ebaSmrg done 58004007ebaSmrg shift 58104007ebaSmrg fi 58204007ebaSmrg 58304007ebaSmrg # Remove '-o $object'. 58404007ebaSmrg IFS=" " 58504007ebaSmrg for arg 58604007ebaSmrg do 58704007ebaSmrg case $arg in 58804007ebaSmrg -o) 58904007ebaSmrg shift 59004007ebaSmrg ;; 59104007ebaSmrg $object) 59204007ebaSmrg shift 59304007ebaSmrg ;; 59404007ebaSmrg *) 59504007ebaSmrg set fnord "$@" "$arg" 59604007ebaSmrg shift # fnord 59704007ebaSmrg shift # $arg 59804007ebaSmrg ;; 59904007ebaSmrg esac 60004007ebaSmrg done 60104007ebaSmrg 60204007ebaSmrg test -z "$dashmflag" && dashmflag=-M 60304007ebaSmrg # Require at least two characters before searching for ':' 60404007ebaSmrg # in the target name. This is to cope with DOS-style filenames: 60504007ebaSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 60604007ebaSmrg "$@" $dashmflag | 60704007ebaSmrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 60804007ebaSmrg rm -f "$depfile" 60904007ebaSmrg cat < "$tmpdepfile" > "$depfile" 61004007ebaSmrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 61104007ebaSmrg # correctly. Breaking it into two sed invocations is a workaround. 61204007ebaSmrg tr ' ' "$nl" < "$tmpdepfile" \ 61304007ebaSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 61404007ebaSmrg | sed -e 's/$/ :/' >> "$depfile" 61504007ebaSmrg rm -f "$tmpdepfile" 61604007ebaSmrg ;; 61704007ebaSmrg 61804007ebaSmrgdashXmstdout) 61904007ebaSmrg # This case only exists to satisfy depend.m4. It is never actually 62004007ebaSmrg # run, as this mode is specially recognized in the preamble. 62104007ebaSmrg exit 1 62204007ebaSmrg ;; 62304007ebaSmrg 62404007ebaSmrgmakedepend) 62504007ebaSmrg "$@" || exit $? 62604007ebaSmrg # Remove any Libtool call 62704007ebaSmrg if test "$libtool" = yes; then 62804007ebaSmrg while test "X$1" != 'X--mode=compile'; do 62904007ebaSmrg shift 63004007ebaSmrg done 63104007ebaSmrg shift 63204007ebaSmrg fi 63304007ebaSmrg # X makedepend 63404007ebaSmrg shift 63504007ebaSmrg cleared=no eat=no 63604007ebaSmrg for arg 63704007ebaSmrg do 63804007ebaSmrg case $cleared in 63904007ebaSmrg no) 64004007ebaSmrg set ""; shift 64104007ebaSmrg cleared=yes ;; 64204007ebaSmrg esac 64304007ebaSmrg if test $eat = yes; then 64404007ebaSmrg eat=no 64504007ebaSmrg continue 64604007ebaSmrg fi 64704007ebaSmrg case "$arg" in 64804007ebaSmrg -D*|-I*) 64904007ebaSmrg set fnord "$@" "$arg"; shift ;; 65004007ebaSmrg # Strip any option that makedepend may not understand. Remove 65104007ebaSmrg # the object too, otherwise makedepend will parse it as a source file. 65204007ebaSmrg -arch) 65304007ebaSmrg eat=yes ;; 65404007ebaSmrg -*|$object) 65504007ebaSmrg ;; 65604007ebaSmrg *) 65704007ebaSmrg set fnord "$@" "$arg"; shift ;; 65804007ebaSmrg esac 65904007ebaSmrg done 66004007ebaSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 66104007ebaSmrg touch "$tmpdepfile" 66204007ebaSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 66304007ebaSmrg rm -f "$depfile" 66404007ebaSmrg # makedepend may prepend the VPATH from the source file name to the object. 66504007ebaSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 66604007ebaSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 66704007ebaSmrg # Some versions of the HPUX 10.20 sed can't process the last invocation 66804007ebaSmrg # correctly. Breaking it into two sed invocations is a workaround. 66904007ebaSmrg sed '1,2d' "$tmpdepfile" \ 67004007ebaSmrg | tr ' ' "$nl" \ 67104007ebaSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 67204007ebaSmrg | sed -e 's/$/ :/' >> "$depfile" 67304007ebaSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 67404007ebaSmrg ;; 67504007ebaSmrg 67604007ebaSmrgcpp) 67704007ebaSmrg # Important note: in order to support this mode, a compiler *must* 67804007ebaSmrg # always write the preprocessed file to stdout. 67904007ebaSmrg "$@" || exit $? 68004007ebaSmrg 68104007ebaSmrg # Remove the call to Libtool. 68204007ebaSmrg if test "$libtool" = yes; then 68304007ebaSmrg while test "X$1" != 'X--mode=compile'; do 68404007ebaSmrg shift 68504007ebaSmrg done 68604007ebaSmrg shift 68704007ebaSmrg fi 68804007ebaSmrg 68904007ebaSmrg # Remove '-o $object'. 69004007ebaSmrg IFS=" " 69104007ebaSmrg for arg 69204007ebaSmrg do 69304007ebaSmrg case $arg in 69404007ebaSmrg -o) 69504007ebaSmrg shift 69604007ebaSmrg ;; 69704007ebaSmrg $object) 69804007ebaSmrg shift 69904007ebaSmrg ;; 70004007ebaSmrg *) 70104007ebaSmrg set fnord "$@" "$arg" 70204007ebaSmrg shift # fnord 70304007ebaSmrg shift # $arg 70404007ebaSmrg ;; 70504007ebaSmrg esac 70604007ebaSmrg done 70704007ebaSmrg 70804007ebaSmrg "$@" -E \ 70904007ebaSmrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 71004007ebaSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 71104007ebaSmrg | sed '$ s: \\$::' > "$tmpdepfile" 71204007ebaSmrg rm -f "$depfile" 71304007ebaSmrg echo "$object : \\" > "$depfile" 71404007ebaSmrg cat < "$tmpdepfile" >> "$depfile" 71504007ebaSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 71604007ebaSmrg rm -f "$tmpdepfile" 71704007ebaSmrg ;; 71804007ebaSmrg 71904007ebaSmrgmsvisualcpp) 72004007ebaSmrg # Important note: in order to support this mode, a compiler *must* 72104007ebaSmrg # always write the preprocessed file to stdout. 72204007ebaSmrg "$@" || exit $? 72304007ebaSmrg 72404007ebaSmrg # Remove the call to Libtool. 72504007ebaSmrg if test "$libtool" = yes; then 72604007ebaSmrg while test "X$1" != 'X--mode=compile'; do 72704007ebaSmrg shift 72804007ebaSmrg done 72904007ebaSmrg shift 73004007ebaSmrg fi 73104007ebaSmrg 73204007ebaSmrg IFS=" " 73304007ebaSmrg for arg 73404007ebaSmrg do 73504007ebaSmrg case "$arg" in 73604007ebaSmrg -o) 73704007ebaSmrg shift 73804007ebaSmrg ;; 73904007ebaSmrg $object) 74004007ebaSmrg shift 74104007ebaSmrg ;; 74204007ebaSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 74304007ebaSmrg set fnord "$@" 74404007ebaSmrg shift 74504007ebaSmrg shift 74604007ebaSmrg ;; 74704007ebaSmrg *) 74804007ebaSmrg set fnord "$@" "$arg" 74904007ebaSmrg shift 75004007ebaSmrg shift 75104007ebaSmrg ;; 75204007ebaSmrg esac 75304007ebaSmrg done 75404007ebaSmrg "$@" -E 2>/dev/null | 75504007ebaSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 75604007ebaSmrg rm -f "$depfile" 75704007ebaSmrg echo "$object : \\" > "$depfile" 75804007ebaSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 75904007ebaSmrg echo "$tab" >> "$depfile" 76004007ebaSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 76104007ebaSmrg rm -f "$tmpdepfile" 76204007ebaSmrg ;; 76304007ebaSmrg 76404007ebaSmrgmsvcmsys) 76504007ebaSmrg # This case exists only to let depend.m4 do its work. It works by 76604007ebaSmrg # looking at the text of this script. This case will never be run, 76704007ebaSmrg # since it is checked for above. 76804007ebaSmrg exit 1 76904007ebaSmrg ;; 77004007ebaSmrg 77104007ebaSmrgnone) 77204007ebaSmrg exec "$@" 77304007ebaSmrg ;; 77404007ebaSmrg 77504007ebaSmrg*) 77604007ebaSmrg echo "Unknown depmode $depmode" 1>&2 77704007ebaSmrg exit 1 77804007ebaSmrg ;; 77904007ebaSmrgesac 78004007ebaSmrg 78104007ebaSmrgexit 0 78204007ebaSmrg 78304007ebaSmrg# Local Variables: 78404007ebaSmrg# mode: shell-script 78504007ebaSmrg# sh-indentation: 2 78605cf1079Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 78704007ebaSmrg# time-stamp-start: "scriptversion=" 78804007ebaSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 78905cf1079Smrg# time-stamp-time-zone: "UTC0" 79004007ebaSmrg# time-stamp-end: "; # UTC" 79104007ebaSmrg# End: 792