depcomp revision fba89afe
19f606849Smrg#! /bin/sh 29f606849Smrg# depcomp - compile a program generating dependencies as side-effects 39f606849Smrg 4fba89afeSmrgscriptversion=2009-04-28.21; # UTC 59f606849Smrg 6fba89afeSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7fba89afeSmrg# Software Foundation, Inc. 89f606849Smrg 99f606849Smrg# This program is free software; you can redistribute it and/or modify 109f606849Smrg# it under the terms of the GNU General Public License as published by 119f606849Smrg# the Free Software Foundation; either version 2, or (at your option) 129f606849Smrg# any later version. 139f606849Smrg 149f606849Smrg# This program is distributed in the hope that it will be useful, 159f606849Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 169f606849Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 179f606849Smrg# GNU General Public License for more details. 189f606849Smrg 199f606849Smrg# You should have received a copy of the GNU General Public License 20fba89afeSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 219f606849Smrg 229f606849Smrg# As a special exception to the GNU General Public License, if you 239f606849Smrg# distribute this file as part of a program that contains a 249f606849Smrg# configuration script generated by Autoconf, you may include it under 259f606849Smrg# the same distribution terms that you use for the rest of that program. 269f606849Smrg 279f606849Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 289f606849Smrg 299f606849Smrgcase $1 in 309f606849Smrg '') 319f606849Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 329f606849Smrg exit 1; 339f606849Smrg ;; 349f606849Smrg -h | --h*) 359f606849Smrg cat <<\EOF 369f606849SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 379f606849Smrg 389f606849SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 399f606849Smrgas side-effects. 409f606849Smrg 419f606849SmrgEnvironment variables: 429f606849Smrg depmode Dependency tracking mode. 439f606849Smrg source Source file read by `PROGRAMS ARGS'. 449f606849Smrg object Object file output by `PROGRAMS ARGS'. 459f606849Smrg DEPDIR directory where to store dependencies. 469f606849Smrg depfile Dependency file to output. 479f606849Smrg tmpdepfile Temporary file to use when outputing dependencies. 489f606849Smrg libtool Whether libtool is used (yes/no). 499f606849Smrg 509f606849SmrgReport bugs to <bug-automake@gnu.org>. 519f606849SmrgEOF 529f606849Smrg exit $? 539f606849Smrg ;; 549f606849Smrg -v | --v*) 559f606849Smrg echo "depcomp $scriptversion" 569f606849Smrg exit $? 579f606849Smrg ;; 589f606849Smrgesac 599f606849Smrg 609f606849Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 619f606849Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 629f606849Smrg exit 1 639f606849Smrgfi 649f606849Smrg 659f606849Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 669f606849Smrgdepfile=${depfile-`echo "$object" | 679f606849Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 689f606849Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 699f606849Smrg 709f606849Smrgrm -f "$tmpdepfile" 719f606849Smrg 729f606849Smrg# Some modes work just like other modes, but use different flags. We 739f606849Smrg# parameterize here, but still list the modes in the big case below, 749f606849Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 759f606849Smrg# here, because this file can only contain one case statement. 769f606849Smrgif test "$depmode" = hp; then 779f606849Smrg # HP compiler uses -M and no extra arg. 789f606849Smrg gccflag=-M 799f606849Smrg depmode=gcc 809f606849Smrgfi 819f606849Smrg 829f606849Smrgif test "$depmode" = dashXmstdout; then 839f606849Smrg # This is just like dashmstdout with a different argument. 849f606849Smrg dashmflag=-xM 859f606849Smrg depmode=dashmstdout 869f606849Smrgfi 879f606849Smrg 88fba89afeSmrgcygpath_u="cygpath -u -f -" 89fba89afeSmrgif test "$depmode" = msvcmsys; then 90fba89afeSmrg # This is just like msvisualcpp but w/o cygpath translation. 91fba89afeSmrg # Just convert the backslash-escaped backslashes to single forward 92fba89afeSmrg # slashes to satisfy depend.m4 93fba89afeSmrg cygpath_u="sed s,\\\\\\\\,/,g" 94fba89afeSmrg depmode=msvisualcpp 95fba89afeSmrgfi 96fba89afeSmrg 979f606849Smrgcase "$depmode" in 989f606849Smrggcc3) 999f606849Smrg## gcc 3 implements dependency tracking that does exactly what 1009f606849Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1019f606849Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1029f606849Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1039f606849Smrg## the command line argument order; so add the flags where they 1049f606849Smrg## appear in depend2.am. Note that the slowdown incurred here 1059f606849Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1069f606849Smrg for arg 1079f606849Smrg do 1089f606849Smrg case $arg in 1099f606849Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1109f606849Smrg *) set fnord "$@" "$arg" ;; 1119f606849Smrg esac 1129f606849Smrg shift # fnord 1139f606849Smrg shift # $arg 1149f606849Smrg done 1159f606849Smrg "$@" 1169f606849Smrg stat=$? 1179f606849Smrg if test $stat -eq 0; then : 1189f606849Smrg else 1199f606849Smrg rm -f "$tmpdepfile" 1209f606849Smrg exit $stat 1219f606849Smrg fi 1229f606849Smrg mv "$tmpdepfile" "$depfile" 1239f606849Smrg ;; 1249f606849Smrg 1259f606849Smrggcc) 1269f606849Smrg## There are various ways to get dependency output from gcc. Here's 1279f606849Smrg## why we pick this rather obscure method: 1289f606849Smrg## - Don't want to use -MD because we'd like the dependencies to end 1299f606849Smrg## up in a subdir. Having to rename by hand is ugly. 1309f606849Smrg## (We might end up doing this anyway to support other compilers.) 1319f606849Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1329f606849Smrg## -MM, not -M (despite what the docs say). 1339f606849Smrg## - Using -M directly means running the compiler twice (even worse 1349f606849Smrg## than renaming). 1359f606849Smrg if test -z "$gccflag"; then 1369f606849Smrg gccflag=-MD, 1379f606849Smrg fi 1389f606849Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1399f606849Smrg stat=$? 1409f606849Smrg if test $stat -eq 0; then : 1419f606849Smrg else 1429f606849Smrg rm -f "$tmpdepfile" 1439f606849Smrg exit $stat 1449f606849Smrg fi 1459f606849Smrg rm -f "$depfile" 1469f606849Smrg echo "$object : \\" > "$depfile" 1479f606849Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1489f606849Smrg## The second -e expression handles DOS-style file names with drive letters. 1499f606849Smrg sed -e 's/^[^:]*: / /' \ 1509f606849Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1519f606849Smrg## This next piece of magic avoids the `deleted header file' problem. 1529f606849Smrg## The problem is that when a header file which appears in a .P file 1539f606849Smrg## is deleted, the dependency causes make to die (because there is 1549f606849Smrg## typically no way to rebuild the header). We avoid this by adding 1559f606849Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1569f606849Smrg## this for us directly. 1579f606849Smrg tr ' ' ' 1589f606849Smrg' < "$tmpdepfile" | 1599f606849Smrg## Some versions of gcc put a space before the `:'. On the theory 1609f606849Smrg## that the space means something, we add a space to the output as 1619f606849Smrg## well. 1629f606849Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1639f606849Smrg## correctly. Breaking it into two sed invocations is a workaround. 1649f606849Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1659f606849Smrg rm -f "$tmpdepfile" 1669f606849Smrg ;; 1679f606849Smrg 1689f606849Smrghp) 1699f606849Smrg # This case exists only to let depend.m4 do its work. It works by 1709f606849Smrg # looking at the text of this script. This case will never be run, 1719f606849Smrg # since it is checked for above. 1729f606849Smrg exit 1 1739f606849Smrg ;; 1749f606849Smrg 1759f606849Smrgsgi) 1769f606849Smrg if test "$libtool" = yes; then 1779f606849Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1789f606849Smrg else 1799f606849Smrg "$@" -MDupdate "$tmpdepfile" 1809f606849Smrg fi 1819f606849Smrg stat=$? 1829f606849Smrg if test $stat -eq 0; then : 1839f606849Smrg else 1849f606849Smrg rm -f "$tmpdepfile" 1859f606849Smrg exit $stat 1869f606849Smrg fi 1879f606849Smrg rm -f "$depfile" 1889f606849Smrg 1899f606849Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1909f606849Smrg echo "$object : \\" > "$depfile" 1919f606849Smrg 1929f606849Smrg # Clip off the initial element (the dependent). Don't try to be 1939f606849Smrg # clever and replace this with sed code, as IRIX sed won't handle 1949f606849Smrg # lines with more than a fixed number of characters (4096 in 1959f606849Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1969f606849Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1979f606849Smrg # dependency line. 1989f606849Smrg tr ' ' ' 1999f606849Smrg' < "$tmpdepfile" \ 2009f606849Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2019f606849Smrg tr ' 202fba89afeSmrg' ' ' >> "$depfile" 203fba89afeSmrg echo >> "$depfile" 2049f606849Smrg 2059f606849Smrg # The second pass generates a dummy entry for each header file. 2069f606849Smrg tr ' ' ' 2079f606849Smrg' < "$tmpdepfile" \ 2089f606849Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209fba89afeSmrg >> "$depfile" 2109f606849Smrg else 2119f606849Smrg # The sourcefile does not contain any dependencies, so just 2129f606849Smrg # store a dummy comment line, to avoid errors with the Makefile 2139f606849Smrg # "include basename.Plo" scheme. 2149f606849Smrg echo "#dummy" > "$depfile" 2159f606849Smrg fi 2169f606849Smrg rm -f "$tmpdepfile" 2179f606849Smrg ;; 2189f606849Smrg 2199f606849Smrgaix) 2209f606849Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2219f606849Smrg # in a .u file. In older versions, this file always lives in the 2229f606849Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2239f606849Smrg # start of each line; $object doesn't have directory information. 2249f606849Smrg # Version 6 uses the directory in both cases. 225fba89afeSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226fba89afeSmrg test "x$dir" = "x$object" && dir= 227fba89afeSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2289f606849Smrg if test "$libtool" = yes; then 229fba89afeSmrg tmpdepfile1=$dir$base.u 230fba89afeSmrg tmpdepfile2=$base.u 231fba89afeSmrg tmpdepfile3=$dir.libs/$base.u 2329f606849Smrg "$@" -Wc,-M 2339f606849Smrg else 234fba89afeSmrg tmpdepfile1=$dir$base.u 235fba89afeSmrg tmpdepfile2=$dir$base.u 236fba89afeSmrg tmpdepfile3=$dir$base.u 2379f606849Smrg "$@" -M 2389f606849Smrg fi 2399f606849Smrg stat=$? 2409f606849Smrg 2419f606849Smrg if test $stat -eq 0; then : 2429f606849Smrg else 243fba89afeSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2449f606849Smrg exit $stat 2459f606849Smrg fi 2469f606849Smrg 247fba89afeSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248fba89afeSmrg do 249fba89afeSmrg test -f "$tmpdepfile" && break 250fba89afeSmrg done 2519f606849Smrg if test -f "$tmpdepfile"; then 2529f606849Smrg # Each line is of the form `foo.o: dependent.h'. 2539f606849Smrg # Do two passes, one to just change these to 2549f606849Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255fba89afeSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256fba89afeSmrg # That's a tab and a space in the []. 257fba89afeSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2589f606849Smrg else 2599f606849Smrg # The sourcefile does not contain any dependencies, so just 2609f606849Smrg # store a dummy comment line, to avoid errors with the Makefile 2619f606849Smrg # "include basename.Plo" scheme. 2629f606849Smrg echo "#dummy" > "$depfile" 2639f606849Smrg fi 2649f606849Smrg rm -f "$tmpdepfile" 2659f606849Smrg ;; 2669f606849Smrg 2679f606849Smrgicc) 2689f606849Smrg # Intel's C compiler understands `-MD -MF file'. However on 2699f606849Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2709f606849Smrg # ICC 7.0 will fill foo.d with something like 2719f606849Smrg # foo.o: sub/foo.c 2729f606849Smrg # foo.o: sub/foo.h 2739f606849Smrg # which is wrong. We want: 2749f606849Smrg # sub/foo.o: sub/foo.c 2759f606849Smrg # sub/foo.o: sub/foo.h 2769f606849Smrg # sub/foo.c: 2779f606849Smrg # sub/foo.h: 2789f606849Smrg # ICC 7.1 will output 2799f606849Smrg # foo.o: sub/foo.c sub/foo.h 2809f606849Smrg # and will wrap long lines using \ : 2819f606849Smrg # foo.o: sub/foo.c ... \ 2829f606849Smrg # sub/foo.h ... \ 2839f606849Smrg # ... 2849f606849Smrg 2859f606849Smrg "$@" -MD -MF "$tmpdepfile" 2869f606849Smrg stat=$? 2879f606849Smrg if test $stat -eq 0; then : 2889f606849Smrg else 2899f606849Smrg rm -f "$tmpdepfile" 2909f606849Smrg exit $stat 2919f606849Smrg fi 2929f606849Smrg rm -f "$depfile" 2939f606849Smrg # Each line is of the form `foo.o: dependent.h', 2949f606849Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2959f606849Smrg # Do two passes, one to just change these to 2969f606849Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2979f606849Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2989f606849Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2999f606849Smrg # correctly. Breaking it into two sed invocations is a workaround. 3009f606849Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3019f606849Smrg sed -e 's/$/ :/' >> "$depfile" 3029f606849Smrg rm -f "$tmpdepfile" 3039f606849Smrg ;; 3049f606849Smrg 3059f606849Smrghp2) 3069f606849Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3079f606849Smrg # compilers, which have integrated preprocessors. The correct option 3089f606849Smrg # to use with these is +Maked; it writes dependencies to a file named 3099f606849Smrg # 'foo.d', which lands next to the object file, wherever that 3109f606849Smrg # happens to be. 3119f606849Smrg # Much of this is similar to the tru64 case; see comments there. 3129f606849Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3139f606849Smrg test "x$dir" = "x$object" && dir= 3149f606849Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3159f606849Smrg if test "$libtool" = yes; then 3169f606849Smrg tmpdepfile1=$dir$base.d 3179f606849Smrg tmpdepfile2=$dir.libs/$base.d 3189f606849Smrg "$@" -Wc,+Maked 3199f606849Smrg else 3209f606849Smrg tmpdepfile1=$dir$base.d 3219f606849Smrg tmpdepfile2=$dir$base.d 3229f606849Smrg "$@" +Maked 3239f606849Smrg fi 3249f606849Smrg stat=$? 3259f606849Smrg if test $stat -eq 0; then : 3269f606849Smrg else 3279f606849Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3289f606849Smrg exit $stat 3299f606849Smrg fi 3309f606849Smrg 3319f606849Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3329f606849Smrg do 3339f606849Smrg test -f "$tmpdepfile" && break 3349f606849Smrg done 3359f606849Smrg if test -f "$tmpdepfile"; then 3369f606849Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3379f606849Smrg # Add `dependent.h:' lines. 338fba89afeSmrg sed -ne '2,${ 339fba89afeSmrg s/^ *// 340fba89afeSmrg s/ \\*$// 341fba89afeSmrg s/$/:/ 342fba89afeSmrg p 343fba89afeSmrg }' "$tmpdepfile" >> "$depfile" 3449f606849Smrg else 3459f606849Smrg echo "#dummy" > "$depfile" 3469f606849Smrg fi 3479f606849Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3489f606849Smrg ;; 3499f606849Smrg 3509f606849Smrgtru64) 3519f606849Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3529f606849Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3539f606849Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3549f606849Smrg # dependencies in `foo.d' instead, so we check for that too. 3559f606849Smrg # Subdirectories are respected. 3569f606849Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3579f606849Smrg test "x$dir" = "x$object" && dir= 3589f606849Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3599f606849Smrg 3609f606849Smrg if test "$libtool" = yes; then 3619f606849Smrg # With Tru64 cc, shared objects can also be used to make a 3629f606849Smrg # static library. This mechanism is used in libtool 1.4 series to 3639f606849Smrg # handle both shared and static libraries in a single compilation. 3649f606849Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3659f606849Smrg # 3669f606849Smrg # With libtool 1.5 this exception was removed, and libtool now 3679f606849Smrg # generates 2 separate objects for the 2 libraries. These two 3689f606849Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3699f606849Smrg # in $dir$base.o.d. We have to check for both files, because 3709f606849Smrg # one of the two compilations can be disabled. We should prefer 3719f606849Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3729f606849Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3739f606849Smrg # the former would cause a distcleancheck panic. 3749f606849Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3759f606849Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3769f606849Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3779f606849Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3789f606849Smrg "$@" -Wc,-MD 3799f606849Smrg else 3809f606849Smrg tmpdepfile1=$dir$base.o.d 3819f606849Smrg tmpdepfile2=$dir$base.d 3829f606849Smrg tmpdepfile3=$dir$base.d 3839f606849Smrg tmpdepfile4=$dir$base.d 3849f606849Smrg "$@" -MD 3859f606849Smrg fi 3869f606849Smrg 3879f606849Smrg stat=$? 3889f606849Smrg if test $stat -eq 0; then : 3899f606849Smrg else 3909f606849Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3919f606849Smrg exit $stat 3929f606849Smrg fi 3939f606849Smrg 3949f606849Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3959f606849Smrg do 3969f606849Smrg test -f "$tmpdepfile" && break 3979f606849Smrg done 3989f606849Smrg if test -f "$tmpdepfile"; then 3999f606849Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4009f606849Smrg # That's a tab and a space in the []. 4019f606849Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4029f606849Smrg else 4039f606849Smrg echo "#dummy" > "$depfile" 4049f606849Smrg fi 4059f606849Smrg rm -f "$tmpdepfile" 4069f606849Smrg ;; 4079f606849Smrg 4089f606849Smrg#nosideeffect) 4099f606849Smrg # This comment above is used by automake to tell side-effect 4109f606849Smrg # dependency tracking mechanisms from slower ones. 4119f606849Smrg 4129f606849Smrgdashmstdout) 4139f606849Smrg # Important note: in order to support this mode, a compiler *must* 4149f606849Smrg # always write the preprocessed file to stdout, regardless of -o. 4159f606849Smrg "$@" || exit $? 4169f606849Smrg 4179f606849Smrg # Remove the call to Libtool. 4189f606849Smrg if test "$libtool" = yes; then 419fba89afeSmrg while test "X$1" != 'X--mode=compile'; do 4209f606849Smrg shift 4219f606849Smrg done 4229f606849Smrg shift 4239f606849Smrg fi 4249f606849Smrg 4259f606849Smrg # Remove `-o $object'. 4269f606849Smrg IFS=" " 4279f606849Smrg for arg 4289f606849Smrg do 4299f606849Smrg case $arg in 4309f606849Smrg -o) 4319f606849Smrg shift 4329f606849Smrg ;; 4339f606849Smrg $object) 4349f606849Smrg shift 4359f606849Smrg ;; 4369f606849Smrg *) 4379f606849Smrg set fnord "$@" "$arg" 4389f606849Smrg shift # fnord 4399f606849Smrg shift # $arg 4409f606849Smrg ;; 4419f606849Smrg esac 4429f606849Smrg done 4439f606849Smrg 4449f606849Smrg test -z "$dashmflag" && dashmflag=-M 4459f606849Smrg # Require at least two characters before searching for `:' 4469f606849Smrg # in the target name. This is to cope with DOS-style filenames: 4479f606849Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4489f606849Smrg "$@" $dashmflag | 4499f606849Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4509f606849Smrg rm -f "$depfile" 4519f606849Smrg cat < "$tmpdepfile" > "$depfile" 4529f606849Smrg tr ' ' ' 4539f606849Smrg' < "$tmpdepfile" | \ 4549f606849Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4559f606849Smrg## correctly. Breaking it into two sed invocations is a workaround. 4569f606849Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4579f606849Smrg rm -f "$tmpdepfile" 4589f606849Smrg ;; 4599f606849Smrg 4609f606849SmrgdashXmstdout) 4619f606849Smrg # This case only exists to satisfy depend.m4. It is never actually 4629f606849Smrg # run, as this mode is specially recognized in the preamble. 4639f606849Smrg exit 1 4649f606849Smrg ;; 4659f606849Smrg 4669f606849Smrgmakedepend) 4679f606849Smrg "$@" || exit $? 4689f606849Smrg # Remove any Libtool call 4699f606849Smrg if test "$libtool" = yes; then 470fba89afeSmrg while test "X$1" != 'X--mode=compile'; do 4719f606849Smrg shift 4729f606849Smrg done 4739f606849Smrg shift 4749f606849Smrg fi 4759f606849Smrg # X makedepend 4769f606849Smrg shift 477fba89afeSmrg cleared=no eat=no 478fba89afeSmrg for arg 479fba89afeSmrg do 4809f606849Smrg case $cleared in 4819f606849Smrg no) 4829f606849Smrg set ""; shift 4839f606849Smrg cleared=yes ;; 4849f606849Smrg esac 485fba89afeSmrg if test $eat = yes; then 486fba89afeSmrg eat=no 487fba89afeSmrg continue 488fba89afeSmrg fi 4899f606849Smrg case "$arg" in 4909f606849Smrg -D*|-I*) 4919f606849Smrg set fnord "$@" "$arg"; shift ;; 4929f606849Smrg # Strip any option that makedepend may not understand. Remove 4939f606849Smrg # the object too, otherwise makedepend will parse it as a source file. 494fba89afeSmrg -arch) 495fba89afeSmrg eat=yes ;; 4969f606849Smrg -*|$object) 4979f606849Smrg ;; 4989f606849Smrg *) 4999f606849Smrg set fnord "$@" "$arg"; shift ;; 5009f606849Smrg esac 5019f606849Smrg done 502fba89afeSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5039f606849Smrg touch "$tmpdepfile" 5049f606849Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5059f606849Smrg rm -f "$depfile" 5069f606849Smrg cat < "$tmpdepfile" > "$depfile" 5079f606849Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5089f606849Smrg' | \ 5099f606849Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5109f606849Smrg## correctly. Breaking it into two sed invocations is a workaround. 5119f606849Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5129f606849Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5139f606849Smrg ;; 5149f606849Smrg 5159f606849Smrgcpp) 5169f606849Smrg # Important note: in order to support this mode, a compiler *must* 5179f606849Smrg # always write the preprocessed file to stdout. 5189f606849Smrg "$@" || exit $? 5199f606849Smrg 5209f606849Smrg # Remove the call to Libtool. 5219f606849Smrg if test "$libtool" = yes; then 522fba89afeSmrg while test "X$1" != 'X--mode=compile'; do 5239f606849Smrg shift 5249f606849Smrg done 5259f606849Smrg shift 5269f606849Smrg fi 5279f606849Smrg 5289f606849Smrg # Remove `-o $object'. 5299f606849Smrg IFS=" " 5309f606849Smrg for arg 5319f606849Smrg do 5329f606849Smrg case $arg in 5339f606849Smrg -o) 5349f606849Smrg shift 5359f606849Smrg ;; 5369f606849Smrg $object) 5379f606849Smrg shift 5389f606849Smrg ;; 5399f606849Smrg *) 5409f606849Smrg set fnord "$@" "$arg" 5419f606849Smrg shift # fnord 5429f606849Smrg shift # $arg 5439f606849Smrg ;; 5449f606849Smrg esac 5459f606849Smrg done 5469f606849Smrg 5479f606849Smrg "$@" -E | 5489f606849Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5499f606849Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5509f606849Smrg sed '$ s: \\$::' > "$tmpdepfile" 5519f606849Smrg rm -f "$depfile" 5529f606849Smrg echo "$object : \\" > "$depfile" 5539f606849Smrg cat < "$tmpdepfile" >> "$depfile" 5549f606849Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5559f606849Smrg rm -f "$tmpdepfile" 5569f606849Smrg ;; 5579f606849Smrg 5589f606849Smrgmsvisualcpp) 5599f606849Smrg # Important note: in order to support this mode, a compiler *must* 560fba89afeSmrg # always write the preprocessed file to stdout. 5619f606849Smrg "$@" || exit $? 562fba89afeSmrg 563fba89afeSmrg # Remove the call to Libtool. 564fba89afeSmrg if test "$libtool" = yes; then 565fba89afeSmrg while test "X$1" != 'X--mode=compile'; do 566fba89afeSmrg shift 567fba89afeSmrg done 568fba89afeSmrg shift 569fba89afeSmrg fi 570fba89afeSmrg 5719f606849Smrg IFS=" " 5729f606849Smrg for arg 5739f606849Smrg do 5749f606849Smrg case "$arg" in 575fba89afeSmrg -o) 576fba89afeSmrg shift 577fba89afeSmrg ;; 578fba89afeSmrg $object) 579fba89afeSmrg shift 580fba89afeSmrg ;; 5819f606849Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5829f606849Smrg set fnord "$@" 5839f606849Smrg shift 5849f606849Smrg shift 5859f606849Smrg ;; 5869f606849Smrg *) 5879f606849Smrg set fnord "$@" "$arg" 5889f606849Smrg shift 5899f606849Smrg shift 5909f606849Smrg ;; 5919f606849Smrg esac 5929f606849Smrg done 593fba89afeSmrg "$@" -E 2>/dev/null | 594fba89afeSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5959f606849Smrg rm -f "$depfile" 5969f606849Smrg echo "$object : \\" > "$depfile" 597fba89afeSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5989f606849Smrg echo " " >> "$depfile" 599fba89afeSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6009f606849Smrg rm -f "$tmpdepfile" 6019f606849Smrg ;; 6029f606849Smrg 603fba89afeSmrgmsvcmsys) 604fba89afeSmrg # This case exists only to let depend.m4 do its work. It works by 605fba89afeSmrg # looking at the text of this script. This case will never be run, 606fba89afeSmrg # since it is checked for above. 607fba89afeSmrg exit 1 608fba89afeSmrg ;; 609fba89afeSmrg 6109f606849Smrgnone) 6119f606849Smrg exec "$@" 6129f606849Smrg ;; 6139f606849Smrg 6149f606849Smrg*) 6159f606849Smrg echo "Unknown depmode $depmode" 1>&2 6169f606849Smrg exit 1 6179f606849Smrg ;; 6189f606849Smrgesac 6199f606849Smrg 6209f606849Smrgexit 0 6219f606849Smrg 6229f606849Smrg# Local Variables: 6239f606849Smrg# mode: shell-script 6249f606849Smrg# sh-indentation: 2 6259f606849Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6269f606849Smrg# time-stamp-start: "scriptversion=" 6279f606849Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628fba89afeSmrg# time-stamp-time-zone: "UTC" 629fba89afeSmrg# time-stamp-end: "; # UTC" 6309f606849Smrg# End: 631