3876966aec57917dbe215884646bd8a8cb4696ba
[platform/upstream/make.git] / tests / scripts / targets / ONESHELL
1 #                                                                    -*-perl-*-
2
3 $description = "Test the behaviour of the .ONESHELL target.";
4
5 $details = "";
6
7 my $multi_ok = 0;
8
9 if ($port_type ne 'W32') {
10     # Some shells (*shakes fist at Solaris*) cannot handle multiple flags in
11     # separate arguments.
12     my $t = `$sh_name -e -c true 2>/dev/null`;
13     my $multi_ok = $? == 0;
14 }
15
16 # Simple
17
18 run_make_test(q!
19 .ONESHELL:
20 all:
21         a=$$$$
22         [ 0"$$a" -eq "$$$$" ] || echo fail
23 !,
24               '', 'a=$$
25 [ 0"$a" -eq "$$" ] || echo fail
26 ');
27
28 # Simple but use multi-word SHELLFLAGS
29
30 if ($multi_ok) {
31     run_make_test(q!
32 .ONESHELL:
33 .SHELLFLAGS = -e -c
34 all:
35         a=$$$$
36         [ 0"$$a" -eq "$$$$" ] || echo fail
37 !,
38               '', 'a=$$
39 [ 0"$a" -eq "$$" ] || echo fail
40 ');
41 }
42
43 # Again, but this time with inner prefix chars
44
45 run_make_test(q!
46 .ONESHELL:
47 all:
48         a=$$$$
49         @-+    [ 0"$$a" -eq "$$$$" ] || echo fail
50 !,
51               '', 'a=$$
52 [ 0"$a" -eq "$$" ] || echo fail
53 ');
54
55 # This time with outer prefix chars
56
57 run_make_test(q!
58 .ONESHELL:
59 all:
60            @a=$$$$
61             [ 0"$$a" -eq "$$$$" ] || echo fail
62 !,
63               '', '');
64
65
66 # This time with outer and inner prefix chars
67
68 run_make_test(q!
69 .ONESHELL:
70 all:
71            @a=$$$$
72             -@     +[ 0"$$a" -eq "$$$$" ] || echo fail
73 !,
74               '', '');
75
76
77 # Now try using a different interpreter
78 # This doesn't work on Windows right now
79 if ($port_type ne 'W32') {
80     run_make_test(q!
81 .RECIPEPREFIX = >
82 .ONESHELL:
83 SHELL = #PERL#
84 .SHELLFLAGS = -e
85 all:
86 >          @$$a=5
87 >           +7;
88 >       @y=qw(a b c);
89 >print "a = $$a, y = (@y)\n";
90 !,
91                   '', "a = 12, y = (a b c)\n");
92 }
93
94 1;