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