depcomp revision f14f4646
15dfecf96Smrg#! /bin/sh 25dfecf96Smrg# depcomp - compile a program generating dependencies as side-effects 35dfecf96Smrg 4f14f4646Smrgscriptversion=2007-03-29.01 55dfecf96Smrg 6f14f4646Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 7f14f4646Smrg# Foundation, Inc. 85dfecf96Smrg 95dfecf96Smrg# This program is free software; you can redistribute it and/or modify 105dfecf96Smrg# it under the terms of the GNU General Public License as published by 115dfecf96Smrg# the Free Software Foundation; either version 2, or (at your option) 125dfecf96Smrg# any later version. 135dfecf96Smrg 145dfecf96Smrg# This program is distributed in the hope that it will be useful, 155dfecf96Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 165dfecf96Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 175dfecf96Smrg# GNU General Public License for more details. 185dfecf96Smrg 195dfecf96Smrg# You should have received a copy of the GNU General Public License 205dfecf96Smrg# along with this program; if not, write to the Free Software 215dfecf96Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 225dfecf96Smrg# 02110-1301, USA. 235dfecf96Smrg 245dfecf96Smrg# As a special exception to the GNU General Public License, if you 255dfecf96Smrg# distribute this file as part of a program that contains a 265dfecf96Smrg# configuration script generated by Autoconf, you may include it under 275dfecf96Smrg# the same distribution terms that you use for the rest of that program. 285dfecf96Smrg 295dfecf96Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 305dfecf96Smrg 315dfecf96Smrgcase $1 in 325dfecf96Smrg '') 335dfecf96Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 345dfecf96Smrg exit 1; 355dfecf96Smrg ;; 365dfecf96Smrg -h | --h*) 375dfecf96Smrg cat <<\EOF 385dfecf96SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 395dfecf96Smrg 405dfecf96SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 415dfecf96Smrgas side-effects. 425dfecf96Smrg 435dfecf96SmrgEnvironment variables: 445dfecf96Smrg depmode Dependency tracking mode. 455dfecf96Smrg source Source file read by `PROGRAMS ARGS'. 465dfecf96Smrg object Object file output by `PROGRAMS ARGS'. 475dfecf96Smrg DEPDIR directory where to store dependencies. 485dfecf96Smrg depfile Dependency file to output. 495dfecf96Smrg tmpdepfile Temporary file to use when outputing dependencies. 505dfecf96Smrg libtool Whether libtool is used (yes/no). 515dfecf96Smrg 525dfecf96SmrgReport bugs to <bug-automake@gnu.org>. 535dfecf96SmrgEOF 545dfecf96Smrg exit $? 555dfecf96Smrg ;; 565dfecf96Smrg -v | --v*) 575dfecf96Smrg echo "depcomp $scriptversion" 585dfecf96Smrg exit $? 595dfecf96Smrg ;; 605dfecf96Smrgesac 615dfecf96Smrg 625dfecf96Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 635dfecf96Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 645dfecf96Smrg exit 1 655dfecf96Smrgfi 665dfecf96Smrg 675dfecf96Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 685dfecf96Smrgdepfile=${depfile-`echo "$object" | 695dfecf96Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 705dfecf96Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 715dfecf96Smrg 725dfecf96Smrgrm -f "$tmpdepfile" 735dfecf96Smrg 745dfecf96Smrg# Some modes work just like other modes, but use different flags. We 755dfecf96Smrg# parameterize here, but still list the modes in the big case below, 765dfecf96Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 775dfecf96Smrg# here, because this file can only contain one case statement. 785dfecf96Smrgif test "$depmode" = hp; then 795dfecf96Smrg # HP compiler uses -M and no extra arg. 805dfecf96Smrg gccflag=-M 815dfecf96Smrg depmode=gcc 825dfecf96Smrgfi 835dfecf96Smrg 845dfecf96Smrgif test "$depmode" = dashXmstdout; then 855dfecf96Smrg # This is just like dashmstdout with a different argument. 865dfecf96Smrg dashmflag=-xM 875dfecf96Smrg depmode=dashmstdout 885dfecf96Smrgfi 895dfecf96Smrg 905dfecf96Smrgcase "$depmode" in 915dfecf96Smrggcc3) 925dfecf96Smrg## gcc 3 implements dependency tracking that does exactly what 935dfecf96Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 945dfecf96Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 95f14f4646Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96f14f4646Smrg## the command line argument order; so add the flags where they 97f14f4646Smrg## appear in depend2.am. Note that the slowdown incurred here 98f14f4646Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99f14f4646Smrg for arg 100f14f4646Smrg do 101f14f4646Smrg case $arg in 102f14f4646Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103f14f4646Smrg *) set fnord "$@" "$arg" ;; 104f14f4646Smrg esac 105f14f4646Smrg shift # fnord 106f14f4646Smrg shift # $arg 107f14f4646Smrg done 108f14f4646Smrg "$@" 1095dfecf96Smrg stat=$? 1105dfecf96Smrg if test $stat -eq 0; then : 1115dfecf96Smrg else 1125dfecf96Smrg rm -f "$tmpdepfile" 1135dfecf96Smrg exit $stat 1145dfecf96Smrg fi 1155dfecf96Smrg mv "$tmpdepfile" "$depfile" 1165dfecf96Smrg ;; 1175dfecf96Smrg 1185dfecf96Smrggcc) 1195dfecf96Smrg## There are various ways to get dependency output from gcc. Here's 1205dfecf96Smrg## why we pick this rather obscure method: 1215dfecf96Smrg## - Don't want to use -MD because we'd like the dependencies to end 1225dfecf96Smrg## up in a subdir. Having to rename by hand is ugly. 1235dfecf96Smrg## (We might end up doing this anyway to support other compilers.) 1245dfecf96Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1255dfecf96Smrg## -MM, not -M (despite what the docs say). 1265dfecf96Smrg## - Using -M directly means running the compiler twice (even worse 1275dfecf96Smrg## than renaming). 1285dfecf96Smrg if test -z "$gccflag"; then 1295dfecf96Smrg gccflag=-MD, 1305dfecf96Smrg fi 1315dfecf96Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1325dfecf96Smrg stat=$? 1335dfecf96Smrg if test $stat -eq 0; then : 1345dfecf96Smrg else 1355dfecf96Smrg rm -f "$tmpdepfile" 1365dfecf96Smrg exit $stat 1375dfecf96Smrg fi 1385dfecf96Smrg rm -f "$depfile" 1395dfecf96Smrg echo "$object : \\" > "$depfile" 1405dfecf96Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1415dfecf96Smrg## The second -e expression handles DOS-style file names with drive letters. 1425dfecf96Smrg sed -e 's/^[^:]*: / /' \ 1435dfecf96Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1445dfecf96Smrg## This next piece of magic avoids the `deleted header file' problem. 1455dfecf96Smrg## The problem is that when a header file which appears in a .P file 1465dfecf96Smrg## is deleted, the dependency causes make to die (because there is 1475dfecf96Smrg## typically no way to rebuild the header). We avoid this by adding 1485dfecf96Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1495dfecf96Smrg## this for us directly. 1505dfecf96Smrg tr ' ' ' 1515dfecf96Smrg' < "$tmpdepfile" | 1525dfecf96Smrg## Some versions of gcc put a space before the `:'. On the theory 1535dfecf96Smrg## that the space means something, we add a space to the output as 1545dfecf96Smrg## well. 1555dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1565dfecf96Smrg## correctly. Breaking it into two sed invocations is a workaround. 1575dfecf96Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1585dfecf96Smrg rm -f "$tmpdepfile" 1595dfecf96Smrg ;; 1605dfecf96Smrg 1615dfecf96Smrghp) 1625dfecf96Smrg # This case exists only to let depend.m4 do its work. It works by 1635dfecf96Smrg # looking at the text of this script. This case will never be run, 1645dfecf96Smrg # since it is checked for above. 1655dfecf96Smrg exit 1 1665dfecf96Smrg ;; 1675dfecf96Smrg 1685dfecf96Smrgsgi) 1695dfecf96Smrg if test "$libtool" = yes; then 1705dfecf96Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1715dfecf96Smrg else 1725dfecf96Smrg "$@" -MDupdate "$tmpdepfile" 1735dfecf96Smrg fi 1745dfecf96Smrg stat=$? 1755dfecf96Smrg if test $stat -eq 0; then : 1765dfecf96Smrg else 1775dfecf96Smrg rm -f "$tmpdepfile" 1785dfecf96Smrg exit $stat 1795dfecf96Smrg fi 1805dfecf96Smrg rm -f "$depfile" 1815dfecf96Smrg 1825dfecf96Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1835dfecf96Smrg echo "$object : \\" > "$depfile" 1845dfecf96Smrg 1855dfecf96Smrg # Clip off the initial element (the dependent). Don't try to be 1865dfecf96Smrg # clever and replace this with sed code, as IRIX sed won't handle 1875dfecf96Smrg # lines with more than a fixed number of characters (4096 in 1885dfecf96Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1895dfecf96Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1905dfecf96Smrg # dependency line. 1915dfecf96Smrg tr ' ' ' 1925dfecf96Smrg' < "$tmpdepfile" \ 1935dfecf96Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1945dfecf96Smrg tr ' 1955dfecf96Smrg' ' ' >> $depfile 1965dfecf96Smrg echo >> $depfile 1975dfecf96Smrg 1985dfecf96Smrg # The second pass generates a dummy entry for each header file. 1995dfecf96Smrg tr ' ' ' 2005dfecf96Smrg' < "$tmpdepfile" \ 2015dfecf96Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2025dfecf96Smrg >> $depfile 2035dfecf96Smrg else 2045dfecf96Smrg # The sourcefile does not contain any dependencies, so just 2055dfecf96Smrg # store a dummy comment line, to avoid errors with the Makefile 2065dfecf96Smrg # "include basename.Plo" scheme. 2075dfecf96Smrg echo "#dummy" > "$depfile" 2085dfecf96Smrg fi 2095dfecf96Smrg rm -f "$tmpdepfile" 2105dfecf96Smrg ;; 2115dfecf96Smrg 2125dfecf96Smrgaix) 2135dfecf96Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2145dfecf96Smrg # in a .u file. In older versions, this file always lives in the 2155dfecf96Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2165dfecf96Smrg # start of each line; $object doesn't have directory information. 2175dfecf96Smrg # Version 6 uses the directory in both cases. 218f14f4646Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 219f14f4646Smrg test "x$dir" = "x$object" && dir= 220f14f4646Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2215dfecf96Smrg if test "$libtool" = yes; then 222f14f4646Smrg tmpdepfile1=$dir$base.u 223f14f4646Smrg tmpdepfile2=$base.u 224f14f4646Smrg tmpdepfile3=$dir.libs/$base.u 2255dfecf96Smrg "$@" -Wc,-M 2265dfecf96Smrg else 227f14f4646Smrg tmpdepfile1=$dir$base.u 228f14f4646Smrg tmpdepfile2=$dir$base.u 229f14f4646Smrg tmpdepfile3=$dir$base.u 2305dfecf96Smrg "$@" -M 2315dfecf96Smrg fi 2325dfecf96Smrg stat=$? 2335dfecf96Smrg 2345dfecf96Smrg if test $stat -eq 0; then : 2355dfecf96Smrg else 236f14f4646Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2375dfecf96Smrg exit $stat 2385dfecf96Smrg fi 2395dfecf96Smrg 240f14f4646Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 241f14f4646Smrg do 242f14f4646Smrg test -f "$tmpdepfile" && break 243f14f4646Smrg done 2445dfecf96Smrg if test -f "$tmpdepfile"; then 2455dfecf96Smrg # Each line is of the form `foo.o: dependent.h'. 2465dfecf96Smrg # Do two passes, one to just change these to 2475dfecf96Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 248f14f4646Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 249f14f4646Smrg # That's a tab and a space in the []. 250f14f4646Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2515dfecf96Smrg else 2525dfecf96Smrg # The sourcefile does not contain any dependencies, so just 2535dfecf96Smrg # store a dummy comment line, to avoid errors with the Makefile 2545dfecf96Smrg # "include basename.Plo" scheme. 2555dfecf96Smrg echo "#dummy" > "$depfile" 2565dfecf96Smrg fi 2575dfecf96Smrg rm -f "$tmpdepfile" 2585dfecf96Smrg ;; 2595dfecf96Smrg 2605dfecf96Smrgicc) 2615dfecf96Smrg # Intel's C compiler understands `-MD -MF file'. However on 2625dfecf96Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2635dfecf96Smrg # ICC 7.0 will fill foo.d with something like 2645dfecf96Smrg # foo.o: sub/foo.c 2655dfecf96Smrg # foo.o: sub/foo.h 2665dfecf96Smrg # which is wrong. We want: 2675dfecf96Smrg # sub/foo.o: sub/foo.c 2685dfecf96Smrg # sub/foo.o: sub/foo.h 2695dfecf96Smrg # sub/foo.c: 2705dfecf96Smrg # sub/foo.h: 2715dfecf96Smrg # ICC 7.1 will output 2725dfecf96Smrg # foo.o: sub/foo.c sub/foo.h 2735dfecf96Smrg # and will wrap long lines using \ : 2745dfecf96Smrg # foo.o: sub/foo.c ... \ 2755dfecf96Smrg # sub/foo.h ... \ 2765dfecf96Smrg # ... 2775dfecf96Smrg 2785dfecf96Smrg "$@" -MD -MF "$tmpdepfile" 2795dfecf96Smrg stat=$? 2805dfecf96Smrg if test $stat -eq 0; then : 2815dfecf96Smrg else 2825dfecf96Smrg rm -f "$tmpdepfile" 2835dfecf96Smrg exit $stat 2845dfecf96Smrg fi 2855dfecf96Smrg rm -f "$depfile" 2865dfecf96Smrg # Each line is of the form `foo.o: dependent.h', 2875dfecf96Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2885dfecf96Smrg # Do two passes, one to just change these to 2895dfecf96Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2905dfecf96Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2915dfecf96Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2925dfecf96Smrg # correctly. Breaking it into two sed invocations is a workaround. 2935dfecf96Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2945dfecf96Smrg sed -e 's/$/ :/' >> "$depfile" 2955dfecf96Smrg rm -f "$tmpdepfile" 2965dfecf96Smrg ;; 2975dfecf96Smrg 298f14f4646Smrghp2) 299f14f4646Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 300f14f4646Smrg # compilers, which have integrated preprocessors. The correct option 301f14f4646Smrg # to use with these is +Maked; it writes dependencies to a file named 302f14f4646Smrg # 'foo.d', which lands next to the object file, wherever that 303f14f4646Smrg # happens to be. 304f14f4646Smrg # Much of this is similar to the tru64 case; see comments there. 305f14f4646Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 306f14f4646Smrg test "x$dir" = "x$object" && dir= 307f14f4646Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 308f14f4646Smrg if test "$libtool" = yes; then 309f14f4646Smrg tmpdepfile1=$dir$base.d 310f14f4646Smrg tmpdepfile2=$dir.libs/$base.d 311f14f4646Smrg "$@" -Wc,+Maked 312f14f4646Smrg else 313f14f4646Smrg tmpdepfile1=$dir$base.d 314f14f4646Smrg tmpdepfile2=$dir$base.d 315f14f4646Smrg "$@" +Maked 316f14f4646Smrg fi 317f14f4646Smrg stat=$? 318f14f4646Smrg if test $stat -eq 0; then : 319f14f4646Smrg else 320f14f4646Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 321f14f4646Smrg exit $stat 322f14f4646Smrg fi 323f14f4646Smrg 324f14f4646Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 325f14f4646Smrg do 326f14f4646Smrg test -f "$tmpdepfile" && break 327f14f4646Smrg done 328f14f4646Smrg if test -f "$tmpdepfile"; then 329f14f4646Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 330f14f4646Smrg # Add `dependent.h:' lines. 331f14f4646Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 332f14f4646Smrg else 333f14f4646Smrg echo "#dummy" > "$depfile" 334f14f4646Smrg fi 335f14f4646Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 336f14f4646Smrg ;; 337f14f4646Smrg 3385dfecf96Smrgtru64) 3395dfecf96Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3405dfecf96Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3415dfecf96Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3425dfecf96Smrg # dependencies in `foo.d' instead, so we check for that too. 3435dfecf96Smrg # Subdirectories are respected. 3445dfecf96Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3455dfecf96Smrg test "x$dir" = "x$object" && dir= 3465dfecf96Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3475dfecf96Smrg 3485dfecf96Smrg if test "$libtool" = yes; then 3495dfecf96Smrg # With Tru64 cc, shared objects can also be used to make a 350f14f4646Smrg # static library. This mechanism is used in libtool 1.4 series to 3515dfecf96Smrg # handle both shared and static libraries in a single compilation. 3525dfecf96Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3535dfecf96Smrg # 3545dfecf96Smrg # With libtool 1.5 this exception was removed, and libtool now 3555dfecf96Smrg # generates 2 separate objects for the 2 libraries. These two 356f14f4646Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3575dfecf96Smrg # in $dir$base.o.d. We have to check for both files, because 3585dfecf96Smrg # one of the two compilations can be disabled. We should prefer 3595dfecf96Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3605dfecf96Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3615dfecf96Smrg # the former would cause a distcleancheck panic. 3625dfecf96Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3635dfecf96Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3645dfecf96Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3655dfecf96Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3665dfecf96Smrg "$@" -Wc,-MD 3675dfecf96Smrg else 3685dfecf96Smrg tmpdepfile1=$dir$base.o.d 3695dfecf96Smrg tmpdepfile2=$dir$base.d 3705dfecf96Smrg tmpdepfile3=$dir$base.d 3715dfecf96Smrg tmpdepfile4=$dir$base.d 3725dfecf96Smrg "$@" -MD 3735dfecf96Smrg fi 3745dfecf96Smrg 3755dfecf96Smrg stat=$? 3765dfecf96Smrg if test $stat -eq 0; then : 3775dfecf96Smrg else 3785dfecf96Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3795dfecf96Smrg exit $stat 3805dfecf96Smrg fi 3815dfecf96Smrg 3825dfecf96Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3835dfecf96Smrg do 3845dfecf96Smrg test -f "$tmpdepfile" && break 3855dfecf96Smrg done 3865dfecf96Smrg if test -f "$tmpdepfile"; then 3875dfecf96Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3885dfecf96Smrg # That's a tab and a space in the []. 3895dfecf96Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3905dfecf96Smrg else 3915dfecf96Smrg echo "#dummy" > "$depfile" 3925dfecf96Smrg fi 3935dfecf96Smrg rm -f "$tmpdepfile" 3945dfecf96Smrg ;; 3955dfecf96Smrg 3965dfecf96Smrg#nosideeffect) 3975dfecf96Smrg # This comment above is used by automake to tell side-effect 3985dfecf96Smrg # dependency tracking mechanisms from slower ones. 3995dfecf96Smrg 4005dfecf96Smrgdashmstdout) 4015dfecf96Smrg # Important note: in order to support this mode, a compiler *must* 4025dfecf96Smrg # always write the preprocessed file to stdout, regardless of -o. 4035dfecf96Smrg "$@" || exit $? 4045dfecf96Smrg 4055dfecf96Smrg # Remove the call to Libtool. 4065dfecf96Smrg if test "$libtool" = yes; then 4075dfecf96Smrg while test $1 != '--mode=compile'; do 4085dfecf96Smrg shift 4095dfecf96Smrg done 4105dfecf96Smrg shift 4115dfecf96Smrg fi 4125dfecf96Smrg 4135dfecf96Smrg # Remove `-o $object'. 4145dfecf96Smrg IFS=" " 4155dfecf96Smrg for arg 4165dfecf96Smrg do 4175dfecf96Smrg case $arg in 4185dfecf96Smrg -o) 4195dfecf96Smrg shift 4205dfecf96Smrg ;; 4215dfecf96Smrg $object) 4225dfecf96Smrg shift 4235dfecf96Smrg ;; 4245dfecf96Smrg *) 4255dfecf96Smrg set fnord "$@" "$arg" 4265dfecf96Smrg shift # fnord 4275dfecf96Smrg shift # $arg 4285dfecf96Smrg ;; 4295dfecf96Smrg esac 4305dfecf96Smrg done 4315dfecf96Smrg 4325dfecf96Smrg test -z "$dashmflag" && dashmflag=-M 4335dfecf96Smrg # Require at least two characters before searching for `:' 4345dfecf96Smrg # in the target name. This is to cope with DOS-style filenames: 4355dfecf96Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4365dfecf96Smrg "$@" $dashmflag | 4375dfecf96Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4385dfecf96Smrg rm -f "$depfile" 4395dfecf96Smrg cat < "$tmpdepfile" > "$depfile" 4405dfecf96Smrg tr ' ' ' 4415dfecf96Smrg' < "$tmpdepfile" | \ 4425dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4435dfecf96Smrg## correctly. Breaking it into two sed invocations is a workaround. 4445dfecf96Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4455dfecf96Smrg rm -f "$tmpdepfile" 4465dfecf96Smrg ;; 4475dfecf96Smrg 4485dfecf96SmrgdashXmstdout) 4495dfecf96Smrg # This case only exists to satisfy depend.m4. It is never actually 4505dfecf96Smrg # run, as this mode is specially recognized in the preamble. 4515dfecf96Smrg exit 1 4525dfecf96Smrg ;; 4535dfecf96Smrg 4545dfecf96Smrgmakedepend) 4555dfecf96Smrg "$@" || exit $? 4565dfecf96Smrg # Remove any Libtool call 4575dfecf96Smrg if test "$libtool" = yes; then 4585dfecf96Smrg while test $1 != '--mode=compile'; do 4595dfecf96Smrg shift 4605dfecf96Smrg done 4615dfecf96Smrg shift 4625dfecf96Smrg fi 4635dfecf96Smrg # X makedepend 4645dfecf96Smrg shift 4655dfecf96Smrg cleared=no 4665dfecf96Smrg for arg in "$@"; do 4675dfecf96Smrg case $cleared in 4685dfecf96Smrg no) 4695dfecf96Smrg set ""; shift 4705dfecf96Smrg cleared=yes ;; 4715dfecf96Smrg esac 4725dfecf96Smrg case "$arg" in 4735dfecf96Smrg -D*|-I*) 4745dfecf96Smrg set fnord "$@" "$arg"; shift ;; 4755dfecf96Smrg # Strip any option that makedepend may not understand. Remove 4765dfecf96Smrg # the object too, otherwise makedepend will parse it as a source file. 4775dfecf96Smrg -*|$object) 4785dfecf96Smrg ;; 4795dfecf96Smrg *) 4805dfecf96Smrg set fnord "$@" "$arg"; shift ;; 4815dfecf96Smrg esac 4825dfecf96Smrg done 4835dfecf96Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4845dfecf96Smrg touch "$tmpdepfile" 4855dfecf96Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4865dfecf96Smrg rm -f "$depfile" 4875dfecf96Smrg cat < "$tmpdepfile" > "$depfile" 4885dfecf96Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4895dfecf96Smrg' | \ 4905dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4915dfecf96Smrg## correctly. Breaking it into two sed invocations is a workaround. 4925dfecf96Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4935dfecf96Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4945dfecf96Smrg ;; 4955dfecf96Smrg 4965dfecf96Smrgcpp) 4975dfecf96Smrg # Important note: in order to support this mode, a compiler *must* 4985dfecf96Smrg # always write the preprocessed file to stdout. 4995dfecf96Smrg "$@" || exit $? 5005dfecf96Smrg 5015dfecf96Smrg # Remove the call to Libtool. 5025dfecf96Smrg if test "$libtool" = yes; then 5035dfecf96Smrg while test $1 != '--mode=compile'; do 5045dfecf96Smrg shift 5055dfecf96Smrg done 5065dfecf96Smrg shift 5075dfecf96Smrg fi 5085dfecf96Smrg 5095dfecf96Smrg # Remove `-o $object'. 5105dfecf96Smrg IFS=" " 5115dfecf96Smrg for arg 5125dfecf96Smrg do 5135dfecf96Smrg case $arg in 5145dfecf96Smrg -o) 5155dfecf96Smrg shift 5165dfecf96Smrg ;; 5175dfecf96Smrg $object) 5185dfecf96Smrg shift 5195dfecf96Smrg ;; 5205dfecf96Smrg *) 5215dfecf96Smrg set fnord "$@" "$arg" 5225dfecf96Smrg shift # fnord 5235dfecf96Smrg shift # $arg 5245dfecf96Smrg ;; 5255dfecf96Smrg esac 5265dfecf96Smrg done 5275dfecf96Smrg 5285dfecf96Smrg "$@" -E | 5295dfecf96Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5305dfecf96Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5315dfecf96Smrg sed '$ s: \\$::' > "$tmpdepfile" 5325dfecf96Smrg rm -f "$depfile" 5335dfecf96Smrg echo "$object : \\" > "$depfile" 5345dfecf96Smrg cat < "$tmpdepfile" >> "$depfile" 5355dfecf96Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5365dfecf96Smrg rm -f "$tmpdepfile" 5375dfecf96Smrg ;; 5385dfecf96Smrg 5395dfecf96Smrgmsvisualcpp) 5405dfecf96Smrg # Important note: in order to support this mode, a compiler *must* 5415dfecf96Smrg # always write the preprocessed file to stdout, regardless of -o, 5425dfecf96Smrg # because we must use -o when running libtool. 5435dfecf96Smrg "$@" || exit $? 5445dfecf96Smrg IFS=" " 5455dfecf96Smrg for arg 5465dfecf96Smrg do 5475dfecf96Smrg case "$arg" in 5485dfecf96Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5495dfecf96Smrg set fnord "$@" 5505dfecf96Smrg shift 5515dfecf96Smrg shift 5525dfecf96Smrg ;; 5535dfecf96Smrg *) 5545dfecf96Smrg set fnord "$@" "$arg" 5555dfecf96Smrg shift 5565dfecf96Smrg shift 5575dfecf96Smrg ;; 5585dfecf96Smrg esac 5595dfecf96Smrg done 5605dfecf96Smrg "$@" -E | 5615dfecf96Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5625dfecf96Smrg rm -f "$depfile" 5635dfecf96Smrg echo "$object : \\" > "$depfile" 5645dfecf96Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5655dfecf96Smrg echo " " >> "$depfile" 5665dfecf96Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5675dfecf96Smrg rm -f "$tmpdepfile" 5685dfecf96Smrg ;; 5695dfecf96Smrg 5705dfecf96Smrgnone) 5715dfecf96Smrg exec "$@" 5725dfecf96Smrg ;; 5735dfecf96Smrg 5745dfecf96Smrg*) 5755dfecf96Smrg echo "Unknown depmode $depmode" 1>&2 5765dfecf96Smrg exit 1 5775dfecf96Smrg ;; 5785dfecf96Smrgesac 5795dfecf96Smrg 5805dfecf96Smrgexit 0 5815dfecf96Smrg 5825dfecf96Smrg# Local Variables: 5835dfecf96Smrg# mode: shell-script 5845dfecf96Smrg# sh-indentation: 2 5855dfecf96Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5865dfecf96Smrg# time-stamp-start: "scriptversion=" 5875dfecf96Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5885dfecf96Smrg# time-stamp-end: "$" 5895dfecf96Smrg# End: 590