Home | History | Annotate | Line # | Download | only in misc
      1  1.1  christos #                                                                    -*-perl-*-
      2  1.1  christos 
      3  1.1  christos $description = "\
      4  1.1  christos This tests random features of the parser that need to be supported, and
      5  1.1  christos which have either broken at some point in the past or seem likely to
      6  1.1  christos break.";
      7  1.1  christos 
      8  1.1  christos run_make_test("
      9  1.1  christos # We want to allow both empty commands _and_ commands that resolve to empty.
     10  1.1  christos EMPTY =
     11  1.1  christos 
     12  1.1  christos .PHONY: all a1 a2 a3 a4
     13  1.1  christos all: a1 a2 a3 a4
     14  1.1  christos 
     15  1.1  christos a1:;
     16  1.1  christos a2:
     17  1.1  christos \t
     18  1.1  christos a3:;\$(EMPTY)
     19  1.1  christos a4:
     20  1.1  christos \t\$(EMPTY)
     21  1.1  christos 
     22  1.1  christos \# Non-empty lines that expand to nothing should also be ignored.
     23  1.1  christos STR =     \# Some spaces
     24  1.1  christos TAB =   \t  \# A TAB and some spaces
     25  1.1  christos 
     26  1.1  christos \$(STR)
     27  1.1  christos 
     28  1.1  christos \$(STR) \$(TAB)",
     29  1.1  christos               '', "#MAKE#: Nothing to be done for `all'.");
     30  1.1  christos 
     31  1.1  christos # TEST 2
     32  1.1  christos 
     33  1.1  christos # Make sure files without trailing newlines are handled properly.
     34  1.1  christos # Have to use the old style invocation to test this.
     35  1.1  christos 
     36  1.1  christos $makefile2 = &get_tmpfile;
     37  1.1  christos 
     38  1.1  christos open(MAKEFILE, "> $makefile2");
     39  1.1  christos print MAKEFILE "all:;\@echo FOO = \$(FOO)\nFOO = foo";
     40  1.1  christos close(MAKEFILE);
     41  1.1  christos 
     42  1.1  christos &run_make_with_options($makefile2,"",&get_logfile);
     43  1.1  christos $answer = "FOO = foo\n";
     44  1.1  christos &compare_output($answer,&get_logfile(1));
     45  1.1  christos 
     46  1.1  christos # TEST 3
     47  1.1  christos 
     48  1.1  christos # Check semicolons in variable references
     49  1.1  christos 
     50  1.1  christos run_make_test('
     51  1.1  christos $(if true,$(info true; true))
     52  1.1  christos all: ; @:
     53  1.1  christos ',
     54  1.1  christos               '', 'true; true');
     55  1.1  christos 
     56  1.1  christos # TEST 4
     57  1.1  christos 
     58  1.1  christos # Check that backslashes in command scripts are handled according to POSIX.
     59  1.1  christos # Checks Savannah bug # 1332.
     60  1.1  christos 
     61  1.1  christos # Test the fastpath / no quotes
     62  1.1  christos run_make_test('
     63  1.1  christos all:
     64  1.1  christos 	@echo foo\
     65  1.1  christos bar
     66  1.1  christos 	@echo foo\
     67  1.1  christos 	bar
     68  1.1  christos 	@echo foo\
     69  1.1  christos     bar
     70  1.1  christos 	@echo foo\
     71  1.1  christos 	    bar
     72  1.1  christos 	@echo foo \
     73  1.1  christos bar
     74  1.1  christos 	@echo foo \
     75  1.1  christos 	bar
     76  1.1  christos 	@echo foo \
     77  1.1  christos     bar
     78  1.1  christos 	@echo foo \
     79  1.1  christos 	    bar
     80  1.1  christos ',
     81  1.1  christos               '', 'foobar
     82  1.1  christos foobar
     83  1.1  christos foo bar
     84  1.1  christos foo bar
     85  1.1  christos foo bar
     86  1.1  christos foo bar
     87  1.1  christos foo bar
     88  1.1  christos foo bar');
     89  1.1  christos 
     90  1.1  christos # Test the fastpath / single quotes
     91  1.1  christos run_make_test("
     92  1.1  christos all:
     93  1.1  christos 	\@echo 'foo\\
     94  1.1  christos bar'
     95  1.1  christos 	\@echo 'foo\\
     96  1.1  christos 	bar'
     97  1.1  christos 	\@echo 'foo\\
     98  1.1  christos     bar'
     99  1.1  christos 	\@echo 'foo\\
    100  1.1  christos 	    bar'
    101  1.1  christos 	\@echo 'foo \\
    102  1.1  christos bar'
    103  1.1  christos 	\@echo 'foo \\
    104  1.1  christos 	bar'
    105  1.1  christos 	\@echo 'foo \\
    106  1.1  christos     bar'
    107  1.1  christos 	\@echo 'foo \\
    108  1.1  christos 	    bar'
    109  1.1  christos ",
    110  1.1  christos               '', 'foo\
    111  1.1  christos bar
    112  1.1  christos foo\
    113  1.1  christos bar
    114  1.1  christos foo\
    115  1.1  christos     bar
    116  1.1  christos foo\
    117  1.1  christos     bar
    118  1.1  christos foo \
    119  1.1  christos bar
    120  1.1  christos foo \
    121  1.1  christos bar
    122  1.1  christos foo \
    123  1.1  christos     bar
    124  1.1  christos foo \
    125  1.1  christos     bar');
    126  1.1  christos 
    127  1.1  christos # Test the fastpath / double quotes
    128  1.1  christos run_make_test('
    129  1.1  christos all:
    130  1.1  christos 	@echo "foo\
    131  1.1  christos bar"
    132  1.1  christos 	@echo "foo\
    133  1.1  christos 	bar"
    134  1.1  christos 	@echo "foo\
    135  1.1  christos     bar"
    136  1.1  christos 	@echo "foo\
    137  1.1  christos 	    bar"
    138  1.1  christos 	@echo "foo \
    139  1.1  christos bar"
    140  1.1  christos 	@echo "foo \
    141  1.1  christos 	bar"
    142  1.1  christos 	@echo "foo \
    143  1.1  christos     bar"
    144  1.1  christos 	@echo "foo \
    145  1.1  christos 	    bar"
    146  1.1  christos ',
    147  1.1  christos               '', 'foobar
    148  1.1  christos foobar
    149  1.1  christos foo    bar
    150  1.1  christos foo    bar
    151  1.1  christos foo bar
    152  1.1  christos foo bar
    153  1.1  christos foo     bar
    154  1.1  christos foo     bar');
    155  1.1  christos 
    156  1.1  christos # Test the slow path / no quotes
    157  1.1  christos run_make_test('
    158  1.1  christos all:
    159  1.1  christos 	@echo hi; echo foo\
    160  1.1  christos bar
    161  1.1  christos 	@echo hi; echo foo\
    162  1.1  christos 	bar
    163  1.1  christos 	@echo hi; echo foo\
    164  1.1  christos  bar
    165  1.1  christos 	@echo hi; echo foo\
    166  1.1  christos 	 bar
    167  1.1  christos 	@echo hi; echo foo \
    168  1.1  christos bar
    169  1.1  christos 	@echo hi; echo foo \
    170  1.1  christos 	bar
    171  1.1  christos 	@echo hi; echo foo \
    172  1.1  christos  bar
    173  1.1  christos 	@echo hi; echo foo \
    174  1.1  christos 	 bar
    175  1.1  christos ',
    176  1.1  christos               '', 'hi
    177  1.1  christos foobar
    178  1.1  christos hi
    179  1.1  christos foobar
    180  1.1  christos hi
    181  1.1  christos foo bar
    182  1.1  christos hi
    183  1.1  christos foo bar
    184  1.1  christos hi
    185  1.1  christos foo bar
    186  1.1  christos hi
    187  1.1  christos foo bar
    188  1.1  christos hi
    189  1.1  christos foo bar
    190  1.1  christos hi
    191  1.1  christos foo bar');
    192  1.1  christos 
    193  1.1  christos # Test the slow path / no quotes.  This time we put the slow path
    194  1.1  christos # determination _after_ the backslash-newline handling.
    195  1.1  christos run_make_test('
    196  1.1  christos all:
    197  1.1  christos 	@echo foo\
    198  1.1  christos bar; echo hi
    199  1.1  christos 	@echo foo\
    200  1.1  christos 	bar; echo hi
    201  1.1  christos 	@echo foo\
    202  1.1  christos  bar; echo hi
    203  1.1  christos 	@echo foo\
    204  1.1  christos 	 bar; echo hi
    205  1.1  christos 	@echo foo \
    206  1.1  christos bar; echo hi
    207  1.1  christos 	@echo foo \
    208  1.1  christos 	bar; echo hi
    209  1.1  christos 	@echo foo \
    210  1.1  christos  bar; echo hi
    211  1.1  christos 	@echo foo \
    212  1.1  christos 	 bar; echo hi
    213  1.1  christos ',
    214  1.1  christos               '', 'foobar
    215  1.1  christos hi
    216  1.1  christos foobar
    217  1.1  christos hi
    218  1.1  christos foo bar
    219  1.1  christos hi
    220  1.1  christos foo bar
    221  1.1  christos hi
    222  1.1  christos foo bar
    223  1.1  christos hi
    224  1.1  christos foo bar
    225  1.1  christos hi
    226  1.1  christos foo bar
    227  1.1  christos hi
    228  1.1  christos foo bar
    229  1.1  christos hi');
    230  1.1  christos 
    231  1.1  christos # Test the slow path / single quotes
    232  1.1  christos run_make_test("
    233  1.1  christos all:
    234  1.1  christos 	\@echo hi; echo 'foo\\
    235  1.1  christos bar'
    236  1.1  christos 	\@echo hi; echo 'foo\\
    237  1.1  christos 	bar'
    238  1.1  christos 	\@echo hi; echo 'foo\\
    239  1.1  christos     bar'
    240  1.1  christos 	\@echo hi; echo 'foo\\
    241  1.1  christos 	    bar'
    242  1.1  christos 	\@echo hi; echo 'foo \\
    243  1.1  christos bar'
    244  1.1  christos 	\@echo hi; echo 'foo \\
    245  1.1  christos 	bar'
    246  1.1  christos 	\@echo hi; echo 'foo \\
    247  1.1  christos     bar'
    248  1.1  christos 	\@echo hi; echo 'foo \\
    249  1.1  christos 	    bar'
    250  1.1  christos ",
    251  1.1  christos               '', 'hi
    252  1.1  christos foo\
    253  1.1  christos bar
    254  1.1  christos hi
    255  1.1  christos foo\
    256  1.1  christos bar
    257  1.1  christos hi
    258  1.1  christos foo\
    259  1.1  christos     bar
    260  1.1  christos hi
    261  1.1  christos foo\
    262  1.1  christos     bar
    263  1.1  christos hi
    264  1.1  christos foo \
    265  1.1  christos bar
    266  1.1  christos hi
    267  1.1  christos foo \
    268  1.1  christos bar
    269  1.1  christos hi
    270  1.1  christos foo \
    271  1.1  christos     bar
    272  1.1  christos hi
    273  1.1  christos foo \
    274  1.1  christos     bar');
    275  1.1  christos 
    276  1.1  christos # Test the slow path / double quotes
    277  1.1  christos run_make_test('
    278  1.1  christos all:
    279  1.1  christos 	@echo hi; echo "foo\
    280  1.1  christos bar"
    281  1.1  christos 	@echo hi; echo "foo\
    282  1.1  christos 	bar"
    283  1.1  christos 	@echo hi; echo "foo\
    284  1.1  christos     bar"
    285  1.1  christos 	@echo hi; echo "foo\
    286  1.1  christos 	    bar"
    287  1.1  christos 	@echo hi; echo "foo \
    288  1.1  christos bar"
    289  1.1  christos 	@echo hi; echo "foo \
    290  1.1  christos 	bar"
    291  1.1  christos 	@echo hi; echo "foo \
    292  1.1  christos     bar"
    293  1.1  christos 	@echo hi; echo "foo \
    294  1.1  christos 	    bar"
    295  1.1  christos ',
    296  1.1  christos               '', 'hi
    297  1.1  christos foobar
    298  1.1  christos hi
    299  1.1  christos foobar
    300  1.1  christos hi
    301  1.1  christos foo    bar
    302  1.1  christos hi
    303  1.1  christos foo    bar
    304  1.1  christos hi
    305  1.1  christos foo bar
    306  1.1  christos hi
    307  1.1  christos foo bar
    308  1.1  christos hi
    309  1.1  christos foo     bar
    310  1.1  christos hi
    311  1.1  christos foo     bar');
    312  1.1  christos 
    313  1.1  christos 1;
    314