depcomp revision 82e12b1b
121c2f794Smrg#! /bin/sh 221c2f794Smrg# depcomp - compile a program generating dependencies as side-effects 321c2f794Smrg 482e12b1bSmrgscriptversion=2011-12-04.11; # UTC 521c2f794Smrg 682e12b1bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 782e12b1bSmrg# 2011 Free Software Foundation, Inc. 821c2f794Smrg 921c2f794Smrg# This program is free software; you can redistribute it and/or modify 1021c2f794Smrg# it under the terms of the GNU General Public License as published by 1121c2f794Smrg# the Free Software Foundation; either version 2, or (at your option) 1221c2f794Smrg# any later version. 1321c2f794Smrg 1421c2f794Smrg# This program is distributed in the hope that it will be useful, 1521c2f794Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1621c2f794Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1721c2f794Smrg# GNU General Public License for more details. 1821c2f794Smrg 1921c2f794Smrg# You should have received a copy of the GNU General Public License 2012391620Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2121c2f794Smrg 2221c2f794Smrg# As a special exception to the GNU General Public License, if you 2321c2f794Smrg# distribute this file as part of a program that contains a 2421c2f794Smrg# configuration script generated by Autoconf, you may include it under 2521c2f794Smrg# the same distribution terms that you use for the rest of that program. 2621c2f794Smrg 2721c2f794Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2821c2f794Smrg 2921c2f794Smrgcase $1 in 3021c2f794Smrg '') 3121c2f794Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3221c2f794Smrg exit 1; 3321c2f794Smrg ;; 3421c2f794Smrg -h | --h*) 3521c2f794Smrg cat <<\EOF 3621c2f794SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3721c2f794Smrg 3821c2f794SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3921c2f794Smrgas side-effects. 4021c2f794Smrg 4121c2f794SmrgEnvironment variables: 4221c2f794Smrg depmode Dependency tracking mode. 4321c2f794Smrg source Source file read by `PROGRAMS ARGS'. 4421c2f794Smrg object Object file output by `PROGRAMS ARGS'. 4521c2f794Smrg DEPDIR directory where to store dependencies. 4621c2f794Smrg depfile Dependency file to output. 4782e12b1bSmrg tmpdepfile Temporary file to use when outputting dependencies. 4821c2f794Smrg libtool Whether libtool is used (yes/no). 4921c2f794Smrg 5021c2f794SmrgReport bugs to <bug-automake@gnu.org>. 5121c2f794SmrgEOF 5221c2f794Smrg exit $? 5321c2f794Smrg ;; 5421c2f794Smrg -v | --v*) 5521c2f794Smrg echo "depcomp $scriptversion" 5621c2f794Smrg exit $? 5721c2f794Smrg ;; 5821c2f794Smrgesac 5921c2f794Smrg 6021c2f794Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6121c2f794Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6221c2f794Smrg exit 1 6321c2f794Smrgfi 6421c2f794Smrg 6521c2f794Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6621c2f794Smrgdepfile=${depfile-`echo "$object" | 6721c2f794Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6821c2f794Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6921c2f794Smrg 7021c2f794Smrgrm -f "$tmpdepfile" 7121c2f794Smrg 7221c2f794Smrg# Some modes work just like other modes, but use different flags. We 7321c2f794Smrg# parameterize here, but still list the modes in the big case below, 7421c2f794Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7521c2f794Smrg# here, because this file can only contain one case statement. 7621c2f794Smrgif test "$depmode" = hp; then 7721c2f794Smrg # HP compiler uses -M and no extra arg. 7821c2f794Smrg gccflag=-M 7921c2f794Smrg depmode=gcc 8021c2f794Smrgfi 8121c2f794Smrg 8221c2f794Smrgif test "$depmode" = dashXmstdout; then 8321c2f794Smrg # This is just like dashmstdout with a different argument. 8421c2f794Smrg dashmflag=-xM 8521c2f794Smrg depmode=dashmstdout 8621c2f794Smrgfi 8721c2f794Smrg 8812391620Smrgcygpath_u="cygpath -u -f -" 8912391620Smrgif test "$depmode" = msvcmsys; then 9012391620Smrg # This is just like msvisualcpp but w/o cygpath translation. 9112391620Smrg # Just convert the backslash-escaped backslashes to single forward 9212391620Smrg # slashes to satisfy depend.m4 9382e12b1bSmrg cygpath_u='sed s,\\\\,/,g' 9412391620Smrg depmode=msvisualcpp 9512391620Smrgfi 9612391620Smrg 9782e12b1bSmrgif test "$depmode" = msvc7msys; then 9882e12b1bSmrg # This is just like msvc7 but w/o cygpath translation. 9982e12b1bSmrg # Just convert the backslash-escaped backslashes to single forward 10082e12b1bSmrg # slashes to satisfy depend.m4 10182e12b1bSmrg cygpath_u='sed s,\\\\,/,g' 10282e12b1bSmrg depmode=msvc7 10382e12b1bSmrgfi 10482e12b1bSmrg 10521c2f794Smrgcase "$depmode" in 10621c2f794Smrggcc3) 10721c2f794Smrg## gcc 3 implements dependency tracking that does exactly what 10821c2f794Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10921c2f794Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 11021c2f794Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 11121c2f794Smrg## the command line argument order; so add the flags where they 11221c2f794Smrg## appear in depend2.am. Note that the slowdown incurred here 11321c2f794Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 11421c2f794Smrg for arg 11521c2f794Smrg do 11621c2f794Smrg case $arg in 11721c2f794Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11821c2f794Smrg *) set fnord "$@" "$arg" ;; 11921c2f794Smrg esac 12021c2f794Smrg shift # fnord 12121c2f794Smrg shift # $arg 12221c2f794Smrg done 12321c2f794Smrg "$@" 12421c2f794Smrg stat=$? 12521c2f794Smrg if test $stat -eq 0; then : 12621c2f794Smrg else 12721c2f794Smrg rm -f "$tmpdepfile" 12821c2f794Smrg exit $stat 12921c2f794Smrg fi 13021c2f794Smrg mv "$tmpdepfile" "$depfile" 13121c2f794Smrg ;; 13221c2f794Smrg 13321c2f794Smrggcc) 13421c2f794Smrg## There are various ways to get dependency output from gcc. Here's 13521c2f794Smrg## why we pick this rather obscure method: 13621c2f794Smrg## - Don't want to use -MD because we'd like the dependencies to end 13721c2f794Smrg## up in a subdir. Having to rename by hand is ugly. 13821c2f794Smrg## (We might end up doing this anyway to support other compilers.) 13921c2f794Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 14021c2f794Smrg## -MM, not -M (despite what the docs say). 14121c2f794Smrg## - Using -M directly means running the compiler twice (even worse 14221c2f794Smrg## than renaming). 14321c2f794Smrg if test -z "$gccflag"; then 14421c2f794Smrg gccflag=-MD, 14521c2f794Smrg fi 14621c2f794Smrg "$@" -Wp,"$gccflag$tmpdepfile" 14721c2f794Smrg stat=$? 14821c2f794Smrg if test $stat -eq 0; then : 14921c2f794Smrg else 15021c2f794Smrg rm -f "$tmpdepfile" 15121c2f794Smrg exit $stat 15221c2f794Smrg fi 15321c2f794Smrg rm -f "$depfile" 15421c2f794Smrg echo "$object : \\" > "$depfile" 15521c2f794Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 15621c2f794Smrg## The second -e expression handles DOS-style file names with drive letters. 15721c2f794Smrg sed -e 's/^[^:]*: / /' \ 15821c2f794Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15921c2f794Smrg## This next piece of magic avoids the `deleted header file' problem. 16021c2f794Smrg## The problem is that when a header file which appears in a .P file 16121c2f794Smrg## is deleted, the dependency causes make to die (because there is 16221c2f794Smrg## typically no way to rebuild the header). We avoid this by adding 16321c2f794Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 16421c2f794Smrg## this for us directly. 16521c2f794Smrg tr ' ' ' 16621c2f794Smrg' < "$tmpdepfile" | 16721c2f794Smrg## Some versions of gcc put a space before the `:'. On the theory 16821c2f794Smrg## that the space means something, we add a space to the output as 16982e12b1bSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 17082e12b1bSmrg## to the object. Take care to not repeat it in the output. 17121c2f794Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 17221c2f794Smrg## correctly. Breaking it into two sed invocations is a workaround. 17382e12b1bSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 17482e12b1bSmrg | sed -e 's/$/ :/' >> "$depfile" 17521c2f794Smrg rm -f "$tmpdepfile" 17621c2f794Smrg ;; 17721c2f794Smrg 17821c2f794Smrghp) 17921c2f794Smrg # This case exists only to let depend.m4 do its work. It works by 18021c2f794Smrg # looking at the text of this script. This case will never be run, 18121c2f794Smrg # since it is checked for above. 18221c2f794Smrg exit 1 18321c2f794Smrg ;; 18421c2f794Smrg 18521c2f794Smrgsgi) 18621c2f794Smrg if test "$libtool" = yes; then 18721c2f794Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 18821c2f794Smrg else 18921c2f794Smrg "$@" -MDupdate "$tmpdepfile" 19021c2f794Smrg fi 19121c2f794Smrg stat=$? 19221c2f794Smrg if test $stat -eq 0; then : 19321c2f794Smrg else 19421c2f794Smrg rm -f "$tmpdepfile" 19521c2f794Smrg exit $stat 19621c2f794Smrg fi 19721c2f794Smrg rm -f "$depfile" 19821c2f794Smrg 19921c2f794Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 20021c2f794Smrg echo "$object : \\" > "$depfile" 20121c2f794Smrg 20221c2f794Smrg # Clip off the initial element (the dependent). Don't try to be 20321c2f794Smrg # clever and replace this with sed code, as IRIX sed won't handle 20421c2f794Smrg # lines with more than a fixed number of characters (4096 in 20521c2f794Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 20621c2f794Smrg # the IRIX cc adds comments like `#:fec' to the end of the 20721c2f794Smrg # dependency line. 20821c2f794Smrg tr ' ' ' 20921c2f794Smrg' < "$tmpdepfile" \ 21021c2f794Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 21121c2f794Smrg tr ' 21212391620Smrg' ' ' >> "$depfile" 21312391620Smrg echo >> "$depfile" 21421c2f794Smrg 21521c2f794Smrg # The second pass generates a dummy entry for each header file. 21621c2f794Smrg tr ' ' ' 21721c2f794Smrg' < "$tmpdepfile" \ 21821c2f794Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 21912391620Smrg >> "$depfile" 22021c2f794Smrg else 22121c2f794Smrg # The sourcefile does not contain any dependencies, so just 22221c2f794Smrg # store a dummy comment line, to avoid errors with the Makefile 22321c2f794Smrg # "include basename.Plo" scheme. 22421c2f794Smrg echo "#dummy" > "$depfile" 22521c2f794Smrg fi 22621c2f794Smrg rm -f "$tmpdepfile" 22721c2f794Smrg ;; 22821c2f794Smrg 22921c2f794Smrgaix) 23021c2f794Smrg # The C for AIX Compiler uses -M and outputs the dependencies 23121c2f794Smrg # in a .u file. In older versions, this file always lives in the 23221c2f794Smrg # current directory. Also, the AIX compiler puts `$object:' at the 23321c2f794Smrg # start of each line; $object doesn't have directory information. 23421c2f794Smrg # Version 6 uses the directory in both cases. 23512391620Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 23612391620Smrg test "x$dir" = "x$object" && dir= 23712391620Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 23821c2f794Smrg if test "$libtool" = yes; then 23912391620Smrg tmpdepfile1=$dir$base.u 24012391620Smrg tmpdepfile2=$base.u 24112391620Smrg tmpdepfile3=$dir.libs/$base.u 24221c2f794Smrg "$@" -Wc,-M 24321c2f794Smrg else 24412391620Smrg tmpdepfile1=$dir$base.u 24512391620Smrg tmpdepfile2=$dir$base.u 24612391620Smrg tmpdepfile3=$dir$base.u 24721c2f794Smrg "$@" -M 24821c2f794Smrg fi 24921c2f794Smrg stat=$? 25021c2f794Smrg 25121c2f794Smrg if test $stat -eq 0; then : 25221c2f794Smrg else 25312391620Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25421c2f794Smrg exit $stat 25521c2f794Smrg fi 25621c2f794Smrg 25712391620Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25812391620Smrg do 25912391620Smrg test -f "$tmpdepfile" && break 26012391620Smrg done 26121c2f794Smrg if test -f "$tmpdepfile"; then 26221c2f794Smrg # Each line is of the form `foo.o: dependent.h'. 26321c2f794Smrg # Do two passes, one to just change these to 26421c2f794Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 26512391620Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 26612391620Smrg # That's a tab and a space in the []. 26712391620Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 26821c2f794Smrg else 26921c2f794Smrg # The sourcefile does not contain any dependencies, so just 27021c2f794Smrg # store a dummy comment line, to avoid errors with the Makefile 27121c2f794Smrg # "include basename.Plo" scheme. 27221c2f794Smrg echo "#dummy" > "$depfile" 27321c2f794Smrg fi 27421c2f794Smrg rm -f "$tmpdepfile" 27521c2f794Smrg ;; 27621c2f794Smrg 27721c2f794Smrgicc) 27821c2f794Smrg # Intel's C compiler understands `-MD -MF file'. However on 27921c2f794Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 28021c2f794Smrg # ICC 7.0 will fill foo.d with something like 28121c2f794Smrg # foo.o: sub/foo.c 28221c2f794Smrg # foo.o: sub/foo.h 28321c2f794Smrg # which is wrong. We want: 28421c2f794Smrg # sub/foo.o: sub/foo.c 28521c2f794Smrg # sub/foo.o: sub/foo.h 28621c2f794Smrg # sub/foo.c: 28721c2f794Smrg # sub/foo.h: 28821c2f794Smrg # ICC 7.1 will output 28921c2f794Smrg # foo.o: sub/foo.c sub/foo.h 29021c2f794Smrg # and will wrap long lines using \ : 29121c2f794Smrg # foo.o: sub/foo.c ... \ 29221c2f794Smrg # sub/foo.h ... \ 29321c2f794Smrg # ... 29421c2f794Smrg 29521c2f794Smrg "$@" -MD -MF "$tmpdepfile" 29621c2f794Smrg stat=$? 29721c2f794Smrg if test $stat -eq 0; then : 29821c2f794Smrg else 29921c2f794Smrg rm -f "$tmpdepfile" 30021c2f794Smrg exit $stat 30121c2f794Smrg fi 30221c2f794Smrg rm -f "$depfile" 30321c2f794Smrg # Each line is of the form `foo.o: dependent.h', 30421c2f794Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 30521c2f794Smrg # Do two passes, one to just change these to 30621c2f794Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 30721c2f794Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 30821c2f794Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 30921c2f794Smrg # correctly. Breaking it into two sed invocations is a workaround. 31021c2f794Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 31121c2f794Smrg sed -e 's/$/ :/' >> "$depfile" 31221c2f794Smrg rm -f "$tmpdepfile" 31321c2f794Smrg ;; 31421c2f794Smrg 31521c2f794Smrghp2) 31621c2f794Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 31721c2f794Smrg # compilers, which have integrated preprocessors. The correct option 31821c2f794Smrg # to use with these is +Maked; it writes dependencies to a file named 31921c2f794Smrg # 'foo.d', which lands next to the object file, wherever that 32021c2f794Smrg # happens to be. 32121c2f794Smrg # Much of this is similar to the tru64 case; see comments there. 32221c2f794Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 32321c2f794Smrg test "x$dir" = "x$object" && dir= 32421c2f794Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 32521c2f794Smrg if test "$libtool" = yes; then 32621c2f794Smrg tmpdepfile1=$dir$base.d 32721c2f794Smrg tmpdepfile2=$dir.libs/$base.d 32821c2f794Smrg "$@" -Wc,+Maked 32921c2f794Smrg else 33021c2f794Smrg tmpdepfile1=$dir$base.d 33121c2f794Smrg tmpdepfile2=$dir$base.d 33221c2f794Smrg "$@" +Maked 33321c2f794Smrg fi 33421c2f794Smrg stat=$? 33521c2f794Smrg if test $stat -eq 0; then : 33621c2f794Smrg else 33721c2f794Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 33821c2f794Smrg exit $stat 33921c2f794Smrg fi 34021c2f794Smrg 34121c2f794Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 34221c2f794Smrg do 34321c2f794Smrg test -f "$tmpdepfile" && break 34421c2f794Smrg done 34521c2f794Smrg if test -f "$tmpdepfile"; then 34621c2f794Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 34721c2f794Smrg # Add `dependent.h:' lines. 34812391620Smrg sed -ne '2,${ 34912391620Smrg s/^ *// 35012391620Smrg s/ \\*$// 35112391620Smrg s/$/:/ 35212391620Smrg p 35312391620Smrg }' "$tmpdepfile" >> "$depfile" 35421c2f794Smrg else 35521c2f794Smrg echo "#dummy" > "$depfile" 35621c2f794Smrg fi 35721c2f794Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 35821c2f794Smrg ;; 35921c2f794Smrg 36021c2f794Smrgtru64) 36121c2f794Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 36221c2f794Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 36321c2f794Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 36421c2f794Smrg # dependencies in `foo.d' instead, so we check for that too. 36521c2f794Smrg # Subdirectories are respected. 36621c2f794Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 36721c2f794Smrg test "x$dir" = "x$object" && dir= 36821c2f794Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 36921c2f794Smrg 37021c2f794Smrg if test "$libtool" = yes; then 37121c2f794Smrg # With Tru64 cc, shared objects can also be used to make a 37221c2f794Smrg # static library. This mechanism is used in libtool 1.4 series to 37321c2f794Smrg # handle both shared and static libraries in a single compilation. 37421c2f794Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 37521c2f794Smrg # 37621c2f794Smrg # With libtool 1.5 this exception was removed, and libtool now 37721c2f794Smrg # generates 2 separate objects for the 2 libraries. These two 37821c2f794Smrg # compilations output dependencies in $dir.libs/$base.o.d and 37921c2f794Smrg # in $dir$base.o.d. We have to check for both files, because 38021c2f794Smrg # one of the two compilations can be disabled. We should prefer 38121c2f794Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 38221c2f794Smrg # automatically cleaned when .libs/ is deleted, while ignoring 38321c2f794Smrg # the former would cause a distcleancheck panic. 38421c2f794Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 38521c2f794Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 38621c2f794Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 38721c2f794Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 38821c2f794Smrg "$@" -Wc,-MD 38921c2f794Smrg else 39021c2f794Smrg tmpdepfile1=$dir$base.o.d 39121c2f794Smrg tmpdepfile2=$dir$base.d 39221c2f794Smrg tmpdepfile3=$dir$base.d 39321c2f794Smrg tmpdepfile4=$dir$base.d 39421c2f794Smrg "$@" -MD 39521c2f794Smrg fi 39621c2f794Smrg 39721c2f794Smrg stat=$? 39821c2f794Smrg if test $stat -eq 0; then : 39921c2f794Smrg else 40021c2f794Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 40121c2f794Smrg exit $stat 40221c2f794Smrg fi 40321c2f794Smrg 40421c2f794Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 40521c2f794Smrg do 40621c2f794Smrg test -f "$tmpdepfile" && break 40721c2f794Smrg done 40821c2f794Smrg if test -f "$tmpdepfile"; then 40921c2f794Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 41021c2f794Smrg # That's a tab and a space in the []. 41121c2f794Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 41221c2f794Smrg else 41321c2f794Smrg echo "#dummy" > "$depfile" 41421c2f794Smrg fi 41521c2f794Smrg rm -f "$tmpdepfile" 41621c2f794Smrg ;; 41721c2f794Smrg 41882e12b1bSmrgmsvc7) 41982e12b1bSmrg if test "$libtool" = yes; then 42082e12b1bSmrg showIncludes=-Wc,-showIncludes 42182e12b1bSmrg else 42282e12b1bSmrg showIncludes=-showIncludes 42382e12b1bSmrg fi 42482e12b1bSmrg "$@" $showIncludes > "$tmpdepfile" 42582e12b1bSmrg stat=$? 42682e12b1bSmrg grep -v '^Note: including file: ' "$tmpdepfile" 42782e12b1bSmrg if test "$stat" = 0; then : 42882e12b1bSmrg else 42982e12b1bSmrg rm -f "$tmpdepfile" 43082e12b1bSmrg exit $stat 43182e12b1bSmrg fi 43282e12b1bSmrg rm -f "$depfile" 43382e12b1bSmrg echo "$object : \\" > "$depfile" 43482e12b1bSmrg # The first sed program below extracts the file names and escapes 43582e12b1bSmrg # backslashes for cygpath. The second sed program outputs the file 43682e12b1bSmrg # name when reading, but also accumulates all include files in the 43782e12b1bSmrg # hold buffer in order to output them again at the end. This only 43882e12b1bSmrg # works with sed implementations that can handle large buffers. 43982e12b1bSmrg sed < "$tmpdepfile" -n ' 44082e12b1bSmrg/^Note: including file: *\(.*\)/ { 44182e12b1bSmrg s//\1/ 44282e12b1bSmrg s/\\/\\\\/g 44382e12b1bSmrg p 44482e12b1bSmrg}' | $cygpath_u | sort -u | sed -n ' 44582e12b1bSmrgs/ /\\ /g 44682e12b1bSmrgs/\(.*\)/ \1 \\/p 44782e12b1bSmrgs/.\(.*\) \\/\1:/ 44882e12b1bSmrgH 44982e12b1bSmrg$ { 45082e12b1bSmrg s/.*/ / 45182e12b1bSmrg G 45282e12b1bSmrg p 45382e12b1bSmrg}' >> "$depfile" 45482e12b1bSmrg rm -f "$tmpdepfile" 45582e12b1bSmrg ;; 45682e12b1bSmrg 45782e12b1bSmrgmsvc7msys) 45882e12b1bSmrg # This case exists only to let depend.m4 do its work. It works by 45982e12b1bSmrg # looking at the text of this script. This case will never be run, 46082e12b1bSmrg # since it is checked for above. 46182e12b1bSmrg exit 1 46282e12b1bSmrg ;; 46382e12b1bSmrg 46421c2f794Smrg#nosideeffect) 46521c2f794Smrg # This comment above is used by automake to tell side-effect 46621c2f794Smrg # dependency tracking mechanisms from slower ones. 46721c2f794Smrg 46821c2f794Smrgdashmstdout) 46921c2f794Smrg # Important note: in order to support this mode, a compiler *must* 47021c2f794Smrg # always write the preprocessed file to stdout, regardless of -o. 47121c2f794Smrg "$@" || exit $? 47221c2f794Smrg 47321c2f794Smrg # Remove the call to Libtool. 47421c2f794Smrg if test "$libtool" = yes; then 47512391620Smrg while test "X$1" != 'X--mode=compile'; do 47621c2f794Smrg shift 47721c2f794Smrg done 47821c2f794Smrg shift 47921c2f794Smrg fi 48021c2f794Smrg 48121c2f794Smrg # Remove `-o $object'. 48221c2f794Smrg IFS=" " 48321c2f794Smrg for arg 48421c2f794Smrg do 48521c2f794Smrg case $arg in 48621c2f794Smrg -o) 48721c2f794Smrg shift 48821c2f794Smrg ;; 48921c2f794Smrg $object) 49021c2f794Smrg shift 49121c2f794Smrg ;; 49221c2f794Smrg *) 49321c2f794Smrg set fnord "$@" "$arg" 49421c2f794Smrg shift # fnord 49521c2f794Smrg shift # $arg 49621c2f794Smrg ;; 49721c2f794Smrg esac 49821c2f794Smrg done 49921c2f794Smrg 50021c2f794Smrg test -z "$dashmflag" && dashmflag=-M 50121c2f794Smrg # Require at least two characters before searching for `:' 50221c2f794Smrg # in the target name. This is to cope with DOS-style filenames: 50321c2f794Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 50421c2f794Smrg "$@" $dashmflag | 50521c2f794Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 50621c2f794Smrg rm -f "$depfile" 50721c2f794Smrg cat < "$tmpdepfile" > "$depfile" 50821c2f794Smrg tr ' ' ' 50921c2f794Smrg' < "$tmpdepfile" | \ 51021c2f794Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 51121c2f794Smrg## correctly. Breaking it into two sed invocations is a workaround. 51221c2f794Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51321c2f794Smrg rm -f "$tmpdepfile" 51421c2f794Smrg ;; 51521c2f794Smrg 51621c2f794SmrgdashXmstdout) 51721c2f794Smrg # This case only exists to satisfy depend.m4. It is never actually 51821c2f794Smrg # run, as this mode is specially recognized in the preamble. 51921c2f794Smrg exit 1 52021c2f794Smrg ;; 52121c2f794Smrg 52221c2f794Smrgmakedepend) 52321c2f794Smrg "$@" || exit $? 52421c2f794Smrg # Remove any Libtool call 52521c2f794Smrg if test "$libtool" = yes; then 52612391620Smrg while test "X$1" != 'X--mode=compile'; do 52721c2f794Smrg shift 52821c2f794Smrg done 52921c2f794Smrg shift 53021c2f794Smrg fi 53121c2f794Smrg # X makedepend 53221c2f794Smrg shift 53312391620Smrg cleared=no eat=no 53412391620Smrg for arg 53512391620Smrg do 53621c2f794Smrg case $cleared in 53721c2f794Smrg no) 53821c2f794Smrg set ""; shift 53921c2f794Smrg cleared=yes ;; 54021c2f794Smrg esac 54112391620Smrg if test $eat = yes; then 54212391620Smrg eat=no 54312391620Smrg continue 54412391620Smrg fi 54521c2f794Smrg case "$arg" in 54621c2f794Smrg -D*|-I*) 54721c2f794Smrg set fnord "$@" "$arg"; shift ;; 54821c2f794Smrg # Strip any option that makedepend may not understand. Remove 54921c2f794Smrg # the object too, otherwise makedepend will parse it as a source file. 55012391620Smrg -arch) 55112391620Smrg eat=yes ;; 55221c2f794Smrg -*|$object) 55321c2f794Smrg ;; 55421c2f794Smrg *) 55521c2f794Smrg set fnord "$@" "$arg"; shift ;; 55621c2f794Smrg esac 55721c2f794Smrg done 55812391620Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 55921c2f794Smrg touch "$tmpdepfile" 56021c2f794Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 56121c2f794Smrg rm -f "$depfile" 56282e12b1bSmrg # makedepend may prepend the VPATH from the source file name to the object. 56382e12b1bSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 56482e12b1bSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 56521c2f794Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 56621c2f794Smrg' | \ 56721c2f794Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 56821c2f794Smrg## correctly. Breaking it into two sed invocations is a workaround. 56921c2f794Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 57021c2f794Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 57121c2f794Smrg ;; 57221c2f794Smrg 57321c2f794Smrgcpp) 57421c2f794Smrg # Important note: in order to support this mode, a compiler *must* 57521c2f794Smrg # always write the preprocessed file to stdout. 57621c2f794Smrg "$@" || exit $? 57721c2f794Smrg 57821c2f794Smrg # Remove the call to Libtool. 57921c2f794Smrg if test "$libtool" = yes; then 58012391620Smrg while test "X$1" != 'X--mode=compile'; do 58121c2f794Smrg shift 58221c2f794Smrg done 58321c2f794Smrg shift 58421c2f794Smrg fi 58521c2f794Smrg 58621c2f794Smrg # Remove `-o $object'. 58721c2f794Smrg IFS=" " 58821c2f794Smrg for arg 58921c2f794Smrg do 59021c2f794Smrg case $arg in 59121c2f794Smrg -o) 59221c2f794Smrg shift 59321c2f794Smrg ;; 59421c2f794Smrg $object) 59521c2f794Smrg shift 59621c2f794Smrg ;; 59721c2f794Smrg *) 59821c2f794Smrg set fnord "$@" "$arg" 59921c2f794Smrg shift # fnord 60021c2f794Smrg shift # $arg 60121c2f794Smrg ;; 60221c2f794Smrg esac 60321c2f794Smrg done 60421c2f794Smrg 60521c2f794Smrg "$@" -E | 60621c2f794Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 60721c2f794Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 60821c2f794Smrg sed '$ s: \\$::' > "$tmpdepfile" 60921c2f794Smrg rm -f "$depfile" 61021c2f794Smrg echo "$object : \\" > "$depfile" 61121c2f794Smrg cat < "$tmpdepfile" >> "$depfile" 61221c2f794Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 61321c2f794Smrg rm -f "$tmpdepfile" 61421c2f794Smrg ;; 61521c2f794Smrg 61621c2f794Smrgmsvisualcpp) 61721c2f794Smrg # Important note: in order to support this mode, a compiler *must* 61812391620Smrg # always write the preprocessed file to stdout. 61921c2f794Smrg "$@" || exit $? 62012391620Smrg 62112391620Smrg # Remove the call to Libtool. 62212391620Smrg if test "$libtool" = yes; then 62312391620Smrg while test "X$1" != 'X--mode=compile'; do 62412391620Smrg shift 62512391620Smrg done 62612391620Smrg shift 62712391620Smrg fi 62812391620Smrg 62921c2f794Smrg IFS=" " 63021c2f794Smrg for arg 63121c2f794Smrg do 63221c2f794Smrg case "$arg" in 63312391620Smrg -o) 63412391620Smrg shift 63512391620Smrg ;; 63612391620Smrg $object) 63712391620Smrg shift 63812391620Smrg ;; 63921c2f794Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 64021c2f794Smrg set fnord "$@" 64121c2f794Smrg shift 64221c2f794Smrg shift 64321c2f794Smrg ;; 64421c2f794Smrg *) 64521c2f794Smrg set fnord "$@" "$arg" 64621c2f794Smrg shift 64721c2f794Smrg shift 64821c2f794Smrg ;; 64921c2f794Smrg esac 65021c2f794Smrg done 65112391620Smrg "$@" -E 2>/dev/null | 65212391620Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 65321c2f794Smrg rm -f "$depfile" 65421c2f794Smrg echo "$object : \\" > "$depfile" 65512391620Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 65621c2f794Smrg echo " " >> "$depfile" 65712391620Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 65821c2f794Smrg rm -f "$tmpdepfile" 65921c2f794Smrg ;; 66021c2f794Smrg 66112391620Smrgmsvcmsys) 66212391620Smrg # This case exists only to let depend.m4 do its work. It works by 66312391620Smrg # looking at the text of this script. This case will never be run, 66412391620Smrg # since it is checked for above. 66512391620Smrg exit 1 66612391620Smrg ;; 66712391620Smrg 66821c2f794Smrgnone) 66921c2f794Smrg exec "$@" 67021c2f794Smrg ;; 67121c2f794Smrg 67221c2f794Smrg*) 67321c2f794Smrg echo "Unknown depmode $depmode" 1>&2 67421c2f794Smrg exit 1 67521c2f794Smrg ;; 67621c2f794Smrgesac 67721c2f794Smrg 67821c2f794Smrgexit 0 67921c2f794Smrg 68021c2f794Smrg# Local Variables: 68121c2f794Smrg# mode: shell-script 68221c2f794Smrg# sh-indentation: 2 68321c2f794Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 68421c2f794Smrg# time-stamp-start: "scriptversion=" 68521c2f794Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 68612391620Smrg# time-stamp-time-zone: "UTC" 68712391620Smrg# time-stamp-end: "; # UTC" 68821c2f794Smrg# End: 689