depcomp revision 7ae0a258
17706df26Smrg#! /bin/sh 27706df26Smrg# depcomp - compile a program generating dependencies as side-effects 37706df26Smrg 47ae0a258Smrgscriptversion=2009-04-28.21; # UTC 57706df26Smrg 67ae0a258Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 77ae0a258Smrg# Software Foundation, Inc. 87706df26Smrg 97706df26Smrg# This program is free software; you can redistribute it and/or modify 107706df26Smrg# it under the terms of the GNU General Public License as published by 117706df26Smrg# the Free Software Foundation; either version 2, or (at your option) 127706df26Smrg# any later version. 137706df26Smrg 147706df26Smrg# This program is distributed in the hope that it will be useful, 157706df26Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 167706df26Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177706df26Smrg# GNU General Public License for more details. 187706df26Smrg 197706df26Smrg# You should have received a copy of the GNU General Public License 207ae0a258Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 217706df26Smrg 227706df26Smrg# As a special exception to the GNU General Public License, if you 237706df26Smrg# distribute this file as part of a program that contains a 247706df26Smrg# configuration script generated by Autoconf, you may include it under 257706df26Smrg# the same distribution terms that you use for the rest of that program. 267706df26Smrg 277706df26Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 287706df26Smrg 297706df26Smrgcase $1 in 307706df26Smrg '') 317706df26Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 327706df26Smrg exit 1; 337706df26Smrg ;; 347706df26Smrg -h | --h*) 357706df26Smrg cat <<\EOF 367706df26SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 377706df26Smrg 387706df26SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 397706df26Smrgas side-effects. 407706df26Smrg 417706df26SmrgEnvironment variables: 427706df26Smrg depmode Dependency tracking mode. 437706df26Smrg source Source file read by `PROGRAMS ARGS'. 447706df26Smrg object Object file output by `PROGRAMS ARGS'. 457706df26Smrg DEPDIR directory where to store dependencies. 467706df26Smrg depfile Dependency file to output. 477706df26Smrg tmpdepfile Temporary file to use when outputing dependencies. 487706df26Smrg libtool Whether libtool is used (yes/no). 497706df26Smrg 507706df26SmrgReport bugs to <bug-automake@gnu.org>. 517706df26SmrgEOF 527706df26Smrg exit $? 537706df26Smrg ;; 547706df26Smrg -v | --v*) 557706df26Smrg echo "depcomp $scriptversion" 567706df26Smrg exit $? 577706df26Smrg ;; 587706df26Smrgesac 597706df26Smrg 607706df26Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 617706df26Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 627706df26Smrg exit 1 637706df26Smrgfi 647706df26Smrg 657706df26Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 667706df26Smrgdepfile=${depfile-`echo "$object" | 677706df26Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 687706df26Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 697706df26Smrg 707706df26Smrgrm -f "$tmpdepfile" 717706df26Smrg 727706df26Smrg# Some modes work just like other modes, but use different flags. We 737706df26Smrg# parameterize here, but still list the modes in the big case below, 747706df26Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 757706df26Smrg# here, because this file can only contain one case statement. 767706df26Smrgif test "$depmode" = hp; then 777706df26Smrg # HP compiler uses -M and no extra arg. 787706df26Smrg gccflag=-M 797706df26Smrg depmode=gcc 807706df26Smrgfi 817706df26Smrg 827706df26Smrgif test "$depmode" = dashXmstdout; then 837706df26Smrg # This is just like dashmstdout with a different argument. 847706df26Smrg dashmflag=-xM 857706df26Smrg depmode=dashmstdout 867706df26Smrgfi 877706df26Smrg 887ae0a258Smrgcygpath_u="cygpath -u -f -" 897ae0a258Smrgif test "$depmode" = msvcmsys; then 907ae0a258Smrg # This is just like msvisualcpp but w/o cygpath translation. 917ae0a258Smrg # Just convert the backslash-escaped backslashes to single forward 927ae0a258Smrg # slashes to satisfy depend.m4 937ae0a258Smrg cygpath_u="sed s,\\\\\\\\,/,g" 947ae0a258Smrg depmode=msvisualcpp 957ae0a258Smrgfi 967ae0a258Smrg 977706df26Smrgcase "$depmode" in 987706df26Smrggcc3) 997706df26Smrg## gcc 3 implements dependency tracking that does exactly what 1007706df26Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1017706df26Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102047944f3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103047944f3Smrg## the command line argument order; so add the flags where they 104047944f3Smrg## appear in depend2.am. Note that the slowdown incurred here 105047944f3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106047944f3Smrg for arg 107047944f3Smrg do 108047944f3Smrg case $arg in 109047944f3Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110047944f3Smrg *) set fnord "$@" "$arg" ;; 111047944f3Smrg esac 112047944f3Smrg shift # fnord 113047944f3Smrg shift # $arg 114047944f3Smrg done 115047944f3Smrg "$@" 1167706df26Smrg stat=$? 1177706df26Smrg if test $stat -eq 0; then : 1187706df26Smrg else 1197706df26Smrg rm -f "$tmpdepfile" 1207706df26Smrg exit $stat 1217706df26Smrg fi 1227706df26Smrg mv "$tmpdepfile" "$depfile" 1237706df26Smrg ;; 1247706df26Smrg 1257706df26Smrggcc) 1267706df26Smrg## There are various ways to get dependency output from gcc. Here's 1277706df26Smrg## why we pick this rather obscure method: 1287706df26Smrg## - Don't want to use -MD because we'd like the dependencies to end 1297706df26Smrg## up in a subdir. Having to rename by hand is ugly. 1307706df26Smrg## (We might end up doing this anyway to support other compilers.) 1317706df26Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1327706df26Smrg## -MM, not -M (despite what the docs say). 1337706df26Smrg## - Using -M directly means running the compiler twice (even worse 1347706df26Smrg## than renaming). 1357706df26Smrg if test -z "$gccflag"; then 1367706df26Smrg gccflag=-MD, 1377706df26Smrg fi 1387706df26Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1397706df26Smrg stat=$? 1407706df26Smrg if test $stat -eq 0; then : 1417706df26Smrg else 1427706df26Smrg rm -f "$tmpdepfile" 1437706df26Smrg exit $stat 1447706df26Smrg fi 1457706df26Smrg rm -f "$depfile" 1467706df26Smrg echo "$object : \\" > "$depfile" 1477706df26Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1487706df26Smrg## The second -e expression handles DOS-style file names with drive letters. 1497706df26Smrg sed -e 's/^[^:]*: / /' \ 1507706df26Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1517706df26Smrg## This next piece of magic avoids the `deleted header file' problem. 1527706df26Smrg## The problem is that when a header file which appears in a .P file 1537706df26Smrg## is deleted, the dependency causes make to die (because there is 1547706df26Smrg## typically no way to rebuild the header). We avoid this by adding 1557706df26Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1567706df26Smrg## this for us directly. 1577706df26Smrg tr ' ' ' 1587706df26Smrg' < "$tmpdepfile" | 1597706df26Smrg## Some versions of gcc put a space before the `:'. On the theory 1607706df26Smrg## that the space means something, we add a space to the output as 1617706df26Smrg## well. 1627706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1637706df26Smrg## correctly. Breaking it into two sed invocations is a workaround. 1647706df26Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1657706df26Smrg rm -f "$tmpdepfile" 1667706df26Smrg ;; 1677706df26Smrg 1687706df26Smrghp) 1697706df26Smrg # This case exists only to let depend.m4 do its work. It works by 1707706df26Smrg # looking at the text of this script. This case will never be run, 1717706df26Smrg # since it is checked for above. 1727706df26Smrg exit 1 1737706df26Smrg ;; 1747706df26Smrg 1757706df26Smrgsgi) 1767706df26Smrg if test "$libtool" = yes; then 1777706df26Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1787706df26Smrg else 1797706df26Smrg "$@" -MDupdate "$tmpdepfile" 1807706df26Smrg fi 1817706df26Smrg stat=$? 1827706df26Smrg if test $stat -eq 0; then : 1837706df26Smrg else 1847706df26Smrg rm -f "$tmpdepfile" 1857706df26Smrg exit $stat 1867706df26Smrg fi 1877706df26Smrg rm -f "$depfile" 1887706df26Smrg 1897706df26Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1907706df26Smrg echo "$object : \\" > "$depfile" 1917706df26Smrg 1927706df26Smrg # Clip off the initial element (the dependent). Don't try to be 1937706df26Smrg # clever and replace this with sed code, as IRIX sed won't handle 1947706df26Smrg # lines with more than a fixed number of characters (4096 in 1957706df26Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1967706df26Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1977706df26Smrg # dependency line. 1987706df26Smrg tr ' ' ' 1997706df26Smrg' < "$tmpdepfile" \ 2007706df26Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2017706df26Smrg tr ' 2027ae0a258Smrg' ' ' >> "$depfile" 2037ae0a258Smrg echo >> "$depfile" 2047706df26Smrg 2057706df26Smrg # The second pass generates a dummy entry for each header file. 2067706df26Smrg tr ' ' ' 2077706df26Smrg' < "$tmpdepfile" \ 2087706df26Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2097ae0a258Smrg >> "$depfile" 2107706df26Smrg else 2117706df26Smrg # The sourcefile does not contain any dependencies, so just 2127706df26Smrg # store a dummy comment line, to avoid errors with the Makefile 2137706df26Smrg # "include basename.Plo" scheme. 2147706df26Smrg echo "#dummy" > "$depfile" 2157706df26Smrg fi 2167706df26Smrg rm -f "$tmpdepfile" 2177706df26Smrg ;; 2187706df26Smrg 2197706df26Smrgaix) 2207706df26Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2217706df26Smrg # in a .u file. In older versions, this file always lives in the 2227706df26Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2237706df26Smrg # start of each line; $object doesn't have directory information. 2247706df26Smrg # Version 6 uses the directory in both cases. 225047944f3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226047944f3Smrg test "x$dir" = "x$object" && dir= 227047944f3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2287706df26Smrg if test "$libtool" = yes; then 229047944f3Smrg tmpdepfile1=$dir$base.u 230047944f3Smrg tmpdepfile2=$base.u 231047944f3Smrg tmpdepfile3=$dir.libs/$base.u 2327706df26Smrg "$@" -Wc,-M 2337706df26Smrg else 234047944f3Smrg tmpdepfile1=$dir$base.u 235047944f3Smrg tmpdepfile2=$dir$base.u 236047944f3Smrg tmpdepfile3=$dir$base.u 2377706df26Smrg "$@" -M 2387706df26Smrg fi 2397706df26Smrg stat=$? 2407706df26Smrg 2417706df26Smrg if test $stat -eq 0; then : 2427706df26Smrg else 243047944f3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2447706df26Smrg exit $stat 2457706df26Smrg fi 2467706df26Smrg 247047944f3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248047944f3Smrg do 249047944f3Smrg test -f "$tmpdepfile" && break 250047944f3Smrg done 2517706df26Smrg if test -f "$tmpdepfile"; then 2527706df26Smrg # Each line is of the form `foo.o: dependent.h'. 2537706df26Smrg # Do two passes, one to just change these to 2547706df26Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255047944f3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256047944f3Smrg # That's a tab and a space in the []. 257047944f3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2587706df26Smrg else 2597706df26Smrg # The sourcefile does not contain any dependencies, so just 2607706df26Smrg # store a dummy comment line, to avoid errors with the Makefile 2617706df26Smrg # "include basename.Plo" scheme. 2627706df26Smrg echo "#dummy" > "$depfile" 2637706df26Smrg fi 2647706df26Smrg rm -f "$tmpdepfile" 2657706df26Smrg ;; 2667706df26Smrg 2677706df26Smrgicc) 2687706df26Smrg # Intel's C compiler understands `-MD -MF file'. However on 2697706df26Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2707706df26Smrg # ICC 7.0 will fill foo.d with something like 2717706df26Smrg # foo.o: sub/foo.c 2727706df26Smrg # foo.o: sub/foo.h 2737706df26Smrg # which is wrong. We want: 2747706df26Smrg # sub/foo.o: sub/foo.c 2757706df26Smrg # sub/foo.o: sub/foo.h 2767706df26Smrg # sub/foo.c: 2777706df26Smrg # sub/foo.h: 2787706df26Smrg # ICC 7.1 will output 2797706df26Smrg # foo.o: sub/foo.c sub/foo.h 2807706df26Smrg # and will wrap long lines using \ : 2817706df26Smrg # foo.o: sub/foo.c ... \ 2827706df26Smrg # sub/foo.h ... \ 2837706df26Smrg # ... 2847706df26Smrg 2857706df26Smrg "$@" -MD -MF "$tmpdepfile" 2867706df26Smrg stat=$? 2877706df26Smrg if test $stat -eq 0; then : 2887706df26Smrg else 2897706df26Smrg rm -f "$tmpdepfile" 2907706df26Smrg exit $stat 2917706df26Smrg fi 2927706df26Smrg rm -f "$depfile" 2937706df26Smrg # Each line is of the form `foo.o: dependent.h', 2947706df26Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2957706df26Smrg # Do two passes, one to just change these to 2967706df26Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2977706df26Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2987706df26Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2997706df26Smrg # correctly. Breaking it into two sed invocations is a workaround. 3007706df26Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3017706df26Smrg sed -e 's/$/ :/' >> "$depfile" 3027706df26Smrg rm -f "$tmpdepfile" 3037706df26Smrg ;; 3047706df26Smrg 305047944f3Smrghp2) 306047944f3Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307047944f3Smrg # compilers, which have integrated preprocessors. The correct option 308047944f3Smrg # to use with these is +Maked; it writes dependencies to a file named 309047944f3Smrg # 'foo.d', which lands next to the object file, wherever that 310047944f3Smrg # happens to be. 311047944f3Smrg # Much of this is similar to the tru64 case; see comments there. 312047944f3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313047944f3Smrg test "x$dir" = "x$object" && dir= 314047944f3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315047944f3Smrg if test "$libtool" = yes; then 316047944f3Smrg tmpdepfile1=$dir$base.d 317047944f3Smrg tmpdepfile2=$dir.libs/$base.d 318047944f3Smrg "$@" -Wc,+Maked 319047944f3Smrg else 320047944f3Smrg tmpdepfile1=$dir$base.d 321047944f3Smrg tmpdepfile2=$dir$base.d 322047944f3Smrg "$@" +Maked 323047944f3Smrg fi 324047944f3Smrg stat=$? 325047944f3Smrg if test $stat -eq 0; then : 326047944f3Smrg else 327047944f3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328047944f3Smrg exit $stat 329047944f3Smrg fi 330047944f3Smrg 331047944f3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332047944f3Smrg do 333047944f3Smrg test -f "$tmpdepfile" && break 334047944f3Smrg done 335047944f3Smrg if test -f "$tmpdepfile"; then 336047944f3Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337047944f3Smrg # Add `dependent.h:' lines. 3387ae0a258Smrg sed -ne '2,${ 3397ae0a258Smrg s/^ *// 3407ae0a258Smrg s/ \\*$// 3417ae0a258Smrg s/$/:/ 3427ae0a258Smrg p 3437ae0a258Smrg }' "$tmpdepfile" >> "$depfile" 344047944f3Smrg else 345047944f3Smrg echo "#dummy" > "$depfile" 346047944f3Smrg fi 347047944f3Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348047944f3Smrg ;; 349047944f3Smrg 3507706df26Smrgtru64) 3517706df26Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3527706df26Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3537706df26Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3547706df26Smrg # dependencies in `foo.d' instead, so we check for that too. 3557706df26Smrg # Subdirectories are respected. 3567706df26Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3577706df26Smrg test "x$dir" = "x$object" && dir= 3587706df26Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3597706df26Smrg 3607706df26Smrg if test "$libtool" = yes; then 3617706df26Smrg # With Tru64 cc, shared objects can also be used to make a 362047944f3Smrg # static library. This mechanism is used in libtool 1.4 series to 3637706df26Smrg # handle both shared and static libraries in a single compilation. 3647706df26Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3657706df26Smrg # 3667706df26Smrg # With libtool 1.5 this exception was removed, and libtool now 3677706df26Smrg # generates 2 separate objects for the 2 libraries. These two 368047944f3Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3697706df26Smrg # in $dir$base.o.d. We have to check for both files, because 3707706df26Smrg # one of the two compilations can be disabled. We should prefer 3717706df26Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3727706df26Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3737706df26Smrg # the former would cause a distcleancheck panic. 3747706df26Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3757706df26Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3767706df26Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3777706df26Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3787706df26Smrg "$@" -Wc,-MD 3797706df26Smrg else 3807706df26Smrg tmpdepfile1=$dir$base.o.d 3817706df26Smrg tmpdepfile2=$dir$base.d 3827706df26Smrg tmpdepfile3=$dir$base.d 3837706df26Smrg tmpdepfile4=$dir$base.d 3847706df26Smrg "$@" -MD 3857706df26Smrg fi 3867706df26Smrg 3877706df26Smrg stat=$? 3887706df26Smrg if test $stat -eq 0; then : 3897706df26Smrg else 3907706df26Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3917706df26Smrg exit $stat 3927706df26Smrg fi 3937706df26Smrg 3947706df26Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3957706df26Smrg do 3967706df26Smrg test -f "$tmpdepfile" && break 3977706df26Smrg done 3987706df26Smrg if test -f "$tmpdepfile"; then 3997706df26Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4007706df26Smrg # That's a tab and a space in the []. 4017706df26Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4027706df26Smrg else 4037706df26Smrg echo "#dummy" > "$depfile" 4047706df26Smrg fi 4057706df26Smrg rm -f "$tmpdepfile" 4067706df26Smrg ;; 4077706df26Smrg 4087706df26Smrg#nosideeffect) 4097706df26Smrg # This comment above is used by automake to tell side-effect 4107706df26Smrg # dependency tracking mechanisms from slower ones. 4117706df26Smrg 4127706df26Smrgdashmstdout) 4137706df26Smrg # Important note: in order to support this mode, a compiler *must* 4147706df26Smrg # always write the preprocessed file to stdout, regardless of -o. 4157706df26Smrg "$@" || exit $? 4167706df26Smrg 4177706df26Smrg # Remove the call to Libtool. 4187706df26Smrg if test "$libtool" = yes; then 4197ae0a258Smrg while test "X$1" != 'X--mode=compile'; do 4207706df26Smrg shift 4217706df26Smrg done 4227706df26Smrg shift 4237706df26Smrg fi 4247706df26Smrg 4257706df26Smrg # Remove `-o $object'. 4267706df26Smrg IFS=" " 4277706df26Smrg for arg 4287706df26Smrg do 4297706df26Smrg case $arg in 4307706df26Smrg -o) 4317706df26Smrg shift 4327706df26Smrg ;; 4337706df26Smrg $object) 4347706df26Smrg shift 4357706df26Smrg ;; 4367706df26Smrg *) 4377706df26Smrg set fnord "$@" "$arg" 4387706df26Smrg shift # fnord 4397706df26Smrg shift # $arg 4407706df26Smrg ;; 4417706df26Smrg esac 4427706df26Smrg done 4437706df26Smrg 4447706df26Smrg test -z "$dashmflag" && dashmflag=-M 4457706df26Smrg # Require at least two characters before searching for `:' 4467706df26Smrg # in the target name. This is to cope with DOS-style filenames: 4477706df26Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4487706df26Smrg "$@" $dashmflag | 4497706df26Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4507706df26Smrg rm -f "$depfile" 4517706df26Smrg cat < "$tmpdepfile" > "$depfile" 4527706df26Smrg tr ' ' ' 4537706df26Smrg' < "$tmpdepfile" | \ 4547706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4557706df26Smrg## correctly. Breaking it into two sed invocations is a workaround. 4567706df26Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4577706df26Smrg rm -f "$tmpdepfile" 4587706df26Smrg ;; 4597706df26Smrg 4607706df26SmrgdashXmstdout) 4617706df26Smrg # This case only exists to satisfy depend.m4. It is never actually 4627706df26Smrg # run, as this mode is specially recognized in the preamble. 4637706df26Smrg exit 1 4647706df26Smrg ;; 4657706df26Smrg 4667706df26Smrgmakedepend) 4677706df26Smrg "$@" || exit $? 4687706df26Smrg # Remove any Libtool call 4697706df26Smrg if test "$libtool" = yes; then 4707ae0a258Smrg while test "X$1" != 'X--mode=compile'; do 4717706df26Smrg shift 4727706df26Smrg done 4737706df26Smrg shift 4747706df26Smrg fi 4757706df26Smrg # X makedepend 4767706df26Smrg shift 4777ae0a258Smrg cleared=no eat=no 4787ae0a258Smrg for arg 4797ae0a258Smrg do 4807706df26Smrg case $cleared in 4817706df26Smrg no) 4827706df26Smrg set ""; shift 4837706df26Smrg cleared=yes ;; 4847706df26Smrg esac 4857ae0a258Smrg if test $eat = yes; then 4867ae0a258Smrg eat=no 4877ae0a258Smrg continue 4887ae0a258Smrg fi 4897706df26Smrg case "$arg" in 4907706df26Smrg -D*|-I*) 4917706df26Smrg set fnord "$@" "$arg"; shift ;; 4927706df26Smrg # Strip any option that makedepend may not understand. Remove 4937706df26Smrg # the object too, otherwise makedepend will parse it as a source file. 4947ae0a258Smrg -arch) 4957ae0a258Smrg eat=yes ;; 4967706df26Smrg -*|$object) 4977706df26Smrg ;; 4987706df26Smrg *) 4997706df26Smrg set fnord "$@" "$arg"; shift ;; 5007706df26Smrg esac 5017706df26Smrg done 5027ae0a258Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5037706df26Smrg touch "$tmpdepfile" 5047706df26Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5057706df26Smrg rm -f "$depfile" 5067706df26Smrg cat < "$tmpdepfile" > "$depfile" 5077706df26Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5087706df26Smrg' | \ 5097706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5107706df26Smrg## correctly. Breaking it into two sed invocations is a workaround. 5117706df26Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5127706df26Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5137706df26Smrg ;; 5147706df26Smrg 5157706df26Smrgcpp) 5167706df26Smrg # Important note: in order to support this mode, a compiler *must* 5177706df26Smrg # always write the preprocessed file to stdout. 5187706df26Smrg "$@" || exit $? 5197706df26Smrg 5207706df26Smrg # Remove the call to Libtool. 5217706df26Smrg if test "$libtool" = yes; then 5227ae0a258Smrg while test "X$1" != 'X--mode=compile'; do 5237706df26Smrg shift 5247706df26Smrg done 5257706df26Smrg shift 5267706df26Smrg fi 5277706df26Smrg 5287706df26Smrg # Remove `-o $object'. 5297706df26Smrg IFS=" " 5307706df26Smrg for arg 5317706df26Smrg do 5327706df26Smrg case $arg in 5337706df26Smrg -o) 5347706df26Smrg shift 5357706df26Smrg ;; 5367706df26Smrg $object) 5377706df26Smrg shift 5387706df26Smrg ;; 5397706df26Smrg *) 5407706df26Smrg set fnord "$@" "$arg" 5417706df26Smrg shift # fnord 5427706df26Smrg shift # $arg 5437706df26Smrg ;; 5447706df26Smrg esac 5457706df26Smrg done 5467706df26Smrg 5477706df26Smrg "$@" -E | 5487706df26Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5497706df26Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5507706df26Smrg sed '$ s: \\$::' > "$tmpdepfile" 5517706df26Smrg rm -f "$depfile" 5527706df26Smrg echo "$object : \\" > "$depfile" 5537706df26Smrg cat < "$tmpdepfile" >> "$depfile" 5547706df26Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5557706df26Smrg rm -f "$tmpdepfile" 5567706df26Smrg ;; 5577706df26Smrg 5587706df26Smrgmsvisualcpp) 5597706df26Smrg # Important note: in order to support this mode, a compiler *must* 5607ae0a258Smrg # always write the preprocessed file to stdout. 5617706df26Smrg "$@" || exit $? 5627ae0a258Smrg 5637ae0a258Smrg # Remove the call to Libtool. 5647ae0a258Smrg if test "$libtool" = yes; then 5657ae0a258Smrg while test "X$1" != 'X--mode=compile'; do 5667ae0a258Smrg shift 5677ae0a258Smrg done 5687ae0a258Smrg shift 5697ae0a258Smrg fi 5707ae0a258Smrg 5717706df26Smrg IFS=" " 5727706df26Smrg for arg 5737706df26Smrg do 5747706df26Smrg case "$arg" in 5757ae0a258Smrg -o) 5767ae0a258Smrg shift 5777ae0a258Smrg ;; 5787ae0a258Smrg $object) 5797ae0a258Smrg shift 5807ae0a258Smrg ;; 5817706df26Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5827706df26Smrg set fnord "$@" 5837706df26Smrg shift 5847706df26Smrg shift 5857706df26Smrg ;; 5867706df26Smrg *) 5877706df26Smrg set fnord "$@" "$arg" 5887706df26Smrg shift 5897706df26Smrg shift 5907706df26Smrg ;; 5917706df26Smrg esac 5927706df26Smrg done 5937ae0a258Smrg "$@" -E 2>/dev/null | 5947ae0a258Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5957706df26Smrg rm -f "$depfile" 5967706df26Smrg echo "$object : \\" > "$depfile" 5977ae0a258Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5987706df26Smrg echo " " >> "$depfile" 5997ae0a258Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6007706df26Smrg rm -f "$tmpdepfile" 6017706df26Smrg ;; 6027706df26Smrg 6037ae0a258Smrgmsvcmsys) 6047ae0a258Smrg # This case exists only to let depend.m4 do its work. It works by 6057ae0a258Smrg # looking at the text of this script. This case will never be run, 6067ae0a258Smrg # since it is checked for above. 6077ae0a258Smrg exit 1 6087ae0a258Smrg ;; 6097ae0a258Smrg 6107706df26Smrgnone) 6117706df26Smrg exec "$@" 6127706df26Smrg ;; 6137706df26Smrg 6147706df26Smrg*) 6157706df26Smrg echo "Unknown depmode $depmode" 1>&2 6167706df26Smrg exit 1 6177706df26Smrg ;; 6187706df26Smrgesac 6197706df26Smrg 6207706df26Smrgexit 0 6217706df26Smrg 6227706df26Smrg# Local Variables: 6237706df26Smrg# mode: shell-script 6247706df26Smrg# sh-indentation: 2 6257706df26Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6267706df26Smrg# time-stamp-start: "scriptversion=" 6277706df26Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6287ae0a258Smrg# time-stamp-time-zone: "UTC" 6297ae0a258Smrg# time-stamp-end: "; # UTC" 6307706df26Smrg# End: 631