depcomp revision 8b22bf3f
18b22bf3fSmrg#! /bin/sh 28b22bf3fSmrg# depcomp - compile a program generating dependencies as side-effects 38b22bf3fSmrg 48b22bf3fSmrgscriptversion=2006-10-15.18 58b22bf3fSmrg 68b22bf3fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 78b22bf3fSmrg# Foundation, Inc. 88b22bf3fSmrg 98b22bf3fSmrg# This program is free software; you can redistribute it and/or modify 108b22bf3fSmrg# it under the terms of the GNU General Public License as published by 118b22bf3fSmrg# the Free Software Foundation; either version 2, or (at your option) 128b22bf3fSmrg# any later version. 138b22bf3fSmrg 148b22bf3fSmrg# This program is distributed in the hope that it will be useful, 158b22bf3fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 168b22bf3fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 178b22bf3fSmrg# GNU General Public License for more details. 188b22bf3fSmrg 198b22bf3fSmrg# You should have received a copy of the GNU General Public License 208b22bf3fSmrg# along with this program; if not, write to the Free Software 218b22bf3fSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 228b22bf3fSmrg# 02110-1301, USA. 238b22bf3fSmrg 248b22bf3fSmrg# As a special exception to the GNU General Public License, if you 258b22bf3fSmrg# distribute this file as part of a program that contains a 268b22bf3fSmrg# configuration script generated by Autoconf, you may include it under 278b22bf3fSmrg# the same distribution terms that you use for the rest of that program. 288b22bf3fSmrg 298b22bf3fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 308b22bf3fSmrg 318b22bf3fSmrgcase $1 in 328b22bf3fSmrg '') 338b22bf3fSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 348b22bf3fSmrg exit 1; 358b22bf3fSmrg ;; 368b22bf3fSmrg -h | --h*) 378b22bf3fSmrg cat <<\EOF 388b22bf3fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 398b22bf3fSmrg 408b22bf3fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 418b22bf3fSmrgas side-effects. 428b22bf3fSmrg 438b22bf3fSmrgEnvironment variables: 448b22bf3fSmrg depmode Dependency tracking mode. 458b22bf3fSmrg source Source file read by `PROGRAMS ARGS'. 468b22bf3fSmrg object Object file output by `PROGRAMS ARGS'. 478b22bf3fSmrg DEPDIR directory where to store dependencies. 488b22bf3fSmrg depfile Dependency file to output. 498b22bf3fSmrg tmpdepfile Temporary file to use when outputing dependencies. 508b22bf3fSmrg libtool Whether libtool is used (yes/no). 518b22bf3fSmrg 528b22bf3fSmrgReport bugs to <bug-automake@gnu.org>. 538b22bf3fSmrgEOF 548b22bf3fSmrg exit $? 558b22bf3fSmrg ;; 568b22bf3fSmrg -v | --v*) 578b22bf3fSmrg echo "depcomp $scriptversion" 588b22bf3fSmrg exit $? 598b22bf3fSmrg ;; 608b22bf3fSmrgesac 618b22bf3fSmrg 628b22bf3fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 638b22bf3fSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 648b22bf3fSmrg exit 1 658b22bf3fSmrgfi 668b22bf3fSmrg 678b22bf3fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 688b22bf3fSmrgdepfile=${depfile-`echo "$object" | 698b22bf3fSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 708b22bf3fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 718b22bf3fSmrg 728b22bf3fSmrgrm -f "$tmpdepfile" 738b22bf3fSmrg 748b22bf3fSmrg# Some modes work just like other modes, but use different flags. We 758b22bf3fSmrg# parameterize here, but still list the modes in the big case below, 768b22bf3fSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 778b22bf3fSmrg# here, because this file can only contain one case statement. 788b22bf3fSmrgif test "$depmode" = hp; then 798b22bf3fSmrg # HP compiler uses -M and no extra arg. 808b22bf3fSmrg gccflag=-M 818b22bf3fSmrg depmode=gcc 828b22bf3fSmrgfi 838b22bf3fSmrg 848b22bf3fSmrgif test "$depmode" = dashXmstdout; then 858b22bf3fSmrg # This is just like dashmstdout with a different argument. 868b22bf3fSmrg dashmflag=-xM 878b22bf3fSmrg depmode=dashmstdout 888b22bf3fSmrgfi 898b22bf3fSmrg 908b22bf3fSmrgcase "$depmode" in 918b22bf3fSmrggcc3) 928b22bf3fSmrg## gcc 3 implements dependency tracking that does exactly what 938b22bf3fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 948b22bf3fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 958b22bf3fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 968b22bf3fSmrg## the command line argument order; so add the flags where they 978b22bf3fSmrg## appear in depend2.am. Note that the slowdown incurred here 988b22bf3fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 998b22bf3fSmrg for arg 1008b22bf3fSmrg do 1018b22bf3fSmrg case $arg in 1028b22bf3fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1038b22bf3fSmrg *) set fnord "$@" "$arg" ;; 1048b22bf3fSmrg esac 1058b22bf3fSmrg shift # fnord 1068b22bf3fSmrg shift # $arg 1078b22bf3fSmrg done 1088b22bf3fSmrg "$@" 1098b22bf3fSmrg stat=$? 1108b22bf3fSmrg if test $stat -eq 0; then : 1118b22bf3fSmrg else 1128b22bf3fSmrg rm -f "$tmpdepfile" 1138b22bf3fSmrg exit $stat 1148b22bf3fSmrg fi 1158b22bf3fSmrg mv "$tmpdepfile" "$depfile" 1168b22bf3fSmrg ;; 1178b22bf3fSmrg 1188b22bf3fSmrggcc) 1198b22bf3fSmrg## There are various ways to get dependency output from gcc. Here's 1208b22bf3fSmrg## why we pick this rather obscure method: 1218b22bf3fSmrg## - Don't want to use -MD because we'd like the dependencies to end 1228b22bf3fSmrg## up in a subdir. Having to rename by hand is ugly. 1238b22bf3fSmrg## (We might end up doing this anyway to support other compilers.) 1248b22bf3fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1258b22bf3fSmrg## -MM, not -M (despite what the docs say). 1268b22bf3fSmrg## - Using -M directly means running the compiler twice (even worse 1278b22bf3fSmrg## than renaming). 1288b22bf3fSmrg if test -z "$gccflag"; then 1298b22bf3fSmrg gccflag=-MD, 1308b22bf3fSmrg fi 1318b22bf3fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 1328b22bf3fSmrg stat=$? 1338b22bf3fSmrg if test $stat -eq 0; then : 1348b22bf3fSmrg else 1358b22bf3fSmrg rm -f "$tmpdepfile" 1368b22bf3fSmrg exit $stat 1378b22bf3fSmrg fi 1388b22bf3fSmrg rm -f "$depfile" 1398b22bf3fSmrg echo "$object : \\" > "$depfile" 1408b22bf3fSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1418b22bf3fSmrg## The second -e expression handles DOS-style file names with drive letters. 1428b22bf3fSmrg sed -e 's/^[^:]*: / /' \ 1438b22bf3fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1448b22bf3fSmrg## This next piece of magic avoids the `deleted header file' problem. 1458b22bf3fSmrg## The problem is that when a header file which appears in a .P file 1468b22bf3fSmrg## is deleted, the dependency causes make to die (because there is 1478b22bf3fSmrg## typically no way to rebuild the header). We avoid this by adding 1488b22bf3fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 1498b22bf3fSmrg## this for us directly. 1508b22bf3fSmrg tr ' ' ' 1518b22bf3fSmrg' < "$tmpdepfile" | 1528b22bf3fSmrg## Some versions of gcc put a space before the `:'. On the theory 1538b22bf3fSmrg## that the space means something, we add a space to the output as 1548b22bf3fSmrg## well. 1558b22bf3fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 1568b22bf3fSmrg## correctly. Breaking it into two sed invocations is a workaround. 1578b22bf3fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1588b22bf3fSmrg rm -f "$tmpdepfile" 1598b22bf3fSmrg ;; 1608b22bf3fSmrg 1618b22bf3fSmrghp) 1628b22bf3fSmrg # This case exists only to let depend.m4 do its work. It works by 1638b22bf3fSmrg # looking at the text of this script. This case will never be run, 1648b22bf3fSmrg # since it is checked for above. 1658b22bf3fSmrg exit 1 1668b22bf3fSmrg ;; 1678b22bf3fSmrg 1688b22bf3fSmrgsgi) 1698b22bf3fSmrg if test "$libtool" = yes; then 1708b22bf3fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1718b22bf3fSmrg else 1728b22bf3fSmrg "$@" -MDupdate "$tmpdepfile" 1738b22bf3fSmrg fi 1748b22bf3fSmrg stat=$? 1758b22bf3fSmrg if test $stat -eq 0; then : 1768b22bf3fSmrg else 1778b22bf3fSmrg rm -f "$tmpdepfile" 1788b22bf3fSmrg exit $stat 1798b22bf3fSmrg fi 1808b22bf3fSmrg rm -f "$depfile" 1818b22bf3fSmrg 1828b22bf3fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1838b22bf3fSmrg echo "$object : \\" > "$depfile" 1848b22bf3fSmrg 1858b22bf3fSmrg # Clip off the initial element (the dependent). Don't try to be 1868b22bf3fSmrg # clever and replace this with sed code, as IRIX sed won't handle 1878b22bf3fSmrg # lines with more than a fixed number of characters (4096 in 1888b22bf3fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1898b22bf3fSmrg # the IRIX cc adds comments like `#:fec' to the end of the 1908b22bf3fSmrg # dependency line. 1918b22bf3fSmrg tr ' ' ' 1928b22bf3fSmrg' < "$tmpdepfile" \ 1938b22bf3fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1948b22bf3fSmrg tr ' 1958b22bf3fSmrg' ' ' >> $depfile 1968b22bf3fSmrg echo >> $depfile 1978b22bf3fSmrg 1988b22bf3fSmrg # The second pass generates a dummy entry for each header file. 1998b22bf3fSmrg tr ' ' ' 2008b22bf3fSmrg' < "$tmpdepfile" \ 2018b22bf3fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2028b22bf3fSmrg >> $depfile 2038b22bf3fSmrg else 2048b22bf3fSmrg # The sourcefile does not contain any dependencies, so just 2058b22bf3fSmrg # store a dummy comment line, to avoid errors with the Makefile 2068b22bf3fSmrg # "include basename.Plo" scheme. 2078b22bf3fSmrg echo "#dummy" > "$depfile" 2088b22bf3fSmrg fi 2098b22bf3fSmrg rm -f "$tmpdepfile" 2108b22bf3fSmrg ;; 2118b22bf3fSmrg 2128b22bf3fSmrgaix) 2138b22bf3fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2148b22bf3fSmrg # in a .u file. In older versions, this file always lives in the 2158b22bf3fSmrg # current directory. Also, the AIX compiler puts `$object:' at the 2168b22bf3fSmrg # start of each line; $object doesn't have directory information. 2178b22bf3fSmrg # Version 6 uses the directory in both cases. 2188b22bf3fSmrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2198b22bf3fSmrg tmpdepfile="$stripped.u" 2208b22bf3fSmrg if test "$libtool" = yes; then 2218b22bf3fSmrg "$@" -Wc,-M 2228b22bf3fSmrg else 2238b22bf3fSmrg "$@" -M 2248b22bf3fSmrg fi 2258b22bf3fSmrg stat=$? 2268b22bf3fSmrg 2278b22bf3fSmrg if test -f "$tmpdepfile"; then : 2288b22bf3fSmrg else 2298b22bf3fSmrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2308b22bf3fSmrg tmpdepfile="$stripped.u" 2318b22bf3fSmrg fi 2328b22bf3fSmrg 2338b22bf3fSmrg if test $stat -eq 0; then : 2348b22bf3fSmrg else 2358b22bf3fSmrg rm -f "$tmpdepfile" 2368b22bf3fSmrg exit $stat 2378b22bf3fSmrg fi 2388b22bf3fSmrg 2398b22bf3fSmrg if test -f "$tmpdepfile"; then 2408b22bf3fSmrg outname="$stripped.o" 2418b22bf3fSmrg # Each line is of the form `foo.o: dependent.h'. 2428b22bf3fSmrg # Do two passes, one to just change these to 2438b22bf3fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2448b22bf3fSmrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2458b22bf3fSmrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2468b22bf3fSmrg else 2478b22bf3fSmrg # The sourcefile does not contain any dependencies, so just 2488b22bf3fSmrg # store a dummy comment line, to avoid errors with the Makefile 2498b22bf3fSmrg # "include basename.Plo" scheme. 2508b22bf3fSmrg echo "#dummy" > "$depfile" 2518b22bf3fSmrg fi 2528b22bf3fSmrg rm -f "$tmpdepfile" 2538b22bf3fSmrg ;; 2548b22bf3fSmrg 2558b22bf3fSmrgicc) 2568b22bf3fSmrg # Intel's C compiler understands `-MD -MF file'. However on 2578b22bf3fSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2588b22bf3fSmrg # ICC 7.0 will fill foo.d with something like 2598b22bf3fSmrg # foo.o: sub/foo.c 2608b22bf3fSmrg # foo.o: sub/foo.h 2618b22bf3fSmrg # which is wrong. We want: 2628b22bf3fSmrg # sub/foo.o: sub/foo.c 2638b22bf3fSmrg # sub/foo.o: sub/foo.h 2648b22bf3fSmrg # sub/foo.c: 2658b22bf3fSmrg # sub/foo.h: 2668b22bf3fSmrg # ICC 7.1 will output 2678b22bf3fSmrg # foo.o: sub/foo.c sub/foo.h 2688b22bf3fSmrg # and will wrap long lines using \ : 2698b22bf3fSmrg # foo.o: sub/foo.c ... \ 2708b22bf3fSmrg # sub/foo.h ... \ 2718b22bf3fSmrg # ... 2728b22bf3fSmrg 2738b22bf3fSmrg "$@" -MD -MF "$tmpdepfile" 2748b22bf3fSmrg stat=$? 2758b22bf3fSmrg if test $stat -eq 0; then : 2768b22bf3fSmrg else 2778b22bf3fSmrg rm -f "$tmpdepfile" 2788b22bf3fSmrg exit $stat 2798b22bf3fSmrg fi 2808b22bf3fSmrg rm -f "$depfile" 2818b22bf3fSmrg # Each line is of the form `foo.o: dependent.h', 2828b22bf3fSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2838b22bf3fSmrg # Do two passes, one to just change these to 2848b22bf3fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2858b22bf3fSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2868b22bf3fSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 2878b22bf3fSmrg # correctly. Breaking it into two sed invocations is a workaround. 2888b22bf3fSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2898b22bf3fSmrg sed -e 's/$/ :/' >> "$depfile" 2908b22bf3fSmrg rm -f "$tmpdepfile" 2918b22bf3fSmrg ;; 2928b22bf3fSmrg 2938b22bf3fSmrghp2) 2948b22bf3fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2958b22bf3fSmrg # compilers, which have integrated preprocessors. The correct option 2968b22bf3fSmrg # to use with these is +Maked; it writes dependencies to a file named 2978b22bf3fSmrg # 'foo.d', which lands next to the object file, wherever that 2988b22bf3fSmrg # happens to be. 2998b22bf3fSmrg # Much of this is similar to the tru64 case; see comments there. 3008b22bf3fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3018b22bf3fSmrg test "x$dir" = "x$object" && dir= 3028b22bf3fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3038b22bf3fSmrg if test "$libtool" = yes; then 3048b22bf3fSmrg tmpdepfile1=$dir$base.d 3058b22bf3fSmrg tmpdepfile2=$dir.libs/$base.d 3068b22bf3fSmrg "$@" -Wc,+Maked 3078b22bf3fSmrg else 3088b22bf3fSmrg tmpdepfile1=$dir$base.d 3098b22bf3fSmrg tmpdepfile2=$dir$base.d 3108b22bf3fSmrg "$@" +Maked 3118b22bf3fSmrg fi 3128b22bf3fSmrg stat=$? 3138b22bf3fSmrg if test $stat -eq 0; then : 3148b22bf3fSmrg else 3158b22bf3fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3168b22bf3fSmrg exit $stat 3178b22bf3fSmrg fi 3188b22bf3fSmrg 3198b22bf3fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3208b22bf3fSmrg do 3218b22bf3fSmrg test -f "$tmpdepfile" && break 3228b22bf3fSmrg done 3238b22bf3fSmrg if test -f "$tmpdepfile"; then 3248b22bf3fSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3258b22bf3fSmrg # Add `dependent.h:' lines. 3268b22bf3fSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3278b22bf3fSmrg else 3288b22bf3fSmrg echo "#dummy" > "$depfile" 3298b22bf3fSmrg fi 3308b22bf3fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3318b22bf3fSmrg ;; 3328b22bf3fSmrg 3338b22bf3fSmrgtru64) 3348b22bf3fSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 3358b22bf3fSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3368b22bf3fSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3378b22bf3fSmrg # dependencies in `foo.d' instead, so we check for that too. 3388b22bf3fSmrg # Subdirectories are respected. 3398b22bf3fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3408b22bf3fSmrg test "x$dir" = "x$object" && dir= 3418b22bf3fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3428b22bf3fSmrg 3438b22bf3fSmrg if test "$libtool" = yes; then 3448b22bf3fSmrg # With Tru64 cc, shared objects can also be used to make a 3458b22bf3fSmrg # static library. This mechanism is used in libtool 1.4 series to 3468b22bf3fSmrg # handle both shared and static libraries in a single compilation. 3478b22bf3fSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3488b22bf3fSmrg # 3498b22bf3fSmrg # With libtool 1.5 this exception was removed, and libtool now 3508b22bf3fSmrg # generates 2 separate objects for the 2 libraries. These two 3518b22bf3fSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3528b22bf3fSmrg # in $dir$base.o.d. We have to check for both files, because 3538b22bf3fSmrg # one of the two compilations can be disabled. We should prefer 3548b22bf3fSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3558b22bf3fSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3568b22bf3fSmrg # the former would cause a distcleancheck panic. 3578b22bf3fSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3588b22bf3fSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3598b22bf3fSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3608b22bf3fSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3618b22bf3fSmrg "$@" -Wc,-MD 3628b22bf3fSmrg else 3638b22bf3fSmrg tmpdepfile1=$dir$base.o.d 3648b22bf3fSmrg tmpdepfile2=$dir$base.d 3658b22bf3fSmrg tmpdepfile3=$dir$base.d 3668b22bf3fSmrg tmpdepfile4=$dir$base.d 3678b22bf3fSmrg "$@" -MD 3688b22bf3fSmrg fi 3698b22bf3fSmrg 3708b22bf3fSmrg stat=$? 3718b22bf3fSmrg if test $stat -eq 0; then : 3728b22bf3fSmrg else 3738b22bf3fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3748b22bf3fSmrg exit $stat 3758b22bf3fSmrg fi 3768b22bf3fSmrg 3778b22bf3fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3788b22bf3fSmrg do 3798b22bf3fSmrg test -f "$tmpdepfile" && break 3808b22bf3fSmrg done 3818b22bf3fSmrg if test -f "$tmpdepfile"; then 3828b22bf3fSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3838b22bf3fSmrg # That's a tab and a space in the []. 3848b22bf3fSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3858b22bf3fSmrg else 3868b22bf3fSmrg echo "#dummy" > "$depfile" 3878b22bf3fSmrg fi 3888b22bf3fSmrg rm -f "$tmpdepfile" 3898b22bf3fSmrg ;; 3908b22bf3fSmrg 3918b22bf3fSmrg#nosideeffect) 3928b22bf3fSmrg # This comment above is used by automake to tell side-effect 3938b22bf3fSmrg # dependency tracking mechanisms from slower ones. 3948b22bf3fSmrg 3958b22bf3fSmrgdashmstdout) 3968b22bf3fSmrg # Important note: in order to support this mode, a compiler *must* 3978b22bf3fSmrg # always write the preprocessed file to stdout, regardless of -o. 3988b22bf3fSmrg "$@" || exit $? 3998b22bf3fSmrg 4008b22bf3fSmrg # Remove the call to Libtool. 4018b22bf3fSmrg if test "$libtool" = yes; then 4028b22bf3fSmrg while test $1 != '--mode=compile'; do 4038b22bf3fSmrg shift 4048b22bf3fSmrg done 4058b22bf3fSmrg shift 4068b22bf3fSmrg fi 4078b22bf3fSmrg 4088b22bf3fSmrg # Remove `-o $object'. 4098b22bf3fSmrg IFS=" " 4108b22bf3fSmrg for arg 4118b22bf3fSmrg do 4128b22bf3fSmrg case $arg in 4138b22bf3fSmrg -o) 4148b22bf3fSmrg shift 4158b22bf3fSmrg ;; 4168b22bf3fSmrg $object) 4178b22bf3fSmrg shift 4188b22bf3fSmrg ;; 4198b22bf3fSmrg *) 4208b22bf3fSmrg set fnord "$@" "$arg" 4218b22bf3fSmrg shift # fnord 4228b22bf3fSmrg shift # $arg 4238b22bf3fSmrg ;; 4248b22bf3fSmrg esac 4258b22bf3fSmrg done 4268b22bf3fSmrg 4278b22bf3fSmrg test -z "$dashmflag" && dashmflag=-M 4288b22bf3fSmrg # Require at least two characters before searching for `:' 4298b22bf3fSmrg # in the target name. This is to cope with DOS-style filenames: 4308b22bf3fSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4318b22bf3fSmrg "$@" $dashmflag | 4328b22bf3fSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4338b22bf3fSmrg rm -f "$depfile" 4348b22bf3fSmrg cat < "$tmpdepfile" > "$depfile" 4358b22bf3fSmrg tr ' ' ' 4368b22bf3fSmrg' < "$tmpdepfile" | \ 4378b22bf3fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4388b22bf3fSmrg## correctly. Breaking it into two sed invocations is a workaround. 4398b22bf3fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4408b22bf3fSmrg rm -f "$tmpdepfile" 4418b22bf3fSmrg ;; 4428b22bf3fSmrg 4438b22bf3fSmrgdashXmstdout) 4448b22bf3fSmrg # This case only exists to satisfy depend.m4. It is never actually 4458b22bf3fSmrg # run, as this mode is specially recognized in the preamble. 4468b22bf3fSmrg exit 1 4478b22bf3fSmrg ;; 4488b22bf3fSmrg 4498b22bf3fSmrgmakedepend) 4508b22bf3fSmrg "$@" || exit $? 4518b22bf3fSmrg # Remove any Libtool call 4528b22bf3fSmrg if test "$libtool" = yes; then 4538b22bf3fSmrg while test $1 != '--mode=compile'; do 4548b22bf3fSmrg shift 4558b22bf3fSmrg done 4568b22bf3fSmrg shift 4578b22bf3fSmrg fi 4588b22bf3fSmrg # X makedepend 4598b22bf3fSmrg shift 4608b22bf3fSmrg cleared=no 4618b22bf3fSmrg for arg in "$@"; do 4628b22bf3fSmrg case $cleared in 4638b22bf3fSmrg no) 4648b22bf3fSmrg set ""; shift 4658b22bf3fSmrg cleared=yes ;; 4668b22bf3fSmrg esac 4678b22bf3fSmrg case "$arg" in 4688b22bf3fSmrg -D*|-I*) 4698b22bf3fSmrg set fnord "$@" "$arg"; shift ;; 4708b22bf3fSmrg # Strip any option that makedepend may not understand. Remove 4718b22bf3fSmrg # the object too, otherwise makedepend will parse it as a source file. 4728b22bf3fSmrg -*|$object) 4738b22bf3fSmrg ;; 4748b22bf3fSmrg *) 4758b22bf3fSmrg set fnord "$@" "$arg"; shift ;; 4768b22bf3fSmrg esac 4778b22bf3fSmrg done 4788b22bf3fSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4798b22bf3fSmrg touch "$tmpdepfile" 4808b22bf3fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4818b22bf3fSmrg rm -f "$depfile" 4828b22bf3fSmrg cat < "$tmpdepfile" > "$depfile" 4838b22bf3fSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4848b22bf3fSmrg' | \ 4858b22bf3fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4868b22bf3fSmrg## correctly. Breaking it into two sed invocations is a workaround. 4878b22bf3fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4888b22bf3fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4898b22bf3fSmrg ;; 4908b22bf3fSmrg 4918b22bf3fSmrgcpp) 4928b22bf3fSmrg # Important note: in order to support this mode, a compiler *must* 4938b22bf3fSmrg # always write the preprocessed file to stdout. 4948b22bf3fSmrg "$@" || exit $? 4958b22bf3fSmrg 4968b22bf3fSmrg # Remove the call to Libtool. 4978b22bf3fSmrg if test "$libtool" = yes; then 4988b22bf3fSmrg while test $1 != '--mode=compile'; do 4998b22bf3fSmrg shift 5008b22bf3fSmrg done 5018b22bf3fSmrg shift 5028b22bf3fSmrg fi 5038b22bf3fSmrg 5048b22bf3fSmrg # Remove `-o $object'. 5058b22bf3fSmrg IFS=" " 5068b22bf3fSmrg for arg 5078b22bf3fSmrg do 5088b22bf3fSmrg case $arg in 5098b22bf3fSmrg -o) 5108b22bf3fSmrg shift 5118b22bf3fSmrg ;; 5128b22bf3fSmrg $object) 5138b22bf3fSmrg shift 5148b22bf3fSmrg ;; 5158b22bf3fSmrg *) 5168b22bf3fSmrg set fnord "$@" "$arg" 5178b22bf3fSmrg shift # fnord 5188b22bf3fSmrg shift # $arg 5198b22bf3fSmrg ;; 5208b22bf3fSmrg esac 5218b22bf3fSmrg done 5228b22bf3fSmrg 5238b22bf3fSmrg "$@" -E | 5248b22bf3fSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5258b22bf3fSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5268b22bf3fSmrg sed '$ s: \\$::' > "$tmpdepfile" 5278b22bf3fSmrg rm -f "$depfile" 5288b22bf3fSmrg echo "$object : \\" > "$depfile" 5298b22bf3fSmrg cat < "$tmpdepfile" >> "$depfile" 5308b22bf3fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5318b22bf3fSmrg rm -f "$tmpdepfile" 5328b22bf3fSmrg ;; 5338b22bf3fSmrg 5348b22bf3fSmrgmsvisualcpp) 5358b22bf3fSmrg # Important note: in order to support this mode, a compiler *must* 5368b22bf3fSmrg # always write the preprocessed file to stdout, regardless of -o, 5378b22bf3fSmrg # because we must use -o when running libtool. 5388b22bf3fSmrg "$@" || exit $? 5398b22bf3fSmrg IFS=" " 5408b22bf3fSmrg for arg 5418b22bf3fSmrg do 5428b22bf3fSmrg case "$arg" in 5438b22bf3fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5448b22bf3fSmrg set fnord "$@" 5458b22bf3fSmrg shift 5468b22bf3fSmrg shift 5478b22bf3fSmrg ;; 5488b22bf3fSmrg *) 5498b22bf3fSmrg set fnord "$@" "$arg" 5508b22bf3fSmrg shift 5518b22bf3fSmrg shift 5528b22bf3fSmrg ;; 5538b22bf3fSmrg esac 5548b22bf3fSmrg done 5558b22bf3fSmrg "$@" -E | 5568b22bf3fSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5578b22bf3fSmrg rm -f "$depfile" 5588b22bf3fSmrg echo "$object : \\" > "$depfile" 5598b22bf3fSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5608b22bf3fSmrg echo " " >> "$depfile" 5618b22bf3fSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5628b22bf3fSmrg rm -f "$tmpdepfile" 5638b22bf3fSmrg ;; 5648b22bf3fSmrg 5658b22bf3fSmrgnone) 5668b22bf3fSmrg exec "$@" 5678b22bf3fSmrg ;; 5688b22bf3fSmrg 5698b22bf3fSmrg*) 5708b22bf3fSmrg echo "Unknown depmode $depmode" 1>&2 5718b22bf3fSmrg exit 1 5728b22bf3fSmrg ;; 5738b22bf3fSmrgesac 5748b22bf3fSmrg 5758b22bf3fSmrgexit 0 5768b22bf3fSmrg 5778b22bf3fSmrg# Local Variables: 5788b22bf3fSmrg# mode: shell-script 5798b22bf3fSmrg# sh-indentation: 2 5808b22bf3fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5818b22bf3fSmrg# time-stamp-start: "scriptversion=" 5828b22bf3fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5838b22bf3fSmrg# time-stamp-end: "$" 5848b22bf3fSmrg# End: 585