depcomp revision 50f2e948
145bc899bSmrg#! /bin/sh 245bc899bSmrg# depcomp - compile a program generating dependencies as side-effects 345bc899bSmrg 450f2e948Smrgscriptversion=2007-03-29.01 545bc899bSmrg 650f2e948Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 750f2e948Smrg# 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 2045bc899bSmrg# along with this program; if not, write to the Free Software 2145bc899bSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2245bc899bSmrg# 02110-1301, USA. 2345bc899bSmrg 2445bc899bSmrg# As a special exception to the GNU General Public License, if you 2545bc899bSmrg# distribute this file as part of a program that contains a 2645bc899bSmrg# configuration script generated by Autoconf, you may include it under 2745bc899bSmrg# the same distribution terms that you use for the rest of that program. 2845bc899bSmrg 2945bc899bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 3045bc899bSmrg 3145bc899bSmrgcase $1 in 3245bc899bSmrg '') 3345bc899bSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3445bc899bSmrg exit 1; 3545bc899bSmrg ;; 3645bc899bSmrg -h | --h*) 3745bc899bSmrg cat <<\EOF 3845bc899bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3945bc899bSmrg 4045bc899bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 4145bc899bSmrgas side-effects. 4245bc899bSmrg 4345bc899bSmrgEnvironment variables: 4445bc899bSmrg depmode Dependency tracking mode. 4545bc899bSmrg source Source file read by `PROGRAMS ARGS'. 4645bc899bSmrg object Object file output by `PROGRAMS ARGS'. 4745bc899bSmrg DEPDIR directory where to store dependencies. 4845bc899bSmrg depfile Dependency file to output. 4945bc899bSmrg tmpdepfile Temporary file to use when outputing dependencies. 5045bc899bSmrg libtool Whether libtool is used (yes/no). 5145bc899bSmrg 5245bc899bSmrgReport bugs to <bug-automake@gnu.org>. 5345bc899bSmrgEOF 5445bc899bSmrg exit $? 5545bc899bSmrg ;; 5645bc899bSmrg -v | --v*) 5745bc899bSmrg echo "depcomp $scriptversion" 5845bc899bSmrg exit $? 5945bc899bSmrg ;; 6045bc899bSmrgesac 6145bc899bSmrg 6245bc899bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6345bc899bSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6445bc899bSmrg exit 1 6545bc899bSmrgfi 6645bc899bSmrg 6745bc899bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6845bc899bSmrgdepfile=${depfile-`echo "$object" | 6945bc899bSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 7045bc899bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 7145bc899bSmrg 7245bc899bSmrgrm -f "$tmpdepfile" 7345bc899bSmrg 7445bc899bSmrg# Some modes work just like other modes, but use different flags. We 7545bc899bSmrg# parameterize here, but still list the modes in the big case below, 7645bc899bSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7745bc899bSmrg# here, because this file can only contain one case statement. 7845bc899bSmrgif test "$depmode" = hp; then 7945bc899bSmrg # HP compiler uses -M and no extra arg. 8045bc899bSmrg gccflag=-M 8145bc899bSmrg depmode=gcc 8245bc899bSmrgfi 8345bc899bSmrg 8445bc899bSmrgif test "$depmode" = dashXmstdout; then 8545bc899bSmrg # This is just like dashmstdout with a different argument. 8645bc899bSmrg dashmflag=-xM 8745bc899bSmrg depmode=dashmstdout 8845bc899bSmrgfi 8945bc899bSmrg 9045bc899bSmrgcase "$depmode" in 9145bc899bSmrggcc3) 9245bc899bSmrg## gcc 3 implements dependency tracking that does exactly what 9345bc899bSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 9445bc899bSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 9550f2e948Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 9650f2e948Smrg## the command line argument order; so add the flags where they 9750f2e948Smrg## appear in depend2.am. Note that the slowdown incurred here 9850f2e948Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 9950f2e948Smrg for arg 10050f2e948Smrg do 10150f2e948Smrg case $arg in 10250f2e948Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 10350f2e948Smrg *) set fnord "$@" "$arg" ;; 10450f2e948Smrg esac 10550f2e948Smrg shift # fnord 10650f2e948Smrg shift # $arg 10750f2e948Smrg done 10850f2e948Smrg "$@" 10945bc899bSmrg stat=$? 11045bc899bSmrg if test $stat -eq 0; then : 11145bc899bSmrg else 11245bc899bSmrg rm -f "$tmpdepfile" 11345bc899bSmrg exit $stat 11445bc899bSmrg fi 11545bc899bSmrg mv "$tmpdepfile" "$depfile" 11645bc899bSmrg ;; 11745bc899bSmrg 11845bc899bSmrggcc) 11945bc899bSmrg## There are various ways to get dependency output from gcc. Here's 12045bc899bSmrg## why we pick this rather obscure method: 12145bc899bSmrg## - Don't want to use -MD because we'd like the dependencies to end 12245bc899bSmrg## up in a subdir. Having to rename by hand is ugly. 12345bc899bSmrg## (We might end up doing this anyway to support other compilers.) 12445bc899bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 12545bc899bSmrg## -MM, not -M (despite what the docs say). 12645bc899bSmrg## - Using -M directly means running the compiler twice (even worse 12745bc899bSmrg## than renaming). 12845bc899bSmrg if test -z "$gccflag"; then 12945bc899bSmrg gccflag=-MD, 13045bc899bSmrg fi 13145bc899bSmrg "$@" -Wp,"$gccflag$tmpdepfile" 13245bc899bSmrg stat=$? 13345bc899bSmrg if test $stat -eq 0; then : 13445bc899bSmrg else 13545bc899bSmrg rm -f "$tmpdepfile" 13645bc899bSmrg exit $stat 13745bc899bSmrg fi 13845bc899bSmrg rm -f "$depfile" 13945bc899bSmrg echo "$object : \\" > "$depfile" 14045bc899bSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14145bc899bSmrg## The second -e expression handles DOS-style file names with drive letters. 14245bc899bSmrg sed -e 's/^[^:]*: / /' \ 14345bc899bSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 14445bc899bSmrg## This next piece of magic avoids the `deleted header file' problem. 14545bc899bSmrg## The problem is that when a header file which appears in a .P file 14645bc899bSmrg## is deleted, the dependency causes make to die (because there is 14745bc899bSmrg## typically no way to rebuild the header). We avoid this by adding 14845bc899bSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 14945bc899bSmrg## this for us directly. 15045bc899bSmrg tr ' ' ' 15145bc899bSmrg' < "$tmpdepfile" | 15245bc899bSmrg## Some versions of gcc put a space before the `:'. On the theory 15345bc899bSmrg## that the space means something, we add a space to the output as 15445bc899bSmrg## well. 15545bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 15645bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 15745bc899bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 15845bc899bSmrg rm -f "$tmpdepfile" 15945bc899bSmrg ;; 16045bc899bSmrg 16145bc899bSmrghp) 16245bc899bSmrg # This case exists only to let depend.m4 do its work. It works by 16345bc899bSmrg # looking at the text of this script. This case will never be run, 16445bc899bSmrg # since it is checked for above. 16545bc899bSmrg exit 1 16645bc899bSmrg ;; 16745bc899bSmrg 16845bc899bSmrgsgi) 16945bc899bSmrg if test "$libtool" = yes; then 17045bc899bSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17145bc899bSmrg else 17245bc899bSmrg "$@" -MDupdate "$tmpdepfile" 17345bc899bSmrg fi 17445bc899bSmrg stat=$? 17545bc899bSmrg if test $stat -eq 0; then : 17645bc899bSmrg else 17745bc899bSmrg rm -f "$tmpdepfile" 17845bc899bSmrg exit $stat 17945bc899bSmrg fi 18045bc899bSmrg rm -f "$depfile" 18145bc899bSmrg 18245bc899bSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 18345bc899bSmrg echo "$object : \\" > "$depfile" 18445bc899bSmrg 18545bc899bSmrg # Clip off the initial element (the dependent). Don't try to be 18645bc899bSmrg # clever and replace this with sed code, as IRIX sed won't handle 18745bc899bSmrg # lines with more than a fixed number of characters (4096 in 18845bc899bSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 18945bc899bSmrg # the IRIX cc adds comments like `#:fec' to the end of the 19045bc899bSmrg # dependency line. 19145bc899bSmrg tr ' ' ' 19245bc899bSmrg' < "$tmpdepfile" \ 19345bc899bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 19445bc899bSmrg tr ' 19545bc899bSmrg' ' ' >> $depfile 19645bc899bSmrg echo >> $depfile 19745bc899bSmrg 19845bc899bSmrg # The second pass generates a dummy entry for each header file. 19945bc899bSmrg tr ' ' ' 20045bc899bSmrg' < "$tmpdepfile" \ 20145bc899bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20245bc899bSmrg >> $depfile 20345bc899bSmrg else 20445bc899bSmrg # The sourcefile does not contain any dependencies, so just 20545bc899bSmrg # store a dummy comment line, to avoid errors with the Makefile 20645bc899bSmrg # "include basename.Plo" scheme. 20745bc899bSmrg echo "#dummy" > "$depfile" 20845bc899bSmrg fi 20945bc899bSmrg rm -f "$tmpdepfile" 21045bc899bSmrg ;; 21145bc899bSmrg 21245bc899bSmrgaix) 21345bc899bSmrg # The C for AIX Compiler uses -M and outputs the dependencies 21445bc899bSmrg # in a .u file. In older versions, this file always lives in the 21545bc899bSmrg # current directory. Also, the AIX compiler puts `$object:' at the 21645bc899bSmrg # start of each line; $object doesn't have directory information. 21745bc899bSmrg # Version 6 uses the directory in both cases. 21850f2e948Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 21950f2e948Smrg test "x$dir" = "x$object" && dir= 22050f2e948Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 22145bc899bSmrg if test "$libtool" = yes; then 22250f2e948Smrg tmpdepfile1=$dir$base.u 22350f2e948Smrg tmpdepfile2=$base.u 22450f2e948Smrg tmpdepfile3=$dir.libs/$base.u 22545bc899bSmrg "$@" -Wc,-M 22645bc899bSmrg else 22750f2e948Smrg tmpdepfile1=$dir$base.u 22850f2e948Smrg tmpdepfile2=$dir$base.u 22950f2e948Smrg tmpdepfile3=$dir$base.u 23045bc899bSmrg "$@" -M 23145bc899bSmrg fi 23245bc899bSmrg stat=$? 23345bc899bSmrg 23445bc899bSmrg if test $stat -eq 0; then : 23545bc899bSmrg else 23650f2e948Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 23745bc899bSmrg exit $stat 23845bc899bSmrg fi 23945bc899bSmrg 24050f2e948Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24150f2e948Smrg do 24250f2e948Smrg test -f "$tmpdepfile" && break 24350f2e948Smrg done 24445bc899bSmrg if test -f "$tmpdepfile"; then 24545bc899bSmrg # Each line is of the form `foo.o: dependent.h'. 24645bc899bSmrg # Do two passes, one to just change these to 24745bc899bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 24850f2e948Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 24950f2e948Smrg # That's a tab and a space in the []. 25050f2e948Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 25145bc899bSmrg else 25245bc899bSmrg # The sourcefile does not contain any dependencies, so just 25345bc899bSmrg # store a dummy comment line, to avoid errors with the Makefile 25445bc899bSmrg # "include basename.Plo" scheme. 25545bc899bSmrg echo "#dummy" > "$depfile" 25645bc899bSmrg fi 25745bc899bSmrg rm -f "$tmpdepfile" 25845bc899bSmrg ;; 25945bc899bSmrg 26045bc899bSmrgicc) 26145bc899bSmrg # Intel's C compiler understands `-MD -MF file'. However on 26245bc899bSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 26345bc899bSmrg # ICC 7.0 will fill foo.d with something like 26445bc899bSmrg # foo.o: sub/foo.c 26545bc899bSmrg # foo.o: sub/foo.h 26645bc899bSmrg # which is wrong. We want: 26745bc899bSmrg # sub/foo.o: sub/foo.c 26845bc899bSmrg # sub/foo.o: sub/foo.h 26945bc899bSmrg # sub/foo.c: 27045bc899bSmrg # sub/foo.h: 27145bc899bSmrg # ICC 7.1 will output 27245bc899bSmrg # foo.o: sub/foo.c sub/foo.h 27345bc899bSmrg # and will wrap long lines using \ : 27445bc899bSmrg # foo.o: sub/foo.c ... \ 27545bc899bSmrg # sub/foo.h ... \ 27645bc899bSmrg # ... 27745bc899bSmrg 27845bc899bSmrg "$@" -MD -MF "$tmpdepfile" 27945bc899bSmrg stat=$? 28045bc899bSmrg if test $stat -eq 0; then : 28145bc899bSmrg else 28245bc899bSmrg rm -f "$tmpdepfile" 28345bc899bSmrg exit $stat 28445bc899bSmrg fi 28545bc899bSmrg rm -f "$depfile" 28645bc899bSmrg # Each line is of the form `foo.o: dependent.h', 28745bc899bSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 28845bc899bSmrg # Do two passes, one to just change these to 28945bc899bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 29045bc899bSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 29145bc899bSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 29245bc899bSmrg # correctly. Breaking it into two sed invocations is a workaround. 29345bc899bSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 29445bc899bSmrg sed -e 's/$/ :/' >> "$depfile" 29545bc899bSmrg rm -f "$tmpdepfile" 29645bc899bSmrg ;; 29745bc899bSmrg 29850f2e948Smrghp2) 29950f2e948Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 30050f2e948Smrg # compilers, which have integrated preprocessors. The correct option 30150f2e948Smrg # to use with these is +Maked; it writes dependencies to a file named 30250f2e948Smrg # 'foo.d', which lands next to the object file, wherever that 30350f2e948Smrg # happens to be. 30450f2e948Smrg # Much of this is similar to the tru64 case; see comments there. 30550f2e948Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 30650f2e948Smrg test "x$dir" = "x$object" && dir= 30750f2e948Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 30850f2e948Smrg if test "$libtool" = yes; then 30950f2e948Smrg tmpdepfile1=$dir$base.d 31050f2e948Smrg tmpdepfile2=$dir.libs/$base.d 31150f2e948Smrg "$@" -Wc,+Maked 31250f2e948Smrg else 31350f2e948Smrg tmpdepfile1=$dir$base.d 31450f2e948Smrg tmpdepfile2=$dir$base.d 31550f2e948Smrg "$@" +Maked 31650f2e948Smrg fi 31750f2e948Smrg stat=$? 31850f2e948Smrg if test $stat -eq 0; then : 31950f2e948Smrg else 32050f2e948Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 32150f2e948Smrg exit $stat 32250f2e948Smrg fi 32350f2e948Smrg 32450f2e948Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 32550f2e948Smrg do 32650f2e948Smrg test -f "$tmpdepfile" && break 32750f2e948Smrg done 32850f2e948Smrg if test -f "$tmpdepfile"; then 32950f2e948Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 33050f2e948Smrg # Add `dependent.h:' lines. 33150f2e948Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 33250f2e948Smrg else 33350f2e948Smrg echo "#dummy" > "$depfile" 33450f2e948Smrg fi 33550f2e948Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 33650f2e948Smrg ;; 33750f2e948Smrg 33845bc899bSmrgtru64) 33945bc899bSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 34045bc899bSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 34145bc899bSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 34245bc899bSmrg # dependencies in `foo.d' instead, so we check for that too. 34345bc899bSmrg # Subdirectories are respected. 34445bc899bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 34545bc899bSmrg test "x$dir" = "x$object" && dir= 34645bc899bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 34745bc899bSmrg 34845bc899bSmrg if test "$libtool" = yes; then 34945bc899bSmrg # With Tru64 cc, shared objects can also be used to make a 35050f2e948Smrg # static library. This mechanism is used in libtool 1.4 series to 35145bc899bSmrg # handle both shared and static libraries in a single compilation. 35245bc899bSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 35345bc899bSmrg # 35445bc899bSmrg # With libtool 1.5 this exception was removed, and libtool now 35545bc899bSmrg # generates 2 separate objects for the 2 libraries. These two 35650f2e948Smrg # compilations output dependencies in $dir.libs/$base.o.d and 35745bc899bSmrg # in $dir$base.o.d. We have to check for both files, because 35845bc899bSmrg # one of the two compilations can be disabled. We should prefer 35945bc899bSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 36045bc899bSmrg # automatically cleaned when .libs/ is deleted, while ignoring 36145bc899bSmrg # the former would cause a distcleancheck panic. 36245bc899bSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 36345bc899bSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 36445bc899bSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 36545bc899bSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 36645bc899bSmrg "$@" -Wc,-MD 36745bc899bSmrg else 36845bc899bSmrg tmpdepfile1=$dir$base.o.d 36945bc899bSmrg tmpdepfile2=$dir$base.d 37045bc899bSmrg tmpdepfile3=$dir$base.d 37145bc899bSmrg tmpdepfile4=$dir$base.d 37245bc899bSmrg "$@" -MD 37345bc899bSmrg fi 37445bc899bSmrg 37545bc899bSmrg stat=$? 37645bc899bSmrg if test $stat -eq 0; then : 37745bc899bSmrg else 37845bc899bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 37945bc899bSmrg exit $stat 38045bc899bSmrg fi 38145bc899bSmrg 38245bc899bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 38345bc899bSmrg do 38445bc899bSmrg test -f "$tmpdepfile" && break 38545bc899bSmrg done 38645bc899bSmrg if test -f "$tmpdepfile"; then 38745bc899bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 38845bc899bSmrg # That's a tab and a space in the []. 38945bc899bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 39045bc899bSmrg else 39145bc899bSmrg echo "#dummy" > "$depfile" 39245bc899bSmrg fi 39345bc899bSmrg rm -f "$tmpdepfile" 39445bc899bSmrg ;; 39545bc899bSmrg 39645bc899bSmrg#nosideeffect) 39745bc899bSmrg # This comment above is used by automake to tell side-effect 39845bc899bSmrg # dependency tracking mechanisms from slower ones. 39945bc899bSmrg 40045bc899bSmrgdashmstdout) 40145bc899bSmrg # Important note: in order to support this mode, a compiler *must* 40245bc899bSmrg # always write the preprocessed file to stdout, regardless of -o. 40345bc899bSmrg "$@" || exit $? 40445bc899bSmrg 40545bc899bSmrg # Remove the call to Libtool. 40645bc899bSmrg if test "$libtool" = yes; then 40745bc899bSmrg while test $1 != '--mode=compile'; do 40845bc899bSmrg shift 40945bc899bSmrg done 41045bc899bSmrg shift 41145bc899bSmrg fi 41245bc899bSmrg 41345bc899bSmrg # Remove `-o $object'. 41445bc899bSmrg IFS=" " 41545bc899bSmrg for arg 41645bc899bSmrg do 41745bc899bSmrg case $arg in 41845bc899bSmrg -o) 41945bc899bSmrg shift 42045bc899bSmrg ;; 42145bc899bSmrg $object) 42245bc899bSmrg shift 42345bc899bSmrg ;; 42445bc899bSmrg *) 42545bc899bSmrg set fnord "$@" "$arg" 42645bc899bSmrg shift # fnord 42745bc899bSmrg shift # $arg 42845bc899bSmrg ;; 42945bc899bSmrg esac 43045bc899bSmrg done 43145bc899bSmrg 43245bc899bSmrg test -z "$dashmflag" && dashmflag=-M 43345bc899bSmrg # Require at least two characters before searching for `:' 43445bc899bSmrg # in the target name. This is to cope with DOS-style filenames: 43545bc899bSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 43645bc899bSmrg "$@" $dashmflag | 43745bc899bSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 43845bc899bSmrg rm -f "$depfile" 43945bc899bSmrg cat < "$tmpdepfile" > "$depfile" 44045bc899bSmrg tr ' ' ' 44145bc899bSmrg' < "$tmpdepfile" | \ 44245bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 44345bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 44445bc899bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 44545bc899bSmrg rm -f "$tmpdepfile" 44645bc899bSmrg ;; 44745bc899bSmrg 44845bc899bSmrgdashXmstdout) 44945bc899bSmrg # This case only exists to satisfy depend.m4. It is never actually 45045bc899bSmrg # run, as this mode is specially recognized in the preamble. 45145bc899bSmrg exit 1 45245bc899bSmrg ;; 45345bc899bSmrg 45445bc899bSmrgmakedepend) 45545bc899bSmrg "$@" || exit $? 45645bc899bSmrg # Remove any Libtool call 45745bc899bSmrg if test "$libtool" = yes; then 45845bc899bSmrg while test $1 != '--mode=compile'; do 45945bc899bSmrg shift 46045bc899bSmrg done 46145bc899bSmrg shift 46245bc899bSmrg fi 46345bc899bSmrg # X makedepend 46445bc899bSmrg shift 46545bc899bSmrg cleared=no 46645bc899bSmrg for arg in "$@"; do 46745bc899bSmrg case $cleared in 46845bc899bSmrg no) 46945bc899bSmrg set ""; shift 47045bc899bSmrg cleared=yes ;; 47145bc899bSmrg esac 47245bc899bSmrg case "$arg" in 47345bc899bSmrg -D*|-I*) 47445bc899bSmrg set fnord "$@" "$arg"; shift ;; 47545bc899bSmrg # Strip any option that makedepend may not understand. Remove 47645bc899bSmrg # the object too, otherwise makedepend will parse it as a source file. 47745bc899bSmrg -*|$object) 47845bc899bSmrg ;; 47945bc899bSmrg *) 48045bc899bSmrg set fnord "$@" "$arg"; shift ;; 48145bc899bSmrg esac 48245bc899bSmrg done 48345bc899bSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 48445bc899bSmrg touch "$tmpdepfile" 48545bc899bSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 48645bc899bSmrg rm -f "$depfile" 48745bc899bSmrg cat < "$tmpdepfile" > "$depfile" 48845bc899bSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 48945bc899bSmrg' | \ 49045bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 49145bc899bSmrg## correctly. Breaking it into two sed invocations is a workaround. 49245bc899bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 49345bc899bSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 49445bc899bSmrg ;; 49545bc899bSmrg 49645bc899bSmrgcpp) 49745bc899bSmrg # Important note: in order to support this mode, a compiler *must* 49845bc899bSmrg # always write the preprocessed file to stdout. 49945bc899bSmrg "$@" || exit $? 50045bc899bSmrg 50145bc899bSmrg # Remove the call to Libtool. 50245bc899bSmrg if test "$libtool" = yes; then 50345bc899bSmrg while test $1 != '--mode=compile'; do 50445bc899bSmrg shift 50545bc899bSmrg done 50645bc899bSmrg shift 50745bc899bSmrg fi 50845bc899bSmrg 50945bc899bSmrg # Remove `-o $object'. 51045bc899bSmrg IFS=" " 51145bc899bSmrg for arg 51245bc899bSmrg do 51345bc899bSmrg case $arg in 51445bc899bSmrg -o) 51545bc899bSmrg shift 51645bc899bSmrg ;; 51745bc899bSmrg $object) 51845bc899bSmrg shift 51945bc899bSmrg ;; 52045bc899bSmrg *) 52145bc899bSmrg set fnord "$@" "$arg" 52245bc899bSmrg shift # fnord 52345bc899bSmrg shift # $arg 52445bc899bSmrg ;; 52545bc899bSmrg esac 52645bc899bSmrg done 52745bc899bSmrg 52845bc899bSmrg "$@" -E | 52945bc899bSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 53045bc899bSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 53145bc899bSmrg sed '$ s: \\$::' > "$tmpdepfile" 53245bc899bSmrg rm -f "$depfile" 53345bc899bSmrg echo "$object : \\" > "$depfile" 53445bc899bSmrg cat < "$tmpdepfile" >> "$depfile" 53545bc899bSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 53645bc899bSmrg rm -f "$tmpdepfile" 53745bc899bSmrg ;; 53845bc899bSmrg 53945bc899bSmrgmsvisualcpp) 54045bc899bSmrg # Important note: in order to support this mode, a compiler *must* 54145bc899bSmrg # always write the preprocessed file to stdout, regardless of -o, 54245bc899bSmrg # because we must use -o when running libtool. 54345bc899bSmrg "$@" || exit $? 54445bc899bSmrg IFS=" " 54545bc899bSmrg for arg 54645bc899bSmrg do 54745bc899bSmrg case "$arg" in 54845bc899bSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 54945bc899bSmrg set fnord "$@" 55045bc899bSmrg shift 55145bc899bSmrg shift 55245bc899bSmrg ;; 55345bc899bSmrg *) 55445bc899bSmrg set fnord "$@" "$arg" 55545bc899bSmrg shift 55645bc899bSmrg shift 55745bc899bSmrg ;; 55845bc899bSmrg esac 55945bc899bSmrg done 56045bc899bSmrg "$@" -E | 56145bc899bSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 56245bc899bSmrg rm -f "$depfile" 56345bc899bSmrg echo "$object : \\" > "$depfile" 56445bc899bSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 56545bc899bSmrg echo " " >> "$depfile" 56645bc899bSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 56745bc899bSmrg rm -f "$tmpdepfile" 56845bc899bSmrg ;; 56945bc899bSmrg 57045bc899bSmrgnone) 57145bc899bSmrg exec "$@" 57245bc899bSmrg ;; 57345bc899bSmrg 57445bc899bSmrg*) 57545bc899bSmrg echo "Unknown depmode $depmode" 1>&2 57645bc899bSmrg exit 1 57745bc899bSmrg ;; 57845bc899bSmrgesac 57945bc899bSmrg 58045bc899bSmrgexit 0 58145bc899bSmrg 58245bc899bSmrg# Local Variables: 58345bc899bSmrg# mode: shell-script 58445bc899bSmrg# sh-indentation: 2 58545bc899bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 58645bc899bSmrg# time-stamp-start: "scriptversion=" 58745bc899bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 58845bc899bSmrg# time-stamp-end: "$" 58945bc899bSmrg# End: 590