depcomp revision 4e7590ef
14b0ead49Smrg#! /bin/sh 24b0ead49Smrg# depcomp - compile a program generating dependencies as side-effects 34b0ead49Smrg 44e7590efSmrgscriptversion=2011-12-04.11; # UTC 54b0ead49Smrg 64e7590efSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 74e7590efSmrg# 2011 Free Software Foundation, Inc. 84b0ead49Smrg 94b0ead49Smrg# This program is free software; you can redistribute it and/or modify 104b0ead49Smrg# it under the terms of the GNU General Public License as published by 114b0ead49Smrg# the Free Software Foundation; either version 2, or (at your option) 124b0ead49Smrg# any later version. 134b0ead49Smrg 144b0ead49Smrg# This program is distributed in the hope that it will be useful, 154b0ead49Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 164b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 174b0ead49Smrg# GNU General Public License for more details. 184b0ead49Smrg 194b0ead49Smrg# You should have received a copy of the GNU General Public License 2052b01e16Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 214b0ead49Smrg 224b0ead49Smrg# As a special exception to the GNU General Public License, if you 234b0ead49Smrg# distribute this file as part of a program that contains a 244b0ead49Smrg# configuration script generated by Autoconf, you may include it under 254b0ead49Smrg# the same distribution terms that you use for the rest of that program. 264b0ead49Smrg 274b0ead49Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 284b0ead49Smrg 294b0ead49Smrgcase $1 in 304b0ead49Smrg '') 314b0ead49Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 324b0ead49Smrg exit 1; 334b0ead49Smrg ;; 344b0ead49Smrg -h | --h*) 354b0ead49Smrg cat <<\EOF 364b0ead49SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 374b0ead49Smrg 384b0ead49SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 394b0ead49Smrgas side-effects. 404b0ead49Smrg 414b0ead49SmrgEnvironment variables: 424b0ead49Smrg depmode Dependency tracking mode. 434b0ead49Smrg source Source file read by `PROGRAMS ARGS'. 444b0ead49Smrg object Object file output by `PROGRAMS ARGS'. 454b0ead49Smrg DEPDIR directory where to store dependencies. 464b0ead49Smrg depfile Dependency file to output. 474e7590efSmrg tmpdepfile Temporary file to use when outputting dependencies. 484b0ead49Smrg libtool Whether libtool is used (yes/no). 494b0ead49Smrg 504b0ead49SmrgReport bugs to <bug-automake@gnu.org>. 514b0ead49SmrgEOF 524b0ead49Smrg exit $? 534b0ead49Smrg ;; 544b0ead49Smrg -v | --v*) 554b0ead49Smrg echo "depcomp $scriptversion" 564b0ead49Smrg exit $? 574b0ead49Smrg ;; 584b0ead49Smrgesac 594b0ead49Smrg 604b0ead49Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 614b0ead49Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 624b0ead49Smrg exit 1 634b0ead49Smrgfi 644b0ead49Smrg 654b0ead49Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 664b0ead49Smrgdepfile=${depfile-`echo "$object" | 674b0ead49Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 684b0ead49Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 694b0ead49Smrg 704b0ead49Smrgrm -f "$tmpdepfile" 714b0ead49Smrg 724b0ead49Smrg# Some modes work just like other modes, but use different flags. We 734b0ead49Smrg# parameterize here, but still list the modes in the big case below, 744b0ead49Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 754b0ead49Smrg# here, because this file can only contain one case statement. 764b0ead49Smrgif test "$depmode" = hp; then 774b0ead49Smrg # HP compiler uses -M and no extra arg. 784b0ead49Smrg gccflag=-M 794b0ead49Smrg depmode=gcc 804b0ead49Smrgfi 814b0ead49Smrg 824b0ead49Smrgif test "$depmode" = dashXmstdout; then 834b0ead49Smrg # This is just like dashmstdout with a different argument. 844b0ead49Smrg dashmflag=-xM 854b0ead49Smrg depmode=dashmstdout 864b0ead49Smrgfi 874b0ead49Smrg 8852b01e16Smrgcygpath_u="cygpath -u -f -" 8952b01e16Smrgif test "$depmode" = msvcmsys; then 9052b01e16Smrg # This is just like msvisualcpp but w/o cygpath translation. 9152b01e16Smrg # Just convert the backslash-escaped backslashes to single forward 9252b01e16Smrg # slashes to satisfy depend.m4 934e7590efSmrg cygpath_u='sed s,\\\\,/,g' 9452b01e16Smrg depmode=msvisualcpp 9552b01e16Smrgfi 9652b01e16Smrg 974e7590efSmrgif test "$depmode" = msvc7msys; then 984e7590efSmrg # This is just like msvc7 but w/o cygpath translation. 994e7590efSmrg # Just convert the backslash-escaped backslashes to single forward 1004e7590efSmrg # slashes to satisfy depend.m4 1014e7590efSmrg cygpath_u='sed s,\\\\,/,g' 1024e7590efSmrg depmode=msvc7 1034e7590efSmrgfi 1044e7590efSmrg 1054b0ead49Smrgcase "$depmode" in 1064b0ead49Smrggcc3) 1074b0ead49Smrg## gcc 3 implements dependency tracking that does exactly what 1084b0ead49Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1094b0ead49Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 11052b01e16Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 11152b01e16Smrg## the command line argument order; so add the flags where they 11252b01e16Smrg## appear in depend2.am. Note that the slowdown incurred here 11352b01e16Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 11452b01e16Smrg for arg 11552b01e16Smrg do 11652b01e16Smrg case $arg in 11752b01e16Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11852b01e16Smrg *) set fnord "$@" "$arg" ;; 11952b01e16Smrg esac 12052b01e16Smrg shift # fnord 12152b01e16Smrg shift # $arg 12252b01e16Smrg done 12352b01e16Smrg "$@" 1244b0ead49Smrg stat=$? 1254b0ead49Smrg if test $stat -eq 0; then : 1264b0ead49Smrg else 1274b0ead49Smrg rm -f "$tmpdepfile" 1284b0ead49Smrg exit $stat 1294b0ead49Smrg fi 1304b0ead49Smrg mv "$tmpdepfile" "$depfile" 1314b0ead49Smrg ;; 1324b0ead49Smrg 1334b0ead49Smrggcc) 1344b0ead49Smrg## There are various ways to get dependency output from gcc. Here's 1354b0ead49Smrg## why we pick this rather obscure method: 1364b0ead49Smrg## - Don't want to use -MD because we'd like the dependencies to end 1374b0ead49Smrg## up in a subdir. Having to rename by hand is ugly. 1384b0ead49Smrg## (We might end up doing this anyway to support other compilers.) 1394b0ead49Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1404b0ead49Smrg## -MM, not -M (despite what the docs say). 1414b0ead49Smrg## - Using -M directly means running the compiler twice (even worse 1424b0ead49Smrg## than renaming). 1434b0ead49Smrg if test -z "$gccflag"; then 1444b0ead49Smrg gccflag=-MD, 1454b0ead49Smrg fi 1464b0ead49Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1474b0ead49Smrg stat=$? 1484b0ead49Smrg if test $stat -eq 0; then : 1494b0ead49Smrg else 1504b0ead49Smrg rm -f "$tmpdepfile" 1514b0ead49Smrg exit $stat 1524b0ead49Smrg fi 1534b0ead49Smrg rm -f "$depfile" 1544b0ead49Smrg echo "$object : \\" > "$depfile" 1554b0ead49Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1564b0ead49Smrg## The second -e expression handles DOS-style file names with drive letters. 1574b0ead49Smrg sed -e 's/^[^:]*: / /' \ 1584b0ead49Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1594b0ead49Smrg## This next piece of magic avoids the `deleted header file' problem. 1604b0ead49Smrg## The problem is that when a header file which appears in a .P file 1614b0ead49Smrg## is deleted, the dependency causes make to die (because there is 1624b0ead49Smrg## typically no way to rebuild the header). We avoid this by adding 1634b0ead49Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1644b0ead49Smrg## this for us directly. 1654b0ead49Smrg tr ' ' ' 1664b0ead49Smrg' < "$tmpdepfile" | 1674b0ead49Smrg## Some versions of gcc put a space before the `:'. On the theory 1684b0ead49Smrg## that the space means something, we add a space to the output as 1694e7590efSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 1704e7590efSmrg## to the object. Take care to not repeat it in the output. 1714b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1724b0ead49Smrg## correctly. Breaking it into two sed invocations is a workaround. 1734e7590efSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1744e7590efSmrg | sed -e 's/$/ :/' >> "$depfile" 1754b0ead49Smrg rm -f "$tmpdepfile" 1764b0ead49Smrg ;; 1774b0ead49Smrg 1784b0ead49Smrghp) 1794b0ead49Smrg # This case exists only to let depend.m4 do its work. It works by 1804b0ead49Smrg # looking at the text of this script. This case will never be run, 1814b0ead49Smrg # since it is checked for above. 1824b0ead49Smrg exit 1 1834b0ead49Smrg ;; 1844b0ead49Smrg 1854b0ead49Smrgsgi) 1864b0ead49Smrg if test "$libtool" = yes; then 1874b0ead49Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1884b0ead49Smrg else 1894b0ead49Smrg "$@" -MDupdate "$tmpdepfile" 1904b0ead49Smrg fi 1914b0ead49Smrg stat=$? 1924b0ead49Smrg if test $stat -eq 0; then : 1934b0ead49Smrg else 1944b0ead49Smrg rm -f "$tmpdepfile" 1954b0ead49Smrg exit $stat 1964b0ead49Smrg fi 1974b0ead49Smrg rm -f "$depfile" 1984b0ead49Smrg 1994b0ead49Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2004b0ead49Smrg echo "$object : \\" > "$depfile" 2014b0ead49Smrg 2024b0ead49Smrg # Clip off the initial element (the dependent). Don't try to be 2034b0ead49Smrg # clever and replace this with sed code, as IRIX sed won't handle 2044b0ead49Smrg # lines with more than a fixed number of characters (4096 in 2054b0ead49Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2064b0ead49Smrg # the IRIX cc adds comments like `#:fec' to the end of the 2074b0ead49Smrg # dependency line. 2084b0ead49Smrg tr ' ' ' 2094b0ead49Smrg' < "$tmpdepfile" \ 2104b0ead49Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2114b0ead49Smrg tr ' 21252b01e16Smrg' ' ' >> "$depfile" 21352b01e16Smrg echo >> "$depfile" 2144b0ead49Smrg 2154b0ead49Smrg # The second pass generates a dummy entry for each header file. 2164b0ead49Smrg tr ' ' ' 2174b0ead49Smrg' < "$tmpdepfile" \ 2184b0ead49Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 21952b01e16Smrg >> "$depfile" 2204b0ead49Smrg else 2214b0ead49Smrg # The sourcefile does not contain any dependencies, so just 2224b0ead49Smrg # store a dummy comment line, to avoid errors with the Makefile 2234b0ead49Smrg # "include basename.Plo" scheme. 2244b0ead49Smrg echo "#dummy" > "$depfile" 2254b0ead49Smrg fi 2264b0ead49Smrg rm -f "$tmpdepfile" 2274b0ead49Smrg ;; 2284b0ead49Smrg 2294b0ead49Smrgaix) 2304b0ead49Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2314b0ead49Smrg # in a .u file. In older versions, this file always lives in the 2324b0ead49Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2334b0ead49Smrg # start of each line; $object doesn't have directory information. 2344b0ead49Smrg # Version 6 uses the directory in both cases. 23552b01e16Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 23652b01e16Smrg test "x$dir" = "x$object" && dir= 23752b01e16Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2384b0ead49Smrg if test "$libtool" = yes; then 23952b01e16Smrg tmpdepfile1=$dir$base.u 24052b01e16Smrg tmpdepfile2=$base.u 24152b01e16Smrg tmpdepfile3=$dir.libs/$base.u 2424b0ead49Smrg "$@" -Wc,-M 2434b0ead49Smrg else 24452b01e16Smrg tmpdepfile1=$dir$base.u 24552b01e16Smrg tmpdepfile2=$dir$base.u 24652b01e16Smrg tmpdepfile3=$dir$base.u 2474b0ead49Smrg "$@" -M 2484b0ead49Smrg fi 2494b0ead49Smrg stat=$? 2504b0ead49Smrg 2514b0ead49Smrg if test $stat -eq 0; then : 2524b0ead49Smrg else 25352b01e16Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2544b0ead49Smrg exit $stat 2554b0ead49Smrg fi 2564b0ead49Smrg 25752b01e16Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25852b01e16Smrg do 25952b01e16Smrg test -f "$tmpdepfile" && break 26052b01e16Smrg done 2614b0ead49Smrg if test -f "$tmpdepfile"; then 2624b0ead49Smrg # Each line is of the form `foo.o: dependent.h'. 2634b0ead49Smrg # Do two passes, one to just change these to 2644b0ead49Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 26552b01e16Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 26652b01e16Smrg # That's a tab and a space in the []. 26752b01e16Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2684b0ead49Smrg else 2694b0ead49Smrg # The sourcefile does not contain any dependencies, so just 2704b0ead49Smrg # store a dummy comment line, to avoid errors with the Makefile 2714b0ead49Smrg # "include basename.Plo" scheme. 2724b0ead49Smrg echo "#dummy" > "$depfile" 2734b0ead49Smrg fi 2744b0ead49Smrg rm -f "$tmpdepfile" 2754b0ead49Smrg ;; 2764b0ead49Smrg 2774b0ead49Smrgicc) 2784b0ead49Smrg # Intel's C compiler understands `-MD -MF file'. However on 2794b0ead49Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2804b0ead49Smrg # ICC 7.0 will fill foo.d with something like 2814b0ead49Smrg # foo.o: sub/foo.c 2824b0ead49Smrg # foo.o: sub/foo.h 2834b0ead49Smrg # which is wrong. We want: 2844b0ead49Smrg # sub/foo.o: sub/foo.c 2854b0ead49Smrg # sub/foo.o: sub/foo.h 2864b0ead49Smrg # sub/foo.c: 2874b0ead49Smrg # sub/foo.h: 2884b0ead49Smrg # ICC 7.1 will output 2894b0ead49Smrg # foo.o: sub/foo.c sub/foo.h 2904b0ead49Smrg # and will wrap long lines using \ : 2914b0ead49Smrg # foo.o: sub/foo.c ... \ 2924b0ead49Smrg # sub/foo.h ... \ 2934b0ead49Smrg # ... 2944b0ead49Smrg 2954b0ead49Smrg "$@" -MD -MF "$tmpdepfile" 2964b0ead49Smrg stat=$? 2974b0ead49Smrg if test $stat -eq 0; then : 2984b0ead49Smrg else 2994b0ead49Smrg rm -f "$tmpdepfile" 3004b0ead49Smrg exit $stat 3014b0ead49Smrg fi 3024b0ead49Smrg rm -f "$depfile" 3034b0ead49Smrg # Each line is of the form `foo.o: dependent.h', 3044b0ead49Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 3054b0ead49Smrg # Do two passes, one to just change these to 3064b0ead49Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 3074b0ead49Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 3084b0ead49Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 3094b0ead49Smrg # correctly. Breaking it into two sed invocations is a workaround. 3104b0ead49Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3114b0ead49Smrg sed -e 's/$/ :/' >> "$depfile" 3124b0ead49Smrg rm -f "$tmpdepfile" 3134b0ead49Smrg ;; 3144b0ead49Smrg 31552b01e16Smrghp2) 31652b01e16Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 31752b01e16Smrg # compilers, which have integrated preprocessors. The correct option 31852b01e16Smrg # to use with these is +Maked; it writes dependencies to a file named 31952b01e16Smrg # 'foo.d', which lands next to the object file, wherever that 32052b01e16Smrg # happens to be. 32152b01e16Smrg # Much of this is similar to the tru64 case; see comments there. 32252b01e16Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 32352b01e16Smrg test "x$dir" = "x$object" && dir= 32452b01e16Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 32552b01e16Smrg if test "$libtool" = yes; then 32652b01e16Smrg tmpdepfile1=$dir$base.d 32752b01e16Smrg tmpdepfile2=$dir.libs/$base.d 32852b01e16Smrg "$@" -Wc,+Maked 32952b01e16Smrg else 33052b01e16Smrg tmpdepfile1=$dir$base.d 33152b01e16Smrg tmpdepfile2=$dir$base.d 33252b01e16Smrg "$@" +Maked 33352b01e16Smrg fi 33452b01e16Smrg stat=$? 33552b01e16Smrg if test $stat -eq 0; then : 33652b01e16Smrg else 33752b01e16Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 33852b01e16Smrg exit $stat 33952b01e16Smrg fi 34052b01e16Smrg 34152b01e16Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 34252b01e16Smrg do 34352b01e16Smrg test -f "$tmpdepfile" && break 34452b01e16Smrg done 34552b01e16Smrg if test -f "$tmpdepfile"; then 34652b01e16Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 34752b01e16Smrg # Add `dependent.h:' lines. 34852b01e16Smrg sed -ne '2,${ 34952b01e16Smrg s/^ *// 35052b01e16Smrg s/ \\*$// 35152b01e16Smrg s/$/:/ 35252b01e16Smrg p 35352b01e16Smrg }' "$tmpdepfile" >> "$depfile" 35452b01e16Smrg else 35552b01e16Smrg echo "#dummy" > "$depfile" 35652b01e16Smrg fi 35752b01e16Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 35852b01e16Smrg ;; 35952b01e16Smrg 3604b0ead49Smrgtru64) 3614b0ead49Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3624b0ead49Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3634b0ead49Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3644b0ead49Smrg # dependencies in `foo.d' instead, so we check for that too. 3654b0ead49Smrg # Subdirectories are respected. 3664b0ead49Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3674b0ead49Smrg test "x$dir" = "x$object" && dir= 3684b0ead49Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3694b0ead49Smrg 3704b0ead49Smrg if test "$libtool" = yes; then 3714b0ead49Smrg # With Tru64 cc, shared objects can also be used to make a 37252b01e16Smrg # static library. This mechanism is used in libtool 1.4 series to 3734b0ead49Smrg # handle both shared and static libraries in a single compilation. 3744b0ead49Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3754b0ead49Smrg # 3764b0ead49Smrg # With libtool 1.5 this exception was removed, and libtool now 3774b0ead49Smrg # generates 2 separate objects for the 2 libraries. These two 37852b01e16Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3794b0ead49Smrg # in $dir$base.o.d. We have to check for both files, because 3804b0ead49Smrg # one of the two compilations can be disabled. We should prefer 3814b0ead49Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3824b0ead49Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3834b0ead49Smrg # the former would cause a distcleancheck panic. 3844b0ead49Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3854b0ead49Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3864b0ead49Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3874b0ead49Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3884b0ead49Smrg "$@" -Wc,-MD 3894b0ead49Smrg else 3904b0ead49Smrg tmpdepfile1=$dir$base.o.d 3914b0ead49Smrg tmpdepfile2=$dir$base.d 3924b0ead49Smrg tmpdepfile3=$dir$base.d 3934b0ead49Smrg tmpdepfile4=$dir$base.d 3944b0ead49Smrg "$@" -MD 3954b0ead49Smrg fi 3964b0ead49Smrg 3974b0ead49Smrg stat=$? 3984b0ead49Smrg if test $stat -eq 0; then : 3994b0ead49Smrg else 4004b0ead49Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4014b0ead49Smrg exit $stat 4024b0ead49Smrg fi 4034b0ead49Smrg 4044b0ead49Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4054b0ead49Smrg do 4064b0ead49Smrg test -f "$tmpdepfile" && break 4074b0ead49Smrg done 4084b0ead49Smrg if test -f "$tmpdepfile"; then 4094b0ead49Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4104b0ead49Smrg # That's a tab and a space in the []. 4114b0ead49Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4124b0ead49Smrg else 4134b0ead49Smrg echo "#dummy" > "$depfile" 4144b0ead49Smrg fi 4154b0ead49Smrg rm -f "$tmpdepfile" 4164b0ead49Smrg ;; 4174b0ead49Smrg 4184e7590efSmrgmsvc7) 4194e7590efSmrg if test "$libtool" = yes; then 4204e7590efSmrg showIncludes=-Wc,-showIncludes 4214e7590efSmrg else 4224e7590efSmrg showIncludes=-showIncludes 4234e7590efSmrg fi 4244e7590efSmrg "$@" $showIncludes > "$tmpdepfile" 4254e7590efSmrg stat=$? 4264e7590efSmrg grep -v '^Note: including file: ' "$tmpdepfile" 4274e7590efSmrg if test "$stat" = 0; then : 4284e7590efSmrg else 4294e7590efSmrg rm -f "$tmpdepfile" 4304e7590efSmrg exit $stat 4314e7590efSmrg fi 4324e7590efSmrg rm -f "$depfile" 4334e7590efSmrg echo "$object : \\" > "$depfile" 4344e7590efSmrg # The first sed program below extracts the file names and escapes 4354e7590efSmrg # backslashes for cygpath. The second sed program outputs the file 4364e7590efSmrg # name when reading, but also accumulates all include files in the 4374e7590efSmrg # hold buffer in order to output them again at the end. This only 4384e7590efSmrg # works with sed implementations that can handle large buffers. 4394e7590efSmrg sed < "$tmpdepfile" -n ' 4404e7590efSmrg/^Note: including file: *\(.*\)/ { 4414e7590efSmrg s//\1/ 4424e7590efSmrg s/\\/\\\\/g 4434e7590efSmrg p 4444e7590efSmrg}' | $cygpath_u | sort -u | sed -n ' 4454e7590efSmrgs/ /\\ /g 4464e7590efSmrgs/\(.*\)/ \1 \\/p 4474e7590efSmrgs/.\(.*\) \\/\1:/ 4484e7590efSmrgH 4494e7590efSmrg$ { 4504e7590efSmrg s/.*/ / 4514e7590efSmrg G 4524e7590efSmrg p 4534e7590efSmrg}' >> "$depfile" 4544e7590efSmrg rm -f "$tmpdepfile" 4554e7590efSmrg ;; 4564e7590efSmrg 4574e7590efSmrgmsvc7msys) 4584e7590efSmrg # This case exists only to let depend.m4 do its work. It works by 4594e7590efSmrg # looking at the text of this script. This case will never be run, 4604e7590efSmrg # since it is checked for above. 4614e7590efSmrg exit 1 4624e7590efSmrg ;; 4634e7590efSmrg 4644b0ead49Smrg#nosideeffect) 4654b0ead49Smrg # This comment above is used by automake to tell side-effect 4664b0ead49Smrg # dependency tracking mechanisms from slower ones. 4674b0ead49Smrg 4684b0ead49Smrgdashmstdout) 4694b0ead49Smrg # Important note: in order to support this mode, a compiler *must* 4704b0ead49Smrg # always write the preprocessed file to stdout, regardless of -o. 4714b0ead49Smrg "$@" || exit $? 4724b0ead49Smrg 4734b0ead49Smrg # Remove the call to Libtool. 4744b0ead49Smrg if test "$libtool" = yes; then 47552b01e16Smrg while test "X$1" != 'X--mode=compile'; do 4764b0ead49Smrg shift 4774b0ead49Smrg done 4784b0ead49Smrg shift 4794b0ead49Smrg fi 4804b0ead49Smrg 4814b0ead49Smrg # Remove `-o $object'. 4824b0ead49Smrg IFS=" " 4834b0ead49Smrg for arg 4844b0ead49Smrg do 4854b0ead49Smrg case $arg in 4864b0ead49Smrg -o) 4874b0ead49Smrg shift 4884b0ead49Smrg ;; 4894b0ead49Smrg $object) 4904b0ead49Smrg shift 4914b0ead49Smrg ;; 4924b0ead49Smrg *) 4934b0ead49Smrg set fnord "$@" "$arg" 4944b0ead49Smrg shift # fnord 4954b0ead49Smrg shift # $arg 4964b0ead49Smrg ;; 4974b0ead49Smrg esac 4984b0ead49Smrg done 4994b0ead49Smrg 5004b0ead49Smrg test -z "$dashmflag" && dashmflag=-M 5014b0ead49Smrg # Require at least two characters before searching for `:' 5024b0ead49Smrg # in the target name. This is to cope with DOS-style filenames: 5034b0ead49Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 5044b0ead49Smrg "$@" $dashmflag | 5054b0ead49Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 5064b0ead49Smrg rm -f "$depfile" 5074b0ead49Smrg cat < "$tmpdepfile" > "$depfile" 5084b0ead49Smrg tr ' ' ' 5094b0ead49Smrg' < "$tmpdepfile" | \ 5104b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5114b0ead49Smrg## correctly. Breaking it into two sed invocations is a workaround. 5124b0ead49Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5134b0ead49Smrg rm -f "$tmpdepfile" 5144b0ead49Smrg ;; 5154b0ead49Smrg 5164b0ead49SmrgdashXmstdout) 5174b0ead49Smrg # This case only exists to satisfy depend.m4. It is never actually 5184b0ead49Smrg # run, as this mode is specially recognized in the preamble. 5194b0ead49Smrg exit 1 5204b0ead49Smrg ;; 5214b0ead49Smrg 5224b0ead49Smrgmakedepend) 5234b0ead49Smrg "$@" || exit $? 5244b0ead49Smrg # Remove any Libtool call 5254b0ead49Smrg if test "$libtool" = yes; then 52652b01e16Smrg while test "X$1" != 'X--mode=compile'; do 5274b0ead49Smrg shift 5284b0ead49Smrg done 5294b0ead49Smrg shift 5304b0ead49Smrg fi 5314b0ead49Smrg # X makedepend 5324b0ead49Smrg shift 53352b01e16Smrg cleared=no eat=no 53452b01e16Smrg for arg 53552b01e16Smrg do 5364b0ead49Smrg case $cleared in 5374b0ead49Smrg no) 5384b0ead49Smrg set ""; shift 5394b0ead49Smrg cleared=yes ;; 5404b0ead49Smrg esac 54152b01e16Smrg if test $eat = yes; then 54252b01e16Smrg eat=no 54352b01e16Smrg continue 54452b01e16Smrg fi 5454b0ead49Smrg case "$arg" in 5464b0ead49Smrg -D*|-I*) 5474b0ead49Smrg set fnord "$@" "$arg"; shift ;; 5484b0ead49Smrg # Strip any option that makedepend may not understand. Remove 5494b0ead49Smrg # the object too, otherwise makedepend will parse it as a source file. 55052b01e16Smrg -arch) 55152b01e16Smrg eat=yes ;; 5524b0ead49Smrg -*|$object) 5534b0ead49Smrg ;; 5544b0ead49Smrg *) 5554b0ead49Smrg set fnord "$@" "$arg"; shift ;; 5564b0ead49Smrg esac 5574b0ead49Smrg done 55852b01e16Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5594b0ead49Smrg touch "$tmpdepfile" 5604b0ead49Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5614b0ead49Smrg rm -f "$depfile" 5624e7590efSmrg # makedepend may prepend the VPATH from the source file name to the object. 5634e7590efSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 5644e7590efSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 5654b0ead49Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5664b0ead49Smrg' | \ 5674b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5684b0ead49Smrg## correctly. Breaking it into two sed invocations is a workaround. 5694b0ead49Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5704b0ead49Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5714b0ead49Smrg ;; 5724b0ead49Smrg 5734b0ead49Smrgcpp) 5744b0ead49Smrg # Important note: in order to support this mode, a compiler *must* 5754b0ead49Smrg # always write the preprocessed file to stdout. 5764b0ead49Smrg "$@" || exit $? 5774b0ead49Smrg 5784b0ead49Smrg # Remove the call to Libtool. 5794b0ead49Smrg if test "$libtool" = yes; then 58052b01e16Smrg while test "X$1" != 'X--mode=compile'; do 5814b0ead49Smrg shift 5824b0ead49Smrg done 5834b0ead49Smrg shift 5844b0ead49Smrg fi 5854b0ead49Smrg 5864b0ead49Smrg # Remove `-o $object'. 5874b0ead49Smrg IFS=" " 5884b0ead49Smrg for arg 5894b0ead49Smrg do 5904b0ead49Smrg case $arg in 5914b0ead49Smrg -o) 5924b0ead49Smrg shift 5934b0ead49Smrg ;; 5944b0ead49Smrg $object) 5954b0ead49Smrg shift 5964b0ead49Smrg ;; 5974b0ead49Smrg *) 5984b0ead49Smrg set fnord "$@" "$arg" 5994b0ead49Smrg shift # fnord 6004b0ead49Smrg shift # $arg 6014b0ead49Smrg ;; 6024b0ead49Smrg esac 6034b0ead49Smrg done 6044b0ead49Smrg 6054b0ead49Smrg "$@" -E | 6064b0ead49Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 6074b0ead49Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 6084b0ead49Smrg sed '$ s: \\$::' > "$tmpdepfile" 6094b0ead49Smrg rm -f "$depfile" 6104b0ead49Smrg echo "$object : \\" > "$depfile" 6114b0ead49Smrg cat < "$tmpdepfile" >> "$depfile" 6124b0ead49Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6134b0ead49Smrg rm -f "$tmpdepfile" 6144b0ead49Smrg ;; 6154b0ead49Smrg 6164b0ead49Smrgmsvisualcpp) 6174b0ead49Smrg # Important note: in order to support this mode, a compiler *must* 61852b01e16Smrg # always write the preprocessed file to stdout. 6194b0ead49Smrg "$@" || exit $? 62052b01e16Smrg 62152b01e16Smrg # Remove the call to Libtool. 62252b01e16Smrg if test "$libtool" = yes; then 62352b01e16Smrg while test "X$1" != 'X--mode=compile'; do 62452b01e16Smrg shift 62552b01e16Smrg done 62652b01e16Smrg shift 62752b01e16Smrg fi 62852b01e16Smrg 6294b0ead49Smrg IFS=" " 6304b0ead49Smrg for arg 6314b0ead49Smrg do 6324b0ead49Smrg case "$arg" in 63352b01e16Smrg -o) 63452b01e16Smrg shift 63552b01e16Smrg ;; 63652b01e16Smrg $object) 63752b01e16Smrg shift 63852b01e16Smrg ;; 6394b0ead49Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 6404b0ead49Smrg set fnord "$@" 6414b0ead49Smrg shift 6424b0ead49Smrg shift 6434b0ead49Smrg ;; 6444b0ead49Smrg *) 6454b0ead49Smrg set fnord "$@" "$arg" 6464b0ead49Smrg shift 6474b0ead49Smrg shift 6484b0ead49Smrg ;; 6494b0ead49Smrg esac 6504b0ead49Smrg done 65152b01e16Smrg "$@" -E 2>/dev/null | 65252b01e16Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 6534b0ead49Smrg rm -f "$depfile" 6544b0ead49Smrg echo "$object : \\" > "$depfile" 65552b01e16Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 6564b0ead49Smrg echo " " >> "$depfile" 65752b01e16Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6584b0ead49Smrg rm -f "$tmpdepfile" 6594b0ead49Smrg ;; 6604b0ead49Smrg 66152b01e16Smrgmsvcmsys) 66252b01e16Smrg # This case exists only to let depend.m4 do its work. It works by 66352b01e16Smrg # looking at the text of this script. This case will never be run, 66452b01e16Smrg # since it is checked for above. 66552b01e16Smrg exit 1 66652b01e16Smrg ;; 66752b01e16Smrg 6684b0ead49Smrgnone) 6694b0ead49Smrg exec "$@" 6704b0ead49Smrg ;; 6714b0ead49Smrg 6724b0ead49Smrg*) 6734b0ead49Smrg echo "Unknown depmode $depmode" 1>&2 6744b0ead49Smrg exit 1 6754b0ead49Smrg ;; 6764b0ead49Smrgesac 6774b0ead49Smrg 6784b0ead49Smrgexit 0 6794b0ead49Smrg 6804b0ead49Smrg# Local Variables: 6814b0ead49Smrg# mode: shell-script 6824b0ead49Smrg# sh-indentation: 2 6834b0ead49Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6844b0ead49Smrg# time-stamp-start: "scriptversion=" 6854b0ead49Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 68652b01e16Smrg# time-stamp-time-zone: "UTC" 68752b01e16Smrg# time-stamp-end: "; # UTC" 6884b0ead49Smrg# End: 689