depcomp revision 55acc8fc
13da084b3Smrg#! /bin/sh 23da084b3Smrg# depcomp - compile a program generating dependencies as side-effects 33da084b3Smrg 455acc8fcSmrgscriptversion=2009-04-28.21; # UTC 53da084b3Smrg 655acc8fcSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 755acc8fcSmrg# Software Foundation, Inc. 83da084b3Smrg 93da084b3Smrg# This program is free software; you can redistribute it and/or modify 103da084b3Smrg# it under the terms of the GNU General Public License as published by 113da084b3Smrg# the Free Software Foundation; either version 2, or (at your option) 123da084b3Smrg# any later version. 133da084b3Smrg 143da084b3Smrg# This program is distributed in the hope that it will be useful, 153da084b3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 163da084b3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 173da084b3Smrg# GNU General Public License for more details. 183da084b3Smrg 193da084b3Smrg# You should have received a copy of the GNU General Public License 2055acc8fcSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 213da084b3Smrg 223da084b3Smrg# As a special exception to the GNU General Public License, if you 233da084b3Smrg# distribute this file as part of a program that contains a 243da084b3Smrg# configuration script generated by Autoconf, you may include it under 253da084b3Smrg# the same distribution terms that you use for the rest of that program. 263da084b3Smrg 273da084b3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 283da084b3Smrg 293da084b3Smrgcase $1 in 303da084b3Smrg '') 313da084b3Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 323da084b3Smrg exit 1; 333da084b3Smrg ;; 343da084b3Smrg -h | --h*) 353da084b3Smrg cat <<\EOF 363da084b3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 373da084b3Smrg 383da084b3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 393da084b3Smrgas side-effects. 403da084b3Smrg 413da084b3SmrgEnvironment variables: 423da084b3Smrg depmode Dependency tracking mode. 433da084b3Smrg source Source file read by `PROGRAMS ARGS'. 443da084b3Smrg object Object file output by `PROGRAMS ARGS'. 453da084b3Smrg DEPDIR directory where to store dependencies. 463da084b3Smrg depfile Dependency file to output. 473da084b3Smrg tmpdepfile Temporary file to use when outputing dependencies. 483da084b3Smrg libtool Whether libtool is used (yes/no). 493da084b3Smrg 503da084b3SmrgReport bugs to <bug-automake@gnu.org>. 513da084b3SmrgEOF 523da084b3Smrg exit $? 533da084b3Smrg ;; 543da084b3Smrg -v | --v*) 553da084b3Smrg echo "depcomp $scriptversion" 563da084b3Smrg exit $? 573da084b3Smrg ;; 583da084b3Smrgesac 593da084b3Smrg 603da084b3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 613da084b3Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 623da084b3Smrg exit 1 633da084b3Smrgfi 643da084b3Smrg 653da084b3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 663da084b3Smrgdepfile=${depfile-`echo "$object" | 673da084b3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 683da084b3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 693da084b3Smrg 703da084b3Smrgrm -f "$tmpdepfile" 713da084b3Smrg 723da084b3Smrg# Some modes work just like other modes, but use different flags. We 733da084b3Smrg# parameterize here, but still list the modes in the big case below, 743da084b3Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 753da084b3Smrg# here, because this file can only contain one case statement. 763da084b3Smrgif test "$depmode" = hp; then 773da084b3Smrg # HP compiler uses -M and no extra arg. 783da084b3Smrg gccflag=-M 793da084b3Smrg depmode=gcc 803da084b3Smrgfi 813da084b3Smrg 823da084b3Smrgif test "$depmode" = dashXmstdout; then 833da084b3Smrg # This is just like dashmstdout with a different argument. 843da084b3Smrg dashmflag=-xM 853da084b3Smrg depmode=dashmstdout 863da084b3Smrgfi 873da084b3Smrg 8855acc8fcSmrgcygpath_u="cygpath -u -f -" 8955acc8fcSmrgif test "$depmode" = msvcmsys; then 9055acc8fcSmrg # This is just like msvisualcpp but w/o cygpath translation. 9155acc8fcSmrg # Just convert the backslash-escaped backslashes to single forward 9255acc8fcSmrg # slashes to satisfy depend.m4 9355acc8fcSmrg cygpath_u="sed s,\\\\\\\\,/,g" 9455acc8fcSmrg depmode=msvisualcpp 9555acc8fcSmrgfi 9655acc8fcSmrg 973da084b3Smrgcase "$depmode" in 983da084b3Smrggcc3) 993da084b3Smrg## gcc 3 implements dependency tracking that does exactly what 1003da084b3Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1013da084b3Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102d63fdb69Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103d63fdb69Smrg## the command line argument order; so add the flags where they 104d63fdb69Smrg## appear in depend2.am. Note that the slowdown incurred here 105d63fdb69Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106d63fdb69Smrg for arg 107d63fdb69Smrg do 108d63fdb69Smrg case $arg in 109d63fdb69Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110d63fdb69Smrg *) set fnord "$@" "$arg" ;; 111d63fdb69Smrg esac 112d63fdb69Smrg shift # fnord 113d63fdb69Smrg shift # $arg 114d63fdb69Smrg done 115d63fdb69Smrg "$@" 1163da084b3Smrg stat=$? 1173da084b3Smrg if test $stat -eq 0; then : 1183da084b3Smrg else 1193da084b3Smrg rm -f "$tmpdepfile" 1203da084b3Smrg exit $stat 1213da084b3Smrg fi 1223da084b3Smrg mv "$tmpdepfile" "$depfile" 1233da084b3Smrg ;; 1243da084b3Smrg 1253da084b3Smrggcc) 1263da084b3Smrg## There are various ways to get dependency output from gcc. Here's 1273da084b3Smrg## why we pick this rather obscure method: 1283da084b3Smrg## - Don't want to use -MD because we'd like the dependencies to end 1293da084b3Smrg## up in a subdir. Having to rename by hand is ugly. 1303da084b3Smrg## (We might end up doing this anyway to support other compilers.) 1313da084b3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1323da084b3Smrg## -MM, not -M (despite what the docs say). 1333da084b3Smrg## - Using -M directly means running the compiler twice (even worse 1343da084b3Smrg## than renaming). 1353da084b3Smrg if test -z "$gccflag"; then 1363da084b3Smrg gccflag=-MD, 1373da084b3Smrg fi 1383da084b3Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1393da084b3Smrg stat=$? 1403da084b3Smrg if test $stat -eq 0; then : 1413da084b3Smrg else 1423da084b3Smrg rm -f "$tmpdepfile" 1433da084b3Smrg exit $stat 1443da084b3Smrg fi 1453da084b3Smrg rm -f "$depfile" 1463da084b3Smrg echo "$object : \\" > "$depfile" 1473da084b3Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1483da084b3Smrg## The second -e expression handles DOS-style file names with drive letters. 1493da084b3Smrg sed -e 's/^[^:]*: / /' \ 1503da084b3Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1513da084b3Smrg## This next piece of magic avoids the `deleted header file' problem. 1523da084b3Smrg## The problem is that when a header file which appears in a .P file 1533da084b3Smrg## is deleted, the dependency causes make to die (because there is 1543da084b3Smrg## typically no way to rebuild the header). We avoid this by adding 1553da084b3Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1563da084b3Smrg## this for us directly. 1573da084b3Smrg tr ' ' ' 1583da084b3Smrg' < "$tmpdepfile" | 1593da084b3Smrg## Some versions of gcc put a space before the `:'. On the theory 1603da084b3Smrg## that the space means something, we add a space to the output as 1613da084b3Smrg## well. 1623da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1633da084b3Smrg## correctly. Breaking it into two sed invocations is a workaround. 1643da084b3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1653da084b3Smrg rm -f "$tmpdepfile" 1663da084b3Smrg ;; 1673da084b3Smrg 1683da084b3Smrghp) 1693da084b3Smrg # This case exists only to let depend.m4 do its work. It works by 1703da084b3Smrg # looking at the text of this script. This case will never be run, 1713da084b3Smrg # since it is checked for above. 1723da084b3Smrg exit 1 1733da084b3Smrg ;; 1743da084b3Smrg 1753da084b3Smrgsgi) 1763da084b3Smrg if test "$libtool" = yes; then 1773da084b3Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1783da084b3Smrg else 1793da084b3Smrg "$@" -MDupdate "$tmpdepfile" 1803da084b3Smrg fi 1813da084b3Smrg stat=$? 1823da084b3Smrg if test $stat -eq 0; then : 1833da084b3Smrg else 1843da084b3Smrg rm -f "$tmpdepfile" 1853da084b3Smrg exit $stat 1863da084b3Smrg fi 1873da084b3Smrg rm -f "$depfile" 1883da084b3Smrg 1893da084b3Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1903da084b3Smrg echo "$object : \\" > "$depfile" 1913da084b3Smrg 1923da084b3Smrg # Clip off the initial element (the dependent). Don't try to be 1933da084b3Smrg # clever and replace this with sed code, as IRIX sed won't handle 1943da084b3Smrg # lines with more than a fixed number of characters (4096 in 1953da084b3Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1963da084b3Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1973da084b3Smrg # dependency line. 1983da084b3Smrg tr ' ' ' 1993da084b3Smrg' < "$tmpdepfile" \ 2003da084b3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2013da084b3Smrg tr ' 20255acc8fcSmrg' ' ' >> "$depfile" 20355acc8fcSmrg echo >> "$depfile" 2043da084b3Smrg 2053da084b3Smrg # The second pass generates a dummy entry for each header file. 2063da084b3Smrg tr ' ' ' 2073da084b3Smrg' < "$tmpdepfile" \ 2083da084b3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20955acc8fcSmrg >> "$depfile" 2103da084b3Smrg else 2113da084b3Smrg # The sourcefile does not contain any dependencies, so just 2123da084b3Smrg # store a dummy comment line, to avoid errors with the Makefile 2133da084b3Smrg # "include basename.Plo" scheme. 2143da084b3Smrg echo "#dummy" > "$depfile" 2153da084b3Smrg fi 2163da084b3Smrg rm -f "$tmpdepfile" 2173da084b3Smrg ;; 2183da084b3Smrg 2193da084b3Smrgaix) 2203da084b3Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2213da084b3Smrg # in a .u file. In older versions, this file always lives in the 2223da084b3Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2233da084b3Smrg # start of each line; $object doesn't have directory information. 2243da084b3Smrg # Version 6 uses the directory in both cases. 225d63fdb69Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226d63fdb69Smrg test "x$dir" = "x$object" && dir= 227d63fdb69Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2283da084b3Smrg if test "$libtool" = yes; then 229d63fdb69Smrg tmpdepfile1=$dir$base.u 230d63fdb69Smrg tmpdepfile2=$base.u 231d63fdb69Smrg tmpdepfile3=$dir.libs/$base.u 2323da084b3Smrg "$@" -Wc,-M 2333da084b3Smrg else 234d63fdb69Smrg tmpdepfile1=$dir$base.u 235d63fdb69Smrg tmpdepfile2=$dir$base.u 236d63fdb69Smrg tmpdepfile3=$dir$base.u 2373da084b3Smrg "$@" -M 2383da084b3Smrg fi 2393da084b3Smrg stat=$? 2403da084b3Smrg 2413da084b3Smrg if test $stat -eq 0; then : 2423da084b3Smrg else 243d63fdb69Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2443da084b3Smrg exit $stat 2453da084b3Smrg fi 2463da084b3Smrg 247d63fdb69Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248d63fdb69Smrg do 249d63fdb69Smrg test -f "$tmpdepfile" && break 250d63fdb69Smrg done 2513da084b3Smrg if test -f "$tmpdepfile"; then 2523da084b3Smrg # Each line is of the form `foo.o: dependent.h'. 2533da084b3Smrg # Do two passes, one to just change these to 2543da084b3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255d63fdb69Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256d63fdb69Smrg # That's a tab and a space in the []. 257d63fdb69Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2583da084b3Smrg else 2593da084b3Smrg # The sourcefile does not contain any dependencies, so just 2603da084b3Smrg # store a dummy comment line, to avoid errors with the Makefile 2613da084b3Smrg # "include basename.Plo" scheme. 2623da084b3Smrg echo "#dummy" > "$depfile" 2633da084b3Smrg fi 2643da084b3Smrg rm -f "$tmpdepfile" 2653da084b3Smrg ;; 2663da084b3Smrg 2673da084b3Smrgicc) 2683da084b3Smrg # Intel's C compiler understands `-MD -MF file'. However on 2693da084b3Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2703da084b3Smrg # ICC 7.0 will fill foo.d with something like 2713da084b3Smrg # foo.o: sub/foo.c 2723da084b3Smrg # foo.o: sub/foo.h 2733da084b3Smrg # which is wrong. We want: 2743da084b3Smrg # sub/foo.o: sub/foo.c 2753da084b3Smrg # sub/foo.o: sub/foo.h 2763da084b3Smrg # sub/foo.c: 2773da084b3Smrg # sub/foo.h: 2783da084b3Smrg # ICC 7.1 will output 2793da084b3Smrg # foo.o: sub/foo.c sub/foo.h 2803da084b3Smrg # and will wrap long lines using \ : 2813da084b3Smrg # foo.o: sub/foo.c ... \ 2823da084b3Smrg # sub/foo.h ... \ 2833da084b3Smrg # ... 2843da084b3Smrg 2853da084b3Smrg "$@" -MD -MF "$tmpdepfile" 2863da084b3Smrg stat=$? 2873da084b3Smrg if test $stat -eq 0; then : 2883da084b3Smrg else 2893da084b3Smrg rm -f "$tmpdepfile" 2903da084b3Smrg exit $stat 2913da084b3Smrg fi 2923da084b3Smrg rm -f "$depfile" 2933da084b3Smrg # Each line is of the form `foo.o: dependent.h', 2943da084b3Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2953da084b3Smrg # Do two passes, one to just change these to 2963da084b3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2973da084b3Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2983da084b3Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2993da084b3Smrg # correctly. Breaking it into two sed invocations is a workaround. 3003da084b3Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3013da084b3Smrg sed -e 's/$/ :/' >> "$depfile" 3023da084b3Smrg rm -f "$tmpdepfile" 3033da084b3Smrg ;; 3043da084b3Smrg 305d63fdb69Smrghp2) 306d63fdb69Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307d63fdb69Smrg # compilers, which have integrated preprocessors. The correct option 308d63fdb69Smrg # to use with these is +Maked; it writes dependencies to a file named 309d63fdb69Smrg # 'foo.d', which lands next to the object file, wherever that 310d63fdb69Smrg # happens to be. 311d63fdb69Smrg # Much of this is similar to the tru64 case; see comments there. 312d63fdb69Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313d63fdb69Smrg test "x$dir" = "x$object" && dir= 314d63fdb69Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315d63fdb69Smrg if test "$libtool" = yes; then 316d63fdb69Smrg tmpdepfile1=$dir$base.d 317d63fdb69Smrg tmpdepfile2=$dir.libs/$base.d 318d63fdb69Smrg "$@" -Wc,+Maked 319d63fdb69Smrg else 320d63fdb69Smrg tmpdepfile1=$dir$base.d 321d63fdb69Smrg tmpdepfile2=$dir$base.d 322d63fdb69Smrg "$@" +Maked 323d63fdb69Smrg fi 324d63fdb69Smrg stat=$? 325d63fdb69Smrg if test $stat -eq 0; then : 326d63fdb69Smrg else 327d63fdb69Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328d63fdb69Smrg exit $stat 329d63fdb69Smrg fi 330d63fdb69Smrg 331d63fdb69Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332d63fdb69Smrg do 333d63fdb69Smrg test -f "$tmpdepfile" && break 334d63fdb69Smrg done 335d63fdb69Smrg if test -f "$tmpdepfile"; then 336d63fdb69Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337d63fdb69Smrg # Add `dependent.h:' lines. 33855acc8fcSmrg sed -ne '2,${ 33955acc8fcSmrg s/^ *// 34055acc8fcSmrg s/ \\*$// 34155acc8fcSmrg s/$/:/ 34255acc8fcSmrg p 34355acc8fcSmrg }' "$tmpdepfile" >> "$depfile" 344d63fdb69Smrg else 345d63fdb69Smrg echo "#dummy" > "$depfile" 346d63fdb69Smrg fi 347d63fdb69Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348d63fdb69Smrg ;; 349d63fdb69Smrg 3503da084b3Smrgtru64) 3513da084b3Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3523da084b3Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3533da084b3Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3543da084b3Smrg # dependencies in `foo.d' instead, so we check for that too. 3553da084b3Smrg # Subdirectories are respected. 3563da084b3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3573da084b3Smrg test "x$dir" = "x$object" && dir= 3583da084b3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3593da084b3Smrg 3603da084b3Smrg if test "$libtool" = yes; then 3613da084b3Smrg # With Tru64 cc, shared objects can also be used to make a 362d63fdb69Smrg # static library. This mechanism is used in libtool 1.4 series to 3633da084b3Smrg # handle both shared and static libraries in a single compilation. 3643da084b3Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3653da084b3Smrg # 3663da084b3Smrg # With libtool 1.5 this exception was removed, and libtool now 3673da084b3Smrg # generates 2 separate objects for the 2 libraries. These two 368d63fdb69Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3693da084b3Smrg # in $dir$base.o.d. We have to check for both files, because 3703da084b3Smrg # one of the two compilations can be disabled. We should prefer 3713da084b3Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3723da084b3Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3733da084b3Smrg # the former would cause a distcleancheck panic. 3743da084b3Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3753da084b3Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3763da084b3Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3773da084b3Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3783da084b3Smrg "$@" -Wc,-MD 3793da084b3Smrg else 3803da084b3Smrg tmpdepfile1=$dir$base.o.d 3813da084b3Smrg tmpdepfile2=$dir$base.d 3823da084b3Smrg tmpdepfile3=$dir$base.d 3833da084b3Smrg tmpdepfile4=$dir$base.d 3843da084b3Smrg "$@" -MD 3853da084b3Smrg fi 3863da084b3Smrg 3873da084b3Smrg stat=$? 3883da084b3Smrg if test $stat -eq 0; then : 3893da084b3Smrg else 3903da084b3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3913da084b3Smrg exit $stat 3923da084b3Smrg fi 3933da084b3Smrg 3943da084b3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3953da084b3Smrg do 3963da084b3Smrg test -f "$tmpdepfile" && break 3973da084b3Smrg done 3983da084b3Smrg if test -f "$tmpdepfile"; then 3993da084b3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4003da084b3Smrg # That's a tab and a space in the []. 4013da084b3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4023da084b3Smrg else 4033da084b3Smrg echo "#dummy" > "$depfile" 4043da084b3Smrg fi 4053da084b3Smrg rm -f "$tmpdepfile" 4063da084b3Smrg ;; 4073da084b3Smrg 4083da084b3Smrg#nosideeffect) 4093da084b3Smrg # This comment above is used by automake to tell side-effect 4103da084b3Smrg # dependency tracking mechanisms from slower ones. 4113da084b3Smrg 4123da084b3Smrgdashmstdout) 4133da084b3Smrg # Important note: in order to support this mode, a compiler *must* 4143da084b3Smrg # always write the preprocessed file to stdout, regardless of -o. 4153da084b3Smrg "$@" || exit $? 4163da084b3Smrg 4173da084b3Smrg # Remove the call to Libtool. 4183da084b3Smrg if test "$libtool" = yes; then 41955acc8fcSmrg while test "X$1" != 'X--mode=compile'; do 4203da084b3Smrg shift 4213da084b3Smrg done 4223da084b3Smrg shift 4233da084b3Smrg fi 4243da084b3Smrg 4253da084b3Smrg # Remove `-o $object'. 4263da084b3Smrg IFS=" " 4273da084b3Smrg for arg 4283da084b3Smrg do 4293da084b3Smrg case $arg in 4303da084b3Smrg -o) 4313da084b3Smrg shift 4323da084b3Smrg ;; 4333da084b3Smrg $object) 4343da084b3Smrg shift 4353da084b3Smrg ;; 4363da084b3Smrg *) 4373da084b3Smrg set fnord "$@" "$arg" 4383da084b3Smrg shift # fnord 4393da084b3Smrg shift # $arg 4403da084b3Smrg ;; 4413da084b3Smrg esac 4423da084b3Smrg done 4433da084b3Smrg 4443da084b3Smrg test -z "$dashmflag" && dashmflag=-M 4453da084b3Smrg # Require at least two characters before searching for `:' 4463da084b3Smrg # in the target name. This is to cope with DOS-style filenames: 4473da084b3Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4483da084b3Smrg "$@" $dashmflag | 4493da084b3Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4503da084b3Smrg rm -f "$depfile" 4513da084b3Smrg cat < "$tmpdepfile" > "$depfile" 4523da084b3Smrg tr ' ' ' 4533da084b3Smrg' < "$tmpdepfile" | \ 4543da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4553da084b3Smrg## correctly. Breaking it into two sed invocations is a workaround. 4563da084b3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4573da084b3Smrg rm -f "$tmpdepfile" 4583da084b3Smrg ;; 4593da084b3Smrg 4603da084b3SmrgdashXmstdout) 4613da084b3Smrg # This case only exists to satisfy depend.m4. It is never actually 4623da084b3Smrg # run, as this mode is specially recognized in the preamble. 4633da084b3Smrg exit 1 4643da084b3Smrg ;; 4653da084b3Smrg 4663da084b3Smrgmakedepend) 4673da084b3Smrg "$@" || exit $? 4683da084b3Smrg # Remove any Libtool call 4693da084b3Smrg if test "$libtool" = yes; then 47055acc8fcSmrg while test "X$1" != 'X--mode=compile'; do 4713da084b3Smrg shift 4723da084b3Smrg done 4733da084b3Smrg shift 4743da084b3Smrg fi 4753da084b3Smrg # X makedepend 4763da084b3Smrg shift 47755acc8fcSmrg cleared=no eat=no 47855acc8fcSmrg for arg 47955acc8fcSmrg do 4803da084b3Smrg case $cleared in 4813da084b3Smrg no) 4823da084b3Smrg set ""; shift 4833da084b3Smrg cleared=yes ;; 4843da084b3Smrg esac 48555acc8fcSmrg if test $eat = yes; then 48655acc8fcSmrg eat=no 48755acc8fcSmrg continue 48855acc8fcSmrg fi 4893da084b3Smrg case "$arg" in 4903da084b3Smrg -D*|-I*) 4913da084b3Smrg set fnord "$@" "$arg"; shift ;; 4923da084b3Smrg # Strip any option that makedepend may not understand. Remove 4933da084b3Smrg # the object too, otherwise makedepend will parse it as a source file. 49455acc8fcSmrg -arch) 49555acc8fcSmrg eat=yes ;; 4963da084b3Smrg -*|$object) 4973da084b3Smrg ;; 4983da084b3Smrg *) 4993da084b3Smrg set fnord "$@" "$arg"; shift ;; 5003da084b3Smrg esac 5013da084b3Smrg done 50255acc8fcSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5033da084b3Smrg touch "$tmpdepfile" 5043da084b3Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5053da084b3Smrg rm -f "$depfile" 5063da084b3Smrg cat < "$tmpdepfile" > "$depfile" 5073da084b3Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5083da084b3Smrg' | \ 5093da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5103da084b3Smrg## correctly. Breaking it into two sed invocations is a workaround. 5113da084b3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5123da084b3Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5133da084b3Smrg ;; 5143da084b3Smrg 5153da084b3Smrgcpp) 5163da084b3Smrg # Important note: in order to support this mode, a compiler *must* 5173da084b3Smrg # always write the preprocessed file to stdout. 5183da084b3Smrg "$@" || exit $? 5193da084b3Smrg 5203da084b3Smrg # Remove the call to Libtool. 5213da084b3Smrg if test "$libtool" = yes; then 52255acc8fcSmrg while test "X$1" != 'X--mode=compile'; do 5233da084b3Smrg shift 5243da084b3Smrg done 5253da084b3Smrg shift 5263da084b3Smrg fi 5273da084b3Smrg 5283da084b3Smrg # Remove `-o $object'. 5293da084b3Smrg IFS=" " 5303da084b3Smrg for arg 5313da084b3Smrg do 5323da084b3Smrg case $arg in 5333da084b3Smrg -o) 5343da084b3Smrg shift 5353da084b3Smrg ;; 5363da084b3Smrg $object) 5373da084b3Smrg shift 5383da084b3Smrg ;; 5393da084b3Smrg *) 5403da084b3Smrg set fnord "$@" "$arg" 5413da084b3Smrg shift # fnord 5423da084b3Smrg shift # $arg 5433da084b3Smrg ;; 5443da084b3Smrg esac 5453da084b3Smrg done 5463da084b3Smrg 5473da084b3Smrg "$@" -E | 5483da084b3Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5493da084b3Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5503da084b3Smrg sed '$ s: \\$::' > "$tmpdepfile" 5513da084b3Smrg rm -f "$depfile" 5523da084b3Smrg echo "$object : \\" > "$depfile" 5533da084b3Smrg cat < "$tmpdepfile" >> "$depfile" 5543da084b3Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5553da084b3Smrg rm -f "$tmpdepfile" 5563da084b3Smrg ;; 5573da084b3Smrg 5583da084b3Smrgmsvisualcpp) 5593da084b3Smrg # Important note: in order to support this mode, a compiler *must* 56055acc8fcSmrg # always write the preprocessed file to stdout. 5613da084b3Smrg "$@" || exit $? 56255acc8fcSmrg 56355acc8fcSmrg # Remove the call to Libtool. 56455acc8fcSmrg if test "$libtool" = yes; then 56555acc8fcSmrg while test "X$1" != 'X--mode=compile'; do 56655acc8fcSmrg shift 56755acc8fcSmrg done 56855acc8fcSmrg shift 56955acc8fcSmrg fi 57055acc8fcSmrg 5713da084b3Smrg IFS=" " 5723da084b3Smrg for arg 5733da084b3Smrg do 5743da084b3Smrg case "$arg" in 57555acc8fcSmrg -o) 57655acc8fcSmrg shift 57755acc8fcSmrg ;; 57855acc8fcSmrg $object) 57955acc8fcSmrg shift 58055acc8fcSmrg ;; 5813da084b3Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5823da084b3Smrg set fnord "$@" 5833da084b3Smrg shift 5843da084b3Smrg shift 5853da084b3Smrg ;; 5863da084b3Smrg *) 5873da084b3Smrg set fnord "$@" "$arg" 5883da084b3Smrg shift 5893da084b3Smrg shift 5903da084b3Smrg ;; 5913da084b3Smrg esac 5923da084b3Smrg done 59355acc8fcSmrg "$@" -E 2>/dev/null | 59455acc8fcSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5953da084b3Smrg rm -f "$depfile" 5963da084b3Smrg echo "$object : \\" > "$depfile" 59755acc8fcSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5983da084b3Smrg echo " " >> "$depfile" 59955acc8fcSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6003da084b3Smrg rm -f "$tmpdepfile" 6013da084b3Smrg ;; 6023da084b3Smrg 60355acc8fcSmrgmsvcmsys) 60455acc8fcSmrg # This case exists only to let depend.m4 do its work. It works by 60555acc8fcSmrg # looking at the text of this script. This case will never be run, 60655acc8fcSmrg # since it is checked for above. 60755acc8fcSmrg exit 1 60855acc8fcSmrg ;; 60955acc8fcSmrg 6103da084b3Smrgnone) 6113da084b3Smrg exec "$@" 6123da084b3Smrg ;; 6133da084b3Smrg 6143da084b3Smrg*) 6153da084b3Smrg echo "Unknown depmode $depmode" 1>&2 6163da084b3Smrg exit 1 6173da084b3Smrg ;; 6183da084b3Smrgesac 6193da084b3Smrg 6203da084b3Smrgexit 0 6213da084b3Smrg 6223da084b3Smrg# Local Variables: 6233da084b3Smrg# mode: shell-script 6243da084b3Smrg# sh-indentation: 2 6253da084b3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6263da084b3Smrg# time-stamp-start: "scriptversion=" 6273da084b3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62855acc8fcSmrg# time-stamp-time-zone: "UTC" 62955acc8fcSmrg# time-stamp-end: "; # UTC" 6303da084b3Smrg# End: 631