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