| 1 | # -*-perl-*-
|
|---|
| 2 | $description = "Test pattern-specific variable settings.";
|
|---|
| 3 |
|
|---|
| 4 | $details = "\
|
|---|
| 5 | Create a makefile containing various flavors of pattern-specific variable
|
|---|
| 6 | settings, override and non-override, and using various variable expansion
|
|---|
| 7 | rules, semicolon interference, etc.";
|
|---|
| 8 |
|
|---|
| 9 | open(MAKEFILE,"> $makefile");
|
|---|
| 10 |
|
|---|
| 11 | print MAKEFILE <<'EOF';
|
|---|
| 12 | all: one.x two.x three.x
|
|---|
| 13 | FOO = foo
|
|---|
| 14 | BAR = bar
|
|---|
| 15 | BAZ = baz
|
|---|
| 16 | one.x: override FOO = one
|
|---|
| 17 | %.x: BAR = two
|
|---|
| 18 | t%.x: BAR = four
|
|---|
| 19 | thr% : override BAZ = three
|
|---|
| 20 | one.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ)
|
|---|
| 21 | four.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ)
|
|---|
| 22 | baz: ; @echo $@: $(FOO) $(BAR) $(BAZ)
|
|---|
| 23 |
|
|---|
| 24 | # test matching multiple patterns
|
|---|
| 25 | a%: AAA = aaa
|
|---|
| 26 | %b: BBB = ccc
|
|---|
| 27 | a%: BBB += ddd
|
|---|
| 28 | %b: AAA ?= xxx
|
|---|
| 29 | %b: AAA += bbb
|
|---|
| 30 | .PHONY: ab
|
|---|
| 31 | ab: ; @echo $(AAA); echo $(BBB)
|
|---|
| 32 | EOF
|
|---|
| 33 |
|
|---|
| 34 | close(MAKEFILE);
|
|---|
| 35 |
|
|---|
| 36 |
|
|---|
| 37 | # TEST #1 -- basics
|
|---|
| 38 |
|
|---|
| 39 | &run_make_with_options($makefile, "", &get_logfile);
|
|---|
| 40 | $answer = "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n";
|
|---|
| 41 | &compare_output($answer,&get_logfile(1));
|
|---|
| 42 |
|
|---|
| 43 |
|
|---|
| 44 | # TEST #2 -- try the override feature
|
|---|
| 45 |
|
|---|
| 46 | &run_make_with_options($makefile, "BAZ=five", &get_logfile);
|
|---|
| 47 | $answer = "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n";
|
|---|
| 48 | &compare_output($answer,&get_logfile(1));
|
|---|
| 49 |
|
|---|
| 50 |
|
|---|
| 51 | # TEST #3 -- make sure patterns are inherited properly
|
|---|
| 52 |
|
|---|
| 53 | &run_make_with_options($makefile, "four.x", &get_logfile);
|
|---|
| 54 | $answer = "baz: foo two baz\nfour.x: foo two baz\n";
|
|---|
| 55 | &compare_output($answer,&get_logfile(1));
|
|---|
| 56 |
|
|---|
| 57 |
|
|---|
| 58 | # TEST #4 -- test multiple patterns matching the same target
|
|---|
| 59 |
|
|---|
| 60 | &run_make_with_options($makefile, "ab", &get_logfile);
|
|---|
| 61 | $answer = "aaa bbb\nccc ddd\n";
|
|---|
| 62 | &compare_output($answer,&get_logfile(1));
|
|---|
| 63 |
|
|---|
| 64 | 1;
|
|---|