Changes in automake/depcomp [59310bf:00cc023]
- File:
-
- 1 edited
-
automake/depcomp (modified) (32 diffs)
Legend:
- Unmodified
- Added
- Removed
-
automake/depcomp
r59310bf r00cc023 2 2 # depcomp - compile a program generating dependencies as side-effects 3 3 4 scriptversion=2013-05-30.07; # UTC 5 6 # Copyright (C) 1999-2014 Free Software Foundation, Inc. 4 scriptversion=2011-12-04.11; # UTC 5 6 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7 # 2011 Free Software Foundation, Inc. 7 8 8 9 # This program is free software; you can redistribute it and/or modify … … 28 29 case $1 in 29 30 '') 30 echo "$0: No command. Try '$0 --help' for more information." 1>&231 exit 1;32 ;;31 echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32 exit 1; 33 ;; 33 34 -h | --h*) 34 35 cat <<\EOF … … 40 41 Environment variables: 41 42 depmode Dependency tracking mode. 42 source Source file read by 'PROGRAMS ARGS'.43 object Object file output by 'PROGRAMS ARGS'.43 source Source file read by `PROGRAMS ARGS'. 44 object Object file output by `PROGRAMS ARGS'. 44 45 DEPDIR directory where to store dependencies. 45 46 depfile Dependency file to output. … … 57 58 esac 58 59 59 # Get the directory component of the given path, and save it in the60 # global variables '$dir'. Note that this directory component will61 # be either empty or ending with a '/' character. This is deliberate.62 set_dir_from ()63 {64 case $1 in65 */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;66 *) dir=;;67 esac68 }69 70 # Get the suffix-stripped basename of the given path, and save it the71 # global variable '$base'.72 set_base_from ()73 {74 base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`75 }76 77 # If no dependency file was actually created by the compiler invocation,78 # we still have to create a dummy depfile, to avoid errors with the79 # Makefile "include basename.Plo" scheme.80 make_dummy_depfile ()81 {82 echo "#dummy" > "$depfile"83 }84 85 # Factor out some common post-processing of the generated depfile.86 # Requires the auxiliary global variable '$tmpdepfile' to be set.87 aix_post_process_depfile ()88 {89 # If the compiler actually managed to produce a dependency file,90 # post-process it.91 if test -f "$tmpdepfile"; then92 # Each line is of the form 'foo.o: dependency.h'.93 # Do two passes, one to just change these to94 # $object: dependency.h95 # and one to simply output96 # dependency.h:97 # which is needed to avoid the deleted-header problem.98 { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"99 sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"100 } > "$depfile"101 rm -f "$tmpdepfile"102 else103 make_dummy_depfile104 fi105 }106 107 # A tabulation character.108 tab=' '109 # A newline character.110 nl='111 '112 # Character ranges might be problematic outside the C locale.113 # These definitions help.114 upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ115 lower=abcdefghijklmnopqrstuvwxyz116 digits=0123456789117 alpha=${upper}${lower}118 119 60 if test -z "$depmode" || test -z "$source" || test -z "$object"; then 120 61 echo "depcomp: Variables source, object and depmode must be set" 1>&2 … … 128 69 129 70 rm -f "$tmpdepfile" 130 131 # Avoid interferences from the environment.132 gccflag= dashmflag=133 71 134 72 # Some modes work just like other modes, but use different flags. We … … 143 81 144 82 if test "$depmode" = dashXmstdout; then 145 # This is just like dashmstdout with a different argument.146 dashmflag=-xM147 depmode=dashmstdout83 # This is just like dashmstdout with a different argument. 84 dashmflag=-xM 85 depmode=dashmstdout 148 86 fi 149 87 150 88 cygpath_u="cygpath -u -f -" 151 89 if test "$depmode" = msvcmsys; then 152 # This is just like msvisualcpp but w/o cygpath translation.153 # Just convert the backslash-escaped backslashes to single forward154 # slashes to satisfy depend.m4155 cygpath_u='sed s,\\\\,/,g'156 depmode=msvisualcpp90 # This is just like msvisualcpp but w/o cygpath translation. 91 # Just convert the backslash-escaped backslashes to single forward 92 # slashes to satisfy depend.m4 93 cygpath_u='sed s,\\\\,/,g' 94 depmode=msvisualcpp 157 95 fi 158 96 159 97 if test "$depmode" = msvc7msys; then 160 # This is just like msvc7 but w/o cygpath translation. 161 # Just convert the backslash-escaped backslashes to single forward 162 # slashes to satisfy depend.m4 163 cygpath_u='sed s,\\\\,/,g' 164 depmode=msvc7 165 fi 166 167 if test "$depmode" = xlc; then 168 # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169 gccflag=-qmakedep=gcc,-MF 170 depmode=gcc 98 # This is just like msvc7 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=msvc7 171 103 fi 172 104 … … 191 123 "$@" 192 124 stat=$? 193 if test $stat -ne 0; then 125 if test $stat -eq 0; then : 126 else 194 127 rm -f "$tmpdepfile" 195 128 exit $stat … … 199 132 200 133 gcc) 201 ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.202 ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.203 ## (see the conditional assignment to $gccflag above).204 134 ## There are various ways to get dependency output from gcc. Here's 205 135 ## why we pick this rather obscure method: … … 208 138 ## (We might end up doing this anyway to support other compilers.) 209 139 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210 ## -MM, not -M (despite what the docs say). Also, it might not be 211 ## supported by the other compilers which use the 'gcc' depmode. 140 ## -MM, not -M (despite what the docs say). 212 141 ## - Using -M directly means running the compiler twice (even worse 213 142 ## than renaming). … … 217 146 "$@" -Wp,"$gccflag$tmpdepfile" 218 147 stat=$? 219 if test $stat -ne 0; then 148 if test $stat -eq 0; then : 149 else 220 150 rm -f "$tmpdepfile" 221 151 exit $stat … … 223 153 rm -f "$depfile" 224 154 echo "$object : \\" > "$depfile" 225 # The second -e expression handles DOS-style file names with drive226 #letters.155 alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156 ## The second -e expression handles DOS-style file names with drive letters. 227 157 sed -e 's/^[^:]*: / /' \ 228 158 -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229 ## This next piece of magic avoids the "deleted header file"problem.159 ## This next piece of magic avoids the `deleted header file' problem. 230 160 ## The problem is that when a header file which appears in a .P file 231 161 ## is deleted, the dependency causes make to die (because there is … … 233 163 ## dummy dependencies for each header file. Too bad gcc doesn't do 234 164 ## this for us directly. 235 ## Some versions of gcc put a space before the ':'. On the theory 165 tr ' ' ' 166 ' < "$tmpdepfile" | 167 ## Some versions of gcc put a space before the `:'. On the theory 236 168 ## that the space means something, we add a space to the output as 237 169 ## well. hp depmode also adds that space, but also prefixes the VPATH … … 239 171 ## Some versions of the HPUX 10.20 sed can't process this invocation 240 172 ## correctly. Breaking it into two sed invocations is a workaround. 241 tr ' ' "$nl" < "$tmpdepfile" \ 242 | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243 | sed -e 's/$/ :/' >> "$depfile" 173 sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 174 | sed -e 's/$/ :/' >> "$depfile" 244 175 rm -f "$tmpdepfile" 245 176 ;; … … 259 190 fi 260 191 stat=$? 261 if test $stat -ne 0; then 192 if test $stat -eq 0; then : 193 else 262 194 rm -f "$tmpdepfile" 263 195 exit $stat … … 267 199 if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268 200 echo "$object : \\" > "$depfile" 201 269 202 # Clip off the initial element (the dependent). Don't try to be 270 203 # clever and replace this with sed code, as IRIX sed won't handle 271 204 # lines with more than a fixed number of characters (4096 in 272 205 # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273 # the IRIX cc adds comments like '#:fec' to the end of the206 # the IRIX cc adds comments like `#:fec' to the end of the 274 207 # dependency line. 275 tr ' ' "$nl" < "$tmpdepfile" \ 276 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277 | tr "$nl" ' ' >> "$depfile" 208 tr ' ' ' 209 ' < "$tmpdepfile" \ 210 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211 tr ' 212 ' ' ' >> "$depfile" 278 213 echo >> "$depfile" 214 279 215 # The second pass generates a dummy entry for each header file. 280 tr ' ' "$nl" < "$tmpdepfile" \ 281 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282 >> "$depfile" 283 else 284 make_dummy_depfile 285 fi 286 rm -f "$tmpdepfile" 287 ;; 288 289 xlc) 290 # This case exists only to let depend.m4 do its work. It works by 291 # looking at the text of this script. This case will never be run, 292 # since it is checked for above. 293 exit 1 216 tr ' ' ' 217 ' < "$tmpdepfile" \ 218 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 219 >> "$depfile" 220 else 221 # The sourcefile does not contain any dependencies, so just 222 # store a dummy comment line, to avoid errors with the Makefile 223 # "include basename.Plo" scheme. 224 echo "#dummy" > "$depfile" 225 fi 226 rm -f "$tmpdepfile" 294 227 ;; 295 228 … … 297 230 # The C for AIX Compiler uses -M and outputs the dependencies 298 231 # in a .u file. In older versions, this file always lives in the 299 # current directory. Also, the AIX compiler puts '$object:' at the232 # current directory. Also, the AIX compiler puts `$object:' at the 300 233 # start of each line; $object doesn't have directory information. 301 234 # Version 6 uses the directory in both cases. 302 set_dir_from "$object" 303 set_base_from "$object" 235 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 236 test "x$dir" = "x$object" && dir= 237 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 304 238 if test "$libtool" = yes; then 305 239 tmpdepfile1=$dir$base.u … … 314 248 fi 315 249 stat=$? 316 if test $stat -ne 0; then 250 251 if test $stat -eq 0; then : 252 else 317 253 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318 254 exit $stat … … 323 259 test -f "$tmpdepfile" && break 324 260 done 325 aix_post_process_depfile 326 ;; 327 328 tcc) 329 # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330 # FIXME: That version still under development at the moment of writing. 331 # Make that this statement remains true also for stable, released 332 # versions. 333 # It will wrap lines (doesn't matter whether long or short) with a 334 # trailing '\', as in: 335 # 336 # foo.o : \ 337 # foo.c \ 338 # foo.h \ 339 # 340 # It will put a trailing '\' even on the last line, and will use leading 341 # spaces rather than leading tabs (at least since its commit 0394caf7 342 # "Emit spaces for -MD"). 343 "$@" -MD -MF "$tmpdepfile" 344 stat=$? 345 if test $stat -ne 0; then 346 rm -f "$tmpdepfile" 347 exit $stat 348 fi 349 rm -f "$depfile" 350 # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351 # We have to change lines of the first kind to '$object: \'. 352 sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353 # And for each line of the second kind, we have to emit a 'dep.h:' 354 # dummy dependency, to avoid the deleted-header problem. 355 sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356 rm -f "$tmpdepfile" 357 ;; 358 359 ## The order of this option in the case statement is important, since the 360 ## shell code in configure will try each of these formats in the order 361 ## listed in this file. A plain '-MD' option would be understood by many 362 ## compilers, so we must ensure this comes after the gcc and icc options. 363 pgcc) 364 # Portland's C compiler understands '-MD'. 365 # Will always output deps to 'file.d' where file is the root name of the 366 # source file under compilation, even if file resides in a subdirectory. 367 # The object file name does not affect the name of the '.d' file. 368 # pgcc 10.2 will output 261 if test -f "$tmpdepfile"; then 262 # Each line is of the form `foo.o: dependent.h'. 263 # Do two passes, one to just change these to 264 # `$object: dependent.h' and one to simply `dependent.h:'. 265 sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 266 # That's a tab and a space in the []. 267 sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268 else 269 # The sourcefile does not contain any dependencies, so just 270 # store a dummy comment line, to avoid errors with the Makefile 271 # "include basename.Plo" scheme. 272 echo "#dummy" > "$depfile" 273 fi 274 rm -f "$tmpdepfile" 275 ;; 276 277 icc) 278 # Intel's C compiler understands `-MD -MF file'. However on 279 # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280 # ICC 7.0 will fill foo.d with something like 281 # foo.o: sub/foo.c 282 # foo.o: sub/foo.h 283 # which is wrong. We want: 284 # sub/foo.o: sub/foo.c 285 # sub/foo.o: sub/foo.h 286 # sub/foo.c: 287 # sub/foo.h: 288 # ICC 7.1 will output 369 289 # foo.o: sub/foo.c sub/foo.h 370 # and will wrap long lines using '\':290 # and will wrap long lines using \ : 371 291 # foo.o: sub/foo.c ... \ 372 292 # sub/foo.h ... \ 373 293 # ... 374 set_dir_from "$object" 375 # Use the source, not the object, to determine the base name, since 376 # that's sadly what pgcc will do too. 377 set_base_from "$source" 378 tmpdepfile=$base.d 379 380 # For projects that build the same source file twice into different object 381 # files, the pgcc approach of using the *source* file root name can cause 382 # problems in parallel builds. Use a locking strategy to avoid stomping on 383 # the same $tmpdepfile. 384 lockdir=$base.d-lock 385 trap " 386 echo '$0: caught signal, cleaning up...' >&2 387 rmdir '$lockdir' 388 exit 1 389 " 1 2 13 15 390 numtries=100 391 i=$numtries 392 while test $i -gt 0; do 393 # mkdir is a portable test-and-set. 394 if mkdir "$lockdir" 2>/dev/null; then 395 # This process acquired the lock. 396 "$@" -MD 397 stat=$? 398 # Release the lock. 399 rmdir "$lockdir" 400 break 401 else 402 # If the lock is being held by a different process, wait 403 # until the winning process is done or we timeout. 404 while test -d "$lockdir" && test $i -gt 0; do 405 sleep 1 406 i=`expr $i - 1` 407 done 408 fi 409 i=`expr $i - 1` 410 done 411 trap - 1 2 13 15 412 if test $i -le 0; then 413 echo "$0: failed to acquire lock after $numtries attempts" >&2 414 echo "$0: check lockdir '$lockdir'" >&2 415 exit 1 416 fi 417 418 if test $stat -ne 0; then 294 295 "$@" -MD -MF "$tmpdepfile" 296 stat=$? 297 if test $stat -eq 0; then : 298 else 419 299 rm -f "$tmpdepfile" 420 300 exit $stat … … 428 308 # Some versions of the HPUX 10.20 sed can't process this invocation 429 309 # correctly. Breaking it into two sed invocations is a workaround. 430 sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \431 |sed -e 's/$/ :/' >> "$depfile"310 sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311 sed -e 's/$/ :/' >> "$depfile" 432 312 rm -f "$tmpdepfile" 433 313 ;; … … 440 320 # happens to be. 441 321 # Much of this is similar to the tru64 case; see comments there. 442 set_dir_from "$object" 443 set_base_from "$object" 322 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 323 test "x$dir" = "x$object" && dir= 324 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 444 325 if test "$libtool" = yes; then 445 326 tmpdepfile1=$dir$base.d … … 452 333 fi 453 334 stat=$? 454 if test $stat -ne 0; then 335 if test $stat -eq 0; then : 336 else 455 337 rm -f "$tmpdepfile1" "$tmpdepfile2" 456 338 exit $stat … … 462 344 done 463 345 if test -f "$tmpdepfile"; then 464 sed -e "s,^.*\.[ $lower]*:,$object:," "$tmpdepfile" > "$depfile"465 # Add 'dependent.h:' lines.346 sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 347 # Add `dependent.h:' lines. 466 348 sed -ne '2,${ 467 s/^ *//468 s/ \\*$//469 s/$/:/470 p471 }' "$tmpdepfile" >> "$depfile"472 else 473 make_dummy_depfile349 s/^ *// 350 s/ \\*$// 351 s/$/:/ 352 p 353 }' "$tmpdepfile" >> "$depfile" 354 else 355 echo "#dummy" > "$depfile" 474 356 fi 475 357 rm -f "$tmpdepfile" "$tmpdepfile2" … … 477 359 478 360 tru64) 479 # The Tru64 compiler uses -MD to generate dependencies as a side 480 # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481 # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482 # dependencies in 'foo.d' instead, so we check for that too. 483 # Subdirectories are respected. 484 set_dir_from "$object" 485 set_base_from "$object" 486 487 if test "$libtool" = yes; then 488 # Libtool generates 2 separate objects for the 2 libraries. These 489 # two compilations output dependencies in $dir.libs/$base.o.d and 490 # in $dir$base.o.d. We have to check for both files, because 491 # one of the two compilations can be disabled. We should prefer 492 # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493 # automatically cleaned when .libs/ is deleted, while ignoring 494 # the former would cause a distcleancheck panic. 495 tmpdepfile1=$dir$base.o.d # libtool 1.5 496 tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497 tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498 "$@" -Wc,-MD 499 else 500 tmpdepfile1=$dir$base.d 501 tmpdepfile2=$dir$base.d 502 tmpdepfile3=$dir$base.d 503 "$@" -MD 504 fi 505 506 stat=$? 507 if test $stat -ne 0; then 508 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509 exit $stat 510 fi 511 512 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513 do 514 test -f "$tmpdepfile" && break 515 done 516 # Same post-processing that is required for AIX mode. 517 aix_post_process_depfile 518 ;; 361 # The Tru64 compiler uses -MD to generate dependencies as a side 362 # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363 # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364 # dependencies in `foo.d' instead, so we check for that too. 365 # Subdirectories are respected. 366 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367 test "x$dir" = "x$object" && dir= 368 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369 370 if test "$libtool" = yes; then 371 # With Tru64 cc, shared objects can also be used to make a 372 # static library. This mechanism is used in libtool 1.4 series to 373 # handle both shared and static libraries in a single compilation. 374 # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375 # 376 # With libtool 1.5 this exception was removed, and libtool now 377 # generates 2 separate objects for the 2 libraries. These two 378 # compilations output dependencies in $dir.libs/$base.o.d and 379 # in $dir$base.o.d. We have to check for both files, because 380 # one of the two compilations can be disabled. We should prefer 381 # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382 # automatically cleaned when .libs/ is deleted, while ignoring 383 # the former would cause a distcleancheck panic. 384 tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385 tmpdepfile2=$dir$base.o.d # libtool 1.5 386 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388 "$@" -Wc,-MD 389 else 390 tmpdepfile1=$dir$base.o.d 391 tmpdepfile2=$dir$base.d 392 tmpdepfile3=$dir$base.d 393 tmpdepfile4=$dir$base.d 394 "$@" -MD 395 fi 396 397 stat=$? 398 if test $stat -eq 0; then : 399 else 400 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401 exit $stat 402 fi 403 404 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405 do 406 test -f "$tmpdepfile" && break 407 done 408 if test -f "$tmpdepfile"; then 409 sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410 # That's a tab and a space in the []. 411 sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412 else 413 echo "#dummy" > "$depfile" 414 fi 415 rm -f "$tmpdepfile" 416 ;; 519 417 520 418 msvc7) … … 527 425 stat=$? 528 426 grep -v '^Note: including file: ' "$tmpdepfile" 529 if test $stat -ne 0; then 427 if test "$stat" = 0; then : 428 else 530 429 rm -f "$tmpdepfile" 531 430 exit $stat … … 545 444 }' | $cygpath_u | sort -u | sed -n ' 546 445 s/ /\\ /g 547 s/\(.*\)/ '"$tab"'\1 \\/p446 s/\(.*\)/ \1 \\/p 548 447 s/.\(.*\) \\/\1:/ 549 448 H 550 449 $ { 551 s/.*/ '"$tab"'/450 s/.*/ / 552 451 G 553 452 p 554 453 }' >> "$depfile" 555 echo >> "$depfile" # make sure the fragment doesn't end with a backslash556 454 rm -f "$tmpdepfile" 557 455 ;; … … 581 479 fi 582 480 583 # Remove '-o $object'.481 # Remove `-o $object'. 584 482 IFS=" " 585 483 for arg … … 601 499 602 500 test -z "$dashmflag" && dashmflag=-M 603 # Require at least two characters before searching for ':'501 # Require at least two characters before searching for `:' 604 502 # in the target name. This is to cope with DOS-style filenames: 605 # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.503 # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 606 504 "$@" $dashmflag | 607 sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |"> "$tmpdepfile"505 sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 608 506 rm -f "$depfile" 609 507 cat < "$tmpdepfile" > "$depfile" 610 # Some versions of the HPUX 10.20 sed can't process this sed invocation611 # correctly. Breaking it into two sed invocations is a workaround. 612 tr ' ' "$nl" < "$tmpdepfile" \ 613 | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614 | sed -e 's/$/ :/' >> "$depfile"508 tr ' ' ' 509 ' < "$tmpdepfile" | \ 510 ## Some versions of the HPUX 10.20 sed can't process this invocation 511 ## correctly. Breaking it into two sed invocations is a workaround. 512 sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 615 513 rm -f "$tmpdepfile" 616 514 ;; … … 665 563 # No need to regex-escape $object, excess matching of '.' is harmless. 666 564 sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667 # Some versions of the HPUX 10.20 sed can't process the last invocation 668 # correctly. Breaking it into two sed invocations is a workaround. 669 sed '1,2d' "$tmpdepfile" \ 670 | tr ' ' "$nl" \ 671 | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672 | sed -e 's/$/ :/' >> "$depfile" 565 sed '1,2d' "$tmpdepfile" | tr ' ' ' 566 ' | \ 567 ## Some versions of the HPUX 10.20 sed can't process this invocation 568 ## correctly. Breaking it into two sed invocations is a workaround. 569 sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 673 570 rm -f "$tmpdepfile" "$tmpdepfile".bak 674 571 ;; … … 687 584 fi 688 585 689 # Remove '-o $object'.586 # Remove `-o $object'. 690 587 IFS=" " 691 588 for arg … … 706 603 done 707 604 708 "$@" -E \709 |sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \710 -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \711 |sed '$ s: \\$::' > "$tmpdepfile"605 "$@" -E | 606 sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607 -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608 sed '$ s: \\$::' > "$tmpdepfile" 712 609 rm -f "$depfile" 713 610 echo "$object : \\" > "$depfile" … … 741 638 ;; 742 639 "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743 set fnord "$@"744 shift745 shift746 ;;640 set fnord "$@" 641 shift 642 shift 643 ;; 747 644 *) 748 set fnord "$@" "$arg"749 shift750 shift751 ;;645 set fnord "$@" "$arg" 646 shift 647 shift 648 ;; 752 649 esac 753 650 done … … 756 653 rm -f "$depfile" 757 654 echo "$object : \\" > "$depfile" 758 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: '"$tab"'\1 \\:p' >> "$depfile"759 echo " $tab" >> "$depfile"655 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656 echo " " >> "$depfile" 760 657 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761 658 rm -f "$tmpdepfile"
Note:
See TracChangeset
for help on using the changeset viewer.