depcomp revision 5977a007
18108eb18Smrg#! /bin/sh 28108eb18Smrg# depcomp - compile a program generating dependencies as side-effects 31a650d1eSmrg 45977a007Smrgscriptversion=2011-12-04.11; # UTC 51a650d1eSmrg 65977a007Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 75977a007Smrg# 2011 Free Software Foundation, Inc. 88108eb18Smrg 98108eb18Smrg# This program is free software; you can redistribute it and/or modify 108108eb18Smrg# it under the terms of the GNU General Public License as published by 118108eb18Smrg# the Free Software Foundation; either version 2, or (at your option) 128108eb18Smrg# any later version. 138108eb18Smrg 148108eb18Smrg# This program is distributed in the hope that it will be useful, 158108eb18Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 168108eb18Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 178108eb18Smrg# GNU General Public License for more details. 188108eb18Smrg 198108eb18Smrg# You should have received a copy of the GNU General Public License 201a650d1eSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 218108eb18Smrg 228108eb18Smrg# As a special exception to the GNU General Public License, if you 238108eb18Smrg# distribute this file as part of a program that contains a 248108eb18Smrg# configuration script generated by Autoconf, you may include it under 258108eb18Smrg# the same distribution terms that you use for the rest of that program. 268108eb18Smrg 278108eb18Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 288108eb18Smrg 291a650d1eSmrgcase $1 in 301a650d1eSmrg '') 311a650d1eSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 321a650d1eSmrg exit 1; 331a650d1eSmrg ;; 341a650d1eSmrg -h | --h*) 351a650d1eSmrg cat <<\EOF 361a650d1eSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 371a650d1eSmrg 381a650d1eSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 391a650d1eSmrgas side-effects. 401a650d1eSmrg 411a650d1eSmrgEnvironment variables: 421a650d1eSmrg depmode Dependency tracking mode. 431a650d1eSmrg source Source file read by `PROGRAMS ARGS'. 441a650d1eSmrg object Object file output by `PROGRAMS ARGS'. 451a650d1eSmrg DEPDIR directory where to store dependencies. 461a650d1eSmrg depfile Dependency file to output. 475977a007Smrg tmpdepfile Temporary file to use when outputting dependencies. 481a650d1eSmrg libtool Whether libtool is used (yes/no). 491a650d1eSmrg 501a650d1eSmrgReport bugs to <bug-automake@gnu.org>. 511a650d1eSmrgEOF 521a650d1eSmrg exit $? 531a650d1eSmrg ;; 541a650d1eSmrg -v | --v*) 551a650d1eSmrg echo "depcomp $scriptversion" 561a650d1eSmrg exit $? 571a650d1eSmrg ;; 581a650d1eSmrgesac 591a650d1eSmrg 608108eb18Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 618108eb18Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 628108eb18Smrg exit 1 638108eb18Smrgfi 648108eb18Smrg 651a650d1eSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 661a650d1eSmrgdepfile=${depfile-`echo "$object" | 671a650d1eSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 688108eb18Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 698108eb18Smrg 708108eb18Smrgrm -f "$tmpdepfile" 718108eb18Smrg 728108eb18Smrg# Some modes work just like other modes, but use different flags. We 738108eb18Smrg# parameterize here, but still list the modes in the big case below, 748108eb18Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 758108eb18Smrg# here, because this file can only contain one case statement. 768108eb18Smrgif test "$depmode" = hp; then 778108eb18Smrg # HP compiler uses -M and no extra arg. 788108eb18Smrg gccflag=-M 798108eb18Smrg depmode=gcc 808108eb18Smrgfi 818108eb18Smrg 828108eb18Smrgif test "$depmode" = dashXmstdout; then 838108eb18Smrg # This is just like dashmstdout with a different argument. 848108eb18Smrg dashmflag=-xM 858108eb18Smrg depmode=dashmstdout 868108eb18Smrgfi 878108eb18Smrg 881a650d1eSmrgcygpath_u="cygpath -u -f -" 891a650d1eSmrgif test "$depmode" = msvcmsys; then 901a650d1eSmrg # This is just like msvisualcpp but w/o cygpath translation. 911a650d1eSmrg # Just convert the backslash-escaped backslashes to single forward 921a650d1eSmrg # slashes to satisfy depend.m4 935977a007Smrg cygpath_u='sed s,\\\\,/,g' 941a650d1eSmrg depmode=msvisualcpp 951a650d1eSmrgfi 961a650d1eSmrg 975977a007Smrgif test "$depmode" = msvc7msys; then 985977a007Smrg # This is just like msvc7 but w/o cygpath translation. 995977a007Smrg # Just convert the backslash-escaped backslashes to single forward 1005977a007Smrg # slashes to satisfy depend.m4 1015977a007Smrg cygpath_u='sed s,\\\\,/,g' 1025977a007Smrg depmode=msvc7 1035977a007Smrgfi 1045977a007Smrg 1058108eb18Smrgcase "$depmode" in 1068108eb18Smrggcc3) 1078108eb18Smrg## gcc 3 implements dependency tracking that does exactly what 1088108eb18Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1098108eb18Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1101a650d1eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1111a650d1eSmrg## the command line argument order; so add the flags where they 1121a650d1eSmrg## appear in depend2.am. Note that the slowdown incurred here 1131a650d1eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1141a650d1eSmrg for arg 1151a650d1eSmrg do 1161a650d1eSmrg case $arg in 1171a650d1eSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1181a650d1eSmrg *) set fnord "$@" "$arg" ;; 1191a650d1eSmrg esac 1201a650d1eSmrg shift # fnord 1211a650d1eSmrg shift # $arg 1221a650d1eSmrg done 1231a650d1eSmrg "$@" 1248108eb18Smrg stat=$? 1258108eb18Smrg if test $stat -eq 0; then : 1268108eb18Smrg else 1278108eb18Smrg rm -f "$tmpdepfile" 1288108eb18Smrg exit $stat 1298108eb18Smrg fi 1308108eb18Smrg mv "$tmpdepfile" "$depfile" 1318108eb18Smrg ;; 1328108eb18Smrg 1338108eb18Smrggcc) 1348108eb18Smrg## There are various ways to get dependency output from gcc. Here's 1358108eb18Smrg## why we pick this rather obscure method: 1368108eb18Smrg## - Don't want to use -MD because we'd like the dependencies to end 1378108eb18Smrg## up in a subdir. Having to rename by hand is ugly. 1388108eb18Smrg## (We might end up doing this anyway to support other compilers.) 1398108eb18Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1408108eb18Smrg## -MM, not -M (despite what the docs say). 1418108eb18Smrg## - Using -M directly means running the compiler twice (even worse 1428108eb18Smrg## than renaming). 1438108eb18Smrg if test -z "$gccflag"; then 1448108eb18Smrg gccflag=-MD, 1458108eb18Smrg fi 1468108eb18Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1478108eb18Smrg stat=$? 1488108eb18Smrg if test $stat -eq 0; then : 1498108eb18Smrg else 1508108eb18Smrg rm -f "$tmpdepfile" 1518108eb18Smrg exit $stat 1528108eb18Smrg fi 1538108eb18Smrg rm -f "$depfile" 1548108eb18Smrg echo "$object : \\" > "$depfile" 1558108eb18Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1568108eb18Smrg## The second -e expression handles DOS-style file names with drive letters. 1578108eb18Smrg sed -e 's/^[^:]*: / /' \ 1588108eb18Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1598108eb18Smrg## This next piece of magic avoids the `deleted header file' problem. 1608108eb18Smrg## The problem is that when a header file which appears in a .P file 1618108eb18Smrg## is deleted, the dependency causes make to die (because there is 1628108eb18Smrg## typically no way to rebuild the header). We avoid this by adding 1638108eb18Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1648108eb18Smrg## this for us directly. 1658108eb18Smrg tr ' ' ' 1668108eb18Smrg' < "$tmpdepfile" | 1678108eb18Smrg## Some versions of gcc put a space before the `:'. On the theory 1688108eb18Smrg## that the space means something, we add a space to the output as 1695977a007Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 1705977a007Smrg## to the object. Take care to not repeat it in the output. 1718108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1728108eb18Smrg## correctly. Breaking it into two sed invocations is a workaround. 1735977a007Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1745977a007Smrg | sed -e 's/$/ :/' >> "$depfile" 1758108eb18Smrg rm -f "$tmpdepfile" 1768108eb18Smrg ;; 1778108eb18Smrg 1788108eb18Smrghp) 1798108eb18Smrg # This case exists only to let depend.m4 do its work. It works by 1808108eb18Smrg # looking at the text of this script. This case will never be run, 1818108eb18Smrg # since it is checked for above. 1828108eb18Smrg exit 1 1838108eb18Smrg ;; 1848108eb18Smrg 1858108eb18Smrgsgi) 1868108eb18Smrg if test "$libtool" = yes; then 1878108eb18Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1888108eb18Smrg else 1898108eb18Smrg "$@" -MDupdate "$tmpdepfile" 1908108eb18Smrg fi 1918108eb18Smrg stat=$? 1928108eb18Smrg if test $stat -eq 0; then : 1938108eb18Smrg else 1948108eb18Smrg rm -f "$tmpdepfile" 1958108eb18Smrg exit $stat 1968108eb18Smrg fi 1978108eb18Smrg rm -f "$depfile" 1988108eb18Smrg 1998108eb18Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2008108eb18Smrg echo "$object : \\" > "$depfile" 2018108eb18Smrg 2028108eb18Smrg # Clip off the initial element (the dependent). Don't try to be 2038108eb18Smrg # clever and replace this with sed code, as IRIX sed won't handle 2048108eb18Smrg # lines with more than a fixed number of characters (4096 in 2058108eb18Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2068108eb18Smrg # the IRIX cc adds comments like `#:fec' to the end of the 2078108eb18Smrg # dependency line. 2088108eb18Smrg tr ' ' ' 2098108eb18Smrg' < "$tmpdepfile" \ 2108108eb18Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2118108eb18Smrg tr ' 2121a650d1eSmrg' ' ' >> "$depfile" 2131a650d1eSmrg echo >> "$depfile" 2148108eb18Smrg 2158108eb18Smrg # The second pass generates a dummy entry for each header file. 2168108eb18Smrg tr ' ' ' 2178108eb18Smrg' < "$tmpdepfile" \ 2188108eb18Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2191a650d1eSmrg >> "$depfile" 2208108eb18Smrg else 2218108eb18Smrg # The sourcefile does not contain any dependencies, so just 2228108eb18Smrg # store a dummy comment line, to avoid errors with the Makefile 2238108eb18Smrg # "include basename.Plo" scheme. 2248108eb18Smrg echo "#dummy" > "$depfile" 2258108eb18Smrg fi 2268108eb18Smrg rm -f "$tmpdepfile" 2278108eb18Smrg ;; 2288108eb18Smrg 2298108eb18Smrgaix) 2308108eb18Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2318108eb18Smrg # in a .u file. In older versions, this file always lives in the 2328108eb18Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2338108eb18Smrg # start of each line; $object doesn't have directory information. 2348108eb18Smrg # Version 6 uses the directory in both cases. 2351a650d1eSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2361a650d1eSmrg test "x$dir" = "x$object" && dir= 2371a650d1eSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2388108eb18Smrg if test "$libtool" = yes; then 2391a650d1eSmrg tmpdepfile1=$dir$base.u 2401a650d1eSmrg tmpdepfile2=$base.u 2411a650d1eSmrg tmpdepfile3=$dir.libs/$base.u 2428108eb18Smrg "$@" -Wc,-M 2438108eb18Smrg else 2441a650d1eSmrg tmpdepfile1=$dir$base.u 2451a650d1eSmrg tmpdepfile2=$dir$base.u 2461a650d1eSmrg tmpdepfile3=$dir$base.u 2478108eb18Smrg "$@" -M 2488108eb18Smrg fi 2498108eb18Smrg stat=$? 2508108eb18Smrg 2518108eb18Smrg if test $stat -eq 0; then : 2528108eb18Smrg else 2531a650d1eSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2548108eb18Smrg exit $stat 2558108eb18Smrg fi 2568108eb18Smrg 2571a650d1eSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2581a650d1eSmrg do 2591a650d1eSmrg test -f "$tmpdepfile" && break 2601a650d1eSmrg done 2618108eb18Smrg if test -f "$tmpdepfile"; then 2628108eb18Smrg # Each line is of the form `foo.o: dependent.h'. 2638108eb18Smrg # Do two passes, one to just change these to 2648108eb18Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2651a650d1eSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2661a650d1eSmrg # That's a tab and a space in the []. 2671a650d1eSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2688108eb18Smrg else 2698108eb18Smrg # The sourcefile does not contain any dependencies, so just 2708108eb18Smrg # store a dummy comment line, to avoid errors with the Makefile 2718108eb18Smrg # "include basename.Plo" scheme. 2728108eb18Smrg echo "#dummy" > "$depfile" 2738108eb18Smrg fi 2748108eb18Smrg rm -f "$tmpdepfile" 2758108eb18Smrg ;; 2768108eb18Smrg 2778108eb18Smrgicc) 2788108eb18Smrg # Intel's C compiler understands `-MD -MF file'. However on 2798108eb18Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2808108eb18Smrg # ICC 7.0 will fill foo.d with something like 2818108eb18Smrg # foo.o: sub/foo.c 2828108eb18Smrg # foo.o: sub/foo.h 2838108eb18Smrg # which is wrong. We want: 2848108eb18Smrg # sub/foo.o: sub/foo.c 2858108eb18Smrg # sub/foo.o: sub/foo.h 2868108eb18Smrg # sub/foo.c: 2878108eb18Smrg # sub/foo.h: 2888108eb18Smrg # ICC 7.1 will output 2898108eb18Smrg # foo.o: sub/foo.c sub/foo.h 2908108eb18Smrg # and will wrap long lines using \ : 2918108eb18Smrg # foo.o: sub/foo.c ... \ 2928108eb18Smrg # sub/foo.h ... \ 2938108eb18Smrg # ... 2948108eb18Smrg 2958108eb18Smrg "$@" -MD -MF "$tmpdepfile" 2968108eb18Smrg stat=$? 2978108eb18Smrg if test $stat -eq 0; then : 2988108eb18Smrg else 2998108eb18Smrg rm -f "$tmpdepfile" 3008108eb18Smrg exit $stat 3018108eb18Smrg fi 3028108eb18Smrg rm -f "$depfile" 3038108eb18Smrg # Each line is of the form `foo.o: dependent.h', 3048108eb18Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 3058108eb18Smrg # Do two passes, one to just change these to 3068108eb18Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 3078108eb18Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 3088108eb18Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 3098108eb18Smrg # correctly. Breaking it into two sed invocations is a workaround. 3108108eb18Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3118108eb18Smrg sed -e 's/$/ :/' >> "$depfile" 3128108eb18Smrg rm -f "$tmpdepfile" 3138108eb18Smrg ;; 3148108eb18Smrg 3151a650d1eSmrghp2) 3161a650d1eSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3171a650d1eSmrg # compilers, which have integrated preprocessors. The correct option 3181a650d1eSmrg # to use with these is +Maked; it writes dependencies to a file named 3191a650d1eSmrg # 'foo.d', which lands next to the object file, wherever that 3201a650d1eSmrg # happens to be. 3211a650d1eSmrg # Much of this is similar to the tru64 case; see comments there. 3221a650d1eSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3231a650d1eSmrg test "x$dir" = "x$object" && dir= 3241a650d1eSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3251a650d1eSmrg if test "$libtool" = yes; then 3261a650d1eSmrg tmpdepfile1=$dir$base.d 3271a650d1eSmrg tmpdepfile2=$dir.libs/$base.d 3281a650d1eSmrg "$@" -Wc,+Maked 3291a650d1eSmrg else 3301a650d1eSmrg tmpdepfile1=$dir$base.d 3311a650d1eSmrg tmpdepfile2=$dir$base.d 3321a650d1eSmrg "$@" +Maked 3331a650d1eSmrg fi 3341a650d1eSmrg stat=$? 3351a650d1eSmrg if test $stat -eq 0; then : 3361a650d1eSmrg else 3371a650d1eSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3381a650d1eSmrg exit $stat 3391a650d1eSmrg fi 3401a650d1eSmrg 3411a650d1eSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3421a650d1eSmrg do 3431a650d1eSmrg test -f "$tmpdepfile" && break 3441a650d1eSmrg done 3451a650d1eSmrg if test -f "$tmpdepfile"; then 3461a650d1eSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3471a650d1eSmrg # Add `dependent.h:' lines. 3481a650d1eSmrg sed -ne '2,${ 3491a650d1eSmrg s/^ *// 3501a650d1eSmrg s/ \\*$// 3511a650d1eSmrg s/$/:/ 3521a650d1eSmrg p 3531a650d1eSmrg }' "$tmpdepfile" >> "$depfile" 3541a650d1eSmrg else 3551a650d1eSmrg echo "#dummy" > "$depfile" 3561a650d1eSmrg fi 3571a650d1eSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3581a650d1eSmrg ;; 3591a650d1eSmrg 3608108eb18Smrgtru64) 3618108eb18Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3628108eb18Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3638108eb18Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3648108eb18Smrg # dependencies in `foo.d' instead, so we check for that too. 3658108eb18Smrg # Subdirectories are respected. 3668108eb18Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3678108eb18Smrg test "x$dir" = "x$object" && dir= 3688108eb18Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3698108eb18Smrg 3708108eb18Smrg if test "$libtool" = yes; then 3711a650d1eSmrg # With Tru64 cc, shared objects can also be used to make a 3721a650d1eSmrg # static library. This mechanism is used in libtool 1.4 series to 3731a650d1eSmrg # handle both shared and static libraries in a single compilation. 3741a650d1eSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3751a650d1eSmrg # 3761a650d1eSmrg # With libtool 1.5 this exception was removed, and libtool now 3771a650d1eSmrg # generates 2 separate objects for the 2 libraries. These two 3781a650d1eSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3791a650d1eSmrg # in $dir$base.o.d. We have to check for both files, because 3801a650d1eSmrg # one of the two compilations can be disabled. We should prefer 3811a650d1eSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3821a650d1eSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3831a650d1eSmrg # the former would cause a distcleancheck panic. 3841a650d1eSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3851a650d1eSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3861a650d1eSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3871a650d1eSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3888108eb18Smrg "$@" -Wc,-MD 3898108eb18Smrg else 3901a650d1eSmrg tmpdepfile1=$dir$base.o.d 3911a650d1eSmrg tmpdepfile2=$dir$base.d 3921a650d1eSmrg tmpdepfile3=$dir$base.d 3931a650d1eSmrg tmpdepfile4=$dir$base.d 3948108eb18Smrg "$@" -MD 3958108eb18Smrg fi 3968108eb18Smrg 3978108eb18Smrg stat=$? 3988108eb18Smrg if test $stat -eq 0; then : 3998108eb18Smrg else 4001a650d1eSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4018108eb18Smrg exit $stat 4028108eb18Smrg fi 4038108eb18Smrg 4041a650d1eSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4051a650d1eSmrg do 4061a650d1eSmrg test -f "$tmpdepfile" && break 4071a650d1eSmrg done 4088108eb18Smrg if test -f "$tmpdepfile"; then 4098108eb18Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4108108eb18Smrg # That's a tab and a space in the []. 4118108eb18Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4128108eb18Smrg else 4138108eb18Smrg echo "#dummy" > "$depfile" 4148108eb18Smrg fi 4158108eb18Smrg rm -f "$tmpdepfile" 4168108eb18Smrg ;; 4178108eb18Smrg 4185977a007Smrgmsvc7) 4195977a007Smrg if test "$libtool" = yes; then 4205977a007Smrg showIncludes=-Wc,-showIncludes 4215977a007Smrg else 4225977a007Smrg showIncludes=-showIncludes 4235977a007Smrg fi 4245977a007Smrg "$@" $showIncludes > "$tmpdepfile" 4255977a007Smrg stat=$? 4265977a007Smrg grep -v '^Note: including file: ' "$tmpdepfile" 4275977a007Smrg if test "$stat" = 0; then : 4285977a007Smrg else 4295977a007Smrg rm -f "$tmpdepfile" 4305977a007Smrg exit $stat 4315977a007Smrg fi 4325977a007Smrg rm -f "$depfile" 4335977a007Smrg echo "$object : \\" > "$depfile" 4345977a007Smrg # The first sed program below extracts the file names and escapes 4355977a007Smrg # backslashes for cygpath. The second sed program outputs the file 4365977a007Smrg # name when reading, but also accumulates all include files in the 4375977a007Smrg # hold buffer in order to output them again at the end. This only 4385977a007Smrg # works with sed implementations that can handle large buffers. 4395977a007Smrg sed < "$tmpdepfile" -n ' 4405977a007Smrg/^Note: including file: *\(.*\)/ { 4415977a007Smrg s//\1/ 4425977a007Smrg s/\\/\\\\/g 4435977a007Smrg p 4445977a007Smrg}' | $cygpath_u | sort -u | sed -n ' 4455977a007Smrgs/ /\\ /g 4465977a007Smrgs/\(.*\)/ \1 \\/p 4475977a007Smrgs/.\(.*\) \\/\1:/ 4485977a007SmrgH 4495977a007Smrg$ { 4505977a007Smrg s/.*/ / 4515977a007Smrg G 4525977a007Smrg p 4535977a007Smrg}' >> "$depfile" 4545977a007Smrg rm -f "$tmpdepfile" 4555977a007Smrg ;; 4565977a007Smrg 4575977a007Smrgmsvc7msys) 4585977a007Smrg # This case exists only to let depend.m4 do its work. It works by 4595977a007Smrg # looking at the text of this script. This case will never be run, 4605977a007Smrg # since it is checked for above. 4615977a007Smrg exit 1 4625977a007Smrg ;; 4635977a007Smrg 4648108eb18Smrg#nosideeffect) 4658108eb18Smrg # This comment above is used by automake to tell side-effect 4668108eb18Smrg # dependency tracking mechanisms from slower ones. 4678108eb18Smrg 4688108eb18Smrgdashmstdout) 4698108eb18Smrg # Important note: in order to support this mode, a compiler *must* 4708108eb18Smrg # always write the preprocessed file to stdout, regardless of -o. 4718108eb18Smrg "$@" || exit $? 4728108eb18Smrg 4738108eb18Smrg # Remove the call to Libtool. 4748108eb18Smrg if test "$libtool" = yes; then 4751a650d1eSmrg while test "X$1" != 'X--mode=compile'; do 4768108eb18Smrg shift 4778108eb18Smrg done 4788108eb18Smrg shift 4798108eb18Smrg fi 4808108eb18Smrg 4818108eb18Smrg # Remove `-o $object'. 4828108eb18Smrg IFS=" " 4838108eb18Smrg for arg 4848108eb18Smrg do 4858108eb18Smrg case $arg in 4868108eb18Smrg -o) 4878108eb18Smrg shift 4888108eb18Smrg ;; 4898108eb18Smrg $object) 4908108eb18Smrg shift 4918108eb18Smrg ;; 4928108eb18Smrg *) 4938108eb18Smrg set fnord "$@" "$arg" 4948108eb18Smrg shift # fnord 4958108eb18Smrg shift # $arg 4968108eb18Smrg ;; 4978108eb18Smrg esac 4988108eb18Smrg done 4998108eb18Smrg 5008108eb18Smrg test -z "$dashmflag" && dashmflag=-M 5018108eb18Smrg # Require at least two characters before searching for `:' 5028108eb18Smrg # in the target name. This is to cope with DOS-style filenames: 5038108eb18Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 5048108eb18Smrg "$@" $dashmflag | 5058108eb18Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 5068108eb18Smrg rm -f "$depfile" 5078108eb18Smrg cat < "$tmpdepfile" > "$depfile" 5088108eb18Smrg tr ' ' ' 5098108eb18Smrg' < "$tmpdepfile" | \ 5108108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5118108eb18Smrg## correctly. Breaking it into two sed invocations is a workaround. 5128108eb18Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5138108eb18Smrg rm -f "$tmpdepfile" 5148108eb18Smrg ;; 5158108eb18Smrg 5168108eb18SmrgdashXmstdout) 5178108eb18Smrg # This case only exists to satisfy depend.m4. It is never actually 5188108eb18Smrg # run, as this mode is specially recognized in the preamble. 5198108eb18Smrg exit 1 5208108eb18Smrg ;; 5218108eb18Smrg 5228108eb18Smrgmakedepend) 5238108eb18Smrg "$@" || exit $? 5248108eb18Smrg # Remove any Libtool call 5258108eb18Smrg if test "$libtool" = yes; then 5261a650d1eSmrg while test "X$1" != 'X--mode=compile'; do 5278108eb18Smrg shift 5288108eb18Smrg done 5298108eb18Smrg shift 5308108eb18Smrg fi 5318108eb18Smrg # X makedepend 5328108eb18Smrg shift 5331a650d1eSmrg cleared=no eat=no 5341a650d1eSmrg for arg 5351a650d1eSmrg do 5368108eb18Smrg case $cleared in 5378108eb18Smrg no) 5388108eb18Smrg set ""; shift 5398108eb18Smrg cleared=yes ;; 5408108eb18Smrg esac 5411a650d1eSmrg if test $eat = yes; then 5421a650d1eSmrg eat=no 5431a650d1eSmrg continue 5441a650d1eSmrg fi 5458108eb18Smrg case "$arg" in 5468108eb18Smrg -D*|-I*) 5478108eb18Smrg set fnord "$@" "$arg"; shift ;; 5488108eb18Smrg # Strip any option that makedepend may not understand. Remove 5498108eb18Smrg # the object too, otherwise makedepend will parse it as a source file. 5501a650d1eSmrg -arch) 5511a650d1eSmrg eat=yes ;; 5528108eb18Smrg -*|$object) 5538108eb18Smrg ;; 5548108eb18Smrg *) 5558108eb18Smrg set fnord "$@" "$arg"; shift ;; 5568108eb18Smrg esac 5578108eb18Smrg done 5581a650d1eSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5598108eb18Smrg touch "$tmpdepfile" 5608108eb18Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5618108eb18Smrg rm -f "$depfile" 5625977a007Smrg # makedepend may prepend the VPATH from the source file name to the object. 5635977a007Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 5645977a007Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 5658108eb18Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5668108eb18Smrg' | \ 5678108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5688108eb18Smrg## correctly. Breaking it into two sed invocations is a workaround. 5698108eb18Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5708108eb18Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5718108eb18Smrg ;; 5728108eb18Smrg 5738108eb18Smrgcpp) 5748108eb18Smrg # Important note: in order to support this mode, a compiler *must* 5758108eb18Smrg # always write the preprocessed file to stdout. 5768108eb18Smrg "$@" || exit $? 5778108eb18Smrg 5788108eb18Smrg # Remove the call to Libtool. 5798108eb18Smrg if test "$libtool" = yes; then 5801a650d1eSmrg while test "X$1" != 'X--mode=compile'; do 5818108eb18Smrg shift 5828108eb18Smrg done 5838108eb18Smrg shift 5848108eb18Smrg fi 5858108eb18Smrg 5868108eb18Smrg # Remove `-o $object'. 5878108eb18Smrg IFS=" " 5888108eb18Smrg for arg 5898108eb18Smrg do 5908108eb18Smrg case $arg in 5918108eb18Smrg -o) 5928108eb18Smrg shift 5938108eb18Smrg ;; 5948108eb18Smrg $object) 5958108eb18Smrg shift 5968108eb18Smrg ;; 5978108eb18Smrg *) 5988108eb18Smrg set fnord "$@" "$arg" 5998108eb18Smrg shift # fnord 6008108eb18Smrg shift # $arg 6018108eb18Smrg ;; 6028108eb18Smrg esac 6038108eb18Smrg done 6048108eb18Smrg 6058108eb18Smrg "$@" -E | 6061a650d1eSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 6071a650d1eSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 6088108eb18Smrg sed '$ s: \\$::' > "$tmpdepfile" 6098108eb18Smrg rm -f "$depfile" 6108108eb18Smrg echo "$object : \\" > "$depfile" 6118108eb18Smrg cat < "$tmpdepfile" >> "$depfile" 6128108eb18Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6138108eb18Smrg rm -f "$tmpdepfile" 6148108eb18Smrg ;; 6158108eb18Smrg 6168108eb18Smrgmsvisualcpp) 6178108eb18Smrg # Important note: in order to support this mode, a compiler *must* 6181a650d1eSmrg # always write the preprocessed file to stdout. 6198108eb18Smrg "$@" || exit $? 6201a650d1eSmrg 6211a650d1eSmrg # Remove the call to Libtool. 6221a650d1eSmrg if test "$libtool" = yes; then 6231a650d1eSmrg while test "X$1" != 'X--mode=compile'; do 6241a650d1eSmrg shift 6251a650d1eSmrg done 6261a650d1eSmrg shift 6271a650d1eSmrg fi 6281a650d1eSmrg 6298108eb18Smrg IFS=" " 6308108eb18Smrg for arg 6318108eb18Smrg do 6328108eb18Smrg case "$arg" in 6331a650d1eSmrg -o) 6341a650d1eSmrg shift 6351a650d1eSmrg ;; 6361a650d1eSmrg $object) 6371a650d1eSmrg shift 6381a650d1eSmrg ;; 6398108eb18Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 6408108eb18Smrg set fnord "$@" 6418108eb18Smrg shift 6428108eb18Smrg shift 6438108eb18Smrg ;; 6448108eb18Smrg *) 6458108eb18Smrg set fnord "$@" "$arg" 6468108eb18Smrg shift 6478108eb18Smrg shift 6488108eb18Smrg ;; 6498108eb18Smrg esac 6508108eb18Smrg done 6511a650d1eSmrg "$@" -E 2>/dev/null | 6521a650d1eSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 6538108eb18Smrg rm -f "$depfile" 6548108eb18Smrg echo "$object : \\" > "$depfile" 6551a650d1eSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 6568108eb18Smrg echo " " >> "$depfile" 6571a650d1eSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6588108eb18Smrg rm -f "$tmpdepfile" 6598108eb18Smrg ;; 6608108eb18Smrg 6611a650d1eSmrgmsvcmsys) 6621a650d1eSmrg # This case exists only to let depend.m4 do its work. It works by 6631a650d1eSmrg # looking at the text of this script. This case will never be run, 6641a650d1eSmrg # since it is checked for above. 6651a650d1eSmrg exit 1 6661a650d1eSmrg ;; 6671a650d1eSmrg 6688108eb18Smrgnone) 6698108eb18Smrg exec "$@" 6708108eb18Smrg ;; 6718108eb18Smrg 6728108eb18Smrg*) 6738108eb18Smrg echo "Unknown depmode $depmode" 1>&2 6748108eb18Smrg exit 1 6758108eb18Smrg ;; 6768108eb18Smrgesac 6778108eb18Smrg 6788108eb18Smrgexit 0 6791a650d1eSmrg 6801a650d1eSmrg# Local Variables: 6811a650d1eSmrg# mode: shell-script 6821a650d1eSmrg# sh-indentation: 2 6831a650d1eSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6841a650d1eSmrg# time-stamp-start: "scriptversion=" 6851a650d1eSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6861a650d1eSmrg# time-stamp-time-zone: "UTC" 6871a650d1eSmrg# time-stamp-end: "; # UTC" 6881a650d1eSmrg# End: 689