depcomp revision ca08ab68
12c393a42Smrg#! /bin/sh 22c393a42Smrg# depcomp - compile a program generating dependencies as side-effects 32c393a42Smrg 4ca08ab68Smrgscriptversion=2012-03-27.16; # UTC 52c393a42Smrg 6ca08ab68Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7ca08ab68Smrg# 2011, 2012 Free Software Foundation, Inc. 82c393a42Smrg 92c393a42Smrg# This program is free software; you can redistribute it and/or modify 102c393a42Smrg# it under the terms of the GNU General Public License as published by 112c393a42Smrg# the Free Software Foundation; either version 2, or (at your option) 122c393a42Smrg# any later version. 132c393a42Smrg 142c393a42Smrg# This program is distributed in the hope that it will be useful, 152c393a42Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 162c393a42Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 172c393a42Smrg# GNU General Public License for more details. 182c393a42Smrg 192c393a42Smrg# You should have received a copy of the GNU General Public License 20a6844aabSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 212c393a42Smrg 222c393a42Smrg# As a special exception to the GNU General Public License, if you 232c393a42Smrg# distribute this file as part of a program that contains a 242c393a42Smrg# configuration script generated by Autoconf, you may include it under 252c393a42Smrg# the same distribution terms that you use for the rest of that program. 262c393a42Smrg 272c393a42Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 282c393a42Smrg 292c393a42Smrgcase $1 in 302c393a42Smrg '') 31ca08ab68Smrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 322c393a42Smrg exit 1; 332c393a42Smrg ;; 342c393a42Smrg -h | --h*) 352c393a42Smrg cat <<\EOF 362c393a42SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 372c393a42Smrg 382c393a42SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 392c393a42Smrgas side-effects. 402c393a42Smrg 412c393a42SmrgEnvironment variables: 422c393a42Smrg depmode Dependency tracking mode. 43ca08ab68Smrg source Source file read by 'PROGRAMS ARGS'. 44ca08ab68Smrg object Object file output by 'PROGRAMS ARGS'. 452c393a42Smrg DEPDIR directory where to store dependencies. 462c393a42Smrg depfile Dependency file to output. 47ca08ab68Smrg tmpdepfile Temporary file to use when outputting dependencies. 482c393a42Smrg libtool Whether libtool is used (yes/no). 492c393a42Smrg 502c393a42SmrgReport bugs to <bug-automake@gnu.org>. 512c393a42SmrgEOF 522c393a42Smrg exit $? 532c393a42Smrg ;; 542c393a42Smrg -v | --v*) 552c393a42Smrg echo "depcomp $scriptversion" 562c393a42Smrg exit $? 572c393a42Smrg ;; 582c393a42Smrgesac 592c393a42Smrg 60ca08ab68Smrg# A tabulation character. 61ca08ab68Smrgtab=' ' 62ca08ab68Smrg# A newline character. 63ca08ab68Smrgnl=' 64ca08ab68Smrg' 65ca08ab68Smrg 662c393a42Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 672c393a42Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 682c393a42Smrg exit 1 692c393a42Smrgfi 702c393a42Smrg 712c393a42Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 722c393a42Smrgdepfile=${depfile-`echo "$object" | 732c393a42Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 742c393a42Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 752c393a42Smrg 762c393a42Smrgrm -f "$tmpdepfile" 772c393a42Smrg 782c393a42Smrg# Some modes work just like other modes, but use different flags. We 792c393a42Smrg# parameterize here, but still list the modes in the big case below, 802c393a42Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 812c393a42Smrg# here, because this file can only contain one case statement. 822c393a42Smrgif test "$depmode" = hp; then 832c393a42Smrg # HP compiler uses -M and no extra arg. 842c393a42Smrg gccflag=-M 852c393a42Smrg depmode=gcc 862c393a42Smrgfi 872c393a42Smrg 882c393a42Smrgif test "$depmode" = dashXmstdout; then 892c393a42Smrg # This is just like dashmstdout with a different argument. 902c393a42Smrg dashmflag=-xM 912c393a42Smrg depmode=dashmstdout 922c393a42Smrgfi 932c393a42Smrg 94a6844aabSmrgcygpath_u="cygpath -u -f -" 95a6844aabSmrgif test "$depmode" = msvcmsys; then 96a6844aabSmrg # This is just like msvisualcpp but w/o cygpath translation. 97a6844aabSmrg # Just convert the backslash-escaped backslashes to single forward 98a6844aabSmrg # slashes to satisfy depend.m4 99ca08ab68Smrg cygpath_u='sed s,\\\\,/,g' 100a6844aabSmrg depmode=msvisualcpp 101a6844aabSmrgfi 102a6844aabSmrg 103ca08ab68Smrgif test "$depmode" = msvc7msys; then 104ca08ab68Smrg # This is just like msvc7 but w/o cygpath translation. 105ca08ab68Smrg # Just convert the backslash-escaped backslashes to single forward 106ca08ab68Smrg # slashes to satisfy depend.m4 107ca08ab68Smrg cygpath_u='sed s,\\\\,/,g' 108ca08ab68Smrg depmode=msvc7 109ca08ab68Smrgfi 110ca08ab68Smrg 111ca08ab68Smrgif test "$depmode" = xlc; then 112ca08ab68Smrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. 113ca08ab68Smrg gccflag=-qmakedep=gcc,-MF 114ca08ab68Smrg depmode=gcc 115ca08ab68Smrgfi 116ca08ab68Smrg 1172c393a42Smrgcase "$depmode" in 1182c393a42Smrggcc3) 1192c393a42Smrg## gcc 3 implements dependency tracking that does exactly what 1202c393a42Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1212c393a42Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 122a6844aabSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 123a6844aabSmrg## the command line argument order; so add the flags where they 124a6844aabSmrg## appear in depend2.am. Note that the slowdown incurred here 125a6844aabSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 126a6844aabSmrg for arg 127a6844aabSmrg do 128a6844aabSmrg case $arg in 129a6844aabSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 130a6844aabSmrg *) set fnord "$@" "$arg" ;; 131a6844aabSmrg esac 132a6844aabSmrg shift # fnord 133a6844aabSmrg shift # $arg 134a6844aabSmrg done 135a6844aabSmrg "$@" 1362c393a42Smrg stat=$? 1372c393a42Smrg if test $stat -eq 0; then : 1382c393a42Smrg else 1392c393a42Smrg rm -f "$tmpdepfile" 1402c393a42Smrg exit $stat 1412c393a42Smrg fi 1422c393a42Smrg mv "$tmpdepfile" "$depfile" 1432c393a42Smrg ;; 1442c393a42Smrg 1452c393a42Smrggcc) 1462c393a42Smrg## There are various ways to get dependency output from gcc. Here's 1472c393a42Smrg## why we pick this rather obscure method: 1482c393a42Smrg## - Don't want to use -MD because we'd like the dependencies to end 1492c393a42Smrg## up in a subdir. Having to rename by hand is ugly. 1502c393a42Smrg## (We might end up doing this anyway to support other compilers.) 1512c393a42Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1522c393a42Smrg## -MM, not -M (despite what the docs say). 1532c393a42Smrg## - Using -M directly means running the compiler twice (even worse 1542c393a42Smrg## than renaming). 1552c393a42Smrg if test -z "$gccflag"; then 1562c393a42Smrg gccflag=-MD, 1572c393a42Smrg fi 1582c393a42Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1592c393a42Smrg stat=$? 1602c393a42Smrg if test $stat -eq 0; then : 1612c393a42Smrg else 1622c393a42Smrg rm -f "$tmpdepfile" 1632c393a42Smrg exit $stat 1642c393a42Smrg fi 1652c393a42Smrg rm -f "$depfile" 1662c393a42Smrg echo "$object : \\" > "$depfile" 1672c393a42Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1682c393a42Smrg## The second -e expression handles DOS-style file names with drive letters. 1692c393a42Smrg sed -e 's/^[^:]*: / /' \ 1702c393a42Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 171ca08ab68Smrg## This next piece of magic avoids the "deleted header file" problem. 1722c393a42Smrg## The problem is that when a header file which appears in a .P file 1732c393a42Smrg## is deleted, the dependency causes make to die (because there is 1742c393a42Smrg## typically no way to rebuild the header). We avoid this by adding 1752c393a42Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1762c393a42Smrg## this for us directly. 177ca08ab68Smrg tr ' ' "$nl" < "$tmpdepfile" | 178ca08ab68Smrg## Some versions of gcc put a space before the ':'. On the theory 1792c393a42Smrg## that the space means something, we add a space to the output as 180ca08ab68Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 181ca08ab68Smrg## to the object. Take care to not repeat it in the output. 1822c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1832c393a42Smrg## correctly. Breaking it into two sed invocations is a workaround. 184ca08ab68Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 185ca08ab68Smrg | sed -e 's/$/ :/' >> "$depfile" 1862c393a42Smrg rm -f "$tmpdepfile" 1872c393a42Smrg ;; 1882c393a42Smrg 1892c393a42Smrghp) 1902c393a42Smrg # This case exists only to let depend.m4 do its work. It works by 1912c393a42Smrg # looking at the text of this script. This case will never be run, 1922c393a42Smrg # since it is checked for above. 1932c393a42Smrg exit 1 1942c393a42Smrg ;; 1952c393a42Smrg 1962c393a42Smrgsgi) 1972c393a42Smrg if test "$libtool" = yes; then 1982c393a42Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1992c393a42Smrg else 2002c393a42Smrg "$@" -MDupdate "$tmpdepfile" 2012c393a42Smrg fi 2022c393a42Smrg stat=$? 2032c393a42Smrg if test $stat -eq 0; then : 2042c393a42Smrg else 2052c393a42Smrg rm -f "$tmpdepfile" 2062c393a42Smrg exit $stat 2072c393a42Smrg fi 2082c393a42Smrg rm -f "$depfile" 2092c393a42Smrg 2102c393a42Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2112c393a42Smrg echo "$object : \\" > "$depfile" 2122c393a42Smrg 2132c393a42Smrg # Clip off the initial element (the dependent). Don't try to be 2142c393a42Smrg # clever and replace this with sed code, as IRIX sed won't handle 2152c393a42Smrg # lines with more than a fixed number of characters (4096 in 2162c393a42Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 217ca08ab68Smrg # the IRIX cc adds comments like '#:fec' to the end of the 2182c393a42Smrg # dependency line. 219ca08ab68Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2202c393a42Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 221ca08ab68Smrg tr "$nl" ' ' >> "$depfile" 222a6844aabSmrg echo >> "$depfile" 2232c393a42Smrg 2242c393a42Smrg # The second pass generates a dummy entry for each header file. 225ca08ab68Smrg tr ' ' "$nl" < "$tmpdepfile" \ 2262c393a42Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 227a6844aabSmrg >> "$depfile" 2282c393a42Smrg else 2292c393a42Smrg # The sourcefile does not contain any dependencies, so just 2302c393a42Smrg # store a dummy comment line, to avoid errors with the Makefile 2312c393a42Smrg # "include basename.Plo" scheme. 2322c393a42Smrg echo "#dummy" > "$depfile" 2332c393a42Smrg fi 2342c393a42Smrg rm -f "$tmpdepfile" 2352c393a42Smrg ;; 2362c393a42Smrg 237ca08ab68Smrgxlc) 238ca08ab68Smrg # This case exists only to let depend.m4 do its work. It works by 239ca08ab68Smrg # looking at the text of this script. This case will never be run, 240ca08ab68Smrg # since it is checked for above. 241ca08ab68Smrg exit 1 242ca08ab68Smrg ;; 243ca08ab68Smrg 2442c393a42Smrgaix) 2452c393a42Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2462c393a42Smrg # in a .u file. In older versions, this file always lives in the 247ca08ab68Smrg # current directory. Also, the AIX compiler puts '$object:' at the 2482c393a42Smrg # start of each line; $object doesn't have directory information. 2492c393a42Smrg # Version 6 uses the directory in both cases. 250a6844aabSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 251a6844aabSmrg test "x$dir" = "x$object" && dir= 252a6844aabSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2532c393a42Smrg if test "$libtool" = yes; then 254a6844aabSmrg tmpdepfile1=$dir$base.u 255a6844aabSmrg tmpdepfile2=$base.u 256a6844aabSmrg tmpdepfile3=$dir.libs/$base.u 2572c393a42Smrg "$@" -Wc,-M 2582c393a42Smrg else 259a6844aabSmrg tmpdepfile1=$dir$base.u 260a6844aabSmrg tmpdepfile2=$dir$base.u 261a6844aabSmrg tmpdepfile3=$dir$base.u 2622c393a42Smrg "$@" -M 2632c393a42Smrg fi 2642c393a42Smrg stat=$? 2652c393a42Smrg 2662c393a42Smrg if test $stat -eq 0; then : 2672c393a42Smrg else 268a6844aabSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2692c393a42Smrg exit $stat 2702c393a42Smrg fi 2712c393a42Smrg 272a6844aabSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 273a6844aabSmrg do 274a6844aabSmrg test -f "$tmpdepfile" && break 275a6844aabSmrg done 2762c393a42Smrg if test -f "$tmpdepfile"; then 277ca08ab68Smrg # Each line is of the form 'foo.o: dependent.h'. 2782c393a42Smrg # Do two passes, one to just change these to 279ca08ab68Smrg # '$object: dependent.h' and one to simply 'dependent.h:'. 280a6844aabSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 281ca08ab68Smrg sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2822c393a42Smrg else 2832c393a42Smrg # The sourcefile does not contain any dependencies, so just 2842c393a42Smrg # store a dummy comment line, to avoid errors with the Makefile 2852c393a42Smrg # "include basename.Plo" scheme. 2862c393a42Smrg echo "#dummy" > "$depfile" 2872c393a42Smrg fi 2882c393a42Smrg rm -f "$tmpdepfile" 2892c393a42Smrg ;; 2902c393a42Smrg 2912c393a42Smrgicc) 292ca08ab68Smrg # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. 293ca08ab68Smrg # However on 294ca08ab68Smrg # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2952c393a42Smrg # ICC 7.0 will fill foo.d with something like 2962c393a42Smrg # foo.o: sub/foo.c 2972c393a42Smrg # foo.o: sub/foo.h 298ca08ab68Smrg # which is wrong. We want 2992c393a42Smrg # sub/foo.o: sub/foo.c 3002c393a42Smrg # sub/foo.o: sub/foo.h 3012c393a42Smrg # sub/foo.c: 3022c393a42Smrg # sub/foo.h: 3032c393a42Smrg # ICC 7.1 will output 3042c393a42Smrg # foo.o: sub/foo.c sub/foo.h 305ca08ab68Smrg # and will wrap long lines using '\': 3062c393a42Smrg # foo.o: sub/foo.c ... \ 3072c393a42Smrg # sub/foo.h ... \ 3082c393a42Smrg # ... 309ca08ab68Smrg # tcc 0.9.26 (FIXME still under development at the moment of writing) 310ca08ab68Smrg # will emit a similar output, but also prepend the continuation lines 311ca08ab68Smrg # with horizontal tabulation characters. 3122c393a42Smrg "$@" -MD -MF "$tmpdepfile" 3132c393a42Smrg stat=$? 3142c393a42Smrg if test $stat -eq 0; then : 3152c393a42Smrg else 3162c393a42Smrg rm -f "$tmpdepfile" 3172c393a42Smrg exit $stat 3182c393a42Smrg fi 3192c393a42Smrg rm -f "$depfile" 320ca08ab68Smrg # Each line is of the form 'foo.o: dependent.h', 321ca08ab68Smrg # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. 3222c393a42Smrg # Do two passes, one to just change these to 323ca08ab68Smrg # '$object: dependent.h' and one to simply 'dependent.h:'. 324ca08ab68Smrg sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ 325ca08ab68Smrg < "$tmpdepfile" > "$depfile" 326ca08ab68Smrg sed ' 327ca08ab68Smrg s/[ '"$tab"'][ '"$tab"']*/ /g 328ca08ab68Smrg s/^ *// 329ca08ab68Smrg s/ *\\*$// 330ca08ab68Smrg s/^[^:]*: *// 331ca08ab68Smrg /^$/d 332ca08ab68Smrg /:$/d 333ca08ab68Smrg s/$/ :/ 334ca08ab68Smrg ' < "$tmpdepfile" >> "$depfile" 3352c393a42Smrg rm -f "$tmpdepfile" 3362c393a42Smrg ;; 3372c393a42Smrg 338a6844aabSmrghp2) 339a6844aabSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 340a6844aabSmrg # compilers, which have integrated preprocessors. The correct option 341a6844aabSmrg # to use with these is +Maked; it writes dependencies to a file named 342a6844aabSmrg # 'foo.d', which lands next to the object file, wherever that 343a6844aabSmrg # happens to be. 344a6844aabSmrg # Much of this is similar to the tru64 case; see comments there. 345a6844aabSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 346a6844aabSmrg test "x$dir" = "x$object" && dir= 347a6844aabSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 348a6844aabSmrg if test "$libtool" = yes; then 349a6844aabSmrg tmpdepfile1=$dir$base.d 350a6844aabSmrg tmpdepfile2=$dir.libs/$base.d 351a6844aabSmrg "$@" -Wc,+Maked 352a6844aabSmrg else 353a6844aabSmrg tmpdepfile1=$dir$base.d 354a6844aabSmrg tmpdepfile2=$dir$base.d 355a6844aabSmrg "$@" +Maked 356a6844aabSmrg fi 357a6844aabSmrg stat=$? 358a6844aabSmrg if test $stat -eq 0; then : 359a6844aabSmrg else 360a6844aabSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 361a6844aabSmrg exit $stat 362a6844aabSmrg fi 363a6844aabSmrg 364a6844aabSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 365a6844aabSmrg do 366a6844aabSmrg test -f "$tmpdepfile" && break 367a6844aabSmrg done 368a6844aabSmrg if test -f "$tmpdepfile"; then 369a6844aabSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 370ca08ab68Smrg # Add 'dependent.h:' lines. 371a6844aabSmrg sed -ne '2,${ 372a6844aabSmrg s/^ *// 373a6844aabSmrg s/ \\*$// 374a6844aabSmrg s/$/:/ 375a6844aabSmrg p 376a6844aabSmrg }' "$tmpdepfile" >> "$depfile" 377a6844aabSmrg else 378a6844aabSmrg echo "#dummy" > "$depfile" 379a6844aabSmrg fi 380a6844aabSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 381a6844aabSmrg ;; 382a6844aabSmrg 3832c393a42Smrgtru64) 3842c393a42Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 385ca08ab68Smrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 3862c393a42Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 387ca08ab68Smrg # dependencies in 'foo.d' instead, so we check for that too. 3882c393a42Smrg # Subdirectories are respected. 3892c393a42Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3902c393a42Smrg test "x$dir" = "x$object" && dir= 3912c393a42Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3922c393a42Smrg 3932c393a42Smrg if test "$libtool" = yes; then 3942c393a42Smrg # With Tru64 cc, shared objects can also be used to make a 395a6844aabSmrg # static library. This mechanism is used in libtool 1.4 series to 3962c393a42Smrg # handle both shared and static libraries in a single compilation. 3972c393a42Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3982c393a42Smrg # 3992c393a42Smrg # With libtool 1.5 this exception was removed, and libtool now 4002c393a42Smrg # generates 2 separate objects for the 2 libraries. These two 401a6844aabSmrg # compilations output dependencies in $dir.libs/$base.o.d and 4022c393a42Smrg # in $dir$base.o.d. We have to check for both files, because 4032c393a42Smrg # one of the two compilations can be disabled. We should prefer 4042c393a42Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4052c393a42Smrg # automatically cleaned when .libs/ is deleted, while ignoring 4062c393a42Smrg # the former would cause a distcleancheck panic. 4072c393a42Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 4082c393a42Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 4092c393a42Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 4102c393a42Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 4112c393a42Smrg "$@" -Wc,-MD 4122c393a42Smrg else 4132c393a42Smrg tmpdepfile1=$dir$base.o.d 4142c393a42Smrg tmpdepfile2=$dir$base.d 4152c393a42Smrg tmpdepfile3=$dir$base.d 4162c393a42Smrg tmpdepfile4=$dir$base.d 4172c393a42Smrg "$@" -MD 4182c393a42Smrg fi 4192c393a42Smrg 4202c393a42Smrg stat=$? 4212c393a42Smrg if test $stat -eq 0; then : 4222c393a42Smrg else 4232c393a42Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4242c393a42Smrg exit $stat 4252c393a42Smrg fi 4262c393a42Smrg 4272c393a42Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4282c393a42Smrg do 4292c393a42Smrg test -f "$tmpdepfile" && break 4302c393a42Smrg done 4312c393a42Smrg if test -f "$tmpdepfile"; then 4322c393a42Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 433ca08ab68Smrg sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4342c393a42Smrg else 4352c393a42Smrg echo "#dummy" > "$depfile" 4362c393a42Smrg fi 4372c393a42Smrg rm -f "$tmpdepfile" 4382c393a42Smrg ;; 4392c393a42Smrg 440ca08ab68Smrgmsvc7) 441ca08ab68Smrg if test "$libtool" = yes; then 442ca08ab68Smrg showIncludes=-Wc,-showIncludes 443ca08ab68Smrg else 444ca08ab68Smrg showIncludes=-showIncludes 445ca08ab68Smrg fi 446ca08ab68Smrg "$@" $showIncludes > "$tmpdepfile" 447ca08ab68Smrg stat=$? 448ca08ab68Smrg grep -v '^Note: including file: ' "$tmpdepfile" 449ca08ab68Smrg if test "$stat" = 0; then : 450ca08ab68Smrg else 451ca08ab68Smrg rm -f "$tmpdepfile" 452ca08ab68Smrg exit $stat 453ca08ab68Smrg fi 454ca08ab68Smrg rm -f "$depfile" 455ca08ab68Smrg echo "$object : \\" > "$depfile" 456ca08ab68Smrg # The first sed program below extracts the file names and escapes 457ca08ab68Smrg # backslashes for cygpath. The second sed program outputs the file 458ca08ab68Smrg # name when reading, but also accumulates all include files in the 459ca08ab68Smrg # hold buffer in order to output them again at the end. This only 460ca08ab68Smrg # works with sed implementations that can handle large buffers. 461ca08ab68Smrg sed < "$tmpdepfile" -n ' 462ca08ab68Smrg/^Note: including file: *\(.*\)/ { 463ca08ab68Smrg s//\1/ 464ca08ab68Smrg s/\\/\\\\/g 465ca08ab68Smrg p 466ca08ab68Smrg}' | $cygpath_u | sort -u | sed -n ' 467ca08ab68Smrgs/ /\\ /g 468ca08ab68Smrgs/\(.*\)/'"$tab"'\1 \\/p 469ca08ab68Smrgs/.\(.*\) \\/\1:/ 470ca08ab68SmrgH 471ca08ab68Smrg$ { 472ca08ab68Smrg s/.*/'"$tab"'/ 473ca08ab68Smrg G 474ca08ab68Smrg p 475ca08ab68Smrg}' >> "$depfile" 476ca08ab68Smrg rm -f "$tmpdepfile" 477ca08ab68Smrg ;; 478ca08ab68Smrg 479ca08ab68Smrgmsvc7msys) 480ca08ab68Smrg # This case exists only to let depend.m4 do its work. It works by 481ca08ab68Smrg # looking at the text of this script. This case will never be run, 482ca08ab68Smrg # since it is checked for above. 483ca08ab68Smrg exit 1 484ca08ab68Smrg ;; 485ca08ab68Smrg 4862c393a42Smrg#nosideeffect) 4872c393a42Smrg # This comment above is used by automake to tell side-effect 4882c393a42Smrg # dependency tracking mechanisms from slower ones. 4892c393a42Smrg 4902c393a42Smrgdashmstdout) 4912c393a42Smrg # Important note: in order to support this mode, a compiler *must* 4922c393a42Smrg # always write the preprocessed file to stdout, regardless of -o. 4932c393a42Smrg "$@" || exit $? 4942c393a42Smrg 4952c393a42Smrg # Remove the call to Libtool. 4962c393a42Smrg if test "$libtool" = yes; then 497a6844aabSmrg while test "X$1" != 'X--mode=compile'; do 4982c393a42Smrg shift 4992c393a42Smrg done 5002c393a42Smrg shift 5012c393a42Smrg fi 5022c393a42Smrg 503ca08ab68Smrg # Remove '-o $object'. 5042c393a42Smrg IFS=" " 5052c393a42Smrg for arg 5062c393a42Smrg do 5072c393a42Smrg case $arg in 5082c393a42Smrg -o) 5092c393a42Smrg shift 5102c393a42Smrg ;; 5112c393a42Smrg $object) 5122c393a42Smrg shift 5132c393a42Smrg ;; 5142c393a42Smrg *) 5152c393a42Smrg set fnord "$@" "$arg" 5162c393a42Smrg shift # fnord 5172c393a42Smrg shift # $arg 5182c393a42Smrg ;; 5192c393a42Smrg esac 5202c393a42Smrg done 5212c393a42Smrg 5222c393a42Smrg test -z "$dashmflag" && dashmflag=-M 523ca08ab68Smrg # Require at least two characters before searching for ':' 5242c393a42Smrg # in the target name. This is to cope with DOS-style filenames: 525ca08ab68Smrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 5262c393a42Smrg "$@" $dashmflag | 527ca08ab68Smrg sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" 5282c393a42Smrg rm -f "$depfile" 5292c393a42Smrg cat < "$tmpdepfile" > "$depfile" 530ca08ab68Smrg tr ' ' "$nl" < "$tmpdepfile" | \ 5312c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5322c393a42Smrg## correctly. Breaking it into two sed invocations is a workaround. 5332c393a42Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5342c393a42Smrg rm -f "$tmpdepfile" 5352c393a42Smrg ;; 5362c393a42Smrg 5372c393a42SmrgdashXmstdout) 5382c393a42Smrg # This case only exists to satisfy depend.m4. It is never actually 5392c393a42Smrg # run, as this mode is specially recognized in the preamble. 5402c393a42Smrg exit 1 5412c393a42Smrg ;; 5422c393a42Smrg 5432c393a42Smrgmakedepend) 5442c393a42Smrg "$@" || exit $? 5452c393a42Smrg # Remove any Libtool call 5462c393a42Smrg if test "$libtool" = yes; then 547a6844aabSmrg while test "X$1" != 'X--mode=compile'; do 5482c393a42Smrg shift 5492c393a42Smrg done 5502c393a42Smrg shift 5512c393a42Smrg fi 5522c393a42Smrg # X makedepend 5532c393a42Smrg shift 554a6844aabSmrg cleared=no eat=no 555a6844aabSmrg for arg 556a6844aabSmrg do 5572c393a42Smrg case $cleared in 5582c393a42Smrg no) 5592c393a42Smrg set ""; shift 5602c393a42Smrg cleared=yes ;; 5612c393a42Smrg esac 562a6844aabSmrg if test $eat = yes; then 563a6844aabSmrg eat=no 564a6844aabSmrg continue 565a6844aabSmrg fi 5662c393a42Smrg case "$arg" in 5672c393a42Smrg -D*|-I*) 5682c393a42Smrg set fnord "$@" "$arg"; shift ;; 5692c393a42Smrg # Strip any option that makedepend may not understand. Remove 5702c393a42Smrg # the object too, otherwise makedepend will parse it as a source file. 571a6844aabSmrg -arch) 572a6844aabSmrg eat=yes ;; 5732c393a42Smrg -*|$object) 5742c393a42Smrg ;; 5752c393a42Smrg *) 5762c393a42Smrg set fnord "$@" "$arg"; shift ;; 5772c393a42Smrg esac 5782c393a42Smrg done 579a6844aabSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5802c393a42Smrg touch "$tmpdepfile" 5812c393a42Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5822c393a42Smrg rm -f "$depfile" 583ca08ab68Smrg # makedepend may prepend the VPATH from the source file name to the object. 584ca08ab68Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 585ca08ab68Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 586ca08ab68Smrg sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ 5872c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5882c393a42Smrg## correctly. Breaking it into two sed invocations is a workaround. 5892c393a42Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5902c393a42Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5912c393a42Smrg ;; 5922c393a42Smrg 5932c393a42Smrgcpp) 5942c393a42Smrg # Important note: in order to support this mode, a compiler *must* 5952c393a42Smrg # always write the preprocessed file to stdout. 5962c393a42Smrg "$@" || exit $? 5972c393a42Smrg 5982c393a42Smrg # Remove the call to Libtool. 5992c393a42Smrg if test "$libtool" = yes; then 600a6844aabSmrg while test "X$1" != 'X--mode=compile'; do 6012c393a42Smrg shift 6022c393a42Smrg done 6032c393a42Smrg shift 6042c393a42Smrg fi 6052c393a42Smrg 606ca08ab68Smrg # Remove '-o $object'. 6072c393a42Smrg IFS=" " 6082c393a42Smrg for arg 6092c393a42Smrg do 6102c393a42Smrg case $arg in 6112c393a42Smrg -o) 6122c393a42Smrg shift 6132c393a42Smrg ;; 6142c393a42Smrg $object) 6152c393a42Smrg shift 6162c393a42Smrg ;; 6172c393a42Smrg *) 6182c393a42Smrg set fnord "$@" "$arg" 6192c393a42Smrg shift # fnord 6202c393a42Smrg shift # $arg 6212c393a42Smrg ;; 6222c393a42Smrg esac 6232c393a42Smrg done 6242c393a42Smrg 6252c393a42Smrg "$@" -E | 6262c393a42Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 6272c393a42Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 6282c393a42Smrg sed '$ s: \\$::' > "$tmpdepfile" 6292c393a42Smrg rm -f "$depfile" 6302c393a42Smrg echo "$object : \\" > "$depfile" 6312c393a42Smrg cat < "$tmpdepfile" >> "$depfile" 6322c393a42Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6332c393a42Smrg rm -f "$tmpdepfile" 6342c393a42Smrg ;; 6352c393a42Smrg 6362c393a42Smrgmsvisualcpp) 6372c393a42Smrg # Important note: in order to support this mode, a compiler *must* 638a6844aabSmrg # always write the preprocessed file to stdout. 6392c393a42Smrg "$@" || exit $? 640a6844aabSmrg 641a6844aabSmrg # Remove the call to Libtool. 642a6844aabSmrg if test "$libtool" = yes; then 643a6844aabSmrg while test "X$1" != 'X--mode=compile'; do 644a6844aabSmrg shift 645a6844aabSmrg done 646a6844aabSmrg shift 647a6844aabSmrg fi 648a6844aabSmrg 6492c393a42Smrg IFS=" " 6502c393a42Smrg for arg 6512c393a42Smrg do 6522c393a42Smrg case "$arg" in 653a6844aabSmrg -o) 654a6844aabSmrg shift 655a6844aabSmrg ;; 656a6844aabSmrg $object) 657a6844aabSmrg shift 658a6844aabSmrg ;; 6592c393a42Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 6602c393a42Smrg set fnord "$@" 6612c393a42Smrg shift 6622c393a42Smrg shift 6632c393a42Smrg ;; 6642c393a42Smrg *) 6652c393a42Smrg set fnord "$@" "$arg" 6662c393a42Smrg shift 6672c393a42Smrg shift 6682c393a42Smrg ;; 6692c393a42Smrg esac 6702c393a42Smrg done 671a6844aabSmrg "$@" -E 2>/dev/null | 672a6844aabSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 6732c393a42Smrg rm -f "$depfile" 6742c393a42Smrg echo "$object : \\" > "$depfile" 675ca08ab68Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 676ca08ab68Smrg echo "$tab" >> "$depfile" 677a6844aabSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6782c393a42Smrg rm -f "$tmpdepfile" 6792c393a42Smrg ;; 6802c393a42Smrg 681a6844aabSmrgmsvcmsys) 682a6844aabSmrg # This case exists only to let depend.m4 do its work. It works by 683a6844aabSmrg # looking at the text of this script. This case will never be run, 684a6844aabSmrg # since it is checked for above. 685a6844aabSmrg exit 1 686a6844aabSmrg ;; 687a6844aabSmrg 6882c393a42Smrgnone) 6892c393a42Smrg exec "$@" 6902c393a42Smrg ;; 6912c393a42Smrg 6922c393a42Smrg*) 6932c393a42Smrg echo "Unknown depmode $depmode" 1>&2 6942c393a42Smrg exit 1 6952c393a42Smrg ;; 6962c393a42Smrgesac 6972c393a42Smrg 6982c393a42Smrgexit 0 6992c393a42Smrg 7002c393a42Smrg# Local Variables: 7012c393a42Smrg# mode: shell-script 7022c393a42Smrg# sh-indentation: 2 7032c393a42Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 7042c393a42Smrg# time-stamp-start: "scriptversion=" 7052c393a42Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 706a6844aabSmrg# time-stamp-time-zone: "UTC" 707a6844aabSmrg# time-stamp-end: "; # UTC" 7082c393a42Smrg# End: 709