1#! /bin/sh 2# depcomp - compile a program generating dependencies as side-effects 3 4scriptversion=2012-07-12.20; # UTC 5 6# Copyright (C) 1999-2012 Free Software Foundation, Inc. 7 8# This program is free software; you can redistribute it and/or modify 9# it under the terms of the GNU General Public License as published by 10# the Free Software Foundation; either version 2, or (at your option) 11# any later version. 12 13# This program is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16# GNU General Public License for more details. 17 18# You should have received a copy of the GNU General Public License 19# along with this program. If not, see <http://www.gnu.org/licenses/>. 20 21# As a special exception to the GNU General Public License, if you 22# distribute this file as part of a program that contains a 23# configuration script generated by Autoconf, you may include it under 24# the same distribution terms that you use for the rest of that program. 25 26# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27 28case $1 in 29 '') 30 echo "$0: No command. Try '$0 --help' for more information." 1>&2 31 exit 1; 32 ;; 33 -h | --h*) 34 cat <<\EOF 35Usage: depcomp [--help] [--version] PROGRAM [ARGS] 36 37Run PROGRAMS ARGS to compile a file, generating dependencies 38as side-effects. 39 40Environment variables: 41 depmode Dependency tracking mode. 42 source Source file read by 'PROGRAMS ARGS'. 43 object Object file output by 'PROGRAMS ARGS'. 44 DEPDIR directory where to store dependencies. 45 depfile Dependency file to output. 46 tmpdepfile Temporary file to use when outputting dependencies. 47 libtool Whether libtool is used (yes/no). 48 49Report bugs to <bug-automake@gnu.org>. 50EOF 51 exit $? 52 ;; 53 -v | --v*) 54 echo "depcomp $scriptversion" 55 exit $? 56 ;; 57esac 58 59# A tabulation character. 60tab=' ' 61# A newline character. 62nl=' 63' 64 65if test -z "$depmode" || test -z "$source" || test -z "$object"; then 66 echo "depcomp: Variables source, object and depmode must be set" 1>&2 67 exit 1 68fi 69 70# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 71depfile=${depfile-`echo "$object" | 72 sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 73tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 74 75rm -f "$tmpdepfile" 76 77# Avoid interferences from the environment. 78gccflag= dashmflag= 79 80# Some modes work just like other modes, but use different flags. We 81# parameterize here, but still list the modes in the big case below, 82# to make depend.m4 easier to write. Note that we *cannot* use a case 83# here, because this file can only contain one case statement. 84if test "$depmode" = hp; then 85 # HP compiler uses -M and no extra arg. 86 gccflag=-M 87 depmode=gcc 88fi 89 90if test "$depmode" = dashXmstdout; then 91 # This is just like dashmstdout with a different argument. 92 dashmflag=-xM 93 depmode=dashmstdout 94fi 95 96cygpath_u="cygpath -u -f -" 97if test "$depmode" = msvcmsys; then 98 # This is just like msvisualcpp but w/o cygpath translation. 99 # Just convert the backslash-escaped backslashes to single forward 100 # slashes to satisfy depend.m4 101 cygpath_u='sed s,\\\\,/,g' 102 depmode=msvisualcpp 103fi 104 105if test "$depmode" = msvc7msys; then 106 # This is just like msvc7 but w/o cygpath translation. 107 # Just convert the backslash-escaped backslashes to single forward 108 # slashes to satisfy depend.m4 109 cygpath_u='sed s,\\\\,/,g' 110 depmode=msvc7 111fi 112 113if test "$depmode" = xlc; then 114 # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 115 gccflag=-qmakedep=gcc,-MF 116 depmode=gcc 117fi 118 119case "$depmode" in 120gcc3) 121## gcc 3 implements dependency tracking that does exactly what 122## we want. Yay! Note: for some reason libtool 1.4 doesn't like 123## it if -MD -MP comes after the -MF stuff. Hmm. 124## Unfortunately, FreeBSD c89 acceptance of flags depends upon 125## the command line argument order; so add the flags where they 126## appear in depend2.am. Note that the slowdown incurred here 127## affects only configure: in makefiles, %FASTDEP% shortcuts this. 128 for arg 129 do 130 case $arg in 131 -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 132 *) set fnord "$@" "$arg" ;; 133 esac 134 shift # fnord 135 shift # $arg 136 done 137 "$@" 138 stat=$? 139 if test $stat -eq 0; then : 140 else 141 rm -f "$tmpdepfile" 142 exit $stat 143 fi 144 mv "$tmpdepfile" "$depfile" 145 ;; 146 147gcc) 148## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 149## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 150## (see the conditional assignment to $gccflag above). 151## There are various ways to get dependency output from gcc. Here's 152## why we pick this rather obscure method: 153## - Don't want to use -MD because we'd like the dependencies to end 154## up in a subdir. Having to rename by hand is ugly. 155## (We might end up doing this anyway to support other compilers.) 156## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 157## -MM, not -M (despite what the docs say). Also, it might not be 158## supported by the other compilers which use the 'gcc' depmode. 159## - Using -M directly means running the compiler twice (even worse 160## than renaming). 161 if test -z "$gccflag"; then 162 gccflag=-MD, 163 fi 164 "$@" -Wp,"$gccflag$tmpdepfile" 165 stat=$? 166 if test $stat -eq 0; then : 167 else 168 rm -f "$tmpdepfile" 169 exit $stat 170 fi 171 rm -f "$depfile" 172 echo "$object : \\" > "$depfile" 173 alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 174## The second -e expression handles DOS-style file names with drive letters. 175 sed -e 's/^[^:]*: / /' \ 176 -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 177## This next piece of magic avoids the "deleted header file" problem. 178## The problem is that when a header file which appears in a .P file 179## is deleted, the dependency causes make to die (because there is 180## typically no way to rebuild the header). We avoid this by adding 181## dummy dependencies for each header file. Too bad gcc doesn't do 182## this for us directly. 183 tr ' ' "$nl" < "$tmpdepfile" | 184## Some versions of gcc put a space before the ':'. On the theory 185## that the space means something, we add a space to the output as 186## well. hp depmode also adds that space, but also prefixes the VPATH 187## to the object. Take care to not repeat it in the output. 188## Some versions of the HPUX 10.20 sed can't process this invocation 189## correctly. Breaking it into two sed invocations is a workaround. 190 sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 191 | sed -e 's/$/ :/' >> "$depfile" 192 rm -f "$tmpdepfile" 193 ;; 194 195hp) 196 # This case exists only to let depend.m4 do its work. It works by 197 # looking at the text of this script. This case will never be run, 198 # since it is checked for above. 199 exit 1 200 ;; 201 202sgi) 203 if test "$libtool" = yes; then 204 "$@" "-Wp,-MDupdate,$tmpdepfile" 205 else 206 "$@" -MDupdate "$tmpdepfile" 207 fi 208 stat=$? 209 if test $stat -eq 0; then : 210 else 211 rm -f "$tmpdepfile" 212 exit $stat 213 fi 214 rm -f "$depfile" 215 216 if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 217 echo "$object : \\" > "$depfile" 218 219 # Clip off the initial element (the dependent). Don't try to be 220 # clever and replace this with sed code, as IRIX sed won't handle 221 # lines with more than a fixed number of characters (4096 in 222 # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 223 # the IRIX cc adds comments like '#:fec' to the end of the 224 # dependency line. 225 tr ' ' "$nl" < "$tmpdepfile" \ 226 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 227 tr "$nl" ' ' >> "$depfile" 228 echo >> "$depfile" 229 230 # The second pass generates a dummy entry for each header file. 231 tr ' ' "$nl" < "$tmpdepfile" \ 232 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 233 >> "$depfile" 234 else 235 # The sourcefile does not contain any dependencies, so just 236 # store a dummy comment line, to avoid errors with the Makefile 237 # "include basename.Plo" scheme. 238 echo "#dummy" > "$depfile" 239 fi 240 rm -f "$tmpdepfile" 241 ;; 242 243xlc) 244 # This case exists only to let depend.m4 do its work. It works by 245 # looking at the text of this script. This case will never be run, 246 # since it is checked for above. 247 exit 1 248 ;; 249 250aix) 251 # The C for AIX Compiler uses -M and outputs the dependencies 252 # in a .u file. In older versions, this file always lives in the 253 # current directory. Also, the AIX compiler puts '$object:' at the 254 # start of each line; $object doesn't have directory information. 255 # Version 6 uses the directory in both cases. 256 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 257 test "x$dir" = "x$object" && dir= 258 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 259 if test "$libtool" = yes; then 260 tmpdepfile1=$dir$base.u 261 tmpdepfile2=$base.u 262 tmpdepfile3=$dir.libs/$base.u 263 "$@" -Wc,-M 264 else 265 tmpdepfile1=$dir$base.u 266 tmpdepfile2=$dir$base.u 267 tmpdepfile3=$dir$base.u 268 "$@" -M 269 fi 270 stat=$? 271 272 if test $stat -eq 0; then : 273 else 274 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 275 exit $stat 276 fi 277 278 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 279 do 280 test -f "$tmpdepfile" && break 281 done 282 if test -f "$tmpdepfile"; then 283 # Each line is of the form 'foo.o: dependent.h'. 284 # Do two passes, one to just change these to 285 # '$object: dependent.h' and one to simply 'dependent.h:'. 286 sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 287 sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 288 else 289 # The sourcefile does not contain any dependencies, so just 290 # store a dummy comment line, to avoid errors with the Makefile 291 # "include basename.Plo" scheme. 292 echo "#dummy" > "$depfile" 293 fi 294 rm -f "$tmpdepfile" 295 ;; 296 297icc) 298 # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. 299 # However on 300 # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c 301 # ICC 7.0 will fill foo.d with something like 302 # foo.o: sub/foo.c 303 # foo.o: sub/foo.h 304 # which is wrong. We want 305 # sub/foo.o: sub/foo.c 306 # sub/foo.o: sub/foo.h 307 # sub/foo.c: 308 # sub/foo.h: 309 # ICC 7.1 will output 310 # foo.o: sub/foo.c sub/foo.h 311 # and will wrap long lines using '\': 312 # foo.o: sub/foo.c ... \ 313 # sub/foo.h ... \ 314 # ... 315 # tcc 0.9.26 (FIXME still under development at the moment of writing) 316 # will emit a similar output, but also prepend the continuation lines 317 # with horizontal tabulation characters. 318 "$@" -MD -MF "$tmpdepfile" 319 stat=$? 320 if test $stat -eq 0; then : 321 else 322 rm -f "$tmpdepfile" 323 exit $stat 324 fi 325 rm -f "$depfile" 326 # Each line is of the form 'foo.o: dependent.h', 327 # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. 328 # Do two passes, one to just change these to 329 # '$object: dependent.h' and one to simply 'dependent.h:'. 330 sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ 331 < "$tmpdepfile" > "$depfile" 332 sed ' 333 s/[ '"$tab"'][ '"$tab"']*/ /g 334 s/^ *// 335 s/ *\\*$// 336 s/^[^:]*: *// 337 /^$/d 338 /:$/d 339 s/$/ :/ 340 ' < "$tmpdepfile" >> "$depfile" 341 rm -f "$tmpdepfile" 342 ;; 343 344## The order of this option in the case statement is important, since the 345## shell code in configure will try each of these formats in the order 346## listed in this file. A plain '-MD' option would be understood by many 347## compilers, so we must ensure this comes after the gcc and icc options. 348pgcc) 349 # Portland's C compiler understands '-MD'. 350 # Will always output deps to 'file.d' where file is the root name of the 351 # source file under compilation, even if file resides in a subdirectory. 352 # The object file name does not affect the name of the '.d' file. 353 # pgcc 10.2 will output 354 # foo.o: sub/foo.c sub/foo.h 355 # and will wrap long lines using '\' : 356 # foo.o: sub/foo.c ... \ 357 # sub/foo.h ... \ 358 # ... 359 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 360 test "x$dir" = "x$object" && dir= 361 # Use the source, not the object, to determine the base name, since 362 # that's sadly what pgcc will do too. 363 base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'` 364 tmpdepfile="$base.d" 365 366 # For projects that build the same source file twice into different object 367 # files, the pgcc approach of using the *source* file root name can cause 368 # problems in parallel builds. Use a locking strategy to avoid stomping on 369 # the same $tmpdepfile. 370 lockdir="$base.d-lock" 371 trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15 372 numtries=100 373 i=$numtries 374 while test $i -gt 0 ; do 375 # mkdir is a portable test-and-set. 376 if mkdir $lockdir 2>/dev/null; then 377 # This process acquired the lock. 378 "$@" -MD 379 stat=$? 380 # Release the lock. 381 rm -rf $lockdir 382 break 383 else 384 ## the lock is being held by a different process, 385 ## wait until the winning process is done or we timeout 386 while test -d $lockdir && test $i -gt 0; do 387 sleep 1 388 i=`expr $i - 1` 389 done 390 fi 391 i=`expr $i - 1` 392 done 393 trap - 1 2 13 15 394 if test $i -le 0; then 395 echo "$0: failed to acquire lock after $numtries attempts" >&2 396 echo "$0: check lockdir '$lockdir'" >&2 397 exit 1 398 fi 399 400 if test $stat -ne 0; then 401 rm -f "$tmpdepfile" 402 exit $stat 403 fi 404 rm -f "$depfile" 405 # Each line is of the form `foo.o: dependent.h', 406 # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 407 # Do two passes, one to just change these to 408 # `$object: dependent.h' and one to simply `dependent.h:'. 409 sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 410 # Some versions of the HPUX 10.20 sed can't process this invocation 411 # correctly. Breaking it into two sed invocations is a workaround. 412 sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 413 sed -e 's/$/ :/' >> "$depfile" 414 rm -f "$tmpdepfile" 415 ;; 416 417hp2) 418 # The "hp" stanza above does not work with aCC (C++) and HP's ia64 419 # compilers, which have integrated preprocessors. The correct option 420 # to use with these is +Maked; it writes dependencies to a file named 421 # 'foo.d', which lands next to the object file, wherever that 422 # happens to be. 423 # Much of this is similar to the tru64 case; see comments there. 424 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 425 test "x$dir" = "x$object" && dir= 426 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 427 if test "$libtool" = yes; then 428 tmpdepfile1=$dir$base.d 429 tmpdepfile2=$dir.libs/$base.d 430 "$@" -Wc,+Maked 431 else 432 tmpdepfile1=$dir$base.d 433 tmpdepfile2=$dir$base.d 434 "$@" +Maked 435 fi 436 stat=$? 437 if test $stat -eq 0; then : 438 else 439 rm -f "$tmpdepfile1" "$tmpdepfile2" 440 exit $stat 441 fi 442 443 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 444 do 445 test -f "$tmpdepfile" && break 446 done 447 if test -f "$tmpdepfile"; then 448 sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 449 # Add 'dependent.h:' lines. 450 sed -ne '2,${ 451 s/^ *// 452 s/ \\*$// 453 s/$/:/ 454 p 455 }' "$tmpdepfile" >> "$depfile" 456 else 457 echo "#dummy" > "$depfile" 458 fi 459 rm -f "$tmpdepfile" "$tmpdepfile2" 460 ;; 461 462tru64) 463 # The Tru64 compiler uses -MD to generate dependencies as a side 464 # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 465 # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 466 # dependencies in 'foo.d' instead, so we check for that too. 467 # Subdirectories are respected. 468 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 469 test "x$dir" = "x$object" && dir= 470 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 471 472 if test "$libtool" = yes; then 473 # With Tru64 cc, shared objects can also be used to make a 474 # static library. This mechanism is used in libtool 1.4 series to 475 # handle both shared and static libraries in a single compilation. 476 # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 477 # 478 # With libtool 1.5 this exception was removed, and libtool now 479 # generates 2 separate objects for the 2 libraries. These two 480 # compilations output dependencies in $dir.libs/$base.o.d and 481 # in $dir$base.o.d. We have to check for both files, because 482 # one of the two compilations can be disabled. We should prefer 483 # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 484 # automatically cleaned when .libs/ is deleted, while ignoring 485 # the former would cause a distcleancheck panic. 486 tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 487 tmpdepfile2=$dir$base.o.d # libtool 1.5 488 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 489 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 490 "$@" -Wc,-MD 491 else 492 tmpdepfile1=$dir$base.o.d 493 tmpdepfile2=$dir$base.d 494 tmpdepfile3=$dir$base.d 495 tmpdepfile4=$dir$base.d 496 "$@" -MD 497 fi 498 499 stat=$? 500 if test $stat -eq 0; then : 501 else 502 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 503 exit $stat 504 fi 505 506 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 507 do 508 test -f "$tmpdepfile" && break 509 done 510 if test -f "$tmpdepfile"; then 511 sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 512 sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 513 else 514 echo "#dummy" > "$depfile" 515 fi 516 rm -f "$tmpdepfile" 517 ;; 518 519msvc7) 520 if test "$libtool" = yes; then 521 showIncludes=-Wc,-showIncludes 522 else 523 showIncludes=-showIncludes 524 fi 525 "$@" $showIncludes > "$tmpdepfile" 526 stat=$? 527 grep -v '^Note: including file: ' "$tmpdepfile" 528 if test "$stat" = 0; then : 529 else 530 rm -f "$tmpdepfile" 531 exit $stat 532 fi 533 rm -f "$depfile" 534 echo "$object : \\" > "$depfile" 535 # The first sed program below extracts the file names and escapes 536 # backslashes for cygpath. The second sed program outputs the file 537 # name when reading, but also accumulates all include files in the 538 # hold buffer in order to output them again at the end. This only 539 # works with sed implementations that can handle large buffers. 540 sed < "$tmpdepfile" -n ' 541/^Note: including file: *\(.*\)/ { 542 s//\1/ 543 s/\\/\\\\/g 544 p 545}' | $cygpath_u | sort -u | sed -n ' 546s/ /\\ /g 547s/\(.*\)/'"$tab"'\1 \\/p 548s/.\(.*\) \\/\1:/ 549H 550$ { 551 s/.*/'"$tab"'/ 552 G 553 p 554}' >> "$depfile" 555 rm -f "$tmpdepfile" 556 ;; 557 558msvc7msys) 559 # This case exists only to let depend.m4 do its work. It works by 560 # looking at the text of this script. This case will never be run, 561 # since it is checked for above. 562 exit 1 563 ;; 564 565#nosideeffect) 566 # This comment above is used by automake to tell side-effect 567 # dependency tracking mechanisms from slower ones. 568 569dashmstdout) 570 # Important note: in order to support this mode, a compiler *must* 571 # always write the preprocessed file to stdout, regardless of -o. 572 "$@" || exit $? 573 574 # Remove the call to Libtool. 575 if test "$libtool" = yes; then 576 while test "X$1" != 'X--mode=compile'; do 577 shift 578 done 579 shift 580 fi 581 582 # Remove '-o $object'. 583 IFS=" " 584 for arg 585 do 586 case $arg in 587 -o) 588 shift 589 ;; 590 $object) 591 shift 592 ;; 593 *) 594 set fnord "$@" "$arg" 595 shift # fnord 596 shift # $arg 597 ;; 598 esac 599 done 600 601 test -z "$dashmflag" && dashmflag=-M 602 # Require at least two characters before searching for ':' 603 # in the target name. This is to cope with DOS-style filenames: 604 # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 605 "$@" $dashmflag | 606 sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" 607 rm -f "$depfile" 608 cat < "$tmpdepfile" > "$depfile" 609 tr ' ' "$nl" < "$tmpdepfile" | \ 610## Some versions of the HPUX 10.20 sed can't process this invocation 611## correctly. Breaking it into two sed invocations is a workaround. 612 sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 613 rm -f "$tmpdepfile" 614 ;; 615 616dashXmstdout) 617 # This case only exists to satisfy depend.m4. It is never actually 618 # run, as this mode is specially recognized in the preamble. 619 exit 1 620 ;; 621 622makedepend) 623 "$@" || exit $? 624 # Remove any Libtool call 625 if test "$libtool" = yes; then 626 while test "X$1" != 'X--mode=compile'; do 627 shift 628 done 629 shift 630 fi 631 # X makedepend 632 shift 633 cleared=no eat=no 634 for arg 635 do 636 case $cleared in 637 no) 638 set ""; shift 639 cleared=yes ;; 640 esac 641 if test $eat = yes; then 642 eat=no 643 continue 644 fi 645 case "$arg" in 646 -D*|-I*) 647 set fnord "$@" "$arg"; shift ;; 648 # Strip any option that makedepend may not understand. Remove 649 # the object too, otherwise makedepend will parse it as a source file. 650 -arch) 651 eat=yes ;; 652 -*|$object) 653 ;; 654 *) 655 set fnord "$@" "$arg"; shift ;; 656 esac 657 done 658 obj_suffix=`echo "$object" | sed 's/^.*\././'` 659 touch "$tmpdepfile" 660 ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 661 rm -f "$depfile" 662 # makedepend may prepend the VPATH from the source file name to the object. 663 # No need to regex-escape $object, excess matching of '.' is harmless. 664 sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 665 sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ 666## Some versions of the HPUX 10.20 sed can't process this invocation 667## correctly. Breaking it into two sed invocations is a workaround. 668 sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 669 rm -f "$tmpdepfile" "$tmpdepfile".bak 670 ;; 671 672cpp) 673 # Important note: in order to support this mode, a compiler *must* 674 # always write the preprocessed file to stdout. 675 "$@" || exit $? 676 677 # Remove the call to Libtool. 678 if test "$libtool" = yes; then 679 while test "X$1" != 'X--mode=compile'; do 680 shift 681 done 682 shift 683 fi 684 685 # Remove '-o $object'. 686 IFS=" " 687 for arg 688 do 689 case $arg in 690 -o) 691 shift 692 ;; 693 $object) 694 shift 695 ;; 696 *) 697 set fnord "$@" "$arg" 698 shift # fnord 699 shift # $arg 700 ;; 701 esac 702 done 703 704 "$@" -E | 705 sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 706 -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 707 sed '$ s: \\$::' > "$tmpdepfile" 708 rm -f "$depfile" 709 echo "$object : \\" > "$depfile" 710 cat < "$tmpdepfile" >> "$depfile" 711 sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 712 rm -f "$tmpdepfile" 713 ;; 714 715msvisualcpp) 716 # Important note: in order to support this mode, a compiler *must* 717 # always write the preprocessed file to stdout. 718 "$@" || exit $? 719 720 # Remove the call to Libtool. 721 if test "$libtool" = yes; then 722 while test "X$1" != 'X--mode=compile'; do 723 shift 724 done 725 shift 726 fi 727 728 IFS=" " 729 for arg 730 do 731 case "$arg" in 732 -o) 733 shift 734 ;; 735 $object) 736 shift 737 ;; 738 "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 739 set fnord "$@" 740 shift 741 shift 742 ;; 743 *) 744 set fnord "$@" "$arg" 745 shift 746 shift 747 ;; 748 esac 749 done 750 "$@" -E 2>/dev/null | 751 sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 752 rm -f "$depfile" 753 echo "$object : \\" > "$depfile" 754 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 755 echo "$tab" >> "$depfile" 756 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 757 rm -f "$tmpdepfile" 758 ;; 759 760msvcmsys) 761 # This case exists only to let depend.m4 do its work. It works by 762 # looking at the text of this script. This case will never be run, 763 # since it is checked for above. 764 exit 1 765 ;; 766 767none) 768 exec "$@" 769 ;; 770 771*) 772 echo "Unknown depmode $depmode" 1>&2 773 exit 1 774 ;; 775esac 776 777exit 0 778 779# Local Variables: 780# mode: shell-script 781# sh-indentation: 2 782# eval: (add-hook 'write-file-hooks 'time-stamp) 783# time-stamp-start: "scriptversion=" 784# time-stamp-format: "%:y-%02m-%02d.%02H" 785# time-stamp-time-zone: "UTC" 786# time-stamp-end: "; # UTC" 787# End: 788