depcomp revision 0fa2845d
10fa2845dSmrg#! /bin/sh 20fa2845dSmrg# depcomp - compile a program generating dependencies as side-effects 30fa2845dSmrg 40fa2845dSmrgscriptversion=2006-10-15.18 50fa2845dSmrg 60fa2845dSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 70fa2845dSmrg# Foundation, Inc. 80fa2845dSmrg 90fa2845dSmrg# This program is free software; you can redistribute it and/or modify 100fa2845dSmrg# it under the terms of the GNU General Public License as published by 110fa2845dSmrg# the Free Software Foundation; either version 2, or (at your option) 120fa2845dSmrg# any later version. 130fa2845dSmrg 140fa2845dSmrg# This program is distributed in the hope that it will be useful, 150fa2845dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 160fa2845dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 170fa2845dSmrg# GNU General Public License for more details. 180fa2845dSmrg 190fa2845dSmrg# You should have received a copy of the GNU General Public License 200fa2845dSmrg# along with this program; if not, write to the Free Software 210fa2845dSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 220fa2845dSmrg# 02110-1301, USA. 230fa2845dSmrg 240fa2845dSmrg# As a special exception to the GNU General Public License, if you 250fa2845dSmrg# distribute this file as part of a program that contains a 260fa2845dSmrg# configuration script generated by Autoconf, you may include it under 270fa2845dSmrg# the same distribution terms that you use for the rest of that program. 280fa2845dSmrg 290fa2845dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 300fa2845dSmrg 310fa2845dSmrgcase $1 in 320fa2845dSmrg '') 330fa2845dSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 340fa2845dSmrg exit 1; 350fa2845dSmrg ;; 360fa2845dSmrg -h | --h*) 370fa2845dSmrg cat <<\EOF 380fa2845dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 390fa2845dSmrg 400fa2845dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 410fa2845dSmrgas side-effects. 420fa2845dSmrg 430fa2845dSmrgEnvironment variables: 440fa2845dSmrg depmode Dependency tracking mode. 450fa2845dSmrg source Source file read by `PROGRAMS ARGS'. 460fa2845dSmrg object Object file output by `PROGRAMS ARGS'. 470fa2845dSmrg DEPDIR directory where to store dependencies. 480fa2845dSmrg depfile Dependency file to output. 490fa2845dSmrg tmpdepfile Temporary file to use when outputing dependencies. 500fa2845dSmrg libtool Whether libtool is used (yes/no). 510fa2845dSmrg 520fa2845dSmrgReport bugs to <bug-automake@gnu.org>. 530fa2845dSmrgEOF 540fa2845dSmrg exit $? 550fa2845dSmrg ;; 560fa2845dSmrg -v | --v*) 570fa2845dSmrg echo "depcomp $scriptversion" 580fa2845dSmrg exit $? 590fa2845dSmrg ;; 600fa2845dSmrgesac 610fa2845dSmrg 620fa2845dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 630fa2845dSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 640fa2845dSmrg exit 1 650fa2845dSmrgfi 660fa2845dSmrg 670fa2845dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 680fa2845dSmrgdepfile=${depfile-`echo "$object" | 690fa2845dSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 700fa2845dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 710fa2845dSmrg 720fa2845dSmrgrm -f "$tmpdepfile" 730fa2845dSmrg 740fa2845dSmrg# Some modes work just like other modes, but use different flags. We 750fa2845dSmrg# parameterize here, but still list the modes in the big case below, 760fa2845dSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 770fa2845dSmrg# here, because this file can only contain one case statement. 780fa2845dSmrgif test "$depmode" = hp; then 790fa2845dSmrg # HP compiler uses -M and no extra arg. 800fa2845dSmrg gccflag=-M 810fa2845dSmrg depmode=gcc 820fa2845dSmrgfi 830fa2845dSmrg 840fa2845dSmrgif test "$depmode" = dashXmstdout; then 850fa2845dSmrg # This is just like dashmstdout with a different argument. 860fa2845dSmrg dashmflag=-xM 870fa2845dSmrg depmode=dashmstdout 880fa2845dSmrgfi 890fa2845dSmrg 900fa2845dSmrgcase "$depmode" in 910fa2845dSmrggcc3) 920fa2845dSmrg## gcc 3 implements dependency tracking that does exactly what 930fa2845dSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 940fa2845dSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 950fa2845dSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 960fa2845dSmrg## the command line argument order; so add the flags where they 970fa2845dSmrg## appear in depend2.am. Note that the slowdown incurred here 980fa2845dSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 990fa2845dSmrg for arg 1000fa2845dSmrg do 1010fa2845dSmrg case $arg in 1020fa2845dSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1030fa2845dSmrg *) set fnord "$@" "$arg" ;; 1040fa2845dSmrg esac 1050fa2845dSmrg shift # fnord 1060fa2845dSmrg shift # $arg 1070fa2845dSmrg done 1080fa2845dSmrg "$@" 1090fa2845dSmrg stat=$? 1100fa2845dSmrg if test $stat -eq 0; then : 1110fa2845dSmrg else 1120fa2845dSmrg rm -f "$tmpdepfile" 1130fa2845dSmrg exit $stat 1140fa2845dSmrg fi 1150fa2845dSmrg mv "$tmpdepfile" "$depfile" 1160fa2845dSmrg ;; 1170fa2845dSmrg 1180fa2845dSmrggcc) 1190fa2845dSmrg## There are various ways to get dependency output from gcc. Here's 1200fa2845dSmrg## why we pick this rather obscure method: 1210fa2845dSmrg## - Don't want to use -MD because we'd like the dependencies to end 1220fa2845dSmrg## up in a subdir. Having to rename by hand is ugly. 1230fa2845dSmrg## (We might end up doing this anyway to support other compilers.) 1240fa2845dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1250fa2845dSmrg## -MM, not -M (despite what the docs say). 1260fa2845dSmrg## - Using -M directly means running the compiler twice (even worse 1270fa2845dSmrg## than renaming). 1280fa2845dSmrg if test -z "$gccflag"; then 1290fa2845dSmrg gccflag=-MD, 1300fa2845dSmrg fi 1310fa2845dSmrg "$@" -Wp,"$gccflag$tmpdepfile" 1320fa2845dSmrg stat=$? 1330fa2845dSmrg if test $stat -eq 0; then : 1340fa2845dSmrg else 1350fa2845dSmrg rm -f "$tmpdepfile" 1360fa2845dSmrg exit $stat 1370fa2845dSmrg fi 1380fa2845dSmrg rm -f "$depfile" 1390fa2845dSmrg echo "$object : \\" > "$depfile" 1400fa2845dSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1410fa2845dSmrg## The second -e expression handles DOS-style file names with drive letters. 1420fa2845dSmrg sed -e 's/^[^:]*: / /' \ 1430fa2845dSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1440fa2845dSmrg## This next piece of magic avoids the `deleted header file' problem. 1450fa2845dSmrg## The problem is that when a header file which appears in a .P file 1460fa2845dSmrg## is deleted, the dependency causes make to die (because there is 1470fa2845dSmrg## typically no way to rebuild the header). We avoid this by adding 1480fa2845dSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 1490fa2845dSmrg## this for us directly. 1500fa2845dSmrg tr ' ' ' 1510fa2845dSmrg' < "$tmpdepfile" | 1520fa2845dSmrg## Some versions of gcc put a space before the `:'. On the theory 1530fa2845dSmrg## that the space means something, we add a space to the output as 1540fa2845dSmrg## well. 1550fa2845dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 1560fa2845dSmrg## correctly. Breaking it into two sed invocations is a workaround. 1570fa2845dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1580fa2845dSmrg rm -f "$tmpdepfile" 1590fa2845dSmrg ;; 1600fa2845dSmrg 1610fa2845dSmrghp) 1620fa2845dSmrg # This case exists only to let depend.m4 do its work. It works by 1630fa2845dSmrg # looking at the text of this script. This case will never be run, 1640fa2845dSmrg # since it is checked for above. 1650fa2845dSmrg exit 1 1660fa2845dSmrg ;; 1670fa2845dSmrg 1680fa2845dSmrgsgi) 1690fa2845dSmrg if test "$libtool" = yes; then 1700fa2845dSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1710fa2845dSmrg else 1720fa2845dSmrg "$@" -MDupdate "$tmpdepfile" 1730fa2845dSmrg fi 1740fa2845dSmrg stat=$? 1750fa2845dSmrg if test $stat -eq 0; then : 1760fa2845dSmrg else 1770fa2845dSmrg rm -f "$tmpdepfile" 1780fa2845dSmrg exit $stat 1790fa2845dSmrg fi 1800fa2845dSmrg rm -f "$depfile" 1810fa2845dSmrg 1820fa2845dSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1830fa2845dSmrg echo "$object : \\" > "$depfile" 1840fa2845dSmrg 1850fa2845dSmrg # Clip off the initial element (the dependent). Don't try to be 1860fa2845dSmrg # clever and replace this with sed code, as IRIX sed won't handle 1870fa2845dSmrg # lines with more than a fixed number of characters (4096 in 1880fa2845dSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1890fa2845dSmrg # the IRIX cc adds comments like `#:fec' to the end of the 1900fa2845dSmrg # dependency line. 1910fa2845dSmrg tr ' ' ' 1920fa2845dSmrg' < "$tmpdepfile" \ 1930fa2845dSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1940fa2845dSmrg tr ' 1950fa2845dSmrg' ' ' >> $depfile 1960fa2845dSmrg echo >> $depfile 1970fa2845dSmrg 1980fa2845dSmrg # The second pass generates a dummy entry for each header file. 1990fa2845dSmrg tr ' ' ' 2000fa2845dSmrg' < "$tmpdepfile" \ 2010fa2845dSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2020fa2845dSmrg >> $depfile 2030fa2845dSmrg else 2040fa2845dSmrg # The sourcefile does not contain any dependencies, so just 2050fa2845dSmrg # store a dummy comment line, to avoid errors with the Makefile 2060fa2845dSmrg # "include basename.Plo" scheme. 2070fa2845dSmrg echo "#dummy" > "$depfile" 2080fa2845dSmrg fi 2090fa2845dSmrg rm -f "$tmpdepfile" 2100fa2845dSmrg ;; 2110fa2845dSmrg 2120fa2845dSmrgaix) 2130fa2845dSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2140fa2845dSmrg # in a .u file. In older versions, this file always lives in the 2150fa2845dSmrg # current directory. Also, the AIX compiler puts `$object:' at the 2160fa2845dSmrg # start of each line; $object doesn't have directory information. 2170fa2845dSmrg # Version 6 uses the directory in both cases. 2180fa2845dSmrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2190fa2845dSmrg tmpdepfile="$stripped.u" 2200fa2845dSmrg if test "$libtool" = yes; then 2210fa2845dSmrg "$@" -Wc,-M 2220fa2845dSmrg else 2230fa2845dSmrg "$@" -M 2240fa2845dSmrg fi 2250fa2845dSmrg stat=$? 2260fa2845dSmrg 2270fa2845dSmrg if test -f "$tmpdepfile"; then : 2280fa2845dSmrg else 2290fa2845dSmrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2300fa2845dSmrg tmpdepfile="$stripped.u" 2310fa2845dSmrg fi 2320fa2845dSmrg 2330fa2845dSmrg if test $stat -eq 0; then : 2340fa2845dSmrg else 2350fa2845dSmrg rm -f "$tmpdepfile" 2360fa2845dSmrg exit $stat 2370fa2845dSmrg fi 2380fa2845dSmrg 2390fa2845dSmrg if test -f "$tmpdepfile"; then 2400fa2845dSmrg outname="$stripped.o" 2410fa2845dSmrg # Each line is of the form `foo.o: dependent.h'. 2420fa2845dSmrg # Do two passes, one to just change these to 2430fa2845dSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2440fa2845dSmrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2450fa2845dSmrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2460fa2845dSmrg else 2470fa2845dSmrg # The sourcefile does not contain any dependencies, so just 2480fa2845dSmrg # store a dummy comment line, to avoid errors with the Makefile 2490fa2845dSmrg # "include basename.Plo" scheme. 2500fa2845dSmrg echo "#dummy" > "$depfile" 2510fa2845dSmrg fi 2520fa2845dSmrg rm -f "$tmpdepfile" 2530fa2845dSmrg ;; 2540fa2845dSmrg 2550fa2845dSmrgicc) 2560fa2845dSmrg # Intel's C compiler understands `-MD -MF file'. However on 2570fa2845dSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2580fa2845dSmrg # ICC 7.0 will fill foo.d with something like 2590fa2845dSmrg # foo.o: sub/foo.c 2600fa2845dSmrg # foo.o: sub/foo.h 2610fa2845dSmrg # which is wrong. We want: 2620fa2845dSmrg # sub/foo.o: sub/foo.c 2630fa2845dSmrg # sub/foo.o: sub/foo.h 2640fa2845dSmrg # sub/foo.c: 2650fa2845dSmrg # sub/foo.h: 2660fa2845dSmrg # ICC 7.1 will output 2670fa2845dSmrg # foo.o: sub/foo.c sub/foo.h 2680fa2845dSmrg # and will wrap long lines using \ : 2690fa2845dSmrg # foo.o: sub/foo.c ... \ 2700fa2845dSmrg # sub/foo.h ... \ 2710fa2845dSmrg # ... 2720fa2845dSmrg 2730fa2845dSmrg "$@" -MD -MF "$tmpdepfile" 2740fa2845dSmrg stat=$? 2750fa2845dSmrg if test $stat -eq 0; then : 2760fa2845dSmrg else 2770fa2845dSmrg rm -f "$tmpdepfile" 2780fa2845dSmrg exit $stat 2790fa2845dSmrg fi 2800fa2845dSmrg rm -f "$depfile" 2810fa2845dSmrg # Each line is of the form `foo.o: dependent.h', 2820fa2845dSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2830fa2845dSmrg # Do two passes, one to just change these to 2840fa2845dSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2850fa2845dSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2860fa2845dSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 2870fa2845dSmrg # correctly. Breaking it into two sed invocations is a workaround. 2880fa2845dSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2890fa2845dSmrg sed -e 's/$/ :/' >> "$depfile" 2900fa2845dSmrg rm -f "$tmpdepfile" 2910fa2845dSmrg ;; 2920fa2845dSmrg 2930fa2845dSmrghp2) 2940fa2845dSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2950fa2845dSmrg # compilers, which have integrated preprocessors. The correct option 2960fa2845dSmrg # to use with these is +Maked; it writes dependencies to a file named 2970fa2845dSmrg # 'foo.d', which lands next to the object file, wherever that 2980fa2845dSmrg # happens to be. 2990fa2845dSmrg # Much of this is similar to the tru64 case; see comments there. 3000fa2845dSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3010fa2845dSmrg test "x$dir" = "x$object" && dir= 3020fa2845dSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3030fa2845dSmrg if test "$libtool" = yes; then 3040fa2845dSmrg tmpdepfile1=$dir$base.d 3050fa2845dSmrg tmpdepfile2=$dir.libs/$base.d 3060fa2845dSmrg "$@" -Wc,+Maked 3070fa2845dSmrg else 3080fa2845dSmrg tmpdepfile1=$dir$base.d 3090fa2845dSmrg tmpdepfile2=$dir$base.d 3100fa2845dSmrg "$@" +Maked 3110fa2845dSmrg fi 3120fa2845dSmrg stat=$? 3130fa2845dSmrg if test $stat -eq 0; then : 3140fa2845dSmrg else 3150fa2845dSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3160fa2845dSmrg exit $stat 3170fa2845dSmrg fi 3180fa2845dSmrg 3190fa2845dSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3200fa2845dSmrg do 3210fa2845dSmrg test -f "$tmpdepfile" && break 3220fa2845dSmrg done 3230fa2845dSmrg if test -f "$tmpdepfile"; then 3240fa2845dSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3250fa2845dSmrg # Add `dependent.h:' lines. 3260fa2845dSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3270fa2845dSmrg else 3280fa2845dSmrg echo "#dummy" > "$depfile" 3290fa2845dSmrg fi 3300fa2845dSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3310fa2845dSmrg ;; 3320fa2845dSmrg 3330fa2845dSmrgtru64) 3340fa2845dSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 3350fa2845dSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3360fa2845dSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3370fa2845dSmrg # dependencies in `foo.d' instead, so we check for that too. 3380fa2845dSmrg # Subdirectories are respected. 3390fa2845dSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3400fa2845dSmrg test "x$dir" = "x$object" && dir= 3410fa2845dSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3420fa2845dSmrg 3430fa2845dSmrg if test "$libtool" = yes; then 3440fa2845dSmrg # With Tru64 cc, shared objects can also be used to make a 3450fa2845dSmrg # static library. This mechanism is used in libtool 1.4 series to 3460fa2845dSmrg # handle both shared and static libraries in a single compilation. 3470fa2845dSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3480fa2845dSmrg # 3490fa2845dSmrg # With libtool 1.5 this exception was removed, and libtool now 3500fa2845dSmrg # generates 2 separate objects for the 2 libraries. These two 3510fa2845dSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3520fa2845dSmrg # in $dir$base.o.d. We have to check for both files, because 3530fa2845dSmrg # one of the two compilations can be disabled. We should prefer 3540fa2845dSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3550fa2845dSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3560fa2845dSmrg # the former would cause a distcleancheck panic. 3570fa2845dSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3580fa2845dSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3590fa2845dSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3600fa2845dSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3610fa2845dSmrg "$@" -Wc,-MD 3620fa2845dSmrg else 3630fa2845dSmrg tmpdepfile1=$dir$base.o.d 3640fa2845dSmrg tmpdepfile2=$dir$base.d 3650fa2845dSmrg tmpdepfile3=$dir$base.d 3660fa2845dSmrg tmpdepfile4=$dir$base.d 3670fa2845dSmrg "$@" -MD 3680fa2845dSmrg fi 3690fa2845dSmrg 3700fa2845dSmrg stat=$? 3710fa2845dSmrg if test $stat -eq 0; then : 3720fa2845dSmrg else 3730fa2845dSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3740fa2845dSmrg exit $stat 3750fa2845dSmrg fi 3760fa2845dSmrg 3770fa2845dSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3780fa2845dSmrg do 3790fa2845dSmrg test -f "$tmpdepfile" && break 3800fa2845dSmrg done 3810fa2845dSmrg if test -f "$tmpdepfile"; then 3820fa2845dSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3830fa2845dSmrg # That's a tab and a space in the []. 3840fa2845dSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3850fa2845dSmrg else 3860fa2845dSmrg echo "#dummy" > "$depfile" 3870fa2845dSmrg fi 3880fa2845dSmrg rm -f "$tmpdepfile" 3890fa2845dSmrg ;; 3900fa2845dSmrg 3910fa2845dSmrg#nosideeffect) 3920fa2845dSmrg # This comment above is used by automake to tell side-effect 3930fa2845dSmrg # dependency tracking mechanisms from slower ones. 3940fa2845dSmrg 3950fa2845dSmrgdashmstdout) 3960fa2845dSmrg # Important note: in order to support this mode, a compiler *must* 3970fa2845dSmrg # always write the preprocessed file to stdout, regardless of -o. 3980fa2845dSmrg "$@" || exit $? 3990fa2845dSmrg 4000fa2845dSmrg # Remove the call to Libtool. 4010fa2845dSmrg if test "$libtool" = yes; then 4020fa2845dSmrg while test $1 != '--mode=compile'; do 4030fa2845dSmrg shift 4040fa2845dSmrg done 4050fa2845dSmrg shift 4060fa2845dSmrg fi 4070fa2845dSmrg 4080fa2845dSmrg # Remove `-o $object'. 4090fa2845dSmrg IFS=" " 4100fa2845dSmrg for arg 4110fa2845dSmrg do 4120fa2845dSmrg case $arg in 4130fa2845dSmrg -o) 4140fa2845dSmrg shift 4150fa2845dSmrg ;; 4160fa2845dSmrg $object) 4170fa2845dSmrg shift 4180fa2845dSmrg ;; 4190fa2845dSmrg *) 4200fa2845dSmrg set fnord "$@" "$arg" 4210fa2845dSmrg shift # fnord 4220fa2845dSmrg shift # $arg 4230fa2845dSmrg ;; 4240fa2845dSmrg esac 4250fa2845dSmrg done 4260fa2845dSmrg 4270fa2845dSmrg test -z "$dashmflag" && dashmflag=-M 4280fa2845dSmrg # Require at least two characters before searching for `:' 4290fa2845dSmrg # in the target name. This is to cope with DOS-style filenames: 4300fa2845dSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4310fa2845dSmrg "$@" $dashmflag | 4320fa2845dSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4330fa2845dSmrg rm -f "$depfile" 4340fa2845dSmrg cat < "$tmpdepfile" > "$depfile" 4350fa2845dSmrg tr ' ' ' 4360fa2845dSmrg' < "$tmpdepfile" | \ 4370fa2845dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4380fa2845dSmrg## correctly. Breaking it into two sed invocations is a workaround. 4390fa2845dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4400fa2845dSmrg rm -f "$tmpdepfile" 4410fa2845dSmrg ;; 4420fa2845dSmrg 4430fa2845dSmrgdashXmstdout) 4440fa2845dSmrg # This case only exists to satisfy depend.m4. It is never actually 4450fa2845dSmrg # run, as this mode is specially recognized in the preamble. 4460fa2845dSmrg exit 1 4470fa2845dSmrg ;; 4480fa2845dSmrg 4490fa2845dSmrgmakedepend) 4500fa2845dSmrg "$@" || exit $? 4510fa2845dSmrg # Remove any Libtool call 4520fa2845dSmrg if test "$libtool" = yes; then 4530fa2845dSmrg while test $1 != '--mode=compile'; do 4540fa2845dSmrg shift 4550fa2845dSmrg done 4560fa2845dSmrg shift 4570fa2845dSmrg fi 4580fa2845dSmrg # X makedepend 4590fa2845dSmrg shift 4600fa2845dSmrg cleared=no 4610fa2845dSmrg for arg in "$@"; do 4620fa2845dSmrg case $cleared in 4630fa2845dSmrg no) 4640fa2845dSmrg set ""; shift 4650fa2845dSmrg cleared=yes ;; 4660fa2845dSmrg esac 4670fa2845dSmrg case "$arg" in 4680fa2845dSmrg -D*|-I*) 4690fa2845dSmrg set fnord "$@" "$arg"; shift ;; 4700fa2845dSmrg # Strip any option that makedepend may not understand. Remove 4710fa2845dSmrg # the object too, otherwise makedepend will parse it as a source file. 4720fa2845dSmrg -*|$object) 4730fa2845dSmrg ;; 4740fa2845dSmrg *) 4750fa2845dSmrg set fnord "$@" "$arg"; shift ;; 4760fa2845dSmrg esac 4770fa2845dSmrg done 4780fa2845dSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4790fa2845dSmrg touch "$tmpdepfile" 4800fa2845dSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4810fa2845dSmrg rm -f "$depfile" 4820fa2845dSmrg cat < "$tmpdepfile" > "$depfile" 4830fa2845dSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4840fa2845dSmrg' | \ 4850fa2845dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4860fa2845dSmrg## correctly. Breaking it into two sed invocations is a workaround. 4870fa2845dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4880fa2845dSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4890fa2845dSmrg ;; 4900fa2845dSmrg 4910fa2845dSmrgcpp) 4920fa2845dSmrg # Important note: in order to support this mode, a compiler *must* 4930fa2845dSmrg # always write the preprocessed file to stdout. 4940fa2845dSmrg "$@" || exit $? 4950fa2845dSmrg 4960fa2845dSmrg # Remove the call to Libtool. 4970fa2845dSmrg if test "$libtool" = yes; then 4980fa2845dSmrg while test $1 != '--mode=compile'; do 4990fa2845dSmrg shift 5000fa2845dSmrg done 5010fa2845dSmrg shift 5020fa2845dSmrg fi 5030fa2845dSmrg 5040fa2845dSmrg # Remove `-o $object'. 5050fa2845dSmrg IFS=" " 5060fa2845dSmrg for arg 5070fa2845dSmrg do 5080fa2845dSmrg case $arg in 5090fa2845dSmrg -o) 5100fa2845dSmrg shift 5110fa2845dSmrg ;; 5120fa2845dSmrg $object) 5130fa2845dSmrg shift 5140fa2845dSmrg ;; 5150fa2845dSmrg *) 5160fa2845dSmrg set fnord "$@" "$arg" 5170fa2845dSmrg shift # fnord 5180fa2845dSmrg shift # $arg 5190fa2845dSmrg ;; 5200fa2845dSmrg esac 5210fa2845dSmrg done 5220fa2845dSmrg 5230fa2845dSmrg "$@" -E | 5240fa2845dSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5250fa2845dSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5260fa2845dSmrg sed '$ s: \\$::' > "$tmpdepfile" 5270fa2845dSmrg rm -f "$depfile" 5280fa2845dSmrg echo "$object : \\" > "$depfile" 5290fa2845dSmrg cat < "$tmpdepfile" >> "$depfile" 5300fa2845dSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5310fa2845dSmrg rm -f "$tmpdepfile" 5320fa2845dSmrg ;; 5330fa2845dSmrg 5340fa2845dSmrgmsvisualcpp) 5350fa2845dSmrg # Important note: in order to support this mode, a compiler *must* 5360fa2845dSmrg # always write the preprocessed file to stdout, regardless of -o, 5370fa2845dSmrg # because we must use -o when running libtool. 5380fa2845dSmrg "$@" || exit $? 5390fa2845dSmrg IFS=" " 5400fa2845dSmrg for arg 5410fa2845dSmrg do 5420fa2845dSmrg case "$arg" in 5430fa2845dSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5440fa2845dSmrg set fnord "$@" 5450fa2845dSmrg shift 5460fa2845dSmrg shift 5470fa2845dSmrg ;; 5480fa2845dSmrg *) 5490fa2845dSmrg set fnord "$@" "$arg" 5500fa2845dSmrg shift 5510fa2845dSmrg shift 5520fa2845dSmrg ;; 5530fa2845dSmrg esac 5540fa2845dSmrg done 5550fa2845dSmrg "$@" -E | 5560fa2845dSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5570fa2845dSmrg rm -f "$depfile" 5580fa2845dSmrg echo "$object : \\" > "$depfile" 5590fa2845dSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5600fa2845dSmrg echo " " >> "$depfile" 5610fa2845dSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5620fa2845dSmrg rm -f "$tmpdepfile" 5630fa2845dSmrg ;; 5640fa2845dSmrg 5650fa2845dSmrgnone) 5660fa2845dSmrg exec "$@" 5670fa2845dSmrg ;; 5680fa2845dSmrg 5690fa2845dSmrg*) 5700fa2845dSmrg echo "Unknown depmode $depmode" 1>&2 5710fa2845dSmrg exit 1 5720fa2845dSmrg ;; 5730fa2845dSmrgesac 5740fa2845dSmrg 5750fa2845dSmrgexit 0 5760fa2845dSmrg 5770fa2845dSmrg# Local Variables: 5780fa2845dSmrg# mode: shell-script 5790fa2845dSmrg# sh-indentation: 2 5800fa2845dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5810fa2845dSmrg# time-stamp-start: "scriptversion=" 5820fa2845dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5830fa2845dSmrg# time-stamp-end: "$" 5840fa2845dSmrg# End: 585