depcomp revision 4d9b34d9
14d9b34d9Smrg#! /bin/sh 24d9b34d9Smrg# depcomp - compile a program generating dependencies as side-effects 34d9b34d9Smrg 44d9b34d9Smrgscriptversion=2006-10-15.18 54d9b34d9Smrg 64d9b34d9Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 74d9b34d9Smrg# 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 204d9b34d9Smrg# along with this program; if not, write to the Free Software 214d9b34d9Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 224d9b34d9Smrg# 02110-1301, USA. 234d9b34d9Smrg 244d9b34d9Smrg# As a special exception to the GNU General Public License, if you 254d9b34d9Smrg# distribute this file as part of a program that contains a 264d9b34d9Smrg# configuration script generated by Autoconf, you may include it under 274d9b34d9Smrg# the same distribution terms that you use for the rest of that program. 284d9b34d9Smrg 294d9b34d9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 304d9b34d9Smrg 314d9b34d9Smrgcase $1 in 324d9b34d9Smrg '') 334d9b34d9Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 344d9b34d9Smrg exit 1; 354d9b34d9Smrg ;; 364d9b34d9Smrg -h | --h*) 374d9b34d9Smrg cat <<\EOF 384d9b34d9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 394d9b34d9Smrg 404d9b34d9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 414d9b34d9Smrgas side-effects. 424d9b34d9Smrg 434d9b34d9SmrgEnvironment variables: 444d9b34d9Smrg depmode Dependency tracking mode. 454d9b34d9Smrg source Source file read by `PROGRAMS ARGS'. 464d9b34d9Smrg object Object file output by `PROGRAMS ARGS'. 474d9b34d9Smrg DEPDIR directory where to store dependencies. 484d9b34d9Smrg depfile Dependency file to output. 494d9b34d9Smrg tmpdepfile Temporary file to use when outputing dependencies. 504d9b34d9Smrg libtool Whether libtool is used (yes/no). 514d9b34d9Smrg 524d9b34d9SmrgReport bugs to <bug-automake@gnu.org>. 534d9b34d9SmrgEOF 544d9b34d9Smrg exit $? 554d9b34d9Smrg ;; 564d9b34d9Smrg -v | --v*) 574d9b34d9Smrg echo "depcomp $scriptversion" 584d9b34d9Smrg exit $? 594d9b34d9Smrg ;; 604d9b34d9Smrgesac 614d9b34d9Smrg 624d9b34d9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 634d9b34d9Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 644d9b34d9Smrg exit 1 654d9b34d9Smrgfi 664d9b34d9Smrg 674d9b34d9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 684d9b34d9Smrgdepfile=${depfile-`echo "$object" | 694d9b34d9Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 704d9b34d9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 714d9b34d9Smrg 724d9b34d9Smrgrm -f "$tmpdepfile" 734d9b34d9Smrg 744d9b34d9Smrg# Some modes work just like other modes, but use different flags. We 754d9b34d9Smrg# parameterize here, but still list the modes in the big case below, 764d9b34d9Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 774d9b34d9Smrg# here, because this file can only contain one case statement. 784d9b34d9Smrgif test "$depmode" = hp; then 794d9b34d9Smrg # HP compiler uses -M and no extra arg. 804d9b34d9Smrg gccflag=-M 814d9b34d9Smrg depmode=gcc 824d9b34d9Smrgfi 834d9b34d9Smrg 844d9b34d9Smrgif test "$depmode" = dashXmstdout; then 854d9b34d9Smrg # This is just like dashmstdout with a different argument. 864d9b34d9Smrg dashmflag=-xM 874d9b34d9Smrg depmode=dashmstdout 884d9b34d9Smrgfi 894d9b34d9Smrg 904d9b34d9Smrgcase "$depmode" in 914d9b34d9Smrggcc3) 924d9b34d9Smrg## gcc 3 implements dependency tracking that does exactly what 934d9b34d9Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 944d9b34d9Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 954d9b34d9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 964d9b34d9Smrg## the command line argument order; so add the flags where they 974d9b34d9Smrg## appear in depend2.am. Note that the slowdown incurred here 984d9b34d9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 994d9b34d9Smrg for arg 1004d9b34d9Smrg do 1014d9b34d9Smrg case $arg in 1024d9b34d9Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1034d9b34d9Smrg *) set fnord "$@" "$arg" ;; 1044d9b34d9Smrg esac 1054d9b34d9Smrg shift # fnord 1064d9b34d9Smrg shift # $arg 1074d9b34d9Smrg done 1084d9b34d9Smrg "$@" 1094d9b34d9Smrg stat=$? 1104d9b34d9Smrg if test $stat -eq 0; then : 1114d9b34d9Smrg else 1124d9b34d9Smrg rm -f "$tmpdepfile" 1134d9b34d9Smrg exit $stat 1144d9b34d9Smrg fi 1154d9b34d9Smrg mv "$tmpdepfile" "$depfile" 1164d9b34d9Smrg ;; 1174d9b34d9Smrg 1184d9b34d9Smrggcc) 1194d9b34d9Smrg## There are various ways to get dependency output from gcc. Here's 1204d9b34d9Smrg## why we pick this rather obscure method: 1214d9b34d9Smrg## - Don't want to use -MD because we'd like the dependencies to end 1224d9b34d9Smrg## up in a subdir. Having to rename by hand is ugly. 1234d9b34d9Smrg## (We might end up doing this anyway to support other compilers.) 1244d9b34d9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1254d9b34d9Smrg## -MM, not -M (despite what the docs say). 1264d9b34d9Smrg## - Using -M directly means running the compiler twice (even worse 1274d9b34d9Smrg## than renaming). 1284d9b34d9Smrg if test -z "$gccflag"; then 1294d9b34d9Smrg gccflag=-MD, 1304d9b34d9Smrg fi 1314d9b34d9Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1324d9b34d9Smrg stat=$? 1334d9b34d9Smrg if test $stat -eq 0; then : 1344d9b34d9Smrg else 1354d9b34d9Smrg rm -f "$tmpdepfile" 1364d9b34d9Smrg exit $stat 1374d9b34d9Smrg fi 1384d9b34d9Smrg rm -f "$depfile" 1394d9b34d9Smrg echo "$object : \\" > "$depfile" 1404d9b34d9Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1414d9b34d9Smrg## The second -e expression handles DOS-style file names with drive letters. 1424d9b34d9Smrg sed -e 's/^[^:]*: / /' \ 1434d9b34d9Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1444d9b34d9Smrg## This next piece of magic avoids the `deleted header file' problem. 1454d9b34d9Smrg## The problem is that when a header file which appears in a .P file 1464d9b34d9Smrg## is deleted, the dependency causes make to die (because there is 1474d9b34d9Smrg## typically no way to rebuild the header). We avoid this by adding 1484d9b34d9Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1494d9b34d9Smrg## this for us directly. 1504d9b34d9Smrg tr ' ' ' 1514d9b34d9Smrg' < "$tmpdepfile" | 1524d9b34d9Smrg## Some versions of gcc put a space before the `:'. On the theory 1534d9b34d9Smrg## that the space means something, we add a space to the output as 1544d9b34d9Smrg## well. 1554d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1564d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 1574d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1584d9b34d9Smrg rm -f "$tmpdepfile" 1594d9b34d9Smrg ;; 1604d9b34d9Smrg 1614d9b34d9Smrghp) 1624d9b34d9Smrg # This case exists only to let depend.m4 do its work. It works by 1634d9b34d9Smrg # looking at the text of this script. This case will never be run, 1644d9b34d9Smrg # since it is checked for above. 1654d9b34d9Smrg exit 1 1664d9b34d9Smrg ;; 1674d9b34d9Smrg 1684d9b34d9Smrgsgi) 1694d9b34d9Smrg if test "$libtool" = yes; then 1704d9b34d9Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1714d9b34d9Smrg else 1724d9b34d9Smrg "$@" -MDupdate "$tmpdepfile" 1734d9b34d9Smrg fi 1744d9b34d9Smrg stat=$? 1754d9b34d9Smrg if test $stat -eq 0; then : 1764d9b34d9Smrg else 1774d9b34d9Smrg rm -f "$tmpdepfile" 1784d9b34d9Smrg exit $stat 1794d9b34d9Smrg fi 1804d9b34d9Smrg rm -f "$depfile" 1814d9b34d9Smrg 1824d9b34d9Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1834d9b34d9Smrg echo "$object : \\" > "$depfile" 1844d9b34d9Smrg 1854d9b34d9Smrg # Clip off the initial element (the dependent). Don't try to be 1864d9b34d9Smrg # clever and replace this with sed code, as IRIX sed won't handle 1874d9b34d9Smrg # lines with more than a fixed number of characters (4096 in 1884d9b34d9Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1894d9b34d9Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1904d9b34d9Smrg # dependency line. 1914d9b34d9Smrg tr ' ' ' 1924d9b34d9Smrg' < "$tmpdepfile" \ 1934d9b34d9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1944d9b34d9Smrg tr ' 1954d9b34d9Smrg' ' ' >> $depfile 1964d9b34d9Smrg echo >> $depfile 1974d9b34d9Smrg 1984d9b34d9Smrg # The second pass generates a dummy entry for each header file. 1994d9b34d9Smrg tr ' ' ' 2004d9b34d9Smrg' < "$tmpdepfile" \ 2014d9b34d9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2024d9b34d9Smrg >> $depfile 2034d9b34d9Smrg else 2044d9b34d9Smrg # The sourcefile does not contain any dependencies, so just 2054d9b34d9Smrg # store a dummy comment line, to avoid errors with the Makefile 2064d9b34d9Smrg # "include basename.Plo" scheme. 2074d9b34d9Smrg echo "#dummy" > "$depfile" 2084d9b34d9Smrg fi 2094d9b34d9Smrg rm -f "$tmpdepfile" 2104d9b34d9Smrg ;; 2114d9b34d9Smrg 2124d9b34d9Smrgaix) 2134d9b34d9Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2144d9b34d9Smrg # in a .u file. In older versions, this file always lives in the 2154d9b34d9Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2164d9b34d9Smrg # start of each line; $object doesn't have directory information. 2174d9b34d9Smrg # Version 6 uses the directory in both cases. 2184d9b34d9Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2194d9b34d9Smrg tmpdepfile="$stripped.u" 2204d9b34d9Smrg if test "$libtool" = yes; then 2214d9b34d9Smrg "$@" -Wc,-M 2224d9b34d9Smrg else 2234d9b34d9Smrg "$@" -M 2244d9b34d9Smrg fi 2254d9b34d9Smrg stat=$? 2264d9b34d9Smrg 2274d9b34d9Smrg if test -f "$tmpdepfile"; then : 2284d9b34d9Smrg else 2294d9b34d9Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2304d9b34d9Smrg tmpdepfile="$stripped.u" 2314d9b34d9Smrg fi 2324d9b34d9Smrg 2334d9b34d9Smrg if test $stat -eq 0; then : 2344d9b34d9Smrg else 2354d9b34d9Smrg rm -f "$tmpdepfile" 2364d9b34d9Smrg exit $stat 2374d9b34d9Smrg fi 2384d9b34d9Smrg 2394d9b34d9Smrg if test -f "$tmpdepfile"; then 2404d9b34d9Smrg outname="$stripped.o" 2414d9b34d9Smrg # Each line is of the form `foo.o: dependent.h'. 2424d9b34d9Smrg # Do two passes, one to just change these to 2434d9b34d9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2444d9b34d9Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2454d9b34d9Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2464d9b34d9Smrg else 2474d9b34d9Smrg # The sourcefile does not contain any dependencies, so just 2484d9b34d9Smrg # store a dummy comment line, to avoid errors with the Makefile 2494d9b34d9Smrg # "include basename.Plo" scheme. 2504d9b34d9Smrg echo "#dummy" > "$depfile" 2514d9b34d9Smrg fi 2524d9b34d9Smrg rm -f "$tmpdepfile" 2534d9b34d9Smrg ;; 2544d9b34d9Smrg 2554d9b34d9Smrgicc) 2564d9b34d9Smrg # Intel's C compiler understands `-MD -MF file'. However on 2574d9b34d9Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2584d9b34d9Smrg # ICC 7.0 will fill foo.d with something like 2594d9b34d9Smrg # foo.o: sub/foo.c 2604d9b34d9Smrg # foo.o: sub/foo.h 2614d9b34d9Smrg # which is wrong. We want: 2624d9b34d9Smrg # sub/foo.o: sub/foo.c 2634d9b34d9Smrg # sub/foo.o: sub/foo.h 2644d9b34d9Smrg # sub/foo.c: 2654d9b34d9Smrg # sub/foo.h: 2664d9b34d9Smrg # ICC 7.1 will output 2674d9b34d9Smrg # foo.o: sub/foo.c sub/foo.h 2684d9b34d9Smrg # and will wrap long lines using \ : 2694d9b34d9Smrg # foo.o: sub/foo.c ... \ 2704d9b34d9Smrg # sub/foo.h ... \ 2714d9b34d9Smrg # ... 2724d9b34d9Smrg 2734d9b34d9Smrg "$@" -MD -MF "$tmpdepfile" 2744d9b34d9Smrg stat=$? 2754d9b34d9Smrg if test $stat -eq 0; then : 2764d9b34d9Smrg else 2774d9b34d9Smrg rm -f "$tmpdepfile" 2784d9b34d9Smrg exit $stat 2794d9b34d9Smrg fi 2804d9b34d9Smrg rm -f "$depfile" 2814d9b34d9Smrg # Each line is of the form `foo.o: dependent.h', 2824d9b34d9Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2834d9b34d9Smrg # Do two passes, one to just change these to 2844d9b34d9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2854d9b34d9Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2864d9b34d9Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2874d9b34d9Smrg # correctly. Breaking it into two sed invocations is a workaround. 2884d9b34d9Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2894d9b34d9Smrg sed -e 's/$/ :/' >> "$depfile" 2904d9b34d9Smrg rm -f "$tmpdepfile" 2914d9b34d9Smrg ;; 2924d9b34d9Smrg 2934d9b34d9Smrghp2) 2944d9b34d9Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2954d9b34d9Smrg # compilers, which have integrated preprocessors. The correct option 2964d9b34d9Smrg # to use with these is +Maked; it writes dependencies to a file named 2974d9b34d9Smrg # 'foo.d', which lands next to the object file, wherever that 2984d9b34d9Smrg # happens to be. 2994d9b34d9Smrg # Much of this is similar to the tru64 case; see comments there. 3004d9b34d9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3014d9b34d9Smrg test "x$dir" = "x$object" && dir= 3024d9b34d9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3034d9b34d9Smrg if test "$libtool" = yes; then 3044d9b34d9Smrg tmpdepfile1=$dir$base.d 3054d9b34d9Smrg tmpdepfile2=$dir.libs/$base.d 3064d9b34d9Smrg "$@" -Wc,+Maked 3074d9b34d9Smrg else 3084d9b34d9Smrg tmpdepfile1=$dir$base.d 3094d9b34d9Smrg tmpdepfile2=$dir$base.d 3104d9b34d9Smrg "$@" +Maked 3114d9b34d9Smrg fi 3124d9b34d9Smrg stat=$? 3134d9b34d9Smrg if test $stat -eq 0; then : 3144d9b34d9Smrg else 3154d9b34d9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3164d9b34d9Smrg exit $stat 3174d9b34d9Smrg fi 3184d9b34d9Smrg 3194d9b34d9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3204d9b34d9Smrg do 3214d9b34d9Smrg test -f "$tmpdepfile" && break 3224d9b34d9Smrg done 3234d9b34d9Smrg if test -f "$tmpdepfile"; then 3244d9b34d9Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3254d9b34d9Smrg # Add `dependent.h:' lines. 3264d9b34d9Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3274d9b34d9Smrg else 3284d9b34d9Smrg echo "#dummy" > "$depfile" 3294d9b34d9Smrg fi 3304d9b34d9Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3314d9b34d9Smrg ;; 3324d9b34d9Smrg 3334d9b34d9Smrgtru64) 3344d9b34d9Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3354d9b34d9Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3364d9b34d9Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3374d9b34d9Smrg # dependencies in `foo.d' instead, so we check for that too. 3384d9b34d9Smrg # Subdirectories are respected. 3394d9b34d9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3404d9b34d9Smrg test "x$dir" = "x$object" && dir= 3414d9b34d9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3424d9b34d9Smrg 3434d9b34d9Smrg if test "$libtool" = yes; then 3444d9b34d9Smrg # With Tru64 cc, shared objects can also be used to make a 3454d9b34d9Smrg # static library. This mechanism is used in libtool 1.4 series to 3464d9b34d9Smrg # handle both shared and static libraries in a single compilation. 3474d9b34d9Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3484d9b34d9Smrg # 3494d9b34d9Smrg # With libtool 1.5 this exception was removed, and libtool now 3504d9b34d9Smrg # generates 2 separate objects for the 2 libraries. These two 3514d9b34d9Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3524d9b34d9Smrg # in $dir$base.o.d. We have to check for both files, because 3534d9b34d9Smrg # one of the two compilations can be disabled. We should prefer 3544d9b34d9Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3554d9b34d9Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3564d9b34d9Smrg # the former would cause a distcleancheck panic. 3574d9b34d9Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3584d9b34d9Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3594d9b34d9Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3604d9b34d9Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3614d9b34d9Smrg "$@" -Wc,-MD 3624d9b34d9Smrg else 3634d9b34d9Smrg tmpdepfile1=$dir$base.o.d 3644d9b34d9Smrg tmpdepfile2=$dir$base.d 3654d9b34d9Smrg tmpdepfile3=$dir$base.d 3664d9b34d9Smrg tmpdepfile4=$dir$base.d 3674d9b34d9Smrg "$@" -MD 3684d9b34d9Smrg fi 3694d9b34d9Smrg 3704d9b34d9Smrg stat=$? 3714d9b34d9Smrg if test $stat -eq 0; then : 3724d9b34d9Smrg else 3734d9b34d9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3744d9b34d9Smrg exit $stat 3754d9b34d9Smrg fi 3764d9b34d9Smrg 3774d9b34d9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3784d9b34d9Smrg do 3794d9b34d9Smrg test -f "$tmpdepfile" && break 3804d9b34d9Smrg done 3814d9b34d9Smrg if test -f "$tmpdepfile"; then 3824d9b34d9Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3834d9b34d9Smrg # That's a tab and a space in the []. 3844d9b34d9Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3854d9b34d9Smrg else 3864d9b34d9Smrg echo "#dummy" > "$depfile" 3874d9b34d9Smrg fi 3884d9b34d9Smrg rm -f "$tmpdepfile" 3894d9b34d9Smrg ;; 3904d9b34d9Smrg 3914d9b34d9Smrg#nosideeffect) 3924d9b34d9Smrg # This comment above is used by automake to tell side-effect 3934d9b34d9Smrg # dependency tracking mechanisms from slower ones. 3944d9b34d9Smrg 3954d9b34d9Smrgdashmstdout) 3964d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 3974d9b34d9Smrg # always write the preprocessed file to stdout, regardless of -o. 3984d9b34d9Smrg "$@" || exit $? 3994d9b34d9Smrg 4004d9b34d9Smrg # Remove the call to Libtool. 4014d9b34d9Smrg if test "$libtool" = yes; then 4024d9b34d9Smrg while test $1 != '--mode=compile'; do 4034d9b34d9Smrg shift 4044d9b34d9Smrg done 4054d9b34d9Smrg shift 4064d9b34d9Smrg fi 4074d9b34d9Smrg 4084d9b34d9Smrg # Remove `-o $object'. 4094d9b34d9Smrg IFS=" " 4104d9b34d9Smrg for arg 4114d9b34d9Smrg do 4124d9b34d9Smrg case $arg in 4134d9b34d9Smrg -o) 4144d9b34d9Smrg shift 4154d9b34d9Smrg ;; 4164d9b34d9Smrg $object) 4174d9b34d9Smrg shift 4184d9b34d9Smrg ;; 4194d9b34d9Smrg *) 4204d9b34d9Smrg set fnord "$@" "$arg" 4214d9b34d9Smrg shift # fnord 4224d9b34d9Smrg shift # $arg 4234d9b34d9Smrg ;; 4244d9b34d9Smrg esac 4254d9b34d9Smrg done 4264d9b34d9Smrg 4274d9b34d9Smrg test -z "$dashmflag" && dashmflag=-M 4284d9b34d9Smrg # Require at least two characters before searching for `:' 4294d9b34d9Smrg # in the target name. This is to cope with DOS-style filenames: 4304d9b34d9Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4314d9b34d9Smrg "$@" $dashmflag | 4324d9b34d9Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4334d9b34d9Smrg rm -f "$depfile" 4344d9b34d9Smrg cat < "$tmpdepfile" > "$depfile" 4354d9b34d9Smrg tr ' ' ' 4364d9b34d9Smrg' < "$tmpdepfile" | \ 4374d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4384d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 4394d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4404d9b34d9Smrg rm -f "$tmpdepfile" 4414d9b34d9Smrg ;; 4424d9b34d9Smrg 4434d9b34d9SmrgdashXmstdout) 4444d9b34d9Smrg # This case only exists to satisfy depend.m4. It is never actually 4454d9b34d9Smrg # run, as this mode is specially recognized in the preamble. 4464d9b34d9Smrg exit 1 4474d9b34d9Smrg ;; 4484d9b34d9Smrg 4494d9b34d9Smrgmakedepend) 4504d9b34d9Smrg "$@" || exit $? 4514d9b34d9Smrg # Remove any Libtool call 4524d9b34d9Smrg if test "$libtool" = yes; then 4534d9b34d9Smrg while test $1 != '--mode=compile'; do 4544d9b34d9Smrg shift 4554d9b34d9Smrg done 4564d9b34d9Smrg shift 4574d9b34d9Smrg fi 4584d9b34d9Smrg # X makedepend 4594d9b34d9Smrg shift 4604d9b34d9Smrg cleared=no 4614d9b34d9Smrg for arg in "$@"; do 4624d9b34d9Smrg case $cleared in 4634d9b34d9Smrg no) 4644d9b34d9Smrg set ""; shift 4654d9b34d9Smrg cleared=yes ;; 4664d9b34d9Smrg esac 4674d9b34d9Smrg case "$arg" in 4684d9b34d9Smrg -D*|-I*) 4694d9b34d9Smrg set fnord "$@" "$arg"; shift ;; 4704d9b34d9Smrg # Strip any option that makedepend may not understand. Remove 4714d9b34d9Smrg # the object too, otherwise makedepend will parse it as a source file. 4724d9b34d9Smrg -*|$object) 4734d9b34d9Smrg ;; 4744d9b34d9Smrg *) 4754d9b34d9Smrg set fnord "$@" "$arg"; shift ;; 4764d9b34d9Smrg esac 4774d9b34d9Smrg done 4784d9b34d9Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4794d9b34d9Smrg touch "$tmpdepfile" 4804d9b34d9Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4814d9b34d9Smrg rm -f "$depfile" 4824d9b34d9Smrg cat < "$tmpdepfile" > "$depfile" 4834d9b34d9Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4844d9b34d9Smrg' | \ 4854d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4864d9b34d9Smrg## correctly. Breaking it into two sed invocations is a workaround. 4874d9b34d9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4884d9b34d9Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4894d9b34d9Smrg ;; 4904d9b34d9Smrg 4914d9b34d9Smrgcpp) 4924d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 4934d9b34d9Smrg # always write the preprocessed file to stdout. 4944d9b34d9Smrg "$@" || exit $? 4954d9b34d9Smrg 4964d9b34d9Smrg # Remove the call to Libtool. 4974d9b34d9Smrg if test "$libtool" = yes; then 4984d9b34d9Smrg while test $1 != '--mode=compile'; do 4994d9b34d9Smrg shift 5004d9b34d9Smrg done 5014d9b34d9Smrg shift 5024d9b34d9Smrg fi 5034d9b34d9Smrg 5044d9b34d9Smrg # Remove `-o $object'. 5054d9b34d9Smrg IFS=" " 5064d9b34d9Smrg for arg 5074d9b34d9Smrg do 5084d9b34d9Smrg case $arg in 5094d9b34d9Smrg -o) 5104d9b34d9Smrg shift 5114d9b34d9Smrg ;; 5124d9b34d9Smrg $object) 5134d9b34d9Smrg shift 5144d9b34d9Smrg ;; 5154d9b34d9Smrg *) 5164d9b34d9Smrg set fnord "$@" "$arg" 5174d9b34d9Smrg shift # fnord 5184d9b34d9Smrg shift # $arg 5194d9b34d9Smrg ;; 5204d9b34d9Smrg esac 5214d9b34d9Smrg done 5224d9b34d9Smrg 5234d9b34d9Smrg "$@" -E | 5244d9b34d9Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5254d9b34d9Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5264d9b34d9Smrg sed '$ s: \\$::' > "$tmpdepfile" 5274d9b34d9Smrg rm -f "$depfile" 5284d9b34d9Smrg echo "$object : \\" > "$depfile" 5294d9b34d9Smrg cat < "$tmpdepfile" >> "$depfile" 5304d9b34d9Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5314d9b34d9Smrg rm -f "$tmpdepfile" 5324d9b34d9Smrg ;; 5334d9b34d9Smrg 5344d9b34d9Smrgmsvisualcpp) 5354d9b34d9Smrg # Important note: in order to support this mode, a compiler *must* 5364d9b34d9Smrg # always write the preprocessed file to stdout, regardless of -o, 5374d9b34d9Smrg # because we must use -o when running libtool. 5384d9b34d9Smrg "$@" || exit $? 5394d9b34d9Smrg IFS=" " 5404d9b34d9Smrg for arg 5414d9b34d9Smrg do 5424d9b34d9Smrg case "$arg" in 5434d9b34d9Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5444d9b34d9Smrg set fnord "$@" 5454d9b34d9Smrg shift 5464d9b34d9Smrg shift 5474d9b34d9Smrg ;; 5484d9b34d9Smrg *) 5494d9b34d9Smrg set fnord "$@" "$arg" 5504d9b34d9Smrg shift 5514d9b34d9Smrg shift 5524d9b34d9Smrg ;; 5534d9b34d9Smrg esac 5544d9b34d9Smrg done 5554d9b34d9Smrg "$@" -E | 5564d9b34d9Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5574d9b34d9Smrg rm -f "$depfile" 5584d9b34d9Smrg echo "$object : \\" > "$depfile" 5594d9b34d9Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5604d9b34d9Smrg echo " " >> "$depfile" 5614d9b34d9Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5624d9b34d9Smrg rm -f "$tmpdepfile" 5634d9b34d9Smrg ;; 5644d9b34d9Smrg 5654d9b34d9Smrgnone) 5664d9b34d9Smrg exec "$@" 5674d9b34d9Smrg ;; 5684d9b34d9Smrg 5694d9b34d9Smrg*) 5704d9b34d9Smrg echo "Unknown depmode $depmode" 1>&2 5714d9b34d9Smrg exit 1 5724d9b34d9Smrg ;; 5734d9b34d9Smrgesac 5744d9b34d9Smrg 5754d9b34d9Smrgexit 0 5764d9b34d9Smrg 5774d9b34d9Smrg# Local Variables: 5784d9b34d9Smrg# mode: shell-script 5794d9b34d9Smrg# sh-indentation: 2 5804d9b34d9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5814d9b34d9Smrg# time-stamp-start: "scriptversion=" 5824d9b34d9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5834d9b34d9Smrg# time-stamp-end: "$" 5844d9b34d9Smrg# End: 585