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