summaryrefslogtreecommitdiff
path: root/tests/scripts/functions/file
blob: 55eb58a0e4ae8dad9495a997f9f2853da6a781e5 (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#                                                                    -*-perl-*-

$description = 'Test the $(file ...) function.';

# Test > and >>
run_make_test(q!
define A
a
b
endef
B = c d
$(file >file.out,$(A))
$(foreach L,$(B),$(file >>     file.out,$L))
x:;@echo hi; cat file.out
!,
              '', "hi\na\nb\nc\nd");

unlink('file.out');

# Test >> to a non-existent file
run_make_test(q!
define A
a
b
endef
$(file     >>     file.out,$(A))
x:;@cat file.out
!,
              '', "a\nb");

unlink('file.out');

# Test > with no content
run_make_test(q!
$(file >4touch)
.PHONY:x
x:;@cat 4touch
!,
              '', '');

# Test >> with no content
run_make_test(q!
$(file >>4touch)
.PHONY:x
x:;@cat 4touch
!,
              '', '');
unlink('4touch');

# Test > to a read-only file
touch('file.out');
chmod(0444, 'file.out');

# Find the error that will be printed
# This seems complicated, but we need the message from the C locale
my $loc = undef;
if ($has_POSIX) {
    $loc = POSIX::setlocale(POSIX::LC_MESSAGES);
    POSIX::setlocale(POSIX::LC_MESSAGES, 'C');
}
my $e;
open(my $F, '>', 'file.out') and die "Opened read-only file!\n";
$e = "$!";
$loc and POSIX::setlocale(POSIX::LC_MESSAGES, $loc);

run_make_test(q!
define A
a
b
endef
$(file     >     file.out,$(A))
x:;@cat file.out
!,
              '', "#MAKEFILE#:6: *** open: file.out: $e.  Stop.",
              512);

unlink('file.out');

# Use variables for operator and filename
run_make_test(q!
define A
a
b
endef
OP = >
FN = file.out
$(file     $(OP)     $(FN),$(A))
x:;@cat file.out
!,
              '', "a\nb");

unlink('file.out');

# Don't add newlines if one already exists
run_make_test(q!
define A
a
b

endef
$(file >file.out,$(A))
x:;@cat file.out
!,
              '', "a\nb");

unlink('file.out');

# Empty text
run_make_test(q!
$(file >file.out,)
$(file >>file.out,)
x:;@cat file.out
!,
              '', "\n\n");

unlink('file.out');

1;