Home | History | Annotate | Download | only in features
      1 #                                                                    -*-perl-*-
      2 $description = "Test handling of static pattern rules.";
      3 
      4 $details = "\
      5 The makefile created in this test has three targets.  The
      6 filter command is used to get those target names ending in
      7 .o and statically creates a compile command with the target
      8 name and the target name with .c.  It also does the same thing
      9 for another target filtered with .elc and creates a command
     10 to emacs a .el file";
     11 
     12 &touch('bar.c', 'lose.c');
     13 
     14 #   TEST #0
     15 #   -------
     16 
     17 run_make_test('
     18 files = foo.elc bar.o lose.o
     19 
     20 $(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@
     21 
     22 $(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $<
     23 ',
     24               '',
     25               'CC -c bar.c -o bar.o');
     26 
     27 #  TEST #1
     28 #  -------
     29 
     30 run_make_test(undef, 'lose.o', 'CC -c lose.c -o lose.o');
     31 
     32 
     33 #   TEST #2
     34 #   -------
     35 &touch("foo.el");
     36 
     37 run_make_test(undef, 'foo.elc', 'emacs foo.el');
     38 
     39 # Clean up after the first tests.
     40 unlink('foo.el', 'bar.c', 'lose.c');
     41 
     42 
     43 # TEST #3 -- PR/1670: don't core dump on invalid static pattern rules
     44 # -------
     45 
     46 run_make_test('
     47 .DEFAULT: ; @echo $@
     48 foo: foo%: % %.x % % % y.% % ; @echo $@
     49 ',
     50               '', ".x\ny.\nfoo");
     51 
     52 
     53 # TEST #4 -- bug #12180: core dump on a stat pattern rule with an empty
     54 #                        prerequisite list.
     55 run_make_test('
     56 foo.x bar.x: %.x : ; @echo $@
     57 
     58 ',
     59               '', 'foo.x');
     60 
     61 
     62 # TEST #5 -- bug #13881: double colon static pattern rule does not
     63 #                        substitute %.
     64 run_make_test('
     65 foo.bar:: %.bar: %.baz
     66 foo.baz: ;@:
     67 ',
     68               '', '');
     69 
     70 
     71 # TEST #6: make sure the second stem does not overwrite the first
     72 #          perprerequisite's stem (Savannah bug #16053).
     73 #
     74 run_make_test('
     75 all.foo.bar: %.foo.bar: %.one
     76 
     77 all.foo.bar: %.bar: %.two
     78 
     79 all.foo.bar:
     80 	@echo $*
     81 	@echo $^
     82 
     83 .DEFAULT:;@:
     84 ',
     85 '',
     86 'all.foo
     87 all.one all.foo.two');
     88 
     89 
     90 # TEST #7: make sure the second stem does not overwrite the first
     91 #          perprerequisite's stem when second expansion is enabled
     92 #          (Savannah bug #16053).
     93 #
     94 run_make_test('
     95 .SECONDEXPANSION:
     96 
     97 all.foo.bar: %.foo.bar: %.one $$*-one
     98 
     99 all.foo.bar: %.bar: %.two $$*-two
    100 
    101 all.foo.bar:
    102 	@echo $*
    103 	@echo $^
    104 
    105 .DEFAULT:;@:
    106 ',
    107 '',
    108 'all.foo
    109 all.one all-one all.foo.two all.foo-two');
    110 
    111 1;
    112