depcomp revision 498372ab
14d9b34d9Smrg#! /bin/sh 24d9b34d9Smrg# depcomp - compile a program generating dependencies as side-effects 34d9b34d9Smrg 4498372abSmrgscriptversion=2011-12-04.11; # UTC 54d9b34d9Smrg 6498372abSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7498372abSmrg# 2011 Free Software Foundation, Inc. 84d9b34d9Smrg 94d9b34d9Smrg# This program is free software; you can redistribute it and/or modify 104d9b34d9Smrg# it under the terms of the GNU General Public License as published by 114d9b34d9Smrg# the Free Software Foundation; either version 2, or (at your option) 124d9b34d9Smrg# any later version. 134d9b34d9Smrg 144d9b34d9Smrg# This program is distributed in the hope that it will be useful, 154d9b34d9Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 164d9b34d9Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 174d9b34d9Smrg# GNU General Public License for more details. 184d9b34d9Smrg 194d9b34d9Smrg# You should have received a copy of the GNU General Public License 208512f934Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 214d9b34d9Smrg 224d9b34d9Smrg# As a special exception to the GNU General Public License, if you 234d9b34d9Smrg# distribute this file as part of a program that contains a 244d9b34d9Smrg# configuration script generated by Autoconf, you may include it under 254d9b34d9Smrg# the same distribution terms that you use for the rest of that program. 264d9b34d9Smrg 274d9b34d9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 284d9b34d9Smrg 294d9b34d9Smrgcase $1 in 304d9b34d9Smrg '') 314d9b34d9Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 324d9b34d9Smrg exit 1; 334d9b34d9Smrg ;; 344d9b34d9Smrg -h | --h*) 354d9b34d9Smrg cat <<\EOF 364d9b34d9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 374d9b34d9Smrg 384d9b34d9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 394d9b34d9Smrgas side-effects. 404d9b34d9Smrg 414d9b34d9SmrgEnvironment variables: 424d9b34d9Smrg depmode Dependency tracking mode. 434d9b34d9Smrg source Source file read by `PROGRAMS ARGS'. 444d9b34d9Smrg object Object file output by `PROGRAMS ARGS'. 454d9b34d9Smrg DEPDIR directory where to store dependencies. 464d9b34d9Smrg depfile Dependency file to output. 47498372abSmrg tmpdepfile Temporary file to use when outputting dependencies. 484d9b34d9Smrg libtool Whether libtool is used (yes/no). 494d9b34d9Smrg 504d9b34d9SmrgReport bugs to <bug-automake@gnu.org>. 514d9b34d9SmrgEOF 524d9b34d9Smrg exit $? 534d9b34d9Smrg ;; 544d9b34d9Smrg -v | --v*) 554d9b34d9Smrg echo "depcomp $scriptversion" 564d9b34d9Smrg exit $? 574d9b34d9Smrg ;; 584d9b34d9Smrgesac 594d9b34d9Smrg 604d9b34d9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 614d9b34d9Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 624d9b34d9Smrg exit 1 634d9b34d9Smrgfi 644d9b34d9Smrg 654d9b34d9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 664d9b34d9Smrgdepfile=${depfile-`echo "$object" | 674d9b34d9Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 684d9b34d9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 694d9b34d9Smrg 704d9b34d9Smrgrm -f "$tmpdepfile" 714d9b34d9Smrg 724d9b34d9Smrg# Some modes work just like other modes, but use different flags. We 734d9b34d9Smrg# parameterize here, but still list the modes in the big case below, 744d9b34d9Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 754d9b34d9Smrg# here, because this file can only contain one case statement. 764d9b34d9Smrgif test "$depmode" = hp; then 774d9b34d9Smrg # HP compiler uses -M and no extra arg. 784d9b34d9Smrg gccflag=-M 794d9b34d9Smrg depmode=gcc 804d9b34d9Smrgfi 814d9b34d9Smrg 824d9b34d9Smrgif test "$depmode" = dashXmstdout; then 834d9b34d9Smrg # This is just like dashmstdout with a different argument. 844d9b34d9Smrg dashmflag=-xM 854d9b34d9Smrg depmode=dashmstdout 864d9b34d9Smrgfi 874d9b34d9Smrg 888512f934Smrgcygpath_u="cygpath -u -f -" 898512f934Smrgif test "$depmode" = msvcmsys; then 908512f934Smrg # This is just like msvisualcpp but w/o cygpath translation. 918512f934Smrg # Just convert the backslash-escaped backslashes to single forward 928512f934Smrg # slashes to satisfy depend.m4 93498372abSmrg cygpath_u='sed s,\\\\,/,g' 948512f934Smrg depmode=msvisualcpp 958512f934Smrgfi 968512f934Smrg 97498372abSmrgif test "$depmode" = msvc7msys; then 98498372abSmrg # This is just like msvc7 but w/o cygpath translation. 99498372abSmrg # Just convert the backslash-escaped backslashes to single forward 100498372abSmrg # slashes to satisfy depend.m4 101498372abSmrg cygpath_u='sed s,\\\\,/,g' 102498372abSmrg depmode=msvc7 103498372abSmrgfi 104498372abSmrg 1054d9b34d9Smrgcase "$depmode" in 1064d9b34d9Smrggcc3) 1074d9b34d9Smrg## gcc 3 implements dependency tracking that does exactly what 1084d9b34d9Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1094d9b34d9Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1104d9b34d9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1114d9b34d9Smrg## the command line argument order; so add the flags where they 1124d9b34d9Smrg## appear in depend2.am. Note that the slowdown incurred here 1134d9b34d9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1144d9b34d9Smrg for arg 1154d9b34d9Smrg do 1164d9b34d9Smrg case $arg in 1174d9b34d9Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1184d9b34d9Smrg *) set fnord "$@" "$arg" ;; 1194d9b34d9Smrg esac 1204d9b34d9Smrg shift # fnord 1214d9b34d9Smrg shift # $arg 1224d9b34d9Smrg done 1234d9b34d9Smrg "$@" 1244d9b34d9Smrg stat=$? 1254d9b34d9Smrg if test $stat -eq 0; then : 1264d9b34d9Smrg else 1274d9b34d9Smrg rm -f "$tmpdepfile" 1284d9b34d9Smrg exit $stat 1294d9b34d9Smrg fi 1304d9b34d9Smrg mv "$tmpdepfile" "$depfile" 1314d9b34d9Smrg ;; 1324d9b34d9Smrg 1334d9b34d9Smrggcc) 1344d9b34d9Smrg## There are various ways to get dependency output from gcc. Here's 1354d9b34d9Smrg## why we pick this rather obscure method: 1364d9b34d9Smrg## - Don't want to use -MD because we'd like the dependencies to end 1374d9b34d9Smrg## up in a subdir. Having to rename by hand is ugly. 1384d9b34d9Smrg## (We might end up doing this anyway to support other compilers.) 1394d9b34d9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1404d9b34d9Smrg## -MM, not -M (despite what the docs say). 1414d9b34d9Smrg## - Using -M directly means running the compiler twice (even worse 1424d9b34d9Smrg## than renaming). 1434d9b34d9Smrg if test -z "$gccflag"; then 1444d9b34d9Smrg gccflag=-MD, 1454d9b34d9Smrg fi 1464d9b34d9Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1474d9b34d9Smrg stat=$? 1484d9b34d9Smrg if test $stat -eq 0; then : 1494d9b34d9Smrg else 1504d9b34d9Smrg rm -f "$tmpdepfile" 1514d9b34d9Smrg exit $stat 1524d9b34d9Smrg fi 1534d9b34d9Smrg rm -f "$depfile" 1544d9b34d9Smrg echo "$object : \\" > "$depfile" 1554d9b34d9Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1564d9b34d9Smrg## The second -e expression handles DOS-style file names with drive letters. 1574d9b34d9Smrg sed -e 's/^[^:]*: / /' \ 1584d9b34d9Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1594d9b34d9Smrg## This next piece of magic avoids the `deleted header file' problem. 1604d9b34d9Smrg## The problem is that when a header file which appears in a .P file 1614d9b34d9Smrg## is deleted, the dependency causes make to die (because there is 1624d9b34d9Smrg## typically no way to rebuild the header). We avoid this by adding 1634d9b34d9Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1644d9b34d9Smrg## this for us directly. 1654d9b34d9Smrg tr ' ' ' 1664d9b34d9Smrg' < "$tmpdepfile" | 1674d9b34d9Smrg## Some versions of gcc put a space before the `:'. On the theory 1684d9b34d9Smrg## that the space means something, we add a space to the output as 169498372abSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 170498372abSmrg## to the object. Take care to not repeat it in the output. 1714d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1724d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 173498372abSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 174498372abSmrg | sed -e 's/$/ :/' >> "$depfile" 1754d9b34d9Smrg rm -f "$tmpdepfile" 1764d9b34d9Smrg ;; 1774d9b34d9Smrg 1784d9b34d9Smrghp) 1794d9b34d9Smrg # This case exists only to let depend.m4 do its work. It works by 1804d9b34d9Smrg # looking at the text of this script. This case will never be run, 1814d9b34d9Smrg # since it is checked for above. 1824d9b34d9Smrg exit 1 1834d9b34d9Smrg ;; 1844d9b34d9Smrg 1854d9b34d9Smrgsgi) 1864d9b34d9Smrg if test "$libtool" = yes; then 1874d9b34d9Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1884d9b34d9Smrg else 1894d9b34d9Smrg "$@" -MDupdate "$tmpdepfile" 1904d9b34d9Smrg fi 1914d9b34d9Smrg stat=$? 1924d9b34d9Smrg if test $stat -eq 0; then : 1934d9b34d9Smrg else 1944d9b34d9Smrg rm -f "$tmpdepfile" 1954d9b34d9Smrg exit $stat 1964d9b34d9Smrg fi 1974d9b34d9Smrg rm -f "$depfile" 1984d9b34d9Smrg 1994d9b34d9Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2004d9b34d9Smrg echo "$object : \\" > "$depfile" 2014d9b34d9Smrg 2024d9b34d9Smrg # Clip off the initial element (the dependent). Don't try to be 2034d9b34d9Smrg # clever and replace this with sed code, as IRIX sed won't handle 2044d9b34d9Smrg # lines with more than a fixed number of characters (4096 in 2054d9b34d9Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2064d9b34d9Smrg # the IRIX cc adds comments like `#:fec' to the end of the 2074d9b34d9Smrg # dependency line. 2084d9b34d9Smrg tr ' ' ' 2094d9b34d9Smrg' < "$tmpdepfile" \ 2104d9b34d9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2114d9b34d9Smrg tr ' 2128512f934Smrg' ' ' >> "$depfile" 2138512f934Smrg echo >> "$depfile" 2144d9b34d9Smrg 2154d9b34d9Smrg # The second pass generates a dummy entry for each header file. 2164d9b34d9Smrg tr ' ' ' 2174d9b34d9Smrg' < "$tmpdepfile" \ 2184d9b34d9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2198512f934Smrg >> "$depfile" 2204d9b34d9Smrg else 2214d9b34d9Smrg # The sourcefile does not contain any dependencies, so just 2224d9b34d9Smrg # store a dummy comment line, to avoid errors with the Makefile 2234d9b34d9Smrg # "include basename.Plo" scheme. 2244d9b34d9Smrg echo "#dummy" > "$depfile" 2254d9b34d9Smrg fi 2264d9b34d9Smrg rm -f "$tmpdepfile" 2274d9b34d9Smrg ;; 2284d9b34d9Smrg 2294d9b34d9Smrgaix) 2304d9b34d9Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2314d9b34d9Smrg # in a .u file. In older versions, this file always lives in the 2324d9b34d9Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2334d9b34d9Smrg # start of each line; $object doesn't have directory information. 2344d9b34d9Smrg # Version 6 uses the directory in both cases. 2358512f934Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2368512f934Smrg test "x$dir" = "x$object" && dir= 2378512f934Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2384d9b34d9Smrg if test "$libtool" = yes; then 2398512f934Smrg tmpdepfile1=$dir$base.u 2408512f934Smrg tmpdepfile2=$base.u 2418512f934Smrg tmpdepfile3=$dir.libs/$base.u 2424d9b34d9Smrg "$@" -Wc,-M 2434d9b34d9Smrg else 2448512f934Smrg tmpdepfile1=$dir$base.u 2458512f934Smrg tmpdepfile2=$dir$base.u 2468512f934Smrg tmpdepfile3=$dir$base.u 2474d9b34d9Smrg "$@" -M 2484d9b34d9Smrg fi 2494d9b34d9Smrg stat=$? 2504d9b34d9Smrg 2514d9b34d9Smrg if test $stat -eq 0; then : 2524d9b34d9Smrg else 2538512f934Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2544d9b34d9Smrg exit $stat 2554d9b34d9Smrg fi 2564d9b34d9Smrg 2578512f934Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2588512f934Smrg do 2598512f934Smrg test -f "$tmpdepfile" && break 2608512f934Smrg done 2614d9b34d9Smrg if test -f "$tmpdepfile"; then 2624d9b34d9Smrg # Each line is of the form `foo.o: dependent.h'. 2634d9b34d9Smrg # Do two passes, one to just change these to 2644d9b34d9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2658512f934Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2668512f934Smrg # That's a tab and a space in the []. 2678512f934Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2684d9b34d9Smrg else 2694d9b34d9Smrg # The sourcefile does not contain any dependencies, so just 2704d9b34d9Smrg # store a dummy comment line, to avoid errors with the Makefile 2714d9b34d9Smrg # "include basename.Plo" scheme. 2724d9b34d9Smrg echo "#dummy" > "$depfile" 2734d9b34d9Smrg fi 2744d9b34d9Smrg rm -f "$tmpdepfile" 2754d9b34d9Smrg ;; 2764d9b34d9Smrg 2774d9b34d9Smrgicc) 2784d9b34d9Smrg # Intel's C compiler understands `-MD -MF file'. However on 2794d9b34d9Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2804d9b34d9Smrg # ICC 7.0 will fill foo.d with something like 2814d9b34d9Smrg # foo.o: sub/foo.c 2824d9b34d9Smrg # foo.o: sub/foo.h 2834d9b34d9Smrg # which is wrong. We want: 2844d9b34d9Smrg # sub/foo.o: sub/foo.c 2854d9b34d9Smrg # sub/foo.o: sub/foo.h 2864d9b34d9Smrg # sub/foo.c: 2874d9b34d9Smrg # sub/foo.h: 2884d9b34d9Smrg # ICC 7.1 will output 2894d9b34d9Smrg # foo.o: sub/foo.c sub/foo.h 2904d9b34d9Smrg # and will wrap long lines using \ : 2914d9b34d9Smrg # foo.o: sub/foo.c ... \ 2924d9b34d9Smrg # sub/foo.h ... \ 2934d9b34d9Smrg # ... 2944d9b34d9Smrg 2954d9b34d9Smrg "$@" -MD -MF "$tmpdepfile" 2964d9b34d9Smrg stat=$? 2974d9b34d9Smrg if test $stat -eq 0; then : 2984d9b34d9Smrg else 2994d9b34d9Smrg rm -f "$tmpdepfile" 3004d9b34d9Smrg exit $stat 3014d9b34d9Smrg fi 3024d9b34d9Smrg rm -f "$depfile" 3034d9b34d9Smrg # Each line is of the form `foo.o: dependent.h', 3044d9b34d9Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 3054d9b34d9Smrg # Do two passes, one to just change these to 3064d9b34d9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 3074d9b34d9Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 3084d9b34d9Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 3094d9b34d9Smrg # correctly. Breaking it into two sed invocations is a workaround. 3104d9b34d9Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3114d9b34d9Smrg sed -e 's/$/ :/' >> "$depfile" 3124d9b34d9Smrg rm -f "$tmpdepfile" 3134d9b34d9Smrg ;; 3144d9b34d9Smrg 3154d9b34d9Smrghp2) 3164d9b34d9Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3174d9b34d9Smrg # compilers, which have integrated preprocessors. The correct option 3184d9b34d9Smrg # to use with these is +Maked; it writes dependencies to a file named 3194d9b34d9Smrg # 'foo.d', which lands next to the object file, wherever that 3204d9b34d9Smrg # happens to be. 3214d9b34d9Smrg # Much of this is similar to the tru64 case; see comments there. 3224d9b34d9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3234d9b34d9Smrg test "x$dir" = "x$object" && dir= 3244d9b34d9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3254d9b34d9Smrg if test "$libtool" = yes; then 3264d9b34d9Smrg tmpdepfile1=$dir$base.d 3274d9b34d9Smrg tmpdepfile2=$dir.libs/$base.d 3284d9b34d9Smrg "$@" -Wc,+Maked 3294d9b34d9Smrg else 3304d9b34d9Smrg tmpdepfile1=$dir$base.d 3314d9b34d9Smrg tmpdepfile2=$dir$base.d 3324d9b34d9Smrg "$@" +Maked 3334d9b34d9Smrg fi 3344d9b34d9Smrg stat=$? 3354d9b34d9Smrg if test $stat -eq 0; then : 3364d9b34d9Smrg else 3374d9b34d9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3384d9b34d9Smrg exit $stat 3394d9b34d9Smrg fi 3404d9b34d9Smrg 3414d9b34d9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3424d9b34d9Smrg do 3434d9b34d9Smrg test -f "$tmpdepfile" && break 3444d9b34d9Smrg done 3454d9b34d9Smrg if test -f "$tmpdepfile"; then 3464d9b34d9Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3474d9b34d9Smrg # Add `dependent.h:' lines. 3488512f934Smrg sed -ne '2,${ 3498512f934Smrg s/^ *// 3508512f934Smrg s/ \\*$// 3518512f934Smrg s/$/:/ 3528512f934Smrg p 3538512f934Smrg }' "$tmpdepfile" >> "$depfile" 3544d9b34d9Smrg else 3554d9b34d9Smrg echo "#dummy" > "$depfile" 3564d9b34d9Smrg fi 3574d9b34d9Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3584d9b34d9Smrg ;; 3594d9b34d9Smrg 3604d9b34d9Smrgtru64) 3614d9b34d9Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3624d9b34d9Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3634d9b34d9Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3644d9b34d9Smrg # dependencies in `foo.d' instead, so we check for that too. 3654d9b34d9Smrg # Subdirectories are respected. 3664d9b34d9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3674d9b34d9Smrg test "x$dir" = "x$object" && dir= 3684d9b34d9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3694d9b34d9Smrg 3704d9b34d9Smrg if test "$libtool" = yes; then 3714d9b34d9Smrg # With Tru64 cc, shared objects can also be used to make a 3724d9b34d9Smrg # static library. This mechanism is used in libtool 1.4 series to 3734d9b34d9Smrg # handle both shared and static libraries in a single compilation. 3744d9b34d9Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3754d9b34d9Smrg # 3764d9b34d9Smrg # With libtool 1.5 this exception was removed, and libtool now 3774d9b34d9Smrg # generates 2 separate objects for the 2 libraries. These two 3784d9b34d9Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3794d9b34d9Smrg # in $dir$base.o.d. We have to check for both files, because 3804d9b34d9Smrg # one of the two compilations can be disabled. We should prefer 3814d9b34d9Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3824d9b34d9Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3834d9b34d9Smrg # the former would cause a distcleancheck panic. 3844d9b34d9Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3854d9b34d9Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3864d9b34d9Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3874d9b34d9Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3884d9b34d9Smrg "$@" -Wc,-MD 3894d9b34d9Smrg else 3904d9b34d9Smrg tmpdepfile1=$dir$base.o.d 3914d9b34d9Smrg tmpdepfile2=$dir$base.d 3924d9b34d9Smrg tmpdepfile3=$dir$base.d 3934d9b34d9Smrg tmpdepfile4=$dir$base.d 3944d9b34d9Smrg "$@" -MD 3954d9b34d9Smrg fi 3964d9b34d9Smrg 3974d9b34d9Smrg stat=$? 3984d9b34d9Smrg if test $stat -eq 0; then : 3994d9b34d9Smrg else 4004d9b34d9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4014d9b34d9Smrg exit $stat 4024d9b34d9Smrg fi 4034d9b34d9Smrg 4044d9b34d9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4054d9b34d9Smrg do 4064d9b34d9Smrg test -f "$tmpdepfile" && break 4074d9b34d9Smrg done 4084d9b34d9Smrg if test -f "$tmpdepfile"; then 4094d9b34d9Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4104d9b34d9Smrg # That's a tab and a space in the []. 4114d9b34d9Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4124d9b34d9Smrg else 4134d9b34d9Smrg echo "#dummy" > "$depfile" 4144d9b34d9Smrg fi 4154d9b34d9Smrg rm -f "$tmpdepfile" 4164d9b34d9Smrg ;; 4174d9b34d9Smrg 418498372abSmrgmsvc7) 419498372abSmrg if test "$libtool" = yes; then 420498372abSmrg showIncludes=-Wc,-showIncludes 421498372abSmrg else 422498372abSmrg showIncludes=-showIncludes 423498372abSmrg fi 424498372abSmrg "$@" $showIncludes > "$tmpdepfile" 425498372abSmrg stat=$? 426498372abSmrg grep -v '^Note: including file: ' "$tmpdepfile" 427498372abSmrg if test "$stat" = 0; then : 428498372abSmrg else 429498372abSmrg rm -f "$tmpdepfile" 430498372abSmrg exit $stat 431498372abSmrg fi 432498372abSmrg rm -f "$depfile" 433498372abSmrg echo "$object : \\" > "$depfile" 434498372abSmrg # The first sed program below extracts the file names and escapes 435498372abSmrg # backslashes for cygpath. The second sed program outputs the file 436498372abSmrg # name when reading, but also accumulates all include files in the 437498372abSmrg # hold buffer in order to output them again at the end. This only 438498372abSmrg # works with sed implementations that can handle large buffers. 439498372abSmrg sed < "$tmpdepfile" -n ' 440498372abSmrg/^Note: including file: *\(.*\)/ { 441498372abSmrg s//\1/ 442498372abSmrg s/\\/\\\\/g 443498372abSmrg p 444498372abSmrg}' | $cygpath_u | sort -u | sed -n ' 445498372abSmrgs/ /\\ /g 446498372abSmrgs/\(.*\)/ \1 \\/p 447498372abSmrgs/.\(.*\) \\/\1:/ 448498372abSmrgH 449498372abSmrg$ { 450498372abSmrg s/.*/ / 451498372abSmrg G 452498372abSmrg p 453498372abSmrg}' >> "$depfile" 454498372abSmrg rm -f "$tmpdepfile" 455498372abSmrg ;; 456498372abSmrg 457498372abSmrgmsvc7msys) 458498372abSmrg # This case exists only to let depend.m4 do its work. It works by 459498372abSmrg # looking at the text of this script. This case will never be run, 460498372abSmrg # since it is checked for above. 461498372abSmrg exit 1 462498372abSmrg ;; 463498372abSmrg 4644d9b34d9Smrg#nosideeffect) 4654d9b34d9Smrg # This comment above is used by automake to tell side-effect 4664d9b34d9Smrg # dependency tracking mechanisms from slower ones. 4674d9b34d9Smrg 4684d9b34d9Smrgdashmstdout) 4694d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 4704d9b34d9Smrg # always write the preprocessed file to stdout, regardless of -o. 4714d9b34d9Smrg "$@" || exit $? 4724d9b34d9Smrg 4734d9b34d9Smrg # Remove the call to Libtool. 4744d9b34d9Smrg if test "$libtool" = yes; then 4758512f934Smrg while test "X$1" != 'X--mode=compile'; do 4764d9b34d9Smrg shift 4774d9b34d9Smrg done 4784d9b34d9Smrg shift 4794d9b34d9Smrg fi 4804d9b34d9Smrg 4814d9b34d9Smrg # Remove `-o $object'. 4824d9b34d9Smrg IFS=" " 4834d9b34d9Smrg for arg 4844d9b34d9Smrg do 4854d9b34d9Smrg case $arg in 4864d9b34d9Smrg -o) 4874d9b34d9Smrg shift 4884d9b34d9Smrg ;; 4894d9b34d9Smrg $object) 4904d9b34d9Smrg shift 4914d9b34d9Smrg ;; 4924d9b34d9Smrg *) 4934d9b34d9Smrg set fnord "$@" "$arg" 4944d9b34d9Smrg shift # fnord 4954d9b34d9Smrg shift # $arg 4964d9b34d9Smrg ;; 4974d9b34d9Smrg esac 4984d9b34d9Smrg done 4994d9b34d9Smrg 5004d9b34d9Smrg test -z "$dashmflag" && dashmflag=-M 5014d9b34d9Smrg # Require at least two characters before searching for `:' 5024d9b34d9Smrg # in the target name. This is to cope with DOS-style filenames: 5034d9b34d9Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 5044d9b34d9Smrg "$@" $dashmflag | 5054d9b34d9Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 5064d9b34d9Smrg rm -f "$depfile" 5074d9b34d9Smrg cat < "$tmpdepfile" > "$depfile" 5084d9b34d9Smrg tr ' ' ' 5094d9b34d9Smrg' < "$tmpdepfile" | \ 5104d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5114d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 5124d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5134d9b34d9Smrg rm -f "$tmpdepfile" 5144d9b34d9Smrg ;; 5154d9b34d9Smrg 5164d9b34d9SmrgdashXmstdout) 5174d9b34d9Smrg # This case only exists to satisfy depend.m4. It is never actually 5184d9b34d9Smrg # run, as this mode is specially recognized in the preamble. 5194d9b34d9Smrg exit 1 5204d9b34d9Smrg ;; 5214d9b34d9Smrg 5224d9b34d9Smrgmakedepend) 5234d9b34d9Smrg "$@" || exit $? 5244d9b34d9Smrg # Remove any Libtool call 5254d9b34d9Smrg if test "$libtool" = yes; then 5268512f934Smrg while test "X$1" != 'X--mode=compile'; do 5274d9b34d9Smrg shift 5284d9b34d9Smrg done 5294d9b34d9Smrg shift 5304d9b34d9Smrg fi 5314d9b34d9Smrg # X makedepend 5324d9b34d9Smrg shift 5338512f934Smrg cleared=no eat=no 5348512f934Smrg for arg 5358512f934Smrg do 5364d9b34d9Smrg case $cleared in 5374d9b34d9Smrg no) 5384d9b34d9Smrg set ""; shift 5394d9b34d9Smrg cleared=yes ;; 5404d9b34d9Smrg esac 5418512f934Smrg if test $eat = yes; then 5428512f934Smrg eat=no 5438512f934Smrg continue 5448512f934Smrg fi 5454d9b34d9Smrg case "$arg" in 5464d9b34d9Smrg -D*|-I*) 5474d9b34d9Smrg set fnord "$@" "$arg"; shift ;; 5484d9b34d9Smrg # Strip any option that makedepend may not understand. Remove 5494d9b34d9Smrg # the object too, otherwise makedepend will parse it as a source file. 5508512f934Smrg -arch) 5518512f934Smrg eat=yes ;; 5524d9b34d9Smrg -*|$object) 5534d9b34d9Smrg ;; 5544d9b34d9Smrg *) 5554d9b34d9Smrg set fnord "$@" "$arg"; shift ;; 5564d9b34d9Smrg esac 5574d9b34d9Smrg done 5588512f934Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5594d9b34d9Smrg touch "$tmpdepfile" 5604d9b34d9Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5614d9b34d9Smrg rm -f "$depfile" 562498372abSmrg # makedepend may prepend the VPATH from the source file name to the object. 563498372abSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 564498372abSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 5654d9b34d9Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5664d9b34d9Smrg' | \ 5674d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5684d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 5694d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5704d9b34d9Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5714d9b34d9Smrg ;; 5724d9b34d9Smrg 5734d9b34d9Smrgcpp) 5744d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 5754d9b34d9Smrg # always write the preprocessed file to stdout. 5764d9b34d9Smrg "$@" || exit $? 5774d9b34d9Smrg 5784d9b34d9Smrg # Remove the call to Libtool. 5794d9b34d9Smrg if test "$libtool" = yes; then 5808512f934Smrg while test "X$1" != 'X--mode=compile'; do 5814d9b34d9Smrg shift 5824d9b34d9Smrg done 5834d9b34d9Smrg shift 5844d9b34d9Smrg fi 5854d9b34d9Smrg 5864d9b34d9Smrg # Remove `-o $object'. 5874d9b34d9Smrg IFS=" " 5884d9b34d9Smrg for arg 5894d9b34d9Smrg do 5904d9b34d9Smrg case $arg in 5914d9b34d9Smrg -o) 5924d9b34d9Smrg shift 5934d9b34d9Smrg ;; 5944d9b34d9Smrg $object) 5954d9b34d9Smrg shift 5964d9b34d9Smrg ;; 5974d9b34d9Smrg *) 5984d9b34d9Smrg set fnord "$@" "$arg" 5994d9b34d9Smrg shift # fnord 6004d9b34d9Smrg shift # $arg 6014d9b34d9Smrg ;; 6024d9b34d9Smrg esac 6034d9b34d9Smrg done 6044d9b34d9Smrg 6054d9b34d9Smrg "$@" -E | 6064d9b34d9Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 6074d9b34d9Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 6084d9b34d9Smrg sed '$ s: \\$::' > "$tmpdepfile" 6094d9b34d9Smrg rm -f "$depfile" 6104d9b34d9Smrg echo "$object : \\" > "$depfile" 6114d9b34d9Smrg cat < "$tmpdepfile" >> "$depfile" 6124d9b34d9Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6134d9b34d9Smrg rm -f "$tmpdepfile" 6144d9b34d9Smrg ;; 6154d9b34d9Smrg 6164d9b34d9Smrgmsvisualcpp) 6174d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 6188512f934Smrg # always write the preprocessed file to stdout. 6194d9b34d9Smrg "$@" || exit $? 6208512f934Smrg 6218512f934Smrg # Remove the call to Libtool. 6228512f934Smrg if test "$libtool" = yes; then 6238512f934Smrg while test "X$1" != 'X--mode=compile'; do 6248512f934Smrg shift 6258512f934Smrg done 6268512f934Smrg shift 6278512f934Smrg fi 6288512f934Smrg 6294d9b34d9Smrg IFS=" " 6304d9b34d9Smrg for arg 6314d9b34d9Smrg do 6324d9b34d9Smrg case "$arg" in 6338512f934Smrg -o) 6348512f934Smrg shift 6358512f934Smrg ;; 6368512f934Smrg $object) 6378512f934Smrg shift 6388512f934Smrg ;; 6394d9b34d9Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 6404d9b34d9Smrg set fnord "$@" 6414d9b34d9Smrg shift 6424d9b34d9Smrg shift 6434d9b34d9Smrg ;; 6444d9b34d9Smrg *) 6454d9b34d9Smrg set fnord "$@" "$arg" 6464d9b34d9Smrg shift 6474d9b34d9Smrg shift 6484d9b34d9Smrg ;; 6494d9b34d9Smrg esac 6504d9b34d9Smrg done 6518512f934Smrg "$@" -E 2>/dev/null | 6528512f934Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 6534d9b34d9Smrg rm -f "$depfile" 6544d9b34d9Smrg echo "$object : \\" > "$depfile" 6558512f934Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 6564d9b34d9Smrg echo " " >> "$depfile" 6578512f934Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6584d9b34d9Smrg rm -f "$tmpdepfile" 6594d9b34d9Smrg ;; 6604d9b34d9Smrg 6618512f934Smrgmsvcmsys) 6628512f934Smrg # This case exists only to let depend.m4 do its work. It works by 6638512f934Smrg # looking at the text of this script. This case will never be run, 6648512f934Smrg # since it is checked for above. 6658512f934Smrg exit 1 6668512f934Smrg ;; 6678512f934Smrg 6684d9b34d9Smrgnone) 6694d9b34d9Smrg exec "$@" 6704d9b34d9Smrg ;; 6714d9b34d9Smrg 6724d9b34d9Smrg*) 6734d9b34d9Smrg echo "Unknown depmode $depmode" 1>&2 6744d9b34d9Smrg exit 1 6754d9b34d9Smrg ;; 6764d9b34d9Smrgesac 6774d9b34d9Smrg 6784d9b34d9Smrgexit 0 6794d9b34d9Smrg 6804d9b34d9Smrg# Local Variables: 6814d9b34d9Smrg# mode: shell-script 6824d9b34d9Smrg# sh-indentation: 2 6834d9b34d9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6844d9b34d9Smrg# time-stamp-start: "scriptversion=" 6854d9b34d9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6868512f934Smrg# time-stamp-time-zone: "UTC" 6878512f934Smrg# time-stamp-end: "; # UTC" 6884d9b34d9Smrg# End: 689