summaryrefslogtreecommitdiff
path: root/tests/scripts/features/statipattrules
blob: 7d35ec3aaac660ebaf0da69f3fa105c7fc5f6f0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#                                                                    -*-perl-*-
$description = "Test handling of static pattern rules.";

$details = "\
The makefile created in this test has three targets.  The
filter command is used to get those target names ending in
.o and statically creates a compile command with the target
name and the target name with .c.  It also does the same thing
for another target filtered with .elc and creates a command
to emacs a .el file";

open(MAKEFILE,"> $makefile");
print MAKEFILE <<'EOF';
files = foo.elc bar.o lose.o

$(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@

$(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $<
EOF
close(MAKEFILE);


&touch('bar.c', 'lose.c');

#   TEST #1
#   -------

&run_make_with_options($makefile, '', &get_logfile);
$answer = "CC -c bar.c -o bar.o\n";
&compare_output($answer, &get_logfile(1));


#  TEST #2
#  -------

&run_make_with_options($makefile, 'lose.o', &get_logfile);
$answer = "CC -c lose.c -o lose.o\n";
&compare_output($answer, &get_logfile(1));


#   TEST #3
#   -------
&touch("foo.el");

&run_make_with_options($makefile, 'foo.elc', &get_logfile);
$answer = "emacs foo.el\n";
&compare_output($answer, &get_logfile(1));


unlink('foo.el', 'bar.c', 'lose.c');


# TEST #4 -- PR/1670: don't core dump on invalid static pattern rules
# -------

$makefile2 = &get_tmpfile;
open(MAKEFILE, "> $makefile2");
print MAKEFILE "foo: foo%: % ; \@echo $@\n";
close(MAKEFILE);

&run_make_with_options($makefile2, '', &get_logfile, 512);
$answer = "$makefile2:1: *** target `foo' leaves prerequisite pattern empty.  Stop.\n";
&compare_output($answer, &get_logfile(1));

# TEST #5 -- bug #12180: core dump on a stat pattern rule with an empty
#                        prerequisite list.
#
run_make_test('
foo.x bar.x: %.x : ; @echo $@

',
'',
'foo.x
');

1;