depcomp revision 0597fb56
1b042e37fSmrg#! /bin/sh 2b042e37fSmrg# depcomp - compile a program generating dependencies as side-effects 3b042e37fSmrg 40597fb56Smrgscriptversion=2011-12-04.11; # UTC 5b042e37fSmrg 60597fb56Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 70597fb56Smrg# 2011 Free 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. 470597fb56Smrg tmpdepfile Temporary file to use when outputting 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 930597fb56Smrg cygpath_u='sed s,\\\\,/,g' 94706b6b52Smrg depmode=msvisualcpp 95706b6b52Smrgfi 96706b6b52Smrg 970597fb56Smrgif test "$depmode" = msvc7msys; then 980597fb56Smrg # This is just like msvc7 but w/o cygpath translation. 990597fb56Smrg # Just convert the backslash-escaped backslashes to single forward 1000597fb56Smrg # slashes to satisfy depend.m4 1010597fb56Smrg cygpath_u='sed s,\\\\,/,g' 1020597fb56Smrg depmode=msvc7 1030597fb56Smrgfi 1040597fb56Smrg 105b042e37fSmrgcase "$depmode" in 106b042e37fSmrggcc3) 107b042e37fSmrg## gcc 3 implements dependency tracking that does exactly what 108b042e37fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 109b042e37fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 110b042e37fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 111b042e37fSmrg## the command line argument order; so add the flags where they 112b042e37fSmrg## appear in depend2.am. Note that the slowdown incurred here 113b042e37fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 114b042e37fSmrg for arg 115b042e37fSmrg do 116b042e37fSmrg case $arg in 117b042e37fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 118b042e37fSmrg *) set fnord "$@" "$arg" ;; 119b042e37fSmrg esac 120b042e37fSmrg shift # fnord 121b042e37fSmrg shift # $arg 122b042e37fSmrg done 123b042e37fSmrg "$@" 124b042e37fSmrg stat=$? 125b042e37fSmrg if test $stat -eq 0; then : 126b042e37fSmrg else 127b042e37fSmrg rm -f "$tmpdepfile" 128b042e37fSmrg exit $stat 129b042e37fSmrg fi 130b042e37fSmrg mv "$tmpdepfile" "$depfile" 131b042e37fSmrg ;; 132b042e37fSmrg 133b042e37fSmrggcc) 134b042e37fSmrg## There are various ways to get dependency output from gcc. Here's 135b042e37fSmrg## why we pick this rather obscure method: 136b042e37fSmrg## - Don't want to use -MD because we'd like the dependencies to end 137b042e37fSmrg## up in a subdir. Having to rename by hand is ugly. 138b042e37fSmrg## (We might end up doing this anyway to support other compilers.) 139b042e37fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140b042e37fSmrg## -MM, not -M (despite what the docs say). 141b042e37fSmrg## - Using -M directly means running the compiler twice (even worse 142b042e37fSmrg## than renaming). 143b042e37fSmrg if test -z "$gccflag"; then 144b042e37fSmrg gccflag=-MD, 145b042e37fSmrg fi 146b042e37fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 147b042e37fSmrg stat=$? 148b042e37fSmrg if test $stat -eq 0; then : 149b042e37fSmrg else 150b042e37fSmrg rm -f "$tmpdepfile" 151b042e37fSmrg exit $stat 152b042e37fSmrg fi 153b042e37fSmrg rm -f "$depfile" 154b042e37fSmrg echo "$object : \\" > "$depfile" 155b042e37fSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156b042e37fSmrg## The second -e expression handles DOS-style file names with drive letters. 157b042e37fSmrg sed -e 's/^[^:]*: / /' \ 158b042e37fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159b042e37fSmrg## This next piece of magic avoids the `deleted header file' problem. 160b042e37fSmrg## The problem is that when a header file which appears in a .P file 161b042e37fSmrg## is deleted, the dependency causes make to die (because there is 162b042e37fSmrg## typically no way to rebuild the header). We avoid this by adding 163b042e37fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 164b042e37fSmrg## this for us directly. 165b042e37fSmrg tr ' ' ' 166b042e37fSmrg' < "$tmpdepfile" | 167b042e37fSmrg## Some versions of gcc put a space before the `:'. On the theory 168b042e37fSmrg## that the space means something, we add a space to the output as 1690597fb56Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 1700597fb56Smrg## to the object. Take care to not repeat it in the output. 171b042e37fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 172b042e37fSmrg## correctly. Breaking it into two sed invocations is a workaround. 1730597fb56Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1740597fb56Smrg | sed -e 's/$/ :/' >> "$depfile" 175b042e37fSmrg rm -f "$tmpdepfile" 176b042e37fSmrg ;; 177b042e37fSmrg 178b042e37fSmrghp) 179b042e37fSmrg # This case exists only to let depend.m4 do its work. It works by 180b042e37fSmrg # looking at the text of this script. This case will never be run, 181b042e37fSmrg # since it is checked for above. 182b042e37fSmrg exit 1 183b042e37fSmrg ;; 184b042e37fSmrg 185b042e37fSmrgsgi) 186b042e37fSmrg if test "$libtool" = yes; then 187b042e37fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 188b042e37fSmrg else 189b042e37fSmrg "$@" -MDupdate "$tmpdepfile" 190b042e37fSmrg fi 191b042e37fSmrg stat=$? 192b042e37fSmrg if test $stat -eq 0; then : 193b042e37fSmrg else 194b042e37fSmrg rm -f "$tmpdepfile" 195b042e37fSmrg exit $stat 196b042e37fSmrg fi 197b042e37fSmrg rm -f "$depfile" 198b042e37fSmrg 199b042e37fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 200b042e37fSmrg echo "$object : \\" > "$depfile" 201b042e37fSmrg 202b042e37fSmrg # Clip off the initial element (the dependent). Don't try to be 203b042e37fSmrg # clever and replace this with sed code, as IRIX sed won't handle 204b042e37fSmrg # lines with more than a fixed number of characters (4096 in 205b042e37fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206b042e37fSmrg # the IRIX cc adds comments like `#:fec' to the end of the 207b042e37fSmrg # dependency line. 208b042e37fSmrg tr ' ' ' 209b042e37fSmrg' < "$tmpdepfile" \ 210b042e37fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211b042e37fSmrg tr ' 212706b6b52Smrg' ' ' >> "$depfile" 213706b6b52Smrg echo >> "$depfile" 214b042e37fSmrg 215b042e37fSmrg # The second pass generates a dummy entry for each header file. 216b042e37fSmrg tr ' ' ' 217b042e37fSmrg' < "$tmpdepfile" \ 218b042e37fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 219706b6b52Smrg >> "$depfile" 220b042e37fSmrg else 221b042e37fSmrg # The sourcefile does not contain any dependencies, so just 222b042e37fSmrg # store a dummy comment line, to avoid errors with the Makefile 223b042e37fSmrg # "include basename.Plo" scheme. 224b042e37fSmrg echo "#dummy" > "$depfile" 225b042e37fSmrg fi 226b042e37fSmrg rm -f "$tmpdepfile" 227b042e37fSmrg ;; 228b042e37fSmrg 229b042e37fSmrgaix) 230b042e37fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 231b042e37fSmrg # in a .u file. In older versions, this file always lives in the 232b042e37fSmrg # current directory. Also, the AIX compiler puts `$object:' at the 233b042e37fSmrg # start of each line; $object doesn't have directory information. 234b042e37fSmrg # Version 6 uses the directory in both cases. 235706b6b52Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 236706b6b52Smrg test "x$dir" = "x$object" && dir= 237706b6b52Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 238b042e37fSmrg if test "$libtool" = yes; then 239706b6b52Smrg tmpdepfile1=$dir$base.u 240706b6b52Smrg tmpdepfile2=$base.u 241706b6b52Smrg tmpdepfile3=$dir.libs/$base.u 242b042e37fSmrg "$@" -Wc,-M 243b042e37fSmrg else 244706b6b52Smrg tmpdepfile1=$dir$base.u 245706b6b52Smrg tmpdepfile2=$dir$base.u 246706b6b52Smrg tmpdepfile3=$dir$base.u 247b042e37fSmrg "$@" -M 248b042e37fSmrg fi 249b042e37fSmrg stat=$? 250b042e37fSmrg 251b042e37fSmrg if test $stat -eq 0; then : 252b042e37fSmrg else 253706b6b52Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 254b042e37fSmrg exit $stat 255b042e37fSmrg fi 256b042e37fSmrg 257706b6b52Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 258706b6b52Smrg do 259706b6b52Smrg test -f "$tmpdepfile" && break 260706b6b52Smrg done 261b042e37fSmrg if test -f "$tmpdepfile"; then 262b042e37fSmrg # Each line is of the form `foo.o: dependent.h'. 263b042e37fSmrg # Do two passes, one to just change these to 264b042e37fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 265706b6b52Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 266706b6b52Smrg # That's a tab and a space in the []. 267706b6b52Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268b042e37fSmrg else 269b042e37fSmrg # The sourcefile does not contain any dependencies, so just 270b042e37fSmrg # store a dummy comment line, to avoid errors with the Makefile 271b042e37fSmrg # "include basename.Plo" scheme. 272b042e37fSmrg echo "#dummy" > "$depfile" 273b042e37fSmrg fi 274b042e37fSmrg rm -f "$tmpdepfile" 275b042e37fSmrg ;; 276b042e37fSmrg 277b042e37fSmrgicc) 278b042e37fSmrg # Intel's C compiler understands `-MD -MF file'. However on 279b042e37fSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280b042e37fSmrg # ICC 7.0 will fill foo.d with something like 281b042e37fSmrg # foo.o: sub/foo.c 282b042e37fSmrg # foo.o: sub/foo.h 283b042e37fSmrg # which is wrong. We want: 284b042e37fSmrg # sub/foo.o: sub/foo.c 285b042e37fSmrg # sub/foo.o: sub/foo.h 286b042e37fSmrg # sub/foo.c: 287b042e37fSmrg # sub/foo.h: 288b042e37fSmrg # ICC 7.1 will output 289b042e37fSmrg # foo.o: sub/foo.c sub/foo.h 290b042e37fSmrg # and will wrap long lines using \ : 291b042e37fSmrg # foo.o: sub/foo.c ... \ 292b042e37fSmrg # sub/foo.h ... \ 293b042e37fSmrg # ... 294b042e37fSmrg 295b042e37fSmrg "$@" -MD -MF "$tmpdepfile" 296b042e37fSmrg stat=$? 297b042e37fSmrg if test $stat -eq 0; then : 298b042e37fSmrg else 299b042e37fSmrg rm -f "$tmpdepfile" 300b042e37fSmrg exit $stat 301b042e37fSmrg fi 302b042e37fSmrg rm -f "$depfile" 303b042e37fSmrg # Each line is of the form `foo.o: dependent.h', 304b042e37fSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 305b042e37fSmrg # Do two passes, one to just change these to 306b042e37fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 307b042e37fSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308b042e37fSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 309b042e37fSmrg # correctly. Breaking it into two sed invocations is a workaround. 310b042e37fSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311b042e37fSmrg sed -e 's/$/ :/' >> "$depfile" 312b042e37fSmrg rm -f "$tmpdepfile" 313b042e37fSmrg ;; 314b042e37fSmrg 315b042e37fSmrghp2) 316b042e37fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 317b042e37fSmrg # compilers, which have integrated preprocessors. The correct option 318b042e37fSmrg # to use with these is +Maked; it writes dependencies to a file named 319b042e37fSmrg # 'foo.d', which lands next to the object file, wherever that 320b042e37fSmrg # happens to be. 321b042e37fSmrg # Much of this is similar to the tru64 case; see comments there. 322b042e37fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 323b042e37fSmrg test "x$dir" = "x$object" && dir= 324b042e37fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 325b042e37fSmrg if test "$libtool" = yes; then 326b042e37fSmrg tmpdepfile1=$dir$base.d 327b042e37fSmrg tmpdepfile2=$dir.libs/$base.d 328b042e37fSmrg "$@" -Wc,+Maked 329b042e37fSmrg else 330b042e37fSmrg tmpdepfile1=$dir$base.d 331b042e37fSmrg tmpdepfile2=$dir$base.d 332b042e37fSmrg "$@" +Maked 333b042e37fSmrg fi 334b042e37fSmrg stat=$? 335b042e37fSmrg if test $stat -eq 0; then : 336b042e37fSmrg else 337b042e37fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 338b042e37fSmrg exit $stat 339b042e37fSmrg fi 340b042e37fSmrg 341b042e37fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 342b042e37fSmrg do 343b042e37fSmrg test -f "$tmpdepfile" && break 344b042e37fSmrg done 345b042e37fSmrg if test -f "$tmpdepfile"; then 346b042e37fSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 347b042e37fSmrg # Add `dependent.h:' lines. 348706b6b52Smrg sed -ne '2,${ 349706b6b52Smrg s/^ *// 350706b6b52Smrg s/ \\*$// 351706b6b52Smrg s/$/:/ 352706b6b52Smrg p 353706b6b52Smrg }' "$tmpdepfile" >> "$depfile" 354b042e37fSmrg else 355b042e37fSmrg echo "#dummy" > "$depfile" 356b042e37fSmrg fi 357b042e37fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 358b042e37fSmrg ;; 359b042e37fSmrg 360b042e37fSmrgtru64) 361b042e37fSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 362b042e37fSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363b042e37fSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364b042e37fSmrg # dependencies in `foo.d' instead, so we check for that too. 365b042e37fSmrg # Subdirectories are respected. 366b042e37fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367b042e37fSmrg test "x$dir" = "x$object" && dir= 368b042e37fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369b042e37fSmrg 370b042e37fSmrg if test "$libtool" = yes; then 371b042e37fSmrg # With Tru64 cc, shared objects can also be used to make a 372b042e37fSmrg # static library. This mechanism is used in libtool 1.4 series to 373b042e37fSmrg # handle both shared and static libraries in a single compilation. 374b042e37fSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375b042e37fSmrg # 376b042e37fSmrg # With libtool 1.5 this exception was removed, and libtool now 377b042e37fSmrg # generates 2 separate objects for the 2 libraries. These two 378b042e37fSmrg # compilations output dependencies in $dir.libs/$base.o.d and 379b042e37fSmrg # in $dir$base.o.d. We have to check for both files, because 380b042e37fSmrg # one of the two compilations can be disabled. We should prefer 381b042e37fSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382b042e37fSmrg # automatically cleaned when .libs/ is deleted, while ignoring 383b042e37fSmrg # the former would cause a distcleancheck panic. 384b042e37fSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385b042e37fSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386b042e37fSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387b042e37fSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388b042e37fSmrg "$@" -Wc,-MD 389b042e37fSmrg else 390b042e37fSmrg tmpdepfile1=$dir$base.o.d 391b042e37fSmrg tmpdepfile2=$dir$base.d 392b042e37fSmrg tmpdepfile3=$dir$base.d 393b042e37fSmrg tmpdepfile4=$dir$base.d 394b042e37fSmrg "$@" -MD 395b042e37fSmrg fi 396b042e37fSmrg 397b042e37fSmrg stat=$? 398b042e37fSmrg if test $stat -eq 0; then : 399b042e37fSmrg else 400b042e37fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401b042e37fSmrg exit $stat 402b042e37fSmrg fi 403b042e37fSmrg 404b042e37fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405b042e37fSmrg do 406b042e37fSmrg test -f "$tmpdepfile" && break 407b042e37fSmrg done 408b042e37fSmrg if test -f "$tmpdepfile"; then 409b042e37fSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410b042e37fSmrg # That's a tab and a space in the []. 411b042e37fSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412b042e37fSmrg else 413b042e37fSmrg echo "#dummy" > "$depfile" 414b042e37fSmrg fi 415b042e37fSmrg rm -f "$tmpdepfile" 416b042e37fSmrg ;; 417b042e37fSmrg 4180597fb56Smrgmsvc7) 4190597fb56Smrg if test "$libtool" = yes; then 4200597fb56Smrg showIncludes=-Wc,-showIncludes 4210597fb56Smrg else 4220597fb56Smrg showIncludes=-showIncludes 4230597fb56Smrg fi 4240597fb56Smrg "$@" $showIncludes > "$tmpdepfile" 4250597fb56Smrg stat=$? 4260597fb56Smrg grep -v '^Note: including file: ' "$tmpdepfile" 4270597fb56Smrg if test "$stat" = 0; then : 4280597fb56Smrg else 4290597fb56Smrg rm -f "$tmpdepfile" 4300597fb56Smrg exit $stat 4310597fb56Smrg fi 4320597fb56Smrg rm -f "$depfile" 4330597fb56Smrg echo "$object : \\" > "$depfile" 4340597fb56Smrg # The first sed program below extracts the file names and escapes 4350597fb56Smrg # backslashes for cygpath. The second sed program outputs the file 4360597fb56Smrg # name when reading, but also accumulates all include files in the 4370597fb56Smrg # hold buffer in order to output them again at the end. This only 4380597fb56Smrg # works with sed implementations that can handle large buffers. 4390597fb56Smrg sed < "$tmpdepfile" -n ' 4400597fb56Smrg/^Note: including file: *\(.*\)/ { 4410597fb56Smrg s//\1/ 4420597fb56Smrg s/\\/\\\\/g 4430597fb56Smrg p 4440597fb56Smrg}' | $cygpath_u | sort -u | sed -n ' 4450597fb56Smrgs/ /\\ /g 4460597fb56Smrgs/\(.*\)/ \1 \\/p 4470597fb56Smrgs/.\(.*\) \\/\1:/ 4480597fb56SmrgH 4490597fb56Smrg$ { 4500597fb56Smrg s/.*/ / 4510597fb56Smrg G 4520597fb56Smrg p 4530597fb56Smrg}' >> "$depfile" 4540597fb56Smrg rm -f "$tmpdepfile" 4550597fb56Smrg ;; 4560597fb56Smrg 4570597fb56Smrgmsvc7msys) 4580597fb56Smrg # This case exists only to let depend.m4 do its work. It works by 4590597fb56Smrg # looking at the text of this script. This case will never be run, 4600597fb56Smrg # since it is checked for above. 4610597fb56Smrg exit 1 4620597fb56Smrg ;; 4630597fb56Smrg 464b042e37fSmrg#nosideeffect) 465b042e37fSmrg # This comment above is used by automake to tell side-effect 466b042e37fSmrg # dependency tracking mechanisms from slower ones. 467b042e37fSmrg 468b042e37fSmrgdashmstdout) 469b042e37fSmrg # Important note: in order to support this mode, a compiler *must* 470b042e37fSmrg # always write the preprocessed file to stdout, regardless of -o. 471b042e37fSmrg "$@" || exit $? 472b042e37fSmrg 473b042e37fSmrg # Remove the call to Libtool. 474b042e37fSmrg if test "$libtool" = yes; then 475706b6b52Smrg while test "X$1" != 'X--mode=compile'; do 476b042e37fSmrg shift 477b042e37fSmrg done 478b042e37fSmrg shift 479b042e37fSmrg fi 480b042e37fSmrg 481b042e37fSmrg # Remove `-o $object'. 482b042e37fSmrg IFS=" " 483b042e37fSmrg for arg 484b042e37fSmrg do 485b042e37fSmrg case $arg in 486b042e37fSmrg -o) 487b042e37fSmrg shift 488b042e37fSmrg ;; 489b042e37fSmrg $object) 490b042e37fSmrg shift 491b042e37fSmrg ;; 492b042e37fSmrg *) 493b042e37fSmrg set fnord "$@" "$arg" 494b042e37fSmrg shift # fnord 495b042e37fSmrg shift # $arg 496b042e37fSmrg ;; 497b042e37fSmrg esac 498b042e37fSmrg done 499b042e37fSmrg 500b042e37fSmrg test -z "$dashmflag" && dashmflag=-M 501b042e37fSmrg # Require at least two characters before searching for `:' 502b042e37fSmrg # in the target name. This is to cope with DOS-style filenames: 503b042e37fSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 504b042e37fSmrg "$@" $dashmflag | 505b042e37fSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 506b042e37fSmrg rm -f "$depfile" 507b042e37fSmrg cat < "$tmpdepfile" > "$depfile" 508b042e37fSmrg tr ' ' ' 509b042e37fSmrg' < "$tmpdepfile" | \ 510b042e37fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 511b042e37fSmrg## correctly. Breaking it into two sed invocations is a workaround. 512b042e37fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 513b042e37fSmrg rm -f "$tmpdepfile" 514b042e37fSmrg ;; 515b042e37fSmrg 516b042e37fSmrgdashXmstdout) 517b042e37fSmrg # This case only exists to satisfy depend.m4. It is never actually 518b042e37fSmrg # run, as this mode is specially recognized in the preamble. 519b042e37fSmrg exit 1 520b042e37fSmrg ;; 521b042e37fSmrg 522b042e37fSmrgmakedepend) 523b042e37fSmrg "$@" || exit $? 524b042e37fSmrg # Remove any Libtool call 525b042e37fSmrg if test "$libtool" = yes; then 526706b6b52Smrg while test "X$1" != 'X--mode=compile'; do 527b042e37fSmrg shift 528b042e37fSmrg done 529b042e37fSmrg shift 530b042e37fSmrg fi 531b042e37fSmrg # X makedepend 532b042e37fSmrg shift 533706b6b52Smrg cleared=no eat=no 534706b6b52Smrg for arg 535706b6b52Smrg do 536b042e37fSmrg case $cleared in 537b042e37fSmrg no) 538b042e37fSmrg set ""; shift 539b042e37fSmrg cleared=yes ;; 540b042e37fSmrg esac 541706b6b52Smrg if test $eat = yes; then 542706b6b52Smrg eat=no 543706b6b52Smrg continue 544706b6b52Smrg fi 545b042e37fSmrg case "$arg" in 546b042e37fSmrg -D*|-I*) 547b042e37fSmrg set fnord "$@" "$arg"; shift ;; 548b042e37fSmrg # Strip any option that makedepend may not understand. Remove 549b042e37fSmrg # the object too, otherwise makedepend will parse it as a source file. 550706b6b52Smrg -arch) 551706b6b52Smrg eat=yes ;; 552b042e37fSmrg -*|$object) 553b042e37fSmrg ;; 554b042e37fSmrg *) 555b042e37fSmrg set fnord "$@" "$arg"; shift ;; 556b042e37fSmrg esac 557b042e37fSmrg done 558706b6b52Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 559b042e37fSmrg touch "$tmpdepfile" 560b042e37fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 561b042e37fSmrg rm -f "$depfile" 5620597fb56Smrg # makedepend may prepend the VPATH from the source file name to the object. 5630597fb56Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 5640597fb56Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565b042e37fSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566b042e37fSmrg' | \ 567b042e37fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 568b042e37fSmrg## correctly. Breaking it into two sed invocations is a workaround. 569b042e37fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 570b042e37fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 571b042e37fSmrg ;; 572b042e37fSmrg 573b042e37fSmrgcpp) 574b042e37fSmrg # Important note: in order to support this mode, a compiler *must* 575b042e37fSmrg # always write the preprocessed file to stdout. 576b042e37fSmrg "$@" || exit $? 577b042e37fSmrg 578b042e37fSmrg # Remove the call to Libtool. 579b042e37fSmrg if test "$libtool" = yes; then 580706b6b52Smrg while test "X$1" != 'X--mode=compile'; do 581b042e37fSmrg shift 582b042e37fSmrg done 583b042e37fSmrg shift 584b042e37fSmrg fi 585b042e37fSmrg 586b042e37fSmrg # Remove `-o $object'. 587b042e37fSmrg IFS=" " 588b042e37fSmrg for arg 589b042e37fSmrg do 590b042e37fSmrg case $arg in 591b042e37fSmrg -o) 592b042e37fSmrg shift 593b042e37fSmrg ;; 594b042e37fSmrg $object) 595b042e37fSmrg shift 596b042e37fSmrg ;; 597b042e37fSmrg *) 598b042e37fSmrg set fnord "$@" "$arg" 599b042e37fSmrg shift # fnord 600b042e37fSmrg shift # $arg 601b042e37fSmrg ;; 602b042e37fSmrg esac 603b042e37fSmrg done 604b042e37fSmrg 605b042e37fSmrg "$@" -E | 606b042e37fSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607b042e37fSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608b042e37fSmrg sed '$ s: \\$::' > "$tmpdepfile" 609b042e37fSmrg rm -f "$depfile" 610b042e37fSmrg echo "$object : \\" > "$depfile" 611b042e37fSmrg cat < "$tmpdepfile" >> "$depfile" 612b042e37fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 613b042e37fSmrg rm -f "$tmpdepfile" 614b042e37fSmrg ;; 615b042e37fSmrg 616b042e37fSmrgmsvisualcpp) 617b042e37fSmrg # Important note: in order to support this mode, a compiler *must* 618706b6b52Smrg # always write the preprocessed file to stdout. 619b042e37fSmrg "$@" || exit $? 620706b6b52Smrg 621706b6b52Smrg # Remove the call to Libtool. 622706b6b52Smrg if test "$libtool" = yes; then 623706b6b52Smrg while test "X$1" != 'X--mode=compile'; do 624706b6b52Smrg shift 625706b6b52Smrg done 626706b6b52Smrg shift 627706b6b52Smrg fi 628706b6b52Smrg 629b042e37fSmrg IFS=" " 630b042e37fSmrg for arg 631b042e37fSmrg do 632b042e37fSmrg case "$arg" in 633706b6b52Smrg -o) 634706b6b52Smrg shift 635706b6b52Smrg ;; 636706b6b52Smrg $object) 637706b6b52Smrg shift 638706b6b52Smrg ;; 639b042e37fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640b042e37fSmrg set fnord "$@" 641b042e37fSmrg shift 642b042e37fSmrg shift 643b042e37fSmrg ;; 644b042e37fSmrg *) 645b042e37fSmrg set fnord "$@" "$arg" 646b042e37fSmrg shift 647b042e37fSmrg shift 648b042e37fSmrg ;; 649b042e37fSmrg esac 650b042e37fSmrg done 651706b6b52Smrg "$@" -E 2>/dev/null | 652706b6b52Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 653b042e37fSmrg rm -f "$depfile" 654b042e37fSmrg echo "$object : \\" > "$depfile" 655706b6b52Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656b042e37fSmrg echo " " >> "$depfile" 657706b6b52Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 658b042e37fSmrg rm -f "$tmpdepfile" 659b042e37fSmrg ;; 660b042e37fSmrg 661706b6b52Smrgmsvcmsys) 662706b6b52Smrg # This case exists only to let depend.m4 do its work. It works by 663706b6b52Smrg # looking at the text of this script. This case will never be run, 664706b6b52Smrg # since it is checked for above. 665706b6b52Smrg exit 1 666706b6b52Smrg ;; 667706b6b52Smrg 668b042e37fSmrgnone) 669b042e37fSmrg exec "$@" 670b042e37fSmrg ;; 671b042e37fSmrg 672b042e37fSmrg*) 673b042e37fSmrg echo "Unknown depmode $depmode" 1>&2 674b042e37fSmrg exit 1 675b042e37fSmrg ;; 676b042e37fSmrgesac 677b042e37fSmrg 678b042e37fSmrgexit 0 679b042e37fSmrg 680b042e37fSmrg# Local Variables: 681b042e37fSmrg# mode: shell-script 682b042e37fSmrg# sh-indentation: 2 683b042e37fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 684b042e37fSmrg# time-stamp-start: "scriptversion=" 685b042e37fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 686706b6b52Smrg# time-stamp-time-zone: "UTC" 687706b6b52Smrg# time-stamp-end: "; # UTC" 688b042e37fSmrg# End: 689