| 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, "-j1", &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, "-j1 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, "-j1 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, "-j1 ab", &get_logfile);
|
|---|
| 61 | $answer = "aaa bbb\nccc ddd\n";
|
|---|
| 62 | &compare_output($answer,&get_logfile(1));
|
|---|
| 63 |
|
|---|
| 64 | # TEST #5 -- test pattern-specific exported variables
|
|---|
| 65 | #
|
|---|
| 66 | run_make_test('
|
|---|
| 67 | /%: export foo := foo
|
|---|
| 68 |
|
|---|
| 69 | /bar:
|
|---|
| 70 | @echo $(foo) $$foo
|
|---|
| 71 | ', '-j1', 'foo foo');
|
|---|
| 72 |
|
|---|
| 73 |
|
|---|
| 74 | # TEST #6 -- test expansion of pattern-specific simple variables
|
|---|
| 75 | #
|
|---|
| 76 | run_make_test('
|
|---|
| 77 | .PHONY: all
|
|---|
| 78 |
|
|---|
| 79 | all: inherit := good $$t
|
|---|
| 80 | all: bar baz
|
|---|
| 81 |
|
|---|
| 82 | b%: pattern := good $$t
|
|---|
| 83 |
|
|---|
| 84 | global := orginal $$t
|
|---|
| 85 |
|
|---|
| 86 |
|
|---|
| 87 | # normal target
|
|---|
| 88 | #
|
|---|
| 89 | ifdef rec
|
|---|
| 90 | bar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|---|
| 91 | else
|
|---|
| 92 | bar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|---|
| 93 | endif
|
|---|
| 94 |
|
|---|
| 95 | bar: ; @echo \'normal: $a;\'
|
|---|
| 96 |
|
|---|
| 97 |
|
|---|
| 98 | # pattern target
|
|---|
| 99 | #
|
|---|
| 100 | ifdef rec
|
|---|
| 101 | %z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|---|
| 102 | else
|
|---|
| 103 | %z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|---|
| 104 | endif
|
|---|
| 105 |
|
|---|
| 106 | %z: ; @echo \'pattrn: $a;\'
|
|---|
| 107 |
|
|---|
| 108 |
|
|---|
| 109 | global := new $$t
|
|---|
| 110 | ',
|
|---|
| 111 | '-j1',
|
|---|
| 112 | 'normal: global: orginal $t pattern: inherit: ;
|
|---|
| 113 | pattrn: global: orginal $t pattern: inherit: ;');
|
|---|
| 114 |
|
|---|
| 115 |
|
|---|
| 116 | # TEST #7 -- test expansion of pattern-specific recursive variables
|
|---|
| 117 | #
|
|---|
| 118 | run_make_test(undef, # reuse previous makefile
|
|---|
| 119 | '-j1 rec=1',
|
|---|
| 120 | 'normal: global: new $t pattern: good $t inherit: good $t;
|
|---|
| 121 | pattrn: global: new $t pattern: good $t inherit: good $t;');
|
|---|
| 122 |
|
|---|
| 123 | # TEST #8: override in pattern-specific variables
|
|---|
| 124 |
|
|---|
| 125 | run_make_test('
|
|---|
| 126 | a%: override FOO += f1
|
|---|
| 127 | a%: FOO += f2
|
|---|
| 128 | ab: ; @echo "$(FOO)"
|
|---|
| 129 | ',
|
|---|
| 130 | '', "f1\n");
|
|---|
| 131 |
|
|---|
| 132 | run_make_test(undef, 'FOO=C', "C f1\n");
|
|---|
| 133 |
|
|---|
| 134 | # TEST #9: Test shortest stem selection in pattern-specific variables.
|
|---|
| 135 |
|
|---|
| 136 | run_make_test('
|
|---|
| 137 | %-mt.x: x := two
|
|---|
| 138 | %.x: x := one
|
|---|
| 139 |
|
|---|
| 140 | all: foo.x foo-mt.x
|
|---|
| 141 |
|
|---|
| 142 | foo.x: ;@echo $x
|
|---|
| 143 | foo-mt.x: ;@echo $x
|
|---|
| 144 | ',
|
|---|
| 145 | '',
|
|---|
| 146 | "one\ntwo");
|
|---|
| 147 |
|
|---|
| 148 | 1;
|
|---|