depcomp revision 2c393a42
12c393a42Smrg#! /bin/sh 22c393a42Smrg# depcomp - compile a program generating dependencies as side-effects 32c393a42Smrg 42c393a42Smrgscriptversion=2005-07-09.11 52c393a42Smrg 62c393a42Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 72c393a42Smrg 82c393a42Smrg# This program is free software; you can redistribute it and/or modify 92c393a42Smrg# it under the terms of the GNU General Public License as published by 102c393a42Smrg# the Free Software Foundation; either version 2, or (at your option) 112c393a42Smrg# any later version. 122c393a42Smrg 132c393a42Smrg# This program is distributed in the hope that it will be useful, 142c393a42Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 152c393a42Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 162c393a42Smrg# GNU General Public License for more details. 172c393a42Smrg 182c393a42Smrg# You should have received a copy of the GNU General Public License 192c393a42Smrg# along with this program; if not, write to the Free Software 202c393a42Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 212c393a42Smrg# 02110-1301, USA. 222c393a42Smrg 232c393a42Smrg# As a special exception to the GNU General Public License, if you 242c393a42Smrg# distribute this file as part of a program that contains a 252c393a42Smrg# configuration script generated by Autoconf, you may include it under 262c393a42Smrg# the same distribution terms that you use for the rest of that program. 272c393a42Smrg 282c393a42Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 292c393a42Smrg 302c393a42Smrgcase $1 in 312c393a42Smrg '') 322c393a42Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 332c393a42Smrg exit 1; 342c393a42Smrg ;; 352c393a42Smrg -h | --h*) 362c393a42Smrg cat <<\EOF 372c393a42SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 382c393a42Smrg 392c393a42SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 402c393a42Smrgas side-effects. 412c393a42Smrg 422c393a42SmrgEnvironment variables: 432c393a42Smrg depmode Dependency tracking mode. 442c393a42Smrg source Source file read by `PROGRAMS ARGS'. 452c393a42Smrg object Object file output by `PROGRAMS ARGS'. 462c393a42Smrg DEPDIR directory where to store dependencies. 472c393a42Smrg depfile Dependency file to output. 482c393a42Smrg tmpdepfile Temporary file to use when outputing dependencies. 492c393a42Smrg libtool Whether libtool is used (yes/no). 502c393a42Smrg 512c393a42SmrgReport bugs to <bug-automake@gnu.org>. 522c393a42SmrgEOF 532c393a42Smrg exit $? 542c393a42Smrg ;; 552c393a42Smrg -v | --v*) 562c393a42Smrg echo "depcomp $scriptversion" 572c393a42Smrg exit $? 582c393a42Smrg ;; 592c393a42Smrgesac 602c393a42Smrg 612c393a42Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 622c393a42Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 632c393a42Smrg exit 1 642c393a42Smrgfi 652c393a42Smrg 662c393a42Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 672c393a42Smrgdepfile=${depfile-`echo "$object" | 682c393a42Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 692c393a42Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 702c393a42Smrg 712c393a42Smrgrm -f "$tmpdepfile" 722c393a42Smrg 732c393a42Smrg# Some modes work just like other modes, but use different flags. We 742c393a42Smrg# parameterize here, but still list the modes in the big case below, 752c393a42Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 762c393a42Smrg# here, because this file can only contain one case statement. 772c393a42Smrgif test "$depmode" = hp; then 782c393a42Smrg # HP compiler uses -M and no extra arg. 792c393a42Smrg gccflag=-M 802c393a42Smrg depmode=gcc 812c393a42Smrgfi 822c393a42Smrg 832c393a42Smrgif test "$depmode" = dashXmstdout; then 842c393a42Smrg # This is just like dashmstdout with a different argument. 852c393a42Smrg dashmflag=-xM 862c393a42Smrg depmode=dashmstdout 872c393a42Smrgfi 882c393a42Smrg 892c393a42Smrgcase "$depmode" in 902c393a42Smrggcc3) 912c393a42Smrg## gcc 3 implements dependency tracking that does exactly what 922c393a42Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 932c393a42Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 942c393a42Smrg "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 952c393a42Smrg stat=$? 962c393a42Smrg if test $stat -eq 0; then : 972c393a42Smrg else 982c393a42Smrg rm -f "$tmpdepfile" 992c393a42Smrg exit $stat 1002c393a42Smrg fi 1012c393a42Smrg mv "$tmpdepfile" "$depfile" 1022c393a42Smrg ;; 1032c393a42Smrg 1042c393a42Smrggcc) 1052c393a42Smrg## There are various ways to get dependency output from gcc. Here's 1062c393a42Smrg## why we pick this rather obscure method: 1072c393a42Smrg## - Don't want to use -MD because we'd like the dependencies to end 1082c393a42Smrg## up in a subdir. Having to rename by hand is ugly. 1092c393a42Smrg## (We might end up doing this anyway to support other compilers.) 1102c393a42Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1112c393a42Smrg## -MM, not -M (despite what the docs say). 1122c393a42Smrg## - Using -M directly means running the compiler twice (even worse 1132c393a42Smrg## than renaming). 1142c393a42Smrg if test -z "$gccflag"; then 1152c393a42Smrg gccflag=-MD, 1162c393a42Smrg fi 1172c393a42Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1182c393a42Smrg stat=$? 1192c393a42Smrg if test $stat -eq 0; then : 1202c393a42Smrg else 1212c393a42Smrg rm -f "$tmpdepfile" 1222c393a42Smrg exit $stat 1232c393a42Smrg fi 1242c393a42Smrg rm -f "$depfile" 1252c393a42Smrg echo "$object : \\" > "$depfile" 1262c393a42Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1272c393a42Smrg## The second -e expression handles DOS-style file names with drive letters. 1282c393a42Smrg sed -e 's/^[^:]*: / /' \ 1292c393a42Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1302c393a42Smrg## This next piece of magic avoids the `deleted header file' problem. 1312c393a42Smrg## The problem is that when a header file which appears in a .P file 1322c393a42Smrg## is deleted, the dependency causes make to die (because there is 1332c393a42Smrg## typically no way to rebuild the header). We avoid this by adding 1342c393a42Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1352c393a42Smrg## this for us directly. 1362c393a42Smrg tr ' ' ' 1372c393a42Smrg' < "$tmpdepfile" | 1382c393a42Smrg## Some versions of gcc put a space before the `:'. On the theory 1392c393a42Smrg## that the space means something, we add a space to the output as 1402c393a42Smrg## well. 1412c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1422c393a42Smrg## correctly. Breaking it into two sed invocations is a workaround. 1432c393a42Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1442c393a42Smrg rm -f "$tmpdepfile" 1452c393a42Smrg ;; 1462c393a42Smrg 1472c393a42Smrghp) 1482c393a42Smrg # This case exists only to let depend.m4 do its work. It works by 1492c393a42Smrg # looking at the text of this script. This case will never be run, 1502c393a42Smrg # since it is checked for above. 1512c393a42Smrg exit 1 1522c393a42Smrg ;; 1532c393a42Smrg 1542c393a42Smrgsgi) 1552c393a42Smrg if test "$libtool" = yes; then 1562c393a42Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1572c393a42Smrg else 1582c393a42Smrg "$@" -MDupdate "$tmpdepfile" 1592c393a42Smrg fi 1602c393a42Smrg stat=$? 1612c393a42Smrg if test $stat -eq 0; then : 1622c393a42Smrg else 1632c393a42Smrg rm -f "$tmpdepfile" 1642c393a42Smrg exit $stat 1652c393a42Smrg fi 1662c393a42Smrg rm -f "$depfile" 1672c393a42Smrg 1682c393a42Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1692c393a42Smrg echo "$object : \\" > "$depfile" 1702c393a42Smrg 1712c393a42Smrg # Clip off the initial element (the dependent). Don't try to be 1722c393a42Smrg # clever and replace this with sed code, as IRIX sed won't handle 1732c393a42Smrg # lines with more than a fixed number of characters (4096 in 1742c393a42Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1752c393a42Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1762c393a42Smrg # dependency line. 1772c393a42Smrg tr ' ' ' 1782c393a42Smrg' < "$tmpdepfile" \ 1792c393a42Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1802c393a42Smrg tr ' 1812c393a42Smrg' ' ' >> $depfile 1822c393a42Smrg echo >> $depfile 1832c393a42Smrg 1842c393a42Smrg # The second pass generates a dummy entry for each header file. 1852c393a42Smrg tr ' ' ' 1862c393a42Smrg' < "$tmpdepfile" \ 1872c393a42Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 1882c393a42Smrg >> $depfile 1892c393a42Smrg else 1902c393a42Smrg # The sourcefile does not contain any dependencies, so just 1912c393a42Smrg # store a dummy comment line, to avoid errors with the Makefile 1922c393a42Smrg # "include basename.Plo" scheme. 1932c393a42Smrg echo "#dummy" > "$depfile" 1942c393a42Smrg fi 1952c393a42Smrg rm -f "$tmpdepfile" 1962c393a42Smrg ;; 1972c393a42Smrg 1982c393a42Smrgaix) 1992c393a42Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2002c393a42Smrg # in a .u file. In older versions, this file always lives in the 2012c393a42Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2022c393a42Smrg # start of each line; $object doesn't have directory information. 2032c393a42Smrg # Version 6 uses the directory in both cases. 2042c393a42Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2052c393a42Smrg tmpdepfile="$stripped.u" 2062c393a42Smrg if test "$libtool" = yes; then 2072c393a42Smrg "$@" -Wc,-M 2082c393a42Smrg else 2092c393a42Smrg "$@" -M 2102c393a42Smrg fi 2112c393a42Smrg stat=$? 2122c393a42Smrg 2132c393a42Smrg if test -f "$tmpdepfile"; then : 2142c393a42Smrg else 2152c393a42Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2162c393a42Smrg tmpdepfile="$stripped.u" 2172c393a42Smrg fi 2182c393a42Smrg 2192c393a42Smrg if test $stat -eq 0; then : 2202c393a42Smrg else 2212c393a42Smrg rm -f "$tmpdepfile" 2222c393a42Smrg exit $stat 2232c393a42Smrg fi 2242c393a42Smrg 2252c393a42Smrg if test -f "$tmpdepfile"; then 2262c393a42Smrg outname="$stripped.o" 2272c393a42Smrg # Each line is of the form `foo.o: dependent.h'. 2282c393a42Smrg # Do two passes, one to just change these to 2292c393a42Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2302c393a42Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2312c393a42Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2322c393a42Smrg else 2332c393a42Smrg # The sourcefile does not contain any dependencies, so just 2342c393a42Smrg # store a dummy comment line, to avoid errors with the Makefile 2352c393a42Smrg # "include basename.Plo" scheme. 2362c393a42Smrg echo "#dummy" > "$depfile" 2372c393a42Smrg fi 2382c393a42Smrg rm -f "$tmpdepfile" 2392c393a42Smrg ;; 2402c393a42Smrg 2412c393a42Smrgicc) 2422c393a42Smrg # Intel's C compiler understands `-MD -MF file'. However on 2432c393a42Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2442c393a42Smrg # ICC 7.0 will fill foo.d with something like 2452c393a42Smrg # foo.o: sub/foo.c 2462c393a42Smrg # foo.o: sub/foo.h 2472c393a42Smrg # which is wrong. We want: 2482c393a42Smrg # sub/foo.o: sub/foo.c 2492c393a42Smrg # sub/foo.o: sub/foo.h 2502c393a42Smrg # sub/foo.c: 2512c393a42Smrg # sub/foo.h: 2522c393a42Smrg # ICC 7.1 will output 2532c393a42Smrg # foo.o: sub/foo.c sub/foo.h 2542c393a42Smrg # and will wrap long lines using \ : 2552c393a42Smrg # foo.o: sub/foo.c ... \ 2562c393a42Smrg # sub/foo.h ... \ 2572c393a42Smrg # ... 2582c393a42Smrg 2592c393a42Smrg "$@" -MD -MF "$tmpdepfile" 2602c393a42Smrg stat=$? 2612c393a42Smrg if test $stat -eq 0; then : 2622c393a42Smrg else 2632c393a42Smrg rm -f "$tmpdepfile" 2642c393a42Smrg exit $stat 2652c393a42Smrg fi 2662c393a42Smrg rm -f "$depfile" 2672c393a42Smrg # Each line is of the form `foo.o: dependent.h', 2682c393a42Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2692c393a42Smrg # Do two passes, one to just change these to 2702c393a42Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2712c393a42Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2722c393a42Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2732c393a42Smrg # correctly. Breaking it into two sed invocations is a workaround. 2742c393a42Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2752c393a42Smrg sed -e 's/$/ :/' >> "$depfile" 2762c393a42Smrg rm -f "$tmpdepfile" 2772c393a42Smrg ;; 2782c393a42Smrg 2792c393a42Smrgtru64) 2802c393a42Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 2812c393a42Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 2822c393a42Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 2832c393a42Smrg # dependencies in `foo.d' instead, so we check for that too. 2842c393a42Smrg # Subdirectories are respected. 2852c393a42Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2862c393a42Smrg test "x$dir" = "x$object" && dir= 2872c393a42Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2882c393a42Smrg 2892c393a42Smrg if test "$libtool" = yes; then 2902c393a42Smrg # With Tru64 cc, shared objects can also be used to make a 2912c393a42Smrg # static library. This mecanism is used in libtool 1.4 series to 2922c393a42Smrg # handle both shared and static libraries in a single compilation. 2932c393a42Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 2942c393a42Smrg # 2952c393a42Smrg # With libtool 1.5 this exception was removed, and libtool now 2962c393a42Smrg # generates 2 separate objects for the 2 libraries. These two 2972c393a42Smrg # compilations output dependencies in in $dir.libs/$base.o.d and 2982c393a42Smrg # in $dir$base.o.d. We have to check for both files, because 2992c393a42Smrg # one of the two compilations can be disabled. We should prefer 3002c393a42Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3012c393a42Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3022c393a42Smrg # the former would cause a distcleancheck panic. 3032c393a42Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3042c393a42Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3052c393a42Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3062c393a42Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3072c393a42Smrg "$@" -Wc,-MD 3082c393a42Smrg else 3092c393a42Smrg tmpdepfile1=$dir$base.o.d 3102c393a42Smrg tmpdepfile2=$dir$base.d 3112c393a42Smrg tmpdepfile3=$dir$base.d 3122c393a42Smrg tmpdepfile4=$dir$base.d 3132c393a42Smrg "$@" -MD 3142c393a42Smrg fi 3152c393a42Smrg 3162c393a42Smrg stat=$? 3172c393a42Smrg if test $stat -eq 0; then : 3182c393a42Smrg else 3192c393a42Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3202c393a42Smrg exit $stat 3212c393a42Smrg fi 3222c393a42Smrg 3232c393a42Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3242c393a42Smrg do 3252c393a42Smrg test -f "$tmpdepfile" && break 3262c393a42Smrg done 3272c393a42Smrg if test -f "$tmpdepfile"; then 3282c393a42Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3292c393a42Smrg # That's a tab and a space in the []. 3302c393a42Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3312c393a42Smrg else 3322c393a42Smrg echo "#dummy" > "$depfile" 3332c393a42Smrg fi 3342c393a42Smrg rm -f "$tmpdepfile" 3352c393a42Smrg ;; 3362c393a42Smrg 3372c393a42Smrg#nosideeffect) 3382c393a42Smrg # This comment above is used by automake to tell side-effect 3392c393a42Smrg # dependency tracking mechanisms from slower ones. 3402c393a42Smrg 3412c393a42Smrgdashmstdout) 3422c393a42Smrg # Important note: in order to support this mode, a compiler *must* 3432c393a42Smrg # always write the preprocessed file to stdout, regardless of -o. 3442c393a42Smrg "$@" || exit $? 3452c393a42Smrg 3462c393a42Smrg # Remove the call to Libtool. 3472c393a42Smrg if test "$libtool" = yes; then 3482c393a42Smrg while test $1 != '--mode=compile'; do 3492c393a42Smrg shift 3502c393a42Smrg done 3512c393a42Smrg shift 3522c393a42Smrg fi 3532c393a42Smrg 3542c393a42Smrg # Remove `-o $object'. 3552c393a42Smrg IFS=" " 3562c393a42Smrg for arg 3572c393a42Smrg do 3582c393a42Smrg case $arg in 3592c393a42Smrg -o) 3602c393a42Smrg shift 3612c393a42Smrg ;; 3622c393a42Smrg $object) 3632c393a42Smrg shift 3642c393a42Smrg ;; 3652c393a42Smrg *) 3662c393a42Smrg set fnord "$@" "$arg" 3672c393a42Smrg shift # fnord 3682c393a42Smrg shift # $arg 3692c393a42Smrg ;; 3702c393a42Smrg esac 3712c393a42Smrg done 3722c393a42Smrg 3732c393a42Smrg test -z "$dashmflag" && dashmflag=-M 3742c393a42Smrg # Require at least two characters before searching for `:' 3752c393a42Smrg # in the target name. This is to cope with DOS-style filenames: 3762c393a42Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 3772c393a42Smrg "$@" $dashmflag | 3782c393a42Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 3792c393a42Smrg rm -f "$depfile" 3802c393a42Smrg cat < "$tmpdepfile" > "$depfile" 3812c393a42Smrg tr ' ' ' 3822c393a42Smrg' < "$tmpdepfile" | \ 3832c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 3842c393a42Smrg## correctly. Breaking it into two sed invocations is a workaround. 3852c393a42Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 3862c393a42Smrg rm -f "$tmpdepfile" 3872c393a42Smrg ;; 3882c393a42Smrg 3892c393a42SmrgdashXmstdout) 3902c393a42Smrg # This case only exists to satisfy depend.m4. It is never actually 3912c393a42Smrg # run, as this mode is specially recognized in the preamble. 3922c393a42Smrg exit 1 3932c393a42Smrg ;; 3942c393a42Smrg 3952c393a42Smrgmakedepend) 3962c393a42Smrg "$@" || exit $? 3972c393a42Smrg # Remove any Libtool call 3982c393a42Smrg if test "$libtool" = yes; then 3992c393a42Smrg while test $1 != '--mode=compile'; do 4002c393a42Smrg shift 4012c393a42Smrg done 4022c393a42Smrg shift 4032c393a42Smrg fi 4042c393a42Smrg # X makedepend 4052c393a42Smrg shift 4062c393a42Smrg cleared=no 4072c393a42Smrg for arg in "$@"; do 4082c393a42Smrg case $cleared in 4092c393a42Smrg no) 4102c393a42Smrg set ""; shift 4112c393a42Smrg cleared=yes ;; 4122c393a42Smrg esac 4132c393a42Smrg case "$arg" in 4142c393a42Smrg -D*|-I*) 4152c393a42Smrg set fnord "$@" "$arg"; shift ;; 4162c393a42Smrg # Strip any option that makedepend may not understand. Remove 4172c393a42Smrg # the object too, otherwise makedepend will parse it as a source file. 4182c393a42Smrg -*|$object) 4192c393a42Smrg ;; 4202c393a42Smrg *) 4212c393a42Smrg set fnord "$@" "$arg"; shift ;; 4222c393a42Smrg esac 4232c393a42Smrg done 4242c393a42Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4252c393a42Smrg touch "$tmpdepfile" 4262c393a42Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4272c393a42Smrg rm -f "$depfile" 4282c393a42Smrg cat < "$tmpdepfile" > "$depfile" 4292c393a42Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4302c393a42Smrg' | \ 4312c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4322c393a42Smrg## correctly. Breaking it into two sed invocations is a workaround. 4332c393a42Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4342c393a42Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4352c393a42Smrg ;; 4362c393a42Smrg 4372c393a42Smrgcpp) 4382c393a42Smrg # Important note: in order to support this mode, a compiler *must* 4392c393a42Smrg # always write the preprocessed file to stdout. 4402c393a42Smrg "$@" || exit $? 4412c393a42Smrg 4422c393a42Smrg # Remove the call to Libtool. 4432c393a42Smrg if test "$libtool" = yes; then 4442c393a42Smrg while test $1 != '--mode=compile'; do 4452c393a42Smrg shift 4462c393a42Smrg done 4472c393a42Smrg shift 4482c393a42Smrg fi 4492c393a42Smrg 4502c393a42Smrg # Remove `-o $object'. 4512c393a42Smrg IFS=" " 4522c393a42Smrg for arg 4532c393a42Smrg do 4542c393a42Smrg case $arg in 4552c393a42Smrg -o) 4562c393a42Smrg shift 4572c393a42Smrg ;; 4582c393a42Smrg $object) 4592c393a42Smrg shift 4602c393a42Smrg ;; 4612c393a42Smrg *) 4622c393a42Smrg set fnord "$@" "$arg" 4632c393a42Smrg shift # fnord 4642c393a42Smrg shift # $arg 4652c393a42Smrg ;; 4662c393a42Smrg esac 4672c393a42Smrg done 4682c393a42Smrg 4692c393a42Smrg "$@" -E | 4702c393a42Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 4712c393a42Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 4722c393a42Smrg sed '$ s: \\$::' > "$tmpdepfile" 4732c393a42Smrg rm -f "$depfile" 4742c393a42Smrg echo "$object : \\" > "$depfile" 4752c393a42Smrg cat < "$tmpdepfile" >> "$depfile" 4762c393a42Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 4772c393a42Smrg rm -f "$tmpdepfile" 4782c393a42Smrg ;; 4792c393a42Smrg 4802c393a42Smrgmsvisualcpp) 4812c393a42Smrg # Important note: in order to support this mode, a compiler *must* 4822c393a42Smrg # always write the preprocessed file to stdout, regardless of -o, 4832c393a42Smrg # because we must use -o when running libtool. 4842c393a42Smrg "$@" || exit $? 4852c393a42Smrg IFS=" " 4862c393a42Smrg for arg 4872c393a42Smrg do 4882c393a42Smrg case "$arg" in 4892c393a42Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 4902c393a42Smrg set fnord "$@" 4912c393a42Smrg shift 4922c393a42Smrg shift 4932c393a42Smrg ;; 4942c393a42Smrg *) 4952c393a42Smrg set fnord "$@" "$arg" 4962c393a42Smrg shift 4972c393a42Smrg shift 4982c393a42Smrg ;; 4992c393a42Smrg esac 5002c393a42Smrg done 5012c393a42Smrg "$@" -E | 5022c393a42Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5032c393a42Smrg rm -f "$depfile" 5042c393a42Smrg echo "$object : \\" > "$depfile" 5052c393a42Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5062c393a42Smrg echo " " >> "$depfile" 5072c393a42Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5082c393a42Smrg rm -f "$tmpdepfile" 5092c393a42Smrg ;; 5102c393a42Smrg 5112c393a42Smrgnone) 5122c393a42Smrg exec "$@" 5132c393a42Smrg ;; 5142c393a42Smrg 5152c393a42Smrg*) 5162c393a42Smrg echo "Unknown depmode $depmode" 1>&2 5172c393a42Smrg exit 1 5182c393a42Smrg ;; 5192c393a42Smrgesac 5202c393a42Smrg 5212c393a42Smrgexit 0 5222c393a42Smrg 5232c393a42Smrg# Local Variables: 5242c393a42Smrg# mode: shell-script 5252c393a42Smrg# sh-indentation: 2 5262c393a42Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5272c393a42Smrg# time-stamp-start: "scriptversion=" 5282c393a42Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5292c393a42Smrg# time-stamp-end: "$" 5302c393a42Smrg# End: 531