# -*-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;