From 21cf8c64441103bf875a56b39f39397ecd51424e Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Thu, 11 Jul 2002 06:38:57 +0000 Subject: Install Greg McGary's patches to port the id-utils hashing functions to GNU make. Also he provides some other performance fixups after doing some profiling of make on large makefiles. Modify the test suite to allow the use of Valgrind to find memory problems. --- tests/ChangeLog | 10 +++++++++ tests/run_make_tests.pl | 34 ++++++++++++++++++++++++++++++ tests/scripts/functions/filter-out | 43 ++++++++++++++++---------------------- tests/scripts/targets/INTERMEDIATE | 4 ++-- 4 files changed, 64 insertions(+), 27 deletions(-) (limited to 'tests') diff --git a/tests/ChangeLog b/tests/ChangeLog index 3a13e9e..2dc997f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,13 @@ +2002-07-11 Paul D. Smith + + * run_make_tests.pl (valid_option): Add support for Valgrind + . Use -valgrind option to the + test suite. + (set_more_defaults): Set up the file descriptor to capture + Valgrind output. We have to unset its close-on-exec flag; we + hardcode the value for F_SETFD (2) rather than load it; hopefully + this will help us avoid breaking the Windows/DOS test suite. + 2002-07-10 Paul D. Smith * scripts/variables/automatic: Add some tests for $$@, $$(@D), and diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl index baf55f8..0ada574 100755 --- a/tests/run_make_tests.pl +++ b/tests/run_make_tests.pl @@ -11,11 +11,16 @@ # [-make ] # (and others) +$valgrind = 0; # invoke make with valgrind + require "test_driver.pl"; +#$SIG{INT} = sub { print STDERR "Caught a signal!\n"; die @_; }; + sub valid_option { local($option) = @_; + if ($option =~ /^-make([-_]?path)?$/) { $make_path = shift @argv; @@ -27,6 +32,11 @@ sub valid_option return 1; } + if ($option =~ /^-valgrind$/i) { + $valgrind = 1; + return 1; + } + # This doesn't work--it _should_! Someone needs to fix this badly. # # elsif ($option =~ /^-work([-_]?dir)?$/) @@ -56,6 +66,10 @@ sub run_make_with_options $command .= " $options"; } + if ($valgrind) { + print VALGRIND "\n\nExecuting: $command\n"; + } + $code = &run_command_with_output($logname,$command); # Check to see if we have Purify errors. If so, keep the logfile. @@ -81,6 +95,11 @@ sub run_make_with_options { print "Error running $make_path ($code): $command\n"; $test_passed = 0; + # If it's a SIGINT, stop here + if ($code & 127) { + print STDERR "\nCaught signal ".($code & 127)."!\n"; + exit($code); + } return 0; } @@ -215,6 +234,21 @@ sub set_more_defaults else { $parallel_jobs = 1; } + + # Set up for valgrind, if requested. + + if ($valgrind) { +# use POSIX qw(:fcntl_h); +# require Fcntl; + open(VALGRIND, "> valgrind.out") + || die "Cannot open valgrind.out: $!\n"; + # -q --leak-check=yes + $make_path = "valgrind --num-callers=15 --logfile-fd=".fileno(VALGRIND)." $make_path"; + # F_SETFD is 2 + fcntl(VALGRIND, 2, 0) or die "fcntl(setfd) failed: $!\n"; + system("echo Starting on `date` 1>&".fileno(VALGRIND)); + print "Enabled valgrind support.\n"; + } } sub setup_for_test diff --git a/tests/scripts/functions/filter-out b/tests/scripts/functions/filter-out index 0559a8d..6c8b27a 100644 --- a/tests/scripts/functions/filter-out +++ b/tests/scripts/functions/filter-out @@ -1,35 +1,28 @@ -$description = "The following test creates a makefile to test static \n" - ."pattern rules. Static pattern rules are rules which \n" - ."specify multiple targets and construct the dependency \n" - ."names for each target based on the target name. "; +# -*-perl-*- -$details = "The makefile created in this test has three targets. The \n" - ."filter command is used to get those target names ending in \n" - .".o and statically creates a compile command with the target\n" - ."name and the target name with .c. It also does the same thing\n" - ."for another target filtered with .elc and creates a command\n" - ."to emacs a .el file"; +$description = "Test the filter-out function."; -open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... +$details = "The makefile created in this test has two variables. The +filter-out function is first used to discard names ending in +.o with a single simple pattern. The second filter-out function +augments the simple pattern with three literal names, which are +also added to the text argument. This tests an internal hash table +which is only used if there are multiple literals present in both +the pattern and text arguments. The result of both filter-out +functions is the same single .elc name.\n"; -print MAKEFILE "files := \$(filter-out %.o, foo.elc bar.o lose.o) \n" - ."all: \n" - ."\t\@echo \$(files) \n"; +open(MAKEFILE,"> $makefile"); -# END of Contents of MAKEFILE +print MAKEFILE <<'EOF'; +files1 := $(filter-out %.o, foo.elc bar.o lose.o) +files2 := $(filter-out foo.i bar.i lose.i %.o, foo.i bar.i lose.i foo.elc bar.o lose.o) +all: ; @echo $(files1) $(files2) +EOF close(MAKEFILE); -&run_make_with_options($makefile, - "", - &get_logfile, - 0); - -# Create the answer to what should be produced by this Makefile -$answer = "foo.elc\n"; - +&run_make_with_options($makefile, "", &get_logfile, 0); +$answer = "foo.elc foo.elc\n"; &compare_output($answer,&get_logfile(1)); 1; diff --git a/tests/scripts/targets/INTERMEDIATE b/tests/scripts/targets/INTERMEDIATE index fe3f4e9..725ab0e 100644 --- a/tests/scripts/targets/INTERMEDIATE +++ b/tests/scripts/targets/INTERMEDIATE @@ -59,7 +59,7 @@ $answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; # TEST #3 &run_make_with_options($makefile,'foo.c',&get_logfile); -$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm foo.e bar.e\n"; +$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm bar.e foo.e\n"; &compare_output($answer, &get_logfile(1)); # TEST #4 @@ -74,7 +74,7 @@ sleep($wtime); &touch('foo.f'); &run_make_with_options($makefile,'foo.c',&get_logfile); -$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm foo.e bar.e\n"; +$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm bar.e foo.e\n"; &compare_output($answer, &get_logfile(1)); # TEST #6 -- added for PR/1669: don't remove files mentioned on the cmd line. -- cgit v1.2.3