depcomp revision 1a30de1f
11a30de1fSmrg#! /bin/sh 21a30de1fSmrg# depcomp - compile a program generating dependencies as side-effects 31a30de1fSmrg 41a30de1fSmrgscriptversion=2006-10-15.18 51a30de1fSmrg 61a30de1fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 71a30de1fSmrg# Foundation, Inc. 81a30de1fSmrg 91a30de1fSmrg# This program is free software; you can redistribute it and/or modify 101a30de1fSmrg# it under the terms of the GNU General Public License as published by 111a30de1fSmrg# the Free Software Foundation; either version 2, or (at your option) 121a30de1fSmrg# any later version. 131a30de1fSmrg 141a30de1fSmrg# This program is distributed in the hope that it will be useful, 151a30de1fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 161a30de1fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 171a30de1fSmrg# GNU General Public License for more details. 181a30de1fSmrg 191a30de1fSmrg# You should have received a copy of the GNU General Public License 201a30de1fSmrg# along with this program; if not, write to the Free Software 211a30de1fSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 221a30de1fSmrg# 02110-1301, USA. 231a30de1fSmrg 241a30de1fSmrg# As a special exception to the GNU General Public License, if you 251a30de1fSmrg# distribute this file as part of a program that contains a 261a30de1fSmrg# configuration script generated by Autoconf, you may include it under 271a30de1fSmrg# the same distribution terms that you use for the rest of that program. 281a30de1fSmrg 291a30de1fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 301a30de1fSmrg 311a30de1fSmrgcase $1 in 321a30de1fSmrg '') 331a30de1fSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 341a30de1fSmrg exit 1; 351a30de1fSmrg ;; 361a30de1fSmrg -h | --h*) 371a30de1fSmrg cat <<\EOF 381a30de1fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 391a30de1fSmrg 401a30de1fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 411a30de1fSmrgas side-effects. 421a30de1fSmrg 431a30de1fSmrgEnvironment variables: 441a30de1fSmrg depmode Dependency tracking mode. 451a30de1fSmrg source Source file read by `PROGRAMS ARGS'. 461a30de1fSmrg object Object file output by `PROGRAMS ARGS'. 471a30de1fSmrg DEPDIR directory where to store dependencies. 481a30de1fSmrg depfile Dependency file to output. 491a30de1fSmrg tmpdepfile Temporary file to use when outputing dependencies. 501a30de1fSmrg libtool Whether libtool is used (yes/no). 511a30de1fSmrg 521a30de1fSmrgReport bugs to <bug-automake@gnu.org>. 531a30de1fSmrgEOF 541a30de1fSmrg exit $? 551a30de1fSmrg ;; 561a30de1fSmrg -v | --v*) 571a30de1fSmrg echo "depcomp $scriptversion" 581a30de1fSmrg exit $? 591a30de1fSmrg ;; 601a30de1fSmrgesac 611a30de1fSmrg 621a30de1fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 631a30de1fSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 641a30de1fSmrg exit 1 651a30de1fSmrgfi 661a30de1fSmrg 671a30de1fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 681a30de1fSmrgdepfile=${depfile-`echo "$object" | 691a30de1fSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 701a30de1fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 711a30de1fSmrg 721a30de1fSmrgrm -f "$tmpdepfile" 731a30de1fSmrg 741a30de1fSmrg# Some modes work just like other modes, but use different flags. We 751a30de1fSmrg# parameterize here, but still list the modes in the big case below, 761a30de1fSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 771a30de1fSmrg# here, because this file can only contain one case statement. 781a30de1fSmrgif test "$depmode" = hp; then 791a30de1fSmrg # HP compiler uses -M and no extra arg. 801a30de1fSmrg gccflag=-M 811a30de1fSmrg depmode=gcc 821a30de1fSmrgfi 831a30de1fSmrg 841a30de1fSmrgif test "$depmode" = dashXmstdout; then 851a30de1fSmrg # This is just like dashmstdout with a different argument. 861a30de1fSmrg dashmflag=-xM 871a30de1fSmrg depmode=dashmstdout 881a30de1fSmrgfi 891a30de1fSmrg 901a30de1fSmrgcase "$depmode" in 911a30de1fSmrggcc3) 921a30de1fSmrg## gcc 3 implements dependency tracking that does exactly what 931a30de1fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 941a30de1fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 951a30de1fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 961a30de1fSmrg## the command line argument order; so add the flags where they 971a30de1fSmrg## appear in depend2.am. Note that the slowdown incurred here 981a30de1fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 991a30de1fSmrg for arg 1001a30de1fSmrg do 1011a30de1fSmrg case $arg in 1021a30de1fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1031a30de1fSmrg *) set fnord "$@" "$arg" ;; 1041a30de1fSmrg esac 1051a30de1fSmrg shift # fnord 1061a30de1fSmrg shift # $arg 1071a30de1fSmrg done 1081a30de1fSmrg "$@" 1091a30de1fSmrg stat=$? 1101a30de1fSmrg if test $stat -eq 0; then : 1111a30de1fSmrg else 1121a30de1fSmrg rm -f "$tmpdepfile" 1131a30de1fSmrg exit $stat 1141a30de1fSmrg fi 1151a30de1fSmrg mv "$tmpdepfile" "$depfile" 1161a30de1fSmrg ;; 1171a30de1fSmrg 1181a30de1fSmrggcc) 1191a30de1fSmrg## There are various ways to get dependency output from gcc. Here's 1201a30de1fSmrg## why we pick this rather obscure method: 1211a30de1fSmrg## - Don't want to use -MD because we'd like the dependencies to end 1221a30de1fSmrg## up in a subdir. Having to rename by hand is ugly. 1231a30de1fSmrg## (We might end up doing this anyway to support other compilers.) 1241a30de1fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1251a30de1fSmrg## -MM, not -M (despite what the docs say). 1261a30de1fSmrg## - Using -M directly means running the compiler twice (even worse 1271a30de1fSmrg## than renaming). 1281a30de1fSmrg if test -z "$gccflag"; then 1291a30de1fSmrg gccflag=-MD, 1301a30de1fSmrg fi 1311a30de1fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 1321a30de1fSmrg stat=$? 1331a30de1fSmrg if test $stat -eq 0; then : 1341a30de1fSmrg else 1351a30de1fSmrg rm -f "$tmpdepfile" 1361a30de1fSmrg exit $stat 1371a30de1fSmrg fi 1381a30de1fSmrg rm -f "$depfile" 1391a30de1fSmrg echo "$object : \\" > "$depfile" 1401a30de1fSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1411a30de1fSmrg## The second -e expression handles DOS-style file names with drive letters. 1421a30de1fSmrg sed -e 's/^[^:]*: / /' \ 1431a30de1fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1441a30de1fSmrg## This next piece of magic avoids the `deleted header file' problem. 1451a30de1fSmrg## The problem is that when a header file which appears in a .P file 1461a30de1fSmrg## is deleted, the dependency causes make to die (because there is 1471a30de1fSmrg## typically no way to rebuild the header). We avoid this by adding 1481a30de1fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 1491a30de1fSmrg## this for us directly. 1501a30de1fSmrg tr ' ' ' 1511a30de1fSmrg' < "$tmpdepfile" | 1521a30de1fSmrg## Some versions of gcc put a space before the `:'. On the theory 1531a30de1fSmrg## that the space means something, we add a space to the output as 1541a30de1fSmrg## well. 1551a30de1fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 1561a30de1fSmrg## correctly. Breaking it into two sed invocations is a workaround. 1571a30de1fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1581a30de1fSmrg rm -f "$tmpdepfile" 1591a30de1fSmrg ;; 1601a30de1fSmrg 1611a30de1fSmrghp) 1621a30de1fSmrg # This case exists only to let depend.m4 do its work. It works by 1631a30de1fSmrg # looking at the text of this script. This case will never be run, 1641a30de1fSmrg # since it is checked for above. 1651a30de1fSmrg exit 1 1661a30de1fSmrg ;; 1671a30de1fSmrg 1681a30de1fSmrgsgi) 1691a30de1fSmrg if test "$libtool" = yes; then 1701a30de1fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1711a30de1fSmrg else 1721a30de1fSmrg "$@" -MDupdate "$tmpdepfile" 1731a30de1fSmrg fi 1741a30de1fSmrg stat=$? 1751a30de1fSmrg if test $stat -eq 0; then : 1761a30de1fSmrg else 1771a30de1fSmrg rm -f "$tmpdepfile" 1781a30de1fSmrg exit $stat 1791a30de1fSmrg fi 1801a30de1fSmrg rm -f "$depfile" 1811a30de1fSmrg 1821a30de1fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1831a30de1fSmrg echo "$object : \\" > "$depfile" 1841a30de1fSmrg 1851a30de1fSmrg # Clip off the initial element (the dependent). Don't try to be 1861a30de1fSmrg # clever and replace this with sed code, as IRIX sed won't handle 1871a30de1fSmrg # lines with more than a fixed number of characters (4096 in 1881a30de1fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1891a30de1fSmrg # the IRIX cc adds comments like `#:fec' to the end of the 1901a30de1fSmrg # dependency line. 1911a30de1fSmrg tr ' ' ' 1921a30de1fSmrg' < "$tmpdepfile" \ 1931a30de1fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1941a30de1fSmrg tr ' 1951a30de1fSmrg' ' ' >> $depfile 1961a30de1fSmrg echo >> $depfile 1971a30de1fSmrg 1981a30de1fSmrg # The second pass generates a dummy entry for each header file. 1991a30de1fSmrg tr ' ' ' 2001a30de1fSmrg' < "$tmpdepfile" \ 2011a30de1fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2021a30de1fSmrg >> $depfile 2031a30de1fSmrg else 2041a30de1fSmrg # The sourcefile does not contain any dependencies, so just 2051a30de1fSmrg # store a dummy comment line, to avoid errors with the Makefile 2061a30de1fSmrg # "include basename.Plo" scheme. 2071a30de1fSmrg echo "#dummy" > "$depfile" 2081a30de1fSmrg fi 2091a30de1fSmrg rm -f "$tmpdepfile" 2101a30de1fSmrg ;; 2111a30de1fSmrg 2121a30de1fSmrgaix) 2131a30de1fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2141a30de1fSmrg # in a .u file. In older versions, this file always lives in the 2151a30de1fSmrg # current directory. Also, the AIX compiler puts `$object:' at the 2161a30de1fSmrg # start of each line; $object doesn't have directory information. 2171a30de1fSmrg # Version 6 uses the directory in both cases. 2181a30de1fSmrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2191a30de1fSmrg tmpdepfile="$stripped.u" 2201a30de1fSmrg if test "$libtool" = yes; then 2211a30de1fSmrg "$@" -Wc,-M 2221a30de1fSmrg else 2231a30de1fSmrg "$@" -M 2241a30de1fSmrg fi 2251a30de1fSmrg stat=$? 2261a30de1fSmrg 2271a30de1fSmrg if test -f "$tmpdepfile"; then : 2281a30de1fSmrg else 2291a30de1fSmrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2301a30de1fSmrg tmpdepfile="$stripped.u" 2311a30de1fSmrg fi 2321a30de1fSmrg 2331a30de1fSmrg if test $stat -eq 0; then : 2341a30de1fSmrg else 2351a30de1fSmrg rm -f "$tmpdepfile" 2361a30de1fSmrg exit $stat 2371a30de1fSmrg fi 2381a30de1fSmrg 2391a30de1fSmrg if test -f "$tmpdepfile"; then 2401a30de1fSmrg outname="$stripped.o" 2411a30de1fSmrg # Each line is of the form `foo.o: dependent.h'. 2421a30de1fSmrg # Do two passes, one to just change these to 2431a30de1fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2441a30de1fSmrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2451a30de1fSmrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2461a30de1fSmrg else 2471a30de1fSmrg # The sourcefile does not contain any dependencies, so just 2481a30de1fSmrg # store a dummy comment line, to avoid errors with the Makefile 2491a30de1fSmrg # "include basename.Plo" scheme. 2501a30de1fSmrg echo "#dummy" > "$depfile" 2511a30de1fSmrg fi 2521a30de1fSmrg rm -f "$tmpdepfile" 2531a30de1fSmrg ;; 2541a30de1fSmrg 2551a30de1fSmrgicc) 2561a30de1fSmrg # Intel's C compiler understands `-MD -MF file'. However on 2571a30de1fSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2581a30de1fSmrg # ICC 7.0 will fill foo.d with something like 2591a30de1fSmrg # foo.o: sub/foo.c 2601a30de1fSmrg # foo.o: sub/foo.h 2611a30de1fSmrg # which is wrong. We want: 2621a30de1fSmrg # sub/foo.o: sub/foo.c 2631a30de1fSmrg # sub/foo.o: sub/foo.h 2641a30de1fSmrg # sub/foo.c: 2651a30de1fSmrg # sub/foo.h: 2661a30de1fSmrg # ICC 7.1 will output 2671a30de1fSmrg # foo.o: sub/foo.c sub/foo.h 2681a30de1fSmrg # and will wrap long lines using \ : 2691a30de1fSmrg # foo.o: sub/foo.c ... \ 2701a30de1fSmrg # sub/foo.h ... \ 2711a30de1fSmrg # ... 2721a30de1fSmrg 2731a30de1fSmrg "$@" -MD -MF "$tmpdepfile" 2741a30de1fSmrg stat=$? 2751a30de1fSmrg if test $stat -eq 0; then : 2761a30de1fSmrg else 2771a30de1fSmrg rm -f "$tmpdepfile" 2781a30de1fSmrg exit $stat 2791a30de1fSmrg fi 2801a30de1fSmrg rm -f "$depfile" 2811a30de1fSmrg # Each line is of the form `foo.o: dependent.h', 2821a30de1fSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2831a30de1fSmrg # Do two passes, one to just change these to 2841a30de1fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2851a30de1fSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2861a30de1fSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 2871a30de1fSmrg # correctly. Breaking it into two sed invocations is a workaround. 2881a30de1fSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2891a30de1fSmrg sed -e 's/$/ :/' >> "$depfile" 2901a30de1fSmrg rm -f "$tmpdepfile" 2911a30de1fSmrg ;; 2921a30de1fSmrg 2931a30de1fSmrghp2) 2941a30de1fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2951a30de1fSmrg # compilers, which have integrated preprocessors. The correct option 2961a30de1fSmrg # to use with these is +Maked; it writes dependencies to a file named 2971a30de1fSmrg # 'foo.d', which lands next to the object file, wherever that 2981a30de1fSmrg # happens to be. 2991a30de1fSmrg # Much of this is similar to the tru64 case; see comments there. 3001a30de1fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3011a30de1fSmrg test "x$dir" = "x$object" && dir= 3021a30de1fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3031a30de1fSmrg if test "$libtool" = yes; then 3041a30de1fSmrg tmpdepfile1=$dir$base.d 3051a30de1fSmrg tmpdepfile2=$dir.libs/$base.d 3061a30de1fSmrg "$@" -Wc,+Maked 3071a30de1fSmrg else 3081a30de1fSmrg tmpdepfile1=$dir$base.d 3091a30de1fSmrg tmpdepfile2=$dir$base.d 3101a30de1fSmrg "$@" +Maked 3111a30de1fSmrg fi 3121a30de1fSmrg stat=$? 3131a30de1fSmrg if test $stat -eq 0; then : 3141a30de1fSmrg else 3151a30de1fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3161a30de1fSmrg exit $stat 3171a30de1fSmrg fi 3181a30de1fSmrg 3191a30de1fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3201a30de1fSmrg do 3211a30de1fSmrg test -f "$tmpdepfile" && break 3221a30de1fSmrg done 3231a30de1fSmrg if test -f "$tmpdepfile"; then 3241a30de1fSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3251a30de1fSmrg # Add `dependent.h:' lines. 3261a30de1fSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3271a30de1fSmrg else 3281a30de1fSmrg echo "#dummy" > "$depfile" 3291a30de1fSmrg fi 3301a30de1fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3311a30de1fSmrg ;; 3321a30de1fSmrg 3331a30de1fSmrgtru64) 3341a30de1fSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 3351a30de1fSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3361a30de1fSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3371a30de1fSmrg # dependencies in `foo.d' instead, so we check for that too. 3381a30de1fSmrg # Subdirectories are respected. 3391a30de1fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3401a30de1fSmrg test "x$dir" = "x$object" && dir= 3411a30de1fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3421a30de1fSmrg 3431a30de1fSmrg if test "$libtool" = yes; then 3441a30de1fSmrg # With Tru64 cc, shared objects can also be used to make a 3451a30de1fSmrg # static library. This mechanism is used in libtool 1.4 series to 3461a30de1fSmrg # handle both shared and static libraries in a single compilation. 3471a30de1fSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3481a30de1fSmrg # 3491a30de1fSmrg # With libtool 1.5 this exception was removed, and libtool now 3501a30de1fSmrg # generates 2 separate objects for the 2 libraries. These two 3511a30de1fSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3521a30de1fSmrg # in $dir$base.o.d. We have to check for both files, because 3531a30de1fSmrg # one of the two compilations can be disabled. We should prefer 3541a30de1fSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3551a30de1fSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3561a30de1fSmrg # the former would cause a distcleancheck panic. 3571a30de1fSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3581a30de1fSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3591a30de1fSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3601a30de1fSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3611a30de1fSmrg "$@" -Wc,-MD 3621a30de1fSmrg else 3631a30de1fSmrg tmpdepfile1=$dir$base.o.d 3641a30de1fSmrg tmpdepfile2=$dir$base.d 3651a30de1fSmrg tmpdepfile3=$dir$base.d 3661a30de1fSmrg tmpdepfile4=$dir$base.d 3671a30de1fSmrg "$@" -MD 3681a30de1fSmrg fi 3691a30de1fSmrg 3701a30de1fSmrg stat=$? 3711a30de1fSmrg if test $stat -eq 0; then : 3721a30de1fSmrg else 3731a30de1fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3741a30de1fSmrg exit $stat 3751a30de1fSmrg fi 3761a30de1fSmrg 3771a30de1fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3781a30de1fSmrg do 3791a30de1fSmrg test -f "$tmpdepfile" && break 3801a30de1fSmrg done 3811a30de1fSmrg if test -f "$tmpdepfile"; then 3821a30de1fSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3831a30de1fSmrg # That's a tab and a space in the []. 3841a30de1fSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3851a30de1fSmrg else 3861a30de1fSmrg echo "#dummy" > "$depfile" 3871a30de1fSmrg fi 3881a30de1fSmrg rm -f "$tmpdepfile" 3891a30de1fSmrg ;; 3901a30de1fSmrg 3911a30de1fSmrg#nosideeffect) 3921a30de1fSmrg # This comment above is used by automake to tell side-effect 3931a30de1fSmrg # dependency tracking mechanisms from slower ones. 3941a30de1fSmrg 3951a30de1fSmrgdashmstdout) 3961a30de1fSmrg # Important note: in order to support this mode, a compiler *must* 3971a30de1fSmrg # always write the preprocessed file to stdout, regardless of -o. 3981a30de1fSmrg "$@" || exit $? 3991a30de1fSmrg 4001a30de1fSmrg # Remove the call to Libtool. 4011a30de1fSmrg if test "$libtool" = yes; then 4021a30de1fSmrg while test $1 != '--mode=compile'; do 4031a30de1fSmrg shift 4041a30de1fSmrg done 4051a30de1fSmrg shift 4061a30de1fSmrg fi 4071a30de1fSmrg 4081a30de1fSmrg # Remove `-o $object'. 4091a30de1fSmrg IFS=" " 4101a30de1fSmrg for arg 4111a30de1fSmrg do 4121a30de1fSmrg case $arg in 4131a30de1fSmrg -o) 4141a30de1fSmrg shift 4151a30de1fSmrg ;; 4161a30de1fSmrg $object) 4171a30de1fSmrg shift 4181a30de1fSmrg ;; 4191a30de1fSmrg *) 4201a30de1fSmrg set fnord "$@" "$arg" 4211a30de1fSmrg shift # fnord 4221a30de1fSmrg shift # $arg 4231a30de1fSmrg ;; 4241a30de1fSmrg esac 4251a30de1fSmrg done 4261a30de1fSmrg 4271a30de1fSmrg test -z "$dashmflag" && dashmflag=-M 4281a30de1fSmrg # Require at least two characters before searching for `:' 4291a30de1fSmrg # in the target name. This is to cope with DOS-style filenames: 4301a30de1fSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4311a30de1fSmrg "$@" $dashmflag | 4321a30de1fSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4331a30de1fSmrg rm -f "$depfile" 4341a30de1fSmrg cat < "$tmpdepfile" > "$depfile" 4351a30de1fSmrg tr ' ' ' 4361a30de1fSmrg' < "$tmpdepfile" | \ 4371a30de1fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4381a30de1fSmrg## correctly. Breaking it into two sed invocations is a workaround. 4391a30de1fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4401a30de1fSmrg rm -f "$tmpdepfile" 4411a30de1fSmrg ;; 4421a30de1fSmrg 4431a30de1fSmrgdashXmstdout) 4441a30de1fSmrg # This case only exists to satisfy depend.m4. It is never actually 4451a30de1fSmrg # run, as this mode is specially recognized in the preamble. 4461a30de1fSmrg exit 1 4471a30de1fSmrg ;; 4481a30de1fSmrg 4491a30de1fSmrgmakedepend) 4501a30de1fSmrg "$@" || exit $? 4511a30de1fSmrg # Remove any Libtool call 4521a30de1fSmrg if test "$libtool" = yes; then 4531a30de1fSmrg while test $1 != '--mode=compile'; do 4541a30de1fSmrg shift 4551a30de1fSmrg done 4561a30de1fSmrg shift 4571a30de1fSmrg fi 4581a30de1fSmrg # X makedepend 4591a30de1fSmrg shift 4601a30de1fSmrg cleared=no 4611a30de1fSmrg for arg in "$@"; do 4621a30de1fSmrg case $cleared in 4631a30de1fSmrg no) 4641a30de1fSmrg set ""; shift 4651a30de1fSmrg cleared=yes ;; 4661a30de1fSmrg esac 4671a30de1fSmrg case "$arg" in 4681a30de1fSmrg -D*|-I*) 4691a30de1fSmrg set fnord "$@" "$arg"; shift ;; 4701a30de1fSmrg # Strip any option that makedepend may not understand. Remove 4711a30de1fSmrg # the object too, otherwise makedepend will parse it as a source file. 4721a30de1fSmrg -*|$object) 4731a30de1fSmrg ;; 4741a30de1fSmrg *) 4751a30de1fSmrg set fnord "$@" "$arg"; shift ;; 4761a30de1fSmrg esac 4771a30de1fSmrg done 4781a30de1fSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4791a30de1fSmrg touch "$tmpdepfile" 4801a30de1fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4811a30de1fSmrg rm -f "$depfile" 4821a30de1fSmrg cat < "$tmpdepfile" > "$depfile" 4831a30de1fSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4841a30de1fSmrg' | \ 4851a30de1fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 4861a30de1fSmrg## correctly. Breaking it into two sed invocations is a workaround. 4871a30de1fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4881a30de1fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4891a30de1fSmrg ;; 4901a30de1fSmrg 4911a30de1fSmrgcpp) 4921a30de1fSmrg # Important note: in order to support this mode, a compiler *must* 4931a30de1fSmrg # always write the preprocessed file to stdout. 4941a30de1fSmrg "$@" || exit $? 4951a30de1fSmrg 4961a30de1fSmrg # Remove the call to Libtool. 4971a30de1fSmrg if test "$libtool" = yes; then 4981a30de1fSmrg while test $1 != '--mode=compile'; do 4991a30de1fSmrg shift 5001a30de1fSmrg done 5011a30de1fSmrg shift 5021a30de1fSmrg fi 5031a30de1fSmrg 5041a30de1fSmrg # Remove `-o $object'. 5051a30de1fSmrg IFS=" " 5061a30de1fSmrg for arg 5071a30de1fSmrg do 5081a30de1fSmrg case $arg in 5091a30de1fSmrg -o) 5101a30de1fSmrg shift 5111a30de1fSmrg ;; 5121a30de1fSmrg $object) 5131a30de1fSmrg shift 5141a30de1fSmrg ;; 5151a30de1fSmrg *) 5161a30de1fSmrg set fnord "$@" "$arg" 5171a30de1fSmrg shift # fnord 5181a30de1fSmrg shift # $arg 5191a30de1fSmrg ;; 5201a30de1fSmrg esac 5211a30de1fSmrg done 5221a30de1fSmrg 5231a30de1fSmrg "$@" -E | 5241a30de1fSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5251a30de1fSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5261a30de1fSmrg sed '$ s: \\$::' > "$tmpdepfile" 5271a30de1fSmrg rm -f "$depfile" 5281a30de1fSmrg echo "$object : \\" > "$depfile" 5291a30de1fSmrg cat < "$tmpdepfile" >> "$depfile" 5301a30de1fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5311a30de1fSmrg rm -f "$tmpdepfile" 5321a30de1fSmrg ;; 5331a30de1fSmrg 5341a30de1fSmrgmsvisualcpp) 5351a30de1fSmrg # Important note: in order to support this mode, a compiler *must* 5361a30de1fSmrg # always write the preprocessed file to stdout, regardless of -o, 5371a30de1fSmrg # because we must use -o when running libtool. 5381a30de1fSmrg "$@" || exit $? 5391a30de1fSmrg IFS=" " 5401a30de1fSmrg for arg 5411a30de1fSmrg do 5421a30de1fSmrg case "$arg" in 5431a30de1fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5441a30de1fSmrg set fnord "$@" 5451a30de1fSmrg shift 5461a30de1fSmrg shift 5471a30de1fSmrg ;; 5481a30de1fSmrg *) 5491a30de1fSmrg set fnord "$@" "$arg" 5501a30de1fSmrg shift 5511a30de1fSmrg shift 5521a30de1fSmrg ;; 5531a30de1fSmrg esac 5541a30de1fSmrg done 5551a30de1fSmrg "$@" -E | 5561a30de1fSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5571a30de1fSmrg rm -f "$depfile" 5581a30de1fSmrg echo "$object : \\" > "$depfile" 5591a30de1fSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5601a30de1fSmrg echo " " >> "$depfile" 5611a30de1fSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5621a30de1fSmrg rm -f "$tmpdepfile" 5631a30de1fSmrg ;; 5641a30de1fSmrg 5651a30de1fSmrgnone) 5661a30de1fSmrg exec "$@" 5671a30de1fSmrg ;; 5681a30de1fSmrg 5691a30de1fSmrg*) 5701a30de1fSmrg echo "Unknown depmode $depmode" 1>&2 5711a30de1fSmrg exit 1 5721a30de1fSmrg ;; 5731a30de1fSmrgesac 5741a30de1fSmrg 5751a30de1fSmrgexit 0 5761a30de1fSmrg 5771a30de1fSmrg# Local Variables: 5781a30de1fSmrg# mode: shell-script 5791a30de1fSmrg# sh-indentation: 2 5801a30de1fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5811a30de1fSmrg# time-stamp-start: "scriptversion=" 5821a30de1fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5831a30de1fSmrg# time-stamp-end: "$" 5841a30de1fSmrg# End: 585