depcomp revision e169010a
17914d74bSmrg#! /bin/sh 27914d74bSmrg# depcomp - compile a program generating dependencies as side-effects 37914d74bSmrg 4e169010aSmrgscriptversion=2007-03-29.01 57914d74bSmrg 6e169010aSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 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. 218e169010aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 219e169010aSmrg test "x$dir" = "x$object" && dir= 220e169010aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2217914d74bSmrg if test "$libtool" = yes; then 222e169010aSmrg tmpdepfile1=$dir$base.u 223e169010aSmrg tmpdepfile2=$base.u 224e169010aSmrg tmpdepfile3=$dir.libs/$base.u 2257914d74bSmrg "$@" -Wc,-M 2267914d74bSmrg else 227e169010aSmrg tmpdepfile1=$dir$base.u 228e169010aSmrg tmpdepfile2=$dir$base.u 229e169010aSmrg tmpdepfile3=$dir$base.u 2307914d74bSmrg "$@" -M 2317914d74bSmrg fi 2327914d74bSmrg stat=$? 2337914d74bSmrg 2347914d74bSmrg if test $stat -eq 0; then : 2357914d74bSmrg else 236e169010aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2377914d74bSmrg exit $stat 2387914d74bSmrg fi 2397914d74bSmrg 240e169010aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 241e169010aSmrg do 242e169010aSmrg test -f "$tmpdepfile" && break 243e169010aSmrg done 2447914d74bSmrg if test -f "$tmpdepfile"; then 2457914d74bSmrg # Each line is of the form `foo.o: dependent.h'. 2467914d74bSmrg # Do two passes, one to just change these to 2477914d74bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 248e169010aSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 249e169010aSmrg # That's a tab and a space in the []. 250e169010aSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2517914d74bSmrg else 2527914d74bSmrg # The sourcefile does not contain any dependencies, so just 2537914d74bSmrg # store a dummy comment line, to avoid errors with the Makefile 2547914d74bSmrg # "include basename.Plo" scheme. 2557914d74bSmrg echo "#dummy" > "$depfile" 2567914d74bSmrg fi 2577914d74bSmrg rm -f "$tmpdepfile" 2587914d74bSmrg ;; 2597914d74bSmrg 2607914d74bSmrgicc) 2617914d74bSmrg # Intel's C compiler understands `-MD -MF file'. However on 2627914d74bSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2637914d74bSmrg # ICC 7.0 will fill foo.d with something like 2647914d74bSmrg # foo.o: sub/foo.c 2657914d74bSmrg # foo.o: sub/foo.h 2667914d74bSmrg # which is wrong. We want: 2677914d74bSmrg # sub/foo.o: sub/foo.c 2687914d74bSmrg # sub/foo.o: sub/foo.h 2697914d74bSmrg # sub/foo.c: 2707914d74bSmrg # sub/foo.h: 2717914d74bSmrg # ICC 7.1 will output 2727914d74bSmrg # foo.o: sub/foo.c sub/foo.h 2737914d74bSmrg # and will wrap long lines using \ : 2747914d74bSmrg # foo.o: sub/foo.c ... \ 2757914d74bSmrg # sub/foo.h ... \ 2767914d74bSmrg # ... 2777914d74bSmrg 2787914d74bSmrg "$@" -MD -MF "$tmpdepfile" 2797914d74bSmrg stat=$? 2807914d74bSmrg if test $stat -eq 0; then : 2817914d74bSmrg else 2827914d74bSmrg rm -f "$tmpdepfile" 2837914d74bSmrg exit $stat 2847914d74bSmrg fi 2857914d74bSmrg rm -f "$depfile" 2867914d74bSmrg # Each line is of the form `foo.o: dependent.h', 2877914d74bSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2887914d74bSmrg # Do two passes, one to just change these to 2897914d74bSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2907914d74bSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2917914d74bSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 2927914d74bSmrg # correctly. Breaking it into two sed invocations is a workaround. 2937914d74bSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2947914d74bSmrg sed -e 's/$/ :/' >> "$depfile" 2957914d74bSmrg rm -f "$tmpdepfile" 2967914d74bSmrg ;; 2977914d74bSmrg 2987914d74bSmrghp2) 2997914d74bSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3007914d74bSmrg # compilers, which have integrated preprocessors. The correct option 3017914d74bSmrg # to use with these is +Maked; it writes dependencies to a file named 3027914d74bSmrg # 'foo.d', which lands next to the object file, wherever that 3037914d74bSmrg # happens to be. 3047914d74bSmrg # Much of this is similar to the tru64 case; see comments there. 3057914d74bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3067914d74bSmrg test "x$dir" = "x$object" && dir= 3077914d74bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3087914d74bSmrg if test "$libtool" = yes; then 3097914d74bSmrg tmpdepfile1=$dir$base.d 3107914d74bSmrg tmpdepfile2=$dir.libs/$base.d 3117914d74bSmrg "$@" -Wc,+Maked 3127914d74bSmrg else 3137914d74bSmrg tmpdepfile1=$dir$base.d 3147914d74bSmrg tmpdepfile2=$dir$base.d 3157914d74bSmrg "$@" +Maked 3167914d74bSmrg fi 3177914d74bSmrg stat=$? 3187914d74bSmrg if test $stat -eq 0; then : 3197914d74bSmrg else 3207914d74bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3217914d74bSmrg exit $stat 3227914d74bSmrg fi 3237914d74bSmrg 3247914d74bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3257914d74bSmrg do 3267914d74bSmrg test -f "$tmpdepfile" && break 3277914d74bSmrg done 3287914d74bSmrg if test -f "$tmpdepfile"; then 3297914d74bSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3307914d74bSmrg # Add `dependent.h:' lines. 3317914d74bSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3327914d74bSmrg else 3337914d74bSmrg echo "#dummy" > "$depfile" 3347914d74bSmrg fi 3357914d74bSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3367914d74bSmrg ;; 3377914d74bSmrg 3387914d74bSmrgtru64) 3397914d74bSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 3407914d74bSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3417914d74bSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3427914d74bSmrg # dependencies in `foo.d' instead, so we check for that too. 3437914d74bSmrg # Subdirectories are respected. 3447914d74bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3457914d74bSmrg test "x$dir" = "x$object" && dir= 3467914d74bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3477914d74bSmrg 3487914d74bSmrg if test "$libtool" = yes; then 3497914d74bSmrg # With Tru64 cc, shared objects can also be used to make a 3507914d74bSmrg # static library. This mechanism is used in libtool 1.4 series to 3517914d74bSmrg # handle both shared and static libraries in a single compilation. 3527914d74bSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3537914d74bSmrg # 3547914d74bSmrg # With libtool 1.5 this exception was removed, and libtool now 3557914d74bSmrg # generates 2 separate objects for the 2 libraries. These two 3567914d74bSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3577914d74bSmrg # in $dir$base.o.d. We have to check for both files, because 3587914d74bSmrg # one of the two compilations can be disabled. We should prefer 3597914d74bSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3607914d74bSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3617914d74bSmrg # the former would cause a distcleancheck panic. 3627914d74bSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3637914d74bSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3647914d74bSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3657914d74bSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3667914d74bSmrg "$@" -Wc,-MD 3677914d74bSmrg else 3687914d74bSmrg tmpdepfile1=$dir$base.o.d 3697914d74bSmrg tmpdepfile2=$dir$base.d 3707914d74bSmrg tmpdepfile3=$dir$base.d 3717914d74bSmrg tmpdepfile4=$dir$base.d 3727914d74bSmrg "$@" -MD 3737914d74bSmrg fi 3747914d74bSmrg 3757914d74bSmrg stat=$? 3767914d74bSmrg if test $stat -eq 0; then : 3777914d74bSmrg else 3787914d74bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3797914d74bSmrg exit $stat 3807914d74bSmrg fi 3817914d74bSmrg 3827914d74bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3837914d74bSmrg do 3847914d74bSmrg test -f "$tmpdepfile" && break 3857914d74bSmrg done 3867914d74bSmrg if test -f "$tmpdepfile"; then 3877914d74bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3887914d74bSmrg # That's a tab and a space in the []. 3897914d74bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3907914d74bSmrg else 3917914d74bSmrg echo "#dummy" > "$depfile" 3927914d74bSmrg fi 3937914d74bSmrg rm -f "$tmpdepfile" 3947914d74bSmrg ;; 3957914d74bSmrg 3967914d74bSmrg#nosideeffect) 3977914d74bSmrg # This comment above is used by automake to tell side-effect 3987914d74bSmrg # dependency tracking mechanisms from slower ones. 3997914d74bSmrg 4007914d74bSmrgdashmstdout) 4017914d74bSmrg # Important note: in order to support this mode, a compiler *must* 4027914d74bSmrg # always write the preprocessed file to stdout, regardless of -o. 4037914d74bSmrg "$@" || exit $? 4047914d74bSmrg 4057914d74bSmrg # Remove the call to Libtool. 4067914d74bSmrg if test "$libtool" = yes; then 4077914d74bSmrg while test $1 != '--mode=compile'; do 4087914d74bSmrg shift 4097914d74bSmrg done 4107914d74bSmrg shift 4117914d74bSmrg fi 4127914d74bSmrg 4137914d74bSmrg # Remove `-o $object'. 4147914d74bSmrg IFS=" " 4157914d74bSmrg for arg 4167914d74bSmrg do 4177914d74bSmrg case $arg in 4187914d74bSmrg -o) 4197914d74bSmrg shift 4207914d74bSmrg ;; 4217914d74bSmrg $object) 4227914d74bSmrg shift 4237914d74bSmrg ;; 4247914d74bSmrg *) 4257914d74bSmrg set fnord "$@" "$arg" 4267914d74bSmrg shift # fnord 4277914d74bSmrg shift # $arg 4287914d74bSmrg ;; 4297914d74bSmrg esac 4307914d74bSmrg done 4317914d74bSmrg 4327914d74bSmrg test -z "$dashmflag" && dashmflag=-M 4337914d74bSmrg # Require at least two characters before searching for `:' 4347914d74bSmrg # in the target name. This is to cope with DOS-style filenames: 4357914d74bSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4367914d74bSmrg "$@" $dashmflag | 4377914d74bSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4387914d74bSmrg rm -f "$depfile" 4397914d74bSmrg cat < "$tmpdepfile" > "$depfile" 4407914d74bSmrg tr ' ' ' 4417914d74bSmrg' < "$tmpdepfile" | \ 4427914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4437914d74bSmrg## correctly. Breaking it into two sed invocations is a workaround. 4447914d74bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4457914d74bSmrg rm -f "$tmpdepfile" 4467914d74bSmrg ;; 4477914d74bSmrg 4487914d74bSmrgdashXmstdout) 4497914d74bSmrg # This case only exists to satisfy depend.m4. It is never actually 4507914d74bSmrg # run, as this mode is specially recognized in the preamble. 4517914d74bSmrg exit 1 4527914d74bSmrg ;; 4537914d74bSmrg 4547914d74bSmrgmakedepend) 4557914d74bSmrg "$@" || exit $? 4567914d74bSmrg # Remove any Libtool call 4577914d74bSmrg if test "$libtool" = yes; then 4587914d74bSmrg while test $1 != '--mode=compile'; do 4597914d74bSmrg shift 4607914d74bSmrg done 4617914d74bSmrg shift 4627914d74bSmrg fi 4637914d74bSmrg # X makedepend 4647914d74bSmrg shift 4657914d74bSmrg cleared=no 4667914d74bSmrg for arg in "$@"; do 4677914d74bSmrg case $cleared in 4687914d74bSmrg no) 4697914d74bSmrg set ""; shift 4707914d74bSmrg cleared=yes ;; 4717914d74bSmrg esac 4727914d74bSmrg case "$arg" in 4737914d74bSmrg -D*|-I*) 4747914d74bSmrg set fnord "$@" "$arg"; shift ;; 4757914d74bSmrg # Strip any option that makedepend may not understand. Remove 4767914d74bSmrg # the object too, otherwise makedepend will parse it as a source file. 4777914d74bSmrg -*|$object) 4787914d74bSmrg ;; 4797914d74bSmrg *) 4807914d74bSmrg set fnord "$@" "$arg"; shift ;; 4817914d74bSmrg esac 4827914d74bSmrg done 4837914d74bSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4847914d74bSmrg touch "$tmpdepfile" 4857914d74bSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4867914d74bSmrg rm -f "$depfile" 4877914d74bSmrg cat < "$tmpdepfile" > "$depfile" 4887914d74bSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4897914d74bSmrg' | \ 4907914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4917914d74bSmrg## correctly. Breaking it into two sed invocations is a workaround. 4927914d74bSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4937914d74bSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4947914d74bSmrg ;; 4957914d74bSmrg 4967914d74bSmrgcpp) 4977914d74bSmrg # Important note: in order to support this mode, a compiler *must* 4987914d74bSmrg # always write the preprocessed file to stdout. 4997914d74bSmrg "$@" || exit $? 5007914d74bSmrg 5017914d74bSmrg # Remove the call to Libtool. 5027914d74bSmrg if test "$libtool" = yes; then 5037914d74bSmrg while test $1 != '--mode=compile'; do 5047914d74bSmrg shift 5057914d74bSmrg done 5067914d74bSmrg shift 5077914d74bSmrg fi 5087914d74bSmrg 5097914d74bSmrg # Remove `-o $object'. 5107914d74bSmrg IFS=" " 5117914d74bSmrg for arg 5127914d74bSmrg do 5137914d74bSmrg case $arg in 5147914d74bSmrg -o) 5157914d74bSmrg shift 5167914d74bSmrg ;; 5177914d74bSmrg $object) 5187914d74bSmrg shift 5197914d74bSmrg ;; 5207914d74bSmrg *) 5217914d74bSmrg set fnord "$@" "$arg" 5227914d74bSmrg shift # fnord 5237914d74bSmrg shift # $arg 5247914d74bSmrg ;; 5257914d74bSmrg esac 5267914d74bSmrg done 5277914d74bSmrg 5287914d74bSmrg "$@" -E | 5297914d74bSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5307914d74bSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5317914d74bSmrg sed '$ s: \\$::' > "$tmpdepfile" 5327914d74bSmrg rm -f "$depfile" 5337914d74bSmrg echo "$object : \\" > "$depfile" 5347914d74bSmrg cat < "$tmpdepfile" >> "$depfile" 5357914d74bSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5367914d74bSmrg rm -f "$tmpdepfile" 5377914d74bSmrg ;; 5387914d74bSmrg 5397914d74bSmrgmsvisualcpp) 5407914d74bSmrg # Important note: in order to support this mode, a compiler *must* 5417914d74bSmrg # always write the preprocessed file to stdout, regardless of -o, 5427914d74bSmrg # because we must use -o when running libtool. 5437914d74bSmrg "$@" || exit $? 5447914d74bSmrg IFS=" " 5457914d74bSmrg for arg 5467914d74bSmrg do 5477914d74bSmrg case "$arg" in 5487914d74bSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5497914d74bSmrg set fnord "$@" 5507914d74bSmrg shift 5517914d74bSmrg shift 5527914d74bSmrg ;; 5537914d74bSmrg *) 5547914d74bSmrg set fnord "$@" "$arg" 5557914d74bSmrg shift 5567914d74bSmrg shift 5577914d74bSmrg ;; 5587914d74bSmrg esac 5597914d74bSmrg done 5607914d74bSmrg "$@" -E | 5617914d74bSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5627914d74bSmrg rm -f "$depfile" 5637914d74bSmrg echo "$object : \\" > "$depfile" 5647914d74bSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5657914d74bSmrg echo " " >> "$depfile" 5667914d74bSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5677914d74bSmrg rm -f "$tmpdepfile" 5687914d74bSmrg ;; 5697914d74bSmrg 5707914d74bSmrgnone) 5717914d74bSmrg exec "$@" 5727914d74bSmrg ;; 5737914d74bSmrg 5747914d74bSmrg*) 5757914d74bSmrg echo "Unknown depmode $depmode" 1>&2 5767914d74bSmrg exit 1 5777914d74bSmrg ;; 5787914d74bSmrgesac 5797914d74bSmrg 5807914d74bSmrgexit 0 5817914d74bSmrg 5827914d74bSmrg# Local Variables: 5837914d74bSmrg# mode: shell-script 5847914d74bSmrg# sh-indentation: 2 5857914d74bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5867914d74bSmrg# time-stamp-start: "scriptversion=" 5877914d74bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5887914d74bSmrg# time-stamp-end: "$" 5897914d74bSmrg# End: 590