depcomp revision 3e6c936a
14456fccdSmrg#! /bin/sh 24456fccdSmrg# depcomp - compile a program generating dependencies as side-effects 34456fccdSmrg 43e6c936aSmrgscriptversion=2012-10-18.11; # UTC 54456fccdSmrg 63e6c936aSmrg# Copyright (C) 1999-2013 Free Software Foundation, Inc. 74456fccdSmrg 84456fccdSmrg# This program is free software; you can redistribute it and/or modify 94456fccdSmrg# it under the terms of the GNU General Public License as published by 104456fccdSmrg# the Free Software Foundation; either version 2, or (at your option) 114456fccdSmrg# any later version. 124456fccdSmrg 134456fccdSmrg# This program is distributed in the hope that it will be useful, 144456fccdSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 154456fccdSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 164456fccdSmrg# GNU General Public License for more details. 174456fccdSmrg 184456fccdSmrg# You should have received a copy of the GNU General Public License 1942d69509Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 204456fccdSmrg 214456fccdSmrg# As a special exception to the GNU General Public License, if you 224456fccdSmrg# distribute this file as part of a program that contains a 234456fccdSmrg# configuration script generated by Autoconf, you may include it under 244456fccdSmrg# the same distribution terms that you use for the rest of that program. 254456fccdSmrg 264456fccdSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 274456fccdSmrg 284456fccdSmrgcase $1 in 294456fccdSmrg '') 303e6c936aSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 313e6c936aSmrg exit 1; 323e6c936aSmrg ;; 334456fccdSmrg -h | --h*) 344456fccdSmrg cat <<\EOF 354456fccdSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 364456fccdSmrg 374456fccdSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 384456fccdSmrgas side-effects. 394456fccdSmrg 404456fccdSmrgEnvironment variables: 414456fccdSmrg depmode Dependency tracking mode. 423e6c936aSmrg source Source file read by 'PROGRAMS ARGS'. 433e6c936aSmrg object Object file output by 'PROGRAMS ARGS'. 444456fccdSmrg DEPDIR directory where to store dependencies. 454456fccdSmrg depfile Dependency file to output. 463e6c936aSmrg tmpdepfile Temporary file to use when outputting dependencies. 474456fccdSmrg libtool Whether libtool is used (yes/no). 484456fccdSmrg 494456fccdSmrgReport bugs to <bug-automake@gnu.org>. 504456fccdSmrgEOF 514456fccdSmrg exit $? 524456fccdSmrg ;; 534456fccdSmrg -v | --v*) 544456fccdSmrg echo "depcomp $scriptversion" 554456fccdSmrg exit $? 564456fccdSmrg ;; 574456fccdSmrgesac 584456fccdSmrg 593e6c936aSmrg# Get the directory component of the given path, and save it in the 603e6c936aSmrg# global variables '$dir'. Note that this directory component will 613e6c936aSmrg# be either empty or ending with a '/' character. This is deliberate. 623e6c936aSmrgset_dir_from () 633e6c936aSmrg{ 643e6c936aSmrg case $1 in 653e6c936aSmrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 663e6c936aSmrg *) dir=;; 673e6c936aSmrg esac 683e6c936aSmrg} 693e6c936aSmrg 703e6c936aSmrg# Get the suffix-stripped basename of the given path, and save it the 713e6c936aSmrg# global variable '$base'. 723e6c936aSmrgset_base_from () 733e6c936aSmrg{ 743e6c936aSmrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 753e6c936aSmrg} 763e6c936aSmrg 773e6c936aSmrg# If no dependency file was actually created by the compiler invocation, 783e6c936aSmrg# we still have to create a dummy depfile, to avoid errors with the 793e6c936aSmrg# Makefile "include basename.Plo" scheme. 803e6c936aSmrgmake_dummy_depfile () 813e6c936aSmrg{ 823e6c936aSmrg echo "#dummy" > "$depfile" 833e6c936aSmrg} 843e6c936aSmrg 853e6c936aSmrg# Factor out some common post-processing of the generated depfile. 863e6c936aSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 873e6c936aSmrgaix_post_process_depfile () 883e6c936aSmrg{ 893e6c936aSmrg # If the compiler actually managed to produce a dependency file, 903e6c936aSmrg # post-process it. 913e6c936aSmrg if test -f "$tmpdepfile"; then 923e6c936aSmrg # Each line is of the form 'foo.o: dependency.h'. 933e6c936aSmrg # Do two passes, one to just change these to 943e6c936aSmrg # $object: dependency.h 953e6c936aSmrg # and one to simply output 963e6c936aSmrg # dependency.h: 973e6c936aSmrg # which is needed to avoid the deleted-header problem. 983e6c936aSmrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 993e6c936aSmrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 1003e6c936aSmrg } > "$depfile" 1013e6c936aSmrg rm -f "$tmpdepfile" 1023e6c936aSmrg else 1033e6c936aSmrg make_dummy_depfile 1043e6c936aSmrg fi 1053e6c936aSmrg} 1063e6c936aSmrg 1073e6c936aSmrg# A tabulation character. 1083e6c936aSmrgtab=' ' 1093e6c936aSmrg# A newline character. 1103e6c936aSmrgnl=' 1113e6c936aSmrg' 1123e6c936aSmrg# Character ranges might be problematic outside the C locale. 1133e6c936aSmrg# These definitions help. 1143e6c936aSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 1153e6c936aSmrglower=abcdefghijklmnopqrstuvwxyz 1163e6c936aSmrgdigits=0123456789 1173e6c936aSmrgalpha=${upper}${lower} 1183e6c936aSmrg 1194456fccdSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 1204456fccdSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 1214456fccdSmrg exit 1 1224456fccdSmrgfi 1234456fccdSmrg 1244456fccdSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 1254456fccdSmrgdepfile=${depfile-`echo "$object" | 1264456fccdSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 1274456fccdSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 1284456fccdSmrg 1294456fccdSmrgrm -f "$tmpdepfile" 1304456fccdSmrg 1313e6c936aSmrg# Avoid interferences from the environment. 1323e6c936aSmrggccflag= dashmflag= 1333e6c936aSmrg 1344456fccdSmrg# Some modes work just like other modes, but use different flags. We 1354456fccdSmrg# parameterize here, but still list the modes in the big case below, 1364456fccdSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 1374456fccdSmrg# here, because this file can only contain one case statement. 1384456fccdSmrgif test "$depmode" = hp; then 1394456fccdSmrg # HP compiler uses -M and no extra arg. 1404456fccdSmrg gccflag=-M 1414456fccdSmrg depmode=gcc 1424456fccdSmrgfi 1434456fccdSmrg 1444456fccdSmrgif test "$depmode" = dashXmstdout; then 1453e6c936aSmrg # This is just like dashmstdout with a different argument. 1463e6c936aSmrg dashmflag=-xM 1473e6c936aSmrg depmode=dashmstdout 1484456fccdSmrgfi 1494456fccdSmrg 15042d69509Smrgcygpath_u="cygpath -u -f -" 15142d69509Smrgif test "$depmode" = msvcmsys; then 1523e6c936aSmrg # This is just like msvisualcpp but w/o cygpath translation. 1533e6c936aSmrg # Just convert the backslash-escaped backslashes to single forward 1543e6c936aSmrg # slashes to satisfy depend.m4 1553e6c936aSmrg cygpath_u='sed s,\\\\,/,g' 1563e6c936aSmrg depmode=msvisualcpp 1573e6c936aSmrgfi 1583e6c936aSmrg 1593e6c936aSmrgif test "$depmode" = msvc7msys; then 1603e6c936aSmrg # This is just like msvc7 but w/o cygpath translation. 1613e6c936aSmrg # Just convert the backslash-escaped backslashes to single forward 1623e6c936aSmrg # slashes to satisfy depend.m4 1633e6c936aSmrg cygpath_u='sed s,\\\\,/,g' 1643e6c936aSmrg depmode=msvc7 1653e6c936aSmrgfi 1663e6c936aSmrg 1673e6c936aSmrgif test "$depmode" = xlc; then 1683e6c936aSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 1693e6c936aSmrg gccflag=-qmakedep=gcc,-MF 1703e6c936aSmrg depmode=gcc 17142d69509Smrgfi 17242d69509Smrg 1734456fccdSmrgcase "$depmode" in 1744456fccdSmrggcc3) 1754456fccdSmrg## gcc 3 implements dependency tracking that does exactly what 1764456fccdSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1774456fccdSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 17842d69509Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 17942d69509Smrg## the command line argument order; so add the flags where they 18042d69509Smrg## appear in depend2.am. Note that the slowdown incurred here 18142d69509Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 18242d69509Smrg for arg 18342d69509Smrg do 18442d69509Smrg case $arg in 18542d69509Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 18642d69509Smrg *) set fnord "$@" "$arg" ;; 18742d69509Smrg esac 18842d69509Smrg shift # fnord 18942d69509Smrg shift # $arg 19042d69509Smrg done 19142d69509Smrg "$@" 1924456fccdSmrg stat=$? 1933e6c936aSmrg if test $stat -ne 0; then 1944456fccdSmrg rm -f "$tmpdepfile" 1954456fccdSmrg exit $stat 1964456fccdSmrg fi 1974456fccdSmrg mv "$tmpdepfile" "$depfile" 1984456fccdSmrg ;; 1994456fccdSmrg 2004456fccdSmrggcc) 2013e6c936aSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 2023e6c936aSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 2033e6c936aSmrg## (see the conditional assignment to $gccflag above). 2044456fccdSmrg## There are various ways to get dependency output from gcc. Here's 2054456fccdSmrg## why we pick this rather obscure method: 2064456fccdSmrg## - Don't want to use -MD because we'd like the dependencies to end 2074456fccdSmrg## up in a subdir. Having to rename by hand is ugly. 2084456fccdSmrg## (We might end up doing this anyway to support other compilers.) 2094456fccdSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 2103e6c936aSmrg## -MM, not -M (despite what the docs say). Also, it might not be 2113e6c936aSmrg## supported by the other compilers which use the 'gcc' depmode. 2124456fccdSmrg## - Using -M directly means running the compiler twice (even worse 2134456fccdSmrg## than renaming). 2144456fccdSmrg if test -z "$gccflag"; then 2154456fccdSmrg gccflag=-MD, 2164456fccdSmrg fi 2174456fccdSmrg "$@" -Wp,"$gccflag$tmpdepfile" 2184456fccdSmrg stat=$? 2193e6c936aSmrg if test $stat -ne 0; then 2204456fccdSmrg rm -f "$tmpdepfile" 2214456fccdSmrg exit $stat 2224456fccdSmrg fi 2234456fccdSmrg rm -f "$depfile" 2244456fccdSmrg echo "$object : \\" > "$depfile" 2253e6c936aSmrg # The second -e expression handles DOS-style file names with drive 2263e6c936aSmrg # letters. 2274456fccdSmrg sed -e 's/^[^:]*: / /' \ 2284456fccdSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 2293e6c936aSmrg## This next piece of magic avoids the "deleted header file" problem. 2304456fccdSmrg## The problem is that when a header file which appears in a .P file 2314456fccdSmrg## is deleted, the dependency causes make to die (because there is 2324456fccdSmrg## typically no way to rebuild the header). We avoid this by adding 2334456fccdSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 2344456fccdSmrg## this for us directly. 2353e6c936aSmrg## Some versions of gcc put a space before the ':'. On the theory 2364456fccdSmrg## that the space means something, we add a space to the output as 2373e6c936aSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 2383e6c936aSmrg## to the object. Take care to not repeat it in the output. 2394456fccdSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 2404456fccdSmrg## correctly. Breaking it into two sed invocations is a workaround. 2413e6c936aSmrg tr ' ' "$nl" < "$tmpdepfile" \ 2423e6c936aSmrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 2433e6c936aSmrg | sed -e 's/$/ :/' >> "$depfile" 2444456fccdSmrg rm -f "$tmpdepfile" 2454456fccdSmrg ;; 2464456fccdSmrg 2474456fccdSmrghp) 2484456fccdSmrg # This case exists only to let depend.m4 do its work. It works by 2494456fccdSmrg # looking at the text of this script. This case will never be run, 2504456fccdSmrg # since it is checked for above. 2514456fccdSmrg exit 1 2524456fccdSmrg ;; 2534456fccdSmrg 2544456fccdSmrgsgi) 2554456fccdSmrg if test "$libtool" = yes; then 2564456fccdSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 2574456fccdSmrg else 2584456fccdSmrg "$@" -MDupdate "$tmpdepfile" 2594456fccdSmrg fi 2604456fccdSmrg stat=$? 2613e6c936aSmrg if test $stat -ne 0; then 2624456fccdSmrg rm -f "$tmpdepfile" 2634456fccdSmrg exit $stat 2644456fccdSmrg fi 2654456fccdSmrg rm -f "$depfile" 2664456fccdSmrg 2674456fccdSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2684456fccdSmrg echo "$object : \\" > "$depfile" 2694456fccdSmrg # Clip off the initial element (the dependent). Don't try to be 2704456fccdSmrg # clever and replace this with sed code, as IRIX sed won't handle 2714456fccdSmrg # lines with more than a fixed number of characters (4096 in 2724456fccdSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2733e6c936aSmrg # the IRIX cc adds comments like '#:fec' to the end of the 2744456fccdSmrg # dependency line. 2753e6c936aSmrg tr ' ' "$nl" < "$tmpdepfile" \ 2763e6c936aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 2773e6c936aSmrg | tr "$nl" ' ' >> "$depfile" 27842d69509Smrg echo >> "$depfile" 2794456fccdSmrg # The second pass generates a dummy entry for each header file. 2803e6c936aSmrg tr ' ' "$nl" < "$tmpdepfile" \ 2813e6c936aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2823e6c936aSmrg >> "$depfile" 2834456fccdSmrg else 2843e6c936aSmrg make_dummy_depfile 2854456fccdSmrg fi 2864456fccdSmrg rm -f "$tmpdepfile" 2874456fccdSmrg ;; 2884456fccdSmrg 2893e6c936aSmrgxlc) 2903e6c936aSmrg # This case exists only to let depend.m4 do its work. It works by 2913e6c936aSmrg # looking at the text of this script. This case will never be run, 2923e6c936aSmrg # since it is checked for above. 2933e6c936aSmrg exit 1 2943e6c936aSmrg ;; 2953e6c936aSmrg 2964456fccdSmrgaix) 2974456fccdSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2984456fccdSmrg # in a .u file. In older versions, this file always lives in the 2993e6c936aSmrg # current directory. Also, the AIX compiler puts '$object:' at the 3004456fccdSmrg # start of each line; $object doesn't have directory information. 3014456fccdSmrg # Version 6 uses the directory in both cases. 3023e6c936aSmrg set_dir_from "$object" 3033e6c936aSmrg set_base_from "$object" 3044456fccdSmrg if test "$libtool" = yes; then 30542d69509Smrg tmpdepfile1=$dir$base.u 30642d69509Smrg tmpdepfile2=$base.u 30742d69509Smrg tmpdepfile3=$dir.libs/$base.u 3084456fccdSmrg "$@" -Wc,-M 3094456fccdSmrg else 31042d69509Smrg tmpdepfile1=$dir$base.u 31142d69509Smrg tmpdepfile2=$dir$base.u 31242d69509Smrg tmpdepfile3=$dir$base.u 3134456fccdSmrg "$@" -M 3144456fccdSmrg fi 3154456fccdSmrg stat=$? 3163e6c936aSmrg if test $stat -ne 0; then 31742d69509Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3184456fccdSmrg exit $stat 3194456fccdSmrg fi 3204456fccdSmrg 32142d69509Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 32242d69509Smrg do 32342d69509Smrg test -f "$tmpdepfile" && break 32442d69509Smrg done 3253e6c936aSmrg aix_post_process_depfile 3263e6c936aSmrg ;; 3273e6c936aSmrg 3283e6c936aSmrgtcc) 3293e6c936aSmrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 3303e6c936aSmrg # FIXME: That version still under development at the moment of writing. 3313e6c936aSmrg # Make that this statement remains true also for stable, released 3323e6c936aSmrg # versions. 3333e6c936aSmrg # It will wrap lines (doesn't matter whether long or short) with a 3343e6c936aSmrg # trailing '\', as in: 3353e6c936aSmrg # 3363e6c936aSmrg # foo.o : \ 3373e6c936aSmrg # foo.c \ 3383e6c936aSmrg # foo.h \ 3393e6c936aSmrg # 3403e6c936aSmrg # It will put a trailing '\' even on the last line, and will use leading 3413e6c936aSmrg # spaces rather than leading tabs (at least since its commit 0394caf7 3423e6c936aSmrg # "Emit spaces for -MD"). 3433e6c936aSmrg "$@" -MD -MF "$tmpdepfile" 3443e6c936aSmrg stat=$? 3453e6c936aSmrg if test $stat -ne 0; then 3463e6c936aSmrg rm -f "$tmpdepfile" 3473e6c936aSmrg exit $stat 3484456fccdSmrg fi 3493e6c936aSmrg rm -f "$depfile" 3503e6c936aSmrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 3513e6c936aSmrg # We have to change lines of the first kind to '$object: \'. 3523e6c936aSmrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 3533e6c936aSmrg # And for each line of the second kind, we have to emit a 'dep.h:' 3543e6c936aSmrg # dummy dependency, to avoid the deleted-header problem. 3553e6c936aSmrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 3564456fccdSmrg rm -f "$tmpdepfile" 3574456fccdSmrg ;; 3584456fccdSmrg 3593e6c936aSmrg## The order of this option in the case statement is important, since the 3603e6c936aSmrg## shell code in configure will try each of these formats in the order 3613e6c936aSmrg## listed in this file. A plain '-MD' option would be understood by many 3623e6c936aSmrg## compilers, so we must ensure this comes after the gcc and icc options. 3633e6c936aSmrgpgcc) 3643e6c936aSmrg # Portland's C compiler understands '-MD'. 3653e6c936aSmrg # Will always output deps to 'file.d' where file is the root name of the 3663e6c936aSmrg # source file under compilation, even if file resides in a subdirectory. 3673e6c936aSmrg # The object file name does not affect the name of the '.d' file. 3683e6c936aSmrg # pgcc 10.2 will output 3694456fccdSmrg # foo.o: sub/foo.c sub/foo.h 3703e6c936aSmrg # and will wrap long lines using '\' : 3714456fccdSmrg # foo.o: sub/foo.c ... \ 3724456fccdSmrg # sub/foo.h ... \ 3734456fccdSmrg # ... 3743e6c936aSmrg set_dir_from "$object" 3753e6c936aSmrg # Use the source, not the object, to determine the base name, since 3763e6c936aSmrg # that's sadly what pgcc will do too. 3773e6c936aSmrg set_base_from "$source" 3783e6c936aSmrg tmpdepfile=$base.d 3793e6c936aSmrg 3803e6c936aSmrg # For projects that build the same source file twice into different object 3813e6c936aSmrg # files, the pgcc approach of using the *source* file root name can cause 3823e6c936aSmrg # problems in parallel builds. Use a locking strategy to avoid stomping on 3833e6c936aSmrg # the same $tmpdepfile. 3843e6c936aSmrg lockdir=$base.d-lock 3853e6c936aSmrg trap " 3863e6c936aSmrg echo '$0: caught signal, cleaning up...' >&2 3873e6c936aSmrg rmdir '$lockdir' 3883e6c936aSmrg exit 1 3893e6c936aSmrg " 1 2 13 15 3903e6c936aSmrg numtries=100 3913e6c936aSmrg i=$numtries 3923e6c936aSmrg while test $i -gt 0; do 3933e6c936aSmrg # mkdir is a portable test-and-set. 3943e6c936aSmrg if mkdir "$lockdir" 2>/dev/null; then 3953e6c936aSmrg # This process acquired the lock. 3963e6c936aSmrg "$@" -MD 3973e6c936aSmrg stat=$? 3983e6c936aSmrg # Release the lock. 3993e6c936aSmrg rmdir "$lockdir" 4003e6c936aSmrg break 4013e6c936aSmrg else 4023e6c936aSmrg # If the lock is being held by a different process, wait 4033e6c936aSmrg # until the winning process is done or we timeout. 4043e6c936aSmrg while test -d "$lockdir" && test $i -gt 0; do 4053e6c936aSmrg sleep 1 4063e6c936aSmrg i=`expr $i - 1` 4073e6c936aSmrg done 4083e6c936aSmrg fi 4093e6c936aSmrg i=`expr $i - 1` 4103e6c936aSmrg done 4113e6c936aSmrg trap - 1 2 13 15 4123e6c936aSmrg if test $i -le 0; then 4133e6c936aSmrg echo "$0: failed to acquire lock after $numtries attempts" >&2 4143e6c936aSmrg echo "$0: check lockdir '$lockdir'" >&2 4153e6c936aSmrg exit 1 4163e6c936aSmrg fi 4174456fccdSmrg 4183e6c936aSmrg if test $stat -ne 0; then 4194456fccdSmrg rm -f "$tmpdepfile" 4204456fccdSmrg exit $stat 4214456fccdSmrg fi 4224456fccdSmrg rm -f "$depfile" 4234456fccdSmrg # Each line is of the form `foo.o: dependent.h', 4244456fccdSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 4254456fccdSmrg # Do two passes, one to just change these to 4264456fccdSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 4274456fccdSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 4284456fccdSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 4294456fccdSmrg # correctly. Breaking it into two sed invocations is a workaround. 4303e6c936aSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 4313e6c936aSmrg | sed -e 's/$/ :/' >> "$depfile" 4324456fccdSmrg rm -f "$tmpdepfile" 4334456fccdSmrg ;; 4344456fccdSmrg 43542d69509Smrghp2) 43642d69509Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 43742d69509Smrg # compilers, which have integrated preprocessors. The correct option 43842d69509Smrg # to use with these is +Maked; it writes dependencies to a file named 43942d69509Smrg # 'foo.d', which lands next to the object file, wherever that 44042d69509Smrg # happens to be. 44142d69509Smrg # Much of this is similar to the tru64 case; see comments there. 4423e6c936aSmrg set_dir_from "$object" 4433e6c936aSmrg set_base_from "$object" 44442d69509Smrg if test "$libtool" = yes; then 44542d69509Smrg tmpdepfile1=$dir$base.d 44642d69509Smrg tmpdepfile2=$dir.libs/$base.d 44742d69509Smrg "$@" -Wc,+Maked 44842d69509Smrg else 44942d69509Smrg tmpdepfile1=$dir$base.d 45042d69509Smrg tmpdepfile2=$dir$base.d 45142d69509Smrg "$@" +Maked 45242d69509Smrg fi 45342d69509Smrg stat=$? 4543e6c936aSmrg if test $stat -ne 0; then 45542d69509Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 45642d69509Smrg exit $stat 45742d69509Smrg fi 45842d69509Smrg 45942d69509Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 46042d69509Smrg do 46142d69509Smrg test -f "$tmpdepfile" && break 46242d69509Smrg done 46342d69509Smrg if test -f "$tmpdepfile"; then 4643e6c936aSmrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 4653e6c936aSmrg # Add 'dependent.h:' lines. 46642d69509Smrg sed -ne '2,${ 4673e6c936aSmrg s/^ *// 4683e6c936aSmrg s/ \\*$// 4693e6c936aSmrg s/$/:/ 4703e6c936aSmrg p 4713e6c936aSmrg }' "$tmpdepfile" >> "$depfile" 47242d69509Smrg else 4733e6c936aSmrg make_dummy_depfile 47442d69509Smrg fi 47542d69509Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 47642d69509Smrg ;; 47742d69509Smrg 4784456fccdSmrgtru64) 4793e6c936aSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 4803e6c936aSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 4813e6c936aSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 4823e6c936aSmrg # dependencies in 'foo.d' instead, so we check for that too. 4833e6c936aSmrg # Subdirectories are respected. 4843e6c936aSmrg set_dir_from "$object" 4853e6c936aSmrg set_base_from "$object" 4863e6c936aSmrg 4873e6c936aSmrg if test "$libtool" = yes; then 4883e6c936aSmrg # Libtool generates 2 separate objects for the 2 libraries. These 4893e6c936aSmrg # two compilations output dependencies in $dir.libs/$base.o.d and 4903e6c936aSmrg # in $dir$base.o.d. We have to check for both files, because 4913e6c936aSmrg # one of the two compilations can be disabled. We should prefer 4923e6c936aSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4933e6c936aSmrg # automatically cleaned when .libs/ is deleted, while ignoring 4943e6c936aSmrg # the former would cause a distcleancheck panic. 4953e6c936aSmrg tmpdepfile1=$dir$base.o.d # libtool 1.5 4963e6c936aSmrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 4973e6c936aSmrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 4983e6c936aSmrg "$@" -Wc,-MD 4993e6c936aSmrg else 5003e6c936aSmrg tmpdepfile1=$dir$base.d 5013e6c936aSmrg tmpdepfile2=$dir$base.d 5023e6c936aSmrg tmpdepfile3=$dir$base.d 5033e6c936aSmrg "$@" -MD 5043e6c936aSmrg fi 5053e6c936aSmrg 5063e6c936aSmrg stat=$? 5073e6c936aSmrg if test $stat -ne 0; then 5083e6c936aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5093e6c936aSmrg exit $stat 5103e6c936aSmrg fi 5113e6c936aSmrg 5123e6c936aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 5133e6c936aSmrg do 5143e6c936aSmrg test -f "$tmpdepfile" && break 5153e6c936aSmrg done 5163e6c936aSmrg # Same post-processing that is required for AIX mode. 5173e6c936aSmrg aix_post_process_depfile 5183e6c936aSmrg ;; 5193e6c936aSmrg 5203e6c936aSmrgmsvc7) 5213e6c936aSmrg if test "$libtool" = yes; then 5223e6c936aSmrg showIncludes=-Wc,-showIncludes 5233e6c936aSmrg else 5243e6c936aSmrg showIncludes=-showIncludes 5253e6c936aSmrg fi 5263e6c936aSmrg "$@" $showIncludes > "$tmpdepfile" 5273e6c936aSmrg stat=$? 5283e6c936aSmrg grep -v '^Note: including file: ' "$tmpdepfile" 5293e6c936aSmrg if test $stat -ne 0; then 5303e6c936aSmrg rm -f "$tmpdepfile" 5313e6c936aSmrg exit $stat 5323e6c936aSmrg fi 5333e6c936aSmrg rm -f "$depfile" 5343e6c936aSmrg echo "$object : \\" > "$depfile" 5353e6c936aSmrg # The first sed program below extracts the file names and escapes 5363e6c936aSmrg # backslashes for cygpath. The second sed program outputs the file 5373e6c936aSmrg # name when reading, but also accumulates all include files in the 5383e6c936aSmrg # hold buffer in order to output them again at the end. This only 5393e6c936aSmrg # works with sed implementations that can handle large buffers. 5403e6c936aSmrg sed < "$tmpdepfile" -n ' 5413e6c936aSmrg/^Note: including file: *\(.*\)/ { 5423e6c936aSmrg s//\1/ 5433e6c936aSmrg s/\\/\\\\/g 5443e6c936aSmrg p 5453e6c936aSmrg}' | $cygpath_u | sort -u | sed -n ' 5463e6c936aSmrgs/ /\\ /g 5473e6c936aSmrgs/\(.*\)/'"$tab"'\1 \\/p 5483e6c936aSmrgs/.\(.*\) \\/\1:/ 5493e6c936aSmrgH 5503e6c936aSmrg$ { 5513e6c936aSmrg s/.*/'"$tab"'/ 5523e6c936aSmrg G 5533e6c936aSmrg p 5543e6c936aSmrg}' >> "$depfile" 5553e6c936aSmrg rm -f "$tmpdepfile" 5563e6c936aSmrg ;; 5573e6c936aSmrg 5583e6c936aSmrgmsvc7msys) 5593e6c936aSmrg # This case exists only to let depend.m4 do its work. It works by 5603e6c936aSmrg # looking at the text of this script. This case will never be run, 5613e6c936aSmrg # since it is checked for above. 5623e6c936aSmrg exit 1 5633e6c936aSmrg ;; 5644456fccdSmrg 5654456fccdSmrg#nosideeffect) 5664456fccdSmrg # This comment above is used by automake to tell side-effect 5674456fccdSmrg # dependency tracking mechanisms from slower ones. 5684456fccdSmrg 5694456fccdSmrgdashmstdout) 5704456fccdSmrg # Important note: in order to support this mode, a compiler *must* 5714456fccdSmrg # always write the preprocessed file to stdout, regardless of -o. 5724456fccdSmrg "$@" || exit $? 5734456fccdSmrg 5744456fccdSmrg # Remove the call to Libtool. 5754456fccdSmrg if test "$libtool" = yes; then 57642d69509Smrg while test "X$1" != 'X--mode=compile'; do 5774456fccdSmrg shift 5784456fccdSmrg done 5794456fccdSmrg shift 5804456fccdSmrg fi 5814456fccdSmrg 5823e6c936aSmrg # Remove '-o $object'. 5834456fccdSmrg IFS=" " 5844456fccdSmrg for arg 5854456fccdSmrg do 5864456fccdSmrg case $arg in 5874456fccdSmrg -o) 5884456fccdSmrg shift 5894456fccdSmrg ;; 5904456fccdSmrg $object) 5914456fccdSmrg shift 5924456fccdSmrg ;; 5934456fccdSmrg *) 5944456fccdSmrg set fnord "$@" "$arg" 5954456fccdSmrg shift # fnord 5964456fccdSmrg shift # $arg 5974456fccdSmrg ;; 5984456fccdSmrg esac 5994456fccdSmrg done 6004456fccdSmrg 6014456fccdSmrg test -z "$dashmflag" && dashmflag=-M 6023e6c936aSmrg # Require at least two characters before searching for ':' 6034456fccdSmrg # in the target name. This is to cope with DOS-style filenames: 6043e6c936aSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 6054456fccdSmrg "$@" $dashmflag | 6063e6c936aSmrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 6074456fccdSmrg rm -f "$depfile" 6084456fccdSmrg cat < "$tmpdepfile" > "$depfile" 6093e6c936aSmrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 6103e6c936aSmrg # correctly. Breaking it into two sed invocations is a workaround. 6113e6c936aSmrg tr ' ' "$nl" < "$tmpdepfile" \ 6123e6c936aSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6133e6c936aSmrg | sed -e 's/$/ :/' >> "$depfile" 6144456fccdSmrg rm -f "$tmpdepfile" 6154456fccdSmrg ;; 6164456fccdSmrg 6174456fccdSmrgdashXmstdout) 6184456fccdSmrg # This case only exists to satisfy depend.m4. It is never actually 6194456fccdSmrg # run, as this mode is specially recognized in the preamble. 6204456fccdSmrg exit 1 6214456fccdSmrg ;; 6224456fccdSmrg 6234456fccdSmrgmakedepend) 6244456fccdSmrg "$@" || exit $? 6254456fccdSmrg # Remove any Libtool call 6264456fccdSmrg if test "$libtool" = yes; then 62742d69509Smrg while test "X$1" != 'X--mode=compile'; do 6284456fccdSmrg shift 6294456fccdSmrg done 6304456fccdSmrg shift 6314456fccdSmrg fi 6324456fccdSmrg # X makedepend 6334456fccdSmrg shift 63442d69509Smrg cleared=no eat=no 63542d69509Smrg for arg 63642d69509Smrg do 6374456fccdSmrg case $cleared in 6384456fccdSmrg no) 6394456fccdSmrg set ""; shift 6404456fccdSmrg cleared=yes ;; 6414456fccdSmrg esac 64242d69509Smrg if test $eat = yes; then 64342d69509Smrg eat=no 64442d69509Smrg continue 64542d69509Smrg fi 6464456fccdSmrg case "$arg" in 6474456fccdSmrg -D*|-I*) 6484456fccdSmrg set fnord "$@" "$arg"; shift ;; 6494456fccdSmrg # Strip any option that makedepend may not understand. Remove 6504456fccdSmrg # the object too, otherwise makedepend will parse it as a source file. 65142d69509Smrg -arch) 65242d69509Smrg eat=yes ;; 6534456fccdSmrg -*|$object) 6544456fccdSmrg ;; 6554456fccdSmrg *) 6564456fccdSmrg set fnord "$@" "$arg"; shift ;; 6574456fccdSmrg esac 6584456fccdSmrg done 65942d69509Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 6604456fccdSmrg touch "$tmpdepfile" 6614456fccdSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 6624456fccdSmrg rm -f "$depfile" 6633e6c936aSmrg # makedepend may prepend the VPATH from the source file name to the object. 6643e6c936aSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 6653e6c936aSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 6663e6c936aSmrg # Some versions of the HPUX 10.20 sed can't process the last invocation 6673e6c936aSmrg # correctly. Breaking it into two sed invocations is a workaround. 6683e6c936aSmrg sed '1,2d' "$tmpdepfile" \ 6693e6c936aSmrg | tr ' ' "$nl" \ 6703e6c936aSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 6713e6c936aSmrg | sed -e 's/$/ :/' >> "$depfile" 6724456fccdSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 6734456fccdSmrg ;; 6744456fccdSmrg 6754456fccdSmrgcpp) 6764456fccdSmrg # Important note: in order to support this mode, a compiler *must* 6774456fccdSmrg # always write the preprocessed file to stdout. 6784456fccdSmrg "$@" || exit $? 6794456fccdSmrg 6804456fccdSmrg # Remove the call to Libtool. 6814456fccdSmrg if test "$libtool" = yes; then 68242d69509Smrg while test "X$1" != 'X--mode=compile'; do 6834456fccdSmrg shift 6844456fccdSmrg done 6854456fccdSmrg shift 6864456fccdSmrg fi 6874456fccdSmrg 6883e6c936aSmrg # Remove '-o $object'. 6894456fccdSmrg IFS=" " 6904456fccdSmrg for arg 6914456fccdSmrg do 6924456fccdSmrg case $arg in 6934456fccdSmrg -o) 6944456fccdSmrg shift 6954456fccdSmrg ;; 6964456fccdSmrg $object) 6974456fccdSmrg shift 6984456fccdSmrg ;; 6994456fccdSmrg *) 7004456fccdSmrg set fnord "$@" "$arg" 7014456fccdSmrg shift # fnord 7024456fccdSmrg shift # $arg 7034456fccdSmrg ;; 7044456fccdSmrg esac 7054456fccdSmrg done 7064456fccdSmrg 7073e6c936aSmrg "$@" -E \ 7083e6c936aSmrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7093e6c936aSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 7103e6c936aSmrg | sed '$ s: \\$::' > "$tmpdepfile" 7114456fccdSmrg rm -f "$depfile" 7124456fccdSmrg echo "$object : \\" > "$depfile" 7134456fccdSmrg cat < "$tmpdepfile" >> "$depfile" 7144456fccdSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 7154456fccdSmrg rm -f "$tmpdepfile" 7164456fccdSmrg ;; 7174456fccdSmrg 7184456fccdSmrgmsvisualcpp) 7194456fccdSmrg # Important note: in order to support this mode, a compiler *must* 72042d69509Smrg # always write the preprocessed file to stdout. 7214456fccdSmrg "$@" || exit $? 72242d69509Smrg 72342d69509Smrg # Remove the call to Libtool. 72442d69509Smrg if test "$libtool" = yes; then 72542d69509Smrg while test "X$1" != 'X--mode=compile'; do 72642d69509Smrg shift 72742d69509Smrg done 72842d69509Smrg shift 72942d69509Smrg fi 73042d69509Smrg 7314456fccdSmrg IFS=" " 7324456fccdSmrg for arg 7334456fccdSmrg do 7344456fccdSmrg case "$arg" in 73542d69509Smrg -o) 73642d69509Smrg shift 73742d69509Smrg ;; 73842d69509Smrg $object) 73942d69509Smrg shift 74042d69509Smrg ;; 7414456fccdSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 7423e6c936aSmrg set fnord "$@" 7433e6c936aSmrg shift 7443e6c936aSmrg shift 7453e6c936aSmrg ;; 7464456fccdSmrg *) 7473e6c936aSmrg set fnord "$@" "$arg" 7483e6c936aSmrg shift 7493e6c936aSmrg shift 7503e6c936aSmrg ;; 7514456fccdSmrg esac 7524456fccdSmrg done 75342d69509Smrg "$@" -E 2>/dev/null | 75442d69509Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 7554456fccdSmrg rm -f "$depfile" 7564456fccdSmrg echo "$object : \\" > "$depfile" 7573e6c936aSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 7583e6c936aSmrg echo "$tab" >> "$depfile" 75942d69509Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 7604456fccdSmrg rm -f "$tmpdepfile" 7614456fccdSmrg ;; 7624456fccdSmrg 76342d69509Smrgmsvcmsys) 76442d69509Smrg # This case exists only to let depend.m4 do its work. It works by 76542d69509Smrg # looking at the text of this script. This case will never be run, 76642d69509Smrg # since it is checked for above. 76742d69509Smrg exit 1 76842d69509Smrg ;; 76942d69509Smrg 7704456fccdSmrgnone) 7714456fccdSmrg exec "$@" 7724456fccdSmrg ;; 7734456fccdSmrg 7744456fccdSmrg*) 7754456fccdSmrg echo "Unknown depmode $depmode" 1>&2 7764456fccdSmrg exit 1 7774456fccdSmrg ;; 7784456fccdSmrgesac 7794456fccdSmrg 7804456fccdSmrgexit 0 7814456fccdSmrg 7824456fccdSmrg# Local Variables: 7834456fccdSmrg# mode: shell-script 7844456fccdSmrg# sh-indentation: 2 7854456fccdSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 7864456fccdSmrg# time-stamp-start: "scriptversion=" 7874456fccdSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 78842d69509Smrg# time-stamp-time-zone: "UTC" 78942d69509Smrg# time-stamp-end: "; # UTC" 7904456fccdSmrg# End: 791