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