Home | History | Annotate | Download | only in features
      1 #                                                                    -*-perl-*-
      2 $description = "Test second expansion in ordinary rules.";
      3 
      4 $details = "";
      5 
      6 use Cwd;
      7 
      8 $dir = cwd;
      9 $dir =~ s,.*/([^/]+)$,../$1,;
     10 
     11 
     12 # Test #1: automatic variables.
     13 #
     14 run_make_test('
     15 .SECONDEXPANSION:
     16 .DEFAULT: ; @echo $@
     17 
     18 foo.a: bar baz
     19 
     20 foo.a: biz | buz
     21 
     22 foo.%: 1.$$@ \
     23        2.$$< \
     24        $$(addprefix 3.,$$^) \
     25        $$(addprefix 4.,$$+) \
     26        5.$$| \
     27        6.$$*
     28 	@:
     29 
     30 1.foo.a \
     31 2.bar \
     32 3.bar \
     33 3.baz \
     34 3.biz \
     35 4.bar \
     36 4.baz \
     37 4.biz \
     38 5.buz \
     39 6.a:
     40 	@echo $@
     41 
     42 ',
     43 '',
     44 '1.foo.a
     45 2.bar
     46 3.bar
     47 3.baz
     48 3.biz
     49 4.bar
     50 4.baz
     51 4.biz
     52 5.buz
     53 6.a
     54 bar
     55 baz
     56 biz
     57 buz
     58 ');
     59 
     60 
     61 # Test #2: target/pattern -specific variables.
     62 #
     63 run_make_test('
     64 .SECONDEXPANSION:
     65 foo.x:
     66 
     67 foo.%: $$(%_a) $$(%_b) bar
     68 	@:
     69 
     70 foo.x: x_a := bar
     71 
     72 %.x: x_b := baz
     73 
     74 bar baz: ; @echo $@
     75 
     76 ',
     77 '',
     78 'bar
     79 baz
     80 ');
     81 
     82 
     83 # Test #3: order of prerequisites.
     84 #
     85 run_make_test('
     86 .SECONDEXPANSION:
     87 .DEFAULT: ; @echo $@
     88 
     89 all: foo bar baz
     90 
     91 
     92 # Subtest #1
     93 #
     94 %oo: %oo.1; @:
     95 
     96 foo: foo.2
     97 
     98 foo: foo.3
     99 
    100 foo.1: ; @echo $@
    101 
    102 
    103 # Subtest #2
    104 #
    105 bar: bar.2
    106 
    107 %ar: %ar.1; @:
    108 
    109 bar: bar.3
    110 
    111 bar.1: ; @echo $@
    112 
    113 
    114 # Subtest #3
    115 #
    116 baz: baz.1
    117 
    118 baz: baz.2
    119 
    120 %az: ; @:
    121 
    122 ',
    123 '',
    124 'foo.1
    125 foo.2
    126 foo.3
    127 bar.1
    128 bar.2
    129 bar.3
    130 baz.1
    131 baz.2
    132 ');
    133 
    134 
    135 # Test #4: stem splitting logic.
    136 #
    137 run_make_test('
    138 .SECONDEXPANSION:
    139 $(dir)/tmp/bar.o:
    140 
    141 $(dir)/tmp/foo/bar.c: ; @echo $@
    142 $(dir)/tmp/bar/bar.c: ; @echo $@
    143 foo.h: ; @echo $@
    144 
    145 %.o: $$(addsuffix /%.c,foo bar) foo.h
    146 	@echo $@: {$<} $^
    147 
    148 ',
    149 "dir=$dir",
    150 "$dir/tmp/foo/bar.c
    151 $dir/tmp/bar/bar.c
    152 foo.h
    153 $dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h
    154 ");
    155 
    156 
    157 # Test #5: stem splitting logic and order-only prerequisites.
    158 #
    159 run_make_test('
    160 .SECONDEXPANSION:
    161 $(dir)/tmp/foo.o: $(dir)/tmp/foo.c
    162 $(dir)/tmp/foo.c: ; @echo $@
    163 bar.h: ; @echo $@
    164 
    165 %.o: %.c|bar.h
    166 	@echo $@: {$<} {$|} $^
    167 
    168 ',
    169 "dir=$dir",
    170 "$dir/tmp/foo.c
    171 bar.h
    172 $dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c
    173 ");
    174 
    175 
    176 # Test #6: lack of implicit prerequisites.
    177 #
    178 run_make_test('
    179 .SECONDEXPANSION:
    180 foo.o: foo.c
    181 foo.c: ; @echo $@
    182 
    183 %.o:
    184 	@echo $@: {$<} $^
    185 
    186 ',
    187 '',
    188 'foo.c
    189 foo.o: {foo.c} foo.c
    190 ');
    191 
    192 # Test #7: Test stem from the middle of the name.
    193 #
    194 run_make_test('
    195 .SECONDEXPANSION:
    196 foobarbaz:
    197 
    198 foo%baz: % $$*.1
    199 	@echo $*
    200 
    201 bar bar.1:
    202 	@echo $@
    203 
    204 ',
    205 '',
    206 'bar
    207 bar.1
    208 bar
    209 ');
    210 
    211 # Test #8: Make sure stem triple-expansion does not happen.
    212 #
    213 run_make_test('
    214 .SECONDEXPANSION:
    215 foo$$bar:
    216 
    217 f%r: % $$*.1
    218 	@echo \'$*\'
    219 
    220 oo$$ba oo$$ba.1:
    221 	@echo \'$@\'
    222 
    223 ',
    224 '',
    225 'oo$ba
    226 oo$ba.1
    227 oo$ba
    228 ');
    229 
    230 
    231 # This tells the test driver that the perl test script executed properly.
    232 1;
    233