depcomp revision adb5514a
102be438aSmrg#! /bin/sh 202be438aSmrg# depcomp - compile a program generating dependencies as side-effects 302be438aSmrg 4e2463426Smrgscriptversion=2013-05-30.07; # UTC 502be438aSmrg 6adb5514aSmrg# Copyright (C) 1999-2014 Free Software Foundation, Inc. 702be438aSmrg 802be438aSmrg# This program is free software; you can redistribute it and/or modify 902be438aSmrg# it under the terms of the GNU General Public License as published by 1002be438aSmrg# the Free Software Foundation; either version 2, or (at your option) 1102be438aSmrg# any later version. 1202be438aSmrg 1302be438aSmrg# This program is distributed in the hope that it will be useful, 1402be438aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1502be438aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1602be438aSmrg# GNU General Public License for more details. 1702be438aSmrg 1802be438aSmrg# You should have received a copy of the GNU General Public License 1961dc2d86Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2002be438aSmrg 2102be438aSmrg# As a special exception to the GNU General Public License, if you 2202be438aSmrg# distribute this file as part of a program that contains a 2302be438aSmrg# configuration script generated by Autoconf, you may include it under 2402be438aSmrg# the same distribution terms that you use for the rest of that program. 2502be438aSmrg 2602be438aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2702be438aSmrg 2802be438aSmrgcase $1 in 2902be438aSmrg '') 30e2463426Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 31e2463426Smrg exit 1; 32e2463426Smrg ;; 3302be438aSmrg -h | --h*) 3402be438aSmrg cat <<\EOF 3502be438aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3602be438aSmrg 3702be438aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3802be438aSmrgas side-effects. 3902be438aSmrg 4002be438aSmrgEnvironment variables: 4102be438aSmrg depmode Dependency tracking mode. 42e2463426Smrg source Source file read by 'PROGRAMS ARGS'. 43e2463426Smrg object Object file output by 'PROGRAMS ARGS'. 4402be438aSmrg DEPDIR directory where to store dependencies. 4502be438aSmrg depfile Dependency file to output. 46909209eeSmrg tmpdepfile Temporary file to use when outputting dependencies. 4702be438aSmrg libtool Whether libtool is used (yes/no). 4802be438aSmrg 4902be438aSmrgReport bugs to <bug-automake@gnu.org>. 5002be438aSmrgEOF 5102be438aSmrg exit $? 5202be438aSmrg ;; 5302be438aSmrg -v | --v*) 5402be438aSmrg echo "depcomp $scriptversion" 5502be438aSmrg exit $? 5602be438aSmrg ;; 5702be438aSmrgesac 5802be438aSmrg 59e2463426Smrg# Get the directory component of the given path, and save it in the 60e2463426Smrg# global variables '$dir'. Note that this directory component will 61e2463426Smrg# be either empty or ending with a '/' character. This is deliberate. 62e2463426Smrgset_dir_from () 63e2463426Smrg{ 64e2463426Smrg case $1 in 65e2463426Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66e2463426Smrg *) dir=;; 67e2463426Smrg esac 68e2463426Smrg} 69e2463426Smrg 70e2463426Smrg# Get the suffix-stripped basename of the given path, and save it the 71e2463426Smrg# global variable '$base'. 72e2463426Smrgset_base_from () 73e2463426Smrg{ 74e2463426Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75e2463426Smrg} 76e2463426Smrg 77e2463426Smrg# If no dependency file was actually created by the compiler invocation, 78e2463426Smrg# we still have to create a dummy depfile, to avoid errors with the 79e2463426Smrg# Makefile "include basename.Plo" scheme. 80e2463426Smrgmake_dummy_depfile () 81e2463426Smrg{ 82e2463426Smrg echo "#dummy" > "$depfile" 83e2463426Smrg} 84e2463426Smrg 85e2463426Smrg# Factor out some common post-processing of the generated depfile. 86e2463426Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 87e2463426Smrgaix_post_process_depfile () 88e2463426Smrg{ 89e2463426Smrg # If the compiler actually managed to produce a dependency file, 90e2463426Smrg # post-process it. 91e2463426Smrg if test -f "$tmpdepfile"; then 92e2463426Smrg # Each line is of the form 'foo.o: dependency.h'. 93e2463426Smrg # Do two passes, one to just change these to 94e2463426Smrg # $object: dependency.h 95e2463426Smrg # and one to simply output 96e2463426Smrg # dependency.h: 97e2463426Smrg # which is needed to avoid the deleted-header problem. 98e2463426Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99e2463426Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100e2463426Smrg } > "$depfile" 101e2463426Smrg rm -f "$tmpdepfile" 102e2463426Smrg else 103e2463426Smrg make_dummy_depfile 104e2463426Smrg fi 105e2463426Smrg} 106e2463426Smrg 107e2463426Smrg# A tabulation character. 108e2463426Smrgtab=' ' 109e2463426Smrg# A newline character. 110e2463426Smrgnl=' 111e2463426Smrg' 112e2463426Smrg# Character ranges might be problematic outside the C locale. 113e2463426Smrg# These definitions help. 114e2463426Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115e2463426Smrglower=abcdefghijklmnopqrstuvwxyz 116e2463426Smrgdigits=0123456789 117e2463426Smrgalpha=${upper}${lower} 118e2463426Smrg 11902be438aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 12002be438aSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 12102be438aSmrg exit 1 12202be438aSmrgfi 12302be438aSmrg 12402be438aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 12502be438aSmrgdepfile=${depfile-`echo "$object" | 12602be438aSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 12702be438aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 12802be438aSmrg 12902be438aSmrgrm -f "$tmpdepfile" 13002be438aSmrg 131e2463426Smrg# Avoid interferences from the environment. 132e2463426Smrggccflag= dashmflag= 133e2463426Smrg 13402be438aSmrg# Some modes work just like other modes, but use different flags. We 13502be438aSmrg# parameterize here, but still list the modes in the big case below, 13602be438aSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 13702be438aSmrg# here, because this file can only contain one case statement. 13802be438aSmrgif test "$depmode" = hp; then 13902be438aSmrg # HP compiler uses -M and no extra arg. 14002be438aSmrg gccflag=-M 14102be438aSmrg depmode=gcc 14202be438aSmrgfi 14302be438aSmrg 14402be438aSmrgif test "$depmode" = dashXmstdout; then 145e2463426Smrg # This is just like dashmstdout with a different argument. 146e2463426Smrg dashmflag=-xM 147e2463426Smrg depmode=dashmstdout 14802be438aSmrgfi 14902be438aSmrg 15061dc2d86Smrgcygpath_u="cygpath -u -f -" 15161dc2d86Smrgif test "$depmode" = msvcmsys; then 152e2463426Smrg # This is just like msvisualcpp but w/o cygpath translation. 153e2463426Smrg # Just convert the backslash-escaped backslashes to single forward 154e2463426Smrg # slashes to satisfy depend.m4 155e2463426Smrg cygpath_u='sed s,\\\\,/,g' 156e2463426Smrg depmode=msvisualcpp 15761dc2d86Smrgfi 15861dc2d86Smrg 159909209eeSmrgif test "$depmode" = msvc7msys; then 160e2463426Smrg # This is just like msvc7 but w/o cygpath translation. 161e2463426Smrg # Just convert the backslash-escaped backslashes to single forward 162e2463426Smrg # slashes to satisfy depend.m4 163e2463426Smrg cygpath_u='sed s,\\\\,/,g' 164e2463426Smrg depmode=msvc7 165e2463426Smrgfi 166e2463426Smrg 167e2463426Smrgif test "$depmode" = xlc; then 168e2463426Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169e2463426Smrg gccflag=-qmakedep=gcc,-MF 170e2463426Smrg depmode=gcc 171909209eeSmrgfi 172909209eeSmrg 17302be438aSmrgcase "$depmode" in 17402be438aSmrggcc3) 17502be438aSmrg## gcc 3 implements dependency tracking that does exactly what 17602be438aSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 17702be438aSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 178880ed95aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 179880ed95aSmrg## the command line argument order; so add the flags where they 180880ed95aSmrg## appear in depend2.am. Note that the slowdown incurred here 181880ed95aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 182880ed95aSmrg for arg 183880ed95aSmrg do 184880ed95aSmrg case $arg in 185880ed95aSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 186880ed95aSmrg *) set fnord "$@" "$arg" ;; 187880ed95aSmrg esac 188880ed95aSmrg shift # fnord 189880ed95aSmrg shift # $arg 190880ed95aSmrg done 191880ed95aSmrg "$@" 19202be438aSmrg stat=$? 193e2463426Smrg if test $stat -ne 0; then 19402be438aSmrg rm -f "$tmpdepfile" 19502be438aSmrg exit $stat 19602be438aSmrg fi 19702be438aSmrg mv "$tmpdepfile" "$depfile" 19802be438aSmrg ;; 19902be438aSmrg 20002be438aSmrggcc) 201e2463426Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202e2463426Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203e2463426Smrg## (see the conditional assignment to $gccflag above). 20402be438aSmrg## There are various ways to get dependency output from gcc. Here's 20502be438aSmrg## why we pick this rather obscure method: 20602be438aSmrg## - Don't want to use -MD because we'd like the dependencies to end 20702be438aSmrg## up in a subdir. Having to rename by hand is ugly. 20802be438aSmrg## (We might end up doing this anyway to support other compilers.) 20902be438aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210e2463426Smrg## -MM, not -M (despite what the docs say). Also, it might not be 211e2463426Smrg## supported by the other compilers which use the 'gcc' depmode. 21202be438aSmrg## - Using -M directly means running the compiler twice (even worse 21302be438aSmrg## than renaming). 21402be438aSmrg if test -z "$gccflag"; then 21502be438aSmrg gccflag=-MD, 21602be438aSmrg fi 21702be438aSmrg "$@" -Wp,"$gccflag$tmpdepfile" 21802be438aSmrg stat=$? 219e2463426Smrg if test $stat -ne 0; then 22002be438aSmrg rm -f "$tmpdepfile" 22102be438aSmrg exit $stat 22202be438aSmrg fi 22302be438aSmrg rm -f "$depfile" 22402be438aSmrg echo "$object : \\" > "$depfile" 225e2463426Smrg # The second -e expression handles DOS-style file names with drive 226e2463426Smrg # letters. 22702be438aSmrg sed -e 's/^[^:]*: / /' \ 22802be438aSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229e2463426Smrg## This next piece of magic avoids the "deleted header file" problem. 23002be438aSmrg## The problem is that when a header file which appears in a .P file 23102be438aSmrg## is deleted, the dependency causes make to die (because there is 23202be438aSmrg## typically no way to rebuild the header). We avoid this by adding 23302be438aSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 23402be438aSmrg## this for us directly. 235e2463426Smrg## Some versions of gcc put a space before the ':'. On the theory 23602be438aSmrg## that the space means something, we add a space to the output as 237909209eeSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 238909209eeSmrg## to the object. Take care to not repeat it in the output. 23902be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 24002be438aSmrg## correctly. Breaking it into two sed invocations is a workaround. 241e2463426Smrg tr ' ' "$nl" < "$tmpdepfile" \ 242e2463426Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243e2463426Smrg | sed -e 's/$/ :/' >> "$depfile" 24402be438aSmrg rm -f "$tmpdepfile" 24502be438aSmrg ;; 24602be438aSmrg 24702be438aSmrghp) 24802be438aSmrg # This case exists only to let depend.m4 do its work. It works by 24902be438aSmrg # looking at the text of this script. This case will never be run, 25002be438aSmrg # since it is checked for above. 25102be438aSmrg exit 1 25202be438aSmrg ;; 25302be438aSmrg 25402be438aSmrgsgi) 25502be438aSmrg if test "$libtool" = yes; then 25602be438aSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 25702be438aSmrg else 25802be438aSmrg "$@" -MDupdate "$tmpdepfile" 25902be438aSmrg fi 26002be438aSmrg stat=$? 261e2463426Smrg if test $stat -ne 0; then 26202be438aSmrg rm -f "$tmpdepfile" 26302be438aSmrg exit $stat 26402be438aSmrg fi 26502be438aSmrg rm -f "$depfile" 26602be438aSmrg 26702be438aSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 26802be438aSmrg echo "$object : \\" > "$depfile" 26902be438aSmrg # Clip off the initial element (the dependent). Don't try to be 27002be438aSmrg # clever and replace this with sed code, as IRIX sed won't handle 27102be438aSmrg # lines with more than a fixed number of characters (4096 in 27202be438aSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273e2463426Smrg # the IRIX cc adds comments like '#:fec' to the end of the 27402be438aSmrg # dependency line. 275e2463426Smrg tr ' ' "$nl" < "$tmpdepfile" \ 276e2463426Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277e2463426Smrg | tr "$nl" ' ' >> "$depfile" 27861dc2d86Smrg echo >> "$depfile" 27902be438aSmrg # The second pass generates a dummy entry for each header file. 280e2463426Smrg tr ' ' "$nl" < "$tmpdepfile" \ 281e2463426Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282e2463426Smrg >> "$depfile" 28302be438aSmrg else 284e2463426Smrg make_dummy_depfile 28502be438aSmrg fi 28602be438aSmrg rm -f "$tmpdepfile" 28702be438aSmrg ;; 28802be438aSmrg 289e2463426Smrgxlc) 290e2463426Smrg # This case exists only to let depend.m4 do its work. It works by 291e2463426Smrg # looking at the text of this script. This case will never be run, 292e2463426Smrg # since it is checked for above. 293e2463426Smrg exit 1 294e2463426Smrg ;; 295e2463426Smrg 29602be438aSmrgaix) 29702be438aSmrg # The C for AIX Compiler uses -M and outputs the dependencies 29802be438aSmrg # in a .u file. In older versions, this file always lives in the 299e2463426Smrg # current directory. Also, the AIX compiler puts '$object:' at the 30002be438aSmrg # start of each line; $object doesn't have directory information. 30102be438aSmrg # Version 6 uses the directory in both cases. 302e2463426Smrg set_dir_from "$object" 303e2463426Smrg set_base_from "$object" 30402be438aSmrg if test "$libtool" = yes; then 305880ed95aSmrg tmpdepfile1=$dir$base.u 306880ed95aSmrg tmpdepfile2=$base.u 307880ed95aSmrg tmpdepfile3=$dir.libs/$base.u 30802be438aSmrg "$@" -Wc,-M 30902be438aSmrg else 310880ed95aSmrg tmpdepfile1=$dir$base.u 311880ed95aSmrg tmpdepfile2=$dir$base.u 312880ed95aSmrg tmpdepfile3=$dir$base.u 31302be438aSmrg "$@" -M 31402be438aSmrg fi 31502be438aSmrg stat=$? 316e2463426Smrg if test $stat -ne 0; then 317880ed95aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 31802be438aSmrg exit $stat 31902be438aSmrg fi 32002be438aSmrg 321880ed95aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 322880ed95aSmrg do 323880ed95aSmrg test -f "$tmpdepfile" && break 324880ed95aSmrg done 325e2463426Smrg aix_post_process_depfile 326e2463426Smrg ;; 327e2463426Smrg 328e2463426Smrgtcc) 329e2463426Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330e2463426Smrg # FIXME: That version still under development at the moment of writing. 331e2463426Smrg # Make that this statement remains true also for stable, released 332e2463426Smrg # versions. 333e2463426Smrg # It will wrap lines (doesn't matter whether long or short) with a 334e2463426Smrg # trailing '\', as in: 335e2463426Smrg # 336e2463426Smrg # foo.o : \ 337e2463426Smrg # foo.c \ 338e2463426Smrg # foo.h \ 339e2463426Smrg # 340e2463426Smrg # It will put a trailing '\' even on the last line, and will use leading 341e2463426Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 342e2463426Smrg # "Emit spaces for -MD"). 343e2463426Smrg "$@" -MD -MF "$tmpdepfile" 344e2463426Smrg stat=$? 345e2463426Smrg if test $stat -ne 0; then 346e2463426Smrg rm -f "$tmpdepfile" 347e2463426Smrg exit $stat 34802be438aSmrg fi 349e2463426Smrg rm -f "$depfile" 350e2463426Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351e2463426Smrg # We have to change lines of the first kind to '$object: \'. 352e2463426Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353e2463426Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 354e2463426Smrg # dummy dependency, to avoid the deleted-header problem. 355e2463426Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 35602be438aSmrg rm -f "$tmpdepfile" 35702be438aSmrg ;; 35802be438aSmrg 359e2463426Smrg## The order of this option in the case statement is important, since the 360e2463426Smrg## shell code in configure will try each of these formats in the order 361e2463426Smrg## listed in this file. A plain '-MD' option would be understood by many 362e2463426Smrg## compilers, so we must ensure this comes after the gcc and icc options. 363e2463426Smrgpgcc) 364e2463426Smrg # Portland's C compiler understands '-MD'. 365e2463426Smrg # Will always output deps to 'file.d' where file is the root name of the 366e2463426Smrg # source file under compilation, even if file resides in a subdirectory. 367e2463426Smrg # The object file name does not affect the name of the '.d' file. 368e2463426Smrg # pgcc 10.2 will output 36902be438aSmrg # foo.o: sub/foo.c sub/foo.h 370e2463426Smrg # and will wrap long lines using '\' : 37102be438aSmrg # foo.o: sub/foo.c ... \ 37202be438aSmrg # sub/foo.h ... \ 37302be438aSmrg # ... 374e2463426Smrg set_dir_from "$object" 375e2463426Smrg # Use the source, not the object, to determine the base name, since 376e2463426Smrg # that's sadly what pgcc will do too. 377e2463426Smrg set_base_from "$source" 378e2463426Smrg tmpdepfile=$base.d 379e2463426Smrg 380e2463426Smrg # For projects that build the same source file twice into different object 381e2463426Smrg # files, the pgcc approach of using the *source* file root name can cause 382e2463426Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 383e2463426Smrg # the same $tmpdepfile. 384e2463426Smrg lockdir=$base.d-lock 385e2463426Smrg trap " 386e2463426Smrg echo '$0: caught signal, cleaning up...' >&2 387e2463426Smrg rmdir '$lockdir' 388e2463426Smrg exit 1 389e2463426Smrg " 1 2 13 15 390e2463426Smrg numtries=100 391e2463426Smrg i=$numtries 392e2463426Smrg while test $i -gt 0; do 393e2463426Smrg # mkdir is a portable test-and-set. 394e2463426Smrg if mkdir "$lockdir" 2>/dev/null; then 395e2463426Smrg # This process acquired the lock. 396e2463426Smrg "$@" -MD 397e2463426Smrg stat=$? 398e2463426Smrg # Release the lock. 399e2463426Smrg rmdir "$lockdir" 400e2463426Smrg break 401e2463426Smrg else 402e2463426Smrg # If the lock is being held by a different process, wait 403e2463426Smrg # until the winning process is done or we timeout. 404e2463426Smrg while test -d "$lockdir" && test $i -gt 0; do 405e2463426Smrg sleep 1 406e2463426Smrg i=`expr $i - 1` 407e2463426Smrg done 408e2463426Smrg fi 409e2463426Smrg i=`expr $i - 1` 410e2463426Smrg done 411e2463426Smrg trap - 1 2 13 15 412e2463426Smrg if test $i -le 0; then 413e2463426Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 414e2463426Smrg echo "$0: check lockdir '$lockdir'" >&2 415e2463426Smrg exit 1 416e2463426Smrg fi 41702be438aSmrg 418e2463426Smrg if test $stat -ne 0; then 41902be438aSmrg rm -f "$tmpdepfile" 42002be438aSmrg exit $stat 42102be438aSmrg fi 42202be438aSmrg rm -f "$depfile" 42302be438aSmrg # Each line is of the form `foo.o: dependent.h', 42402be438aSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 42502be438aSmrg # Do two passes, one to just change these to 42602be438aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 42702be438aSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 42802be438aSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 42902be438aSmrg # correctly. Breaking it into two sed invocations is a workaround. 430e2463426Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431e2463426Smrg | sed -e 's/$/ :/' >> "$depfile" 43202be438aSmrg rm -f "$tmpdepfile" 43302be438aSmrg ;; 43402be438aSmrg 435880ed95aSmrghp2) 436880ed95aSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 437880ed95aSmrg # compilers, which have integrated preprocessors. The correct option 438880ed95aSmrg # to use with these is +Maked; it writes dependencies to a file named 439880ed95aSmrg # 'foo.d', which lands next to the object file, wherever that 440880ed95aSmrg # happens to be. 441880ed95aSmrg # Much of this is similar to the tru64 case; see comments there. 442e2463426Smrg set_dir_from "$object" 443e2463426Smrg set_base_from "$object" 444880ed95aSmrg if test "$libtool" = yes; then 445880ed95aSmrg tmpdepfile1=$dir$base.d 446880ed95aSmrg tmpdepfile2=$dir.libs/$base.d 447880ed95aSmrg "$@" -Wc,+Maked 448880ed95aSmrg else 449880ed95aSmrg tmpdepfile1=$dir$base.d 450880ed95aSmrg tmpdepfile2=$dir$base.d 451880ed95aSmrg "$@" +Maked 452880ed95aSmrg fi 453880ed95aSmrg stat=$? 454e2463426Smrg if test $stat -ne 0; then 455880ed95aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 456880ed95aSmrg exit $stat 457880ed95aSmrg fi 458880ed95aSmrg 459880ed95aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 460880ed95aSmrg do 461880ed95aSmrg test -f "$tmpdepfile" && break 462880ed95aSmrg done 463880ed95aSmrg if test -f "$tmpdepfile"; then 464e2463426Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 465e2463426Smrg # Add 'dependent.h:' lines. 46661dc2d86Smrg sed -ne '2,${ 467e2463426Smrg s/^ *// 468e2463426Smrg s/ \\*$// 469e2463426Smrg s/$/:/ 470e2463426Smrg p 471e2463426Smrg }' "$tmpdepfile" >> "$depfile" 472880ed95aSmrg else 473e2463426Smrg make_dummy_depfile 474880ed95aSmrg fi 475880ed95aSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 476880ed95aSmrg ;; 477880ed95aSmrg 47802be438aSmrgtru64) 479e2463426Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 480e2463426Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481e2463426Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482e2463426Smrg # dependencies in 'foo.d' instead, so we check for that too. 483e2463426Smrg # Subdirectories are respected. 484e2463426Smrg set_dir_from "$object" 485e2463426Smrg set_base_from "$object" 486e2463426Smrg 487e2463426Smrg if test "$libtool" = yes; then 488e2463426Smrg # Libtool generates 2 separate objects for the 2 libraries. These 489e2463426Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 490e2463426Smrg # in $dir$base.o.d. We have to check for both files, because 491e2463426Smrg # one of the two compilations can be disabled. We should prefer 492e2463426Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493e2463426Smrg # automatically cleaned when .libs/ is deleted, while ignoring 494e2463426Smrg # the former would cause a distcleancheck panic. 495e2463426Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 496e2463426Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497e2463426Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498e2463426Smrg "$@" -Wc,-MD 499e2463426Smrg else 500e2463426Smrg tmpdepfile1=$dir$base.d 501e2463426Smrg tmpdepfile2=$dir$base.d 502e2463426Smrg tmpdepfile3=$dir$base.d 503e2463426Smrg "$@" -MD 504e2463426Smrg fi 505e2463426Smrg 506e2463426Smrg stat=$? 507e2463426Smrg if test $stat -ne 0; then 508e2463426Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509e2463426Smrg exit $stat 510e2463426Smrg fi 511e2463426Smrg 512e2463426Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513e2463426Smrg do 514e2463426Smrg test -f "$tmpdepfile" && break 515e2463426Smrg done 516e2463426Smrg # Same post-processing that is required for AIX mode. 517e2463426Smrg aix_post_process_depfile 518e2463426Smrg ;; 51902be438aSmrg 520909209eeSmrgmsvc7) 521909209eeSmrg if test "$libtool" = yes; then 522909209eeSmrg showIncludes=-Wc,-showIncludes 523909209eeSmrg else 524909209eeSmrg showIncludes=-showIncludes 525909209eeSmrg fi 526909209eeSmrg "$@" $showIncludes > "$tmpdepfile" 527909209eeSmrg stat=$? 528909209eeSmrg grep -v '^Note: including file: ' "$tmpdepfile" 529e2463426Smrg if test $stat -ne 0; then 530909209eeSmrg rm -f "$tmpdepfile" 531909209eeSmrg exit $stat 532909209eeSmrg fi 533909209eeSmrg rm -f "$depfile" 534909209eeSmrg echo "$object : \\" > "$depfile" 535909209eeSmrg # The first sed program below extracts the file names and escapes 536909209eeSmrg # backslashes for cygpath. The second sed program outputs the file 537909209eeSmrg # name when reading, but also accumulates all include files in the 538909209eeSmrg # hold buffer in order to output them again at the end. This only 539909209eeSmrg # works with sed implementations that can handle large buffers. 540909209eeSmrg sed < "$tmpdepfile" -n ' 541909209eeSmrg/^Note: including file: *\(.*\)/ { 542909209eeSmrg s//\1/ 543909209eeSmrg s/\\/\\\\/g 544909209eeSmrg p 545909209eeSmrg}' | $cygpath_u | sort -u | sed -n ' 546909209eeSmrgs/ /\\ /g 547e2463426Smrgs/\(.*\)/'"$tab"'\1 \\/p 548909209eeSmrgs/.\(.*\) \\/\1:/ 549909209eeSmrgH 550909209eeSmrg$ { 551e2463426Smrg s/.*/'"$tab"'/ 552909209eeSmrg G 553909209eeSmrg p 554909209eeSmrg}' >> "$depfile" 555e2463426Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556909209eeSmrg rm -f "$tmpdepfile" 557909209eeSmrg ;; 558909209eeSmrg 559909209eeSmrgmsvc7msys) 560909209eeSmrg # This case exists only to let depend.m4 do its work. It works by 561909209eeSmrg # looking at the text of this script. This case will never be run, 562909209eeSmrg # since it is checked for above. 563909209eeSmrg exit 1 564909209eeSmrg ;; 565909209eeSmrg 56602be438aSmrg#nosideeffect) 56702be438aSmrg # This comment above is used by automake to tell side-effect 56802be438aSmrg # dependency tracking mechanisms from slower ones. 56902be438aSmrg 57002be438aSmrgdashmstdout) 57102be438aSmrg # Important note: in order to support this mode, a compiler *must* 57202be438aSmrg # always write the preprocessed file to stdout, regardless of -o. 57302be438aSmrg "$@" || exit $? 57402be438aSmrg 57502be438aSmrg # Remove the call to Libtool. 57602be438aSmrg if test "$libtool" = yes; then 57761dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 57802be438aSmrg shift 57902be438aSmrg done 58002be438aSmrg shift 58102be438aSmrg fi 58202be438aSmrg 583e2463426Smrg # Remove '-o $object'. 58402be438aSmrg IFS=" " 58502be438aSmrg for arg 58602be438aSmrg do 58702be438aSmrg case $arg in 58802be438aSmrg -o) 58902be438aSmrg shift 59002be438aSmrg ;; 59102be438aSmrg $object) 59202be438aSmrg shift 59302be438aSmrg ;; 59402be438aSmrg *) 59502be438aSmrg set fnord "$@" "$arg" 59602be438aSmrg shift # fnord 59702be438aSmrg shift # $arg 59802be438aSmrg ;; 59902be438aSmrg esac 60002be438aSmrg done 60102be438aSmrg 60202be438aSmrg test -z "$dashmflag" && dashmflag=-M 603e2463426Smrg # Require at least two characters before searching for ':' 60402be438aSmrg # in the target name. This is to cope with DOS-style filenames: 605e2463426Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 60602be438aSmrg "$@" $dashmflag | 607e2463426Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 60802be438aSmrg rm -f "$depfile" 60902be438aSmrg cat < "$tmpdepfile" > "$depfile" 610e2463426Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 611e2463426Smrg # correctly. Breaking it into two sed invocations is a workaround. 612e2463426Smrg tr ' ' "$nl" < "$tmpdepfile" \ 613e2463426Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614e2463426Smrg | sed -e 's/$/ :/' >> "$depfile" 61502be438aSmrg rm -f "$tmpdepfile" 61602be438aSmrg ;; 61702be438aSmrg 61802be438aSmrgdashXmstdout) 61902be438aSmrg # This case only exists to satisfy depend.m4. It is never actually 62002be438aSmrg # run, as this mode is specially recognized in the preamble. 62102be438aSmrg exit 1 62202be438aSmrg ;; 62302be438aSmrg 62402be438aSmrgmakedepend) 62502be438aSmrg "$@" || exit $? 62602be438aSmrg # Remove any Libtool call 62702be438aSmrg if test "$libtool" = yes; then 62861dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 62902be438aSmrg shift 63002be438aSmrg done 63102be438aSmrg shift 63202be438aSmrg fi 63302be438aSmrg # X makedepend 63402be438aSmrg shift 63561dc2d86Smrg cleared=no eat=no 63661dc2d86Smrg for arg 63761dc2d86Smrg do 63802be438aSmrg case $cleared in 63902be438aSmrg no) 64002be438aSmrg set ""; shift 64102be438aSmrg cleared=yes ;; 64202be438aSmrg esac 64361dc2d86Smrg if test $eat = yes; then 64461dc2d86Smrg eat=no 64561dc2d86Smrg continue 64661dc2d86Smrg fi 64702be438aSmrg case "$arg" in 64802be438aSmrg -D*|-I*) 64902be438aSmrg set fnord "$@" "$arg"; shift ;; 65002be438aSmrg # Strip any option that makedepend may not understand. Remove 65102be438aSmrg # the object too, otherwise makedepend will parse it as a source file. 65261dc2d86Smrg -arch) 65361dc2d86Smrg eat=yes ;; 65402be438aSmrg -*|$object) 65502be438aSmrg ;; 65602be438aSmrg *) 65702be438aSmrg set fnord "$@" "$arg"; shift ;; 65802be438aSmrg esac 65902be438aSmrg done 66061dc2d86Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 66102be438aSmrg touch "$tmpdepfile" 66202be438aSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 66302be438aSmrg rm -f "$depfile" 664909209eeSmrg # makedepend may prepend the VPATH from the source file name to the object. 665909209eeSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 666909209eeSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667e2463426Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 668e2463426Smrg # correctly. Breaking it into two sed invocations is a workaround. 669e2463426Smrg sed '1,2d' "$tmpdepfile" \ 670e2463426Smrg | tr ' ' "$nl" \ 671e2463426Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672e2463426Smrg | sed -e 's/$/ :/' >> "$depfile" 67302be438aSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 67402be438aSmrg ;; 67502be438aSmrg 67602be438aSmrgcpp) 67702be438aSmrg # Important note: in order to support this mode, a compiler *must* 67802be438aSmrg # always write the preprocessed file to stdout. 67902be438aSmrg "$@" || exit $? 68002be438aSmrg 68102be438aSmrg # Remove the call to Libtool. 68202be438aSmrg if test "$libtool" = yes; then 68361dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 68402be438aSmrg shift 68502be438aSmrg done 68602be438aSmrg shift 68702be438aSmrg fi 68802be438aSmrg 689e2463426Smrg # Remove '-o $object'. 69002be438aSmrg IFS=" " 69102be438aSmrg for arg 69202be438aSmrg do 69302be438aSmrg case $arg in 69402be438aSmrg -o) 69502be438aSmrg shift 69602be438aSmrg ;; 69702be438aSmrg $object) 69802be438aSmrg shift 69902be438aSmrg ;; 70002be438aSmrg *) 70102be438aSmrg set fnord "$@" "$arg" 70202be438aSmrg shift # fnord 70302be438aSmrg shift # $arg 70402be438aSmrg ;; 70502be438aSmrg esac 70602be438aSmrg done 70702be438aSmrg 708e2463426Smrg "$@" -E \ 709e2463426Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710e2463426Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711e2463426Smrg | sed '$ s: \\$::' > "$tmpdepfile" 71202be438aSmrg rm -f "$depfile" 71302be438aSmrg echo "$object : \\" > "$depfile" 71402be438aSmrg cat < "$tmpdepfile" >> "$depfile" 71502be438aSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 71602be438aSmrg rm -f "$tmpdepfile" 71702be438aSmrg ;; 71802be438aSmrg 71902be438aSmrgmsvisualcpp) 72002be438aSmrg # Important note: in order to support this mode, a compiler *must* 72161dc2d86Smrg # always write the preprocessed file to stdout. 72202be438aSmrg "$@" || exit $? 72361dc2d86Smrg 72461dc2d86Smrg # Remove the call to Libtool. 72561dc2d86Smrg if test "$libtool" = yes; then 72661dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 72761dc2d86Smrg shift 72861dc2d86Smrg done 72961dc2d86Smrg shift 73061dc2d86Smrg fi 73161dc2d86Smrg 73202be438aSmrg IFS=" " 73302be438aSmrg for arg 73402be438aSmrg do 73502be438aSmrg case "$arg" in 73661dc2d86Smrg -o) 73761dc2d86Smrg shift 73861dc2d86Smrg ;; 73961dc2d86Smrg $object) 74061dc2d86Smrg shift 74161dc2d86Smrg ;; 74202be438aSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743e2463426Smrg set fnord "$@" 744e2463426Smrg shift 745e2463426Smrg shift 746e2463426Smrg ;; 74702be438aSmrg *) 748e2463426Smrg set fnord "$@" "$arg" 749e2463426Smrg shift 750e2463426Smrg shift 751e2463426Smrg ;; 75202be438aSmrg esac 75302be438aSmrg done 75461dc2d86Smrg "$@" -E 2>/dev/null | 75561dc2d86Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 75602be438aSmrg rm -f "$depfile" 75702be438aSmrg echo "$object : \\" > "$depfile" 758e2463426Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 759e2463426Smrg echo "$tab" >> "$depfile" 76061dc2d86Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 76102be438aSmrg rm -f "$tmpdepfile" 76202be438aSmrg ;; 76302be438aSmrg 76461dc2d86Smrgmsvcmsys) 76561dc2d86Smrg # This case exists only to let depend.m4 do its work. It works by 76661dc2d86Smrg # looking at the text of this script. This case will never be run, 76761dc2d86Smrg # since it is checked for above. 76861dc2d86Smrg exit 1 76961dc2d86Smrg ;; 77061dc2d86Smrg 77102be438aSmrgnone) 77202be438aSmrg exec "$@" 77302be438aSmrg ;; 77402be438aSmrg 77502be438aSmrg*) 77602be438aSmrg echo "Unknown depmode $depmode" 1>&2 77702be438aSmrg exit 1 77802be438aSmrg ;; 77902be438aSmrgesac 78002be438aSmrg 78102be438aSmrgexit 0 78202be438aSmrg 78302be438aSmrg# Local Variables: 78402be438aSmrg# mode: shell-script 78502be438aSmrg# sh-indentation: 2 78602be438aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 78702be438aSmrg# time-stamp-start: "scriptversion=" 78802be438aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 78961dc2d86Smrg# time-stamp-time-zone: "UTC" 79061dc2d86Smrg# time-stamp-end: "; # UTC" 79102be438aSmrg# End: 792