diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl index 916f3467..a74417ac 100644 --- a/tests/run_make_tests.pl +++ b/tests/run_make_tests.pl @@ -42,6 +42,10 @@ $command_string = ''; $all_tests = 0; +# Shell commands + +$CMD_rmfile = 'rm -f'; + # rmdir broken in some Perls on VMS. if ($^O eq 'VMS') { @@ -56,6 +60,8 @@ if ($^O eq 'VMS') }; *CORE::GLOBAL::rmdir = \&vms_rmdir; + + $CMD_rmfile = 'delete_file -no_ask'; } require "test_driver.pl"; @@ -317,11 +323,9 @@ sub print_help } sub get_this_pwd { - $delete_command = 'rm -f'; if ($has_POSIX) { $__pwd = POSIX::getcwd(); } elsif ($vos) { - $delete_command = "delete_file -no_ask"; $__pwd = `++(current_dir)`; } else { # No idea... just try using pwd as a last resort. diff --git a/tests/scripts/features/echoing b/tests/scripts/features/echoing index 40debf5a..a666a263 100644 --- a/tests/scripts/features/echoing +++ b/tests/scripts/features/echoing @@ -36,7 +36,7 @@ run_make_test(" all: \techo This makefile did not clean the dir... good clean: -\t\@$delete_command $example\n", +\t\@$CMD_rmfile $example\n", '', 'echo This makefile did not clean the dir... good This makefile did not clean the dir... good'); @@ -52,7 +52,7 @@ if (-f $example) { # TEST #3 # ------- -run_make_test(undef, '-n clean', "$delete_command $example\n"); +run_make_test(undef, '-n clean', "$CMD_rmfile $example\n"); # TEST #4 diff --git a/tests/scripts/features/include b/tests/scripts/features/include index 4b8bd7ed..a21455dd 100644 --- a/tests/scripts/features/include +++ b/tests/scripts/features/include @@ -161,7 +161,7 @@ bar: baz baz: end ', '', -"#MAKEFILE#:2: bar: No such file or directory +"#MAKEFILE#:2: bar: $ERR_no_such_file #MAKE#: *** No rule to make target 'end', needed by 'baz'. Stop.\n", 512); @@ -188,7 +188,7 @@ inc1:; echo > $@ include inc1 include inc2 !, - '', "#MAKEFILE#:7: inc2: No such file or directory\n#MAKE#: *** No rule to make target 'inc2'. Stop.\n", 512); + '', "#MAKEFILE#:7: inc2: $ERR_no_such_file\n#MAKE#: *** No rule to make target 'inc2'. Stop.\n", 512); rmfiles('inc1'); @@ -220,7 +220,7 @@ include inc1 inc1: foo; echo > $@ foo:; exit 1 !, - '', "exit 1\n#MAKEFILE#:3: inc1: No such file or directory\n#MAKE#: *** [#MAKEFILE#:5: foo] Error 1\n", 512); + '', "exit 1\n#MAKEFILE#:3: inc1: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:5: foo] Error 1\n", 512); rmfiles('inc1'); @@ -231,7 +231,7 @@ default:; @echo DEFAULT include inc1 inc1: foo; echo > $@ !, - '', "#MAKEFILE#:3: inc1: No such file or directory\n#MAKE#: *** No rule to make target 'foo', needed by 'inc1'. Stop.\n", 512); + '', "#MAKEFILE#:3: inc1: $ERR_no_such_file\n#MAKE#: *** No rule to make target 'foo', needed by 'inc1'. Stop.\n", 512); rmfiles('inc1'); diff --git a/tests/scripts/features/output-sync b/tests/scripts/features/output-sync index 7237e65b..9fb3adec 100644 --- a/tests/scripts/features/output-sync +++ b/tests/scripts/features/output-sync @@ -45,7 +45,7 @@ sub output_sync_clean { # reliable. If things are too fast, then sometimes a different job will steal # the output sync lock and the output is mis-ordered from what we expect. sub output_sync_wait { - return "while [ ! -f ../mksync.$_[0] ]; do :; done; rm -f ../mksync.$_[0].wait; $sleep_command 1"; + return "while [ ! -f ../mksync.$_[0] ]; do :; done; $CMD_rmfile ../mksync.$_[0].wait; $sleep_command 1"; } sub output_sync_set { return "date > ../mksync.$_[0]"; diff --git a/tests/scripts/features/patternrules b/tests/scripts/features/patternrules index c7ae7cff..8f7ccc40 100644 --- a/tests/scripts/features/patternrules +++ b/tests/scripts/features/patternrules @@ -163,16 +163,16 @@ p1.% p2.%: %.orig # TEST 6: Make sure that non-target files are still eligible to be created # as part of implicit rule chaining. Savannah bug #17752. -run_make_test(q! +run_make_test(sprintf(q! BIN = xyz COPY = $(BIN).cp SRC = $(BIN).c allbroken: $(COPY) $(BIN) ; @echo ok $(SRC): ; @echo 'main(){}' > $@ -%.cp: % ; @cp $< $@ -% : %.c ; @cp $< $@ -clean: ; @rm -rf $(SRC) $(COPY) $(BIN) -!, +%%.cp: %% ; @cp $< $@ +%% : %%.c ; @cp $< $@ +clean: ; @%s $(SRC) $(COPY) $(BIN) +!, $CMD_rmfile), '', "ok\n"); unlink(qw(xyz xyz.cp xyz.c)); diff --git a/tests/scripts/functions/file b/tests/scripts/functions/file index 904db790..c3f0b565 100644 --- a/tests/scripts/functions/file +++ b/tests/scripts/functions/file @@ -51,18 +51,6 @@ unlink('4touch'); 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 @@ -71,7 +59,7 @@ endef $(file > file.out,$(A)) x:;@cat file.out !, - '', "#MAKEFILE#:6: *** open: file.out: $e. Stop.", + '', "#MAKEFILE#:6: *** open: file.out: $ERR_read_only_file. Stop.", 512); unlink('file.out'); diff --git a/tests/scripts/functions/wildcard b/tests/scripts/functions/wildcard index bcd84ad7..f91d9adb 100644 --- a/tests/scripts/functions/wildcard +++ b/tests/scripts/functions/wildcard @@ -25,7 +25,7 @@ print2: \t\@echo \$(sort \$(wildcard example.[a-z0-9])) \t\@echo \$(sort \$(wildcard example.[!A-Za-z_\\!])) clean: -\t$delete_command \$(sort \$(wildcard example.*)) +\t$CMD_rmfile \$(sort \$(wildcard example.*)) EOM # END of Contents of MAKEFILE @@ -63,7 +63,7 @@ $answer = "example.1 example.3 example._\n" # TEST #3 # ------- -$answer = "$delete_command example.1 example.3 example._ example.for example.two"; +$answer = "$CMD_rmfile example.1 example.3 example._ example.for example.two"; if ($vos) { $answer .= " \n"; diff --git a/tests/scripts/options/dash-C b/tests/scripts/options/dash-C index 42d0a8ba..47aee53a 100644 --- a/tests/scripts/options/dash-C +++ b/tests/scripts/options/dash-C @@ -11,19 +11,17 @@ find the makefile and the file to delete in the work directory."; $example = $workdir . $pathsep . "EXAMPLE"; open(MAKEFILE,"> $makefile"); -print MAKEFILE <<EOF; +print MAKEFILE qq! all: ; \@echo This makefile did not clean the dir ... good -clean: ; $delete_command EXAMPLE\$(ext) -EOF +clean: ; $CMD_rmfile EXAMPLE\$(ext) +!; close(MAKEFILE); # TEST #1 # ------- -&touch($example); +touch($example); -&run_make_with_options("${testname}.mk", - "-C $workdir clean", - &get_logfile); +run_make_with_options("${testname}.mk", "-C $workdir clean", &get_logfile); chdir $workdir; $wpath = &get_this_pwd; @@ -35,10 +33,10 @@ if (-f $example) { # Create the answer to what should be produced by this Makefile $answer = "$make_name: Entering directory '$wpath'\n" - . "$delete_command EXAMPLE\n" + . "$CMD_rmfile EXAMPLE\n" . "$make_name: Leaving directory '$wpath'\n"; -&compare_output($answer,&get_logfile(1)); +compare_output($answer,&get_logfile(1)); # TEST #2 @@ -47,11 +45,9 @@ $answer = "$make_name: Entering directory '$wpath'\n" $example .= "slash"; -&touch($example); +touch($example); -&run_make_with_options("${testname}.mk", - "-C $workdir/ clean ext=slash", - &get_logfile); +run_make_with_options("${testname}.mk", "-C $workdir/ clean ext=slash", &get_logfile); chdir $workdir; $wpath = &get_this_pwd; @@ -63,9 +59,10 @@ if (-f $example) { # Create the answer to what should be produced by this Makefile $answer = "$make_name: Entering directory '$wpath'\n" - . "$delete_command EXAMPLEslash\n" + . "$CMD_rmfile EXAMPLEslash\n" . "$make_name: Leaving directory '$wpath'\n"; &compare_output($answer,&get_logfile(1)); +unlink($example); 1; diff --git a/tests/scripts/options/dash-k b/tests/scripts/options/dash-k index 85dd0b0a..86c7c787 100644 --- a/tests/scripts/options/dash-k +++ b/tests/scripts/options/dash-k @@ -105,7 +105,7 @@ include ifile ifile: no-such-file; @false ', '-k', - "#MAKEFILE#:2: ifile: No such file or directory + "#MAKEFILE#:2: ifile: $ERR_no_such_file #MAKE#: *** No rule to make target 'no-such-file', needed by 'ifile'. #MAKE#: Failed to remake makefile 'ifile'. hi\n", diff --git a/tests/scripts/options/dash-l b/tests/scripts/options/dash-l index 0b0f196f..a36b7ae1 100644 --- a/tests/scripts/options/dash-l +++ b/tests/scripts/options/dash-l @@ -17,29 +17,22 @@ decide that it cannot run more than one job even though -j 4 was also specified on the command line."; open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... - -print MAKEFILE <<'EOF'; +print MAKEFILE qq, SHELL = /bin/sh define test -if [ ! -f test-file ]; then \ - echo >> test-file; sleep 2; rm -f test-file; \ -else \ - echo $@ FAILED; \ +if [ ! -f test-file ]; then \\ + echo >> test-file; sleep 2; $CMD_rmfile test-file; \\ +else \\ + echo \$\@ FAILED; \\ fi endef all : ONE TWO THREE -ONE : ; @$(test) -TWO : ; @$(test) -THREE : ; @$(test) -EOF - - -# END of Contents of MAKEFILE - +ONE : ; \@\$(test) +TWO : ; \@\$(test) +THREE : ; \@\$(test) +,; close(MAKEFILE); $mkoptions = "-l 0.0001"; diff --git a/tests/scripts/targets/FORCE b/tests/scripts/targets/FORCE index eb8f2517..297bb38b 100644 --- a/tests/scripts/targets/FORCE +++ b/tests/scripts/targets/FORCE @@ -2,39 +2,18 @@ $description = "The following tests rules without Commands or Dependencies."; -$details = "If the rule ...\n"; - -open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... - -print MAKEFILE ".IGNORE :\n"; -print MAKEFILE "clean: FORCE\n"; -print MAKEFILE "\t$delete_command clean\n"; -print MAKEFILE "FORCE:\n"; - -# END of Contents of MAKEFILE - -close(MAKEFILE); - - # Create a file named "clean". This is the same name as the target clean # and tricks the target into thinking that it is up to date. (Unless you # use the .PHONY target. -&touch("clean"); +touch('clean'); -$answer = "$delete_command clean\n"; -&run_make_with_options($makefile,"clean",&get_logfile); +run_make_test(qq! +.IGNORE : +clean: FORCE ; $CMD_rmfile clean +FORCE: +!, + '', "$CMD_rmfile clean"); -&compare_output($answer,&get_logfile(1)); +rmfiles('clean'); 1; - - - - - - - - - diff --git a/tests/scripts/targets/PHONY b/tests/scripts/targets/PHONY index c8e2110f..d49e3f83 100644 --- a/tests/scripts/targets/PHONY +++ b/tests/scripts/targets/PHONY @@ -12,28 +12,22 @@ $details = "This makefile in this test declares the target clean to be a \n" $example = "EXAMPLE_FILE"; -open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... - -print MAKEFILE ".PHONY : clean \n"; -print MAKEFILE "all: \n"; -print MAKEFILE "\t\@echo This makefile did not clean the dir ... good\n"; -print MAKEFILE "clean: \n"; -print MAKEFILE "\t$delete_command $example clean\n"; - -# END of Contents of MAKEFILE - -close(MAKEFILE); - -&touch($example); +touch($example); # Create a file named "clean". This is the same name as the target clean # and tricks the target into thinking that it is up to date. (Unless you # use the .PHONY target. -&touch("clean"); +touch('clean'); -$answer = "$delete_command $example clean\n"; +open(MAKEFILE, "> $makefile"); +print MAKEFILE qq! +.PHONY : clean +all: ; \@echo This makefile did not clean the dir ... good +clean: ; $CMD_rmfile $example clean +!; +close(MAKEFILE); + +$answer = "$CMD_rmfile $example clean\n"; &run_make_with_options($makefile,"clean",&get_logfile); if (-f $example) { @@ -42,13 +36,7 @@ if (-f $example) { &compare_output($answer,&get_logfile(1)); +# Just in case +unlink($example, 'clean'); + 1; - - - - - - - - - diff --git a/tests/scripts/targets/SILENT b/tests/scripts/targets/SILENT index 4bb0a0f4..521930e8 100644 --- a/tests/scripts/targets/SILENT +++ b/tests/scripts/targets/SILENT @@ -10,33 +10,22 @@ $details = "This test is the same as the clean test except that it should\n" $example = "EXAMPLE_FILE"; open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... - -print MAKEFILE ".SILENT : clean\n"; -print MAKEFILE "clean: \n"; -print MAKEFILE "\t$delete_command EXAMPLE_FILE\n"; - -# END of Contents of MAKEFILE - +print MAKEFILE qq! +.SILENT : clean +clean: ; $CMD_rmfile $example +!; close(MAKEFILE); -&touch($example); +touch($example); -$answer = ""; -&run_make_with_options($makefile,"clean",&get_logfile,0); +$answer = ''; +run_make_with_options($makefile,"clean",&get_logfile,0); if (-f $example) { $test_passed = 0; } -&compare_output($answer,&get_logfile(1)); +compare_output($answer,&get_logfile(1)); + +# Just in case +unlink($example); 1; - - - - - - - - - diff --git a/tests/scripts/targets/clean b/tests/scripts/targets/clean index b32c9767..e67458e9 100644 --- a/tests/scripts/targets/clean +++ b/tests/scripts/targets/clean @@ -8,43 +8,24 @@ $description = "The following test creates a makefile to delete a \n" $example = "EXAMPLE_FILE"; open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... - -print MAKEFILE "all: \n"; -print MAKEFILE "\t\@echo This makefile did not clean the dir... good\n"; -print MAKEFILE "clean: \n"; -print MAKEFILE "\t$delete_command EXAMPLE_FILE\n"; - -# END of Contents of MAKEFILE - +print MAKEFILE qq! +all: ; \@echo This makefile did not clean the dir... good +clean: ; $CMD_rmfile $example +!; close(MAKEFILE); -&touch($example); +touch($example); +run_make_with_options($makefile,"",&get_logfile,0); - -&run_make_with_options($makefile,"",&get_logfile,0); - -# Create the answer to what should be produced by this Makefile $answer = "This makefile did not clean the dir... good\n"; - -&compare_output($answer,&get_logfile(1)) || &error ("abort"); +compare_output($answer,&get_logfile(1)) || error("abort"); -$answer = "$delete_command $example\n"; -&run_make_with_options($makefile,"clean",&get_logfile,0); +$answer = "$CMD_rmfile $example\n"; +run_make_with_options($makefile,"clean",&get_logfile,0); if (-f $example) { $test_passed = 0; } -&compare_output($answer,&get_logfile(1)) || &error ("abort"); +compare_output($answer,&get_logfile(1)) || error("abort"); 1; - - - - - - - - - diff --git a/tests/test_driver.pl b/tests/test_driver.pl index e6cd9f9e..cb0a1b21 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -55,6 +55,30 @@ $test_timeout = 10 if $^O eq 'VMS'; # Path to Perl $perl_name = $^X; +# Find the strings that will be generated for various error codes. +# We want them from the C locale regardless of our current locale. + +my $loc = undef; +if ($has_POSIX) { + $loc = POSIX::setlocale(POSIX::LC_MESSAGES); + POSIX::setlocale(POSIX::LC_MESSAGES, 'C'); +} + +open(my $F, '<', 'file.none') and die "Opened non-existent file!\n"; +$ERR_no_such_file = "$!"; + +touch('file.out'); +chmod(0444, 'file.out'); +open(my $F, '>', 'file.out') and die "Opened read-only file!\n"; +$ERR_read_only_file = "$!"; + +chmod(0000, 'file.out'); +open(my $F, '<', 'file.out') and die "Opened unreadable file!\n"; +$ERR_unreadable_file = "$!"; + +unlink('file.out'); +$loc and POSIX::setlocale(POSIX::LC_MESSAGES, $loc); + # %makeENV is the cleaned-out environment. %makeENV = ();