depcomp revision 963d66ac
17e6fb56fSmrg#! /bin/sh 27e6fb56fSmrg# depcomp - compile a program generating dependencies as side-effects 37e6fb56fSmrg 4963d66acSmrgscriptversion=2013-05-30.07; # UTC 57e6fb56fSmrg 6963d66acSmrg# Copyright (C) 1999-2014 Free Software Foundation, Inc. 77e6fb56fSmrg 87e6fb56fSmrg# This program is free software; you can redistribute it and/or modify 97e6fb56fSmrg# it under the terms of the GNU General Public License as published by 107e6fb56fSmrg# the Free Software Foundation; either version 2, or (at your option) 117e6fb56fSmrg# any later version. 127e6fb56fSmrg 137e6fb56fSmrg# This program is distributed in the hope that it will be useful, 147e6fb56fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 157e6fb56fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 167e6fb56fSmrg# GNU General Public License for more details. 177e6fb56fSmrg 187e6fb56fSmrg# You should have received a copy of the GNU General Public License 197e6fb56fSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 207e6fb56fSmrg 217e6fb56fSmrg# As a special exception to the GNU General Public License, if you 227e6fb56fSmrg# distribute this file as part of a program that contains a 237e6fb56fSmrg# configuration script generated by Autoconf, you may include it under 247e6fb56fSmrg# the same distribution terms that you use for the rest of that program. 257e6fb56fSmrg 267e6fb56fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 277e6fb56fSmrg 287e6fb56fSmrgcase $1 in 297e6fb56fSmrg '') 30963d66acSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 31963d66acSmrg exit 1; 32963d66acSmrg ;; 337e6fb56fSmrg -h | --h*) 347e6fb56fSmrg cat <<\EOF 357e6fb56fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 367e6fb56fSmrg 377e6fb56fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 387e6fb56fSmrgas side-effects. 397e6fb56fSmrg 407e6fb56fSmrgEnvironment variables: 417e6fb56fSmrg depmode Dependency tracking mode. 4290b17f1bSmrg source Source file read by 'PROGRAMS ARGS'. 4390b17f1bSmrg object Object file output by 'PROGRAMS ARGS'. 447e6fb56fSmrg DEPDIR directory where to store dependencies. 457e6fb56fSmrg depfile Dependency file to output. 4690b17f1bSmrg tmpdepfile Temporary file to use when outputting dependencies. 477e6fb56fSmrg libtool Whether libtool is used (yes/no). 487e6fb56fSmrg 497e6fb56fSmrgReport bugs to <bug-automake@gnu.org>. 507e6fb56fSmrgEOF 517e6fb56fSmrg exit $? 527e6fb56fSmrg ;; 537e6fb56fSmrg -v | --v*) 547e6fb56fSmrg echo "depcomp $scriptversion" 557e6fb56fSmrg exit $? 567e6fb56fSmrg ;; 577e6fb56fSmrgesac 587e6fb56fSmrg 59963d66acSmrg# Get the directory component of the given path, and save it in the 60963d66acSmrg# global variables '$dir'. Note that this directory component will 61963d66acSmrg# be either empty or ending with a '/' character. This is deliberate. 62963d66acSmrgset_dir_from () 63963d66acSmrg{ 64963d66acSmrg case $1 in 65963d66acSmrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66963d66acSmrg *) dir=;; 67963d66acSmrg esac 68963d66acSmrg} 69963d66acSmrg 70963d66acSmrg# Get the suffix-stripped basename of the given path, and save it the 71963d66acSmrg# global variable '$base'. 72963d66acSmrgset_base_from () 73963d66acSmrg{ 74963d66acSmrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75963d66acSmrg} 76963d66acSmrg 77963d66acSmrg# If no dependency file was actually created by the compiler invocation, 78963d66acSmrg# we still have to create a dummy depfile, to avoid errors with the 79963d66acSmrg# Makefile "include basename.Plo" scheme. 80963d66acSmrgmake_dummy_depfile () 81963d66acSmrg{ 82963d66acSmrg echo "#dummy" > "$depfile" 83963d66acSmrg} 84963d66acSmrg 85963d66acSmrg# Factor out some common post-processing of the generated depfile. 86963d66acSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 87963d66acSmrgaix_post_process_depfile () 88963d66acSmrg{ 89963d66acSmrg # If the compiler actually managed to produce a dependency file, 90963d66acSmrg # post-process it. 91963d66acSmrg if test -f "$tmpdepfile"; then 92963d66acSmrg # Each line is of the form 'foo.o: dependency.h'. 93963d66acSmrg # Do two passes, one to just change these to 94963d66acSmrg # $object: dependency.h 95963d66acSmrg # and one to simply output 96963d66acSmrg # dependency.h: 97963d66acSmrg # which is needed to avoid the deleted-header problem. 98963d66acSmrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99963d66acSmrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100963d66acSmrg } > "$depfile" 101963d66acSmrg rm -f "$tmpdepfile" 102963d66acSmrg else 103963d66acSmrg make_dummy_depfile 104963d66acSmrg fi 105963d66acSmrg} 106963d66acSmrg 10790b17f1bSmrg# A tabulation character. 10890b17f1bSmrgtab=' ' 10990b17f1bSmrg# A newline character. 11090b17f1bSmrgnl=' 11190b17f1bSmrg' 112963d66acSmrg# Character ranges might be problematic outside the C locale. 113963d66acSmrg# These definitions help. 114963d66acSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115963d66acSmrglower=abcdefghijklmnopqrstuvwxyz 116963d66acSmrgdigits=0123456789 117963d66acSmrgalpha=${upper}${lower} 11890b17f1bSmrg 1197e6fb56fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 1207e6fb56fSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 1217e6fb56fSmrg exit 1 1227e6fb56fSmrgfi 1237e6fb56fSmrg 1247e6fb56fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 1257e6fb56fSmrgdepfile=${depfile-`echo "$object" | 1267e6fb56fSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 1277e6fb56fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 1287e6fb56fSmrg 1297e6fb56fSmrgrm -f "$tmpdepfile" 1307e6fb56fSmrg 131963d66acSmrg# Avoid interferences from the environment. 132963d66acSmrggccflag= dashmflag= 133963d66acSmrg 1347e6fb56fSmrg# Some modes work just like other modes, but use different flags. We 1357e6fb56fSmrg# parameterize here, but still list the modes in the big case below, 1367e6fb56fSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 1377e6fb56fSmrg# here, because this file can only contain one case statement. 1387e6fb56fSmrgif test "$depmode" = hp; then 1397e6fb56fSmrg # HP compiler uses -M and no extra arg. 1407e6fb56fSmrg gccflag=-M 1417e6fb56fSmrg depmode=gcc 1427e6fb56fSmrgfi 1437e6fb56fSmrg 1447e6fb56fSmrgif test "$depmode" = dashXmstdout; then 145963d66acSmrg # This is just like dashmstdout with a different argument. 146963d66acSmrg dashmflag=-xM 147963d66acSmrg depmode=dashmstdout 1487e6fb56fSmrgfi 1497e6fb56fSmrg 1507e6fb56fSmrgcygpath_u="cygpath -u -f -" 1517e6fb56fSmrgif test "$depmode" = msvcmsys; then 152963d66acSmrg # This is just like msvisualcpp but w/o cygpath translation. 153963d66acSmrg # Just convert the backslash-escaped backslashes to single forward 154963d66acSmrg # slashes to satisfy depend.m4 155963d66acSmrg cygpath_u='sed s,\\\\,/,g' 156963d66acSmrg depmode=msvisualcpp 1577e6fb56fSmrgfi 1587e6fb56fSmrg 15990b17f1bSmrgif test "$depmode" = msvc7msys; then 160963d66acSmrg # This is just like msvc7 but w/o cygpath translation. 161963d66acSmrg # Just convert the backslash-escaped backslashes to single forward 162963d66acSmrg # slashes to satisfy depend.m4 163963d66acSmrg cygpath_u='sed s,\\\\,/,g' 164963d66acSmrg depmode=msvc7 16590b17f1bSmrgfi 16690b17f1bSmrg 16790b17f1bSmrgif test "$depmode" = xlc; then 168963d66acSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169963d66acSmrg gccflag=-qmakedep=gcc,-MF 170963d66acSmrg depmode=gcc 17190b17f1bSmrgfi 17290b17f1bSmrg 1737e6fb56fSmrgcase "$depmode" in 1747e6fb56fSmrggcc3) 1757e6fb56fSmrg## gcc 3 implements dependency tracking that does exactly what 1767e6fb56fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1777e6fb56fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1787e6fb56fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1797e6fb56fSmrg## the command line argument order; so add the flags where they 1807e6fb56fSmrg## appear in depend2.am. Note that the slowdown incurred here 1817e6fb56fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1827e6fb56fSmrg for arg 1837e6fb56fSmrg do 1847e6fb56fSmrg case $arg in 1857e6fb56fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1867e6fb56fSmrg *) set fnord "$@" "$arg" ;; 1877e6fb56fSmrg esac 1887e6fb56fSmrg shift # fnord 1897e6fb56fSmrg shift # $arg 1907e6fb56fSmrg done 1917e6fb56fSmrg "$@" 1927e6fb56fSmrg stat=$? 193963d66acSmrg if test $stat -ne 0; then 1947e6fb56fSmrg rm -f "$tmpdepfile" 1957e6fb56fSmrg exit $stat 1967e6fb56fSmrg fi 1977e6fb56fSmrg mv "$tmpdepfile" "$depfile" 1987e6fb56fSmrg ;; 1997e6fb56fSmrg 2007e6fb56fSmrggcc) 201963d66acSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202963d66acSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203963d66acSmrg## (see the conditional assignment to $gccflag above). 2047e6fb56fSmrg## There are various ways to get dependency output from gcc. Here's 2057e6fb56fSmrg## why we pick this rather obscure method: 2067e6fb56fSmrg## - Don't want to use -MD because we'd like the dependencies to end 2077e6fb56fSmrg## up in a subdir. Having to rename by hand is ugly. 2087e6fb56fSmrg## (We might end up doing this anyway to support other compilers.) 2097e6fb56fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210963d66acSmrg## -MM, not -M (despite what the docs say). Also, it might not be 211963d66acSmrg## supported by the other compilers which use the 'gcc' depmode. 2127e6fb56fSmrg## - Using -M directly means running the compiler twice (even worse 2137e6fb56fSmrg## than renaming). 2147e6fb56fSmrg if test -z "$gccflag"; then 2157e6fb56fSmrg gccflag=-MD, 2167e6fb56fSmrg fi 2177e6fb56fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 2187e6fb56fSmrg stat=$? 219963d66acSmrg if test $stat -ne 0; then 2207e6fb56fSmrg rm -f "$tmpdepfile" 2217e6fb56fSmrg exit $stat 2227e6fb56fSmrg fi 2237e6fb56fSmrg rm -f "$depfile" 2247e6fb56fSmrg echo "$object : \\" > "$depfile" 225963d66acSmrg # The second -e expression handles DOS-style file names with drive 226963d66acSmrg # letters. 2277e6fb56fSmrg sed -e 's/^[^:]*: / /' \ 2287e6fb56fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 22990b17f1bSmrg## This next piece of magic avoids the "deleted header file" problem. 2307e6fb56fSmrg## The problem is that when a header file which appears in a .P file 2317e6fb56fSmrg## is deleted, the dependency causes make to die (because there is 2327e6fb56fSmrg## typically no way to rebuild the header). We avoid this by adding 2337e6fb56fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 2347e6fb56fSmrg## this for us directly. 23590b17f1bSmrg## Some versions of gcc put a space before the ':'. On the theory 2367e6fb56fSmrg## that the space means something, we add a space to the output as 23790b17f1bSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 23890b17f1bSmrg## to the object. Take care to not repeat it in the output. 2397e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 2407e6fb56fSmrg## correctly. Breaking it into two sed invocations is a workaround. 241963d66acSmrg tr ' ' "$nl" < "$tmpdepfile" \ 242963d66acSmrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243963d66acSmrg | sed -e 's/$/ :/' >> "$depfile" 2447e6fb56fSmrg rm -f "$tmpdepfile" 2457e6fb56fSmrg ;; 2467e6fb56fSmrg 2477e6fb56fSmrghp) 2487e6fb56fSmrg # This case exists only to let depend.m4 do its work. It works by 2497e6fb56fSmrg # looking at the text of this script. This case will never be run, 2507e6fb56fSmrg # since it is checked for above. 2517e6fb56fSmrg exit 1 2527e6fb56fSmrg ;; 2537e6fb56fSmrg 2547e6fb56fSmrgsgi) 2557e6fb56fSmrg if test "$libtool" = yes; then 2567e6fb56fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 2577e6fb56fSmrg else 2587e6fb56fSmrg "$@" -MDupdate "$tmpdepfile" 2597e6fb56fSmrg fi 2607e6fb56fSmrg stat=$? 261963d66acSmrg if test $stat -ne 0; then 2627e6fb56fSmrg rm -f "$tmpdepfile" 2637e6fb56fSmrg exit $stat 2647e6fb56fSmrg fi 2657e6fb56fSmrg rm -f "$depfile" 2667e6fb56fSmrg 2677e6fb56fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2687e6fb56fSmrg echo "$object : \\" > "$depfile" 2697e6fb56fSmrg # Clip off the initial element (the dependent). Don't try to be 2707e6fb56fSmrg # clever and replace this with sed code, as IRIX sed won't handle 2717e6fb56fSmrg # lines with more than a fixed number of characters (4096 in 2727e6fb56fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 27390b17f1bSmrg # the IRIX cc adds comments like '#:fec' to the end of the 2747e6fb56fSmrg # dependency line. 27590b17f1bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 276963d66acSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277963d66acSmrg | tr "$nl" ' ' >> "$depfile" 2787e6fb56fSmrg echo >> "$depfile" 2797e6fb56fSmrg # The second pass generates a dummy entry for each header file. 28090b17f1bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 281963d66acSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282963d66acSmrg >> "$depfile" 2837e6fb56fSmrg else 284963d66acSmrg make_dummy_depfile 2857e6fb56fSmrg fi 2867e6fb56fSmrg rm -f "$tmpdepfile" 2877e6fb56fSmrg ;; 2887e6fb56fSmrg 28990b17f1bSmrgxlc) 29090b17f1bSmrg # This case exists only to let depend.m4 do its work. It works by 29190b17f1bSmrg # looking at the text of this script. This case will never be run, 29290b17f1bSmrg # since it is checked for above. 29390b17f1bSmrg exit 1 29490b17f1bSmrg ;; 29590b17f1bSmrg 2967e6fb56fSmrgaix) 2977e6fb56fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2987e6fb56fSmrg # in a .u file. In older versions, this file always lives in the 29990b17f1bSmrg # current directory. Also, the AIX compiler puts '$object:' at the 3007e6fb56fSmrg # start of each line; $object doesn't have directory information. 3017e6fb56fSmrg # Version 6 uses the directory in both cases. 302963d66acSmrg set_dir_from "$object" 303963d66acSmrg set_base_from "$object" 3047e6fb56fSmrg if test "$libtool" = yes; then 3057e6fb56fSmrg tmpdepfile1=$dir$base.u 3067e6fb56fSmrg tmpdepfile2=$base.u 3077e6fb56fSmrg tmpdepfile3=$dir.libs/$base.u 3087e6fb56fSmrg "$@" -Wc,-M 3097e6fb56fSmrg else 3107e6fb56fSmrg tmpdepfile1=$dir$base.u 3117e6fb56fSmrg tmpdepfile2=$dir$base.u 3127e6fb56fSmrg tmpdepfile3=$dir$base.u 3137e6fb56fSmrg "$@" -M 3147e6fb56fSmrg fi 3157e6fb56fSmrg stat=$? 316963d66acSmrg if test $stat -ne 0; then 3177e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3187e6fb56fSmrg exit $stat 3197e6fb56fSmrg fi 3207e6fb56fSmrg 3217e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3227e6fb56fSmrg do 3237e6fb56fSmrg test -f "$tmpdepfile" && break 3247e6fb56fSmrg done 325963d66acSmrg aix_post_process_depfile 326963d66acSmrg ;; 327963d66acSmrg 328963d66acSmrgtcc) 329963d66acSmrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330963d66acSmrg # FIXME: That version still under development at the moment of writing. 331963d66acSmrg # Make that this statement remains true also for stable, released 332963d66acSmrg # versions. 333963d66acSmrg # It will wrap lines (doesn't matter whether long or short) with a 334963d66acSmrg # trailing '\', as in: 335963d66acSmrg # 336963d66acSmrg # foo.o : \ 337963d66acSmrg # foo.c \ 338963d66acSmrg # foo.h \ 339963d66acSmrg # 340963d66acSmrg # It will put a trailing '\' even on the last line, and will use leading 341963d66acSmrg # spaces rather than leading tabs (at least since its commit 0394caf7 342963d66acSmrg # "Emit spaces for -MD"). 343963d66acSmrg "$@" -MD -MF "$tmpdepfile" 344963d66acSmrg stat=$? 345963d66acSmrg if test $stat -ne 0; then 346963d66acSmrg rm -f "$tmpdepfile" 347963d66acSmrg exit $stat 3487e6fb56fSmrg fi 349963d66acSmrg rm -f "$depfile" 350963d66acSmrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351963d66acSmrg # We have to change lines of the first kind to '$object: \'. 352963d66acSmrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353963d66acSmrg # And for each line of the second kind, we have to emit a 'dep.h:' 354963d66acSmrg # dummy dependency, to avoid the deleted-header problem. 355963d66acSmrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 3567e6fb56fSmrg rm -f "$tmpdepfile" 3577e6fb56fSmrg ;; 3587e6fb56fSmrg 359963d66acSmrg## The order of this option in the case statement is important, since the 360963d66acSmrg## shell code in configure will try each of these formats in the order 361963d66acSmrg## listed in this file. A plain '-MD' option would be understood by many 362963d66acSmrg## compilers, so we must ensure this comes after the gcc and icc options. 363963d66acSmrgpgcc) 364963d66acSmrg # Portland's C compiler understands '-MD'. 365963d66acSmrg # Will always output deps to 'file.d' where file is the root name of the 366963d66acSmrg # source file under compilation, even if file resides in a subdirectory. 367963d66acSmrg # The object file name does not affect the name of the '.d' file. 368963d66acSmrg # pgcc 10.2 will output 3697e6fb56fSmrg # foo.o: sub/foo.c sub/foo.h 370963d66acSmrg # and will wrap long lines using '\' : 3717e6fb56fSmrg # foo.o: sub/foo.c ... \ 3727e6fb56fSmrg # sub/foo.h ... \ 3737e6fb56fSmrg # ... 374963d66acSmrg set_dir_from "$object" 375963d66acSmrg # Use the source, not the object, to determine the base name, since 376963d66acSmrg # that's sadly what pgcc will do too. 377963d66acSmrg set_base_from "$source" 378963d66acSmrg tmpdepfile=$base.d 379963d66acSmrg 380963d66acSmrg # For projects that build the same source file twice into different object 381963d66acSmrg # files, the pgcc approach of using the *source* file root name can cause 382963d66acSmrg # problems in parallel builds. Use a locking strategy to avoid stomping on 383963d66acSmrg # the same $tmpdepfile. 384963d66acSmrg lockdir=$base.d-lock 385963d66acSmrg trap " 386963d66acSmrg echo '$0: caught signal, cleaning up...' >&2 387963d66acSmrg rmdir '$lockdir' 388963d66acSmrg exit 1 389963d66acSmrg " 1 2 13 15 390963d66acSmrg numtries=100 391963d66acSmrg i=$numtries 392963d66acSmrg while test $i -gt 0; do 393963d66acSmrg # mkdir is a portable test-and-set. 394963d66acSmrg if mkdir "$lockdir" 2>/dev/null; then 395963d66acSmrg # This process acquired the lock. 396963d66acSmrg "$@" -MD 397963d66acSmrg stat=$? 398963d66acSmrg # Release the lock. 399963d66acSmrg rmdir "$lockdir" 400963d66acSmrg break 401963d66acSmrg else 402963d66acSmrg # If the lock is being held by a different process, wait 403963d66acSmrg # until the winning process is done or we timeout. 404963d66acSmrg while test -d "$lockdir" && test $i -gt 0; do 405963d66acSmrg sleep 1 406963d66acSmrg i=`expr $i - 1` 407963d66acSmrg done 408963d66acSmrg fi 409963d66acSmrg i=`expr $i - 1` 410963d66acSmrg done 411963d66acSmrg trap - 1 2 13 15 412963d66acSmrg if test $i -le 0; then 413963d66acSmrg echo "$0: failed to acquire lock after $numtries attempts" >&2 414963d66acSmrg echo "$0: check lockdir '$lockdir'" >&2 415963d66acSmrg exit 1 416963d66acSmrg fi 417963d66acSmrg 418963d66acSmrg if test $stat -ne 0; then 4197e6fb56fSmrg rm -f "$tmpdepfile" 4207e6fb56fSmrg exit $stat 4217e6fb56fSmrg fi 4227e6fb56fSmrg rm -f "$depfile" 423963d66acSmrg # Each line is of the form `foo.o: dependent.h', 424963d66acSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 4257e6fb56fSmrg # Do two passes, one to just change these to 426963d66acSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 427963d66acSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428963d66acSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 429963d66acSmrg # correctly. Breaking it into two sed invocations is a workaround. 430963d66acSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431963d66acSmrg | sed -e 's/$/ :/' >> "$depfile" 4327e6fb56fSmrg rm -f "$tmpdepfile" 4337e6fb56fSmrg ;; 4347e6fb56fSmrg 4357e6fb56fSmrghp2) 4367e6fb56fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 4377e6fb56fSmrg # compilers, which have integrated preprocessors. The correct option 4387e6fb56fSmrg # to use with these is +Maked; it writes dependencies to a file named 4397e6fb56fSmrg # 'foo.d', which lands next to the object file, wherever that 4407e6fb56fSmrg # happens to be. 4417e6fb56fSmrg # Much of this is similar to the tru64 case; see comments there. 442963d66acSmrg set_dir_from "$object" 443963d66acSmrg set_base_from "$object" 4447e6fb56fSmrg if test "$libtool" = yes; then 4457e6fb56fSmrg tmpdepfile1=$dir$base.d 4467e6fb56fSmrg tmpdepfile2=$dir.libs/$base.d 4477e6fb56fSmrg "$@" -Wc,+Maked 4487e6fb56fSmrg else 4497e6fb56fSmrg tmpdepfile1=$dir$base.d 4507e6fb56fSmrg tmpdepfile2=$dir$base.d 4517e6fb56fSmrg "$@" +Maked 4527e6fb56fSmrg fi 4537e6fb56fSmrg stat=$? 454963d66acSmrg if test $stat -ne 0; then 4557e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 4567e6fb56fSmrg exit $stat 4577e6fb56fSmrg fi 4587e6fb56fSmrg 4597e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 4607e6fb56fSmrg do 4617e6fb56fSmrg test -f "$tmpdepfile" && break 4627e6fb56fSmrg done 4637e6fb56fSmrg if test -f "$tmpdepfile"; then 464963d66acSmrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 46590b17f1bSmrg # Add 'dependent.h:' lines. 4667e6fb56fSmrg sed -ne '2,${ 467963d66acSmrg s/^ *// 468963d66acSmrg s/ \\*$// 469963d66acSmrg s/$/:/ 470963d66acSmrg p 471963d66acSmrg }' "$tmpdepfile" >> "$depfile" 4727e6fb56fSmrg else 473963d66acSmrg make_dummy_depfile 4747e6fb56fSmrg fi 4757e6fb56fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 4767e6fb56fSmrg ;; 4777e6fb56fSmrg 4787e6fb56fSmrgtru64) 479963d66acSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 480963d66acSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481963d66acSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482963d66acSmrg # dependencies in 'foo.d' instead, so we check for that too. 483963d66acSmrg # Subdirectories are respected. 484963d66acSmrg set_dir_from "$object" 485963d66acSmrg set_base_from "$object" 486963d66acSmrg 487963d66acSmrg if test "$libtool" = yes; then 488963d66acSmrg # Libtool generates 2 separate objects for the 2 libraries. These 489963d66acSmrg # two compilations output dependencies in $dir.libs/$base.o.d and 490963d66acSmrg # in $dir$base.o.d. We have to check for both files, because 491963d66acSmrg # one of the two compilations can be disabled. We should prefer 492963d66acSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493963d66acSmrg # automatically cleaned when .libs/ is deleted, while ignoring 494963d66acSmrg # the former would cause a distcleancheck panic. 495963d66acSmrg tmpdepfile1=$dir$base.o.d # libtool 1.5 496963d66acSmrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497963d66acSmrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498963d66acSmrg "$@" -Wc,-MD 499963d66acSmrg else 500963d66acSmrg tmpdepfile1=$dir$base.d 501963d66acSmrg tmpdepfile2=$dir$base.d 502963d66acSmrg tmpdepfile3=$dir$base.d 503963d66acSmrg "$@" -MD 504963d66acSmrg fi 505963d66acSmrg 506963d66acSmrg stat=$? 507963d66acSmrg if test $stat -ne 0; then 508963d66acSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509963d66acSmrg exit $stat 510963d66acSmrg fi 511963d66acSmrg 512963d66acSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513963d66acSmrg do 514963d66acSmrg test -f "$tmpdepfile" && break 515963d66acSmrg done 516963d66acSmrg # Same post-processing that is required for AIX mode. 517963d66acSmrg aix_post_process_depfile 518963d66acSmrg ;; 5197e6fb56fSmrg 52090b17f1bSmrgmsvc7) 52190b17f1bSmrg if test "$libtool" = yes; then 52290b17f1bSmrg showIncludes=-Wc,-showIncludes 52390b17f1bSmrg else 52490b17f1bSmrg showIncludes=-showIncludes 52590b17f1bSmrg fi 52690b17f1bSmrg "$@" $showIncludes > "$tmpdepfile" 52790b17f1bSmrg stat=$? 52890b17f1bSmrg grep -v '^Note: including file: ' "$tmpdepfile" 529963d66acSmrg if test $stat -ne 0; then 53090b17f1bSmrg rm -f "$tmpdepfile" 53190b17f1bSmrg exit $stat 53290b17f1bSmrg fi 53390b17f1bSmrg rm -f "$depfile" 53490b17f1bSmrg echo "$object : \\" > "$depfile" 53590b17f1bSmrg # The first sed program below extracts the file names and escapes 53690b17f1bSmrg # backslashes for cygpath. The second sed program outputs the file 53790b17f1bSmrg # name when reading, but also accumulates all include files in the 53890b17f1bSmrg # hold buffer in order to output them again at the end. This only 53990b17f1bSmrg # works with sed implementations that can handle large buffers. 54090b17f1bSmrg sed < "$tmpdepfile" -n ' 54190b17f1bSmrg/^Note: including file: *\(.*\)/ { 54290b17f1bSmrg s//\1/ 54390b17f1bSmrg s/\\/\\\\/g 54490b17f1bSmrg p 54590b17f1bSmrg}' | $cygpath_u | sort -u | sed -n ' 54690b17f1bSmrgs/ /\\ /g 54790b17f1bSmrgs/\(.*\)/'"$tab"'\1 \\/p 54890b17f1bSmrgs/.\(.*\) \\/\1:/ 54990b17f1bSmrgH 55090b17f1bSmrg$ { 55190b17f1bSmrg s/.*/'"$tab"'/ 55290b17f1bSmrg G 55390b17f1bSmrg p 55490b17f1bSmrg}' >> "$depfile" 555963d66acSmrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 55690b17f1bSmrg rm -f "$tmpdepfile" 55790b17f1bSmrg ;; 55890b17f1bSmrg 55990b17f1bSmrgmsvc7msys) 56090b17f1bSmrg # This case exists only to let depend.m4 do its work. It works by 56190b17f1bSmrg # looking at the text of this script. This case will never be run, 56290b17f1bSmrg # since it is checked for above. 56390b17f1bSmrg exit 1 56490b17f1bSmrg ;; 56590b17f1bSmrg 5667e6fb56fSmrg#nosideeffect) 5677e6fb56fSmrg # This comment above is used by automake to tell side-effect 5687e6fb56fSmrg # dependency tracking mechanisms from slower ones. 5697e6fb56fSmrg 5707e6fb56fSmrgdashmstdout) 5717e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 5727e6fb56fSmrg # always write the preprocessed file to stdout, regardless of -o. 5737e6fb56fSmrg "$@" || exit $? 5747e6fb56fSmrg 5757e6fb56fSmrg # Remove the call to Libtool. 5767e6fb56fSmrg if test "$libtool" = yes; then 5777e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 5787e6fb56fSmrg shift 5797e6fb56fSmrg done 5807e6fb56fSmrg shift 5817e6fb56fSmrg fi 5827e6fb56fSmrg 58390b17f1bSmrg # Remove '-o $object'. 5847e6fb56fSmrg IFS=" " 5857e6fb56fSmrg for arg 5867e6fb56fSmrg do 5877e6fb56fSmrg case $arg in 5887e6fb56fSmrg -o) 5897e6fb56fSmrg shift 5907e6fb56fSmrg ;; 5917e6fb56fSmrg $object) 5927e6fb56fSmrg shift 5937e6fb56fSmrg ;; 5947e6fb56fSmrg *) 5957e6fb56fSmrg set fnord "$@" "$arg" 5967e6fb56fSmrg shift # fnord 5977e6fb56fSmrg shift # $arg 5987e6fb56fSmrg ;; 5997e6fb56fSmrg esac 6007e6fb56fSmrg done 6017e6fb56fSmrg 6027e6fb56fSmrg test -z "$dashmflag" && dashmflag=-M 60390b17f1bSmrg # Require at least two characters before searching for ':' 6047e6fb56fSmrg # in the target name. This is to cope with DOS-style filenames: 60590b17f1bSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 6067e6fb56fSmrg "$@" $dashmflag | 607963d66acSmrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 6087e6fb56fSmrg rm -f "$depfile" 6097e6fb56fSmrg cat < "$tmpdepfile" > "$depfile" 610963d66acSmrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 611963d66acSmrg # correctly. Breaking it into two sed invocations is a workaround. 612963d66acSmrg tr ' ' "$nl" < "$tmpdepfile" \ 613963d66acSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614963d66acSmrg | sed -e 's/$/ :/' >> "$depfile" 6157e6fb56fSmrg rm -f "$tmpdepfile" 6167e6fb56fSmrg ;; 6177e6fb56fSmrg 6187e6fb56fSmrgdashXmstdout) 6197e6fb56fSmrg # This case only exists to satisfy depend.m4. It is never actually 6207e6fb56fSmrg # run, as this mode is specially recognized in the preamble. 6217e6fb56fSmrg exit 1 6227e6fb56fSmrg ;; 6237e6fb56fSmrg 6247e6fb56fSmrgmakedepend) 6257e6fb56fSmrg "$@" || exit $? 6267e6fb56fSmrg # Remove any Libtool call 6277e6fb56fSmrg if test "$libtool" = yes; then 6287e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 6297e6fb56fSmrg shift 6307e6fb56fSmrg done 6317e6fb56fSmrg shift 6327e6fb56fSmrg fi 6337e6fb56fSmrg # X makedepend 6347e6fb56fSmrg shift 6357e6fb56fSmrg cleared=no eat=no 6367e6fb56fSmrg for arg 6377e6fb56fSmrg do 6387e6fb56fSmrg case $cleared in 6397e6fb56fSmrg no) 6407e6fb56fSmrg set ""; shift 6417e6fb56fSmrg cleared=yes ;; 6427e6fb56fSmrg esac 6437e6fb56fSmrg if test $eat = yes; then 6447e6fb56fSmrg eat=no 6457e6fb56fSmrg continue 6467e6fb56fSmrg fi 6477e6fb56fSmrg case "$arg" in 6487e6fb56fSmrg -D*|-I*) 6497e6fb56fSmrg set fnord "$@" "$arg"; shift ;; 6507e6fb56fSmrg # Strip any option that makedepend may not understand. Remove 6517e6fb56fSmrg # the object too, otherwise makedepend will parse it as a source file. 6527e6fb56fSmrg -arch) 6537e6fb56fSmrg eat=yes ;; 6547e6fb56fSmrg -*|$object) 6557e6fb56fSmrg ;; 6567e6fb56fSmrg *) 6577e6fb56fSmrg set fnord "$@" "$arg"; shift ;; 6587e6fb56fSmrg esac 6597e6fb56fSmrg done 6607e6fb56fSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 6617e6fb56fSmrg touch "$tmpdepfile" 6627e6fb56fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 6637e6fb56fSmrg rm -f "$depfile" 66490b17f1bSmrg # makedepend may prepend the VPATH from the source file name to the object. 66590b17f1bSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 66690b17f1bSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667963d66acSmrg # Some versions of the HPUX 10.20 sed can't process the last invocation 668963d66acSmrg # correctly. Breaking it into two sed invocations is a workaround. 669963d66acSmrg sed '1,2d' "$tmpdepfile" \ 670963d66acSmrg | tr ' ' "$nl" \ 671963d66acSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672963d66acSmrg | sed -e 's/$/ :/' >> "$depfile" 6737e6fb56fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 6747e6fb56fSmrg ;; 6757e6fb56fSmrg 6767e6fb56fSmrgcpp) 6777e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 6787e6fb56fSmrg # always write the preprocessed file to stdout. 6797e6fb56fSmrg "$@" || exit $? 6807e6fb56fSmrg 6817e6fb56fSmrg # Remove the call to Libtool. 6827e6fb56fSmrg if test "$libtool" = yes; then 6837e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 6847e6fb56fSmrg shift 6857e6fb56fSmrg done 6867e6fb56fSmrg shift 6877e6fb56fSmrg fi 6887e6fb56fSmrg 68990b17f1bSmrg # Remove '-o $object'. 6907e6fb56fSmrg IFS=" " 6917e6fb56fSmrg for arg 6927e6fb56fSmrg do 6937e6fb56fSmrg case $arg in 6947e6fb56fSmrg -o) 6957e6fb56fSmrg shift 6967e6fb56fSmrg ;; 6977e6fb56fSmrg $object) 6987e6fb56fSmrg shift 6997e6fb56fSmrg ;; 7007e6fb56fSmrg *) 7017e6fb56fSmrg set fnord "$@" "$arg" 7027e6fb56fSmrg shift # fnord 7037e6fb56fSmrg shift # $arg 7047e6fb56fSmrg ;; 7057e6fb56fSmrg esac 7067e6fb56fSmrg done 7077e6fb56fSmrg 708963d66acSmrg "$@" -E \ 709963d66acSmrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710963d66acSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711963d66acSmrg | sed '$ s: \\$::' > "$tmpdepfile" 7127e6fb56fSmrg rm -f "$depfile" 7137e6fb56fSmrg echo "$object : \\" > "$depfile" 7147e6fb56fSmrg cat < "$tmpdepfile" >> "$depfile" 7157e6fb56fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 7167e6fb56fSmrg rm -f "$tmpdepfile" 7177e6fb56fSmrg ;; 7187e6fb56fSmrg 7197e6fb56fSmrgmsvisualcpp) 7207e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 7217e6fb56fSmrg # always write the preprocessed file to stdout. 7227e6fb56fSmrg "$@" || exit $? 7237e6fb56fSmrg 7247e6fb56fSmrg # Remove the call to Libtool. 7257e6fb56fSmrg if test "$libtool" = yes; then 7267e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 7277e6fb56fSmrg shift 7287e6fb56fSmrg done 7297e6fb56fSmrg shift 7307e6fb56fSmrg fi 7317e6fb56fSmrg 7327e6fb56fSmrg IFS=" " 7337e6fb56fSmrg for arg 7347e6fb56fSmrg do 7357e6fb56fSmrg case "$arg" in 7367e6fb56fSmrg -o) 7377e6fb56fSmrg shift 7387e6fb56fSmrg ;; 7397e6fb56fSmrg $object) 7407e6fb56fSmrg shift 7417e6fb56fSmrg ;; 7427e6fb56fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743963d66acSmrg set fnord "$@" 744963d66acSmrg shift 745963d66acSmrg shift 746963d66acSmrg ;; 7477e6fb56fSmrg *) 748963d66acSmrg set fnord "$@" "$arg" 749963d66acSmrg shift 750963d66acSmrg shift 751963d66acSmrg ;; 7527e6fb56fSmrg esac 7537e6fb56fSmrg done 7547e6fb56fSmrg "$@" -E 2>/dev/null | 7557e6fb56fSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 7567e6fb56fSmrg rm -f "$depfile" 7577e6fb56fSmrg echo "$object : \\" > "$depfile" 75890b17f1bSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 75990b17f1bSmrg echo "$tab" >> "$depfile" 7607e6fb56fSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 7617e6fb56fSmrg rm -f "$tmpdepfile" 7627e6fb56fSmrg ;; 7637e6fb56fSmrg 7647e6fb56fSmrgmsvcmsys) 7657e6fb56fSmrg # This case exists only to let depend.m4 do its work. It works by 7667e6fb56fSmrg # looking at the text of this script. This case will never be run, 7677e6fb56fSmrg # since it is checked for above. 7687e6fb56fSmrg exit 1 7697e6fb56fSmrg ;; 7707e6fb56fSmrg 7717e6fb56fSmrgnone) 7727e6fb56fSmrg exec "$@" 7737e6fb56fSmrg ;; 7747e6fb56fSmrg 7757e6fb56fSmrg*) 7767e6fb56fSmrg echo "Unknown depmode $depmode" 1>&2 7777e6fb56fSmrg exit 1 7787e6fb56fSmrg ;; 7797e6fb56fSmrgesac 7807e6fb56fSmrg 7817e6fb56fSmrgexit 0 7827e6fb56fSmrg 7837e6fb56fSmrg# Local Variables: 7847e6fb56fSmrg# mode: shell-script 7857e6fb56fSmrg# sh-indentation: 2 7867e6fb56fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 7877e6fb56fSmrg# time-stamp-start: "scriptversion=" 7887e6fb56fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7897e6fb56fSmrg# time-stamp-time-zone: "UTC" 7907e6fb56fSmrg# time-stamp-end: "; # UTC" 7917e6fb56fSmrg# End: 792