depcomp revision 8512f934
14d9b34d9Smrg#! /bin/sh 24d9b34d9Smrg# depcomp - compile a program generating dependencies as side-effects 34d9b34d9Smrg 48512f934Smrgscriptversion=2009-04-28.21; # UTC 54d9b34d9Smrg 68512f934Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 78512f934Smrg# 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. 474d9b34d9Smrg tmpdepfile Temporary file to use when outputing 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 938512f934Smrg cygpath_u="sed s,\\\\\\\\,/,g" 948512f934Smrg depmode=msvisualcpp 958512f934Smrgfi 968512f934Smrg 974d9b34d9Smrgcase "$depmode" in 984d9b34d9Smrggcc3) 994d9b34d9Smrg## gcc 3 implements dependency tracking that does exactly what 1004d9b34d9Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1014d9b34d9Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1024d9b34d9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1034d9b34d9Smrg## the command line argument order; so add the flags where they 1044d9b34d9Smrg## appear in depend2.am. Note that the slowdown incurred here 1054d9b34d9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1064d9b34d9Smrg for arg 1074d9b34d9Smrg do 1084d9b34d9Smrg case $arg in 1094d9b34d9Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1104d9b34d9Smrg *) set fnord "$@" "$arg" ;; 1114d9b34d9Smrg esac 1124d9b34d9Smrg shift # fnord 1134d9b34d9Smrg shift # $arg 1144d9b34d9Smrg done 1154d9b34d9Smrg "$@" 1164d9b34d9Smrg stat=$? 1174d9b34d9Smrg if test $stat -eq 0; then : 1184d9b34d9Smrg else 1194d9b34d9Smrg rm -f "$tmpdepfile" 1204d9b34d9Smrg exit $stat 1214d9b34d9Smrg fi 1224d9b34d9Smrg mv "$tmpdepfile" "$depfile" 1234d9b34d9Smrg ;; 1244d9b34d9Smrg 1254d9b34d9Smrggcc) 1264d9b34d9Smrg## There are various ways to get dependency output from gcc. Here's 1274d9b34d9Smrg## why we pick this rather obscure method: 1284d9b34d9Smrg## - Don't want to use -MD because we'd like the dependencies to end 1294d9b34d9Smrg## up in a subdir. Having to rename by hand is ugly. 1304d9b34d9Smrg## (We might end up doing this anyway to support other compilers.) 1314d9b34d9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1324d9b34d9Smrg## -MM, not -M (despite what the docs say). 1334d9b34d9Smrg## - Using -M directly means running the compiler twice (even worse 1344d9b34d9Smrg## than renaming). 1354d9b34d9Smrg if test -z "$gccflag"; then 1364d9b34d9Smrg gccflag=-MD, 1374d9b34d9Smrg fi 1384d9b34d9Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1394d9b34d9Smrg stat=$? 1404d9b34d9Smrg if test $stat -eq 0; then : 1414d9b34d9Smrg else 1424d9b34d9Smrg rm -f "$tmpdepfile" 1434d9b34d9Smrg exit $stat 1444d9b34d9Smrg fi 1454d9b34d9Smrg rm -f "$depfile" 1464d9b34d9Smrg echo "$object : \\" > "$depfile" 1474d9b34d9Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1484d9b34d9Smrg## The second -e expression handles DOS-style file names with drive letters. 1494d9b34d9Smrg sed -e 's/^[^:]*: / /' \ 1504d9b34d9Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1514d9b34d9Smrg## This next piece of magic avoids the `deleted header file' problem. 1524d9b34d9Smrg## The problem is that when a header file which appears in a .P file 1534d9b34d9Smrg## is deleted, the dependency causes make to die (because there is 1544d9b34d9Smrg## typically no way to rebuild the header). We avoid this by adding 1554d9b34d9Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1564d9b34d9Smrg## this for us directly. 1574d9b34d9Smrg tr ' ' ' 1584d9b34d9Smrg' < "$tmpdepfile" | 1594d9b34d9Smrg## Some versions of gcc put a space before the `:'. On the theory 1604d9b34d9Smrg## that the space means something, we add a space to the output as 1614d9b34d9Smrg## well. 1624d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1634d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 1644d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1654d9b34d9Smrg rm -f "$tmpdepfile" 1664d9b34d9Smrg ;; 1674d9b34d9Smrg 1684d9b34d9Smrghp) 1694d9b34d9Smrg # This case exists only to let depend.m4 do its work. It works by 1704d9b34d9Smrg # looking at the text of this script. This case will never be run, 1714d9b34d9Smrg # since it is checked for above. 1724d9b34d9Smrg exit 1 1734d9b34d9Smrg ;; 1744d9b34d9Smrg 1754d9b34d9Smrgsgi) 1764d9b34d9Smrg if test "$libtool" = yes; then 1774d9b34d9Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1784d9b34d9Smrg else 1794d9b34d9Smrg "$@" -MDupdate "$tmpdepfile" 1804d9b34d9Smrg fi 1814d9b34d9Smrg stat=$? 1824d9b34d9Smrg if test $stat -eq 0; then : 1834d9b34d9Smrg else 1844d9b34d9Smrg rm -f "$tmpdepfile" 1854d9b34d9Smrg exit $stat 1864d9b34d9Smrg fi 1874d9b34d9Smrg rm -f "$depfile" 1884d9b34d9Smrg 1894d9b34d9Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1904d9b34d9Smrg echo "$object : \\" > "$depfile" 1914d9b34d9Smrg 1924d9b34d9Smrg # Clip off the initial element (the dependent). Don't try to be 1934d9b34d9Smrg # clever and replace this with sed code, as IRIX sed won't handle 1944d9b34d9Smrg # lines with more than a fixed number of characters (4096 in 1954d9b34d9Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1964d9b34d9Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1974d9b34d9Smrg # dependency line. 1984d9b34d9Smrg tr ' ' ' 1994d9b34d9Smrg' < "$tmpdepfile" \ 2004d9b34d9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2014d9b34d9Smrg tr ' 2028512f934Smrg' ' ' >> "$depfile" 2038512f934Smrg echo >> "$depfile" 2044d9b34d9Smrg 2054d9b34d9Smrg # The second pass generates a dummy entry for each header file. 2064d9b34d9Smrg tr ' ' ' 2074d9b34d9Smrg' < "$tmpdepfile" \ 2084d9b34d9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2098512f934Smrg >> "$depfile" 2104d9b34d9Smrg else 2114d9b34d9Smrg # The sourcefile does not contain any dependencies, so just 2124d9b34d9Smrg # store a dummy comment line, to avoid errors with the Makefile 2134d9b34d9Smrg # "include basename.Plo" scheme. 2144d9b34d9Smrg echo "#dummy" > "$depfile" 2154d9b34d9Smrg fi 2164d9b34d9Smrg rm -f "$tmpdepfile" 2174d9b34d9Smrg ;; 2184d9b34d9Smrg 2194d9b34d9Smrgaix) 2204d9b34d9Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2214d9b34d9Smrg # in a .u file. In older versions, this file always lives in the 2224d9b34d9Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2234d9b34d9Smrg # start of each line; $object doesn't have directory information. 2244d9b34d9Smrg # Version 6 uses the directory in both cases. 2258512f934Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2268512f934Smrg test "x$dir" = "x$object" && dir= 2278512f934Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2284d9b34d9Smrg if test "$libtool" = yes; then 2298512f934Smrg tmpdepfile1=$dir$base.u 2308512f934Smrg tmpdepfile2=$base.u 2318512f934Smrg tmpdepfile3=$dir.libs/$base.u 2324d9b34d9Smrg "$@" -Wc,-M 2334d9b34d9Smrg else 2348512f934Smrg tmpdepfile1=$dir$base.u 2358512f934Smrg tmpdepfile2=$dir$base.u 2368512f934Smrg tmpdepfile3=$dir$base.u 2374d9b34d9Smrg "$@" -M 2384d9b34d9Smrg fi 2394d9b34d9Smrg stat=$? 2404d9b34d9Smrg 2414d9b34d9Smrg if test $stat -eq 0; then : 2424d9b34d9Smrg else 2438512f934Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2444d9b34d9Smrg exit $stat 2454d9b34d9Smrg fi 2464d9b34d9Smrg 2478512f934Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2488512f934Smrg do 2498512f934Smrg test -f "$tmpdepfile" && break 2508512f934Smrg done 2514d9b34d9Smrg if test -f "$tmpdepfile"; then 2524d9b34d9Smrg # Each line is of the form `foo.o: dependent.h'. 2534d9b34d9Smrg # Do two passes, one to just change these to 2544d9b34d9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2558512f934Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2568512f934Smrg # That's a tab and a space in the []. 2578512f934Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2584d9b34d9Smrg else 2594d9b34d9Smrg # The sourcefile does not contain any dependencies, so just 2604d9b34d9Smrg # store a dummy comment line, to avoid errors with the Makefile 2614d9b34d9Smrg # "include basename.Plo" scheme. 2624d9b34d9Smrg echo "#dummy" > "$depfile" 2634d9b34d9Smrg fi 2644d9b34d9Smrg rm -f "$tmpdepfile" 2654d9b34d9Smrg ;; 2664d9b34d9Smrg 2674d9b34d9Smrgicc) 2684d9b34d9Smrg # Intel's C compiler understands `-MD -MF file'. However on 2694d9b34d9Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2704d9b34d9Smrg # ICC 7.0 will fill foo.d with something like 2714d9b34d9Smrg # foo.o: sub/foo.c 2724d9b34d9Smrg # foo.o: sub/foo.h 2734d9b34d9Smrg # which is wrong. We want: 2744d9b34d9Smrg # sub/foo.o: sub/foo.c 2754d9b34d9Smrg # sub/foo.o: sub/foo.h 2764d9b34d9Smrg # sub/foo.c: 2774d9b34d9Smrg # sub/foo.h: 2784d9b34d9Smrg # ICC 7.1 will output 2794d9b34d9Smrg # foo.o: sub/foo.c sub/foo.h 2804d9b34d9Smrg # and will wrap long lines using \ : 2814d9b34d9Smrg # foo.o: sub/foo.c ... \ 2824d9b34d9Smrg # sub/foo.h ... \ 2834d9b34d9Smrg # ... 2844d9b34d9Smrg 2854d9b34d9Smrg "$@" -MD -MF "$tmpdepfile" 2864d9b34d9Smrg stat=$? 2874d9b34d9Smrg if test $stat -eq 0; then : 2884d9b34d9Smrg else 2894d9b34d9Smrg rm -f "$tmpdepfile" 2904d9b34d9Smrg exit $stat 2914d9b34d9Smrg fi 2924d9b34d9Smrg rm -f "$depfile" 2934d9b34d9Smrg # Each line is of the form `foo.o: dependent.h', 2944d9b34d9Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2954d9b34d9Smrg # Do two passes, one to just change these to 2964d9b34d9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2974d9b34d9Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2984d9b34d9Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2994d9b34d9Smrg # correctly. Breaking it into two sed invocations is a workaround. 3004d9b34d9Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3014d9b34d9Smrg sed -e 's/$/ :/' >> "$depfile" 3024d9b34d9Smrg rm -f "$tmpdepfile" 3034d9b34d9Smrg ;; 3044d9b34d9Smrg 3054d9b34d9Smrghp2) 3064d9b34d9Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3074d9b34d9Smrg # compilers, which have integrated preprocessors. The correct option 3084d9b34d9Smrg # to use with these is +Maked; it writes dependencies to a file named 3094d9b34d9Smrg # 'foo.d', which lands next to the object file, wherever that 3104d9b34d9Smrg # happens to be. 3114d9b34d9Smrg # Much of this is similar to the tru64 case; see comments there. 3124d9b34d9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3134d9b34d9Smrg test "x$dir" = "x$object" && dir= 3144d9b34d9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3154d9b34d9Smrg if test "$libtool" = yes; then 3164d9b34d9Smrg tmpdepfile1=$dir$base.d 3174d9b34d9Smrg tmpdepfile2=$dir.libs/$base.d 3184d9b34d9Smrg "$@" -Wc,+Maked 3194d9b34d9Smrg else 3204d9b34d9Smrg tmpdepfile1=$dir$base.d 3214d9b34d9Smrg tmpdepfile2=$dir$base.d 3224d9b34d9Smrg "$@" +Maked 3234d9b34d9Smrg fi 3244d9b34d9Smrg stat=$? 3254d9b34d9Smrg if test $stat -eq 0; then : 3264d9b34d9Smrg else 3274d9b34d9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3284d9b34d9Smrg exit $stat 3294d9b34d9Smrg fi 3304d9b34d9Smrg 3314d9b34d9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3324d9b34d9Smrg do 3334d9b34d9Smrg test -f "$tmpdepfile" && break 3344d9b34d9Smrg done 3354d9b34d9Smrg if test -f "$tmpdepfile"; then 3364d9b34d9Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3374d9b34d9Smrg # Add `dependent.h:' lines. 3388512f934Smrg sed -ne '2,${ 3398512f934Smrg s/^ *// 3408512f934Smrg s/ \\*$// 3418512f934Smrg s/$/:/ 3428512f934Smrg p 3438512f934Smrg }' "$tmpdepfile" >> "$depfile" 3444d9b34d9Smrg else 3454d9b34d9Smrg echo "#dummy" > "$depfile" 3464d9b34d9Smrg fi 3474d9b34d9Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3484d9b34d9Smrg ;; 3494d9b34d9Smrg 3504d9b34d9Smrgtru64) 3514d9b34d9Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3524d9b34d9Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3534d9b34d9Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3544d9b34d9Smrg # dependencies in `foo.d' instead, so we check for that too. 3554d9b34d9Smrg # Subdirectories are respected. 3564d9b34d9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3574d9b34d9Smrg test "x$dir" = "x$object" && dir= 3584d9b34d9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3594d9b34d9Smrg 3604d9b34d9Smrg if test "$libtool" = yes; then 3614d9b34d9Smrg # With Tru64 cc, shared objects can also be used to make a 3624d9b34d9Smrg # static library. This mechanism is used in libtool 1.4 series to 3634d9b34d9Smrg # handle both shared and static libraries in a single compilation. 3644d9b34d9Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3654d9b34d9Smrg # 3664d9b34d9Smrg # With libtool 1.5 this exception was removed, and libtool now 3674d9b34d9Smrg # generates 2 separate objects for the 2 libraries. These two 3684d9b34d9Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3694d9b34d9Smrg # in $dir$base.o.d. We have to check for both files, because 3704d9b34d9Smrg # one of the two compilations can be disabled. We should prefer 3714d9b34d9Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3724d9b34d9Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3734d9b34d9Smrg # the former would cause a distcleancheck panic. 3744d9b34d9Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3754d9b34d9Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3764d9b34d9Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3774d9b34d9Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3784d9b34d9Smrg "$@" -Wc,-MD 3794d9b34d9Smrg else 3804d9b34d9Smrg tmpdepfile1=$dir$base.o.d 3814d9b34d9Smrg tmpdepfile2=$dir$base.d 3824d9b34d9Smrg tmpdepfile3=$dir$base.d 3834d9b34d9Smrg tmpdepfile4=$dir$base.d 3844d9b34d9Smrg "$@" -MD 3854d9b34d9Smrg fi 3864d9b34d9Smrg 3874d9b34d9Smrg stat=$? 3884d9b34d9Smrg if test $stat -eq 0; then : 3894d9b34d9Smrg else 3904d9b34d9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3914d9b34d9Smrg exit $stat 3924d9b34d9Smrg fi 3934d9b34d9Smrg 3944d9b34d9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3954d9b34d9Smrg do 3964d9b34d9Smrg test -f "$tmpdepfile" && break 3974d9b34d9Smrg done 3984d9b34d9Smrg if test -f "$tmpdepfile"; then 3994d9b34d9Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4004d9b34d9Smrg # That's a tab and a space in the []. 4014d9b34d9Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4024d9b34d9Smrg else 4034d9b34d9Smrg echo "#dummy" > "$depfile" 4044d9b34d9Smrg fi 4054d9b34d9Smrg rm -f "$tmpdepfile" 4064d9b34d9Smrg ;; 4074d9b34d9Smrg 4084d9b34d9Smrg#nosideeffect) 4094d9b34d9Smrg # This comment above is used by automake to tell side-effect 4104d9b34d9Smrg # dependency tracking mechanisms from slower ones. 4114d9b34d9Smrg 4124d9b34d9Smrgdashmstdout) 4134d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 4144d9b34d9Smrg # always write the preprocessed file to stdout, regardless of -o. 4154d9b34d9Smrg "$@" || exit $? 4164d9b34d9Smrg 4174d9b34d9Smrg # Remove the call to Libtool. 4184d9b34d9Smrg if test "$libtool" = yes; then 4198512f934Smrg while test "X$1" != 'X--mode=compile'; do 4204d9b34d9Smrg shift 4214d9b34d9Smrg done 4224d9b34d9Smrg shift 4234d9b34d9Smrg fi 4244d9b34d9Smrg 4254d9b34d9Smrg # Remove `-o $object'. 4264d9b34d9Smrg IFS=" " 4274d9b34d9Smrg for arg 4284d9b34d9Smrg do 4294d9b34d9Smrg case $arg in 4304d9b34d9Smrg -o) 4314d9b34d9Smrg shift 4324d9b34d9Smrg ;; 4334d9b34d9Smrg $object) 4344d9b34d9Smrg shift 4354d9b34d9Smrg ;; 4364d9b34d9Smrg *) 4374d9b34d9Smrg set fnord "$@" "$arg" 4384d9b34d9Smrg shift # fnord 4394d9b34d9Smrg shift # $arg 4404d9b34d9Smrg ;; 4414d9b34d9Smrg esac 4424d9b34d9Smrg done 4434d9b34d9Smrg 4444d9b34d9Smrg test -z "$dashmflag" && dashmflag=-M 4454d9b34d9Smrg # Require at least two characters before searching for `:' 4464d9b34d9Smrg # in the target name. This is to cope with DOS-style filenames: 4474d9b34d9Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4484d9b34d9Smrg "$@" $dashmflag | 4494d9b34d9Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4504d9b34d9Smrg rm -f "$depfile" 4514d9b34d9Smrg cat < "$tmpdepfile" > "$depfile" 4524d9b34d9Smrg tr ' ' ' 4534d9b34d9Smrg' < "$tmpdepfile" | \ 4544d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4554d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 4564d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4574d9b34d9Smrg rm -f "$tmpdepfile" 4584d9b34d9Smrg ;; 4594d9b34d9Smrg 4604d9b34d9SmrgdashXmstdout) 4614d9b34d9Smrg # This case only exists to satisfy depend.m4. It is never actually 4624d9b34d9Smrg # run, as this mode is specially recognized in the preamble. 4634d9b34d9Smrg exit 1 4644d9b34d9Smrg ;; 4654d9b34d9Smrg 4664d9b34d9Smrgmakedepend) 4674d9b34d9Smrg "$@" || exit $? 4684d9b34d9Smrg # Remove any Libtool call 4694d9b34d9Smrg if test "$libtool" = yes; then 4708512f934Smrg while test "X$1" != 'X--mode=compile'; do 4714d9b34d9Smrg shift 4724d9b34d9Smrg done 4734d9b34d9Smrg shift 4744d9b34d9Smrg fi 4754d9b34d9Smrg # X makedepend 4764d9b34d9Smrg shift 4778512f934Smrg cleared=no eat=no 4788512f934Smrg for arg 4798512f934Smrg do 4804d9b34d9Smrg case $cleared in 4814d9b34d9Smrg no) 4824d9b34d9Smrg set ""; shift 4834d9b34d9Smrg cleared=yes ;; 4844d9b34d9Smrg esac 4858512f934Smrg if test $eat = yes; then 4868512f934Smrg eat=no 4878512f934Smrg continue 4888512f934Smrg fi 4894d9b34d9Smrg case "$arg" in 4904d9b34d9Smrg -D*|-I*) 4914d9b34d9Smrg set fnord "$@" "$arg"; shift ;; 4924d9b34d9Smrg # Strip any option that makedepend may not understand. Remove 4934d9b34d9Smrg # the object too, otherwise makedepend will parse it as a source file. 4948512f934Smrg -arch) 4958512f934Smrg eat=yes ;; 4964d9b34d9Smrg -*|$object) 4974d9b34d9Smrg ;; 4984d9b34d9Smrg *) 4994d9b34d9Smrg set fnord "$@" "$arg"; shift ;; 5004d9b34d9Smrg esac 5014d9b34d9Smrg done 5028512f934Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5034d9b34d9Smrg touch "$tmpdepfile" 5044d9b34d9Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5054d9b34d9Smrg rm -f "$depfile" 5064d9b34d9Smrg cat < "$tmpdepfile" > "$depfile" 5074d9b34d9Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5084d9b34d9Smrg' | \ 5094d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5104d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 5114d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5124d9b34d9Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5134d9b34d9Smrg ;; 5144d9b34d9Smrg 5154d9b34d9Smrgcpp) 5164d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 5174d9b34d9Smrg # always write the preprocessed file to stdout. 5184d9b34d9Smrg "$@" || exit $? 5194d9b34d9Smrg 5204d9b34d9Smrg # Remove the call to Libtool. 5214d9b34d9Smrg if test "$libtool" = yes; then 5228512f934Smrg while test "X$1" != 'X--mode=compile'; do 5234d9b34d9Smrg shift 5244d9b34d9Smrg done 5254d9b34d9Smrg shift 5264d9b34d9Smrg fi 5274d9b34d9Smrg 5284d9b34d9Smrg # Remove `-o $object'. 5294d9b34d9Smrg IFS=" " 5304d9b34d9Smrg for arg 5314d9b34d9Smrg do 5324d9b34d9Smrg case $arg in 5334d9b34d9Smrg -o) 5344d9b34d9Smrg shift 5354d9b34d9Smrg ;; 5364d9b34d9Smrg $object) 5374d9b34d9Smrg shift 5384d9b34d9Smrg ;; 5394d9b34d9Smrg *) 5404d9b34d9Smrg set fnord "$@" "$arg" 5414d9b34d9Smrg shift # fnord 5424d9b34d9Smrg shift # $arg 5434d9b34d9Smrg ;; 5444d9b34d9Smrg esac 5454d9b34d9Smrg done 5464d9b34d9Smrg 5474d9b34d9Smrg "$@" -E | 5484d9b34d9Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5494d9b34d9Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5504d9b34d9Smrg sed '$ s: \\$::' > "$tmpdepfile" 5514d9b34d9Smrg rm -f "$depfile" 5524d9b34d9Smrg echo "$object : \\" > "$depfile" 5534d9b34d9Smrg cat < "$tmpdepfile" >> "$depfile" 5544d9b34d9Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5554d9b34d9Smrg rm -f "$tmpdepfile" 5564d9b34d9Smrg ;; 5574d9b34d9Smrg 5584d9b34d9Smrgmsvisualcpp) 5594d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 5608512f934Smrg # always write the preprocessed file to stdout. 5614d9b34d9Smrg "$@" || exit $? 5628512f934Smrg 5638512f934Smrg # Remove the call to Libtool. 5648512f934Smrg if test "$libtool" = yes; then 5658512f934Smrg while test "X$1" != 'X--mode=compile'; do 5668512f934Smrg shift 5678512f934Smrg done 5688512f934Smrg shift 5698512f934Smrg fi 5708512f934Smrg 5714d9b34d9Smrg IFS=" " 5724d9b34d9Smrg for arg 5734d9b34d9Smrg do 5744d9b34d9Smrg case "$arg" in 5758512f934Smrg -o) 5768512f934Smrg shift 5778512f934Smrg ;; 5788512f934Smrg $object) 5798512f934Smrg shift 5808512f934Smrg ;; 5814d9b34d9Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5824d9b34d9Smrg set fnord "$@" 5834d9b34d9Smrg shift 5844d9b34d9Smrg shift 5854d9b34d9Smrg ;; 5864d9b34d9Smrg *) 5874d9b34d9Smrg set fnord "$@" "$arg" 5884d9b34d9Smrg shift 5894d9b34d9Smrg shift 5904d9b34d9Smrg ;; 5914d9b34d9Smrg esac 5924d9b34d9Smrg done 5938512f934Smrg "$@" -E 2>/dev/null | 5948512f934Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5954d9b34d9Smrg rm -f "$depfile" 5964d9b34d9Smrg echo "$object : \\" > "$depfile" 5978512f934Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5984d9b34d9Smrg echo " " >> "$depfile" 5998512f934Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6004d9b34d9Smrg rm -f "$tmpdepfile" 6014d9b34d9Smrg ;; 6024d9b34d9Smrg 6038512f934Smrgmsvcmsys) 6048512f934Smrg # This case exists only to let depend.m4 do its work. It works by 6058512f934Smrg # looking at the text of this script. This case will never be run, 6068512f934Smrg # since it is checked for above. 6078512f934Smrg exit 1 6088512f934Smrg ;; 6098512f934Smrg 6104d9b34d9Smrgnone) 6114d9b34d9Smrg exec "$@" 6124d9b34d9Smrg ;; 6134d9b34d9Smrg 6144d9b34d9Smrg*) 6154d9b34d9Smrg echo "Unknown depmode $depmode" 1>&2 6164d9b34d9Smrg exit 1 6174d9b34d9Smrg ;; 6184d9b34d9Smrgesac 6194d9b34d9Smrg 6204d9b34d9Smrgexit 0 6214d9b34d9Smrg 6224d9b34d9Smrg# Local Variables: 6234d9b34d9Smrg# mode: shell-script 6244d9b34d9Smrg# sh-indentation: 2 6254d9b34d9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6264d9b34d9Smrg# time-stamp-start: "scriptversion=" 6274d9b34d9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6288512f934Smrg# time-stamp-time-zone: "UTC" 6298512f934Smrg# time-stamp-end: "; # UTC" 6304d9b34d9Smrg# End: 631