Home | History | Annotate | Download | only in features
      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