depcomp revision 25b89263
1a253d6aeSmrg#! /bin/sh 2a253d6aeSmrg# depcomp - compile a program generating dependencies as side-effects 3a253d6aeSmrg 425b89263Smrgscriptversion=2009-04-28.21; # UTC 5a253d6aeSmrg 625b89263Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 725b89263Smrg# Software Foundation, Inc. 8a253d6aeSmrg 9a253d6aeSmrg# This program is free software; you can redistribute it and/or modify 10a253d6aeSmrg# it under the terms of the GNU General Public License as published by 11a253d6aeSmrg# the Free Software Foundation; either version 2, or (at your option) 12a253d6aeSmrg# any later version. 13a253d6aeSmrg 14a253d6aeSmrg# This program is distributed in the hope that it will be useful, 15a253d6aeSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16a253d6aeSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17a253d6aeSmrg# GNU General Public License for more details. 18a253d6aeSmrg 19a253d6aeSmrg# You should have received a copy of the GNU General Public License 2025b89263Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21a253d6aeSmrg 22a253d6aeSmrg# As a special exception to the GNU General Public License, if you 23a253d6aeSmrg# distribute this file as part of a program that contains a 24a253d6aeSmrg# configuration script generated by Autoconf, you may include it under 25a253d6aeSmrg# the same distribution terms that you use for the rest of that program. 26a253d6aeSmrg 27a253d6aeSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28a253d6aeSmrg 29a253d6aeSmrgcase $1 in 30a253d6aeSmrg '') 31a253d6aeSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32a253d6aeSmrg exit 1; 33a253d6aeSmrg ;; 34a253d6aeSmrg -h | --h*) 35a253d6aeSmrg cat <<\EOF 36a253d6aeSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37a253d6aeSmrg 38a253d6aeSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39a253d6aeSmrgas side-effects. 40a253d6aeSmrg 41a253d6aeSmrgEnvironment variables: 42a253d6aeSmrg depmode Dependency tracking mode. 43a253d6aeSmrg source Source file read by `PROGRAMS ARGS'. 44a253d6aeSmrg object Object file output by `PROGRAMS ARGS'. 45a253d6aeSmrg DEPDIR directory where to store dependencies. 46a253d6aeSmrg depfile Dependency file to output. 47a253d6aeSmrg tmpdepfile Temporary file to use when outputing dependencies. 48a253d6aeSmrg libtool Whether libtool is used (yes/no). 49a253d6aeSmrg 50a253d6aeSmrgReport bugs to <bug-automake@gnu.org>. 51a253d6aeSmrgEOF 52a253d6aeSmrg exit $? 53a253d6aeSmrg ;; 54a253d6aeSmrg -v | --v*) 55a253d6aeSmrg echo "depcomp $scriptversion" 56a253d6aeSmrg exit $? 57a253d6aeSmrg ;; 58a253d6aeSmrgesac 59a253d6aeSmrg 60a253d6aeSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61a253d6aeSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62a253d6aeSmrg exit 1 63a253d6aeSmrgfi 64a253d6aeSmrg 65a253d6aeSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66a253d6aeSmrgdepfile=${depfile-`echo "$object" | 67a253d6aeSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68a253d6aeSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69a253d6aeSmrg 70a253d6aeSmrgrm -f "$tmpdepfile" 71a253d6aeSmrg 72a253d6aeSmrg# Some modes work just like other modes, but use different flags. We 73a253d6aeSmrg# parameterize here, but still list the modes in the big case below, 74a253d6aeSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75a253d6aeSmrg# here, because this file can only contain one case statement. 76a253d6aeSmrgif test "$depmode" = hp; then 77a253d6aeSmrg # HP compiler uses -M and no extra arg. 78a253d6aeSmrg gccflag=-M 79a253d6aeSmrg depmode=gcc 80a253d6aeSmrgfi 81a253d6aeSmrg 82a253d6aeSmrgif test "$depmode" = dashXmstdout; then 83a253d6aeSmrg # This is just like dashmstdout with a different argument. 84a253d6aeSmrg dashmflag=-xM 85a253d6aeSmrg depmode=dashmstdout 86a253d6aeSmrgfi 87a253d6aeSmrg 8825b89263Smrgcygpath_u="cygpath -u -f -" 8925b89263Smrgif test "$depmode" = msvcmsys; then 9025b89263Smrg # This is just like msvisualcpp but w/o cygpath translation. 9125b89263Smrg # Just convert the backslash-escaped backslashes to single forward 9225b89263Smrg # slashes to satisfy depend.m4 9325b89263Smrg cygpath_u="sed s,\\\\\\\\,/,g" 9425b89263Smrg depmode=msvisualcpp 9525b89263Smrgfi 9625b89263Smrg 97a253d6aeSmrgcase "$depmode" in 98a253d6aeSmrggcc3) 99a253d6aeSmrg## gcc 3 implements dependency tracking that does exactly what 100a253d6aeSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101a253d6aeSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 102a253d6aeSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103a253d6aeSmrg## the command line argument order; so add the flags where they 104a253d6aeSmrg## appear in depend2.am. Note that the slowdown incurred here 105a253d6aeSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106a253d6aeSmrg for arg 107a253d6aeSmrg do 108a253d6aeSmrg case $arg in 109a253d6aeSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110a253d6aeSmrg *) set fnord "$@" "$arg" ;; 111a253d6aeSmrg esac 112a253d6aeSmrg shift # fnord 113a253d6aeSmrg shift # $arg 114a253d6aeSmrg done 115a253d6aeSmrg "$@" 116a253d6aeSmrg stat=$? 117a253d6aeSmrg if test $stat -eq 0; then : 118a253d6aeSmrg else 119a253d6aeSmrg rm -f "$tmpdepfile" 120a253d6aeSmrg exit $stat 121a253d6aeSmrg fi 122a253d6aeSmrg mv "$tmpdepfile" "$depfile" 123a253d6aeSmrg ;; 124a253d6aeSmrg 125a253d6aeSmrggcc) 126a253d6aeSmrg## There are various ways to get dependency output from gcc. Here's 127a253d6aeSmrg## why we pick this rather obscure method: 128a253d6aeSmrg## - Don't want to use -MD because we'd like the dependencies to end 129a253d6aeSmrg## up in a subdir. Having to rename by hand is ugly. 130a253d6aeSmrg## (We might end up doing this anyway to support other compilers.) 131a253d6aeSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132a253d6aeSmrg## -MM, not -M (despite what the docs say). 133a253d6aeSmrg## - Using -M directly means running the compiler twice (even worse 134a253d6aeSmrg## than renaming). 135a253d6aeSmrg if test -z "$gccflag"; then 136a253d6aeSmrg gccflag=-MD, 137a253d6aeSmrg fi 138a253d6aeSmrg "$@" -Wp,"$gccflag$tmpdepfile" 139a253d6aeSmrg stat=$? 140a253d6aeSmrg if test $stat -eq 0; then : 141a253d6aeSmrg else 142a253d6aeSmrg rm -f "$tmpdepfile" 143a253d6aeSmrg exit $stat 144a253d6aeSmrg fi 145a253d6aeSmrg rm -f "$depfile" 146a253d6aeSmrg echo "$object : \\" > "$depfile" 147a253d6aeSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148a253d6aeSmrg## The second -e expression handles DOS-style file names with drive letters. 149a253d6aeSmrg sed -e 's/^[^:]*: / /' \ 150a253d6aeSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151a253d6aeSmrg## This next piece of magic avoids the `deleted header file' problem. 152a253d6aeSmrg## The problem is that when a header file which appears in a .P file 153a253d6aeSmrg## is deleted, the dependency causes make to die (because there is 154a253d6aeSmrg## typically no way to rebuild the header). We avoid this by adding 155a253d6aeSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 156a253d6aeSmrg## this for us directly. 157a253d6aeSmrg tr ' ' ' 158a253d6aeSmrg' < "$tmpdepfile" | 159a253d6aeSmrg## Some versions of gcc put a space before the `:'. On the theory 160a253d6aeSmrg## that the space means something, we add a space to the output as 161a253d6aeSmrg## well. 162a253d6aeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 163a253d6aeSmrg## correctly. Breaking it into two sed invocations is a workaround. 164a253d6aeSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165a253d6aeSmrg rm -f "$tmpdepfile" 166a253d6aeSmrg ;; 167a253d6aeSmrg 168a253d6aeSmrghp) 169a253d6aeSmrg # This case exists only to let depend.m4 do its work. It works by 170a253d6aeSmrg # looking at the text of this script. This case will never be run, 171a253d6aeSmrg # since it is checked for above. 172a253d6aeSmrg exit 1 173a253d6aeSmrg ;; 174a253d6aeSmrg 175a253d6aeSmrgsgi) 176a253d6aeSmrg if test "$libtool" = yes; then 177a253d6aeSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178a253d6aeSmrg else 179a253d6aeSmrg "$@" -MDupdate "$tmpdepfile" 180a253d6aeSmrg fi 181a253d6aeSmrg stat=$? 182a253d6aeSmrg if test $stat -eq 0; then : 183a253d6aeSmrg else 184a253d6aeSmrg rm -f "$tmpdepfile" 185a253d6aeSmrg exit $stat 186a253d6aeSmrg fi 187a253d6aeSmrg rm -f "$depfile" 188a253d6aeSmrg 189a253d6aeSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190a253d6aeSmrg echo "$object : \\" > "$depfile" 191a253d6aeSmrg 192a253d6aeSmrg # Clip off the initial element (the dependent). Don't try to be 193a253d6aeSmrg # clever and replace this with sed code, as IRIX sed won't handle 194a253d6aeSmrg # lines with more than a fixed number of characters (4096 in 195a253d6aeSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196a253d6aeSmrg # the IRIX cc adds comments like `#:fec' to the end of the 197a253d6aeSmrg # dependency line. 198a253d6aeSmrg tr ' ' ' 199a253d6aeSmrg' < "$tmpdepfile" \ 200a253d6aeSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201a253d6aeSmrg tr ' 20225b89263Smrg' ' ' >> "$depfile" 20325b89263Smrg echo >> "$depfile" 204a253d6aeSmrg 205a253d6aeSmrg # The second pass generates a dummy entry for each header file. 206a253d6aeSmrg tr ' ' ' 207a253d6aeSmrg' < "$tmpdepfile" \ 208a253d6aeSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20925b89263Smrg >> "$depfile" 210a253d6aeSmrg else 211a253d6aeSmrg # The sourcefile does not contain any dependencies, so just 212a253d6aeSmrg # store a dummy comment line, to avoid errors with the Makefile 213a253d6aeSmrg # "include basename.Plo" scheme. 214a253d6aeSmrg echo "#dummy" > "$depfile" 215a253d6aeSmrg fi 216a253d6aeSmrg rm -f "$tmpdepfile" 217a253d6aeSmrg ;; 218a253d6aeSmrg 219a253d6aeSmrgaix) 220a253d6aeSmrg # The C for AIX Compiler uses -M and outputs the dependencies 221a253d6aeSmrg # in a .u file. In older versions, this file always lives in the 222a253d6aeSmrg # current directory. Also, the AIX compiler puts `$object:' at the 223a253d6aeSmrg # start of each line; $object doesn't have directory information. 224a253d6aeSmrg # Version 6 uses the directory in both cases. 225ea133fd7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226ea133fd7Smrg test "x$dir" = "x$object" && dir= 227ea133fd7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228a253d6aeSmrg if test "$libtool" = yes; then 229ea133fd7Smrg tmpdepfile1=$dir$base.u 230ea133fd7Smrg tmpdepfile2=$base.u 231ea133fd7Smrg tmpdepfile3=$dir.libs/$base.u 232a253d6aeSmrg "$@" -Wc,-M 233a253d6aeSmrg else 234ea133fd7Smrg tmpdepfile1=$dir$base.u 235ea133fd7Smrg tmpdepfile2=$dir$base.u 236ea133fd7Smrg tmpdepfile3=$dir$base.u 237a253d6aeSmrg "$@" -M 238a253d6aeSmrg fi 239a253d6aeSmrg stat=$? 240a253d6aeSmrg 241a253d6aeSmrg if test $stat -eq 0; then : 242a253d6aeSmrg else 243ea133fd7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244a253d6aeSmrg exit $stat 245a253d6aeSmrg fi 246a253d6aeSmrg 247ea133fd7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248ea133fd7Smrg do 249ea133fd7Smrg test -f "$tmpdepfile" && break 250ea133fd7Smrg done 251a253d6aeSmrg if test -f "$tmpdepfile"; then 252a253d6aeSmrg # Each line is of the form `foo.o: dependent.h'. 253a253d6aeSmrg # Do two passes, one to just change these to 254a253d6aeSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 255ea133fd7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256ea133fd7Smrg # That's a tab and a space in the []. 257ea133fd7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258a253d6aeSmrg else 259a253d6aeSmrg # The sourcefile does not contain any dependencies, so just 260a253d6aeSmrg # store a dummy comment line, to avoid errors with the Makefile 261a253d6aeSmrg # "include basename.Plo" scheme. 262a253d6aeSmrg echo "#dummy" > "$depfile" 263a253d6aeSmrg fi 264a253d6aeSmrg rm -f "$tmpdepfile" 265a253d6aeSmrg ;; 266a253d6aeSmrg 267a253d6aeSmrgicc) 268a253d6aeSmrg # Intel's C compiler understands `-MD -MF file'. However on 269a253d6aeSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270a253d6aeSmrg # ICC 7.0 will fill foo.d with something like 271a253d6aeSmrg # foo.o: sub/foo.c 272a253d6aeSmrg # foo.o: sub/foo.h 273a253d6aeSmrg # which is wrong. We want: 274a253d6aeSmrg # sub/foo.o: sub/foo.c 275a253d6aeSmrg # sub/foo.o: sub/foo.h 276a253d6aeSmrg # sub/foo.c: 277a253d6aeSmrg # sub/foo.h: 278a253d6aeSmrg # ICC 7.1 will output 279a253d6aeSmrg # foo.o: sub/foo.c sub/foo.h 280a253d6aeSmrg # and will wrap long lines using \ : 281a253d6aeSmrg # foo.o: sub/foo.c ... \ 282a253d6aeSmrg # sub/foo.h ... \ 283a253d6aeSmrg # ... 284a253d6aeSmrg 285a253d6aeSmrg "$@" -MD -MF "$tmpdepfile" 286a253d6aeSmrg stat=$? 287a253d6aeSmrg if test $stat -eq 0; then : 288a253d6aeSmrg else 289a253d6aeSmrg rm -f "$tmpdepfile" 290a253d6aeSmrg exit $stat 291a253d6aeSmrg fi 292a253d6aeSmrg rm -f "$depfile" 293a253d6aeSmrg # Each line is of the form `foo.o: dependent.h', 294a253d6aeSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295a253d6aeSmrg # Do two passes, one to just change these to 296a253d6aeSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 297a253d6aeSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298a253d6aeSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 299a253d6aeSmrg # correctly. Breaking it into two sed invocations is a workaround. 300a253d6aeSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301a253d6aeSmrg sed -e 's/$/ :/' >> "$depfile" 302a253d6aeSmrg rm -f "$tmpdepfile" 303a253d6aeSmrg ;; 304a253d6aeSmrg 305a253d6aeSmrghp2) 306a253d6aeSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307a253d6aeSmrg # compilers, which have integrated preprocessors. The correct option 308a253d6aeSmrg # to use with these is +Maked; it writes dependencies to a file named 309a253d6aeSmrg # 'foo.d', which lands next to the object file, wherever that 310a253d6aeSmrg # happens to be. 311a253d6aeSmrg # Much of this is similar to the tru64 case; see comments there. 312a253d6aeSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313a253d6aeSmrg test "x$dir" = "x$object" && dir= 314a253d6aeSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315a253d6aeSmrg if test "$libtool" = yes; then 316a253d6aeSmrg tmpdepfile1=$dir$base.d 317a253d6aeSmrg tmpdepfile2=$dir.libs/$base.d 318a253d6aeSmrg "$@" -Wc,+Maked 319a253d6aeSmrg else 320a253d6aeSmrg tmpdepfile1=$dir$base.d 321a253d6aeSmrg tmpdepfile2=$dir$base.d 322a253d6aeSmrg "$@" +Maked 323a253d6aeSmrg fi 324a253d6aeSmrg stat=$? 325a253d6aeSmrg if test $stat -eq 0; then : 326a253d6aeSmrg else 327a253d6aeSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328a253d6aeSmrg exit $stat 329a253d6aeSmrg fi 330a253d6aeSmrg 331a253d6aeSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332a253d6aeSmrg do 333a253d6aeSmrg test -f "$tmpdepfile" && break 334a253d6aeSmrg done 335a253d6aeSmrg if test -f "$tmpdepfile"; then 336a253d6aeSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337a253d6aeSmrg # Add `dependent.h:' lines. 33825b89263Smrg sed -ne '2,${ 33925b89263Smrg s/^ *// 34025b89263Smrg s/ \\*$// 34125b89263Smrg s/$/:/ 34225b89263Smrg p 34325b89263Smrg }' "$tmpdepfile" >> "$depfile" 344a253d6aeSmrg else 345a253d6aeSmrg echo "#dummy" > "$depfile" 346a253d6aeSmrg fi 347a253d6aeSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 348a253d6aeSmrg ;; 349a253d6aeSmrg 350a253d6aeSmrgtru64) 351a253d6aeSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 352a253d6aeSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353a253d6aeSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354a253d6aeSmrg # dependencies in `foo.d' instead, so we check for that too. 355a253d6aeSmrg # Subdirectories are respected. 356a253d6aeSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357a253d6aeSmrg test "x$dir" = "x$object" && dir= 358a253d6aeSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359a253d6aeSmrg 360a253d6aeSmrg if test "$libtool" = yes; then 361a253d6aeSmrg # With Tru64 cc, shared objects can also be used to make a 362a253d6aeSmrg # static library. This mechanism is used in libtool 1.4 series to 363a253d6aeSmrg # handle both shared and static libraries in a single compilation. 364a253d6aeSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365a253d6aeSmrg # 366a253d6aeSmrg # With libtool 1.5 this exception was removed, and libtool now 367a253d6aeSmrg # generates 2 separate objects for the 2 libraries. These two 368a253d6aeSmrg # compilations output dependencies in $dir.libs/$base.o.d and 369a253d6aeSmrg # in $dir$base.o.d. We have to check for both files, because 370a253d6aeSmrg # one of the two compilations can be disabled. We should prefer 371a253d6aeSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372a253d6aeSmrg # automatically cleaned when .libs/ is deleted, while ignoring 373a253d6aeSmrg # the former would cause a distcleancheck panic. 374a253d6aeSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375a253d6aeSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376a253d6aeSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377a253d6aeSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378a253d6aeSmrg "$@" -Wc,-MD 379a253d6aeSmrg else 380a253d6aeSmrg tmpdepfile1=$dir$base.o.d 381a253d6aeSmrg tmpdepfile2=$dir$base.d 382a253d6aeSmrg tmpdepfile3=$dir$base.d 383a253d6aeSmrg tmpdepfile4=$dir$base.d 384a253d6aeSmrg "$@" -MD 385a253d6aeSmrg fi 386a253d6aeSmrg 387a253d6aeSmrg stat=$? 388a253d6aeSmrg if test $stat -eq 0; then : 389a253d6aeSmrg else 390a253d6aeSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391a253d6aeSmrg exit $stat 392a253d6aeSmrg fi 393a253d6aeSmrg 394a253d6aeSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395a253d6aeSmrg do 396a253d6aeSmrg test -f "$tmpdepfile" && break 397a253d6aeSmrg done 398a253d6aeSmrg if test -f "$tmpdepfile"; then 399a253d6aeSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400a253d6aeSmrg # That's a tab and a space in the []. 401a253d6aeSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402a253d6aeSmrg else 403a253d6aeSmrg echo "#dummy" > "$depfile" 404a253d6aeSmrg fi 405a253d6aeSmrg rm -f "$tmpdepfile" 406a253d6aeSmrg ;; 407a253d6aeSmrg 408a253d6aeSmrg#nosideeffect) 409a253d6aeSmrg # This comment above is used by automake to tell side-effect 410a253d6aeSmrg # dependency tracking mechanisms from slower ones. 411a253d6aeSmrg 412a253d6aeSmrgdashmstdout) 413a253d6aeSmrg # Important note: in order to support this mode, a compiler *must* 414a253d6aeSmrg # always write the preprocessed file to stdout, regardless of -o. 415a253d6aeSmrg "$@" || exit $? 416a253d6aeSmrg 417a253d6aeSmrg # Remove the call to Libtool. 418a253d6aeSmrg if test "$libtool" = yes; then 41925b89263Smrg while test "X$1" != 'X--mode=compile'; do 420a253d6aeSmrg shift 421a253d6aeSmrg done 422a253d6aeSmrg shift 423a253d6aeSmrg fi 424a253d6aeSmrg 425a253d6aeSmrg # Remove `-o $object'. 426a253d6aeSmrg IFS=" " 427a253d6aeSmrg for arg 428a253d6aeSmrg do 429a253d6aeSmrg case $arg in 430a253d6aeSmrg -o) 431a253d6aeSmrg shift 432a253d6aeSmrg ;; 433a253d6aeSmrg $object) 434a253d6aeSmrg shift 435a253d6aeSmrg ;; 436a253d6aeSmrg *) 437a253d6aeSmrg set fnord "$@" "$arg" 438a253d6aeSmrg shift # fnord 439a253d6aeSmrg shift # $arg 440a253d6aeSmrg ;; 441a253d6aeSmrg esac 442a253d6aeSmrg done 443a253d6aeSmrg 444a253d6aeSmrg test -z "$dashmflag" && dashmflag=-M 445a253d6aeSmrg # Require at least two characters before searching for `:' 446a253d6aeSmrg # in the target name. This is to cope with DOS-style filenames: 447a253d6aeSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448a253d6aeSmrg "$@" $dashmflag | 449a253d6aeSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450a253d6aeSmrg rm -f "$depfile" 451a253d6aeSmrg cat < "$tmpdepfile" > "$depfile" 452a253d6aeSmrg tr ' ' ' 453a253d6aeSmrg' < "$tmpdepfile" | \ 454a253d6aeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 455a253d6aeSmrg## correctly. Breaking it into two sed invocations is a workaround. 456a253d6aeSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457a253d6aeSmrg rm -f "$tmpdepfile" 458a253d6aeSmrg ;; 459a253d6aeSmrg 460a253d6aeSmrgdashXmstdout) 461a253d6aeSmrg # This case only exists to satisfy depend.m4. It is never actually 462a253d6aeSmrg # run, as this mode is specially recognized in the preamble. 463a253d6aeSmrg exit 1 464a253d6aeSmrg ;; 465a253d6aeSmrg 466a253d6aeSmrgmakedepend) 467a253d6aeSmrg "$@" || exit $? 468a253d6aeSmrg # Remove any Libtool call 469a253d6aeSmrg if test "$libtool" = yes; then 47025b89263Smrg while test "X$1" != 'X--mode=compile'; do 471a253d6aeSmrg shift 472a253d6aeSmrg done 473a253d6aeSmrg shift 474a253d6aeSmrg fi 475a253d6aeSmrg # X makedepend 476a253d6aeSmrg shift 47725b89263Smrg cleared=no eat=no 47825b89263Smrg for arg 47925b89263Smrg do 480a253d6aeSmrg case $cleared in 481a253d6aeSmrg no) 482a253d6aeSmrg set ""; shift 483a253d6aeSmrg cleared=yes ;; 484a253d6aeSmrg esac 48525b89263Smrg if test $eat = yes; then 48625b89263Smrg eat=no 48725b89263Smrg continue 48825b89263Smrg fi 489a253d6aeSmrg case "$arg" in 490a253d6aeSmrg -D*|-I*) 491a253d6aeSmrg set fnord "$@" "$arg"; shift ;; 492a253d6aeSmrg # Strip any option that makedepend may not understand. Remove 493a253d6aeSmrg # the object too, otherwise makedepend will parse it as a source file. 49425b89263Smrg -arch) 49525b89263Smrg eat=yes ;; 496a253d6aeSmrg -*|$object) 497a253d6aeSmrg ;; 498a253d6aeSmrg *) 499a253d6aeSmrg set fnord "$@" "$arg"; shift ;; 500a253d6aeSmrg esac 501a253d6aeSmrg done 50225b89263Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503a253d6aeSmrg touch "$tmpdepfile" 504a253d6aeSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505a253d6aeSmrg rm -f "$depfile" 506a253d6aeSmrg cat < "$tmpdepfile" > "$depfile" 507a253d6aeSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508a253d6aeSmrg' | \ 509a253d6aeSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 510a253d6aeSmrg## correctly. Breaking it into two sed invocations is a workaround. 511a253d6aeSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512a253d6aeSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513a253d6aeSmrg ;; 514a253d6aeSmrg 515a253d6aeSmrgcpp) 516a253d6aeSmrg # Important note: in order to support this mode, a compiler *must* 517a253d6aeSmrg # always write the preprocessed file to stdout. 518a253d6aeSmrg "$@" || exit $? 519a253d6aeSmrg 520a253d6aeSmrg # Remove the call to Libtool. 521a253d6aeSmrg if test "$libtool" = yes; then 52225b89263Smrg while test "X$1" != 'X--mode=compile'; do 523a253d6aeSmrg shift 524a253d6aeSmrg done 525a253d6aeSmrg shift 526a253d6aeSmrg fi 527a253d6aeSmrg 528a253d6aeSmrg # Remove `-o $object'. 529a253d6aeSmrg IFS=" " 530a253d6aeSmrg for arg 531a253d6aeSmrg do 532a253d6aeSmrg case $arg in 533a253d6aeSmrg -o) 534a253d6aeSmrg shift 535a253d6aeSmrg ;; 536a253d6aeSmrg $object) 537a253d6aeSmrg shift 538a253d6aeSmrg ;; 539a253d6aeSmrg *) 540a253d6aeSmrg set fnord "$@" "$arg" 541a253d6aeSmrg shift # fnord 542a253d6aeSmrg shift # $arg 543a253d6aeSmrg ;; 544a253d6aeSmrg esac 545a253d6aeSmrg done 546a253d6aeSmrg 547a253d6aeSmrg "$@" -E | 548a253d6aeSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549a253d6aeSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550a253d6aeSmrg sed '$ s: \\$::' > "$tmpdepfile" 551a253d6aeSmrg rm -f "$depfile" 552a253d6aeSmrg echo "$object : \\" > "$depfile" 553a253d6aeSmrg cat < "$tmpdepfile" >> "$depfile" 554a253d6aeSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555a253d6aeSmrg rm -f "$tmpdepfile" 556a253d6aeSmrg ;; 557a253d6aeSmrg 558a253d6aeSmrgmsvisualcpp) 559a253d6aeSmrg # Important note: in order to support this mode, a compiler *must* 56025b89263Smrg # always write the preprocessed file to stdout. 561a253d6aeSmrg "$@" || exit $? 56225b89263Smrg 56325b89263Smrg # Remove the call to Libtool. 56425b89263Smrg if test "$libtool" = yes; then 56525b89263Smrg while test "X$1" != 'X--mode=compile'; do 56625b89263Smrg shift 56725b89263Smrg done 56825b89263Smrg shift 56925b89263Smrg fi 57025b89263Smrg 571a253d6aeSmrg IFS=" " 572a253d6aeSmrg for arg 573a253d6aeSmrg do 574a253d6aeSmrg case "$arg" in 57525b89263Smrg -o) 57625b89263Smrg shift 57725b89263Smrg ;; 57825b89263Smrg $object) 57925b89263Smrg shift 58025b89263Smrg ;; 581a253d6aeSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582a253d6aeSmrg set fnord "$@" 583a253d6aeSmrg shift 584a253d6aeSmrg shift 585a253d6aeSmrg ;; 586a253d6aeSmrg *) 587a253d6aeSmrg set fnord "$@" "$arg" 588a253d6aeSmrg shift 589a253d6aeSmrg shift 590a253d6aeSmrg ;; 591a253d6aeSmrg esac 592a253d6aeSmrg done 59325b89263Smrg "$@" -E 2>/dev/null | 59425b89263Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595a253d6aeSmrg rm -f "$depfile" 596a253d6aeSmrg echo "$object : \\" > "$depfile" 59725b89263Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598a253d6aeSmrg echo " " >> "$depfile" 59925b89263Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600a253d6aeSmrg rm -f "$tmpdepfile" 601a253d6aeSmrg ;; 602a253d6aeSmrg 60325b89263Smrgmsvcmsys) 60425b89263Smrg # This case exists only to let depend.m4 do its work. It works by 60525b89263Smrg # looking at the text of this script. This case will never be run, 60625b89263Smrg # since it is checked for above. 60725b89263Smrg exit 1 60825b89263Smrg ;; 60925b89263Smrg 610a253d6aeSmrgnone) 611a253d6aeSmrg exec "$@" 612a253d6aeSmrg ;; 613a253d6aeSmrg 614a253d6aeSmrg*) 615a253d6aeSmrg echo "Unknown depmode $depmode" 1>&2 616a253d6aeSmrg exit 1 617a253d6aeSmrg ;; 618a253d6aeSmrgesac 619a253d6aeSmrg 620a253d6aeSmrgexit 0 621a253d6aeSmrg 622a253d6aeSmrg# Local Variables: 623a253d6aeSmrg# mode: shell-script 624a253d6aeSmrg# sh-indentation: 2 625a253d6aeSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626a253d6aeSmrg# time-stamp-start: "scriptversion=" 627a253d6aeSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62825b89263Smrg# time-stamp-time-zone: "UTC" 62925b89263Smrg# time-stamp-end: "; # UTC" 630a253d6aeSmrg# End: 631