depcomp revision b1297603
1b1297603Smrg#! /bin/sh 2b1297603Smrg# depcomp - compile a program generating dependencies as side-effects 3b1297603Smrg 4b1297603Smrgscriptversion=2005-07-09.11 5b1297603Smrg 6b1297603Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 7b1297603Smrg 8b1297603Smrg# This program is free software; you can redistribute it and/or modify 9b1297603Smrg# it under the terms of the GNU General Public License as published by 10b1297603Smrg# the Free Software Foundation; either version 2, or (at your option) 11b1297603Smrg# any later version. 12b1297603Smrg 13b1297603Smrg# This program is distributed in the hope that it will be useful, 14b1297603Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 15b1297603Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16b1297603Smrg# GNU General Public License for more details. 17b1297603Smrg 18b1297603Smrg# You should have received a copy of the GNU General Public License 19b1297603Smrg# along with this program; if not, write to the Free Software 20b1297603Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 21b1297603Smrg# 02110-1301, USA. 22b1297603Smrg 23b1297603Smrg# As a special exception to the GNU General Public License, if you 24b1297603Smrg# distribute this file as part of a program that contains a 25b1297603Smrg# configuration script generated by Autoconf, you may include it under 26b1297603Smrg# the same distribution terms that you use for the rest of that program. 27b1297603Smrg 28b1297603Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 29b1297603Smrg 30b1297603Smrgcase $1 in 31b1297603Smrg '') 32b1297603Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 33b1297603Smrg exit 1; 34b1297603Smrg ;; 35b1297603Smrg -h | --h*) 36b1297603Smrg cat <<\EOF 37b1297603SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 38b1297603Smrg 39b1297603SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 40b1297603Smrgas side-effects. 41b1297603Smrg 42b1297603SmrgEnvironment variables: 43b1297603Smrg depmode Dependency tracking mode. 44b1297603Smrg source Source file read by `PROGRAMS ARGS'. 45b1297603Smrg object Object file output by `PROGRAMS ARGS'. 46b1297603Smrg DEPDIR directory where to store dependencies. 47b1297603Smrg depfile Dependency file to output. 48b1297603Smrg tmpdepfile Temporary file to use when outputing dependencies. 49b1297603Smrg libtool Whether libtool is used (yes/no). 50b1297603Smrg 51b1297603SmrgReport bugs to <bug-automake@gnu.org>. 52b1297603SmrgEOF 53b1297603Smrg exit $? 54b1297603Smrg ;; 55b1297603Smrg -v | --v*) 56b1297603Smrg echo "depcomp $scriptversion" 57b1297603Smrg exit $? 58b1297603Smrg ;; 59b1297603Smrgesac 60b1297603Smrg 61b1297603Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 62b1297603Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 63b1297603Smrg exit 1 64b1297603Smrgfi 65b1297603Smrg 66b1297603Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 67b1297603Smrgdepfile=${depfile-`echo "$object" | 68b1297603Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 69b1297603Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 70b1297603Smrg 71b1297603Smrgrm -f "$tmpdepfile" 72b1297603Smrg 73b1297603Smrg# Some modes work just like other modes, but use different flags. We 74b1297603Smrg# parameterize here, but still list the modes in the big case below, 75b1297603Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 76b1297603Smrg# here, because this file can only contain one case statement. 77b1297603Smrgif test "$depmode" = hp; then 78b1297603Smrg # HP compiler uses -M and no extra arg. 79b1297603Smrg gccflag=-M 80b1297603Smrg depmode=gcc 81b1297603Smrgfi 82b1297603Smrg 83b1297603Smrgif test "$depmode" = dashXmstdout; then 84b1297603Smrg # This is just like dashmstdout with a different argument. 85b1297603Smrg dashmflag=-xM 86b1297603Smrg depmode=dashmstdout 87b1297603Smrgfi 88b1297603Smrg 89b1297603Smrgcase "$depmode" in 90b1297603Smrggcc3) 91b1297603Smrg## gcc 3 implements dependency tracking that does exactly what 92b1297603Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 93b1297603Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 94b1297603Smrg "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 95b1297603Smrg stat=$? 96b1297603Smrg if test $stat -eq 0; then : 97b1297603Smrg else 98b1297603Smrg rm -f "$tmpdepfile" 99b1297603Smrg exit $stat 100b1297603Smrg fi 101b1297603Smrg mv "$tmpdepfile" "$depfile" 102b1297603Smrg ;; 103b1297603Smrg 104b1297603Smrggcc) 105b1297603Smrg## There are various ways to get dependency output from gcc. Here's 106b1297603Smrg## why we pick this rather obscure method: 107b1297603Smrg## - Don't want to use -MD because we'd like the dependencies to end 108b1297603Smrg## up in a subdir. Having to rename by hand is ugly. 109b1297603Smrg## (We might end up doing this anyway to support other compilers.) 110b1297603Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 111b1297603Smrg## -MM, not -M (despite what the docs say). 112b1297603Smrg## - Using -M directly means running the compiler twice (even worse 113b1297603Smrg## than renaming). 114b1297603Smrg if test -z "$gccflag"; then 115b1297603Smrg gccflag=-MD, 116b1297603Smrg fi 117b1297603Smrg "$@" -Wp,"$gccflag$tmpdepfile" 118b1297603Smrg stat=$? 119b1297603Smrg if test $stat -eq 0; then : 120b1297603Smrg else 121b1297603Smrg rm -f "$tmpdepfile" 122b1297603Smrg exit $stat 123b1297603Smrg fi 124b1297603Smrg rm -f "$depfile" 125b1297603Smrg echo "$object : \\" > "$depfile" 126b1297603Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 127b1297603Smrg## The second -e expression handles DOS-style file names with drive letters. 128b1297603Smrg sed -e 's/^[^:]*: / /' \ 129b1297603Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 130b1297603Smrg## This next piece of magic avoids the `deleted header file' problem. 131b1297603Smrg## The problem is that when a header file which appears in a .P file 132b1297603Smrg## is deleted, the dependency causes make to die (because there is 133b1297603Smrg## typically no way to rebuild the header). We avoid this by adding 134b1297603Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 135b1297603Smrg## this for us directly. 136b1297603Smrg tr ' ' ' 137b1297603Smrg' < "$tmpdepfile" | 138b1297603Smrg## Some versions of gcc put a space before the `:'. On the theory 139b1297603Smrg## that the space means something, we add a space to the output as 140b1297603Smrg## well. 141b1297603Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 142b1297603Smrg## correctly. Breaking it into two sed invocations is a workaround. 143b1297603Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 144b1297603Smrg rm -f "$tmpdepfile" 145b1297603Smrg ;; 146b1297603Smrg 147b1297603Smrghp) 148b1297603Smrg # This case exists only to let depend.m4 do its work. It works by 149b1297603Smrg # looking at the text of this script. This case will never be run, 150b1297603Smrg # since it is checked for above. 151b1297603Smrg exit 1 152b1297603Smrg ;; 153b1297603Smrg 154b1297603Smrgsgi) 155b1297603Smrg if test "$libtool" = yes; then 156b1297603Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 157b1297603Smrg else 158b1297603Smrg "$@" -MDupdate "$tmpdepfile" 159b1297603Smrg fi 160b1297603Smrg stat=$? 161b1297603Smrg if test $stat -eq 0; then : 162b1297603Smrg else 163b1297603Smrg rm -f "$tmpdepfile" 164b1297603Smrg exit $stat 165b1297603Smrg fi 166b1297603Smrg rm -f "$depfile" 167b1297603Smrg 168b1297603Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 169b1297603Smrg echo "$object : \\" > "$depfile" 170b1297603Smrg 171b1297603Smrg # Clip off the initial element (the dependent). Don't try to be 172b1297603Smrg # clever and replace this with sed code, as IRIX sed won't handle 173b1297603Smrg # lines with more than a fixed number of characters (4096 in 174b1297603Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 175b1297603Smrg # the IRIX cc adds comments like `#:fec' to the end of the 176b1297603Smrg # dependency line. 177b1297603Smrg tr ' ' ' 178b1297603Smrg' < "$tmpdepfile" \ 179b1297603Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 180b1297603Smrg tr ' 181b1297603Smrg' ' ' >> $depfile 182b1297603Smrg echo >> $depfile 183b1297603Smrg 184b1297603Smrg # The second pass generates a dummy entry for each header file. 185b1297603Smrg tr ' ' ' 186b1297603Smrg' < "$tmpdepfile" \ 187b1297603Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 188b1297603Smrg >> $depfile 189b1297603Smrg else 190b1297603Smrg # The sourcefile does not contain any dependencies, so just 191b1297603Smrg # store a dummy comment line, to avoid errors with the Makefile 192b1297603Smrg # "include basename.Plo" scheme. 193b1297603Smrg echo "#dummy" > "$depfile" 194b1297603Smrg fi 195b1297603Smrg rm -f "$tmpdepfile" 196b1297603Smrg ;; 197b1297603Smrg 198b1297603Smrgaix) 199b1297603Smrg # The C for AIX Compiler uses -M and outputs the dependencies 200b1297603Smrg # in a .u file. In older versions, this file always lives in the 201b1297603Smrg # current directory. Also, the AIX compiler puts `$object:' at the 202b1297603Smrg # start of each line; $object doesn't have directory information. 203b1297603Smrg # Version 6 uses the directory in both cases. 204b1297603Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 205b1297603Smrg tmpdepfile="$stripped.u" 206b1297603Smrg if test "$libtool" = yes; then 207b1297603Smrg "$@" -Wc,-M 208b1297603Smrg else 209b1297603Smrg "$@" -M 210b1297603Smrg fi 211b1297603Smrg stat=$? 212b1297603Smrg 213b1297603Smrg if test -f "$tmpdepfile"; then : 214b1297603Smrg else 215b1297603Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 216b1297603Smrg tmpdepfile="$stripped.u" 217b1297603Smrg fi 218b1297603Smrg 219b1297603Smrg if test $stat -eq 0; then : 220b1297603Smrg else 221b1297603Smrg rm -f "$tmpdepfile" 222b1297603Smrg exit $stat 223b1297603Smrg fi 224b1297603Smrg 225b1297603Smrg if test -f "$tmpdepfile"; then 226b1297603Smrg outname="$stripped.o" 227b1297603Smrg # Each line is of the form `foo.o: dependent.h'. 228b1297603Smrg # Do two passes, one to just change these to 229b1297603Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 230b1297603Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 231b1297603Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 232b1297603Smrg else 233b1297603Smrg # The sourcefile does not contain any dependencies, so just 234b1297603Smrg # store a dummy comment line, to avoid errors with the Makefile 235b1297603Smrg # "include basename.Plo" scheme. 236b1297603Smrg echo "#dummy" > "$depfile" 237b1297603Smrg fi 238b1297603Smrg rm -f "$tmpdepfile" 239b1297603Smrg ;; 240b1297603Smrg 241b1297603Smrgicc) 242b1297603Smrg # Intel's C compiler understands `-MD -MF file'. However on 243b1297603Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 244b1297603Smrg # ICC 7.0 will fill foo.d with something like 245b1297603Smrg # foo.o: sub/foo.c 246b1297603Smrg # foo.o: sub/foo.h 247b1297603Smrg # which is wrong. We want: 248b1297603Smrg # sub/foo.o: sub/foo.c 249b1297603Smrg # sub/foo.o: sub/foo.h 250b1297603Smrg # sub/foo.c: 251b1297603Smrg # sub/foo.h: 252b1297603Smrg # ICC 7.1 will output 253b1297603Smrg # foo.o: sub/foo.c sub/foo.h 254b1297603Smrg # and will wrap long lines using \ : 255b1297603Smrg # foo.o: sub/foo.c ... \ 256b1297603Smrg # sub/foo.h ... \ 257b1297603Smrg # ... 258b1297603Smrg 259b1297603Smrg "$@" -MD -MF "$tmpdepfile" 260b1297603Smrg stat=$? 261b1297603Smrg if test $stat -eq 0; then : 262b1297603Smrg else 263b1297603Smrg rm -f "$tmpdepfile" 264b1297603Smrg exit $stat 265b1297603Smrg fi 266b1297603Smrg rm -f "$depfile" 267b1297603Smrg # Each line is of the form `foo.o: dependent.h', 268b1297603Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 269b1297603Smrg # Do two passes, one to just change these to 270b1297603Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 271b1297603Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 272b1297603Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 273b1297603Smrg # correctly. Breaking it into two sed invocations is a workaround. 274b1297603Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 275b1297603Smrg sed -e 's/$/ :/' >> "$depfile" 276b1297603Smrg rm -f "$tmpdepfile" 277b1297603Smrg ;; 278b1297603Smrg 279b1297603Smrgtru64) 280b1297603Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 281b1297603Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 282b1297603Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 283b1297603Smrg # dependencies in `foo.d' instead, so we check for that too. 284b1297603Smrg # Subdirectories are respected. 285b1297603Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 286b1297603Smrg test "x$dir" = "x$object" && dir= 287b1297603Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 288b1297603Smrg 289b1297603Smrg if test "$libtool" = yes; then 290b1297603Smrg # With Tru64 cc, shared objects can also be used to make a 291b1297603Smrg # static library. This mecanism is used in libtool 1.4 series to 292b1297603Smrg # handle both shared and static libraries in a single compilation. 293b1297603Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 294b1297603Smrg # 295b1297603Smrg # With libtool 1.5 this exception was removed, and libtool now 296b1297603Smrg # generates 2 separate objects for the 2 libraries. These two 297b1297603Smrg # compilations output dependencies in in $dir.libs/$base.o.d and 298b1297603Smrg # in $dir$base.o.d. We have to check for both files, because 299b1297603Smrg # one of the two compilations can be disabled. We should prefer 300b1297603Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 301b1297603Smrg # automatically cleaned when .libs/ is deleted, while ignoring 302b1297603Smrg # the former would cause a distcleancheck panic. 303b1297603Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 304b1297603Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 305b1297603Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 306b1297603Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 307b1297603Smrg "$@" -Wc,-MD 308b1297603Smrg else 309b1297603Smrg tmpdepfile1=$dir$base.o.d 310b1297603Smrg tmpdepfile2=$dir$base.d 311b1297603Smrg tmpdepfile3=$dir$base.d 312b1297603Smrg tmpdepfile4=$dir$base.d 313b1297603Smrg "$@" -MD 314b1297603Smrg fi 315b1297603Smrg 316b1297603Smrg stat=$? 317b1297603Smrg if test $stat -eq 0; then : 318b1297603Smrg else 319b1297603Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 320b1297603Smrg exit $stat 321b1297603Smrg fi 322b1297603Smrg 323b1297603Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 324b1297603Smrg do 325b1297603Smrg test -f "$tmpdepfile" && break 326b1297603Smrg done 327b1297603Smrg if test -f "$tmpdepfile"; then 328b1297603Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 329b1297603Smrg # That's a tab and a space in the []. 330b1297603Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 331b1297603Smrg else 332b1297603Smrg echo "#dummy" > "$depfile" 333b1297603Smrg fi 334b1297603Smrg rm -f "$tmpdepfile" 335b1297603Smrg ;; 336b1297603Smrg 337b1297603Smrg#nosideeffect) 338b1297603Smrg # This comment above is used by automake to tell side-effect 339b1297603Smrg # dependency tracking mechanisms from slower ones. 340b1297603Smrg 341b1297603Smrgdashmstdout) 342b1297603Smrg # Important note: in order to support this mode, a compiler *must* 343b1297603Smrg # always write the preprocessed file to stdout, regardless of -o. 344b1297603Smrg "$@" || exit $? 345b1297603Smrg 346b1297603Smrg # Remove the call to Libtool. 347b1297603Smrg if test "$libtool" = yes; then 348b1297603Smrg while test $1 != '--mode=compile'; do 349b1297603Smrg shift 350b1297603Smrg done 351b1297603Smrg shift 352b1297603Smrg fi 353b1297603Smrg 354b1297603Smrg # Remove `-o $object'. 355b1297603Smrg IFS=" " 356b1297603Smrg for arg 357b1297603Smrg do 358b1297603Smrg case $arg in 359b1297603Smrg -o) 360b1297603Smrg shift 361b1297603Smrg ;; 362b1297603Smrg $object) 363b1297603Smrg shift 364b1297603Smrg ;; 365b1297603Smrg *) 366b1297603Smrg set fnord "$@" "$arg" 367b1297603Smrg shift # fnord 368b1297603Smrg shift # $arg 369b1297603Smrg ;; 370b1297603Smrg esac 371b1297603Smrg done 372b1297603Smrg 373b1297603Smrg test -z "$dashmflag" && dashmflag=-M 374b1297603Smrg # Require at least two characters before searching for `:' 375b1297603Smrg # in the target name. This is to cope with DOS-style filenames: 376b1297603Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 377b1297603Smrg "$@" $dashmflag | 378b1297603Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 379b1297603Smrg rm -f "$depfile" 380b1297603Smrg cat < "$tmpdepfile" > "$depfile" 381b1297603Smrg tr ' ' ' 382b1297603Smrg' < "$tmpdepfile" | \ 383b1297603Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 384b1297603Smrg## correctly. Breaking it into two sed invocations is a workaround. 385b1297603Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 386b1297603Smrg rm -f "$tmpdepfile" 387b1297603Smrg ;; 388b1297603Smrg 389b1297603SmrgdashXmstdout) 390b1297603Smrg # This case only exists to satisfy depend.m4. It is never actually 391b1297603Smrg # run, as this mode is specially recognized in the preamble. 392b1297603Smrg exit 1 393b1297603Smrg ;; 394b1297603Smrg 395b1297603Smrgmakedepend) 396b1297603Smrg "$@" || exit $? 397b1297603Smrg # Remove any Libtool call 398b1297603Smrg if test "$libtool" = yes; then 399b1297603Smrg while test $1 != '--mode=compile'; do 400b1297603Smrg shift 401b1297603Smrg done 402b1297603Smrg shift 403b1297603Smrg fi 404b1297603Smrg # X makedepend 405b1297603Smrg shift 406b1297603Smrg cleared=no 407b1297603Smrg for arg in "$@"; do 408b1297603Smrg case $cleared in 409b1297603Smrg no) 410b1297603Smrg set ""; shift 411b1297603Smrg cleared=yes ;; 412b1297603Smrg esac 413b1297603Smrg case "$arg" in 414b1297603Smrg -D*|-I*) 415b1297603Smrg set fnord "$@" "$arg"; shift ;; 416b1297603Smrg # Strip any option that makedepend may not understand. Remove 417b1297603Smrg # the object too, otherwise makedepend will parse it as a source file. 418b1297603Smrg -*|$object) 419b1297603Smrg ;; 420b1297603Smrg *) 421b1297603Smrg set fnord "$@" "$arg"; shift ;; 422b1297603Smrg esac 423b1297603Smrg done 424b1297603Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 425b1297603Smrg touch "$tmpdepfile" 426b1297603Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 427b1297603Smrg rm -f "$depfile" 428b1297603Smrg cat < "$tmpdepfile" > "$depfile" 429b1297603Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 430b1297603Smrg' | \ 431b1297603Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 432b1297603Smrg## correctly. Breaking it into two sed invocations is a workaround. 433b1297603Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 434b1297603Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 435b1297603Smrg ;; 436b1297603Smrg 437b1297603Smrgcpp) 438b1297603Smrg # Important note: in order to support this mode, a compiler *must* 439b1297603Smrg # always write the preprocessed file to stdout. 440b1297603Smrg "$@" || exit $? 441b1297603Smrg 442b1297603Smrg # Remove the call to Libtool. 443b1297603Smrg if test "$libtool" = yes; then 444b1297603Smrg while test $1 != '--mode=compile'; do 445b1297603Smrg shift 446b1297603Smrg done 447b1297603Smrg shift 448b1297603Smrg fi 449b1297603Smrg 450b1297603Smrg # Remove `-o $object'. 451b1297603Smrg IFS=" " 452b1297603Smrg for arg 453b1297603Smrg do 454b1297603Smrg case $arg in 455b1297603Smrg -o) 456b1297603Smrg shift 457b1297603Smrg ;; 458b1297603Smrg $object) 459b1297603Smrg shift 460b1297603Smrg ;; 461b1297603Smrg *) 462b1297603Smrg set fnord "$@" "$arg" 463b1297603Smrg shift # fnord 464b1297603Smrg shift # $arg 465b1297603Smrg ;; 466b1297603Smrg esac 467b1297603Smrg done 468b1297603Smrg 469b1297603Smrg "$@" -E | 470b1297603Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 471b1297603Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 472b1297603Smrg sed '$ s: \\$::' > "$tmpdepfile" 473b1297603Smrg rm -f "$depfile" 474b1297603Smrg echo "$object : \\" > "$depfile" 475b1297603Smrg cat < "$tmpdepfile" >> "$depfile" 476b1297603Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 477b1297603Smrg rm -f "$tmpdepfile" 478b1297603Smrg ;; 479b1297603Smrg 480b1297603Smrgmsvisualcpp) 481b1297603Smrg # Important note: in order to support this mode, a compiler *must* 482b1297603Smrg # always write the preprocessed file to stdout, regardless of -o, 483b1297603Smrg # because we must use -o when running libtool. 484b1297603Smrg "$@" || exit $? 485b1297603Smrg IFS=" " 486b1297603Smrg for arg 487b1297603Smrg do 488b1297603Smrg case "$arg" in 489b1297603Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 490b1297603Smrg set fnord "$@" 491b1297603Smrg shift 492b1297603Smrg shift 493b1297603Smrg ;; 494b1297603Smrg *) 495b1297603Smrg set fnord "$@" "$arg" 496b1297603Smrg shift 497b1297603Smrg shift 498b1297603Smrg ;; 499b1297603Smrg esac 500b1297603Smrg done 501b1297603Smrg "$@" -E | 502b1297603Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 503b1297603Smrg rm -f "$depfile" 504b1297603Smrg echo "$object : \\" > "$depfile" 505b1297603Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 506b1297603Smrg echo " " >> "$depfile" 507b1297603Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 508b1297603Smrg rm -f "$tmpdepfile" 509b1297603Smrg ;; 510b1297603Smrg 511b1297603Smrgnone) 512b1297603Smrg exec "$@" 513b1297603Smrg ;; 514b1297603Smrg 515b1297603Smrg*) 516b1297603Smrg echo "Unknown depmode $depmode" 1>&2 517b1297603Smrg exit 1 518b1297603Smrg ;; 519b1297603Smrgesac 520b1297603Smrg 521b1297603Smrgexit 0 522b1297603Smrg 523b1297603Smrg# Local Variables: 524b1297603Smrg# mode: shell-script 525b1297603Smrg# sh-indentation: 2 526b1297603Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 527b1297603Smrg# time-stamp-start: "scriptversion=" 528b1297603Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 529b1297603Smrg# time-stamp-end: "$" 530b1297603Smrg# End: 531