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