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 # TEST #5 -- test pattern-specific exported variables 65 # 66 run_make_test(' 67 /%: export foo := foo 68 69 /bar: 70 @echo $(foo) $$foo 71 ', '', '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 '', 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 '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 124 1; 125