depcomp revision e8b4ed9f
145bc899bSmrg#! /bin/sh 245bc899bSmrg# depcomp - compile a program generating dependencies as side-effects 345bc899bSmrg 4a0c41156Smrgscriptversion=2018-03-07.03; # UTC 545bc899bSmrg 6e8b4ed9fSmrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 745bc899bSmrg 845bc899bSmrg# This program is free software; you can redistribute it and/or modify 945bc899bSmrg# it under the terms of the GNU General Public License as published by 1045bc899bSmrg# the Free Software Foundation; either version 2, or (at your option) 1145bc899bSmrg# any later version. 1245bc899bSmrg 1345bc899bSmrg# This program is distributed in the hope that it will be useful, 1445bc899bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1545bc899bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1645bc899bSmrg# GNU General Public License for more details. 1745bc899bSmrg 1845bc899bSmrg# You should have received a copy of the GNU General Public License 19a0c41156Smrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 2045bc899bSmrg 2145bc899bSmrg# As a special exception to the GNU General Public License, if you 2245bc899bSmrg# distribute this file as part of a program that contains a 2345bc899bSmrg# configuration script generated by Autoconf, you may include it under 2445bc899bSmrg# the same distribution terms that you use for the rest of that program. 2545bc899bSmrg 2645bc899bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2745bc899bSmrg 2845bc899bSmrgcase $1 in 2945bc899bSmrg '') 30c97b1c41Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 31c97b1c41Smrg exit 1; 32c97b1c41Smrg ;; 3345bc899bSmrg -h | --h*) 3445bc899bSmrg cat <<\EOF 3545bc899bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3645bc899bSmrg 3745bc899bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3845bc899bSmrgas side-effects. 3945bc899bSmrg 4045bc899bSmrgEnvironment variables: 4145bc899bSmrg depmode Dependency tracking mode. 42c97b1c41Smrg source Source file read by 'PROGRAMS ARGS'. 43c97b1c41Smrg object Object file output by 'PROGRAMS ARGS'. 4445bc899bSmrg DEPDIR directory where to store dependencies. 4545bc899bSmrg depfile Dependency file to output. 46b40a6198Smrg tmpdepfile Temporary file to use when outputting dependencies. 4745bc899bSmrg libtool Whether libtool is used (yes/no). 4845bc899bSmrg 4945bc899bSmrgReport bugs to <bug-automake@gnu.org>. 5045bc899bSmrgEOF 5145bc899bSmrg exit $? 5245bc899bSmrg ;; 5345bc899bSmrg -v | --v*) 5445bc899bSmrg echo "depcomp $scriptversion" 5545bc899bSmrg exit $? 5645bc899bSmrg ;; 5745bc899bSmrgesac 5845bc899bSmrg 59c97b1c41Smrg# Get the directory component of the given path, and save it in the 60c97b1c41Smrg# global variables '$dir'. Note that this directory component will 61c97b1c41Smrg# be either empty or ending with a '/' character. This is deliberate. 62c97b1c41Smrgset_dir_from () 63c97b1c41Smrg{ 64c97b1c41Smrg case $1 in 65c97b1c41Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66c97b1c41Smrg *) dir=;; 67c97b1c41Smrg esac 68c97b1c41Smrg} 69c97b1c41Smrg 70c97b1c41Smrg# Get the suffix-stripped basename of the given path, and save it the 71c97b1c41Smrg# global variable '$base'. 72c97b1c41Smrgset_base_from () 73c97b1c41Smrg{ 74c97b1c41Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75c97b1c41Smrg} 76c97b1c41Smrg 77c97b1c41Smrg# If no dependency file was actually created by the compiler invocation, 78c97b1c41Smrg# we still have to create a dummy depfile, to avoid errors with the 79c97b1c41Smrg# Makefile "include basename.Plo" scheme. 80c97b1c41Smrgmake_dummy_depfile () 81c97b1c41Smrg{ 82c97b1c41Smrg echo "#dummy" > "$depfile" 83c97b1c41Smrg} 84c97b1c41Smrg 85c97b1c41Smrg# Factor out some common post-processing of the generated depfile. 86c97b1c41Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 87c97b1c41Smrgaix_post_process_depfile () 88c97b1c41Smrg{ 89c97b1c41Smrg # If the compiler actually managed to produce a dependency file, 90c97b1c41Smrg # post-process it. 91c97b1c41Smrg if test -f "$tmpdepfile"; then 92c97b1c41Smrg # Each line is of the form 'foo.o: dependency.h'. 93c97b1c41Smrg # Do two passes, one to just change these to 94c97b1c41Smrg # $object: dependency.h 95c97b1c41Smrg # and one to simply output 96c97b1c41Smrg # dependency.h: 97c97b1c41Smrg # which is needed to avoid the deleted-header problem. 98c97b1c41Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99c97b1c41Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100c97b1c41Smrg } > "$depfile" 101c97b1c41Smrg rm -f "$tmpdepfile" 102c97b1c41Smrg else 103c97b1c41Smrg make_dummy_depfile 104c97b1c41Smrg fi 105c97b1c41Smrg} 106c97b1c41Smrg 107c97b1c41Smrg# A tabulation character. 108c97b1c41Smrgtab=' ' 109c97b1c41Smrg# A newline character. 110c97b1c41Smrgnl=' 111c97b1c41Smrg' 112c97b1c41Smrg# Character ranges might be problematic outside the C locale. 113c97b1c41Smrg# These definitions help. 114c97b1c41Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115c97b1c41Smrglower=abcdefghijklmnopqrstuvwxyz 116c97b1c41Smrgdigits=0123456789 117c97b1c41Smrgalpha=${upper}${lower} 118c97b1c41Smrg 11945bc899bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 12045bc899bSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 12145bc899bSmrg exit 1 12245bc899bSmrgfi 12345bc899bSmrg 12445bc899bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 12545bc899bSmrgdepfile=${depfile-`echo "$object" | 12645bc899bSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 12745bc899bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 12845bc899bSmrg 12945bc899bSmrgrm -f "$tmpdepfile" 13045bc899bSmrg 131c97b1c41Smrg# Avoid interferences from the environment. 132c97b1c41Smrggccflag= dashmflag= 133c97b1c41Smrg 13445bc899bSmrg# Some modes work just like other modes, but use different flags. We 13545bc899bSmrg# parameterize here, but still list the modes in the big case below, 13645bc899bSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 13745bc899bSmrg# here, because this file can only contain one case statement. 13845bc899bSmrgif test "$depmode" = hp; then 13945bc899bSmrg # HP compiler uses -M and no extra arg. 14045bc899bSmrg gccflag=-M 14145bc899bSmrg depmode=gcc 14245bc899bSmrgfi 14345bc899bSmrg 14445bc899bSmrgif test "$depmode" = dashXmstdout; then 145c97b1c41Smrg # This is just like dashmstdout with a different argument. 146c97b1c41Smrg dashmflag=-xM 147c97b1c41Smrg depmode=dashmstdout 14845bc899bSmrgfi 14945bc899bSmrg 150b40a6198Smrgcygpath_u="cygpath -u -f -" 151b40a6198Smrgif test "$depmode" = msvcmsys; then 152c97b1c41Smrg # This is just like msvisualcpp but w/o cygpath translation. 153c97b1c41Smrg # Just convert the backslash-escaped backslashes to single forward 154c97b1c41Smrg # slashes to satisfy depend.m4 155c97b1c41Smrg cygpath_u='sed s,\\\\,/,g' 156c97b1c41Smrg depmode=msvisualcpp 157b40a6198Smrgfi 158b40a6198Smrg 159b40a6198Smrgif test "$depmode" = msvc7msys; then 160c97b1c41Smrg # This is just like msvc7 but w/o cygpath translation. 161c97b1c41Smrg # Just convert the backslash-escaped backslashes to single forward 162c97b1c41Smrg # slashes to satisfy depend.m4 163c97b1c41Smrg cygpath_u='sed s,\\\\,/,g' 164c97b1c41Smrg depmode=msvc7 165c97b1c41Smrgfi 166c97b1c41Smrg 167c97b1c41Smrgif test "$depmode" = xlc; then 168c97b1c41Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169c97b1c41Smrg gccflag=-qmakedep=gcc,-MF 170c97b1c41Smrg depmode=gcc 171b40a6198Smrgfi 172b40a6198Smrg 17345bc899bSmrgcase "$depmode" in 17445bc899bSmrggcc3) 17545bc899bSmrg## gcc 3 implements dependency tracking that does exactly what 17645bc899bSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 17745bc899bSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 17850f2e948Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 17950f2e948Smrg## the command line argument order; so add the flags where they 18050f2e948Smrg## appear in depend2.am. Note that the slowdown incurred here 18150f2e948Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 18250f2e948Smrg for arg 18350f2e948Smrg do 18450f2e948Smrg case $arg in 18550f2e948Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 18650f2e948Smrg *) set fnord "$@" "$arg" ;; 18750f2e948Smrg esac 18850f2e948Smrg shift # fnord 18950f2e948Smrg shift # $arg 19050f2e948Smrg done 19150f2e948Smrg "$@" 19245bc899bSmrg stat=$? 193c97b1c41Smrg if test $stat -ne 0; then 19445bc899bSmrg rm -f "$tmpdepfile" 19545bc899bSmrg exit $stat 19645bc899bSmrg fi 19745bc899bSmrg mv "$tmpdepfile" "$depfile" 19845bc899bSmrg ;; 19945bc899bSmrg 20045bc899bSmrggcc) 201c97b1c41Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202c97b1c41Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203c97b1c41Smrg## (see the conditional assignment to $gccflag above). 20445bc899bSmrg## There are various ways to get dependency output from gcc. Here's 20545bc899bSmrg## why we pick this rather obscure method: 20645bc899bSmrg## - Don't want to use -MD because we'd like the dependencies to end 20745bc899bSmrg## up in a subdir. Having to rename by hand is ugly. 20845bc899bSmrg## (We might end up doing this anyway to support other compilers.) 20945bc899bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210c97b1c41Smrg## -MM, not -M (despite what the docs say). Also, it might not be 211c97b1c41Smrg## supported by the other compilers which use the 'gcc' depmode. 21245bc899bSmrg## - Using -M directly means running the compiler twice (even worse 21345bc899bSmrg## than renaming). 21445bc899bSmrg if test -z "$gccflag"; then 21545bc899bSmrg gccflag=-MD, 21645bc899bSmrg fi 21745bc899bSmrg "$@" -Wp,"$gccflag$tmpdepfile" 21845bc899bSmrg stat=$? 219c97b1c41Smrg if test $stat -ne 0; then 22045bc899bSmrg rm -f "$tmpdepfile" 22145bc899bSmrg exit $stat 22245bc899bSmrg fi 22345bc899bSmrg rm -f "$depfile" 22445bc899bSmrg echo "$object : \\" > "$depfile" 225c97b1c41Smrg # The second -e expression handles DOS-style file names with drive 226c97b1c41Smrg # letters. 22745bc899bSmrg sed -e 's/^[^:]*: / /' \ 22845bc899bSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229c97b1c41Smrg## This next piece of magic avoids the "deleted header file" problem. 23045bc899bSmrg## The problem is that when a header file which appears in a .P file 23145bc899bSmrg## is deleted, the dependency causes make to die (because there is 23245bc899bSmrg## typically no way to rebuild the header). We avoid this by adding 23345bc899bSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 23445bc899bSmrg## this for us directly. 235c97b1c41Smrg## Some versions of gcc put a space before the ':'. On the theory 23645bc899bSmrg## that the space means something, we add a space to the output as 237b40a6198Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 238b40a6198Smrg## to the object. Take care to not repeat it in the output. 23945bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 24045bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 241c97b1c41Smrg tr ' ' "$nl" < "$tmpdepfile" \ 242c97b1c41Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243c97b1c41Smrg | sed -e 's/$/ :/' >> "$depfile" 24445bc899bSmrg rm -f "$tmpdepfile" 24545bc899bSmrg ;; 24645bc899bSmrg 24745bc899bSmrghp) 24845bc899bSmrg # This case exists only to let depend.m4 do its work. It works by 24945bc899bSmrg # looking at the text of this script. This case will never be run, 25045bc899bSmrg # since it is checked for above. 25145bc899bSmrg exit 1 25245bc899bSmrg ;; 25345bc899bSmrg 25445bc899bSmrgsgi) 25545bc899bSmrg if test "$libtool" = yes; then 25645bc899bSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 25745bc899bSmrg else 25845bc899bSmrg "$@" -MDupdate "$tmpdepfile" 25945bc899bSmrg fi 26045bc899bSmrg stat=$? 261c97b1c41Smrg if test $stat -ne 0; then 26245bc899bSmrg rm -f "$tmpdepfile" 26345bc899bSmrg exit $stat 26445bc899bSmrg fi 26545bc899bSmrg rm -f "$depfile" 26645bc899bSmrg 26745bc899bSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 26845bc899bSmrg echo "$object : \\" > "$depfile" 26945bc899bSmrg # Clip off the initial element (the dependent). Don't try to be 27045bc899bSmrg # clever and replace this with sed code, as IRIX sed won't handle 27145bc899bSmrg # lines with more than a fixed number of characters (4096 in 27245bc899bSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273c97b1c41Smrg # the IRIX cc adds comments like '#:fec' to the end of the 27445bc899bSmrg # dependency line. 275c97b1c41Smrg tr ' ' "$nl" < "$tmpdepfile" \ 276c97b1c41Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277c97b1c41Smrg | tr "$nl" ' ' >> "$depfile" 278b40a6198Smrg echo >> "$depfile" 27945bc899bSmrg # The second pass generates a dummy entry for each header file. 280c97b1c41Smrg tr ' ' "$nl" < "$tmpdepfile" \ 281c97b1c41Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282c97b1c41Smrg >> "$depfile" 28345bc899bSmrg else 284c97b1c41Smrg make_dummy_depfile 28545bc899bSmrg fi 28645bc899bSmrg rm -f "$tmpdepfile" 28745bc899bSmrg ;; 28845bc899bSmrg 289c97b1c41Smrgxlc) 290c97b1c41Smrg # This case exists only to let depend.m4 do its work. It works by 291c97b1c41Smrg # looking at the text of this script. This case will never be run, 292c97b1c41Smrg # since it is checked for above. 293c97b1c41Smrg exit 1 294c97b1c41Smrg ;; 295c97b1c41Smrg 29645bc899bSmrgaix) 29745bc899bSmrg # The C for AIX Compiler uses -M and outputs the dependencies 29845bc899bSmrg # in a .u file. In older versions, this file always lives in the 299c97b1c41Smrg # current directory. Also, the AIX compiler puts '$object:' at the 30045bc899bSmrg # start of each line; $object doesn't have directory information. 30145bc899bSmrg # Version 6 uses the directory in both cases. 302c97b1c41Smrg set_dir_from "$object" 303c97b1c41Smrg set_base_from "$object" 30445bc899bSmrg if test "$libtool" = yes; then 30550f2e948Smrg tmpdepfile1=$dir$base.u 30650f2e948Smrg tmpdepfile2=$base.u 30750f2e948Smrg tmpdepfile3=$dir.libs/$base.u 30845bc899bSmrg "$@" -Wc,-M 30945bc899bSmrg else 31050f2e948Smrg tmpdepfile1=$dir$base.u 31150f2e948Smrg tmpdepfile2=$dir$base.u 31250f2e948Smrg tmpdepfile3=$dir$base.u 31345bc899bSmrg "$@" -M 31445bc899bSmrg fi 31545bc899bSmrg stat=$? 316c97b1c41Smrg if test $stat -ne 0; then 31750f2e948Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 31845bc899bSmrg exit $stat 31945bc899bSmrg fi 32045bc899bSmrg 32150f2e948Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 32250f2e948Smrg do 32350f2e948Smrg test -f "$tmpdepfile" && break 32450f2e948Smrg done 325c97b1c41Smrg aix_post_process_depfile 326c97b1c41Smrg ;; 327c97b1c41Smrg 328c97b1c41Smrgtcc) 329c97b1c41Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330c97b1c41Smrg # FIXME: That version still under development at the moment of writing. 331c97b1c41Smrg # Make that this statement remains true also for stable, released 332c97b1c41Smrg # versions. 333c97b1c41Smrg # It will wrap lines (doesn't matter whether long or short) with a 334c97b1c41Smrg # trailing '\', as in: 335c97b1c41Smrg # 336c97b1c41Smrg # foo.o : \ 337c97b1c41Smrg # foo.c \ 338c97b1c41Smrg # foo.h \ 339c97b1c41Smrg # 340c97b1c41Smrg # It will put a trailing '\' even on the last line, and will use leading 341c97b1c41Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 342c97b1c41Smrg # "Emit spaces for -MD"). 343c97b1c41Smrg "$@" -MD -MF "$tmpdepfile" 344c97b1c41Smrg stat=$? 345c97b1c41Smrg if test $stat -ne 0; then 346c97b1c41Smrg rm -f "$tmpdepfile" 347c97b1c41Smrg exit $stat 34845bc899bSmrg fi 349c97b1c41Smrg rm -f "$depfile" 350c97b1c41Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351c97b1c41Smrg # We have to change lines of the first kind to '$object: \'. 352c97b1c41Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353c97b1c41Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 354c97b1c41Smrg # dummy dependency, to avoid the deleted-header problem. 355c97b1c41Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 35645bc899bSmrg rm -f "$tmpdepfile" 35745bc899bSmrg ;; 35845bc899bSmrg 359c97b1c41Smrg## The order of this option in the case statement is important, since the 360c97b1c41Smrg## shell code in configure will try each of these formats in the order 361c97b1c41Smrg## listed in this file. A plain '-MD' option would be understood by many 362c97b1c41Smrg## compilers, so we must ensure this comes after the gcc and icc options. 363c97b1c41Smrgpgcc) 364c97b1c41Smrg # Portland's C compiler understands '-MD'. 365c97b1c41Smrg # Will always output deps to 'file.d' where file is the root name of the 366c97b1c41Smrg # source file under compilation, even if file resides in a subdirectory. 367c97b1c41Smrg # The object file name does not affect the name of the '.d' file. 368c97b1c41Smrg # pgcc 10.2 will output 36945bc899bSmrg # foo.o: sub/foo.c sub/foo.h 370c97b1c41Smrg # and will wrap long lines using '\' : 37145bc899bSmrg # foo.o: sub/foo.c ... \ 37245bc899bSmrg # sub/foo.h ... \ 37345bc899bSmrg # ... 374c97b1c41Smrg set_dir_from "$object" 375c97b1c41Smrg # Use the source, not the object, to determine the base name, since 376c97b1c41Smrg # that's sadly what pgcc will do too. 377c97b1c41Smrg set_base_from "$source" 378c97b1c41Smrg tmpdepfile=$base.d 379c97b1c41Smrg 380c97b1c41Smrg # For projects that build the same source file twice into different object 381c97b1c41Smrg # files, the pgcc approach of using the *source* file root name can cause 382c97b1c41Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 383c97b1c41Smrg # the same $tmpdepfile. 384c97b1c41Smrg lockdir=$base.d-lock 385c97b1c41Smrg trap " 386c97b1c41Smrg echo '$0: caught signal, cleaning up...' >&2 387c97b1c41Smrg rmdir '$lockdir' 388c97b1c41Smrg exit 1 389c97b1c41Smrg " 1 2 13 15 390c97b1c41Smrg numtries=100 391c97b1c41Smrg i=$numtries 392c97b1c41Smrg while test $i -gt 0; do 393c97b1c41Smrg # mkdir is a portable test-and-set. 394c97b1c41Smrg if mkdir "$lockdir" 2>/dev/null; then 395c97b1c41Smrg # This process acquired the lock. 396c97b1c41Smrg "$@" -MD 397c97b1c41Smrg stat=$? 398c97b1c41Smrg # Release the lock. 399c97b1c41Smrg rmdir "$lockdir" 400c97b1c41Smrg break 401c97b1c41Smrg else 402c97b1c41Smrg # If the lock is being held by a different process, wait 403c97b1c41Smrg # until the winning process is done or we timeout. 404c97b1c41Smrg while test -d "$lockdir" && test $i -gt 0; do 405c97b1c41Smrg sleep 1 406c97b1c41Smrg i=`expr $i - 1` 407c97b1c41Smrg done 408c97b1c41Smrg fi 409c97b1c41Smrg i=`expr $i - 1` 410c97b1c41Smrg done 411c97b1c41Smrg trap - 1 2 13 15 412c97b1c41Smrg if test $i -le 0; then 413c97b1c41Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 414c97b1c41Smrg echo "$0: check lockdir '$lockdir'" >&2 415c97b1c41Smrg exit 1 416c97b1c41Smrg fi 41745bc899bSmrg 418c97b1c41Smrg if test $stat -ne 0; then 41945bc899bSmrg rm -f "$tmpdepfile" 42045bc899bSmrg exit $stat 42145bc899bSmrg fi 42245bc899bSmrg rm -f "$depfile" 42345bc899bSmrg # Each line is of the form `foo.o: dependent.h', 42445bc899bSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 42545bc899bSmrg # Do two passes, one to just change these to 42645bc899bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 42745bc899bSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 42845bc899bSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 42945bc899bSmrg # correctly. Breaking it into two sed invocations is a workaround. 430c97b1c41Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431c97b1c41Smrg | sed -e 's/$/ :/' >> "$depfile" 43245bc899bSmrg rm -f "$tmpdepfile" 43345bc899bSmrg ;; 43445bc899bSmrg 43550f2e948Smrghp2) 43650f2e948Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 43750f2e948Smrg # compilers, which have integrated preprocessors. The correct option 43850f2e948Smrg # to use with these is +Maked; it writes dependencies to a file named 43950f2e948Smrg # 'foo.d', which lands next to the object file, wherever that 44050f2e948Smrg # happens to be. 44150f2e948Smrg # Much of this is similar to the tru64 case; see comments there. 442c97b1c41Smrg set_dir_from "$object" 443c97b1c41Smrg set_base_from "$object" 44450f2e948Smrg if test "$libtool" = yes; then 44550f2e948Smrg tmpdepfile1=$dir$base.d 44650f2e948Smrg tmpdepfile2=$dir.libs/$base.d 44750f2e948Smrg "$@" -Wc,+Maked 44850f2e948Smrg else 44950f2e948Smrg tmpdepfile1=$dir$base.d 45050f2e948Smrg tmpdepfile2=$dir$base.d 45150f2e948Smrg "$@" +Maked 45250f2e948Smrg fi 45350f2e948Smrg stat=$? 454c97b1c41Smrg if test $stat -ne 0; then 45550f2e948Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 45650f2e948Smrg exit $stat 45750f2e948Smrg fi 45850f2e948Smrg 45950f2e948Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 46050f2e948Smrg do 46150f2e948Smrg test -f "$tmpdepfile" && break 46250f2e948Smrg done 46350f2e948Smrg if test -f "$tmpdepfile"; then 464c97b1c41Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 465c97b1c41Smrg # Add 'dependent.h:' lines. 466b40a6198Smrg sed -ne '2,${ 467c97b1c41Smrg s/^ *// 468c97b1c41Smrg s/ \\*$// 469c97b1c41Smrg s/$/:/ 470c97b1c41Smrg p 471c97b1c41Smrg }' "$tmpdepfile" >> "$depfile" 47250f2e948Smrg else 473c97b1c41Smrg make_dummy_depfile 47450f2e948Smrg fi 47550f2e948Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 47650f2e948Smrg ;; 47750f2e948Smrg 47845bc899bSmrgtru64) 479c97b1c41Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 480c97b1c41Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481c97b1c41Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482c97b1c41Smrg # dependencies in 'foo.d' instead, so we check for that too. 483c97b1c41Smrg # Subdirectories are respected. 484c97b1c41Smrg set_dir_from "$object" 485c97b1c41Smrg set_base_from "$object" 486c97b1c41Smrg 487c97b1c41Smrg if test "$libtool" = yes; then 488c97b1c41Smrg # Libtool generates 2 separate objects for the 2 libraries. These 489c97b1c41Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 490c97b1c41Smrg # in $dir$base.o.d. We have to check for both files, because 491c97b1c41Smrg # one of the two compilations can be disabled. We should prefer 492c97b1c41Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493c97b1c41Smrg # automatically cleaned when .libs/ is deleted, while ignoring 494c97b1c41Smrg # the former would cause a distcleancheck panic. 495c97b1c41Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 496c97b1c41Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497c97b1c41Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498c97b1c41Smrg "$@" -Wc,-MD 499c97b1c41Smrg else 500c97b1c41Smrg tmpdepfile1=$dir$base.d 501c97b1c41Smrg tmpdepfile2=$dir$base.d 502c97b1c41Smrg tmpdepfile3=$dir$base.d 503c97b1c41Smrg "$@" -MD 504c97b1c41Smrg fi 505c97b1c41Smrg 506c97b1c41Smrg stat=$? 507c97b1c41Smrg if test $stat -ne 0; then 508c97b1c41Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509c97b1c41Smrg exit $stat 510c97b1c41Smrg fi 511c97b1c41Smrg 512c97b1c41Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513c97b1c41Smrg do 514c97b1c41Smrg test -f "$tmpdepfile" && break 515c97b1c41Smrg done 516c97b1c41Smrg # Same post-processing that is required for AIX mode. 517c97b1c41Smrg aix_post_process_depfile 518c97b1c41Smrg ;; 51945bc899bSmrg 520b40a6198Smrgmsvc7) 521b40a6198Smrg if test "$libtool" = yes; then 522b40a6198Smrg showIncludes=-Wc,-showIncludes 523b40a6198Smrg else 524b40a6198Smrg showIncludes=-showIncludes 525b40a6198Smrg fi 526b40a6198Smrg "$@" $showIncludes > "$tmpdepfile" 527b40a6198Smrg stat=$? 528b40a6198Smrg grep -v '^Note: including file: ' "$tmpdepfile" 529c97b1c41Smrg if test $stat -ne 0; then 530b40a6198Smrg rm -f "$tmpdepfile" 531b40a6198Smrg exit $stat 532b40a6198Smrg fi 533b40a6198Smrg rm -f "$depfile" 534b40a6198Smrg echo "$object : \\" > "$depfile" 535b40a6198Smrg # The first sed program below extracts the file names and escapes 536b40a6198Smrg # backslashes for cygpath. The second sed program outputs the file 537b40a6198Smrg # name when reading, but also accumulates all include files in the 538b40a6198Smrg # hold buffer in order to output them again at the end. This only 539b40a6198Smrg # works with sed implementations that can handle large buffers. 540b40a6198Smrg sed < "$tmpdepfile" -n ' 541b40a6198Smrg/^Note: including file: *\(.*\)/ { 542b40a6198Smrg s//\1/ 543b40a6198Smrg s/\\/\\\\/g 544b40a6198Smrg p 545b40a6198Smrg}' | $cygpath_u | sort -u | sed -n ' 546b40a6198Smrgs/ /\\ /g 547c97b1c41Smrgs/\(.*\)/'"$tab"'\1 \\/p 548b40a6198Smrgs/.\(.*\) \\/\1:/ 549b40a6198SmrgH 550b40a6198Smrg$ { 551c97b1c41Smrg s/.*/'"$tab"'/ 552b40a6198Smrg G 553b40a6198Smrg p 554b40a6198Smrg}' >> "$depfile" 555c97b1c41Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556b40a6198Smrg rm -f "$tmpdepfile" 557b40a6198Smrg ;; 558b40a6198Smrg 559b40a6198Smrgmsvc7msys) 560b40a6198Smrg # This case exists only to let depend.m4 do its work. It works by 561b40a6198Smrg # looking at the text of this script. This case will never be run, 562b40a6198Smrg # since it is checked for above. 563b40a6198Smrg exit 1 564b40a6198Smrg ;; 565b40a6198Smrg 56645bc899bSmrg#nosideeffect) 56745bc899bSmrg # This comment above is used by automake to tell side-effect 56845bc899bSmrg # dependency tracking mechanisms from slower ones. 56945bc899bSmrg 57045bc899bSmrgdashmstdout) 57145bc899bSmrg # Important note: in order to support this mode, a compiler *must* 57245bc899bSmrg # always write the preprocessed file to stdout, regardless of -o. 57345bc899bSmrg "$@" || exit $? 57445bc899bSmrg 57545bc899bSmrg # Remove the call to Libtool. 57645bc899bSmrg if test "$libtool" = yes; then 577b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 57845bc899bSmrg shift 57945bc899bSmrg done 58045bc899bSmrg shift 58145bc899bSmrg fi 58245bc899bSmrg 583c97b1c41Smrg # Remove '-o $object'. 58445bc899bSmrg IFS=" " 58545bc899bSmrg for arg 58645bc899bSmrg do 58745bc899bSmrg case $arg in 58845bc899bSmrg -o) 58945bc899bSmrg shift 59045bc899bSmrg ;; 59145bc899bSmrg $object) 59245bc899bSmrg shift 59345bc899bSmrg ;; 59445bc899bSmrg *) 59545bc899bSmrg set fnord "$@" "$arg" 59645bc899bSmrg shift # fnord 59745bc899bSmrg shift # $arg 59845bc899bSmrg ;; 59945bc899bSmrg esac 60045bc899bSmrg done 60145bc899bSmrg 60245bc899bSmrg test -z "$dashmflag" && dashmflag=-M 603c97b1c41Smrg # Require at least two characters before searching for ':' 60445bc899bSmrg # in the target name. This is to cope with DOS-style filenames: 605c97b1c41Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 60645bc899bSmrg "$@" $dashmflag | 607c97b1c41Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 60845bc899bSmrg rm -f "$depfile" 60945bc899bSmrg cat < "$tmpdepfile" > "$depfile" 610c97b1c41Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 611c97b1c41Smrg # correctly. Breaking it into two sed invocations is a workaround. 612c97b1c41Smrg tr ' ' "$nl" < "$tmpdepfile" \ 613c97b1c41Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614c97b1c41Smrg | sed -e 's/$/ :/' >> "$depfile" 61545bc899bSmrg rm -f "$tmpdepfile" 61645bc899bSmrg ;; 61745bc899bSmrg 61845bc899bSmrgdashXmstdout) 61945bc899bSmrg # This case only exists to satisfy depend.m4. It is never actually 62045bc899bSmrg # run, as this mode is specially recognized in the preamble. 62145bc899bSmrg exit 1 62245bc899bSmrg ;; 62345bc899bSmrg 62445bc899bSmrgmakedepend) 62545bc899bSmrg "$@" || exit $? 62645bc899bSmrg # Remove any Libtool call 62745bc899bSmrg if test "$libtool" = yes; then 628b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 62945bc899bSmrg shift 63045bc899bSmrg done 63145bc899bSmrg shift 63245bc899bSmrg fi 63345bc899bSmrg # X makedepend 63445bc899bSmrg shift 635b40a6198Smrg cleared=no eat=no 636b40a6198Smrg for arg 637b40a6198Smrg do 63845bc899bSmrg case $cleared in 63945bc899bSmrg no) 64045bc899bSmrg set ""; shift 64145bc899bSmrg cleared=yes ;; 64245bc899bSmrg esac 643b40a6198Smrg if test $eat = yes; then 644b40a6198Smrg eat=no 645b40a6198Smrg continue 646b40a6198Smrg fi 64745bc899bSmrg case "$arg" in 64845bc899bSmrg -D*|-I*) 64945bc899bSmrg set fnord "$@" "$arg"; shift ;; 65045bc899bSmrg # Strip any option that makedepend may not understand. Remove 65145bc899bSmrg # the object too, otherwise makedepend will parse it as a source file. 652b40a6198Smrg -arch) 653b40a6198Smrg eat=yes ;; 65445bc899bSmrg -*|$object) 65545bc899bSmrg ;; 65645bc899bSmrg *) 65745bc899bSmrg set fnord "$@" "$arg"; shift ;; 65845bc899bSmrg esac 65945bc899bSmrg done 660b40a6198Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 66145bc899bSmrg touch "$tmpdepfile" 66245bc899bSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 66345bc899bSmrg rm -f "$depfile" 664b40a6198Smrg # makedepend may prepend the VPATH from the source file name to the object. 665b40a6198Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 666b40a6198Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667c97b1c41Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 668c97b1c41Smrg # correctly. Breaking it into two sed invocations is a workaround. 669c97b1c41Smrg sed '1,2d' "$tmpdepfile" \ 670c97b1c41Smrg | tr ' ' "$nl" \ 671c97b1c41Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672c97b1c41Smrg | sed -e 's/$/ :/' >> "$depfile" 67345bc899bSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 67445bc899bSmrg ;; 67545bc899bSmrg 67645bc899bSmrgcpp) 67745bc899bSmrg # Important note: in order to support this mode, a compiler *must* 67845bc899bSmrg # always write the preprocessed file to stdout. 67945bc899bSmrg "$@" || exit $? 68045bc899bSmrg 68145bc899bSmrg # Remove the call to Libtool. 68245bc899bSmrg if test "$libtool" = yes; then 683b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 68445bc899bSmrg shift 68545bc899bSmrg done 68645bc899bSmrg shift 68745bc899bSmrg fi 68845bc899bSmrg 689c97b1c41Smrg # Remove '-o $object'. 69045bc899bSmrg IFS=" " 69145bc899bSmrg for arg 69245bc899bSmrg do 69345bc899bSmrg case $arg in 69445bc899bSmrg -o) 69545bc899bSmrg shift 69645bc899bSmrg ;; 69745bc899bSmrg $object) 69845bc899bSmrg shift 69945bc899bSmrg ;; 70045bc899bSmrg *) 70145bc899bSmrg set fnord "$@" "$arg" 70245bc899bSmrg shift # fnord 70345bc899bSmrg shift # $arg 70445bc899bSmrg ;; 70545bc899bSmrg esac 70645bc899bSmrg done 70745bc899bSmrg 708c97b1c41Smrg "$@" -E \ 709c97b1c41Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710c97b1c41Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711c97b1c41Smrg | sed '$ s: \\$::' > "$tmpdepfile" 71245bc899bSmrg rm -f "$depfile" 71345bc899bSmrg echo "$object : \\" > "$depfile" 71445bc899bSmrg cat < "$tmpdepfile" >> "$depfile" 71545bc899bSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 71645bc899bSmrg rm -f "$tmpdepfile" 71745bc899bSmrg ;; 71845bc899bSmrg 71945bc899bSmrgmsvisualcpp) 72045bc899bSmrg # Important note: in order to support this mode, a compiler *must* 721b40a6198Smrg # always write the preprocessed file to stdout. 72245bc899bSmrg "$@" || exit $? 723b40a6198Smrg 724b40a6198Smrg # Remove the call to Libtool. 725b40a6198Smrg if test "$libtool" = yes; then 726b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 727b40a6198Smrg shift 728b40a6198Smrg done 729b40a6198Smrg shift 730b40a6198Smrg fi 731b40a6198Smrg 73245bc899bSmrg IFS=" " 73345bc899bSmrg for arg 73445bc899bSmrg do 73545bc899bSmrg case "$arg" in 736b40a6198Smrg -o) 737b40a6198Smrg shift 738b40a6198Smrg ;; 739b40a6198Smrg $object) 740b40a6198Smrg shift 741b40a6198Smrg ;; 74245bc899bSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743c97b1c41Smrg set fnord "$@" 744c97b1c41Smrg shift 745c97b1c41Smrg shift 746c97b1c41Smrg ;; 74745bc899bSmrg *) 748c97b1c41Smrg set fnord "$@" "$arg" 749c97b1c41Smrg shift 750c97b1c41Smrg shift 751c97b1c41Smrg ;; 75245bc899bSmrg esac 75345bc899bSmrg done 754b40a6198Smrg "$@" -E 2>/dev/null | 755b40a6198Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 75645bc899bSmrg rm -f "$depfile" 75745bc899bSmrg echo "$object : \\" > "$depfile" 758c97b1c41Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 759c97b1c41Smrg echo "$tab" >> "$depfile" 760b40a6198Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 76145bc899bSmrg rm -f "$tmpdepfile" 76245bc899bSmrg ;; 76345bc899bSmrg 764b40a6198Smrgmsvcmsys) 765b40a6198Smrg # This case exists only to let depend.m4 do its work. It works by 766b40a6198Smrg # looking at the text of this script. This case will never be run, 767b40a6198Smrg # since it is checked for above. 768b40a6198Smrg exit 1 769b40a6198Smrg ;; 770b40a6198Smrg 77145bc899bSmrgnone) 77245bc899bSmrg exec "$@" 77345bc899bSmrg ;; 77445bc899bSmrg 77545bc899bSmrg*) 77645bc899bSmrg echo "Unknown depmode $depmode" 1>&2 77745bc899bSmrg exit 1 77845bc899bSmrg ;; 77945bc899bSmrgesac 78045bc899bSmrg 78145bc899bSmrgexit 0 78245bc899bSmrg 78345bc899bSmrg# Local Variables: 78445bc899bSmrg# mode: shell-script 78545bc899bSmrg# sh-indentation: 2 786a0c41156Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 78745bc899bSmrg# time-stamp-start: "scriptversion=" 78845bc899bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 789f2408745Smrg# time-stamp-time-zone: "UTC0" 790b40a6198Smrg# time-stamp-end: "; # UTC" 79145bc899bSmrg# End: 792