mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-29 00:05:58 +00:00
90ee335724
Fixes Savannah bug #35764.
101 lines
1.6 KiB
Perl
101 lines
1.6 KiB
Perl
# -*-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 > 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;
|