181404Speter#! /bin/sh 281404Speter# depcomp - compile a program generating dependencies as side-effects 381404Speter 4177391Sobrienscriptversion=2006-10-15.18 5177391Sobrien 6177391Sobrien# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 7177391Sobrien# Foundation, Inc. 8177391Sobrien 981404Speter# This program is free software; you can redistribute it and/or modify 1081404Speter# it under the terms of the GNU General Public License as published by 1181404Speter# the Free Software Foundation; either version 2, or (at your option) 1281404Speter# any later version. 1381404Speter 1481404Speter# This program is distributed in the hope that it will be useful, 1581404Speter# but WITHOUT ANY WARRANTY; without even the implied warranty of 1681404Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1781404Speter# GNU General Public License for more details. 1881404Speter 1981404Speter# You should have received a copy of the GNU General Public License 2081404Speter# along with this program; if not, write to the Free Software 21177391Sobrien# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22177391Sobrien# 02110-1301, USA. 2381404Speter 24128266Speter# As a special exception to the GNU General Public License, if you 25128266Speter# distribute this file as part of a program that contains a 26128266Speter# configuration script generated by Autoconf, you may include it under 27128266Speter# the same distribution terms that you use for the rest of that program. 28128266Speter 2981404Speter# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 3081404Speter 31177391Sobriencase $1 in 32177391Sobrien '') 33177391Sobrien echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34177391Sobrien exit 1; 35177391Sobrien ;; 36177391Sobrien -h | --h*) 37177391Sobrien cat <<\EOF 38177391SobrienUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39177391Sobrien 40177391SobrienRun PROGRAMS ARGS to compile a file, generating dependencies 41177391Sobrienas side-effects. 42177391Sobrien 43177391SobrienEnvironment variables: 44177391Sobrien depmode Dependency tracking mode. 45177391Sobrien source Source file read by `PROGRAMS ARGS'. 46177391Sobrien object Object file output by `PROGRAMS ARGS'. 47177391Sobrien DEPDIR directory where to store dependencies. 48177391Sobrien depfile Dependency file to output. 49177391Sobrien tmpdepfile Temporary file to use when outputing dependencies. 50177391Sobrien libtool Whether libtool is used (yes/no). 51177391Sobrien 52177391SobrienReport bugs to <bug-automake@gnu.org>. 53177391SobrienEOF 54177391Sobrien exit $? 55177391Sobrien ;; 56177391Sobrien -v | --v*) 57177391Sobrien echo "depcomp $scriptversion" 58177391Sobrien exit $? 59177391Sobrien ;; 60177391Sobrienesac 61177391Sobrien 6281404Speterif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6381404Speter echo "depcomp: Variables source, object and depmode must be set" 1>&2 6481404Speter exit 1 6581404Speterfi 6681404Speter 67177391Sobrien# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68177391Sobriendepfile=${depfile-`echo "$object" | 69177391Sobrien sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 7081404Spetertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 7181404Speter 7281404Speterrm -f "$tmpdepfile" 7381404Speter 7481404Speter# Some modes work just like other modes, but use different flags. We 7581404Speter# parameterize here, but still list the modes in the big case below, 7681404Speter# to make depend.m4 easier to write. Note that we *cannot* use a case 7781404Speter# here, because this file can only contain one case statement. 7881404Speterif test "$depmode" = hp; then 7981404Speter # HP compiler uses -M and no extra arg. 8081404Speter gccflag=-M 8181404Speter depmode=gcc 8281404Speterfi 8381404Speter 8481404Speterif test "$depmode" = dashXmstdout; then 8581404Speter # This is just like dashmstdout with a different argument. 8681404Speter dashmflag=-xM 8781404Speter depmode=dashmstdout 8881404Speterfi 8981404Speter 9081404Spetercase "$depmode" in 9181404Spetergcc3) 9281404Speter## gcc 3 implements dependency tracking that does exactly what 93128266Speter## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94128266Speter## it if -MD -MP comes after the -MF stuff. Hmm. 95177391Sobrien## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96177391Sobrien## the command line argument order; so add the flags where they 97177391Sobrien## appear in depend2.am. Note that the slowdown incurred here 98177391Sobrien## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99177391Sobrien for arg 100177391Sobrien do 101177391Sobrien case $arg in 102177391Sobrien -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103177391Sobrien *) set fnord "$@" "$arg" ;; 104177391Sobrien esac 105177391Sobrien shift # fnord 106177391Sobrien shift # $arg 107177391Sobrien done 108177391Sobrien "$@" 10981404Speter stat=$? 11081404Speter if test $stat -eq 0; then : 11181404Speter else 11281404Speter rm -f "$tmpdepfile" 11381404Speter exit $stat 11481404Speter fi 11581404Speter mv "$tmpdepfile" "$depfile" 11681404Speter ;; 11781404Speter 11881404Spetergcc) 11981404Speter## There are various ways to get dependency output from gcc. Here's 12081404Speter## why we pick this rather obscure method: 12181404Speter## - Don't want to use -MD because we'd like the dependencies to end 12281404Speter## up in a subdir. Having to rename by hand is ugly. 12381404Speter## (We might end up doing this anyway to support other compilers.) 12481404Speter## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 12581404Speter## -MM, not -M (despite what the docs say). 12681404Speter## - Using -M directly means running the compiler twice (even worse 12781404Speter## than renaming). 12881404Speter if test -z "$gccflag"; then 12981404Speter gccflag=-MD, 13081404Speter fi 13181404Speter "$@" -Wp,"$gccflag$tmpdepfile" 13281404Speter stat=$? 13381404Speter if test $stat -eq 0; then : 13481404Speter else 13581404Speter rm -f "$tmpdepfile" 13681404Speter exit $stat 13781404Speter fi 13881404Speter rm -f "$depfile" 13981404Speter echo "$object : \\" > "$depfile" 14081404Speter alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14181404Speter## The second -e expression handles DOS-style file names with drive letters. 14281404Speter sed -e 's/^[^:]*: / /' \ 14381404Speter -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 14481404Speter## This next piece of magic avoids the `deleted header file' problem. 14581404Speter## The problem is that when a header file which appears in a .P file 14681404Speter## is deleted, the dependency causes make to die (because there is 14781404Speter## typically no way to rebuild the header). We avoid this by adding 14881404Speter## dummy dependencies for each header file. Too bad gcc doesn't do 14981404Speter## this for us directly. 15081404Speter tr ' ' ' 15181404Speter' < "$tmpdepfile" | 15281404Speter## Some versions of gcc put a space before the `:'. On the theory 15381404Speter## that the space means something, we add a space to the output as 15481404Speter## well. 15581404Speter## Some versions of the HPUX 10.20 sed can't process this invocation 15681404Speter## correctly. Breaking it into two sed invocations is a workaround. 15781404Speter sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 15881404Speter rm -f "$tmpdepfile" 15981404Speter ;; 16081404Speter 16181404Speterhp) 16281404Speter # This case exists only to let depend.m4 do its work. It works by 16381404Speter # looking at the text of this script. This case will never be run, 16481404Speter # since it is checked for above. 16581404Speter exit 1 16681404Speter ;; 16781404Speter 16881404Spetersgi) 16981404Speter if test "$libtool" = yes; then 17081404Speter "$@" "-Wp,-MDupdate,$tmpdepfile" 17181404Speter else 17281404Speter "$@" -MDupdate "$tmpdepfile" 17381404Speter fi 17481404Speter stat=$? 17581404Speter if test $stat -eq 0; then : 17681404Speter else 17781404Speter rm -f "$tmpdepfile" 17881404Speter exit $stat 17981404Speter fi 180102840Speter rm -f "$depfile" 18181404Speter 18281404Speter if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183102840Speter echo "$object : \\" > "$depfile" 184102840Speter 185102840Speter # Clip off the initial element (the dependent). Don't try to be 186102840Speter # clever and replace this with sed code, as IRIX sed won't handle 187102840Speter # lines with more than a fixed number of characters (4096 in 188102840Speter # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189102840Speter # the IRIX cc adds comments like `#:fec' to the end of the 190102840Speter # dependency line. 19181404Speter tr ' ' ' 192102840Speter' < "$tmpdepfile" \ 193102840Speter | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194102840Speter tr ' 195102840Speter' ' ' >> $depfile 196102840Speter echo >> $depfile 197102840Speter 198102840Speter # The second pass generates a dummy entry for each header file. 199102840Speter tr ' ' ' 200102840Speter' < "$tmpdepfile" \ 201102840Speter | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202102840Speter >> $depfile 20381404Speter else 20481404Speter # The sourcefile does not contain any dependencies, so just 20581404Speter # store a dummy comment line, to avoid errors with the Makefile 20681404Speter # "include basename.Plo" scheme. 20781404Speter echo "#dummy" > "$depfile" 20881404Speter fi 20981404Speter rm -f "$tmpdepfile" 21081404Speter ;; 21181404Speter 21281404Speteraix) 21381404Speter # The C for AIX Compiler uses -M and outputs the dependencies 214128266Speter # in a .u file. In older versions, this file always lives in the 215128266Speter # current directory. Also, the AIX compiler puts `$object:' at the 216128266Speter # start of each line; $object doesn't have directory information. 217128266Speter # Version 6 uses the directory in both cases. 218128266Speter stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 219102840Speter tmpdepfile="$stripped.u" 22081404Speter if test "$libtool" = yes; then 22181404Speter "$@" -Wc,-M 22281404Speter else 22381404Speter "$@" -M 22481404Speter fi 225128266Speter stat=$? 22681404Speter 227128266Speter if test -f "$tmpdepfile"; then : 228128266Speter else 229128266Speter stripped=`echo "$stripped" | sed 's,^.*/,,'` 230128266Speter tmpdepfile="$stripped.u" 231128266Speter fi 232128266Speter 23381404Speter if test $stat -eq 0; then : 23481404Speter else 23581404Speter rm -f "$tmpdepfile" 23681404Speter exit $stat 23781404Speter fi 23881404Speter 23981404Speter if test -f "$tmpdepfile"; then 240128266Speter outname="$stripped.o" 241102840Speter # Each line is of the form `foo.o: dependent.h'. 242102840Speter # Do two passes, one to just change these to 243102840Speter # `$object: dependent.h' and one to simply `dependent.h:'. 244102840Speter sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 245102840Speter sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 24681404Speter else 24781404Speter # The sourcefile does not contain any dependencies, so just 24881404Speter # store a dummy comment line, to avoid errors with the Makefile 24981404Speter # "include basename.Plo" scheme. 25081404Speter echo "#dummy" > "$depfile" 25181404Speter fi 25281404Speter rm -f "$tmpdepfile" 25381404Speter ;; 25481404Speter 255128266Spetericc) 256128266Speter # Intel's C compiler understands `-MD -MF file'. However on 257128266Speter # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 258128266Speter # ICC 7.0 will fill foo.d with something like 259128266Speter # foo.o: sub/foo.c 260128266Speter # foo.o: sub/foo.h 261128266Speter # which is wrong. We want: 262128266Speter # sub/foo.o: sub/foo.c 263128266Speter # sub/foo.o: sub/foo.h 264128266Speter # sub/foo.c: 265128266Speter # sub/foo.h: 266128266Speter # ICC 7.1 will output 267128266Speter # foo.o: sub/foo.c sub/foo.h 268128266Speter # and will wrap long lines using \ : 269128266Speter # foo.o: sub/foo.c ... \ 270128266Speter # sub/foo.h ... \ 271128266Speter # ... 272128266Speter 273128266Speter "$@" -MD -MF "$tmpdepfile" 274128266Speter stat=$? 275128266Speter if test $stat -eq 0; then : 276128266Speter else 277128266Speter rm -f "$tmpdepfile" 278128266Speter exit $stat 279128266Speter fi 280128266Speter rm -f "$depfile" 281128266Speter # Each line is of the form `foo.o: dependent.h', 282128266Speter # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 283128266Speter # Do two passes, one to just change these to 284128266Speter # `$object: dependent.h' and one to simply `dependent.h:'. 285128266Speter sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 286128266Speter # Some versions of the HPUX 10.20 sed can't process this invocation 287128266Speter # correctly. Breaking it into two sed invocations is a workaround. 288128266Speter sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 289128266Speter sed -e 's/$/ :/' >> "$depfile" 290128266Speter rm -f "$tmpdepfile" 291128266Speter ;; 292128266Speter 293177391Sobrienhp2) 294177391Sobrien # The "hp" stanza above does not work with aCC (C++) and HP's ia64 295177391Sobrien # compilers, which have integrated preprocessors. The correct option 296177391Sobrien # to use with these is +Maked; it writes dependencies to a file named 297177391Sobrien # 'foo.d', which lands next to the object file, wherever that 298177391Sobrien # happens to be. 299177391Sobrien # Much of this is similar to the tru64 case; see comments there. 300177391Sobrien dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 301177391Sobrien test "x$dir" = "x$object" && dir= 302177391Sobrien base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 303177391Sobrien if test "$libtool" = yes; then 304177391Sobrien tmpdepfile1=$dir$base.d 305177391Sobrien tmpdepfile2=$dir.libs/$base.d 306177391Sobrien "$@" -Wc,+Maked 307177391Sobrien else 308177391Sobrien tmpdepfile1=$dir$base.d 309177391Sobrien tmpdepfile2=$dir$base.d 310177391Sobrien "$@" +Maked 311177391Sobrien fi 312177391Sobrien stat=$? 313177391Sobrien if test $stat -eq 0; then : 314177391Sobrien else 315177391Sobrien rm -f "$tmpdepfile1" "$tmpdepfile2" 316177391Sobrien exit $stat 317177391Sobrien fi 318177391Sobrien 319177391Sobrien for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 320177391Sobrien do 321177391Sobrien test -f "$tmpdepfile" && break 322177391Sobrien done 323177391Sobrien if test -f "$tmpdepfile"; then 324177391Sobrien sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 325177391Sobrien # Add `dependent.h:' lines. 326177391Sobrien sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 327177391Sobrien else 328177391Sobrien echo "#dummy" > "$depfile" 329177391Sobrien fi 330177391Sobrien rm -f "$tmpdepfile" "$tmpdepfile2" 331177391Sobrien ;; 332177391Sobrien 333102840Spetertru64) 334128266Speter # The Tru64 compiler uses -MD to generate dependencies as a side 335102840Speter # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 336128266Speter # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 337128266Speter # dependencies in `foo.d' instead, so we check for that too. 338102840Speter # Subdirectories are respected. 339128266Speter dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 340128266Speter test "x$dir" = "x$object" && dir= 341128266Speter base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 342102840Speter 343102840Speter if test "$libtool" = yes; then 344177391Sobrien # With Tru64 cc, shared objects can also be used to make a 345177391Sobrien # static library. This mechanism is used in libtool 1.4 series to 346177391Sobrien # handle both shared and static libraries in a single compilation. 347177391Sobrien # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 348177391Sobrien # 349177391Sobrien # With libtool 1.5 this exception was removed, and libtool now 350177391Sobrien # generates 2 separate objects for the 2 libraries. These two 351177391Sobrien # compilations output dependencies in $dir.libs/$base.o.d and 352177391Sobrien # in $dir$base.o.d. We have to check for both files, because 353177391Sobrien # one of the two compilations can be disabled. We should prefer 354177391Sobrien # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 355177391Sobrien # automatically cleaned when .libs/ is deleted, while ignoring 356177391Sobrien # the former would cause a distcleancheck panic. 357177391Sobrien tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 358177391Sobrien tmpdepfile2=$dir$base.o.d # libtool 1.5 359177391Sobrien tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 360177391Sobrien tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 361102840Speter "$@" -Wc,-MD 362102840Speter else 363177391Sobrien tmpdepfile1=$dir$base.o.d 364177391Sobrien tmpdepfile2=$dir$base.d 365177391Sobrien tmpdepfile3=$dir$base.d 366177391Sobrien tmpdepfile4=$dir$base.d 367102840Speter "$@" -MD 368102840Speter fi 369102840Speter 370102840Speter stat=$? 371102840Speter if test $stat -eq 0; then : 372102840Speter else 373177391Sobrien rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 374102840Speter exit $stat 375102840Speter fi 376102840Speter 377177391Sobrien for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 378177391Sobrien do 379177391Sobrien test -f "$tmpdepfile" && break 380177391Sobrien done 381102840Speter if test -f "$tmpdepfile"; then 382102840Speter sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 383128266Speter # That's a tab and a space in the []. 384128266Speter sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 385102840Speter else 386102840Speter echo "#dummy" > "$depfile" 387102840Speter fi 388102840Speter rm -f "$tmpdepfile" 389102840Speter ;; 390102840Speter 39181404Speter#nosideeffect) 39281404Speter # This comment above is used by automake to tell side-effect 39381404Speter # dependency tracking mechanisms from slower ones. 39481404Speter 39581404Speterdashmstdout) 39681404Speter # Important note: in order to support this mode, a compiler *must* 397128266Speter # always write the preprocessed file to stdout, regardless of -o. 398128266Speter "$@" || exit $? 399128266Speter 400128266Speter # Remove the call to Libtool. 401128266Speter if test "$libtool" = yes; then 402128266Speter while test $1 != '--mode=compile'; do 403128266Speter shift 404128266Speter done 405128266Speter shift 406128266Speter fi 407128266Speter 408128266Speter # Remove `-o $object'. 409128266Speter IFS=" " 410128266Speter for arg 411128266Speter do 412128266Speter case $arg in 413128266Speter -o) 414128266Speter shift 41581404Speter ;; 416128266Speter $object) 417128266Speter shift 418128266Speter ;; 419128266Speter *) 420128266Speter set fnord "$@" "$arg" 421128266Speter shift # fnord 422128266Speter shift # $arg 423128266Speter ;; 42481404Speter esac 425128266Speter done 426128266Speter 427128266Speter test -z "$dashmflag" && dashmflag=-M 428128266Speter # Require at least two characters before searching for `:' 429128266Speter # in the target name. This is to cope with DOS-style filenames: 430128266Speter # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 431128266Speter "$@" $dashmflag | 432128266Speter sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 43381404Speter rm -f "$depfile" 43481404Speter cat < "$tmpdepfile" > "$depfile" 43581404Speter tr ' ' ' 43681404Speter' < "$tmpdepfile" | \ 43781404Speter## Some versions of the HPUX 10.20 sed can't process this invocation 43881404Speter## correctly. Breaking it into two sed invocations is a workaround. 43981404Speter sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 44081404Speter rm -f "$tmpdepfile" 44181404Speter ;; 44281404Speter 44381404SpeterdashXmstdout) 44481404Speter # This case only exists to satisfy depend.m4. It is never actually 44581404Speter # run, as this mode is specially recognized in the preamble. 44681404Speter exit 1 44781404Speter ;; 44881404Speter 44981404Spetermakedepend) 450128266Speter "$@" || exit $? 451128266Speter # Remove any Libtool call 452128266Speter if test "$libtool" = yes; then 453128266Speter while test $1 != '--mode=compile'; do 454128266Speter shift 455128266Speter done 456128266Speter shift 457128266Speter fi 45881404Speter # X makedepend 459128266Speter shift 460128266Speter cleared=no 461128266Speter for arg in "$@"; do 462128266Speter case $cleared in 463128266Speter no) 464128266Speter set ""; shift 465128266Speter cleared=yes ;; 466128266Speter esac 467128266Speter case "$arg" in 468128266Speter -D*|-I*) 469128266Speter set fnord "$@" "$arg"; shift ;; 470128266Speter # Strip any option that makedepend may not understand. Remove 471128266Speter # the object too, otherwise makedepend will parse it as a source file. 472128266Speter -*|$object) 473128266Speter ;; 474128266Speter *) 475128266Speter set fnord "$@" "$arg"; shift ;; 476128266Speter esac 477128266Speter done 478128266Speter obj_suffix="`echo $object | sed 's/^.*\././'`" 479128266Speter touch "$tmpdepfile" 480128266Speter ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 48181404Speter rm -f "$depfile" 48281404Speter cat < "$tmpdepfile" > "$depfile" 483128266Speter sed '1,2d' "$tmpdepfile" | tr ' ' ' 48481404Speter' | \ 48581404Speter## Some versions of the HPUX 10.20 sed can't process this invocation 48681404Speter## correctly. Breaking it into two sed invocations is a workaround. 48781404Speter sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 48881404Speter rm -f "$tmpdepfile" "$tmpdepfile".bak 48981404Speter ;; 49081404Speter 49181404Spetercpp) 49281404Speter # Important note: in order to support this mode, a compiler *must* 493128266Speter # always write the preprocessed file to stdout. 494128266Speter "$@" || exit $? 495128266Speter 496128266Speter # Remove the call to Libtool. 497128266Speter if test "$libtool" = yes; then 498128266Speter while test $1 != '--mode=compile'; do 499128266Speter shift 500128266Speter done 501128266Speter shift 502128266Speter fi 503128266Speter 504128266Speter # Remove `-o $object'. 505128266Speter IFS=" " 506128266Speter for arg 507128266Speter do 508128266Speter case $arg in 509128266Speter -o) 510128266Speter shift 51181404Speter ;; 512128266Speter $object) 513128266Speter shift 514128266Speter ;; 515128266Speter *) 516128266Speter set fnord "$@" "$arg" 517128266Speter shift # fnord 518128266Speter shift # $arg 519128266Speter ;; 52081404Speter esac 521128266Speter done 522128266Speter 523128266Speter "$@" -E | 524177391Sobrien sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 525177391Sobrien -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 52681404Speter sed '$ s: \\$::' > "$tmpdepfile" 52781404Speter rm -f "$depfile" 52881404Speter echo "$object : \\" > "$depfile" 52981404Speter cat < "$tmpdepfile" >> "$depfile" 53081404Speter sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 53181404Speter rm -f "$tmpdepfile" 53281404Speter ;; 53381404Speter 53481404Spetermsvisualcpp) 53581404Speter # Important note: in order to support this mode, a compiler *must* 536128266Speter # always write the preprocessed file to stdout, regardless of -o, 53781404Speter # because we must use -o when running libtool. 538128266Speter "$@" || exit $? 539128266Speter IFS=" " 540128266Speter for arg 541128266Speter do 542128266Speter case "$arg" in 543128266Speter "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 544128266Speter set fnord "$@" 545128266Speter shift 546128266Speter shift 547128266Speter ;; 548128266Speter *) 54981404Speter set fnord "$@" "$arg" 550128266Speter shift 551128266Speter shift 552128266Speter ;; 55381404Speter esac 554128266Speter done 555128266Speter "$@" -E | 556128266Speter sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 55781404Speter rm -f "$depfile" 55881404Speter echo "$object : \\" > "$depfile" 55981404Speter . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 56081404Speter echo " " >> "$depfile" 56181404Speter . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 56281404Speter rm -f "$tmpdepfile" 56381404Speter ;; 56481404Speter 56581404Speternone) 56681404Speter exec "$@" 56781404Speter ;; 56881404Speter 56981404Speter*) 57081404Speter echo "Unknown depmode $depmode" 1>&2 57181404Speter exit 1 57281404Speter ;; 57381404Speteresac 57481404Speter 57581404Speterexit 0 576177391Sobrien 577177391Sobrien# Local Variables: 578177391Sobrien# mode: shell-script 579177391Sobrien# sh-indentation: 2 580177391Sobrien# eval: (add-hook 'write-file-hooks 'time-stamp) 581177391Sobrien# time-stamp-start: "scriptversion=" 582177391Sobrien# time-stamp-format: "%:y-%02m-%02d.%02H" 583177391Sobrien# time-stamp-end: "$" 584177391Sobrien# End: 585