14fee23f9Smrg#! /bin/sh 24fee23f9Smrg# depcomp - compile a program generating dependencies as side-effects 34fee23f9Smrg 4*4d5abbe8Smrgscriptversion=2013-05-30.07; # UTC 54fee23f9Smrg 6*4d5abbe8Smrg# Copyright (C) 1999-2014 Free Software Foundation, Inc. 74fee23f9Smrg 84fee23f9Smrg# This program is free software; you can redistribute it and/or modify 94fee23f9Smrg# it under the terms of the GNU General Public License as published by 104fee23f9Smrg# the Free Software Foundation; either version 2, or (at your option) 114fee23f9Smrg# any later version. 124fee23f9Smrg 134fee23f9Smrg# This program is distributed in the hope that it will be useful, 144fee23f9Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 154fee23f9Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 164fee23f9Smrg# GNU General Public License for more details. 174fee23f9Smrg 184fee23f9Smrg# You should have received a copy of the GNU General Public License 194fee23f9Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 204fee23f9Smrg 214fee23f9Smrg# As a special exception to the GNU General Public License, if you 224fee23f9Smrg# distribute this file as part of a program that contains a 234fee23f9Smrg# configuration script generated by Autoconf, you may include it under 244fee23f9Smrg# the same distribution terms that you use for the rest of that program. 254fee23f9Smrg 264fee23f9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 274fee23f9Smrg 284fee23f9Smrgcase $1 in 294fee23f9Smrg '') 30*4d5abbe8Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 314fee23f9Smrg exit 1; 324fee23f9Smrg ;; 334fee23f9Smrg -h | --h*) 344fee23f9Smrg cat <<\EOF 354fee23f9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 364fee23f9Smrg 374fee23f9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 384fee23f9Smrgas side-effects. 394fee23f9Smrg 404fee23f9SmrgEnvironment variables: 414fee23f9Smrg depmode Dependency tracking mode. 42*4d5abbe8Smrg source Source file read by 'PROGRAMS ARGS'. 43*4d5abbe8Smrg object Object file output by 'PROGRAMS ARGS'. 444fee23f9Smrg DEPDIR directory where to store dependencies. 454fee23f9Smrg depfile Dependency file to output. 46*4d5abbe8Smrg tmpdepfile Temporary file to use when outputting dependencies. 474fee23f9Smrg libtool Whether libtool is used (yes/no). 484fee23f9Smrg 494fee23f9SmrgReport bugs to <bug-automake@gnu.org>. 504fee23f9SmrgEOF 514fee23f9Smrg exit $? 524fee23f9Smrg ;; 534fee23f9Smrg -v | --v*) 544fee23f9Smrg echo "depcomp $scriptversion" 554fee23f9Smrg exit $? 564fee23f9Smrg ;; 574fee23f9Smrgesac 584fee23f9Smrg 59*4d5abbe8Smrg# Get the directory component of the given path, and save it in the 60*4d5abbe8Smrg# global variables '$dir'. Note that this directory component will 61*4d5abbe8Smrg# be either empty or ending with a '/' character. This is deliberate. 62*4d5abbe8Smrgset_dir_from () 63*4d5abbe8Smrg{ 64*4d5abbe8Smrg case $1 in 65*4d5abbe8Smrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66*4d5abbe8Smrg *) dir=;; 67*4d5abbe8Smrg esac 68*4d5abbe8Smrg} 69*4d5abbe8Smrg 70*4d5abbe8Smrg# Get the suffix-stripped basename of the given path, and save it the 71*4d5abbe8Smrg# global variable '$base'. 72*4d5abbe8Smrgset_base_from () 73*4d5abbe8Smrg{ 74*4d5abbe8Smrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75*4d5abbe8Smrg} 76*4d5abbe8Smrg 77*4d5abbe8Smrg# If no dependency file was actually created by the compiler invocation, 78*4d5abbe8Smrg# we still have to create a dummy depfile, to avoid errors with the 79*4d5abbe8Smrg# Makefile "include basename.Plo" scheme. 80*4d5abbe8Smrgmake_dummy_depfile () 81*4d5abbe8Smrg{ 82*4d5abbe8Smrg echo "#dummy" > "$depfile" 83*4d5abbe8Smrg} 84*4d5abbe8Smrg 85*4d5abbe8Smrg# Factor out some common post-processing of the generated depfile. 86*4d5abbe8Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 87*4d5abbe8Smrgaix_post_process_depfile () 88*4d5abbe8Smrg{ 89*4d5abbe8Smrg # If the compiler actually managed to produce a dependency file, 90*4d5abbe8Smrg # post-process it. 91*4d5abbe8Smrg if test -f "$tmpdepfile"; then 92*4d5abbe8Smrg # Each line is of the form 'foo.o: dependency.h'. 93*4d5abbe8Smrg # Do two passes, one to just change these to 94*4d5abbe8Smrg # $object: dependency.h 95*4d5abbe8Smrg # and one to simply output 96*4d5abbe8Smrg # dependency.h: 97*4d5abbe8Smrg # which is needed to avoid the deleted-header problem. 98*4d5abbe8Smrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99*4d5abbe8Smrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100*4d5abbe8Smrg } > "$depfile" 101*4d5abbe8Smrg rm -f "$tmpdepfile" 102*4d5abbe8Smrg else 103*4d5abbe8Smrg make_dummy_depfile 104*4d5abbe8Smrg fi 105*4d5abbe8Smrg} 106*4d5abbe8Smrg 107*4d5abbe8Smrg# A tabulation character. 108*4d5abbe8Smrgtab=' ' 109*4d5abbe8Smrg# A newline character. 110*4d5abbe8Smrgnl=' 111*4d5abbe8Smrg' 112*4d5abbe8Smrg# Character ranges might be problematic outside the C locale. 113*4d5abbe8Smrg# These definitions help. 114*4d5abbe8Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115*4d5abbe8Smrglower=abcdefghijklmnopqrstuvwxyz 116*4d5abbe8Smrgdigits=0123456789 117*4d5abbe8Smrgalpha=${upper}${lower} 118*4d5abbe8Smrg 1194fee23f9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 1204fee23f9Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 1214fee23f9Smrg exit 1 1224fee23f9Smrgfi 1234fee23f9Smrg 1244fee23f9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 1254fee23f9Smrgdepfile=${depfile-`echo "$object" | 1264fee23f9Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 1274fee23f9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 1284fee23f9Smrg 1294fee23f9Smrgrm -f "$tmpdepfile" 1304fee23f9Smrg 131*4d5abbe8Smrg# Avoid interferences from the environment. 132*4d5abbe8Smrggccflag= dashmflag= 133*4d5abbe8Smrg 1344fee23f9Smrg# Some modes work just like other modes, but use different flags. We 1354fee23f9Smrg# parameterize here, but still list the modes in the big case below, 1364fee23f9Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 1374fee23f9Smrg# here, because this file can only contain one case statement. 1384fee23f9Smrgif test "$depmode" = hp; then 1394fee23f9Smrg # HP compiler uses -M and no extra arg. 1404fee23f9Smrg gccflag=-M 1414fee23f9Smrg depmode=gcc 1424fee23f9Smrgfi 1434fee23f9Smrg 1444fee23f9Smrgif test "$depmode" = dashXmstdout; then 1454fee23f9Smrg # This is just like dashmstdout with a different argument. 1464fee23f9Smrg dashmflag=-xM 1474fee23f9Smrg depmode=dashmstdout 1484fee23f9Smrgfi 1494fee23f9Smrg 1504fee23f9Smrgcygpath_u="cygpath -u -f -" 1514fee23f9Smrgif test "$depmode" = msvcmsys; then 1524fee23f9Smrg # This is just like msvisualcpp but w/o cygpath translation. 1534fee23f9Smrg # Just convert the backslash-escaped backslashes to single forward 1544fee23f9Smrg # slashes to satisfy depend.m4 155*4d5abbe8Smrg cygpath_u='sed s,\\\\,/,g' 1564fee23f9Smrg depmode=msvisualcpp 1574fee23f9Smrgfi 1584fee23f9Smrg 159*4d5abbe8Smrgif test "$depmode" = msvc7msys; then 160*4d5abbe8Smrg # This is just like msvc7 but w/o cygpath translation. 161*4d5abbe8Smrg # Just convert the backslash-escaped backslashes to single forward 162*4d5abbe8Smrg # slashes to satisfy depend.m4 163*4d5abbe8Smrg cygpath_u='sed s,\\\\,/,g' 164*4d5abbe8Smrg depmode=msvc7 165*4d5abbe8Smrgfi 166*4d5abbe8Smrg 167*4d5abbe8Smrgif test "$depmode" = xlc; then 168*4d5abbe8Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169*4d5abbe8Smrg gccflag=-qmakedep=gcc,-MF 170*4d5abbe8Smrg depmode=gcc 171*4d5abbe8Smrgfi 172*4d5abbe8Smrg 1734fee23f9Smrgcase "$depmode" in 1744fee23f9Smrggcc3) 1754fee23f9Smrg## gcc 3 implements dependency tracking that does exactly what 1764fee23f9Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1774fee23f9Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1784fee23f9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1794fee23f9Smrg## the command line argument order; so add the flags where they 1804fee23f9Smrg## appear in depend2.am. Note that the slowdown incurred here 1814fee23f9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1824fee23f9Smrg for arg 1834fee23f9Smrg do 1844fee23f9Smrg case $arg in 1854fee23f9Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1864fee23f9Smrg *) set fnord "$@" "$arg" ;; 1874fee23f9Smrg esac 1884fee23f9Smrg shift # fnord 1894fee23f9Smrg shift # $arg 1904fee23f9Smrg done 1914fee23f9Smrg "$@" 1924fee23f9Smrg stat=$? 193*4d5abbe8Smrg if test $stat -ne 0; then 1944fee23f9Smrg rm -f "$tmpdepfile" 1954fee23f9Smrg exit $stat 1964fee23f9Smrg fi 1974fee23f9Smrg mv "$tmpdepfile" "$depfile" 1984fee23f9Smrg ;; 1994fee23f9Smrg 2004fee23f9Smrggcc) 201*4d5abbe8Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202*4d5abbe8Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203*4d5abbe8Smrg## (see the conditional assignment to $gccflag above). 2044fee23f9Smrg## There are various ways to get dependency output from gcc. Here's 2054fee23f9Smrg## why we pick this rather obscure method: 2064fee23f9Smrg## - Don't want to use -MD because we'd like the dependencies to end 2074fee23f9Smrg## up in a subdir. Having to rename by hand is ugly. 2084fee23f9Smrg## (We might end up doing this anyway to support other compilers.) 2094fee23f9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210*4d5abbe8Smrg## -MM, not -M (despite what the docs say). Also, it might not be 211*4d5abbe8Smrg## supported by the other compilers which use the 'gcc' depmode. 2124fee23f9Smrg## - Using -M directly means running the compiler twice (even worse 2134fee23f9Smrg## than renaming). 2144fee23f9Smrg if test -z "$gccflag"; then 2154fee23f9Smrg gccflag=-MD, 2164fee23f9Smrg fi 2174fee23f9Smrg "$@" -Wp,"$gccflag$tmpdepfile" 2184fee23f9Smrg stat=$? 219*4d5abbe8Smrg if test $stat -ne 0; then 2204fee23f9Smrg rm -f "$tmpdepfile" 2214fee23f9Smrg exit $stat 2224fee23f9Smrg fi 2234fee23f9Smrg rm -f "$depfile" 2244fee23f9Smrg echo "$object : \\" > "$depfile" 225*4d5abbe8Smrg # The second -e expression handles DOS-style file names with drive 226*4d5abbe8Smrg # letters. 2274fee23f9Smrg sed -e 's/^[^:]*: / /' \ 2284fee23f9Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229*4d5abbe8Smrg## This next piece of magic avoids the "deleted header file" problem. 2304fee23f9Smrg## The problem is that when a header file which appears in a .P file 2314fee23f9Smrg## is deleted, the dependency causes make to die (because there is 2324fee23f9Smrg## typically no way to rebuild the header). We avoid this by adding 2334fee23f9Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 2344fee23f9Smrg## this for us directly. 235*4d5abbe8Smrg## Some versions of gcc put a space before the ':'. On the theory 2364fee23f9Smrg## that the space means something, we add a space to the output as 237*4d5abbe8Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 238*4d5abbe8Smrg## to the object. Take care to not repeat it in the output. 2394fee23f9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 2404fee23f9Smrg## correctly. Breaking it into two sed invocations is a workaround. 241*4d5abbe8Smrg tr ' ' "$nl" < "$tmpdepfile" \ 242*4d5abbe8Smrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243*4d5abbe8Smrg | sed -e 's/$/ :/' >> "$depfile" 2444fee23f9Smrg rm -f "$tmpdepfile" 2454fee23f9Smrg ;; 2464fee23f9Smrg 2474fee23f9Smrghp) 2484fee23f9Smrg # This case exists only to let depend.m4 do its work. It works by 2494fee23f9Smrg # looking at the text of this script. This case will never be run, 2504fee23f9Smrg # since it is checked for above. 2514fee23f9Smrg exit 1 2524fee23f9Smrg ;; 2534fee23f9Smrg 254*4d5abbe8Smrgxlc) 255*4d5abbe8Smrg # This case exists only to let depend.m4 do its work. It works by 256*4d5abbe8Smrg # looking at the text of this script. This case will never be run, 257*4d5abbe8Smrg # since it is checked for above. 258*4d5abbe8Smrg exit 1 2594fee23f9Smrg ;; 2604fee23f9Smrg 2614fee23f9Smrgaix) 2624fee23f9Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2634fee23f9Smrg # in a .u file. In older versions, this file always lives in the 264*4d5abbe8Smrg # current directory. Also, the AIX compiler puts '$object:' at the 2654fee23f9Smrg # start of each line; $object doesn't have directory information. 2664fee23f9Smrg # Version 6 uses the directory in both cases. 267*4d5abbe8Smrg set_dir_from "$object" 268*4d5abbe8Smrg set_base_from "$object" 2694fee23f9Smrg if test "$libtool" = yes; then 2704fee23f9Smrg tmpdepfile1=$dir$base.u 2714fee23f9Smrg tmpdepfile2=$base.u 2724fee23f9Smrg tmpdepfile3=$dir.libs/$base.u 2734fee23f9Smrg "$@" -Wc,-M 2744fee23f9Smrg else 2754fee23f9Smrg tmpdepfile1=$dir$base.u 2764fee23f9Smrg tmpdepfile2=$dir$base.u 2774fee23f9Smrg tmpdepfile3=$dir$base.u 2784fee23f9Smrg "$@" -M 2794fee23f9Smrg fi 2804fee23f9Smrg stat=$? 281*4d5abbe8Smrg if test $stat -ne 0; then 2824fee23f9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2834fee23f9Smrg exit $stat 2844fee23f9Smrg fi 2854fee23f9Smrg 2864fee23f9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2874fee23f9Smrg do 2884fee23f9Smrg test -f "$tmpdepfile" && break 2894fee23f9Smrg done 290*4d5abbe8Smrg aix_post_process_depfile 291*4d5abbe8Smrg ;; 292*4d5abbe8Smrg 293*4d5abbe8Smrgtcc) 294*4d5abbe8Smrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 295*4d5abbe8Smrg # FIXME: That version still under development at the moment of writing. 296*4d5abbe8Smrg # Make that this statement remains true also for stable, released 297*4d5abbe8Smrg # versions. 298*4d5abbe8Smrg # It will wrap lines (doesn't matter whether long or short) with a 299*4d5abbe8Smrg # trailing '\', as in: 300*4d5abbe8Smrg # 301*4d5abbe8Smrg # foo.o : \ 302*4d5abbe8Smrg # foo.c \ 303*4d5abbe8Smrg # foo.h \ 304*4d5abbe8Smrg # 305*4d5abbe8Smrg # It will put a trailing '\' even on the last line, and will use leading 306*4d5abbe8Smrg # spaces rather than leading tabs (at least since its commit 0394caf7 307*4d5abbe8Smrg # "Emit spaces for -MD"). 308*4d5abbe8Smrg "$@" -MD -MF "$tmpdepfile" 309*4d5abbe8Smrg stat=$? 310*4d5abbe8Smrg if test $stat -ne 0; then 311*4d5abbe8Smrg rm -f "$tmpdepfile" 312*4d5abbe8Smrg exit $stat 3134fee23f9Smrg fi 314*4d5abbe8Smrg rm -f "$depfile" 315*4d5abbe8Smrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 316*4d5abbe8Smrg # We have to change lines of the first kind to '$object: \'. 317*4d5abbe8Smrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 318*4d5abbe8Smrg # And for each line of the second kind, we have to emit a 'dep.h:' 319*4d5abbe8Smrg # dummy dependency, to avoid the deleted-header problem. 320*4d5abbe8Smrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 3214fee23f9Smrg rm -f "$tmpdepfile" 3224fee23f9Smrg ;; 3234fee23f9Smrg 324*4d5abbe8Smrg## The order of this option in the case statement is important, since the 325*4d5abbe8Smrg## shell code in configure will try each of these formats in the order 326*4d5abbe8Smrg## listed in this file. A plain '-MD' option would be understood by many 327*4d5abbe8Smrg## compilers, so we must ensure this comes after the gcc and icc options. 328*4d5abbe8Smrgpgcc) 329*4d5abbe8Smrg # Portland's C compiler understands '-MD'. 330*4d5abbe8Smrg # Will always output deps to 'file.d' where file is the root name of the 331*4d5abbe8Smrg # source file under compilation, even if file resides in a subdirectory. 332*4d5abbe8Smrg # The object file name does not affect the name of the '.d' file. 333*4d5abbe8Smrg # pgcc 10.2 will output 3344fee23f9Smrg # foo.o: sub/foo.c sub/foo.h 335*4d5abbe8Smrg # and will wrap long lines using '\' : 3364fee23f9Smrg # foo.o: sub/foo.c ... \ 3374fee23f9Smrg # sub/foo.h ... \ 3384fee23f9Smrg # ... 339*4d5abbe8Smrg set_dir_from "$object" 340*4d5abbe8Smrg # Use the source, not the object, to determine the base name, since 341*4d5abbe8Smrg # that's sadly what pgcc will do too. 342*4d5abbe8Smrg set_base_from "$source" 343*4d5abbe8Smrg tmpdepfile=$base.d 3444fee23f9Smrg 345*4d5abbe8Smrg # For projects that build the same source file twice into different object 346*4d5abbe8Smrg # files, the pgcc approach of using the *source* file root name can cause 347*4d5abbe8Smrg # problems in parallel builds. Use a locking strategy to avoid stomping on 348*4d5abbe8Smrg # the same $tmpdepfile. 349*4d5abbe8Smrg lockdir=$base.d-lock 350*4d5abbe8Smrg trap " 351*4d5abbe8Smrg echo '$0: caught signal, cleaning up...' >&2 352*4d5abbe8Smrg rmdir '$lockdir' 353*4d5abbe8Smrg exit 1 354*4d5abbe8Smrg " 1 2 13 15 355*4d5abbe8Smrg numtries=100 356*4d5abbe8Smrg i=$numtries 357*4d5abbe8Smrg while test $i -gt 0; do 358*4d5abbe8Smrg # mkdir is a portable test-and-set. 359*4d5abbe8Smrg if mkdir "$lockdir" 2>/dev/null; then 360*4d5abbe8Smrg # This process acquired the lock. 361*4d5abbe8Smrg "$@" -MD 3624fee23f9Smrg stat=$? 363*4d5abbe8Smrg # Release the lock. 364*4d5abbe8Smrg rmdir "$lockdir" 365*4d5abbe8Smrg break 3664fee23f9Smrg else 367*4d5abbe8Smrg # If the lock is being held by a different process, wait 368*4d5abbe8Smrg # until the winning process is done or we timeout. 369*4d5abbe8Smrg while test -d "$lockdir" && test $i -gt 0; do 370*4d5abbe8Smrg sleep 1 371*4d5abbe8Smrg i=`expr $i - 1` 372*4d5abbe8Smrg done 373*4d5abbe8Smrg fi 374*4d5abbe8Smrg i=`expr $i - 1` 375*4d5abbe8Smrg done 376*4d5abbe8Smrg trap - 1 2 13 15 377*4d5abbe8Smrg if test $i -le 0; then 378*4d5abbe8Smrg echo "$0: failed to acquire lock after $numtries attempts" >&2 379*4d5abbe8Smrg echo "$0: check lockdir '$lockdir'" >&2 380*4d5abbe8Smrg exit 1 381*4d5abbe8Smrg fi 382*4d5abbe8Smrg 383*4d5abbe8Smrg if test $stat -ne 0; then 3844fee23f9Smrg rm -f "$tmpdepfile" 3854fee23f9Smrg exit $stat 3864fee23f9Smrg fi 3874fee23f9Smrg rm -f "$depfile" 3884fee23f9Smrg # Each line is of the form `foo.o: dependent.h', 3894fee23f9Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 3904fee23f9Smrg # Do two passes, one to just change these to 3914fee23f9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 3924fee23f9Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 3934fee23f9Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 3944fee23f9Smrg # correctly. Breaking it into two sed invocations is a workaround. 395*4d5abbe8Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 396*4d5abbe8Smrg | sed -e 's/$/ :/' >> "$depfile" 3974fee23f9Smrg rm -f "$tmpdepfile" 3984fee23f9Smrg ;; 3994fee23f9Smrg 4004fee23f9Smrghp2) 4014fee23f9Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 4024fee23f9Smrg # compilers, which have integrated preprocessors. The correct option 4034fee23f9Smrg # to use with these is +Maked; it writes dependencies to a file named 4044fee23f9Smrg # 'foo.d', which lands next to the object file, wherever that 4054fee23f9Smrg # happens to be. 4064fee23f9Smrg # Much of this is similar to the tru64 case; see comments there. 407*4d5abbe8Smrg set_dir_from "$object" 408*4d5abbe8Smrg set_base_from "$object" 4094fee23f9Smrg if test "$libtool" = yes; then 4104fee23f9Smrg tmpdepfile1=$dir$base.d 4114fee23f9Smrg tmpdepfile2=$dir.libs/$base.d 4124fee23f9Smrg "$@" -Wc,+Maked 4134fee23f9Smrg else 4144fee23f9Smrg tmpdepfile1=$dir$base.d 4154fee23f9Smrg tmpdepfile2=$dir$base.d 4164fee23f9Smrg "$@" +Maked 4174fee23f9Smrg fi 4184fee23f9Smrg stat=$? 419*4d5abbe8Smrg if test $stat -ne 0; then 4204fee23f9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 4214fee23f9Smrg exit $stat 4224fee23f9Smrg fi 4234fee23f9Smrg 4244fee23f9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 4254fee23f9Smrg do 4264fee23f9Smrg test -f "$tmpdepfile" && break 4274fee23f9Smrg done 4284fee23f9Smrg if test -f "$tmpdepfile"; then 429*4d5abbe8Smrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 430*4d5abbe8Smrg # Add 'dependent.h:' lines. 4314fee23f9Smrg sed -ne '2,${ 4324fee23f9Smrg s/^ *// 4334fee23f9Smrg s/ \\*$// 4344fee23f9Smrg s/$/:/ 4354fee23f9Smrg p 4364fee23f9Smrg }' "$tmpdepfile" >> "$depfile" 4374fee23f9Smrg else 438*4d5abbe8Smrg make_dummy_depfile 4394fee23f9Smrg fi 4404fee23f9Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 4414fee23f9Smrg ;; 4424fee23f9Smrg 4434fee23f9Smrgtru64) 4444fee23f9Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 445*4d5abbe8Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 4464fee23f9Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 447*4d5abbe8Smrg # dependencies in 'foo.d' instead, so we check for that too. 4484fee23f9Smrg # Subdirectories are respected. 449*4d5abbe8Smrg set_dir_from "$object" 450*4d5abbe8Smrg set_base_from "$object" 4514fee23f9Smrg 4524fee23f9Smrg if test "$libtool" = yes; then 453*4d5abbe8Smrg # Libtool generates 2 separate objects for the 2 libraries. These 454*4d5abbe8Smrg # two compilations output dependencies in $dir.libs/$base.o.d and 4554fee23f9Smrg # in $dir$base.o.d. We have to check for both files, because 4564fee23f9Smrg # one of the two compilations can be disabled. We should prefer 4574fee23f9Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4584fee23f9Smrg # automatically cleaned when .libs/ is deleted, while ignoring 4594fee23f9Smrg # the former would cause a distcleancheck panic. 460*4d5abbe8Smrg tmpdepfile1=$dir$base.o.d # libtool 1.5 461*4d5abbe8Smrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 462*4d5abbe8Smrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 4634fee23f9Smrg "$@" -Wc,-MD 4644fee23f9Smrg else 465*4d5abbe8Smrg tmpdepfile1=$dir$base.d 4664fee23f9Smrg tmpdepfile2=$dir$base.d 4674fee23f9Smrg tmpdepfile3=$dir$base.d 4684fee23f9Smrg "$@" -MD 4694fee23f9Smrg fi 4704fee23f9Smrg 4714fee23f9Smrg stat=$? 472*4d5abbe8Smrg if test $stat -ne 0; then 473*4d5abbe8Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 4744fee23f9Smrg exit $stat 4754fee23f9Smrg fi 4764fee23f9Smrg 477*4d5abbe8Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 4784fee23f9Smrg do 4794fee23f9Smrg test -f "$tmpdepfile" && break 4804fee23f9Smrg done 481*4d5abbe8Smrg # Same post-processing that is required for AIX mode. 482*4d5abbe8Smrg aix_post_process_depfile 483*4d5abbe8Smrg ;; 484*4d5abbe8Smrg 485*4d5abbe8Smrgmsvc7) 486*4d5abbe8Smrg if test "$libtool" = yes; then 487*4d5abbe8Smrg showIncludes=-Wc,-showIncludes 4884fee23f9Smrg else 489*4d5abbe8Smrg showIncludes=-showIncludes 4904fee23f9Smrg fi 491*4d5abbe8Smrg "$@" $showIncludes > "$tmpdepfile" 492*4d5abbe8Smrg stat=$? 493*4d5abbe8Smrg grep -v '^Note: including file: ' "$tmpdepfile" 494*4d5abbe8Smrg if test $stat -ne 0; then 4954fee23f9Smrg rm -f "$tmpdepfile" 496*4d5abbe8Smrg exit $stat 497*4d5abbe8Smrg fi 498*4d5abbe8Smrg rm -f "$depfile" 499*4d5abbe8Smrg echo "$object : \\" > "$depfile" 500*4d5abbe8Smrg # The first sed program below extracts the file names and escapes 501*4d5abbe8Smrg # backslashes for cygpath. The second sed program outputs the file 502*4d5abbe8Smrg # name when reading, but also accumulates all include files in the 503*4d5abbe8Smrg # hold buffer in order to output them again at the end. This only 504*4d5abbe8Smrg # works with sed implementations that can handle large buffers. 505*4d5abbe8Smrg sed < "$tmpdepfile" -n ' 506*4d5abbe8Smrg/^Note: including file: *\(.*\)/ { 507*4d5abbe8Smrg s//\1/ 508*4d5abbe8Smrg s/\\/\\\\/g 509*4d5abbe8Smrg p 510*4d5abbe8Smrg}' | $cygpath_u | sort -u | sed -n ' 511*4d5abbe8Smrgs/ /\\ /g 512*4d5abbe8Smrgs/\(.*\)/'"$tab"'\1 \\/p 513*4d5abbe8Smrgs/.\(.*\) \\/\1:/ 514*4d5abbe8SmrgH 515*4d5abbe8Smrg$ { 516*4d5abbe8Smrg s/.*/'"$tab"'/ 517*4d5abbe8Smrg G 518*4d5abbe8Smrg p 519*4d5abbe8Smrg}' >> "$depfile" 520*4d5abbe8Smrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 521*4d5abbe8Smrg rm -f "$tmpdepfile" 522*4d5abbe8Smrg ;; 523*4d5abbe8Smrg 524*4d5abbe8Smrgmsvc7msys) 525*4d5abbe8Smrg # This case exists only to let depend.m4 do its work. It works by 526*4d5abbe8Smrg # looking at the text of this script. This case will never be run, 527*4d5abbe8Smrg # since it is checked for above. 528*4d5abbe8Smrg exit 1 5294fee23f9Smrg ;; 5304fee23f9Smrg 5314fee23f9Smrg#nosideeffect) 5324fee23f9Smrg # This comment above is used by automake to tell side-effect 5334fee23f9Smrg # dependency tracking mechanisms from slower ones. 5344fee23f9Smrg 5354fee23f9Smrgdashmstdout) 5364fee23f9Smrg # Important note: in order to support this mode, a compiler *must* 5374fee23f9Smrg # always write the preprocessed file to stdout, regardless of -o. 5384fee23f9Smrg "$@" || exit $? 5394fee23f9Smrg 5404fee23f9Smrg # Remove the call to Libtool. 5414fee23f9Smrg if test "$libtool" = yes; then 5424fee23f9Smrg while test "X$1" != 'X--mode=compile'; do 5434fee23f9Smrg shift 5444fee23f9Smrg done 5454fee23f9Smrg shift 5464fee23f9Smrg fi 5474fee23f9Smrg 548*4d5abbe8Smrg # Remove '-o $object'. 5494fee23f9Smrg IFS=" " 5504fee23f9Smrg for arg 5514fee23f9Smrg do 5524fee23f9Smrg case $arg in 5534fee23f9Smrg -o) 5544fee23f9Smrg shift 5554fee23f9Smrg ;; 5564fee23f9Smrg $object) 5574fee23f9Smrg shift 5584fee23f9Smrg ;; 5594fee23f9Smrg *) 5604fee23f9Smrg set fnord "$@" "$arg" 5614fee23f9Smrg shift # fnord 5624fee23f9Smrg shift # $arg 5634fee23f9Smrg ;; 5644fee23f9Smrg esac 5654fee23f9Smrg done 5664fee23f9Smrg 5674fee23f9Smrg test -z "$dashmflag" && dashmflag=-M 568*4d5abbe8Smrg # Require at least two characters before searching for ':' 5694fee23f9Smrg # in the target name. This is to cope with DOS-style filenames: 570*4d5abbe8Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 5714fee23f9Smrg "$@" $dashmflag | 572*4d5abbe8Smrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 5734fee23f9Smrg rm -f "$depfile" 5744fee23f9Smrg cat < "$tmpdepfile" > "$depfile" 575*4d5abbe8Smrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 576*4d5abbe8Smrg # correctly. Breaking it into two sed invocations is a workaround. 577*4d5abbe8Smrg tr ' ' "$nl" < "$tmpdepfile" \ 578*4d5abbe8Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 579*4d5abbe8Smrg | sed -e 's/$/ :/' >> "$depfile" 5804fee23f9Smrg rm -f "$tmpdepfile" 5814fee23f9Smrg ;; 5824fee23f9Smrg 5834fee23f9SmrgdashXmstdout) 5844fee23f9Smrg # This case only exists to satisfy depend.m4. It is never actually 5854fee23f9Smrg # run, as this mode is specially recognized in the preamble. 5864fee23f9Smrg exit 1 5874fee23f9Smrg ;; 5884fee23f9Smrg 5894fee23f9Smrgmakedepend) 5904fee23f9Smrg "$@" || exit $? 5914fee23f9Smrg # Remove any Libtool call 5924fee23f9Smrg if test "$libtool" = yes; then 5934fee23f9Smrg while test "X$1" != 'X--mode=compile'; do 5944fee23f9Smrg shift 5954fee23f9Smrg done 5964fee23f9Smrg shift 5974fee23f9Smrg fi 5984fee23f9Smrg # X makedepend 5994fee23f9Smrg shift 6004fee23f9Smrg cleared=no eat=no 6014fee23f9Smrg for arg 6024fee23f9Smrg do 6034fee23f9Smrg case $cleared in 6044fee23f9Smrg no) 6054fee23f9Smrg set ""; shift 6064fee23f9Smrg cleared=yes ;; 6074fee23f9Smrg esac 6084fee23f9Smrg if test $eat = yes; then 6094fee23f9Smrg eat=no 6104fee23f9Smrg continue 6114fee23f9Smrg fi 6124fee23f9Smrg case "$arg" in 6134fee23f9Smrg -D*|-I*) 6144fee23f9Smrg set fnord "$@" "$arg"; shift ;; 6154fee23f9Smrg # Strip any option that makedepend may not understand. Remove 6164fee23f9Smrg # the object too, otherwise makedepend will parse it as a source file. 6174fee23f9Smrg -arch) 6184fee23f9Smrg eat=yes ;; 6194fee23f9Smrg -*|$object) 6204fee23f9Smrg ;; 6214fee23f9Smrg *) 6224fee23f9Smrg set fnord "$@" "$arg"; shift ;; 6234fee23f9Smrg esac 6244fee23f9Smrg done 6254fee23f9Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 6264fee23f9Smrg touch "$tmpdepfile" 6274fee23f9Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 6284fee23f9Smrg rm -f "$depfile" 629*4d5abbe8Smrg # makedepend may prepend the VPATH from the source file name to the object. 630*4d5abbe8Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 631*4d5abbe8Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 632*4d5abbe8Smrg # Some versions of the HPUX 10.20 sed can't process the last invocation 633*4d5abbe8Smrg # correctly. Breaking it into two sed invocations is a workaround. 634*4d5abbe8Smrg sed '1,2d' "$tmpdepfile" \ 635*4d5abbe8Smrg | tr ' ' "$nl" \ 636*4d5abbe8Smrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 637*4d5abbe8Smrg | sed -e 's/$/ :/' >> "$depfile" 6384fee23f9Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 6394fee23f9Smrg ;; 6404fee23f9Smrg 6414fee23f9Smrgcpp) 6424fee23f9Smrg # Important note: in order to support this mode, a compiler *must* 6434fee23f9Smrg # always write the preprocessed file to stdout. 6444fee23f9Smrg "$@" || exit $? 6454fee23f9Smrg 6464fee23f9Smrg # Remove the call to Libtool. 6474fee23f9Smrg if test "$libtool" = yes; then 6484fee23f9Smrg while test "X$1" != 'X--mode=compile'; do 6494fee23f9Smrg shift 6504fee23f9Smrg done 6514fee23f9Smrg shift 6524fee23f9Smrg fi 6534fee23f9Smrg 654*4d5abbe8Smrg # Remove '-o $object'. 6554fee23f9Smrg IFS=" " 6564fee23f9Smrg for arg 6574fee23f9Smrg do 6584fee23f9Smrg case $arg in 6594fee23f9Smrg -o) 6604fee23f9Smrg shift 6614fee23f9Smrg ;; 6624fee23f9Smrg $object) 6634fee23f9Smrg shift 6644fee23f9Smrg ;; 6654fee23f9Smrg *) 6664fee23f9Smrg set fnord "$@" "$arg" 6674fee23f9Smrg shift # fnord 6684fee23f9Smrg shift # $arg 6694fee23f9Smrg ;; 6704fee23f9Smrg esac 6714fee23f9Smrg done 6724fee23f9Smrg 673*4d5abbe8Smrg "$@" -E \ 674*4d5abbe8Smrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 675*4d5abbe8Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 676*4d5abbe8Smrg | sed '$ s: \\$::' > "$tmpdepfile" 6774fee23f9Smrg rm -f "$depfile" 6784fee23f9Smrg echo "$object : \\" > "$depfile" 6794fee23f9Smrg cat < "$tmpdepfile" >> "$depfile" 6804fee23f9Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6814fee23f9Smrg rm -f "$tmpdepfile" 6824fee23f9Smrg ;; 6834fee23f9Smrg 6844fee23f9Smrgmsvisualcpp) 6854fee23f9Smrg # Important note: in order to support this mode, a compiler *must* 6864fee23f9Smrg # always write the preprocessed file to stdout. 6874fee23f9Smrg "$@" || exit $? 6884fee23f9Smrg 6894fee23f9Smrg # Remove the call to Libtool. 6904fee23f9Smrg if test "$libtool" = yes; then 6914fee23f9Smrg while test "X$1" != 'X--mode=compile'; do 6924fee23f9Smrg shift 6934fee23f9Smrg done 6944fee23f9Smrg shift 6954fee23f9Smrg fi 6964fee23f9Smrg 6974fee23f9Smrg IFS=" " 6984fee23f9Smrg for arg 6994fee23f9Smrg do 7004fee23f9Smrg case "$arg" in 7014fee23f9Smrg -o) 7024fee23f9Smrg shift 7034fee23f9Smrg ;; 7044fee23f9Smrg $object) 7054fee23f9Smrg shift 7064fee23f9Smrg ;; 7074fee23f9Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 7084fee23f9Smrg set fnord "$@" 7094fee23f9Smrg shift 7104fee23f9Smrg shift 7114fee23f9Smrg ;; 7124fee23f9Smrg *) 7134fee23f9Smrg set fnord "$@" "$arg" 7144fee23f9Smrg shift 7154fee23f9Smrg shift 7164fee23f9Smrg ;; 7174fee23f9Smrg esac 7184fee23f9Smrg done 7194fee23f9Smrg "$@" -E 2>/dev/null | 7204fee23f9Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 7214fee23f9Smrg rm -f "$depfile" 7224fee23f9Smrg echo "$object : \\" > "$depfile" 723*4d5abbe8Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 724*4d5abbe8Smrg echo "$tab" >> "$depfile" 7254fee23f9Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 7264fee23f9Smrg rm -f "$tmpdepfile" 7274fee23f9Smrg ;; 7284fee23f9Smrg 7294fee23f9Smrgmsvcmsys) 7304fee23f9Smrg # This case exists only to let depend.m4 do its work. It works by 7314fee23f9Smrg # looking at the text of this script. This case will never be run, 7324fee23f9Smrg # since it is checked for above. 7334fee23f9Smrg exit 1 7344fee23f9Smrg ;; 7354fee23f9Smrg 7364fee23f9Smrgnone) 7374fee23f9Smrg exec "$@" 7384fee23f9Smrg ;; 7394fee23f9Smrg 7404fee23f9Smrg*) 7414fee23f9Smrg echo "Unknown depmode $depmode" 1>&2 7424fee23f9Smrg exit 1 7434fee23f9Smrg ;; 7444fee23f9Smrgesac 7454fee23f9Smrg 7464fee23f9Smrgexit 0 7474fee23f9Smrg 7484fee23f9Smrg# Local Variables: 7494fee23f9Smrg# mode: shell-script 7504fee23f9Smrg# sh-indentation: 2 7514fee23f9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 7524fee23f9Smrg# time-stamp-start: "scriptversion=" 7534fee23f9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7544fee23f9Smrg# time-stamp-time-zone: "UTC" 7554fee23f9Smrg# time-stamp-end: "; # UTC" 7564fee23f9Smrg# End: 757