Home | History | Annotate | Download | only in misc
      1 #                                                                    -*-perl-*-
      2 
      3 $description = "\
      4 This tests random features of make's algorithms, often somewhat obscure,
      5 which have either broken at some point in the past or seem likely to
      6 break.";
      7 
      8 run_make_test('
      9 # Make sure that subdirectories built as prerequisites are actually handled
     10 # properly.
     11 
     12 all: dir/subdir/file.a
     13 
     14 dir/subdir: ; @echo mkdir -p dir/subdir
     15 
     16 dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b
     17 
     18 dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@',
     19               '', "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n");
     20 
     21 # Test implicit rules
     22 
     23 &touch('foo.c');
     24 run_make_test('foo: foo.o',
     25               'CC="@echo cc" OUTPUT_OPTION=',
     26               'cc -c foo.c
     27 cc foo.o -o foo');
     28 unlink('foo.c');
     29 
     30 
     31 # Test other implicit rule searching
     32 
     33 &touch('bar');
     34 run_make_test('
     35 test.foo:
     36 %.foo : baz ; @echo done $<
     37 %.foo : bar ; @echo done $<
     38 fox: baz
     39 ',
     40               '',
     41               'done bar');
     42 unlink('bar');
     43 
     44 
     45 # Test implicit rules with '$' in the name (see se_implicit)
     46 
     47 run_make_test(q!
     48 %.foo : baz$$bar ; @echo 'done $<'
     49 %.foo : bar$$baz ; @echo 'done $<'
     50 test.foo:
     51 baz$$bar bar$$baz: ; @echo '$@'
     52 !,
     53               '',
     54               "baz\$bar\ndone baz\$bar");
     55 
     56 
     57 # Test implicit rules with '$' in the name (see se_implicit)
     58 # Use the '$' in the pattern.
     59 
     60 run_make_test(q!
     61 %.foo : %$$bar ; @echo 'done $<'
     62 test.foo:
     63 test$$bar: ; @echo '$@'
     64 !,
     65               '',
     66               "test\$bar\ndone test\$bar");
     67 
     68 # Make sure that subdirectories built as prerequisites are actually handled
     69 # properly... this time with '$'
     70 
     71 run_make_test(q!
     72 
     73 all: dir/subdir/file.$$a
     74 
     75 dir/subdir: ; @echo mkdir -p '$@'
     76 
     77 dir/subdir/file.$$b: dir/subdir ; @echo touch '$@'
     78 
     79 dir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@'
     80 !,
     81               '', "mkdir -p dir/subdir\ntouch dir/subdir/file.\$b\ncp dir/subdir/file.\$b dir/subdir/file.\$a\n");
     82 
     83 1;
     84