depcomp revision 52b01e16
14b0ead49Smrg#! /bin/sh 24b0ead49Smrg# depcomp - compile a program generating dependencies as side-effects 34b0ead49Smrg 452b01e16Smrgscriptversion=2009-04-28.21; # UTC 54b0ead49Smrg 652b01e16Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 752b01e16Smrg# 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. 474b0ead49Smrg tmpdepfile Temporary file to use when outputing 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 9352b01e16Smrg cygpath_u="sed s,\\\\\\\\,/,g" 9452b01e16Smrg depmode=msvisualcpp 9552b01e16Smrgfi 9652b01e16Smrg 974b0ead49Smrgcase "$depmode" in 984b0ead49Smrggcc3) 994b0ead49Smrg## gcc 3 implements dependency tracking that does exactly what 1004b0ead49Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1014b0ead49Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 10252b01e16Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 10352b01e16Smrg## the command line argument order; so add the flags where they 10452b01e16Smrg## appear in depend2.am. Note that the slowdown incurred here 10552b01e16Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 10652b01e16Smrg for arg 10752b01e16Smrg do 10852b01e16Smrg case $arg in 10952b01e16Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11052b01e16Smrg *) set fnord "$@" "$arg" ;; 11152b01e16Smrg esac 11252b01e16Smrg shift # fnord 11352b01e16Smrg shift # $arg 11452b01e16Smrg done 11552b01e16Smrg "$@" 1164b0ead49Smrg stat=$? 1174b0ead49Smrg if test $stat -eq 0; then : 1184b0ead49Smrg else 1194b0ead49Smrg rm -f "$tmpdepfile" 1204b0ead49Smrg exit $stat 1214b0ead49Smrg fi 1224b0ead49Smrg mv "$tmpdepfile" "$depfile" 1234b0ead49Smrg ;; 1244b0ead49Smrg 1254b0ead49Smrggcc) 1264b0ead49Smrg## There are various ways to get dependency output from gcc. Here's 1274b0ead49Smrg## why we pick this rather obscure method: 1284b0ead49Smrg## - Don't want to use -MD because we'd like the dependencies to end 1294b0ead49Smrg## up in a subdir. Having to rename by hand is ugly. 1304b0ead49Smrg## (We might end up doing this anyway to support other compilers.) 1314b0ead49Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1324b0ead49Smrg## -MM, not -M (despite what the docs say). 1334b0ead49Smrg## - Using -M directly means running the compiler twice (even worse 1344b0ead49Smrg## than renaming). 1354b0ead49Smrg if test -z "$gccflag"; then 1364b0ead49Smrg gccflag=-MD, 1374b0ead49Smrg fi 1384b0ead49Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1394b0ead49Smrg stat=$? 1404b0ead49Smrg if test $stat -eq 0; then : 1414b0ead49Smrg else 1424b0ead49Smrg rm -f "$tmpdepfile" 1434b0ead49Smrg exit $stat 1444b0ead49Smrg fi 1454b0ead49Smrg rm -f "$depfile" 1464b0ead49Smrg echo "$object : \\" > "$depfile" 1474b0ead49Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1484b0ead49Smrg## The second -e expression handles DOS-style file names with drive letters. 1494b0ead49Smrg sed -e 's/^[^:]*: / /' \ 1504b0ead49Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1514b0ead49Smrg## This next piece of magic avoids the `deleted header file' problem. 1524b0ead49Smrg## The problem is that when a header file which appears in a .P file 1534b0ead49Smrg## is deleted, the dependency causes make to die (because there is 1544b0ead49Smrg## typically no way to rebuild the header). We avoid this by adding 1554b0ead49Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1564b0ead49Smrg## this for us directly. 1574b0ead49Smrg tr ' ' ' 1584b0ead49Smrg' < "$tmpdepfile" | 1594b0ead49Smrg## Some versions of gcc put a space before the `:'. On the theory 1604b0ead49Smrg## that the space means something, we add a space to the output as 1614b0ead49Smrg## well. 1624b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1634b0ead49Smrg## correctly. Breaking it into two sed invocations is a workaround. 1644b0ead49Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1654b0ead49Smrg rm -f "$tmpdepfile" 1664b0ead49Smrg ;; 1674b0ead49Smrg 1684b0ead49Smrghp) 1694b0ead49Smrg # This case exists only to let depend.m4 do its work. It works by 1704b0ead49Smrg # looking at the text of this script. This case will never be run, 1714b0ead49Smrg # since it is checked for above. 1724b0ead49Smrg exit 1 1734b0ead49Smrg ;; 1744b0ead49Smrg 1754b0ead49Smrgsgi) 1764b0ead49Smrg if test "$libtool" = yes; then 1774b0ead49Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1784b0ead49Smrg else 1794b0ead49Smrg "$@" -MDupdate "$tmpdepfile" 1804b0ead49Smrg fi 1814b0ead49Smrg stat=$? 1824b0ead49Smrg if test $stat -eq 0; then : 1834b0ead49Smrg else 1844b0ead49Smrg rm -f "$tmpdepfile" 1854b0ead49Smrg exit $stat 1864b0ead49Smrg fi 1874b0ead49Smrg rm -f "$depfile" 1884b0ead49Smrg 1894b0ead49Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1904b0ead49Smrg echo "$object : \\" > "$depfile" 1914b0ead49Smrg 1924b0ead49Smrg # Clip off the initial element (the dependent). Don't try to be 1934b0ead49Smrg # clever and replace this with sed code, as IRIX sed won't handle 1944b0ead49Smrg # lines with more than a fixed number of characters (4096 in 1954b0ead49Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1964b0ead49Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1974b0ead49Smrg # dependency line. 1984b0ead49Smrg tr ' ' ' 1994b0ead49Smrg' < "$tmpdepfile" \ 2004b0ead49Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2014b0ead49Smrg tr ' 20252b01e16Smrg' ' ' >> "$depfile" 20352b01e16Smrg echo >> "$depfile" 2044b0ead49Smrg 2054b0ead49Smrg # The second pass generates a dummy entry for each header file. 2064b0ead49Smrg tr ' ' ' 2074b0ead49Smrg' < "$tmpdepfile" \ 2084b0ead49Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20952b01e16Smrg >> "$depfile" 2104b0ead49Smrg else 2114b0ead49Smrg # The sourcefile does not contain any dependencies, so just 2124b0ead49Smrg # store a dummy comment line, to avoid errors with the Makefile 2134b0ead49Smrg # "include basename.Plo" scheme. 2144b0ead49Smrg echo "#dummy" > "$depfile" 2154b0ead49Smrg fi 2164b0ead49Smrg rm -f "$tmpdepfile" 2174b0ead49Smrg ;; 2184b0ead49Smrg 2194b0ead49Smrgaix) 2204b0ead49Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2214b0ead49Smrg # in a .u file. In older versions, this file always lives in the 2224b0ead49Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2234b0ead49Smrg # start of each line; $object doesn't have directory information. 2244b0ead49Smrg # Version 6 uses the directory in both cases. 22552b01e16Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 22652b01e16Smrg test "x$dir" = "x$object" && dir= 22752b01e16Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2284b0ead49Smrg if test "$libtool" = yes; then 22952b01e16Smrg tmpdepfile1=$dir$base.u 23052b01e16Smrg tmpdepfile2=$base.u 23152b01e16Smrg tmpdepfile3=$dir.libs/$base.u 2324b0ead49Smrg "$@" -Wc,-M 2334b0ead49Smrg else 23452b01e16Smrg tmpdepfile1=$dir$base.u 23552b01e16Smrg tmpdepfile2=$dir$base.u 23652b01e16Smrg tmpdepfile3=$dir$base.u 2374b0ead49Smrg "$@" -M 2384b0ead49Smrg fi 2394b0ead49Smrg stat=$? 2404b0ead49Smrg 2414b0ead49Smrg if test $stat -eq 0; then : 2424b0ead49Smrg else 24352b01e16Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2444b0ead49Smrg exit $stat 2454b0ead49Smrg fi 2464b0ead49Smrg 24752b01e16Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24852b01e16Smrg do 24952b01e16Smrg test -f "$tmpdepfile" && break 25052b01e16Smrg done 2514b0ead49Smrg if test -f "$tmpdepfile"; then 2524b0ead49Smrg # Each line is of the form `foo.o: dependent.h'. 2534b0ead49Smrg # Do two passes, one to just change these to 2544b0ead49Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 25552b01e16Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 25652b01e16Smrg # That's a tab and a space in the []. 25752b01e16Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2584b0ead49Smrg else 2594b0ead49Smrg # The sourcefile does not contain any dependencies, so just 2604b0ead49Smrg # store a dummy comment line, to avoid errors with the Makefile 2614b0ead49Smrg # "include basename.Plo" scheme. 2624b0ead49Smrg echo "#dummy" > "$depfile" 2634b0ead49Smrg fi 2644b0ead49Smrg rm -f "$tmpdepfile" 2654b0ead49Smrg ;; 2664b0ead49Smrg 2674b0ead49Smrgicc) 2684b0ead49Smrg # Intel's C compiler understands `-MD -MF file'. However on 2694b0ead49Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2704b0ead49Smrg # ICC 7.0 will fill foo.d with something like 2714b0ead49Smrg # foo.o: sub/foo.c 2724b0ead49Smrg # foo.o: sub/foo.h 2734b0ead49Smrg # which is wrong. We want: 2744b0ead49Smrg # sub/foo.o: sub/foo.c 2754b0ead49Smrg # sub/foo.o: sub/foo.h 2764b0ead49Smrg # sub/foo.c: 2774b0ead49Smrg # sub/foo.h: 2784b0ead49Smrg # ICC 7.1 will output 2794b0ead49Smrg # foo.o: sub/foo.c sub/foo.h 2804b0ead49Smrg # and will wrap long lines using \ : 2814b0ead49Smrg # foo.o: sub/foo.c ... \ 2824b0ead49Smrg # sub/foo.h ... \ 2834b0ead49Smrg # ... 2844b0ead49Smrg 2854b0ead49Smrg "$@" -MD -MF "$tmpdepfile" 2864b0ead49Smrg stat=$? 2874b0ead49Smrg if test $stat -eq 0; then : 2884b0ead49Smrg else 2894b0ead49Smrg rm -f "$tmpdepfile" 2904b0ead49Smrg exit $stat 2914b0ead49Smrg fi 2924b0ead49Smrg rm -f "$depfile" 2934b0ead49Smrg # Each line is of the form `foo.o: dependent.h', 2944b0ead49Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2954b0ead49Smrg # Do two passes, one to just change these to 2964b0ead49Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2974b0ead49Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2984b0ead49Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2994b0ead49Smrg # correctly. Breaking it into two sed invocations is a workaround. 3004b0ead49Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3014b0ead49Smrg sed -e 's/$/ :/' >> "$depfile" 3024b0ead49Smrg rm -f "$tmpdepfile" 3034b0ead49Smrg ;; 3044b0ead49Smrg 30552b01e16Smrghp2) 30652b01e16Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 30752b01e16Smrg # compilers, which have integrated preprocessors. The correct option 30852b01e16Smrg # to use with these is +Maked; it writes dependencies to a file named 30952b01e16Smrg # 'foo.d', which lands next to the object file, wherever that 31052b01e16Smrg # happens to be. 31152b01e16Smrg # Much of this is similar to the tru64 case; see comments there. 31252b01e16Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 31352b01e16Smrg test "x$dir" = "x$object" && dir= 31452b01e16Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 31552b01e16Smrg if test "$libtool" = yes; then 31652b01e16Smrg tmpdepfile1=$dir$base.d 31752b01e16Smrg tmpdepfile2=$dir.libs/$base.d 31852b01e16Smrg "$@" -Wc,+Maked 31952b01e16Smrg else 32052b01e16Smrg tmpdepfile1=$dir$base.d 32152b01e16Smrg tmpdepfile2=$dir$base.d 32252b01e16Smrg "$@" +Maked 32352b01e16Smrg fi 32452b01e16Smrg stat=$? 32552b01e16Smrg if test $stat -eq 0; then : 32652b01e16Smrg else 32752b01e16Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 32852b01e16Smrg exit $stat 32952b01e16Smrg fi 33052b01e16Smrg 33152b01e16Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 33252b01e16Smrg do 33352b01e16Smrg test -f "$tmpdepfile" && break 33452b01e16Smrg done 33552b01e16Smrg if test -f "$tmpdepfile"; then 33652b01e16Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 33752b01e16Smrg # Add `dependent.h:' lines. 33852b01e16Smrg sed -ne '2,${ 33952b01e16Smrg s/^ *// 34052b01e16Smrg s/ \\*$// 34152b01e16Smrg s/$/:/ 34252b01e16Smrg p 34352b01e16Smrg }' "$tmpdepfile" >> "$depfile" 34452b01e16Smrg else 34552b01e16Smrg echo "#dummy" > "$depfile" 34652b01e16Smrg fi 34752b01e16Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 34852b01e16Smrg ;; 34952b01e16Smrg 3504b0ead49Smrgtru64) 3514b0ead49Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3524b0ead49Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3534b0ead49Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3544b0ead49Smrg # dependencies in `foo.d' instead, so we check for that too. 3554b0ead49Smrg # Subdirectories are respected. 3564b0ead49Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3574b0ead49Smrg test "x$dir" = "x$object" && dir= 3584b0ead49Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3594b0ead49Smrg 3604b0ead49Smrg if test "$libtool" = yes; then 3614b0ead49Smrg # With Tru64 cc, shared objects can also be used to make a 36252b01e16Smrg # static library. This mechanism is used in libtool 1.4 series to 3634b0ead49Smrg # handle both shared and static libraries in a single compilation. 3644b0ead49Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3654b0ead49Smrg # 3664b0ead49Smrg # With libtool 1.5 this exception was removed, and libtool now 3674b0ead49Smrg # generates 2 separate objects for the 2 libraries. These two 36852b01e16Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3694b0ead49Smrg # in $dir$base.o.d. We have to check for both files, because 3704b0ead49Smrg # one of the two compilations can be disabled. We should prefer 3714b0ead49Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3724b0ead49Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3734b0ead49Smrg # the former would cause a distcleancheck panic. 3744b0ead49Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3754b0ead49Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3764b0ead49Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3774b0ead49Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3784b0ead49Smrg "$@" -Wc,-MD 3794b0ead49Smrg else 3804b0ead49Smrg tmpdepfile1=$dir$base.o.d 3814b0ead49Smrg tmpdepfile2=$dir$base.d 3824b0ead49Smrg tmpdepfile3=$dir$base.d 3834b0ead49Smrg tmpdepfile4=$dir$base.d 3844b0ead49Smrg "$@" -MD 3854b0ead49Smrg fi 3864b0ead49Smrg 3874b0ead49Smrg stat=$? 3884b0ead49Smrg if test $stat -eq 0; then : 3894b0ead49Smrg else 3904b0ead49Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3914b0ead49Smrg exit $stat 3924b0ead49Smrg fi 3934b0ead49Smrg 3944b0ead49Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3954b0ead49Smrg do 3964b0ead49Smrg test -f "$tmpdepfile" && break 3974b0ead49Smrg done 3984b0ead49Smrg if test -f "$tmpdepfile"; then 3994b0ead49Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4004b0ead49Smrg # That's a tab and a space in the []. 4014b0ead49Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4024b0ead49Smrg else 4034b0ead49Smrg echo "#dummy" > "$depfile" 4044b0ead49Smrg fi 4054b0ead49Smrg rm -f "$tmpdepfile" 4064b0ead49Smrg ;; 4074b0ead49Smrg 4084b0ead49Smrg#nosideeffect) 4094b0ead49Smrg # This comment above is used by automake to tell side-effect 4104b0ead49Smrg # dependency tracking mechanisms from slower ones. 4114b0ead49Smrg 4124b0ead49Smrgdashmstdout) 4134b0ead49Smrg # Important note: in order to support this mode, a compiler *must* 4144b0ead49Smrg # always write the preprocessed file to stdout, regardless of -o. 4154b0ead49Smrg "$@" || exit $? 4164b0ead49Smrg 4174b0ead49Smrg # Remove the call to Libtool. 4184b0ead49Smrg if test "$libtool" = yes; then 41952b01e16Smrg while test "X$1" != 'X--mode=compile'; do 4204b0ead49Smrg shift 4214b0ead49Smrg done 4224b0ead49Smrg shift 4234b0ead49Smrg fi 4244b0ead49Smrg 4254b0ead49Smrg # Remove `-o $object'. 4264b0ead49Smrg IFS=" " 4274b0ead49Smrg for arg 4284b0ead49Smrg do 4294b0ead49Smrg case $arg in 4304b0ead49Smrg -o) 4314b0ead49Smrg shift 4324b0ead49Smrg ;; 4334b0ead49Smrg $object) 4344b0ead49Smrg shift 4354b0ead49Smrg ;; 4364b0ead49Smrg *) 4374b0ead49Smrg set fnord "$@" "$arg" 4384b0ead49Smrg shift # fnord 4394b0ead49Smrg shift # $arg 4404b0ead49Smrg ;; 4414b0ead49Smrg esac 4424b0ead49Smrg done 4434b0ead49Smrg 4444b0ead49Smrg test -z "$dashmflag" && dashmflag=-M 4454b0ead49Smrg # Require at least two characters before searching for `:' 4464b0ead49Smrg # in the target name. This is to cope with DOS-style filenames: 4474b0ead49Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4484b0ead49Smrg "$@" $dashmflag | 4494b0ead49Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4504b0ead49Smrg rm -f "$depfile" 4514b0ead49Smrg cat < "$tmpdepfile" > "$depfile" 4524b0ead49Smrg tr ' ' ' 4534b0ead49Smrg' < "$tmpdepfile" | \ 4544b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4554b0ead49Smrg## correctly. Breaking it into two sed invocations is a workaround. 4564b0ead49Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4574b0ead49Smrg rm -f "$tmpdepfile" 4584b0ead49Smrg ;; 4594b0ead49Smrg 4604b0ead49SmrgdashXmstdout) 4614b0ead49Smrg # This case only exists to satisfy depend.m4. It is never actually 4624b0ead49Smrg # run, as this mode is specially recognized in the preamble. 4634b0ead49Smrg exit 1 4644b0ead49Smrg ;; 4654b0ead49Smrg 4664b0ead49Smrgmakedepend) 4674b0ead49Smrg "$@" || exit $? 4684b0ead49Smrg # Remove any Libtool call 4694b0ead49Smrg if test "$libtool" = yes; then 47052b01e16Smrg while test "X$1" != 'X--mode=compile'; do 4714b0ead49Smrg shift 4724b0ead49Smrg done 4734b0ead49Smrg shift 4744b0ead49Smrg fi 4754b0ead49Smrg # X makedepend 4764b0ead49Smrg shift 47752b01e16Smrg cleared=no eat=no 47852b01e16Smrg for arg 47952b01e16Smrg do 4804b0ead49Smrg case $cleared in 4814b0ead49Smrg no) 4824b0ead49Smrg set ""; shift 4834b0ead49Smrg cleared=yes ;; 4844b0ead49Smrg esac 48552b01e16Smrg if test $eat = yes; then 48652b01e16Smrg eat=no 48752b01e16Smrg continue 48852b01e16Smrg fi 4894b0ead49Smrg case "$arg" in 4904b0ead49Smrg -D*|-I*) 4914b0ead49Smrg set fnord "$@" "$arg"; shift ;; 4924b0ead49Smrg # Strip any option that makedepend may not understand. Remove 4934b0ead49Smrg # the object too, otherwise makedepend will parse it as a source file. 49452b01e16Smrg -arch) 49552b01e16Smrg eat=yes ;; 4964b0ead49Smrg -*|$object) 4974b0ead49Smrg ;; 4984b0ead49Smrg *) 4994b0ead49Smrg set fnord "$@" "$arg"; shift ;; 5004b0ead49Smrg esac 5014b0ead49Smrg done 50252b01e16Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5034b0ead49Smrg touch "$tmpdepfile" 5044b0ead49Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5054b0ead49Smrg rm -f "$depfile" 5064b0ead49Smrg cat < "$tmpdepfile" > "$depfile" 5074b0ead49Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5084b0ead49Smrg' | \ 5094b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5104b0ead49Smrg## correctly. Breaking it into two sed invocations is a workaround. 5114b0ead49Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5124b0ead49Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5134b0ead49Smrg ;; 5144b0ead49Smrg 5154b0ead49Smrgcpp) 5164b0ead49Smrg # Important note: in order to support this mode, a compiler *must* 5174b0ead49Smrg # always write the preprocessed file to stdout. 5184b0ead49Smrg "$@" || exit $? 5194b0ead49Smrg 5204b0ead49Smrg # Remove the call to Libtool. 5214b0ead49Smrg if test "$libtool" = yes; then 52252b01e16Smrg while test "X$1" != 'X--mode=compile'; do 5234b0ead49Smrg shift 5244b0ead49Smrg done 5254b0ead49Smrg shift 5264b0ead49Smrg fi 5274b0ead49Smrg 5284b0ead49Smrg # Remove `-o $object'. 5294b0ead49Smrg IFS=" " 5304b0ead49Smrg for arg 5314b0ead49Smrg do 5324b0ead49Smrg case $arg in 5334b0ead49Smrg -o) 5344b0ead49Smrg shift 5354b0ead49Smrg ;; 5364b0ead49Smrg $object) 5374b0ead49Smrg shift 5384b0ead49Smrg ;; 5394b0ead49Smrg *) 5404b0ead49Smrg set fnord "$@" "$arg" 5414b0ead49Smrg shift # fnord 5424b0ead49Smrg shift # $arg 5434b0ead49Smrg ;; 5444b0ead49Smrg esac 5454b0ead49Smrg done 5464b0ead49Smrg 5474b0ead49Smrg "$@" -E | 5484b0ead49Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5494b0ead49Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5504b0ead49Smrg sed '$ s: \\$::' > "$tmpdepfile" 5514b0ead49Smrg rm -f "$depfile" 5524b0ead49Smrg echo "$object : \\" > "$depfile" 5534b0ead49Smrg cat < "$tmpdepfile" >> "$depfile" 5544b0ead49Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5554b0ead49Smrg rm -f "$tmpdepfile" 5564b0ead49Smrg ;; 5574b0ead49Smrg 5584b0ead49Smrgmsvisualcpp) 5594b0ead49Smrg # Important note: in order to support this mode, a compiler *must* 56052b01e16Smrg # always write the preprocessed file to stdout. 5614b0ead49Smrg "$@" || exit $? 56252b01e16Smrg 56352b01e16Smrg # Remove the call to Libtool. 56452b01e16Smrg if test "$libtool" = yes; then 56552b01e16Smrg while test "X$1" != 'X--mode=compile'; do 56652b01e16Smrg shift 56752b01e16Smrg done 56852b01e16Smrg shift 56952b01e16Smrg fi 57052b01e16Smrg 5714b0ead49Smrg IFS=" " 5724b0ead49Smrg for arg 5734b0ead49Smrg do 5744b0ead49Smrg case "$arg" in 57552b01e16Smrg -o) 57652b01e16Smrg shift 57752b01e16Smrg ;; 57852b01e16Smrg $object) 57952b01e16Smrg shift 58052b01e16Smrg ;; 5814b0ead49Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5824b0ead49Smrg set fnord "$@" 5834b0ead49Smrg shift 5844b0ead49Smrg shift 5854b0ead49Smrg ;; 5864b0ead49Smrg *) 5874b0ead49Smrg set fnord "$@" "$arg" 5884b0ead49Smrg shift 5894b0ead49Smrg shift 5904b0ead49Smrg ;; 5914b0ead49Smrg esac 5924b0ead49Smrg done 59352b01e16Smrg "$@" -E 2>/dev/null | 59452b01e16Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5954b0ead49Smrg rm -f "$depfile" 5964b0ead49Smrg echo "$object : \\" > "$depfile" 59752b01e16Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5984b0ead49Smrg echo " " >> "$depfile" 59952b01e16Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6004b0ead49Smrg rm -f "$tmpdepfile" 6014b0ead49Smrg ;; 6024b0ead49Smrg 60352b01e16Smrgmsvcmsys) 60452b01e16Smrg # This case exists only to let depend.m4 do its work. It works by 60552b01e16Smrg # looking at the text of this script. This case will never be run, 60652b01e16Smrg # since it is checked for above. 60752b01e16Smrg exit 1 60852b01e16Smrg ;; 60952b01e16Smrg 6104b0ead49Smrgnone) 6114b0ead49Smrg exec "$@" 6124b0ead49Smrg ;; 6134b0ead49Smrg 6144b0ead49Smrg*) 6154b0ead49Smrg echo "Unknown depmode $depmode" 1>&2 6164b0ead49Smrg exit 1 6174b0ead49Smrg ;; 6184b0ead49Smrgesac 6194b0ead49Smrg 6204b0ead49Smrgexit 0 6214b0ead49Smrg 6224b0ead49Smrg# Local Variables: 6234b0ead49Smrg# mode: shell-script 6244b0ead49Smrg# sh-indentation: 2 6254b0ead49Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6264b0ead49Smrg# time-stamp-start: "scriptversion=" 6274b0ead49Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62852b01e16Smrg# time-stamp-time-zone: "UTC" 62952b01e16Smrg# time-stamp-end: "; # UTC" 6304b0ead49Smrg# End: 631