depcomp revision b40a6198
145bc899bSmrg#! /bin/sh 245bc899bSmrg# depcomp - compile a program generating dependencies as side-effects 345bc899bSmrg 4b40a6198Smrgscriptversion=2011-12-04.11; # UTC 545bc899bSmrg 6b40a6198Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7b40a6198Smrg# 2011 Free Software Foundation, Inc. 845bc899bSmrg 945bc899bSmrg# This program is free software; you can redistribute it and/or modify 1045bc899bSmrg# it under the terms of the GNU General Public License as published by 1145bc899bSmrg# the Free Software Foundation; either version 2, or (at your option) 1245bc899bSmrg# any later version. 1345bc899bSmrg 1445bc899bSmrg# This program is distributed in the hope that it will be useful, 1545bc899bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1645bc899bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1745bc899bSmrg# GNU General Public License for more details. 1845bc899bSmrg 1945bc899bSmrg# You should have received a copy of the GNU General Public License 20b40a6198Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2145bc899bSmrg 2245bc899bSmrg# As a special exception to the GNU General Public License, if you 2345bc899bSmrg# distribute this file as part of a program that contains a 2445bc899bSmrg# configuration script generated by Autoconf, you may include it under 2545bc899bSmrg# the same distribution terms that you use for the rest of that program. 2645bc899bSmrg 2745bc899bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2845bc899bSmrg 2945bc899bSmrgcase $1 in 3045bc899bSmrg '') 3145bc899bSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3245bc899bSmrg exit 1; 3345bc899bSmrg ;; 3445bc899bSmrg -h | --h*) 3545bc899bSmrg cat <<\EOF 3645bc899bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3745bc899bSmrg 3845bc899bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3945bc899bSmrgas side-effects. 4045bc899bSmrg 4145bc899bSmrgEnvironment variables: 4245bc899bSmrg depmode Dependency tracking mode. 4345bc899bSmrg source Source file read by `PROGRAMS ARGS'. 4445bc899bSmrg object Object file output by `PROGRAMS ARGS'. 4545bc899bSmrg DEPDIR directory where to store dependencies. 4645bc899bSmrg depfile Dependency file to output. 47b40a6198Smrg tmpdepfile Temporary file to use when outputting dependencies. 4845bc899bSmrg libtool Whether libtool is used (yes/no). 4945bc899bSmrg 5045bc899bSmrgReport bugs to <bug-automake@gnu.org>. 5145bc899bSmrgEOF 5245bc899bSmrg exit $? 5345bc899bSmrg ;; 5445bc899bSmrg -v | --v*) 5545bc899bSmrg echo "depcomp $scriptversion" 5645bc899bSmrg exit $? 5745bc899bSmrg ;; 5845bc899bSmrgesac 5945bc899bSmrg 6045bc899bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6145bc899bSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6245bc899bSmrg exit 1 6345bc899bSmrgfi 6445bc899bSmrg 6545bc899bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6645bc899bSmrgdepfile=${depfile-`echo "$object" | 6745bc899bSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6845bc899bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6945bc899bSmrg 7045bc899bSmrgrm -f "$tmpdepfile" 7145bc899bSmrg 7245bc899bSmrg# Some modes work just like other modes, but use different flags. We 7345bc899bSmrg# parameterize here, but still list the modes in the big case below, 7445bc899bSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7545bc899bSmrg# here, because this file can only contain one case statement. 7645bc899bSmrgif test "$depmode" = hp; then 7745bc899bSmrg # HP compiler uses -M and no extra arg. 7845bc899bSmrg gccflag=-M 7945bc899bSmrg depmode=gcc 8045bc899bSmrgfi 8145bc899bSmrg 8245bc899bSmrgif test "$depmode" = dashXmstdout; then 8345bc899bSmrg # This is just like dashmstdout with a different argument. 8445bc899bSmrg dashmflag=-xM 8545bc899bSmrg depmode=dashmstdout 8645bc899bSmrgfi 8745bc899bSmrg 88b40a6198Smrgcygpath_u="cygpath -u -f -" 89b40a6198Smrgif test "$depmode" = msvcmsys; then 90b40a6198Smrg # This is just like msvisualcpp but w/o cygpath translation. 91b40a6198Smrg # Just convert the backslash-escaped backslashes to single forward 92b40a6198Smrg # slashes to satisfy depend.m4 93b40a6198Smrg cygpath_u='sed s,\\\\,/,g' 94b40a6198Smrg depmode=msvisualcpp 95b40a6198Smrgfi 96b40a6198Smrg 97b40a6198Smrgif test "$depmode" = msvc7msys; then 98b40a6198Smrg # This is just like msvc7 but w/o cygpath translation. 99b40a6198Smrg # Just convert the backslash-escaped backslashes to single forward 100b40a6198Smrg # slashes to satisfy depend.m4 101b40a6198Smrg cygpath_u='sed s,\\\\,/,g' 102b40a6198Smrg depmode=msvc7 103b40a6198Smrgfi 104b40a6198Smrg 10545bc899bSmrgcase "$depmode" in 10645bc899bSmrggcc3) 10745bc899bSmrg## gcc 3 implements dependency tracking that does exactly what 10845bc899bSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10945bc899bSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 11050f2e948Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 11150f2e948Smrg## the command line argument order; so add the flags where they 11250f2e948Smrg## appear in depend2.am. Note that the slowdown incurred here 11350f2e948Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 11450f2e948Smrg for arg 11550f2e948Smrg do 11650f2e948Smrg case $arg in 11750f2e948Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11850f2e948Smrg *) set fnord "$@" "$arg" ;; 11950f2e948Smrg esac 12050f2e948Smrg shift # fnord 12150f2e948Smrg shift # $arg 12250f2e948Smrg done 12350f2e948Smrg "$@" 12445bc899bSmrg stat=$? 12545bc899bSmrg if test $stat -eq 0; then : 12645bc899bSmrg else 12745bc899bSmrg rm -f "$tmpdepfile" 12845bc899bSmrg exit $stat 12945bc899bSmrg fi 13045bc899bSmrg mv "$tmpdepfile" "$depfile" 13145bc899bSmrg ;; 13245bc899bSmrg 13345bc899bSmrggcc) 13445bc899bSmrg## There are various ways to get dependency output from gcc. Here's 13545bc899bSmrg## why we pick this rather obscure method: 13645bc899bSmrg## - Don't want to use -MD because we'd like the dependencies to end 13745bc899bSmrg## up in a subdir. Having to rename by hand is ugly. 13845bc899bSmrg## (We might end up doing this anyway to support other compilers.) 13945bc899bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 14045bc899bSmrg## -MM, not -M (despite what the docs say). 14145bc899bSmrg## - Using -M directly means running the compiler twice (even worse 14245bc899bSmrg## than renaming). 14345bc899bSmrg if test -z "$gccflag"; then 14445bc899bSmrg gccflag=-MD, 14545bc899bSmrg fi 14645bc899bSmrg "$@" -Wp,"$gccflag$tmpdepfile" 14745bc899bSmrg stat=$? 14845bc899bSmrg if test $stat -eq 0; then : 14945bc899bSmrg else 15045bc899bSmrg rm -f "$tmpdepfile" 15145bc899bSmrg exit $stat 15245bc899bSmrg fi 15345bc899bSmrg rm -f "$depfile" 15445bc899bSmrg echo "$object : \\" > "$depfile" 15545bc899bSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 15645bc899bSmrg## The second -e expression handles DOS-style file names with drive letters. 15745bc899bSmrg sed -e 's/^[^:]*: / /' \ 15845bc899bSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15945bc899bSmrg## This next piece of magic avoids the `deleted header file' problem. 16045bc899bSmrg## The problem is that when a header file which appears in a .P file 16145bc899bSmrg## is deleted, the dependency causes make to die (because there is 16245bc899bSmrg## typically no way to rebuild the header). We avoid this by adding 16345bc899bSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 16445bc899bSmrg## this for us directly. 16545bc899bSmrg tr ' ' ' 16645bc899bSmrg' < "$tmpdepfile" | 16745bc899bSmrg## Some versions of gcc put a space before the `:'. On the theory 16845bc899bSmrg## that the space means something, we add a space to the output as 169b40a6198Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 170b40a6198Smrg## to the object. Take care to not repeat it in the output. 17145bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 17245bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 173b40a6198Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 174b40a6198Smrg | sed -e 's/$/ :/' >> "$depfile" 17545bc899bSmrg rm -f "$tmpdepfile" 17645bc899bSmrg ;; 17745bc899bSmrg 17845bc899bSmrghp) 17945bc899bSmrg # This case exists only to let depend.m4 do its work. It works by 18045bc899bSmrg # looking at the text of this script. This case will never be run, 18145bc899bSmrg # since it is checked for above. 18245bc899bSmrg exit 1 18345bc899bSmrg ;; 18445bc899bSmrg 18545bc899bSmrgsgi) 18645bc899bSmrg if test "$libtool" = yes; then 18745bc899bSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 18845bc899bSmrg else 18945bc899bSmrg "$@" -MDupdate "$tmpdepfile" 19045bc899bSmrg fi 19145bc899bSmrg stat=$? 19245bc899bSmrg if test $stat -eq 0; then : 19345bc899bSmrg else 19445bc899bSmrg rm -f "$tmpdepfile" 19545bc899bSmrg exit $stat 19645bc899bSmrg fi 19745bc899bSmrg rm -f "$depfile" 19845bc899bSmrg 19945bc899bSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 20045bc899bSmrg echo "$object : \\" > "$depfile" 20145bc899bSmrg 20245bc899bSmrg # Clip off the initial element (the dependent). Don't try to be 20345bc899bSmrg # clever and replace this with sed code, as IRIX sed won't handle 20445bc899bSmrg # lines with more than a fixed number of characters (4096 in 20545bc899bSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 20645bc899bSmrg # the IRIX cc adds comments like `#:fec' to the end of the 20745bc899bSmrg # dependency line. 20845bc899bSmrg tr ' ' ' 20945bc899bSmrg' < "$tmpdepfile" \ 21045bc899bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 21145bc899bSmrg tr ' 212b40a6198Smrg' ' ' >> "$depfile" 213b40a6198Smrg echo >> "$depfile" 21445bc899bSmrg 21545bc899bSmrg # The second pass generates a dummy entry for each header file. 21645bc899bSmrg tr ' ' ' 21745bc899bSmrg' < "$tmpdepfile" \ 21845bc899bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 219b40a6198Smrg >> "$depfile" 22045bc899bSmrg else 22145bc899bSmrg # The sourcefile does not contain any dependencies, so just 22245bc899bSmrg # store a dummy comment line, to avoid errors with the Makefile 22345bc899bSmrg # "include basename.Plo" scheme. 22445bc899bSmrg echo "#dummy" > "$depfile" 22545bc899bSmrg fi 22645bc899bSmrg rm -f "$tmpdepfile" 22745bc899bSmrg ;; 22845bc899bSmrg 22945bc899bSmrgaix) 23045bc899bSmrg # The C for AIX Compiler uses -M and outputs the dependencies 23145bc899bSmrg # in a .u file. In older versions, this file always lives in the 23245bc899bSmrg # current directory. Also, the AIX compiler puts `$object:' at the 23345bc899bSmrg # start of each line; $object doesn't have directory information. 23445bc899bSmrg # Version 6 uses the directory in both cases. 23550f2e948Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 23650f2e948Smrg test "x$dir" = "x$object" && dir= 23750f2e948Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 23845bc899bSmrg if test "$libtool" = yes; then 23950f2e948Smrg tmpdepfile1=$dir$base.u 24050f2e948Smrg tmpdepfile2=$base.u 24150f2e948Smrg tmpdepfile3=$dir.libs/$base.u 24245bc899bSmrg "$@" -Wc,-M 24345bc899bSmrg else 24450f2e948Smrg tmpdepfile1=$dir$base.u 24550f2e948Smrg tmpdepfile2=$dir$base.u 24650f2e948Smrg tmpdepfile3=$dir$base.u 24745bc899bSmrg "$@" -M 24845bc899bSmrg fi 24945bc899bSmrg stat=$? 25045bc899bSmrg 25145bc899bSmrg if test $stat -eq 0; then : 25245bc899bSmrg else 25350f2e948Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25445bc899bSmrg exit $stat 25545bc899bSmrg fi 25645bc899bSmrg 25750f2e948Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25850f2e948Smrg do 25950f2e948Smrg test -f "$tmpdepfile" && break 26050f2e948Smrg done 26145bc899bSmrg if test -f "$tmpdepfile"; then 26245bc899bSmrg # Each line is of the form `foo.o: dependent.h'. 26345bc899bSmrg # Do two passes, one to just change these to 26445bc899bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 26550f2e948Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 26650f2e948Smrg # That's a tab and a space in the []. 26750f2e948Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 26845bc899bSmrg else 26945bc899bSmrg # The sourcefile does not contain any dependencies, so just 27045bc899bSmrg # store a dummy comment line, to avoid errors with the Makefile 27145bc899bSmrg # "include basename.Plo" scheme. 27245bc899bSmrg echo "#dummy" > "$depfile" 27345bc899bSmrg fi 27445bc899bSmrg rm -f "$tmpdepfile" 27545bc899bSmrg ;; 27645bc899bSmrg 27745bc899bSmrgicc) 27845bc899bSmrg # Intel's C compiler understands `-MD -MF file'. However on 27945bc899bSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 28045bc899bSmrg # ICC 7.0 will fill foo.d with something like 28145bc899bSmrg # foo.o: sub/foo.c 28245bc899bSmrg # foo.o: sub/foo.h 28345bc899bSmrg # which is wrong. We want: 28445bc899bSmrg # sub/foo.o: sub/foo.c 28545bc899bSmrg # sub/foo.o: sub/foo.h 28645bc899bSmrg # sub/foo.c: 28745bc899bSmrg # sub/foo.h: 28845bc899bSmrg # ICC 7.1 will output 28945bc899bSmrg # foo.o: sub/foo.c sub/foo.h 29045bc899bSmrg # and will wrap long lines using \ : 29145bc899bSmrg # foo.o: sub/foo.c ... \ 29245bc899bSmrg # sub/foo.h ... \ 29345bc899bSmrg # ... 29445bc899bSmrg 29545bc899bSmrg "$@" -MD -MF "$tmpdepfile" 29645bc899bSmrg stat=$? 29745bc899bSmrg if test $stat -eq 0; then : 29845bc899bSmrg else 29945bc899bSmrg rm -f "$tmpdepfile" 30045bc899bSmrg exit $stat 30145bc899bSmrg fi 30245bc899bSmrg rm -f "$depfile" 30345bc899bSmrg # Each line is of the form `foo.o: dependent.h', 30445bc899bSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 30545bc899bSmrg # Do two passes, one to just change these to 30645bc899bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 30745bc899bSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 30845bc899bSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 30945bc899bSmrg # correctly. Breaking it into two sed invocations is a workaround. 31045bc899bSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 31145bc899bSmrg sed -e 's/$/ :/' >> "$depfile" 31245bc899bSmrg rm -f "$tmpdepfile" 31345bc899bSmrg ;; 31445bc899bSmrg 31550f2e948Smrghp2) 31650f2e948Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 31750f2e948Smrg # compilers, which have integrated preprocessors. The correct option 31850f2e948Smrg # to use with these is +Maked; it writes dependencies to a file named 31950f2e948Smrg # 'foo.d', which lands next to the object file, wherever that 32050f2e948Smrg # happens to be. 32150f2e948Smrg # Much of this is similar to the tru64 case; see comments there. 32250f2e948Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 32350f2e948Smrg test "x$dir" = "x$object" && dir= 32450f2e948Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 32550f2e948Smrg if test "$libtool" = yes; then 32650f2e948Smrg tmpdepfile1=$dir$base.d 32750f2e948Smrg tmpdepfile2=$dir.libs/$base.d 32850f2e948Smrg "$@" -Wc,+Maked 32950f2e948Smrg else 33050f2e948Smrg tmpdepfile1=$dir$base.d 33150f2e948Smrg tmpdepfile2=$dir$base.d 33250f2e948Smrg "$@" +Maked 33350f2e948Smrg fi 33450f2e948Smrg stat=$? 33550f2e948Smrg if test $stat -eq 0; then : 33650f2e948Smrg else 33750f2e948Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 33850f2e948Smrg exit $stat 33950f2e948Smrg fi 34050f2e948Smrg 34150f2e948Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 34250f2e948Smrg do 34350f2e948Smrg test -f "$tmpdepfile" && break 34450f2e948Smrg done 34550f2e948Smrg if test -f "$tmpdepfile"; then 34650f2e948Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 34750f2e948Smrg # Add `dependent.h:' lines. 348b40a6198Smrg sed -ne '2,${ 349b40a6198Smrg s/^ *// 350b40a6198Smrg s/ \\*$// 351b40a6198Smrg s/$/:/ 352b40a6198Smrg p 353b40a6198Smrg }' "$tmpdepfile" >> "$depfile" 35450f2e948Smrg else 35550f2e948Smrg echo "#dummy" > "$depfile" 35650f2e948Smrg fi 35750f2e948Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 35850f2e948Smrg ;; 35950f2e948Smrg 36045bc899bSmrgtru64) 36145bc899bSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 36245bc899bSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 36345bc899bSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 36445bc899bSmrg # dependencies in `foo.d' instead, so we check for that too. 36545bc899bSmrg # Subdirectories are respected. 36645bc899bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 36745bc899bSmrg test "x$dir" = "x$object" && dir= 36845bc899bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 36945bc899bSmrg 37045bc899bSmrg if test "$libtool" = yes; then 37145bc899bSmrg # With Tru64 cc, shared objects can also be used to make a 37250f2e948Smrg # static library. This mechanism is used in libtool 1.4 series to 37345bc899bSmrg # handle both shared and static libraries in a single compilation. 37445bc899bSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 37545bc899bSmrg # 37645bc899bSmrg # With libtool 1.5 this exception was removed, and libtool now 37745bc899bSmrg # generates 2 separate objects for the 2 libraries. These two 37850f2e948Smrg # compilations output dependencies in $dir.libs/$base.o.d and 37945bc899bSmrg # in $dir$base.o.d. We have to check for both files, because 38045bc899bSmrg # one of the two compilations can be disabled. We should prefer 38145bc899bSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 38245bc899bSmrg # automatically cleaned when .libs/ is deleted, while ignoring 38345bc899bSmrg # the former would cause a distcleancheck panic. 38445bc899bSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 38545bc899bSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 38645bc899bSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 38745bc899bSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 38845bc899bSmrg "$@" -Wc,-MD 38945bc899bSmrg else 39045bc899bSmrg tmpdepfile1=$dir$base.o.d 39145bc899bSmrg tmpdepfile2=$dir$base.d 39245bc899bSmrg tmpdepfile3=$dir$base.d 39345bc899bSmrg tmpdepfile4=$dir$base.d 39445bc899bSmrg "$@" -MD 39545bc899bSmrg fi 39645bc899bSmrg 39745bc899bSmrg stat=$? 39845bc899bSmrg if test $stat -eq 0; then : 39945bc899bSmrg else 40045bc899bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 40145bc899bSmrg exit $stat 40245bc899bSmrg fi 40345bc899bSmrg 40445bc899bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 40545bc899bSmrg do 40645bc899bSmrg test -f "$tmpdepfile" && break 40745bc899bSmrg done 40845bc899bSmrg if test -f "$tmpdepfile"; then 40945bc899bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 41045bc899bSmrg # That's a tab and a space in the []. 41145bc899bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 41245bc899bSmrg else 41345bc899bSmrg echo "#dummy" > "$depfile" 41445bc899bSmrg fi 41545bc899bSmrg rm -f "$tmpdepfile" 41645bc899bSmrg ;; 41745bc899bSmrg 418b40a6198Smrgmsvc7) 419b40a6198Smrg if test "$libtool" = yes; then 420b40a6198Smrg showIncludes=-Wc,-showIncludes 421b40a6198Smrg else 422b40a6198Smrg showIncludes=-showIncludes 423b40a6198Smrg fi 424b40a6198Smrg "$@" $showIncludes > "$tmpdepfile" 425b40a6198Smrg stat=$? 426b40a6198Smrg grep -v '^Note: including file: ' "$tmpdepfile" 427b40a6198Smrg if test "$stat" = 0; then : 428b40a6198Smrg else 429b40a6198Smrg rm -f "$tmpdepfile" 430b40a6198Smrg exit $stat 431b40a6198Smrg fi 432b40a6198Smrg rm -f "$depfile" 433b40a6198Smrg echo "$object : \\" > "$depfile" 434b40a6198Smrg # The first sed program below extracts the file names and escapes 435b40a6198Smrg # backslashes for cygpath. The second sed program outputs the file 436b40a6198Smrg # name when reading, but also accumulates all include files in the 437b40a6198Smrg # hold buffer in order to output them again at the end. This only 438b40a6198Smrg # works with sed implementations that can handle large buffers. 439b40a6198Smrg sed < "$tmpdepfile" -n ' 440b40a6198Smrg/^Note: including file: *\(.*\)/ { 441b40a6198Smrg s//\1/ 442b40a6198Smrg s/\\/\\\\/g 443b40a6198Smrg p 444b40a6198Smrg}' | $cygpath_u | sort -u | sed -n ' 445b40a6198Smrgs/ /\\ /g 446b40a6198Smrgs/\(.*\)/ \1 \\/p 447b40a6198Smrgs/.\(.*\) \\/\1:/ 448b40a6198SmrgH 449b40a6198Smrg$ { 450b40a6198Smrg s/.*/ / 451b40a6198Smrg G 452b40a6198Smrg p 453b40a6198Smrg}' >> "$depfile" 454b40a6198Smrg rm -f "$tmpdepfile" 455b40a6198Smrg ;; 456b40a6198Smrg 457b40a6198Smrgmsvc7msys) 458b40a6198Smrg # This case exists only to let depend.m4 do its work. It works by 459b40a6198Smrg # looking at the text of this script. This case will never be run, 460b40a6198Smrg # since it is checked for above. 461b40a6198Smrg exit 1 462b40a6198Smrg ;; 463b40a6198Smrg 46445bc899bSmrg#nosideeffect) 46545bc899bSmrg # This comment above is used by automake to tell side-effect 46645bc899bSmrg # dependency tracking mechanisms from slower ones. 46745bc899bSmrg 46845bc899bSmrgdashmstdout) 46945bc899bSmrg # Important note: in order to support this mode, a compiler *must* 47045bc899bSmrg # always write the preprocessed file to stdout, regardless of -o. 47145bc899bSmrg "$@" || exit $? 47245bc899bSmrg 47345bc899bSmrg # Remove the call to Libtool. 47445bc899bSmrg if test "$libtool" = yes; then 475b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 47645bc899bSmrg shift 47745bc899bSmrg done 47845bc899bSmrg shift 47945bc899bSmrg fi 48045bc899bSmrg 48145bc899bSmrg # Remove `-o $object'. 48245bc899bSmrg IFS=" " 48345bc899bSmrg for arg 48445bc899bSmrg do 48545bc899bSmrg case $arg in 48645bc899bSmrg -o) 48745bc899bSmrg shift 48845bc899bSmrg ;; 48945bc899bSmrg $object) 49045bc899bSmrg shift 49145bc899bSmrg ;; 49245bc899bSmrg *) 49345bc899bSmrg set fnord "$@" "$arg" 49445bc899bSmrg shift # fnord 49545bc899bSmrg shift # $arg 49645bc899bSmrg ;; 49745bc899bSmrg esac 49845bc899bSmrg done 49945bc899bSmrg 50045bc899bSmrg test -z "$dashmflag" && dashmflag=-M 50145bc899bSmrg # Require at least two characters before searching for `:' 50245bc899bSmrg # in the target name. This is to cope with DOS-style filenames: 50345bc899bSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 50445bc899bSmrg "$@" $dashmflag | 50545bc899bSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 50645bc899bSmrg rm -f "$depfile" 50745bc899bSmrg cat < "$tmpdepfile" > "$depfile" 50845bc899bSmrg tr ' ' ' 50945bc899bSmrg' < "$tmpdepfile" | \ 51045bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 51145bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 51245bc899bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51345bc899bSmrg rm -f "$tmpdepfile" 51445bc899bSmrg ;; 51545bc899bSmrg 51645bc899bSmrgdashXmstdout) 51745bc899bSmrg # This case only exists to satisfy depend.m4. It is never actually 51845bc899bSmrg # run, as this mode is specially recognized in the preamble. 51945bc899bSmrg exit 1 52045bc899bSmrg ;; 52145bc899bSmrg 52245bc899bSmrgmakedepend) 52345bc899bSmrg "$@" || exit $? 52445bc899bSmrg # Remove any Libtool call 52545bc899bSmrg if test "$libtool" = yes; then 526b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 52745bc899bSmrg shift 52845bc899bSmrg done 52945bc899bSmrg shift 53045bc899bSmrg fi 53145bc899bSmrg # X makedepend 53245bc899bSmrg shift 533b40a6198Smrg cleared=no eat=no 534b40a6198Smrg for arg 535b40a6198Smrg do 53645bc899bSmrg case $cleared in 53745bc899bSmrg no) 53845bc899bSmrg set ""; shift 53945bc899bSmrg cleared=yes ;; 54045bc899bSmrg esac 541b40a6198Smrg if test $eat = yes; then 542b40a6198Smrg eat=no 543b40a6198Smrg continue 544b40a6198Smrg fi 54545bc899bSmrg case "$arg" in 54645bc899bSmrg -D*|-I*) 54745bc899bSmrg set fnord "$@" "$arg"; shift ;; 54845bc899bSmrg # Strip any option that makedepend may not understand. Remove 54945bc899bSmrg # the object too, otherwise makedepend will parse it as a source file. 550b40a6198Smrg -arch) 551b40a6198Smrg eat=yes ;; 55245bc899bSmrg -*|$object) 55345bc899bSmrg ;; 55445bc899bSmrg *) 55545bc899bSmrg set fnord "$@" "$arg"; shift ;; 55645bc899bSmrg esac 55745bc899bSmrg done 558b40a6198Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 55945bc899bSmrg touch "$tmpdepfile" 56045bc899bSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 56145bc899bSmrg rm -f "$depfile" 562b40a6198Smrg # makedepend may prepend the VPATH from the source file name to the object. 563b40a6198Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 564b40a6198Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 56545bc899bSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 56645bc899bSmrg' | \ 56745bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 56845bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 56945bc899bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 57045bc899bSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 57145bc899bSmrg ;; 57245bc899bSmrg 57345bc899bSmrgcpp) 57445bc899bSmrg # Important note: in order to support this mode, a compiler *must* 57545bc899bSmrg # always write the preprocessed file to stdout. 57645bc899bSmrg "$@" || exit $? 57745bc899bSmrg 57845bc899bSmrg # Remove the call to Libtool. 57945bc899bSmrg if test "$libtool" = yes; then 580b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 58145bc899bSmrg shift 58245bc899bSmrg done 58345bc899bSmrg shift 58445bc899bSmrg fi 58545bc899bSmrg 58645bc899bSmrg # Remove `-o $object'. 58745bc899bSmrg IFS=" " 58845bc899bSmrg for arg 58945bc899bSmrg do 59045bc899bSmrg case $arg in 59145bc899bSmrg -o) 59245bc899bSmrg shift 59345bc899bSmrg ;; 59445bc899bSmrg $object) 59545bc899bSmrg shift 59645bc899bSmrg ;; 59745bc899bSmrg *) 59845bc899bSmrg set fnord "$@" "$arg" 59945bc899bSmrg shift # fnord 60045bc899bSmrg shift # $arg 60145bc899bSmrg ;; 60245bc899bSmrg esac 60345bc899bSmrg done 60445bc899bSmrg 60545bc899bSmrg "$@" -E | 60645bc899bSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 60745bc899bSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 60845bc899bSmrg sed '$ s: \\$::' > "$tmpdepfile" 60945bc899bSmrg rm -f "$depfile" 61045bc899bSmrg echo "$object : \\" > "$depfile" 61145bc899bSmrg cat < "$tmpdepfile" >> "$depfile" 61245bc899bSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 61345bc899bSmrg rm -f "$tmpdepfile" 61445bc899bSmrg ;; 61545bc899bSmrg 61645bc899bSmrgmsvisualcpp) 61745bc899bSmrg # Important note: in order to support this mode, a compiler *must* 618b40a6198Smrg # always write the preprocessed file to stdout. 61945bc899bSmrg "$@" || exit $? 620b40a6198Smrg 621b40a6198Smrg # Remove the call to Libtool. 622b40a6198Smrg if test "$libtool" = yes; then 623b40a6198Smrg while test "X$1" != 'X--mode=compile'; do 624b40a6198Smrg shift 625b40a6198Smrg done 626b40a6198Smrg shift 627b40a6198Smrg fi 628b40a6198Smrg 62945bc899bSmrg IFS=" " 63045bc899bSmrg for arg 63145bc899bSmrg do 63245bc899bSmrg case "$arg" in 633b40a6198Smrg -o) 634b40a6198Smrg shift 635b40a6198Smrg ;; 636b40a6198Smrg $object) 637b40a6198Smrg shift 638b40a6198Smrg ;; 63945bc899bSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 64045bc899bSmrg set fnord "$@" 64145bc899bSmrg shift 64245bc899bSmrg shift 64345bc899bSmrg ;; 64445bc899bSmrg *) 64545bc899bSmrg set fnord "$@" "$arg" 64645bc899bSmrg shift 64745bc899bSmrg shift 64845bc899bSmrg ;; 64945bc899bSmrg esac 65045bc899bSmrg done 651b40a6198Smrg "$@" -E 2>/dev/null | 652b40a6198Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 65345bc899bSmrg rm -f "$depfile" 65445bc899bSmrg echo "$object : \\" > "$depfile" 655b40a6198Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 65645bc899bSmrg echo " " >> "$depfile" 657b40a6198Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 65845bc899bSmrg rm -f "$tmpdepfile" 65945bc899bSmrg ;; 66045bc899bSmrg 661b40a6198Smrgmsvcmsys) 662b40a6198Smrg # This case exists only to let depend.m4 do its work. It works by 663b40a6198Smrg # looking at the text of this script. This case will never be run, 664b40a6198Smrg # since it is checked for above. 665b40a6198Smrg exit 1 666b40a6198Smrg ;; 667b40a6198Smrg 66845bc899bSmrgnone) 66945bc899bSmrg exec "$@" 67045bc899bSmrg ;; 67145bc899bSmrg 67245bc899bSmrg*) 67345bc899bSmrg echo "Unknown depmode $depmode" 1>&2 67445bc899bSmrg exit 1 67545bc899bSmrg ;; 67645bc899bSmrgesac 67745bc899bSmrg 67845bc899bSmrgexit 0 67945bc899bSmrg 68045bc899bSmrg# Local Variables: 68145bc899bSmrg# mode: shell-script 68245bc899bSmrg# sh-indentation: 2 68345bc899bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 68445bc899bSmrg# time-stamp-start: "scriptversion=" 68545bc899bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 686b40a6198Smrg# time-stamp-time-zone: "UTC" 687b40a6198Smrg# time-stamp-end: "; # UTC" 68845bc899bSmrg# End: 689