depcomp revision e531b1a7
13da7aff1Smrg#! /bin/sh 23da7aff1Smrg# depcomp - compile a program generating dependencies as side-effects 3e531b1a7Smrg 4e531b1a7Smrgscriptversion=2009-04-28.21; # UTC 5e531b1a7Smrg 6e531b1a7Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7e531b1a7Smrg# Software Foundation, Inc. 83da7aff1Smrg 93da7aff1Smrg# This program is free software; you can redistribute it and/or modify 103da7aff1Smrg# it under the terms of the GNU General Public License as published by 113da7aff1Smrg# the Free Software Foundation; either version 2, or (at your option) 123da7aff1Smrg# any later version. 133da7aff1Smrg 143da7aff1Smrg# This program is distributed in the hope that it will be useful, 153da7aff1Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 163da7aff1Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 173da7aff1Smrg# GNU General Public License for more details. 183da7aff1Smrg 193da7aff1Smrg# You should have received a copy of the GNU General Public License 20e531b1a7Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 213da7aff1Smrg 223da7aff1Smrg# As a special exception to the GNU General Public License, if you 233da7aff1Smrg# distribute this file as part of a program that contains a 243da7aff1Smrg# configuration script generated by Autoconf, you may include it under 253da7aff1Smrg# the same distribution terms that you use for the rest of that program. 263da7aff1Smrg 273da7aff1Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 283da7aff1Smrg 29e531b1a7Smrgcase $1 in 30e531b1a7Smrg '') 31e531b1a7Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32e531b1a7Smrg exit 1; 33e531b1a7Smrg ;; 34e531b1a7Smrg -h | --h*) 35e531b1a7Smrg cat <<\EOF 36e531b1a7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37e531b1a7Smrg 38e531b1a7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39e531b1a7Smrgas side-effects. 40e531b1a7Smrg 41e531b1a7SmrgEnvironment variables: 42e531b1a7Smrg depmode Dependency tracking mode. 43e531b1a7Smrg source Source file read by `PROGRAMS ARGS'. 44e531b1a7Smrg object Object file output by `PROGRAMS ARGS'. 45e531b1a7Smrg DEPDIR directory where to store dependencies. 46e531b1a7Smrg depfile Dependency file to output. 47e531b1a7Smrg tmpdepfile Temporary file to use when outputing dependencies. 48e531b1a7Smrg libtool Whether libtool is used (yes/no). 49e531b1a7Smrg 50e531b1a7SmrgReport bugs to <bug-automake@gnu.org>. 51e531b1a7SmrgEOF 52e531b1a7Smrg exit $? 53e531b1a7Smrg ;; 54e531b1a7Smrg -v | --v*) 55e531b1a7Smrg echo "depcomp $scriptversion" 56e531b1a7Smrg exit $? 57e531b1a7Smrg ;; 58e531b1a7Smrgesac 59e531b1a7Smrg 603da7aff1Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 613da7aff1Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 623da7aff1Smrg exit 1 633da7aff1Smrgfi 643da7aff1Smrg 65e531b1a7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66e531b1a7Smrgdepfile=${depfile-`echo "$object" | 67e531b1a7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 683da7aff1Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 693da7aff1Smrg 703da7aff1Smrgrm -f "$tmpdepfile" 713da7aff1Smrg 723da7aff1Smrg# Some modes work just like other modes, but use different flags. We 733da7aff1Smrg# parameterize here, but still list the modes in the big case below, 743da7aff1Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 753da7aff1Smrg# here, because this file can only contain one case statement. 763da7aff1Smrgif test "$depmode" = hp; then 773da7aff1Smrg # HP compiler uses -M and no extra arg. 783da7aff1Smrg gccflag=-M 793da7aff1Smrg depmode=gcc 803da7aff1Smrgfi 813da7aff1Smrg 823da7aff1Smrgif test "$depmode" = dashXmstdout; then 833da7aff1Smrg # This is just like dashmstdout with a different argument. 843da7aff1Smrg dashmflag=-xM 853da7aff1Smrg depmode=dashmstdout 863da7aff1Smrgfi 873da7aff1Smrg 88e531b1a7Smrgcygpath_u="cygpath -u -f -" 89e531b1a7Smrgif test "$depmode" = msvcmsys; then 90e531b1a7Smrg # This is just like msvisualcpp but w/o cygpath translation. 91e531b1a7Smrg # Just convert the backslash-escaped backslashes to single forward 92e531b1a7Smrg # slashes to satisfy depend.m4 93e531b1a7Smrg cygpath_u="sed s,\\\\\\\\,/,g" 94e531b1a7Smrg depmode=msvisualcpp 95e531b1a7Smrgfi 96e531b1a7Smrg 973da7aff1Smrgcase "$depmode" in 983da7aff1Smrggcc3) 993da7aff1Smrg## gcc 3 implements dependency tracking that does exactly what 1003da7aff1Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1013da7aff1Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102e531b1a7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103e531b1a7Smrg## the command line argument order; so add the flags where they 104e531b1a7Smrg## appear in depend2.am. Note that the slowdown incurred here 105e531b1a7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106e531b1a7Smrg for arg 107e531b1a7Smrg do 108e531b1a7Smrg case $arg in 109e531b1a7Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110e531b1a7Smrg *) set fnord "$@" "$arg" ;; 111e531b1a7Smrg esac 112e531b1a7Smrg shift # fnord 113e531b1a7Smrg shift # $arg 114e531b1a7Smrg done 115e531b1a7Smrg "$@" 1163da7aff1Smrg stat=$? 1173da7aff1Smrg if test $stat -eq 0; then : 1183da7aff1Smrg else 1193da7aff1Smrg rm -f "$tmpdepfile" 1203da7aff1Smrg exit $stat 1213da7aff1Smrg fi 1223da7aff1Smrg mv "$tmpdepfile" "$depfile" 1233da7aff1Smrg ;; 1243da7aff1Smrg 1253da7aff1Smrggcc) 1263da7aff1Smrg## There are various ways to get dependency output from gcc. Here's 1273da7aff1Smrg## why we pick this rather obscure method: 1283da7aff1Smrg## - Don't want to use -MD because we'd like the dependencies to end 1293da7aff1Smrg## up in a subdir. Having to rename by hand is ugly. 1303da7aff1Smrg## (We might end up doing this anyway to support other compilers.) 1313da7aff1Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1323da7aff1Smrg## -MM, not -M (despite what the docs say). 1333da7aff1Smrg## - Using -M directly means running the compiler twice (even worse 1343da7aff1Smrg## than renaming). 1353da7aff1Smrg if test -z "$gccflag"; then 1363da7aff1Smrg gccflag=-MD, 1373da7aff1Smrg fi 1383da7aff1Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1393da7aff1Smrg stat=$? 1403da7aff1Smrg if test $stat -eq 0; then : 1413da7aff1Smrg else 1423da7aff1Smrg rm -f "$tmpdepfile" 1433da7aff1Smrg exit $stat 1443da7aff1Smrg fi 1453da7aff1Smrg rm -f "$depfile" 1463da7aff1Smrg echo "$object : \\" > "$depfile" 1473da7aff1Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1483da7aff1Smrg## The second -e expression handles DOS-style file names with drive letters. 1493da7aff1Smrg sed -e 's/^[^:]*: / /' \ 1503da7aff1Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1513da7aff1Smrg## This next piece of magic avoids the `deleted header file' problem. 1523da7aff1Smrg## The problem is that when a header file which appears in a .P file 1533da7aff1Smrg## is deleted, the dependency causes make to die (because there is 1543da7aff1Smrg## typically no way to rebuild the header). We avoid this by adding 1553da7aff1Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1563da7aff1Smrg## this for us directly. 1573da7aff1Smrg tr ' ' ' 1583da7aff1Smrg' < "$tmpdepfile" | 1593da7aff1Smrg## Some versions of gcc put a space before the `:'. On the theory 1603da7aff1Smrg## that the space means something, we add a space to the output as 1613da7aff1Smrg## well. 1623da7aff1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1633da7aff1Smrg## correctly. Breaking it into two sed invocations is a workaround. 1643da7aff1Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1653da7aff1Smrg rm -f "$tmpdepfile" 1663da7aff1Smrg ;; 1673da7aff1Smrg 1683da7aff1Smrghp) 1693da7aff1Smrg # This case exists only to let depend.m4 do its work. It works by 1703da7aff1Smrg # looking at the text of this script. This case will never be run, 1713da7aff1Smrg # since it is checked for above. 1723da7aff1Smrg exit 1 1733da7aff1Smrg ;; 1743da7aff1Smrg 1753da7aff1Smrgsgi) 1763da7aff1Smrg if test "$libtool" = yes; then 1773da7aff1Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1783da7aff1Smrg else 1793da7aff1Smrg "$@" -MDupdate "$tmpdepfile" 1803da7aff1Smrg fi 1813da7aff1Smrg stat=$? 1823da7aff1Smrg if test $stat -eq 0; then : 1833da7aff1Smrg else 1843da7aff1Smrg rm -f "$tmpdepfile" 1853da7aff1Smrg exit $stat 1863da7aff1Smrg fi 1873da7aff1Smrg rm -f "$depfile" 1883da7aff1Smrg 1893da7aff1Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1903da7aff1Smrg echo "$object : \\" > "$depfile" 1913da7aff1Smrg 1923da7aff1Smrg # Clip off the initial element (the dependent). Don't try to be 1933da7aff1Smrg # clever and replace this with sed code, as IRIX sed won't handle 1943da7aff1Smrg # lines with more than a fixed number of characters (4096 in 1953da7aff1Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1963da7aff1Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1973da7aff1Smrg # dependency line. 1983da7aff1Smrg tr ' ' ' 1993da7aff1Smrg' < "$tmpdepfile" \ 2003da7aff1Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2013da7aff1Smrg tr ' 202e531b1a7Smrg' ' ' >> "$depfile" 203e531b1a7Smrg echo >> "$depfile" 2043da7aff1Smrg 2053da7aff1Smrg # The second pass generates a dummy entry for each header file. 2063da7aff1Smrg tr ' ' ' 2073da7aff1Smrg' < "$tmpdepfile" \ 2083da7aff1Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209e531b1a7Smrg >> "$depfile" 2103da7aff1Smrg else 2113da7aff1Smrg # The sourcefile does not contain any dependencies, so just 2123da7aff1Smrg # store a dummy comment line, to avoid errors with the Makefile 2133da7aff1Smrg # "include basename.Plo" scheme. 2143da7aff1Smrg echo "#dummy" > "$depfile" 2153da7aff1Smrg fi 2163da7aff1Smrg rm -f "$tmpdepfile" 2173da7aff1Smrg ;; 2183da7aff1Smrg 2193da7aff1Smrgaix) 2203da7aff1Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2213da7aff1Smrg # in a .u file. In older versions, this file always lives in the 2223da7aff1Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2233da7aff1Smrg # start of each line; $object doesn't have directory information. 2243da7aff1Smrg # Version 6 uses the directory in both cases. 225e531b1a7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226e531b1a7Smrg test "x$dir" = "x$object" && dir= 227e531b1a7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2283da7aff1Smrg if test "$libtool" = yes; then 229e531b1a7Smrg tmpdepfile1=$dir$base.u 230e531b1a7Smrg tmpdepfile2=$base.u 231e531b1a7Smrg tmpdepfile3=$dir.libs/$base.u 2323da7aff1Smrg "$@" -Wc,-M 2333da7aff1Smrg else 234e531b1a7Smrg tmpdepfile1=$dir$base.u 235e531b1a7Smrg tmpdepfile2=$dir$base.u 236e531b1a7Smrg tmpdepfile3=$dir$base.u 2373da7aff1Smrg "$@" -M 2383da7aff1Smrg fi 2393da7aff1Smrg stat=$? 2403da7aff1Smrg 2413da7aff1Smrg if test $stat -eq 0; then : 2423da7aff1Smrg else 243e531b1a7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2443da7aff1Smrg exit $stat 2453da7aff1Smrg fi 2463da7aff1Smrg 247e531b1a7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248e531b1a7Smrg do 249e531b1a7Smrg test -f "$tmpdepfile" && break 250e531b1a7Smrg done 2513da7aff1Smrg if test -f "$tmpdepfile"; then 2523da7aff1Smrg # Each line is of the form `foo.o: dependent.h'. 2533da7aff1Smrg # Do two passes, one to just change these to 2543da7aff1Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255e531b1a7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256e531b1a7Smrg # That's a tab and a space in the []. 257e531b1a7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2583da7aff1Smrg else 2593da7aff1Smrg # The sourcefile does not contain any dependencies, so just 2603da7aff1Smrg # store a dummy comment line, to avoid errors with the Makefile 2613da7aff1Smrg # "include basename.Plo" scheme. 2623da7aff1Smrg echo "#dummy" > "$depfile" 2633da7aff1Smrg fi 2643da7aff1Smrg rm -f "$tmpdepfile" 2653da7aff1Smrg ;; 2663da7aff1Smrg 2673da7aff1Smrgicc) 2683da7aff1Smrg # Intel's C compiler understands `-MD -MF file'. However on 2693da7aff1Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2703da7aff1Smrg # ICC 7.0 will fill foo.d with something like 2713da7aff1Smrg # foo.o: sub/foo.c 2723da7aff1Smrg # foo.o: sub/foo.h 2733da7aff1Smrg # which is wrong. We want: 2743da7aff1Smrg # sub/foo.o: sub/foo.c 2753da7aff1Smrg # sub/foo.o: sub/foo.h 2763da7aff1Smrg # sub/foo.c: 2773da7aff1Smrg # sub/foo.h: 2783da7aff1Smrg # ICC 7.1 will output 2793da7aff1Smrg # foo.o: sub/foo.c sub/foo.h 2803da7aff1Smrg # and will wrap long lines using \ : 2813da7aff1Smrg # foo.o: sub/foo.c ... \ 2823da7aff1Smrg # sub/foo.h ... \ 2833da7aff1Smrg # ... 2843da7aff1Smrg 2853da7aff1Smrg "$@" -MD -MF "$tmpdepfile" 2863da7aff1Smrg stat=$? 2873da7aff1Smrg if test $stat -eq 0; then : 2883da7aff1Smrg else 2893da7aff1Smrg rm -f "$tmpdepfile" 2903da7aff1Smrg exit $stat 2913da7aff1Smrg fi 2923da7aff1Smrg rm -f "$depfile" 2933da7aff1Smrg # Each line is of the form `foo.o: dependent.h', 2943da7aff1Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2953da7aff1Smrg # Do two passes, one to just change these to 2963da7aff1Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2973da7aff1Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2983da7aff1Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2993da7aff1Smrg # correctly. Breaking it into two sed invocations is a workaround. 3003da7aff1Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3013da7aff1Smrg sed -e 's/$/ :/' >> "$depfile" 3023da7aff1Smrg rm -f "$tmpdepfile" 3033da7aff1Smrg ;; 3043da7aff1Smrg 305e531b1a7Smrghp2) 306e531b1a7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307e531b1a7Smrg # compilers, which have integrated preprocessors. The correct option 308e531b1a7Smrg # to use with these is +Maked; it writes dependencies to a file named 309e531b1a7Smrg # 'foo.d', which lands next to the object file, wherever that 310e531b1a7Smrg # happens to be. 311e531b1a7Smrg # Much of this is similar to the tru64 case; see comments there. 312e531b1a7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313e531b1a7Smrg test "x$dir" = "x$object" && dir= 314e531b1a7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315e531b1a7Smrg if test "$libtool" = yes; then 316e531b1a7Smrg tmpdepfile1=$dir$base.d 317e531b1a7Smrg tmpdepfile2=$dir.libs/$base.d 318e531b1a7Smrg "$@" -Wc,+Maked 319e531b1a7Smrg else 320e531b1a7Smrg tmpdepfile1=$dir$base.d 321e531b1a7Smrg tmpdepfile2=$dir$base.d 322e531b1a7Smrg "$@" +Maked 323e531b1a7Smrg fi 324e531b1a7Smrg stat=$? 325e531b1a7Smrg if test $stat -eq 0; then : 326e531b1a7Smrg else 327e531b1a7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328e531b1a7Smrg exit $stat 329e531b1a7Smrg fi 330e531b1a7Smrg 331e531b1a7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332e531b1a7Smrg do 333e531b1a7Smrg test -f "$tmpdepfile" && break 334e531b1a7Smrg done 335e531b1a7Smrg if test -f "$tmpdepfile"; then 336e531b1a7Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337e531b1a7Smrg # Add `dependent.h:' lines. 338e531b1a7Smrg sed -ne '2,${ 339e531b1a7Smrg s/^ *// 340e531b1a7Smrg s/ \\*$// 341e531b1a7Smrg s/$/:/ 342e531b1a7Smrg p 343e531b1a7Smrg }' "$tmpdepfile" >> "$depfile" 344e531b1a7Smrg else 345e531b1a7Smrg echo "#dummy" > "$depfile" 346e531b1a7Smrg fi 347e531b1a7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348e531b1a7Smrg ;; 349e531b1a7Smrg 3503da7aff1Smrgtru64) 3513da7aff1Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3523da7aff1Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3533da7aff1Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3543da7aff1Smrg # dependencies in `foo.d' instead, so we check for that too. 3553da7aff1Smrg # Subdirectories are respected. 3563da7aff1Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3573da7aff1Smrg test "x$dir" = "x$object" && dir= 3583da7aff1Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3593da7aff1Smrg 3603da7aff1Smrg if test "$libtool" = yes; then 361e531b1a7Smrg # With Tru64 cc, shared objects can also be used to make a 362e531b1a7Smrg # static library. This mechanism is used in libtool 1.4 series to 363e531b1a7Smrg # handle both shared and static libraries in a single compilation. 364e531b1a7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365e531b1a7Smrg # 366e531b1a7Smrg # With libtool 1.5 this exception was removed, and libtool now 367e531b1a7Smrg # generates 2 separate objects for the 2 libraries. These two 368e531b1a7Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369e531b1a7Smrg # in $dir$base.o.d. We have to check for both files, because 370e531b1a7Smrg # one of the two compilations can be disabled. We should prefer 371e531b1a7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372e531b1a7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373e531b1a7Smrg # the former would cause a distcleancheck panic. 374e531b1a7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375e531b1a7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376e531b1a7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377e531b1a7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3783da7aff1Smrg "$@" -Wc,-MD 3793da7aff1Smrg else 380e531b1a7Smrg tmpdepfile1=$dir$base.o.d 381e531b1a7Smrg tmpdepfile2=$dir$base.d 382e531b1a7Smrg tmpdepfile3=$dir$base.d 383e531b1a7Smrg tmpdepfile4=$dir$base.d 3843da7aff1Smrg "$@" -MD 3853da7aff1Smrg fi 3863da7aff1Smrg 3873da7aff1Smrg stat=$? 3883da7aff1Smrg if test $stat -eq 0; then : 3893da7aff1Smrg else 390e531b1a7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3913da7aff1Smrg exit $stat 3923da7aff1Smrg fi 3933da7aff1Smrg 394e531b1a7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395e531b1a7Smrg do 396e531b1a7Smrg test -f "$tmpdepfile" && break 397e531b1a7Smrg done 3983da7aff1Smrg if test -f "$tmpdepfile"; then 3993da7aff1Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4003da7aff1Smrg # That's a tab and a space in the []. 4013da7aff1Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4023da7aff1Smrg else 4033da7aff1Smrg echo "#dummy" > "$depfile" 4043da7aff1Smrg fi 4053da7aff1Smrg rm -f "$tmpdepfile" 4063da7aff1Smrg ;; 4073da7aff1Smrg 4083da7aff1Smrg#nosideeffect) 4093da7aff1Smrg # This comment above is used by automake to tell side-effect 4103da7aff1Smrg # dependency tracking mechanisms from slower ones. 4113da7aff1Smrg 4123da7aff1Smrgdashmstdout) 4133da7aff1Smrg # Important note: in order to support this mode, a compiler *must* 4143da7aff1Smrg # always write the preprocessed file to stdout, regardless of -o. 4153da7aff1Smrg "$@" || exit $? 4163da7aff1Smrg 4173da7aff1Smrg # Remove the call to Libtool. 4183da7aff1Smrg if test "$libtool" = yes; then 419e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 4203da7aff1Smrg shift 4213da7aff1Smrg done 4223da7aff1Smrg shift 4233da7aff1Smrg fi 4243da7aff1Smrg 4253da7aff1Smrg # Remove `-o $object'. 4263da7aff1Smrg IFS=" " 4273da7aff1Smrg for arg 4283da7aff1Smrg do 4293da7aff1Smrg case $arg in 4303da7aff1Smrg -o) 4313da7aff1Smrg shift 4323da7aff1Smrg ;; 4333da7aff1Smrg $object) 4343da7aff1Smrg shift 4353da7aff1Smrg ;; 4363da7aff1Smrg *) 4373da7aff1Smrg set fnord "$@" "$arg" 4383da7aff1Smrg shift # fnord 4393da7aff1Smrg shift # $arg 4403da7aff1Smrg ;; 4413da7aff1Smrg esac 4423da7aff1Smrg done 4433da7aff1Smrg 4443da7aff1Smrg test -z "$dashmflag" && dashmflag=-M 4453da7aff1Smrg # Require at least two characters before searching for `:' 4463da7aff1Smrg # in the target name. This is to cope with DOS-style filenames: 4473da7aff1Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4483da7aff1Smrg "$@" $dashmflag | 4493da7aff1Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4503da7aff1Smrg rm -f "$depfile" 4513da7aff1Smrg cat < "$tmpdepfile" > "$depfile" 4523da7aff1Smrg tr ' ' ' 4533da7aff1Smrg' < "$tmpdepfile" | \ 4543da7aff1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4553da7aff1Smrg## correctly. Breaking it into two sed invocations is a workaround. 4563da7aff1Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4573da7aff1Smrg rm -f "$tmpdepfile" 4583da7aff1Smrg ;; 4593da7aff1Smrg 4603da7aff1SmrgdashXmstdout) 4613da7aff1Smrg # This case only exists to satisfy depend.m4. It is never actually 4623da7aff1Smrg # run, as this mode is specially recognized in the preamble. 4633da7aff1Smrg exit 1 4643da7aff1Smrg ;; 4653da7aff1Smrg 4663da7aff1Smrgmakedepend) 4673da7aff1Smrg "$@" || exit $? 4683da7aff1Smrg # Remove any Libtool call 4693da7aff1Smrg if test "$libtool" = yes; then 470e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 4713da7aff1Smrg shift 4723da7aff1Smrg done 4733da7aff1Smrg shift 4743da7aff1Smrg fi 4753da7aff1Smrg # X makedepend 4763da7aff1Smrg shift 477e531b1a7Smrg cleared=no eat=no 478e531b1a7Smrg for arg 479e531b1a7Smrg do 4803da7aff1Smrg case $cleared in 4813da7aff1Smrg no) 4823da7aff1Smrg set ""; shift 4833da7aff1Smrg cleared=yes ;; 4843da7aff1Smrg esac 485e531b1a7Smrg if test $eat = yes; then 486e531b1a7Smrg eat=no 487e531b1a7Smrg continue 488e531b1a7Smrg fi 4893da7aff1Smrg case "$arg" in 4903da7aff1Smrg -D*|-I*) 4913da7aff1Smrg set fnord "$@" "$arg"; shift ;; 4923da7aff1Smrg # Strip any option that makedepend may not understand. Remove 4933da7aff1Smrg # the object too, otherwise makedepend will parse it as a source file. 494e531b1a7Smrg -arch) 495e531b1a7Smrg eat=yes ;; 4963da7aff1Smrg -*|$object) 4973da7aff1Smrg ;; 4983da7aff1Smrg *) 4993da7aff1Smrg set fnord "$@" "$arg"; shift ;; 5003da7aff1Smrg esac 5013da7aff1Smrg done 502e531b1a7Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5033da7aff1Smrg touch "$tmpdepfile" 5043da7aff1Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5053da7aff1Smrg rm -f "$depfile" 5063da7aff1Smrg cat < "$tmpdepfile" > "$depfile" 5073da7aff1Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5083da7aff1Smrg' | \ 5093da7aff1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5103da7aff1Smrg## correctly. Breaking it into two sed invocations is a workaround. 5113da7aff1Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5123da7aff1Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5133da7aff1Smrg ;; 5143da7aff1Smrg 5153da7aff1Smrgcpp) 5163da7aff1Smrg # Important note: in order to support this mode, a compiler *must* 5173da7aff1Smrg # always write the preprocessed file to stdout. 5183da7aff1Smrg "$@" || exit $? 5193da7aff1Smrg 5203da7aff1Smrg # Remove the call to Libtool. 5213da7aff1Smrg if test "$libtool" = yes; then 522e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 5233da7aff1Smrg shift 5243da7aff1Smrg done 5253da7aff1Smrg shift 5263da7aff1Smrg fi 5273da7aff1Smrg 5283da7aff1Smrg # Remove `-o $object'. 5293da7aff1Smrg IFS=" " 5303da7aff1Smrg for arg 5313da7aff1Smrg do 5323da7aff1Smrg case $arg in 5333da7aff1Smrg -o) 5343da7aff1Smrg shift 5353da7aff1Smrg ;; 5363da7aff1Smrg $object) 5373da7aff1Smrg shift 5383da7aff1Smrg ;; 5393da7aff1Smrg *) 5403da7aff1Smrg set fnord "$@" "$arg" 5413da7aff1Smrg shift # fnord 5423da7aff1Smrg shift # $arg 5433da7aff1Smrg ;; 5443da7aff1Smrg esac 5453da7aff1Smrg done 5463da7aff1Smrg 5473da7aff1Smrg "$@" -E | 548e531b1a7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549e531b1a7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5503da7aff1Smrg sed '$ s: \\$::' > "$tmpdepfile" 5513da7aff1Smrg rm -f "$depfile" 5523da7aff1Smrg echo "$object : \\" > "$depfile" 5533da7aff1Smrg cat < "$tmpdepfile" >> "$depfile" 5543da7aff1Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5553da7aff1Smrg rm -f "$tmpdepfile" 5563da7aff1Smrg ;; 5573da7aff1Smrg 5583da7aff1Smrgmsvisualcpp) 5593da7aff1Smrg # Important note: in order to support this mode, a compiler *must* 560e531b1a7Smrg # always write the preprocessed file to stdout. 5613da7aff1Smrg "$@" || exit $? 562e531b1a7Smrg 563e531b1a7Smrg # Remove the call to Libtool. 564e531b1a7Smrg if test "$libtool" = yes; then 565e531b1a7Smrg while test "X$1" != 'X--mode=compile'; do 566e531b1a7Smrg shift 567e531b1a7Smrg done 568e531b1a7Smrg shift 569e531b1a7Smrg fi 570e531b1a7Smrg 5713da7aff1Smrg IFS=" " 5723da7aff1Smrg for arg 5733da7aff1Smrg do 5743da7aff1Smrg case "$arg" in 575e531b1a7Smrg -o) 576e531b1a7Smrg shift 577e531b1a7Smrg ;; 578e531b1a7Smrg $object) 579e531b1a7Smrg shift 580e531b1a7Smrg ;; 5813da7aff1Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5823da7aff1Smrg set fnord "$@" 5833da7aff1Smrg shift 5843da7aff1Smrg shift 5853da7aff1Smrg ;; 5863da7aff1Smrg *) 5873da7aff1Smrg set fnord "$@" "$arg" 5883da7aff1Smrg shift 5893da7aff1Smrg shift 5903da7aff1Smrg ;; 5913da7aff1Smrg esac 5923da7aff1Smrg done 593e531b1a7Smrg "$@" -E 2>/dev/null | 594e531b1a7Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5953da7aff1Smrg rm -f "$depfile" 5963da7aff1Smrg echo "$object : \\" > "$depfile" 597e531b1a7Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5983da7aff1Smrg echo " " >> "$depfile" 599e531b1a7Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6003da7aff1Smrg rm -f "$tmpdepfile" 6013da7aff1Smrg ;; 6023da7aff1Smrg 603e531b1a7Smrgmsvcmsys) 604e531b1a7Smrg # This case exists only to let depend.m4 do its work. It works by 605e531b1a7Smrg # looking at the text of this script. This case will never be run, 606e531b1a7Smrg # since it is checked for above. 607e531b1a7Smrg exit 1 608e531b1a7Smrg ;; 609e531b1a7Smrg 6103da7aff1Smrgnone) 6113da7aff1Smrg exec "$@" 6123da7aff1Smrg ;; 6133da7aff1Smrg 6143da7aff1Smrg*) 6153da7aff1Smrg echo "Unknown depmode $depmode" 1>&2 6163da7aff1Smrg exit 1 6173da7aff1Smrg ;; 6183da7aff1Smrgesac 6193da7aff1Smrg 6203da7aff1Smrgexit 0 621e531b1a7Smrg 622e531b1a7Smrg# Local Variables: 623e531b1a7Smrg# mode: shell-script 624e531b1a7Smrg# sh-indentation: 2 625e531b1a7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626e531b1a7Smrg# time-stamp-start: "scriptversion=" 627e531b1a7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628e531b1a7Smrg# time-stamp-time-zone: "UTC" 629e531b1a7Smrg# time-stamp-end: "; # UTC" 630e531b1a7Smrg# End: 631