depcomp revision 3e999d35
13da7aff1Smrg#! /bin/sh 23da7aff1Smrg# depcomp - compile a program generating dependencies as side-effects 3e531b1a7Smrg 43e999d35Smrgscriptversion=2013-05-30.07; # UTC 5e531b1a7Smrg 63e999d35Smrg# Copyright (C) 1999-2014 Free Software Foundation, Inc. 73da7aff1Smrg 83da7aff1Smrg# This program is free software; you can redistribute it and/or modify 93da7aff1Smrg# it under the terms of the GNU General Public License as published by 103da7aff1Smrg# the Free Software Foundation; either version 2, or (at your option) 113da7aff1Smrg# any later version. 123da7aff1Smrg 133da7aff1Smrg# This program is distributed in the hope that it will be useful, 143da7aff1Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 153da7aff1Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 163da7aff1Smrg# GNU General Public License for more details. 173da7aff1Smrg 183da7aff1Smrg# You should have received a copy of the GNU General Public License 19e531b1a7Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 203da7aff1Smrg 213da7aff1Smrg# As a special exception to the GNU General Public License, if you 223da7aff1Smrg# distribute this file as part of a program that contains a 233da7aff1Smrg# configuration script generated by Autoconf, you may include it under 243da7aff1Smrg# the same distribution terms that you use for the rest of that program. 253da7aff1Smrg 263da7aff1Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 273da7aff1Smrg 28e531b1a7Smrgcase $1 in 29e531b1a7Smrg '') 303e999d35Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 313e999d35Smrg exit 1; 323e999d35Smrg ;; 33e531b1a7Smrg -h | --h*) 34e531b1a7Smrg cat <<\EOF 35e531b1a7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36e531b1a7Smrg 37e531b1a7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 38e531b1a7Smrgas side-effects. 39e531b1a7Smrg 40e531b1a7SmrgEnvironment variables: 41e531b1a7Smrg depmode Dependency tracking mode. 423e999d35Smrg source Source file read by 'PROGRAMS ARGS'. 433e999d35Smrg object Object file output by 'PROGRAMS ARGS'. 44e531b1a7Smrg DEPDIR directory where to store dependencies. 45e531b1a7Smrg depfile Dependency file to output. 463e999d35Smrg tmpdepfile Temporary file to use when outputting dependencies. 47e531b1a7Smrg libtool Whether libtool is used (yes/no). 48e531b1a7Smrg 49e531b1a7SmrgReport bugs to <bug-automake@gnu.org>. 50e531b1a7SmrgEOF 51e531b1a7Smrg exit $? 52e531b1a7Smrg ;; 53e531b1a7Smrg -v | --v*) 54e531b1a7Smrg echo "depcomp $scriptversion" 55e531b1a7Smrg exit $? 56e531b1a7Smrg ;; 57e531b1a7Smrgesac 58e531b1a7Smrg 593e999d35Smrg# Get the directory component of the given path, and save it in the 603e999d35Smrg# global variables '$dir'. Note that this directory component will 613e999d35Smrg# be either empty or ending with a '/' character. This is deliberate. 623e999d35Smrgset_dir_from () 633e999d35Smrg{ 643e999d35Smrg case $1 in 653e999d35Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 663e999d35Smrg *) dir=;; 673e999d35Smrg esac 683e999d35Smrg} 693e999d35Smrg 703e999d35Smrg# Get the suffix-stripped basename of the given path, and save it the 713e999d35Smrg# global variable '$base'. 723e999d35Smrgset_base_from () 733e999d35Smrg{ 743e999d35Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 753e999d35Smrg} 763e999d35Smrg 773e999d35Smrg# If no dependency file was actually created by the compiler invocation, 783e999d35Smrg# we still have to create a dummy depfile, to avoid errors with the 793e999d35Smrg# Makefile "include basename.Plo" scheme. 803e999d35Smrgmake_dummy_depfile () 813e999d35Smrg{ 823e999d35Smrg echo "#dummy" > "$depfile" 833e999d35Smrg} 843e999d35Smrg 853e999d35Smrg# Factor out some common post-processing of the generated depfile. 863e999d35Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 873e999d35Smrgaix_post_process_depfile () 883e999d35Smrg{ 893e999d35Smrg # If the compiler actually managed to produce a dependency file, 903e999d35Smrg # post-process it. 913e999d35Smrg if test -f "$tmpdepfile"; then 923e999d35Smrg # Each line is of the form 'foo.o: dependency.h'. 933e999d35Smrg # Do two passes, one to just change these to 943e999d35Smrg # $object: dependency.h 953e999d35Smrg # and one to simply output 963e999d35Smrg # dependency.h: 973e999d35Smrg # which is needed to avoid the deleted-header problem. 983e999d35Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 993e999d35Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 1003e999d35Smrg } > "$depfile" 1013e999d35Smrg rm -f "$tmpdepfile" 1023e999d35Smrg else 1033e999d35Smrg make_dummy_depfile 1043e999d35Smrg fi 1053e999d35Smrg} 1063e999d35Smrg 1073e999d35Smrg# A tabulation character. 1083e999d35Smrgtab=' ' 1093e999d35Smrg# A newline character. 1103e999d35Smrgnl=' 1113e999d35Smrg' 1123e999d35Smrg# Character ranges might be problematic outside the C locale. 1133e999d35Smrg# These definitions help. 1143e999d35Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 1153e999d35Smrglower=abcdefghijklmnopqrstuvwxyz 1163e999d35Smrgdigits=0123456789 1173e999d35Smrgalpha=${upper}${lower} 1183e999d35Smrg 1193da7aff1Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 1203da7aff1Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 1213da7aff1Smrg exit 1 1223da7aff1Smrgfi 1233da7aff1Smrg 124e531b1a7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125e531b1a7Smrgdepfile=${depfile-`echo "$object" | 126e531b1a7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 1273da7aff1Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 1283da7aff1Smrg 1293da7aff1Smrgrm -f "$tmpdepfile" 1303da7aff1Smrg 1313e999d35Smrg# Avoid interferences from the environment. 1323e999d35Smrggccflag= dashmflag= 1333e999d35Smrg 1343da7aff1Smrg# Some modes work just like other modes, but use different flags. We 1353da7aff1Smrg# parameterize here, but still list the modes in the big case below, 1363da7aff1Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 1373da7aff1Smrg# here, because this file can only contain one case statement. 1383da7aff1Smrgif test "$depmode" = hp; then 1393da7aff1Smrg # HP compiler uses -M and no extra arg. 1403da7aff1Smrg gccflag=-M 1413da7aff1Smrg depmode=gcc 1423da7aff1Smrgfi 1433da7aff1Smrg 1443da7aff1Smrgif test "$depmode" = dashXmstdout; then 1453e999d35Smrg # This is just like dashmstdout with a different argument. 1463e999d35Smrg dashmflag=-xM 1473e999d35Smrg depmode=dashmstdout 1483da7aff1Smrgfi 1493da7aff1Smrg 150e531b1a7Smrgcygpath_u="cygpath -u -f -" 151e531b1a7Smrgif test "$depmode" = msvcmsys; then 1523e999d35Smrg # This is just like msvisualcpp but w/o cygpath translation. 1533e999d35Smrg # Just convert the backslash-escaped backslashes to single forward 1543e999d35Smrg # slashes to satisfy depend.m4 1553e999d35Smrg cygpath_u='sed s,\\\\,/,g' 1563e999d35Smrg depmode=msvisualcpp 1573e999d35Smrgfi 1583e999d35Smrg 1593e999d35Smrgif test "$depmode" = msvc7msys; then 1603e999d35Smrg # This is just like msvc7 but w/o cygpath translation. 1613e999d35Smrg # Just convert the backslash-escaped backslashes to single forward 1623e999d35Smrg # slashes to satisfy depend.m4 1633e999d35Smrg cygpath_u='sed s,\\\\,/,g' 1643e999d35Smrg depmode=msvc7 1653e999d35Smrgfi 1663e999d35Smrg 1673e999d35Smrgif test "$depmode" = xlc; then 1683e999d35Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 1693e999d35Smrg gccflag=-qmakedep=gcc,-MF 1703e999d35Smrg depmode=gcc 171e531b1a7Smrgfi 172e531b1a7Smrg 1733da7aff1Smrgcase "$depmode" in 1743da7aff1Smrggcc3) 1753da7aff1Smrg## gcc 3 implements dependency tracking that does exactly what 1763da7aff1Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1773da7aff1Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 178e531b1a7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 179e531b1a7Smrg## the command line argument order; so add the flags where they 180e531b1a7Smrg## appear in depend2.am. Note that the slowdown incurred here 181e531b1a7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 182e531b1a7Smrg for arg 183e531b1a7Smrg do 184e531b1a7Smrg case $arg in 185e531b1a7Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 186e531b1a7Smrg *) set fnord "$@" "$arg" ;; 187e531b1a7Smrg esac 188e531b1a7Smrg shift # fnord 189e531b1a7Smrg shift # $arg 190e531b1a7Smrg done 191e531b1a7Smrg "$@" 1923da7aff1Smrg stat=$? 1933e999d35Smrg if test $stat -ne 0; then 1943da7aff1Smrg rm -f "$tmpdepfile" 1953da7aff1Smrg exit $stat 1963da7aff1Smrg fi 1973da7aff1Smrg mv "$tmpdepfile" "$depfile" 1983da7aff1Smrg ;; 1993da7aff1Smrg 2003da7aff1Smrggcc) 2013e999d35Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 2023e999d35Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 2033e999d35Smrg## (see the conditional assignment to $gccflag above). 2043da7aff1Smrg## There are various ways to get dependency output from gcc. Here's 2053da7aff1Smrg## why we pick this rather obscure method: 2063da7aff1Smrg## - Don't want to use -MD because we'd like the dependencies to end 2073da7aff1Smrg## up in a subdir. Having to rename by hand is ugly. 2083da7aff1Smrg## (We might end up doing this anyway to support other compilers.) 2093da7aff1Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 2103e999d35Smrg## -MM, not -M (despite what the docs say). Also, it might not be 2113e999d35Smrg## supported by the other compilers which use the 'gcc' depmode. 2123da7aff1Smrg## - Using -M directly means running the compiler twice (even worse 2133da7aff1Smrg## than renaming). 2143da7aff1Smrg if test -z "$gccflag"; then 2153da7aff1Smrg gccflag=-MD, 2163da7aff1Smrg fi 2173da7aff1Smrg "$@" -Wp,"$gccflag$tmpdepfile" 2183da7aff1Smrg stat=$? 2193e999d35Smrg if test $stat -ne 0; then 2203da7aff1Smrg rm -f "$tmpdepfile" 2213da7aff1Smrg exit $stat 2223da7aff1Smrg fi 2233da7aff1Smrg rm -f "$depfile" 2243da7aff1Smrg echo "$object : \\" > "$depfile" 2253e999d35Smrg # The second -e expression handles DOS-style file names with drive 2263e999d35Smrg # letters. 2273da7aff1Smrg sed -e 's/^[^:]*: / /' \ 2283da7aff1Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 2293e999d35Smrg## This next piece of magic avoids the "deleted header file" problem. 2303da7aff1Smrg## The problem is that when a header file which appears in a .P file 2313da7aff1Smrg## is deleted, the dependency causes make to die (because there is 2323da7aff1Smrg## typically no way to rebuild the header). We avoid this by adding 2333da7aff1Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 2343da7aff1Smrg## this for us directly. 2353e999d35Smrg## Some versions of gcc put a space before the ':'. On the theory 2363da7aff1Smrg## that the space means something, we add a space to the output as 2373e999d35Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 2383e999d35Smrg## to the object. Take care to not repeat it in the output. 2393da7aff1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 2403da7aff1Smrg## correctly. Breaking it into two sed invocations is a workaround. 2413e999d35Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2423e999d35Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 2433e999d35Smrg | sed -e 's/$/ :/' >> "$depfile" 2443da7aff1Smrg rm -f "$tmpdepfile" 2453da7aff1Smrg ;; 2463da7aff1Smrg 2473da7aff1Smrghp) 2483da7aff1Smrg # This case exists only to let depend.m4 do its work. It works by 2493da7aff1Smrg # looking at the text of this script. This case will never be run, 2503da7aff1Smrg # since it is checked for above. 2513da7aff1Smrg exit 1 2523da7aff1Smrg ;; 2533da7aff1Smrg 2543da7aff1Smrgsgi) 2553da7aff1Smrg if test "$libtool" = yes; then 2563da7aff1Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 2573da7aff1Smrg else 2583da7aff1Smrg "$@" -MDupdate "$tmpdepfile" 2593da7aff1Smrg fi 2603da7aff1Smrg stat=$? 2613e999d35Smrg if test $stat -ne 0; then 2623da7aff1Smrg rm -f "$tmpdepfile" 2633da7aff1Smrg exit $stat 2643da7aff1Smrg fi 2653da7aff1Smrg rm -f "$depfile" 2663da7aff1Smrg 2673da7aff1Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2683da7aff1Smrg echo "$object : \\" > "$depfile" 2693da7aff1Smrg # Clip off the initial element (the dependent). Don't try to be 2703da7aff1Smrg # clever and replace this with sed code, as IRIX sed won't handle 2713da7aff1Smrg # lines with more than a fixed number of characters (4096 in 2723da7aff1Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2733e999d35Smrg # the IRIX cc adds comments like '#:fec' to the end of the 2743da7aff1Smrg # dependency line. 2753e999d35Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2763e999d35Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 2773e999d35Smrg | tr "$nl" ' ' >> "$depfile" 278e531b1a7Smrg echo >> "$depfile" 2793da7aff1Smrg # The second pass generates a dummy entry for each header file. 2803e999d35Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2813e999d35Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2823e999d35Smrg >> "$depfile" 2833da7aff1Smrg else 2843e999d35Smrg make_dummy_depfile 2853da7aff1Smrg fi 2863da7aff1Smrg rm -f "$tmpdepfile" 2873da7aff1Smrg ;; 2883da7aff1Smrg 2893e999d35Smrgxlc) 2903e999d35Smrg # This case exists only to let depend.m4 do its work. It works by 2913e999d35Smrg # looking at the text of this script. This case will never be run, 2923e999d35Smrg # since it is checked for above. 2933e999d35Smrg exit 1 2943e999d35Smrg ;; 2953e999d35Smrg 2963da7aff1Smrgaix) 2973da7aff1Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2983da7aff1Smrg # in a .u file. In older versions, this file always lives in the 2993e999d35Smrg # current directory. Also, the AIX compiler puts '$object:' at the 3003da7aff1Smrg # start of each line; $object doesn't have directory information. 3013da7aff1Smrg # Version 6 uses the directory in both cases. 3023e999d35Smrg set_dir_from "$object" 3033e999d35Smrg set_base_from "$object" 3043da7aff1Smrg if test "$libtool" = yes; then 305e531b1a7Smrg tmpdepfile1=$dir$base.u 306e531b1a7Smrg tmpdepfile2=$base.u 307e531b1a7Smrg tmpdepfile3=$dir.libs/$base.u 3083da7aff1Smrg "$@" -Wc,-M 3093da7aff1Smrg else 310e531b1a7Smrg tmpdepfile1=$dir$base.u 311e531b1a7Smrg tmpdepfile2=$dir$base.u 312e531b1a7Smrg tmpdepfile3=$dir$base.u 3133da7aff1Smrg "$@" -M 3143da7aff1Smrg fi 3153da7aff1Smrg stat=$? 3163e999d35Smrg if test $stat -ne 0; then 317e531b1a7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3183da7aff1Smrg exit $stat 3193da7aff1Smrg fi 3203da7aff1Smrg 321e531b1a7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 322e531b1a7Smrg do 323e531b1a7Smrg test -f "$tmpdepfile" && break 324e531b1a7Smrg done 3253e999d35Smrg aix_post_process_depfile 3263e999d35Smrg ;; 3273e999d35Smrg 3283e999d35Smrgtcc) 3293e999d35Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 3303e999d35Smrg # FIXME: That version still under development at the moment of writing. 3313e999d35Smrg # Make that this statement remains true also for stable, released 3323e999d35Smrg # versions. 3333e999d35Smrg # It will wrap lines (doesn't matter whether long or short) with a 3343e999d35Smrg # trailing '\', as in: 3353e999d35Smrg # 3363e999d35Smrg # foo.o : \ 3373e999d35Smrg # foo.c \ 3383e999d35Smrg # foo.h \ 3393e999d35Smrg # 3403e999d35Smrg # It will put a trailing '\' even on the last line, and will use leading 3413e999d35Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 3423e999d35Smrg # "Emit spaces for -MD"). 3433e999d35Smrg "$@" -MD -MF "$tmpdepfile" 3443e999d35Smrg stat=$? 3453e999d35Smrg if test $stat -ne 0; then 3463e999d35Smrg rm -f "$tmpdepfile" 3473e999d35Smrg exit $stat 3483da7aff1Smrg fi 3493e999d35Smrg rm -f "$depfile" 3503e999d35Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 3513e999d35Smrg # We have to change lines of the first kind to '$object: \'. 3523e999d35Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 3533e999d35Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 3543e999d35Smrg # dummy dependency, to avoid the deleted-header problem. 3553e999d35Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 3563da7aff1Smrg rm -f "$tmpdepfile" 3573da7aff1Smrg ;; 3583da7aff1Smrg 3593e999d35Smrg## The order of this option in the case statement is important, since the 3603e999d35Smrg## shell code in configure will try each of these formats in the order 3613e999d35Smrg## listed in this file. A plain '-MD' option would be understood by many 3623e999d35Smrg## compilers, so we must ensure this comes after the gcc and icc options. 3633e999d35Smrgpgcc) 3643e999d35Smrg # Portland's C compiler understands '-MD'. 3653e999d35Smrg # Will always output deps to 'file.d' where file is the root name of the 3663e999d35Smrg # source file under compilation, even if file resides in a subdirectory. 3673e999d35Smrg # The object file name does not affect the name of the '.d' file. 3683e999d35Smrg # pgcc 10.2 will output 3693da7aff1Smrg # foo.o: sub/foo.c sub/foo.h 3703e999d35Smrg # and will wrap long lines using '\' : 3713da7aff1Smrg # foo.o: sub/foo.c ... \ 3723da7aff1Smrg # sub/foo.h ... \ 3733da7aff1Smrg # ... 3743e999d35Smrg set_dir_from "$object" 3753e999d35Smrg # Use the source, not the object, to determine the base name, since 3763e999d35Smrg # that's sadly what pgcc will do too. 3773e999d35Smrg set_base_from "$source" 3783e999d35Smrg tmpdepfile=$base.d 3793e999d35Smrg 3803e999d35Smrg # For projects that build the same source file twice into different object 3813e999d35Smrg # files, the pgcc approach of using the *source* file root name can cause 3823e999d35Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 3833e999d35Smrg # the same $tmpdepfile. 3843e999d35Smrg lockdir=$base.d-lock 3853e999d35Smrg trap " 3863e999d35Smrg echo '$0: caught signal, cleaning up...' >&2 3873e999d35Smrg rmdir '$lockdir' 3883e999d35Smrg exit 1 3893e999d35Smrg " 1 2 13 15 3903e999d35Smrg numtries=100 3913e999d35Smrg i=$numtries 3923e999d35Smrg while test $i -gt 0; do 3933e999d35Smrg # mkdir is a portable test-and-set. 3943e999d35Smrg if mkdir "$lockdir" 2>/dev/null; then 3953e999d35Smrg # This process acquired the lock. 3963e999d35Smrg "$@" -MD 3973e999d35Smrg stat=$? 3983e999d35Smrg # Release the lock. 3993e999d35Smrg rmdir "$lockdir" 4003e999d35Smrg break 4013e999d35Smrg else 4023e999d35Smrg # If the lock is being held by a different process, wait 4033e999d35Smrg # until the winning process is done or we timeout. 4043e999d35Smrg while test -d "$lockdir" && test $i -gt 0; do 4053e999d35Smrg sleep 1 4063e999d35Smrg i=`expr $i - 1` 4073e999d35Smrg done 4083e999d35Smrg fi 4093e999d35Smrg i=`expr $i - 1` 4103e999d35Smrg done 4113e999d35Smrg trap - 1 2 13 15 4123e999d35Smrg if test $i -le 0; then 4133e999d35Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 4143e999d35Smrg echo "$0: check lockdir '$lockdir'" >&2 4153e999d35Smrg exit 1 4163e999d35Smrg fi 4173da7aff1Smrg 4183e999d35Smrg if test $stat -ne 0; then 4193da7aff1Smrg rm -f "$tmpdepfile" 4203da7aff1Smrg exit $stat 4213da7aff1Smrg fi 4223da7aff1Smrg rm -f "$depfile" 4233da7aff1Smrg # Each line is of the form `foo.o: dependent.h', 4243da7aff1Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 4253da7aff1Smrg # Do two passes, one to just change these to 4263da7aff1Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 4273da7aff1Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 4283da7aff1Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 4293da7aff1Smrg # correctly. Breaking it into two sed invocations is a workaround. 4303e999d35Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 4313e999d35Smrg | sed -e 's/$/ :/' >> "$depfile" 4323da7aff1Smrg rm -f "$tmpdepfile" 4333da7aff1Smrg ;; 4343da7aff1Smrg 435e531b1a7Smrghp2) 436e531b1a7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 437e531b1a7Smrg # compilers, which have integrated preprocessors. The correct option 438e531b1a7Smrg # to use with these is +Maked; it writes dependencies to a file named 439e531b1a7Smrg # 'foo.d', which lands next to the object file, wherever that 440e531b1a7Smrg # happens to be. 441e531b1a7Smrg # Much of this is similar to the tru64 case; see comments there. 4423e999d35Smrg set_dir_from "$object" 4433e999d35Smrg set_base_from "$object" 444e531b1a7Smrg if test "$libtool" = yes; then 445e531b1a7Smrg tmpdepfile1=$dir$base.d 446e531b1a7Smrg tmpdepfile2=$dir.libs/$base.d 447e531b1a7Smrg "$@" -Wc,+Maked 448e531b1a7Smrg else 449e531b1a7Smrg tmpdepfile1=$dir$base.d 450e531b1a7Smrg tmpdepfile2=$dir$base.d 451e531b1a7Smrg "$@" +Maked 452e531b1a7Smrg fi 453e531b1a7Smrg stat=$? 4543e999d35Smrg if test $stat -ne 0; then 455e531b1a7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 456e531b1a7Smrg exit $stat 457e531b1a7Smrg fi 458e531b1a7Smrg 459e531b1a7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 460e531b1a7Smrg do 461e531b1a7Smrg test -f "$tmpdepfile" && break 462e531b1a7Smrg done 463e531b1a7Smrg if test -f "$tmpdepfile"; then 4643e999d35Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 4653e999d35Smrg # Add 'dependent.h:' lines. 466e531b1a7Smrg sed -ne '2,${ 4673e999d35Smrg s/^ *// 4683e999d35Smrg s/ \\*$// 4693e999d35Smrg s/$/:/ 4703e999d35Smrg p 4713e999d35Smrg }' "$tmpdepfile" >> "$depfile" 472e531b1a7Smrg else 4733e999d35Smrg make_dummy_depfile 474e531b1a7Smrg fi 475e531b1a7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 476e531b1a7Smrg ;; 477e531b1a7Smrg 4783da7aff1Smrgtru64) 4793e999d35Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 4803e999d35Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 4813e999d35Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 4823e999d35Smrg # dependencies in 'foo.d' instead, so we check for that too. 4833e999d35Smrg # Subdirectories are respected. 4843e999d35Smrg set_dir_from "$object" 4853e999d35Smrg set_base_from "$object" 4863e999d35Smrg 4873e999d35Smrg if test "$libtool" = yes; then 4883e999d35Smrg # Libtool generates 2 separate objects for the 2 libraries. These 4893e999d35Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 4903e999d35Smrg # in $dir$base.o.d. We have to check for both files, because 4913e999d35Smrg # one of the two compilations can be disabled. We should prefer 4923e999d35Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4933e999d35Smrg # automatically cleaned when .libs/ is deleted, while ignoring 4943e999d35Smrg # the former would cause a distcleancheck panic. 4953e999d35Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 4963e999d35Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 4973e999d35Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 4983e999d35Smrg "$@" -Wc,-MD 4993e999d35Smrg else 5003e999d35Smrg tmpdepfile1=$dir$base.d 5013e999d35Smrg tmpdepfile2=$dir$base.d 5023e999d35Smrg tmpdepfile3=$dir$base.d 5033e999d35Smrg "$@" -MD 5043e999d35Smrg fi 5053e999d35Smrg 5063e999d35Smrg stat=$? 5073e999d35Smrg if test $stat -ne 0; then 5083e999d35Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5093e999d35Smrg exit $stat 5103e999d35Smrg fi 5113e999d35Smrg 5123e999d35Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5133e999d35Smrg do 5143e999d35Smrg test -f "$tmpdepfile" && break 5153e999d35Smrg done 5163e999d35Smrg # Same post-processing that is required for AIX mode. 5173e999d35Smrg aix_post_process_depfile 5183e999d35Smrg ;; 5193e999d35Smrg 5203e999d35Smrgmsvc7) 5213e999d35Smrg if test "$libtool" = yes; then 5223e999d35Smrg showIncludes=-Wc,-showIncludes 5233e999d35Smrg else 5243e999d35Smrg showIncludes=-showIncludes 5253e999d35Smrg fi 5263e999d35Smrg "$@" $showIncludes > "$tmpdepfile" 5273e999d35Smrg stat=$? 5283e999d35Smrg grep -v '^Note: including file: ' "$tmpdepfile" 5293e999d35Smrg if test $stat -ne 0; then 5303e999d35Smrg rm -f "$tmpdepfile" 5313e999d35Smrg exit $stat 5323e999d35Smrg fi 5333e999d35Smrg rm -f "$depfile" 5343e999d35Smrg echo "$object : \\" > "$depfile" 5353e999d35Smrg # The first sed program below extracts the file names and escapes 5363e999d35Smrg # backslashes for cygpath. The second sed program outputs the file 5373e999d35Smrg # name when reading, but also accumulates all include files in the 5383e999d35Smrg # hold buffer in order to output them again at the end. This only 5393e999d35Smrg # works with sed implementations that can handle large buffers. 5403e999d35Smrg sed < "$tmpdepfile" -n ' 5413e999d35Smrg/^Note: including file: *\(.*\)/ { 5423e999d35Smrg s//\1/ 5433e999d35Smrg s/\\/\\\\/g 5443e999d35Smrg p 5453e999d35Smrg}' | $cygpath_u | sort -u | sed -n ' 5463e999d35Smrgs/ /\\ /g 5473e999d35Smrgs/\(.*\)/'"$tab"'\1 \\/p 5483e999d35Smrgs/.\(.*\) \\/\1:/ 5493e999d35SmrgH 5503e999d35Smrg$ { 5513e999d35Smrg s/.*/'"$tab"'/ 5523e999d35Smrg G 5533e999d35Smrg p 5543e999d35Smrg}' >> "$depfile" 5553e999d35Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 5563e999d35Smrg rm -f "$tmpdepfile" 5573e999d35Smrg ;; 5583e999d35Smrg 5593e999d35Smrgmsvc7msys) 5603e999d35Smrg # This case exists only to let depend.m4 do its work. It works by 5613e999d35Smrg # looking at the text of this script. This case will never be run, 5623e999d35Smrg # since it is checked for above. 5633e999d35Smrg exit 1 5643e999d35Smrg ;; 5653da7aff1Smrg 5663da7aff1Smrg#nosideeffect) 5673da7aff1Smrg # This comment above is used by automake to tell side-effect 5683da7aff1Smrg # dependency tracking mechanisms from slower ones. 5693da7aff1Smrg 5703da7aff1Smrgdashmstdout) 5713da7aff1Smrg # Important note: in order to support this mode, a compiler *must* 5723da7aff1Smrg # always write the preprocessed file to stdout, regardless of -o. 5733da7aff1Smrg "$@" || exit $? 5743da7aff1Smrg 5753da7aff1Smrg # Remove the call to Libtool. 5763da7aff1Smrg if test "$libtool" = yes; then 577e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 5783da7aff1Smrg shift 5793da7aff1Smrg done 5803da7aff1Smrg shift 5813da7aff1Smrg fi 5823da7aff1Smrg 5833e999d35Smrg # Remove '-o $object'. 5843da7aff1Smrg IFS=" " 5853da7aff1Smrg for arg 5863da7aff1Smrg do 5873da7aff1Smrg case $arg in 5883da7aff1Smrg -o) 5893da7aff1Smrg shift 5903da7aff1Smrg ;; 5913da7aff1Smrg $object) 5923da7aff1Smrg shift 5933da7aff1Smrg ;; 5943da7aff1Smrg *) 5953da7aff1Smrg set fnord "$@" "$arg" 5963da7aff1Smrg shift # fnord 5973da7aff1Smrg shift # $arg 5983da7aff1Smrg ;; 5993da7aff1Smrg esac 6003da7aff1Smrg done 6013da7aff1Smrg 6023da7aff1Smrg test -z "$dashmflag" && dashmflag=-M 6033e999d35Smrg # Require at least two characters before searching for ':' 6043da7aff1Smrg # in the target name. This is to cope with DOS-style filenames: 6053e999d35Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 6063da7aff1Smrg "$@" $dashmflag | 6073e999d35Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 6083da7aff1Smrg rm -f "$depfile" 6093da7aff1Smrg cat < "$tmpdepfile" > "$depfile" 6103e999d35Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 6113e999d35Smrg # correctly. Breaking it into two sed invocations is a workaround. 6123e999d35Smrg tr ' ' "$nl" < "$tmpdepfile" \ 6133e999d35Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6143e999d35Smrg | sed -e 's/$/ :/' >> "$depfile" 6153da7aff1Smrg rm -f "$tmpdepfile" 6163da7aff1Smrg ;; 6173da7aff1Smrg 6183da7aff1SmrgdashXmstdout) 6193da7aff1Smrg # This case only exists to satisfy depend.m4. It is never actually 6203da7aff1Smrg # run, as this mode is specially recognized in the preamble. 6213da7aff1Smrg exit 1 6223da7aff1Smrg ;; 6233da7aff1Smrg 6243da7aff1Smrgmakedepend) 6253da7aff1Smrg "$@" || exit $? 6263da7aff1Smrg # Remove any Libtool call 6273da7aff1Smrg if test "$libtool" = yes; then 628e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 6293da7aff1Smrg shift 6303da7aff1Smrg done 6313da7aff1Smrg shift 6323da7aff1Smrg fi 6333da7aff1Smrg # X makedepend 6343da7aff1Smrg shift 635e531b1a7Smrg cleared=no eat=no 636e531b1a7Smrg for arg 637e531b1a7Smrg do 6383da7aff1Smrg case $cleared in 6393da7aff1Smrg no) 6403da7aff1Smrg set ""; shift 6413da7aff1Smrg cleared=yes ;; 6423da7aff1Smrg esac 643e531b1a7Smrg if test $eat = yes; then 644e531b1a7Smrg eat=no 645e531b1a7Smrg continue 646e531b1a7Smrg fi 6473da7aff1Smrg case "$arg" in 6483da7aff1Smrg -D*|-I*) 6493da7aff1Smrg set fnord "$@" "$arg"; shift ;; 6503da7aff1Smrg # Strip any option that makedepend may not understand. Remove 6513da7aff1Smrg # the object too, otherwise makedepend will parse it as a source file. 652e531b1a7Smrg -arch) 653e531b1a7Smrg eat=yes ;; 6543da7aff1Smrg -*|$object) 6553da7aff1Smrg ;; 6563da7aff1Smrg *) 6573da7aff1Smrg set fnord "$@" "$arg"; shift ;; 6583da7aff1Smrg esac 6593da7aff1Smrg done 660e531b1a7Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 6613da7aff1Smrg touch "$tmpdepfile" 6623da7aff1Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 6633da7aff1Smrg rm -f "$depfile" 6643e999d35Smrg # makedepend may prepend the VPATH from the source file name to the object. 6653e999d35Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 6663e999d35Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 6673e999d35Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 6683e999d35Smrg # correctly. Breaking it into two sed invocations is a workaround. 6693e999d35Smrg sed '1,2d' "$tmpdepfile" \ 6703e999d35Smrg | tr ' ' "$nl" \ 6713e999d35Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6723e999d35Smrg | sed -e 's/$/ :/' >> "$depfile" 6733da7aff1Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 6743da7aff1Smrg ;; 6753da7aff1Smrg 6763da7aff1Smrgcpp) 6773da7aff1Smrg # Important note: in order to support this mode, a compiler *must* 6783da7aff1Smrg # always write the preprocessed file to stdout. 6793da7aff1Smrg "$@" || exit $? 6803da7aff1Smrg 6813da7aff1Smrg # Remove the call to Libtool. 6823da7aff1Smrg if test "$libtool" = yes; then 683e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 6843da7aff1Smrg shift 6853da7aff1Smrg done 6863da7aff1Smrg shift 6873da7aff1Smrg fi 6883da7aff1Smrg 6893e999d35Smrg # Remove '-o $object'. 6903da7aff1Smrg IFS=" " 6913da7aff1Smrg for arg 6923da7aff1Smrg do 6933da7aff1Smrg case $arg in 6943da7aff1Smrg -o) 6953da7aff1Smrg shift 6963da7aff1Smrg ;; 6973da7aff1Smrg $object) 6983da7aff1Smrg shift 6993da7aff1Smrg ;; 7003da7aff1Smrg *) 7013da7aff1Smrg set fnord "$@" "$arg" 7023da7aff1Smrg shift # fnord 7033da7aff1Smrg shift # $arg 7043da7aff1Smrg ;; 7053da7aff1Smrg esac 7063da7aff1Smrg done 7073da7aff1Smrg 7083e999d35Smrg "$@" -E \ 7093e999d35Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7103e999d35Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7113e999d35Smrg | sed '$ s: \\$::' > "$tmpdepfile" 7123da7aff1Smrg rm -f "$depfile" 7133da7aff1Smrg echo "$object : \\" > "$depfile" 7143da7aff1Smrg cat < "$tmpdepfile" >> "$depfile" 7153da7aff1Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 7163da7aff1Smrg rm -f "$tmpdepfile" 7173da7aff1Smrg ;; 7183da7aff1Smrg 7193da7aff1Smrgmsvisualcpp) 7203da7aff1Smrg # Important note: in order to support this mode, a compiler *must* 721e531b1a7Smrg # always write the preprocessed file to stdout. 7223da7aff1Smrg "$@" || exit $? 723e531b1a7Smrg 724e531b1a7Smrg # Remove the call to Libtool. 725e531b1a7Smrg if test "$libtool" = yes; then 726e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 727e531b1a7Smrg shift 728e531b1a7Smrg done 729e531b1a7Smrg shift 730e531b1a7Smrg fi 731e531b1a7Smrg 7323da7aff1Smrg IFS=" " 7333da7aff1Smrg for arg 7343da7aff1Smrg do 7353da7aff1Smrg case "$arg" in 736e531b1a7Smrg -o) 737e531b1a7Smrg shift 738e531b1a7Smrg ;; 739e531b1a7Smrg $object) 740e531b1a7Smrg shift 741e531b1a7Smrg ;; 7423da7aff1Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 7433e999d35Smrg set fnord "$@" 7443e999d35Smrg shift 7453e999d35Smrg shift 7463e999d35Smrg ;; 7473da7aff1Smrg *) 7483e999d35Smrg set fnord "$@" "$arg" 7493e999d35Smrg shift 7503e999d35Smrg shift 7513e999d35Smrg ;; 7523da7aff1Smrg esac 7533da7aff1Smrg done 754e531b1a7Smrg "$@" -E 2>/dev/null | 755e531b1a7Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 7563da7aff1Smrg rm -f "$depfile" 7573da7aff1Smrg echo "$object : \\" > "$depfile" 7583e999d35Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 7593e999d35Smrg echo "$tab" >> "$depfile" 760e531b1a7Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 7613da7aff1Smrg rm -f "$tmpdepfile" 7623da7aff1Smrg ;; 7633da7aff1Smrg 764e531b1a7Smrgmsvcmsys) 765e531b1a7Smrg # This case exists only to let depend.m4 do its work. It works by 766e531b1a7Smrg # looking at the text of this script. This case will never be run, 767e531b1a7Smrg # since it is checked for above. 768e531b1a7Smrg exit 1 769e531b1a7Smrg ;; 770e531b1a7Smrg 7713da7aff1Smrgnone) 7723da7aff1Smrg exec "$@" 7733da7aff1Smrg ;; 7743da7aff1Smrg 7753da7aff1Smrg*) 7763da7aff1Smrg echo "Unknown depmode $depmode" 1>&2 7773da7aff1Smrg exit 1 7783da7aff1Smrg ;; 7793da7aff1Smrgesac 7803da7aff1Smrg 7813da7aff1Smrgexit 0 782e531b1a7Smrg 783e531b1a7Smrg# Local Variables: 784e531b1a7Smrg# mode: shell-script 785e531b1a7Smrg# sh-indentation: 2 786e531b1a7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 787e531b1a7Smrg# time-stamp-start: "scriptversion=" 788e531b1a7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 789e531b1a7Smrg# time-stamp-time-zone: "UTC" 790e531b1a7Smrg# time-stamp-end: "; # UTC" 791e531b1a7Smrg# End: 792