depcomp revision 3da084b3
13da084b3Smrg#! /bin/sh 23da084b3Smrg# depcomp - compile a program generating dependencies as side-effects 33da084b3Smrg 43da084b3Smrgscriptversion=2005-07-09.11 53da084b3Smrg 63da084b3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 73da084b3Smrg 83da084b3Smrg# This program is free software; you can redistribute it and/or modify 93da084b3Smrg# it under the terms of the GNU General Public License as published by 103da084b3Smrg# the Free Software Foundation; either version 2, or (at your option) 113da084b3Smrg# any later version. 123da084b3Smrg 133da084b3Smrg# This program is distributed in the hope that it will be useful, 143da084b3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 153da084b3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 163da084b3Smrg# GNU General Public License for more details. 173da084b3Smrg 183da084b3Smrg# You should have received a copy of the GNU General Public License 193da084b3Smrg# along with this program; if not, write to the Free Software 203da084b3Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 213da084b3Smrg# 02110-1301, USA. 223da084b3Smrg 233da084b3Smrg# As a special exception to the GNU General Public License, if you 243da084b3Smrg# distribute this file as part of a program that contains a 253da084b3Smrg# configuration script generated by Autoconf, you may include it under 263da084b3Smrg# the same distribution terms that you use for the rest of that program. 273da084b3Smrg 283da084b3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 293da084b3Smrg 303da084b3Smrgcase $1 in 313da084b3Smrg '') 323da084b3Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 333da084b3Smrg exit 1; 343da084b3Smrg ;; 353da084b3Smrg -h | --h*) 363da084b3Smrg cat <<\EOF 373da084b3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 383da084b3Smrg 393da084b3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 403da084b3Smrgas side-effects. 413da084b3Smrg 423da084b3SmrgEnvironment variables: 433da084b3Smrg depmode Dependency tracking mode. 443da084b3Smrg source Source file read by `PROGRAMS ARGS'. 453da084b3Smrg object Object file output by `PROGRAMS ARGS'. 463da084b3Smrg DEPDIR directory where to store dependencies. 473da084b3Smrg depfile Dependency file to output. 483da084b3Smrg tmpdepfile Temporary file to use when outputing dependencies. 493da084b3Smrg libtool Whether libtool is used (yes/no). 503da084b3Smrg 513da084b3SmrgReport bugs to <bug-automake@gnu.org>. 523da084b3SmrgEOF 533da084b3Smrg exit $? 543da084b3Smrg ;; 553da084b3Smrg -v | --v*) 563da084b3Smrg echo "depcomp $scriptversion" 573da084b3Smrg exit $? 583da084b3Smrg ;; 593da084b3Smrgesac 603da084b3Smrg 613da084b3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 623da084b3Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 633da084b3Smrg exit 1 643da084b3Smrgfi 653da084b3Smrg 663da084b3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 673da084b3Smrgdepfile=${depfile-`echo "$object" | 683da084b3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 693da084b3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 703da084b3Smrg 713da084b3Smrgrm -f "$tmpdepfile" 723da084b3Smrg 733da084b3Smrg# Some modes work just like other modes, but use different flags. We 743da084b3Smrg# parameterize here, but still list the modes in the big case below, 753da084b3Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 763da084b3Smrg# here, because this file can only contain one case statement. 773da084b3Smrgif test "$depmode" = hp; then 783da084b3Smrg # HP compiler uses -M and no extra arg. 793da084b3Smrg gccflag=-M 803da084b3Smrg depmode=gcc 813da084b3Smrgfi 823da084b3Smrg 833da084b3Smrgif test "$depmode" = dashXmstdout; then 843da084b3Smrg # This is just like dashmstdout with a different argument. 853da084b3Smrg dashmflag=-xM 863da084b3Smrg depmode=dashmstdout 873da084b3Smrgfi 883da084b3Smrg 893da084b3Smrgcase "$depmode" in 903da084b3Smrggcc3) 913da084b3Smrg## gcc 3 implements dependency tracking that does exactly what 923da084b3Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 933da084b3Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 943da084b3Smrg "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 953da084b3Smrg stat=$? 963da084b3Smrg if test $stat -eq 0; then : 973da084b3Smrg else 983da084b3Smrg rm -f "$tmpdepfile" 993da084b3Smrg exit $stat 1003da084b3Smrg fi 1013da084b3Smrg mv "$tmpdepfile" "$depfile" 1023da084b3Smrg ;; 1033da084b3Smrg 1043da084b3Smrggcc) 1053da084b3Smrg## There are various ways to get dependency output from gcc. Here's 1063da084b3Smrg## why we pick this rather obscure method: 1073da084b3Smrg## - Don't want to use -MD because we'd like the dependencies to end 1083da084b3Smrg## up in a subdir. Having to rename by hand is ugly. 1093da084b3Smrg## (We might end up doing this anyway to support other compilers.) 1103da084b3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1113da084b3Smrg## -MM, not -M (despite what the docs say). 1123da084b3Smrg## - Using -M directly means running the compiler twice (even worse 1133da084b3Smrg## than renaming). 1143da084b3Smrg if test -z "$gccflag"; then 1153da084b3Smrg gccflag=-MD, 1163da084b3Smrg fi 1173da084b3Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1183da084b3Smrg stat=$? 1193da084b3Smrg if test $stat -eq 0; then : 1203da084b3Smrg else 1213da084b3Smrg rm -f "$tmpdepfile" 1223da084b3Smrg exit $stat 1233da084b3Smrg fi 1243da084b3Smrg rm -f "$depfile" 1253da084b3Smrg echo "$object : \\" > "$depfile" 1263da084b3Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1273da084b3Smrg## The second -e expression handles DOS-style file names with drive letters. 1283da084b3Smrg sed -e 's/^[^:]*: / /' \ 1293da084b3Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1303da084b3Smrg## This next piece of magic avoids the `deleted header file' problem. 1313da084b3Smrg## The problem is that when a header file which appears in a .P file 1323da084b3Smrg## is deleted, the dependency causes make to die (because there is 1333da084b3Smrg## typically no way to rebuild the header). We avoid this by adding 1343da084b3Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1353da084b3Smrg## this for us directly. 1363da084b3Smrg tr ' ' ' 1373da084b3Smrg' < "$tmpdepfile" | 1383da084b3Smrg## Some versions of gcc put a space before the `:'. On the theory 1393da084b3Smrg## that the space means something, we add a space to the output as 1403da084b3Smrg## well. 1413da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1423da084b3Smrg## correctly. Breaking it into two sed invocations is a workaround. 1433da084b3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1443da084b3Smrg rm -f "$tmpdepfile" 1453da084b3Smrg ;; 1463da084b3Smrg 1473da084b3Smrghp) 1483da084b3Smrg # This case exists only to let depend.m4 do its work. It works by 1493da084b3Smrg # looking at the text of this script. This case will never be run, 1503da084b3Smrg # since it is checked for above. 1513da084b3Smrg exit 1 1523da084b3Smrg ;; 1533da084b3Smrg 1543da084b3Smrgsgi) 1553da084b3Smrg if test "$libtool" = yes; then 1563da084b3Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1573da084b3Smrg else 1583da084b3Smrg "$@" -MDupdate "$tmpdepfile" 1593da084b3Smrg fi 1603da084b3Smrg stat=$? 1613da084b3Smrg if test $stat -eq 0; then : 1623da084b3Smrg else 1633da084b3Smrg rm -f "$tmpdepfile" 1643da084b3Smrg exit $stat 1653da084b3Smrg fi 1663da084b3Smrg rm -f "$depfile" 1673da084b3Smrg 1683da084b3Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1693da084b3Smrg echo "$object : \\" > "$depfile" 1703da084b3Smrg 1713da084b3Smrg # Clip off the initial element (the dependent). Don't try to be 1723da084b3Smrg # clever and replace this with sed code, as IRIX sed won't handle 1733da084b3Smrg # lines with more than a fixed number of characters (4096 in 1743da084b3Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1753da084b3Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1763da084b3Smrg # dependency line. 1773da084b3Smrg tr ' ' ' 1783da084b3Smrg' < "$tmpdepfile" \ 1793da084b3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1803da084b3Smrg tr ' 1813da084b3Smrg' ' ' >> $depfile 1823da084b3Smrg echo >> $depfile 1833da084b3Smrg 1843da084b3Smrg # The second pass generates a dummy entry for each header file. 1853da084b3Smrg tr ' ' ' 1863da084b3Smrg' < "$tmpdepfile" \ 1873da084b3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 1883da084b3Smrg >> $depfile 1893da084b3Smrg else 1903da084b3Smrg # The sourcefile does not contain any dependencies, so just 1913da084b3Smrg # store a dummy comment line, to avoid errors with the Makefile 1923da084b3Smrg # "include basename.Plo" scheme. 1933da084b3Smrg echo "#dummy" > "$depfile" 1943da084b3Smrg fi 1953da084b3Smrg rm -f "$tmpdepfile" 1963da084b3Smrg ;; 1973da084b3Smrg 1983da084b3Smrgaix) 1993da084b3Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2003da084b3Smrg # in a .u file. In older versions, this file always lives in the 2013da084b3Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2023da084b3Smrg # start of each line; $object doesn't have directory information. 2033da084b3Smrg # Version 6 uses the directory in both cases. 2043da084b3Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2053da084b3Smrg tmpdepfile="$stripped.u" 2063da084b3Smrg if test "$libtool" = yes; then 2073da084b3Smrg "$@" -Wc,-M 2083da084b3Smrg else 2093da084b3Smrg "$@" -M 2103da084b3Smrg fi 2113da084b3Smrg stat=$? 2123da084b3Smrg 2133da084b3Smrg if test -f "$tmpdepfile"; then : 2143da084b3Smrg else 2153da084b3Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2163da084b3Smrg tmpdepfile="$stripped.u" 2173da084b3Smrg fi 2183da084b3Smrg 2193da084b3Smrg if test $stat -eq 0; then : 2203da084b3Smrg else 2213da084b3Smrg rm -f "$tmpdepfile" 2223da084b3Smrg exit $stat 2233da084b3Smrg fi 2243da084b3Smrg 2253da084b3Smrg if test -f "$tmpdepfile"; then 2263da084b3Smrg outname="$stripped.o" 2273da084b3Smrg # Each line is of the form `foo.o: dependent.h'. 2283da084b3Smrg # Do two passes, one to just change these to 2293da084b3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2303da084b3Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2313da084b3Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2323da084b3Smrg else 2333da084b3Smrg # The sourcefile does not contain any dependencies, so just 2343da084b3Smrg # store a dummy comment line, to avoid errors with the Makefile 2353da084b3Smrg # "include basename.Plo" scheme. 2363da084b3Smrg echo "#dummy" > "$depfile" 2373da084b3Smrg fi 2383da084b3Smrg rm -f "$tmpdepfile" 2393da084b3Smrg ;; 2403da084b3Smrg 2413da084b3Smrgicc) 2423da084b3Smrg # Intel's C compiler understands `-MD -MF file'. However on 2433da084b3Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2443da084b3Smrg # ICC 7.0 will fill foo.d with something like 2453da084b3Smrg # foo.o: sub/foo.c 2463da084b3Smrg # foo.o: sub/foo.h 2473da084b3Smrg # which is wrong. We want: 2483da084b3Smrg # sub/foo.o: sub/foo.c 2493da084b3Smrg # sub/foo.o: sub/foo.h 2503da084b3Smrg # sub/foo.c: 2513da084b3Smrg # sub/foo.h: 2523da084b3Smrg # ICC 7.1 will output 2533da084b3Smrg # foo.o: sub/foo.c sub/foo.h 2543da084b3Smrg # and will wrap long lines using \ : 2553da084b3Smrg # foo.o: sub/foo.c ... \ 2563da084b3Smrg # sub/foo.h ... \ 2573da084b3Smrg # ... 2583da084b3Smrg 2593da084b3Smrg "$@" -MD -MF "$tmpdepfile" 2603da084b3Smrg stat=$? 2613da084b3Smrg if test $stat -eq 0; then : 2623da084b3Smrg else 2633da084b3Smrg rm -f "$tmpdepfile" 2643da084b3Smrg exit $stat 2653da084b3Smrg fi 2663da084b3Smrg rm -f "$depfile" 2673da084b3Smrg # Each line is of the form `foo.o: dependent.h', 2683da084b3Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2693da084b3Smrg # Do two passes, one to just change these to 2703da084b3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2713da084b3Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2723da084b3Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2733da084b3Smrg # correctly. Breaking it into two sed invocations is a workaround. 2743da084b3Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2753da084b3Smrg sed -e 's/$/ :/' >> "$depfile" 2763da084b3Smrg rm -f "$tmpdepfile" 2773da084b3Smrg ;; 2783da084b3Smrg 2793da084b3Smrgtru64) 2803da084b3Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 2813da084b3Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 2823da084b3Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 2833da084b3Smrg # dependencies in `foo.d' instead, so we check for that too. 2843da084b3Smrg # Subdirectories are respected. 2853da084b3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2863da084b3Smrg test "x$dir" = "x$object" && dir= 2873da084b3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2883da084b3Smrg 2893da084b3Smrg if test "$libtool" = yes; then 2903da084b3Smrg # With Tru64 cc, shared objects can also be used to make a 2913da084b3Smrg # static library. This mecanism is used in libtool 1.4 series to 2923da084b3Smrg # handle both shared and static libraries in a single compilation. 2933da084b3Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 2943da084b3Smrg # 2953da084b3Smrg # With libtool 1.5 this exception was removed, and libtool now 2963da084b3Smrg # generates 2 separate objects for the 2 libraries. These two 2973da084b3Smrg # compilations output dependencies in in $dir.libs/$base.o.d and 2983da084b3Smrg # in $dir$base.o.d. We have to check for both files, because 2993da084b3Smrg # one of the two compilations can be disabled. We should prefer 3003da084b3Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3013da084b3Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3023da084b3Smrg # the former would cause a distcleancheck panic. 3033da084b3Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3043da084b3Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3053da084b3Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3063da084b3Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3073da084b3Smrg "$@" -Wc,-MD 3083da084b3Smrg else 3093da084b3Smrg tmpdepfile1=$dir$base.o.d 3103da084b3Smrg tmpdepfile2=$dir$base.d 3113da084b3Smrg tmpdepfile3=$dir$base.d 3123da084b3Smrg tmpdepfile4=$dir$base.d 3133da084b3Smrg "$@" -MD 3143da084b3Smrg fi 3153da084b3Smrg 3163da084b3Smrg stat=$? 3173da084b3Smrg if test $stat -eq 0; then : 3183da084b3Smrg else 3193da084b3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3203da084b3Smrg exit $stat 3213da084b3Smrg fi 3223da084b3Smrg 3233da084b3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3243da084b3Smrg do 3253da084b3Smrg test -f "$tmpdepfile" && break 3263da084b3Smrg done 3273da084b3Smrg if test -f "$tmpdepfile"; then 3283da084b3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3293da084b3Smrg # That's a tab and a space in the []. 3303da084b3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3313da084b3Smrg else 3323da084b3Smrg echo "#dummy" > "$depfile" 3333da084b3Smrg fi 3343da084b3Smrg rm -f "$tmpdepfile" 3353da084b3Smrg ;; 3363da084b3Smrg 3373da084b3Smrg#nosideeffect) 3383da084b3Smrg # This comment above is used by automake to tell side-effect 3393da084b3Smrg # dependency tracking mechanisms from slower ones. 3403da084b3Smrg 3413da084b3Smrgdashmstdout) 3423da084b3Smrg # Important note: in order to support this mode, a compiler *must* 3433da084b3Smrg # always write the preprocessed file to stdout, regardless of -o. 3443da084b3Smrg "$@" || exit $? 3453da084b3Smrg 3463da084b3Smrg # Remove the call to Libtool. 3473da084b3Smrg if test "$libtool" = yes; then 3483da084b3Smrg while test $1 != '--mode=compile'; do 3493da084b3Smrg shift 3503da084b3Smrg done 3513da084b3Smrg shift 3523da084b3Smrg fi 3533da084b3Smrg 3543da084b3Smrg # Remove `-o $object'. 3553da084b3Smrg IFS=" " 3563da084b3Smrg for arg 3573da084b3Smrg do 3583da084b3Smrg case $arg in 3593da084b3Smrg -o) 3603da084b3Smrg shift 3613da084b3Smrg ;; 3623da084b3Smrg $object) 3633da084b3Smrg shift 3643da084b3Smrg ;; 3653da084b3Smrg *) 3663da084b3Smrg set fnord "$@" "$arg" 3673da084b3Smrg shift # fnord 3683da084b3Smrg shift # $arg 3693da084b3Smrg ;; 3703da084b3Smrg esac 3713da084b3Smrg done 3723da084b3Smrg 3733da084b3Smrg test -z "$dashmflag" && dashmflag=-M 3743da084b3Smrg # Require at least two characters before searching for `:' 3753da084b3Smrg # in the target name. This is to cope with DOS-style filenames: 3763da084b3Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 3773da084b3Smrg "$@" $dashmflag | 3783da084b3Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 3793da084b3Smrg rm -f "$depfile" 3803da084b3Smrg cat < "$tmpdepfile" > "$depfile" 3813da084b3Smrg tr ' ' ' 3823da084b3Smrg' < "$tmpdepfile" | \ 3833da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 3843da084b3Smrg## correctly. Breaking it into two sed invocations is a workaround. 3853da084b3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 3863da084b3Smrg rm -f "$tmpdepfile" 3873da084b3Smrg ;; 3883da084b3Smrg 3893da084b3SmrgdashXmstdout) 3903da084b3Smrg # This case only exists to satisfy depend.m4. It is never actually 3913da084b3Smrg # run, as this mode is specially recognized in the preamble. 3923da084b3Smrg exit 1 3933da084b3Smrg ;; 3943da084b3Smrg 3953da084b3Smrgmakedepend) 3963da084b3Smrg "$@" || exit $? 3973da084b3Smrg # Remove any Libtool call 3983da084b3Smrg if test "$libtool" = yes; then 3993da084b3Smrg while test $1 != '--mode=compile'; do 4003da084b3Smrg shift 4013da084b3Smrg done 4023da084b3Smrg shift 4033da084b3Smrg fi 4043da084b3Smrg # X makedepend 4053da084b3Smrg shift 4063da084b3Smrg cleared=no 4073da084b3Smrg for arg in "$@"; do 4083da084b3Smrg case $cleared in 4093da084b3Smrg no) 4103da084b3Smrg set ""; shift 4113da084b3Smrg cleared=yes ;; 4123da084b3Smrg esac 4133da084b3Smrg case "$arg" in 4143da084b3Smrg -D*|-I*) 4153da084b3Smrg set fnord "$@" "$arg"; shift ;; 4163da084b3Smrg # Strip any option that makedepend may not understand. Remove 4173da084b3Smrg # the object too, otherwise makedepend will parse it as a source file. 4183da084b3Smrg -*|$object) 4193da084b3Smrg ;; 4203da084b3Smrg *) 4213da084b3Smrg set fnord "$@" "$arg"; shift ;; 4223da084b3Smrg esac 4233da084b3Smrg done 4243da084b3Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4253da084b3Smrg touch "$tmpdepfile" 4263da084b3Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4273da084b3Smrg rm -f "$depfile" 4283da084b3Smrg cat < "$tmpdepfile" > "$depfile" 4293da084b3Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4303da084b3Smrg' | \ 4313da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4323da084b3Smrg## correctly. Breaking it into two sed invocations is a workaround. 4333da084b3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4343da084b3Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4353da084b3Smrg ;; 4363da084b3Smrg 4373da084b3Smrgcpp) 4383da084b3Smrg # Important note: in order to support this mode, a compiler *must* 4393da084b3Smrg # always write the preprocessed file to stdout. 4403da084b3Smrg "$@" || exit $? 4413da084b3Smrg 4423da084b3Smrg # Remove the call to Libtool. 4433da084b3Smrg if test "$libtool" = yes; then 4443da084b3Smrg while test $1 != '--mode=compile'; do 4453da084b3Smrg shift 4463da084b3Smrg done 4473da084b3Smrg shift 4483da084b3Smrg fi 4493da084b3Smrg 4503da084b3Smrg # Remove `-o $object'. 4513da084b3Smrg IFS=" " 4523da084b3Smrg for arg 4533da084b3Smrg do 4543da084b3Smrg case $arg in 4553da084b3Smrg -o) 4563da084b3Smrg shift 4573da084b3Smrg ;; 4583da084b3Smrg $object) 4593da084b3Smrg shift 4603da084b3Smrg ;; 4613da084b3Smrg *) 4623da084b3Smrg set fnord "$@" "$arg" 4633da084b3Smrg shift # fnord 4643da084b3Smrg shift # $arg 4653da084b3Smrg ;; 4663da084b3Smrg esac 4673da084b3Smrg done 4683da084b3Smrg 4693da084b3Smrg "$@" -E | 4703da084b3Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 4713da084b3Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 4723da084b3Smrg sed '$ s: \\$::' > "$tmpdepfile" 4733da084b3Smrg rm -f "$depfile" 4743da084b3Smrg echo "$object : \\" > "$depfile" 4753da084b3Smrg cat < "$tmpdepfile" >> "$depfile" 4763da084b3Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 4773da084b3Smrg rm -f "$tmpdepfile" 4783da084b3Smrg ;; 4793da084b3Smrg 4803da084b3Smrgmsvisualcpp) 4813da084b3Smrg # Important note: in order to support this mode, a compiler *must* 4823da084b3Smrg # always write the preprocessed file to stdout, regardless of -o, 4833da084b3Smrg # because we must use -o when running libtool. 4843da084b3Smrg "$@" || exit $? 4853da084b3Smrg IFS=" " 4863da084b3Smrg for arg 4873da084b3Smrg do 4883da084b3Smrg case "$arg" in 4893da084b3Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 4903da084b3Smrg set fnord "$@" 4913da084b3Smrg shift 4923da084b3Smrg shift 4933da084b3Smrg ;; 4943da084b3Smrg *) 4953da084b3Smrg set fnord "$@" "$arg" 4963da084b3Smrg shift 4973da084b3Smrg shift 4983da084b3Smrg ;; 4993da084b3Smrg esac 5003da084b3Smrg done 5013da084b3Smrg "$@" -E | 5023da084b3Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5033da084b3Smrg rm -f "$depfile" 5043da084b3Smrg echo "$object : \\" > "$depfile" 5053da084b3Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5063da084b3Smrg echo " " >> "$depfile" 5073da084b3Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5083da084b3Smrg rm -f "$tmpdepfile" 5093da084b3Smrg ;; 5103da084b3Smrg 5113da084b3Smrgnone) 5123da084b3Smrg exec "$@" 5133da084b3Smrg ;; 5143da084b3Smrg 5153da084b3Smrg*) 5163da084b3Smrg echo "Unknown depmode $depmode" 1>&2 5173da084b3Smrg exit 1 5183da084b3Smrg ;; 5193da084b3Smrgesac 5203da084b3Smrg 5213da084b3Smrgexit 0 5223da084b3Smrg 5233da084b3Smrg# Local Variables: 5243da084b3Smrg# mode: shell-script 5253da084b3Smrg# sh-indentation: 2 5263da084b3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5273da084b3Smrg# time-stamp-start: "scriptversion=" 5283da084b3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5293da084b3Smrg# time-stamp-end: "$" 5303da084b3Smrg# End: 531