depcomp revision 7914d74b
17914d74bSmrg#! /bin/sh 27914d74bSmrg# depcomp - compile a program generating dependencies as side-effects 37914d74bSmrg 47914d74bSmrgscriptversion=2006-10-15.18 57914d74bSmrg 67914d74bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 77914d74bSmrg# Foundation, Inc. 87914d74bSmrg 97914d74bSmrg# This program is free software; you can redistribute it and/or modify 107914d74bSmrg# it under the terms of the GNU General Public License as published by 117914d74bSmrg# the Free Software Foundation; either version 2, or (at your option) 127914d74bSmrg# any later version. 137914d74bSmrg 147914d74bSmrg# This program is distributed in the hope that it will be useful, 157914d74bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 167914d74bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177914d74bSmrg# GNU General Public License for more details. 187914d74bSmrg 197914d74bSmrg# You should have received a copy of the GNU General Public License 207914d74bSmrg# along with this program; if not, write to the Free Software 217914d74bSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 227914d74bSmrg# 02110-1301, USA. 237914d74bSmrg 247914d74bSmrg# As a special exception to the GNU General Public License, if you 257914d74bSmrg# distribute this file as part of a program that contains a 267914d74bSmrg# configuration script generated by Autoconf, you may include it under 277914d74bSmrg# the same distribution terms that you use for the rest of that program. 287914d74bSmrg 297914d74bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 307914d74bSmrg 317914d74bSmrgcase $1 in 327914d74bSmrg '') 337914d74bSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 347914d74bSmrg exit 1; 357914d74bSmrg ;; 367914d74bSmrg -h | --h*) 377914d74bSmrg cat <<\EOF 387914d74bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 397914d74bSmrg 407914d74bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 417914d74bSmrgas side-effects. 427914d74bSmrg 437914d74bSmrgEnvironment variables: 447914d74bSmrg depmode Dependency tracking mode. 457914d74bSmrg source Source file read by `PROGRAMS ARGS'. 467914d74bSmrg object Object file output by `PROGRAMS ARGS'. 477914d74bSmrg DEPDIR directory where to store dependencies. 487914d74bSmrg depfile Dependency file to output. 497914d74bSmrg tmpdepfile Temporary file to use when outputing dependencies. 507914d74bSmrg libtool Whether libtool is used (yes/no). 517914d74bSmrg 527914d74bSmrgReport bugs to <bug-automake@gnu.org>. 537914d74bSmrgEOF 547914d74bSmrg exit $? 557914d74bSmrg ;; 567914d74bSmrg -v | --v*) 577914d74bSmrg echo "depcomp $scriptversion" 587914d74bSmrg exit $? 597914d74bSmrg ;; 607914d74bSmrgesac 617914d74bSmrg 627914d74bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 637914d74bSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 647914d74bSmrg exit 1 657914d74bSmrgfi 667914d74bSmrg 677914d74bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 687914d74bSmrgdepfile=${depfile-`echo "$object" | 697914d74bSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 707914d74bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 717914d74bSmrg 727914d74bSmrgrm -f "$tmpdepfile" 737914d74bSmrg 747914d74bSmrg# Some modes work just like other modes, but use different flags. We 757914d74bSmrg# parameterize here, but still list the modes in the big case below, 767914d74bSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 777914d74bSmrg# here, because this file can only contain one case statement. 787914d74bSmrgif test "$depmode" = hp; then 797914d74bSmrg # HP compiler uses -M and no extra arg. 807914d74bSmrg gccflag=-M 817914d74bSmrg depmode=gcc 827914d74bSmrgfi 837914d74bSmrg 847914d74bSmrgif test "$depmode" = dashXmstdout; then 857914d74bSmrg # This is just like dashmstdout with a different argument. 867914d74bSmrg dashmflag=-xM 877914d74bSmrg depmode=dashmstdout 887914d74bSmrgfi 897914d74bSmrg 907914d74bSmrgcase "$depmode" in 917914d74bSmrggcc3) 927914d74bSmrg## gcc 3 implements dependency tracking that does exactly what 937914d74bSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 947914d74bSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 957914d74bSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 967914d74bSmrg## the command line argument order; so add the flags where they 977914d74bSmrg## appear in depend2.am. Note that the slowdown incurred here 987914d74bSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 997914d74bSmrg for arg 1007914d74bSmrg do 1017914d74bSmrg case $arg in 1027914d74bSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1037914d74bSmrg *) set fnord "$@" "$arg" ;; 1047914d74bSmrg esac 1057914d74bSmrg shift # fnord 1067914d74bSmrg shift # $arg 1077914d74bSmrg done 1087914d74bSmrg "$@" 1097914d74bSmrg stat=$? 1107914d74bSmrg if test $stat -eq 0; then : 1117914d74bSmrg else 1127914d74bSmrg rm -f "$tmpdepfile" 1137914d74bSmrg exit $stat 1147914d74bSmrg fi 1157914d74bSmrg mv "$tmpdepfile" "$depfile" 1167914d74bSmrg ;; 1177914d74bSmrg 1187914d74bSmrggcc) 1197914d74bSmrg## There are various ways to get dependency output from gcc. Here's 1207914d74bSmrg## why we pick this rather obscure method: 1217914d74bSmrg## - Don't want to use -MD because we'd like the dependencies to end 1227914d74bSmrg## up in a subdir. Having to rename by hand is ugly. 1237914d74bSmrg## (We might end up doing this anyway to support other compilers.) 1247914d74bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1257914d74bSmrg## -MM, not -M (despite what the docs say). 1267914d74bSmrg## - Using -M directly means running the compiler twice (even worse 1277914d74bSmrg## than renaming). 1287914d74bSmrg if test -z "$gccflag"; then 1297914d74bSmrg gccflag=-MD, 1307914d74bSmrg fi 1317914d74bSmrg "$@" -Wp,"$gccflag$tmpdepfile" 1327914d74bSmrg stat=$? 1337914d74bSmrg if test $stat -eq 0; then : 1347914d74bSmrg else 1357914d74bSmrg rm -f "$tmpdepfile" 1367914d74bSmrg exit $stat 1377914d74bSmrg fi 1387914d74bSmrg rm -f "$depfile" 1397914d74bSmrg echo "$object : \\" > "$depfile" 1407914d74bSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1417914d74bSmrg## The second -e expression handles DOS-style file names with drive letters. 1427914d74bSmrg sed -e 's/^[^:]*: / /' \ 1437914d74bSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1447914d74bSmrg## This next piece of magic avoids the `deleted header file' problem. 1457914d74bSmrg## The problem is that when a header file which appears in a .P file 1467914d74bSmrg## is deleted, the dependency causes make to die (because there is 1477914d74bSmrg## typically no way to rebuild the header). We avoid this by adding 1487914d74bSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 1497914d74bSmrg## this for us directly. 1507914d74bSmrg tr ' ' ' 1517914d74bSmrg' < "$tmpdepfile" | 1527914d74bSmrg## Some versions of gcc put a space before the `:'. On the theory 1537914d74bSmrg## that the space means something, we add a space to the output as 1547914d74bSmrg## well. 1557914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 1567914d74bSmrg## correctly. Breaking it into two sed invocations is a workaround. 1577914d74bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1587914d74bSmrg rm -f "$tmpdepfile" 1597914d74bSmrg ;; 1607914d74bSmrg 1617914d74bSmrghp) 1627914d74bSmrg # This case exists only to let depend.m4 do its work. It works by 1637914d74bSmrg # looking at the text of this script. This case will never be run, 1647914d74bSmrg # since it is checked for above. 1657914d74bSmrg exit 1 1667914d74bSmrg ;; 1677914d74bSmrg 1687914d74bSmrgsgi) 1697914d74bSmrg if test "$libtool" = yes; then 1707914d74bSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1717914d74bSmrg else 1727914d74bSmrg "$@" -MDupdate "$tmpdepfile" 1737914d74bSmrg fi 1747914d74bSmrg stat=$? 1757914d74bSmrg if test $stat -eq 0; then : 1767914d74bSmrg else 1777914d74bSmrg rm -f "$tmpdepfile" 1787914d74bSmrg exit $stat 1797914d74bSmrg fi 1807914d74bSmrg rm -f "$depfile" 1817914d74bSmrg 1827914d74bSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1837914d74bSmrg echo "$object : \\" > "$depfile" 1847914d74bSmrg 1857914d74bSmrg # Clip off the initial element (the dependent). Don't try to be 1867914d74bSmrg # clever and replace this with sed code, as IRIX sed won't handle 1877914d74bSmrg # lines with more than a fixed number of characters (4096 in 1887914d74bSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1897914d74bSmrg # the IRIX cc adds comments like `#:fec' to the end of the 1907914d74bSmrg # dependency line. 1917914d74bSmrg tr ' ' ' 1927914d74bSmrg' < "$tmpdepfile" \ 1937914d74bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1947914d74bSmrg tr ' 1957914d74bSmrg' ' ' >> $depfile 1967914d74bSmrg echo >> $depfile 1977914d74bSmrg 1987914d74bSmrg # The second pass generates a dummy entry for each header file. 1997914d74bSmrg tr ' ' ' 2007914d74bSmrg' < "$tmpdepfile" \ 2017914d74bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2027914d74bSmrg >> $depfile 2037914d74bSmrg else 2047914d74bSmrg # The sourcefile does not contain any dependencies, so just 2057914d74bSmrg # store a dummy comment line, to avoid errors with the Makefile 2067914d74bSmrg # "include basename.Plo" scheme. 2077914d74bSmrg echo "#dummy" > "$depfile" 2087914d74bSmrg fi 2097914d74bSmrg rm -f "$tmpdepfile" 2107914d74bSmrg ;; 2117914d74bSmrg 2127914d74bSmrgaix) 2137914d74bSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2147914d74bSmrg # in a .u file. In older versions, this file always lives in the 2157914d74bSmrg # current directory. Also, the AIX compiler puts `$object:' at the 2167914d74bSmrg # start of each line; $object doesn't have directory information. 2177914d74bSmrg # Version 6 uses the directory in both cases. 2187914d74bSmrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2197914d74bSmrg tmpdepfile="$stripped.u" 2207914d74bSmrg if test "$libtool" = yes; then 2217914d74bSmrg "$@" -Wc,-M 2227914d74bSmrg else 2237914d74bSmrg "$@" -M 2247914d74bSmrg fi 2257914d74bSmrg stat=$? 2267914d74bSmrg 2277914d74bSmrg if test -f "$tmpdepfile"; then : 2287914d74bSmrg else 2297914d74bSmrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2307914d74bSmrg tmpdepfile="$stripped.u" 2317914d74bSmrg fi 2327914d74bSmrg 2337914d74bSmrg if test $stat -eq 0; then : 2347914d74bSmrg else 2357914d74bSmrg rm -f "$tmpdepfile" 2367914d74bSmrg exit $stat 2377914d74bSmrg fi 2387914d74bSmrg 2397914d74bSmrg if test -f "$tmpdepfile"; then 2407914d74bSmrg outname="$stripped.o" 2417914d74bSmrg # Each line is of the form `foo.o: dependent.h'. 2427914d74bSmrg # Do two passes, one to just change these to 2437914d74bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2447914d74bSmrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2457914d74bSmrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2467914d74bSmrg else 2477914d74bSmrg # The sourcefile does not contain any dependencies, so just 2487914d74bSmrg # store a dummy comment line, to avoid errors with the Makefile 2497914d74bSmrg # "include basename.Plo" scheme. 2507914d74bSmrg echo "#dummy" > "$depfile" 2517914d74bSmrg fi 2527914d74bSmrg rm -f "$tmpdepfile" 2537914d74bSmrg ;; 2547914d74bSmrg 2557914d74bSmrgicc) 2567914d74bSmrg # Intel's C compiler understands `-MD -MF file'. However on 2577914d74bSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2587914d74bSmrg # ICC 7.0 will fill foo.d with something like 2597914d74bSmrg # foo.o: sub/foo.c 2607914d74bSmrg # foo.o: sub/foo.h 2617914d74bSmrg # which is wrong. We want: 2627914d74bSmrg # sub/foo.o: sub/foo.c 2637914d74bSmrg # sub/foo.o: sub/foo.h 2647914d74bSmrg # sub/foo.c: 2657914d74bSmrg # sub/foo.h: 2667914d74bSmrg # ICC 7.1 will output 2677914d74bSmrg # foo.o: sub/foo.c sub/foo.h 2687914d74bSmrg # and will wrap long lines using \ : 2697914d74bSmrg # foo.o: sub/foo.c ... \ 2707914d74bSmrg # sub/foo.h ... \ 2717914d74bSmrg # ... 2727914d74bSmrg 2737914d74bSmrg "$@" -MD -MF "$tmpdepfile" 2747914d74bSmrg stat=$? 2757914d74bSmrg if test $stat -eq 0; then : 2767914d74bSmrg else 2777914d74bSmrg rm -f "$tmpdepfile" 2787914d74bSmrg exit $stat 2797914d74bSmrg fi 2807914d74bSmrg rm -f "$depfile" 2817914d74bSmrg # Each line is of the form `foo.o: dependent.h', 2827914d74bSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2837914d74bSmrg # Do two passes, one to just change these to 2847914d74bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2857914d74bSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2867914d74bSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 2877914d74bSmrg # correctly. Breaking it into two sed invocations is a workaround. 2887914d74bSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2897914d74bSmrg sed -e 's/$/ :/' >> "$depfile" 2907914d74bSmrg rm -f "$tmpdepfile" 2917914d74bSmrg ;; 2927914d74bSmrg 2937914d74bSmrghp2) 2947914d74bSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2957914d74bSmrg # compilers, which have integrated preprocessors. The correct option 2967914d74bSmrg # to use with these is +Maked; it writes dependencies to a file named 2977914d74bSmrg # 'foo.d', which lands next to the object file, wherever that 2987914d74bSmrg # happens to be. 2997914d74bSmrg # Much of this is similar to the tru64 case; see comments there. 3007914d74bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3017914d74bSmrg test "x$dir" = "x$object" && dir= 3027914d74bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3037914d74bSmrg if test "$libtool" = yes; then 3047914d74bSmrg tmpdepfile1=$dir$base.d 3057914d74bSmrg tmpdepfile2=$dir.libs/$base.d 3067914d74bSmrg "$@" -Wc,+Maked 3077914d74bSmrg else 3087914d74bSmrg tmpdepfile1=$dir$base.d 3097914d74bSmrg tmpdepfile2=$dir$base.d 3107914d74bSmrg "$@" +Maked 3117914d74bSmrg fi 3127914d74bSmrg stat=$? 3137914d74bSmrg if test $stat -eq 0; then : 3147914d74bSmrg else 3157914d74bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3167914d74bSmrg exit $stat 3177914d74bSmrg fi 3187914d74bSmrg 3197914d74bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3207914d74bSmrg do 3217914d74bSmrg test -f "$tmpdepfile" && break 3227914d74bSmrg done 3237914d74bSmrg if test -f "$tmpdepfile"; then 3247914d74bSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3257914d74bSmrg # Add `dependent.h:' lines. 3267914d74bSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3277914d74bSmrg else 3287914d74bSmrg echo "#dummy" > "$depfile" 3297914d74bSmrg fi 3307914d74bSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3317914d74bSmrg ;; 3327914d74bSmrg 3337914d74bSmrgtru64) 3347914d74bSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 3357914d74bSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3367914d74bSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3377914d74bSmrg # dependencies in `foo.d' instead, so we check for that too. 3387914d74bSmrg # Subdirectories are respected. 3397914d74bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3407914d74bSmrg test "x$dir" = "x$object" && dir= 3417914d74bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3427914d74bSmrg 3437914d74bSmrg if test "$libtool" = yes; then 3447914d74bSmrg # With Tru64 cc, shared objects can also be used to make a 3457914d74bSmrg # static library. This mechanism is used in libtool 1.4 series to 3467914d74bSmrg # handle both shared and static libraries in a single compilation. 3477914d74bSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3487914d74bSmrg # 3497914d74bSmrg # With libtool 1.5 this exception was removed, and libtool now 3507914d74bSmrg # generates 2 separate objects for the 2 libraries. These two 3517914d74bSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3527914d74bSmrg # in $dir$base.o.d. We have to check for both files, because 3537914d74bSmrg # one of the two compilations can be disabled. We should prefer 3547914d74bSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3557914d74bSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3567914d74bSmrg # the former would cause a distcleancheck panic. 3577914d74bSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3587914d74bSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3597914d74bSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3607914d74bSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3617914d74bSmrg "$@" -Wc,-MD 3627914d74bSmrg else 3637914d74bSmrg tmpdepfile1=$dir$base.o.d 3647914d74bSmrg tmpdepfile2=$dir$base.d 3657914d74bSmrg tmpdepfile3=$dir$base.d 3667914d74bSmrg tmpdepfile4=$dir$base.d 3677914d74bSmrg "$@" -MD 3687914d74bSmrg fi 3697914d74bSmrg 3707914d74bSmrg stat=$? 3717914d74bSmrg if test $stat -eq 0; then : 3727914d74bSmrg else 3737914d74bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3747914d74bSmrg exit $stat 3757914d74bSmrg fi 3767914d74bSmrg 3777914d74bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3787914d74bSmrg do 3797914d74bSmrg test -f "$tmpdepfile" && break 3807914d74bSmrg done 3817914d74bSmrg if test -f "$tmpdepfile"; then 3827914d74bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3837914d74bSmrg # That's a tab and a space in the []. 3847914d74bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3857914d74bSmrg else 3867914d74bSmrg echo "#dummy" > "$depfile" 3877914d74bSmrg fi 3887914d74bSmrg rm -f "$tmpdepfile" 3897914d74bSmrg ;; 3907914d74bSmrg 3917914d74bSmrg#nosideeffect) 3927914d74bSmrg # This comment above is used by automake to tell side-effect 3937914d74bSmrg # dependency tracking mechanisms from slower ones. 3947914d74bSmrg 3957914d74bSmrgdashmstdout) 3967914d74bSmrg # Important note: in order to support this mode, a compiler *must* 3977914d74bSmrg # always write the preprocessed file to stdout, regardless of -o. 3987914d74bSmrg "$@" || exit $? 3997914d74bSmrg 4007914d74bSmrg # Remove the call to Libtool. 4017914d74bSmrg if test "$libtool" = yes; then 4027914d74bSmrg while test $1 != '--mode=compile'; do 4037914d74bSmrg shift 4047914d74bSmrg done 4057914d74bSmrg shift 4067914d74bSmrg fi 4077914d74bSmrg 4087914d74bSmrg # Remove `-o $object'. 4097914d74bSmrg IFS=" " 4107914d74bSmrg for arg 4117914d74bSmrg do 4127914d74bSmrg case $arg in 4137914d74bSmrg -o) 4147914d74bSmrg shift 4157914d74bSmrg ;; 4167914d74bSmrg $object) 4177914d74bSmrg shift 4187914d74bSmrg ;; 4197914d74bSmrg *) 4207914d74bSmrg set fnord "$@" "$arg" 4217914d74bSmrg shift # fnord 4227914d74bSmrg shift # $arg 4237914d74bSmrg ;; 4247914d74bSmrg esac 4257914d74bSmrg done 4267914d74bSmrg 4277914d74bSmrg test -z "$dashmflag" && dashmflag=-M 4287914d74bSmrg # Require at least two characters before searching for `:' 4297914d74bSmrg # in the target name. This is to cope with DOS-style filenames: 4307914d74bSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4317914d74bSmrg "$@" $dashmflag | 4327914d74bSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4337914d74bSmrg rm -f "$depfile" 4347914d74bSmrg cat < "$tmpdepfile" > "$depfile" 4357914d74bSmrg tr ' ' ' 4367914d74bSmrg' < "$tmpdepfile" | \ 4377914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4387914d74bSmrg## correctly. Breaking it into two sed invocations is a workaround. 4397914d74bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4407914d74bSmrg rm -f "$tmpdepfile" 4417914d74bSmrg ;; 4427914d74bSmrg 4437914d74bSmrgdashXmstdout) 4447914d74bSmrg # This case only exists to satisfy depend.m4. It is never actually 4457914d74bSmrg # run, as this mode is specially recognized in the preamble. 4467914d74bSmrg exit 1 4477914d74bSmrg ;; 4487914d74bSmrg 4497914d74bSmrgmakedepend) 4507914d74bSmrg "$@" || exit $? 4517914d74bSmrg # Remove any Libtool call 4527914d74bSmrg if test "$libtool" = yes; then 4537914d74bSmrg while test $1 != '--mode=compile'; do 4547914d74bSmrg shift 4557914d74bSmrg done 4567914d74bSmrg shift 4577914d74bSmrg fi 4587914d74bSmrg # X makedepend 4597914d74bSmrg shift 4607914d74bSmrg cleared=no 4617914d74bSmrg for arg in "$@"; do 4627914d74bSmrg case $cleared in 4637914d74bSmrg no) 4647914d74bSmrg set ""; shift 4657914d74bSmrg cleared=yes ;; 4667914d74bSmrg esac 4677914d74bSmrg case "$arg" in 4687914d74bSmrg -D*|-I*) 4697914d74bSmrg set fnord "$@" "$arg"; shift ;; 4707914d74bSmrg # Strip any option that makedepend may not understand. Remove 4717914d74bSmrg # the object too, otherwise makedepend will parse it as a source file. 4727914d74bSmrg -*|$object) 4737914d74bSmrg ;; 4747914d74bSmrg *) 4757914d74bSmrg set fnord "$@" "$arg"; shift ;; 4767914d74bSmrg esac 4777914d74bSmrg done 4787914d74bSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4797914d74bSmrg touch "$tmpdepfile" 4807914d74bSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4817914d74bSmrg rm -f "$depfile" 4827914d74bSmrg cat < "$tmpdepfile" > "$depfile" 4837914d74bSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4847914d74bSmrg' | \ 4857914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4867914d74bSmrg## correctly. Breaking it into two sed invocations is a workaround. 4877914d74bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4887914d74bSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4897914d74bSmrg ;; 4907914d74bSmrg 4917914d74bSmrgcpp) 4927914d74bSmrg # Important note: in order to support this mode, a compiler *must* 4937914d74bSmrg # always write the preprocessed file to stdout. 4947914d74bSmrg "$@" || exit $? 4957914d74bSmrg 4967914d74bSmrg # Remove the call to Libtool. 4977914d74bSmrg if test "$libtool" = yes; then 4987914d74bSmrg while test $1 != '--mode=compile'; do 4997914d74bSmrg shift 5007914d74bSmrg done 5017914d74bSmrg shift 5027914d74bSmrg fi 5037914d74bSmrg 5047914d74bSmrg # Remove `-o $object'. 5057914d74bSmrg IFS=" " 5067914d74bSmrg for arg 5077914d74bSmrg do 5087914d74bSmrg case $arg in 5097914d74bSmrg -o) 5107914d74bSmrg shift 5117914d74bSmrg ;; 5127914d74bSmrg $object) 5137914d74bSmrg shift 5147914d74bSmrg ;; 5157914d74bSmrg *) 5167914d74bSmrg set fnord "$@" "$arg" 5177914d74bSmrg shift # fnord 5187914d74bSmrg shift # $arg 5197914d74bSmrg ;; 5207914d74bSmrg esac 5217914d74bSmrg done 5227914d74bSmrg 5237914d74bSmrg "$@" -E | 5247914d74bSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5257914d74bSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5267914d74bSmrg sed '$ s: \\$::' > "$tmpdepfile" 5277914d74bSmrg rm -f "$depfile" 5287914d74bSmrg echo "$object : \\" > "$depfile" 5297914d74bSmrg cat < "$tmpdepfile" >> "$depfile" 5307914d74bSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5317914d74bSmrg rm -f "$tmpdepfile" 5327914d74bSmrg ;; 5337914d74bSmrg 5347914d74bSmrgmsvisualcpp) 5357914d74bSmrg # Important note: in order to support this mode, a compiler *must* 5367914d74bSmrg # always write the preprocessed file to stdout, regardless of -o, 5377914d74bSmrg # because we must use -o when running libtool. 5387914d74bSmrg "$@" || exit $? 5397914d74bSmrg IFS=" " 5407914d74bSmrg for arg 5417914d74bSmrg do 5427914d74bSmrg case "$arg" in 5437914d74bSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5447914d74bSmrg set fnord "$@" 5457914d74bSmrg shift 5467914d74bSmrg shift 5477914d74bSmrg ;; 5487914d74bSmrg *) 5497914d74bSmrg set fnord "$@" "$arg" 5507914d74bSmrg shift 5517914d74bSmrg shift 5527914d74bSmrg ;; 5537914d74bSmrg esac 5547914d74bSmrg done 5557914d74bSmrg "$@" -E | 5567914d74bSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5577914d74bSmrg rm -f "$depfile" 5587914d74bSmrg echo "$object : \\" > "$depfile" 5597914d74bSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5607914d74bSmrg echo " " >> "$depfile" 5617914d74bSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5627914d74bSmrg rm -f "$tmpdepfile" 5637914d74bSmrg ;; 5647914d74bSmrg 5657914d74bSmrgnone) 5667914d74bSmrg exec "$@" 5677914d74bSmrg ;; 5687914d74bSmrg 5697914d74bSmrg*) 5707914d74bSmrg echo "Unknown depmode $depmode" 1>&2 5717914d74bSmrg exit 1 5727914d74bSmrg ;; 5737914d74bSmrgesac 5747914d74bSmrg 5757914d74bSmrgexit 0 5767914d74bSmrg 5777914d74bSmrg# Local Variables: 5787914d74bSmrg# mode: shell-script 5797914d74bSmrg# sh-indentation: 2 5807914d74bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5817914d74bSmrg# time-stamp-start: "scriptversion=" 5827914d74bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5837914d74bSmrg# time-stamp-end: "$" 5847914d74bSmrg# End: 585