| # -*-perl-*- |
| $description = "Test order-only prerequisites."; |
| |
| $details = "\ |
| Create makefiles with various combinations of normal and order-only |
| prerequisites and ensure they behave properly. Test the \$| variable."; |
| |
| # TEST #0 -- Basics |
| |
| run_make_test(' |
| %r: | baz ; @echo $< $^ $| |
| bar: foo |
| foo:;@: |
| baz:;@:', |
| '', "foo foo baz\n"); |
| |
| # TEST #1 -- First try: the order-only prereqs need to be built. |
| |
| run_make_test(q! |
| foo: bar | baz |
| @echo '$$^ = $^' |
| @echo '$$| = $|' |
| touch $@ |
| |
| .PHONY: baz |
| |
| bar baz: |
| touch $@!, |
| '', "touch bar\ntouch baz\n\$^ = bar\n\$| = baz\ntouch foo\n"); |
| |
| |
| # TEST #2 -- now we do it again: baz is PHONY but foo should _NOT_ be updated |
| |
| run_make_test(undef, '', "touch baz\n"); |
| |
| unlink(qw(foo bar baz)); |
| |
| # TEST #3 -- Make sure the order-only prereq was promoted to normal. |
| |
| run_make_test(q! |
| foo: bar | baz |
| @echo '$$^ = $^' |
| @echo '$$| = $|' |
| touch $@ |
| |
| foo: baz |
| |
| .PHONY: baz |
| |
| bar baz: |
| touch $@!, |
| '', "touch bar\ntouch baz\n\$^ = bar baz\n\$| = \ntouch foo\n"); |
| |
| |
| # TEST #4 -- now we do it again |
| |
| run_make_test(undef, '', "touch baz\n\$^ = bar baz\n\$| = \ntouch foo\n"); |
| |
| unlink(qw(foo bar baz)); |
| |
| # Test empty normal prereqs |
| |
| # TEST #5 -- make sure the parser was correct. |
| |
| run_make_test(q! |
| foo:| baz |
| @echo '$$^ = $^' |
| @echo '$$| = $|' |
| touch $@ |
| |
| .PHONY: baz |
| |
| baz: |
| touch $@!, |
| '', "touch baz\n\$^ = \n\$| = baz\ntouch foo\n"); |
| |
| # TEST #6 -- now we do it again: this time foo won't be built |
| |
| run_make_test(undef, '', "touch baz\n"); |
| |
| unlink(qw(foo baz)); |
| |
| # Test order-only in pattern rules |
| |
| # TEST #7 -- make sure the parser was correct. |
| |
| run_make_test(q! |
| %.w : %.x | baz |
| @echo '$$^ = $^' |
| @echo '$$| = $|' |
| touch $@ |
| |
| all: foo.w |
| |
| .PHONY: baz |
| foo.x baz: |
| touch $@!, |
| '', |
| "touch foo.x\ntouch baz\n\$^ = foo.x\n\$| = baz\ntouch foo.w\n"); |
| |
| # TEST #8 -- now we do it again: this time foo.w won't be built |
| |
| run_make_test(undef, '', "touch baz\n"); |
| |
| unlink(qw(foo.w foo.x baz)); |
| |
| # TEST #9 -- make sure that $< is set correctly in the face of order-only |
| # prerequisites in pattern rules. |
| |
| run_make_test(' |
| %r: | baz ; @echo $< $^ $| |
| bar: foo |
| foo:;@: |
| baz:;@:', |
| '', "foo foo baz\n"); |
| |
| |
| 1; |