summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/mysql_fix_privilege_tables.sh2
-rwxr-xr-xstorage/maria/unittest/ma_test_all-t479
-rw-r--r--unittest/Makefile.am4
3 files changed, 297 insertions, 188 deletions
diff --git a/scripts/mysql_fix_privilege_tables.sh b/scripts/mysql_fix_privilege_tables.sh
index 3b179957932..3f3dbd9306a 100644
--- a/scripts/mysql_fix_privilege_tables.sh
+++ b/scripts/mysql_fix_privilege_tables.sh
@@ -149,7 +149,7 @@ then
fi
# Find where first mysql_fix_privilege_tables.sql is located
-for i in $basedir/support-files $basedir/share $basedir/share/mysql \
+for i in scripts $basedir/support-files $basedir/share $basedir/share/mysql \
$basedir/scripts $pkgdatadir . "$dirname"
do
if test -f $i/$file
diff --git a/storage/maria/unittest/ma_test_all-t b/storage/maria/unittest/ma_test_all-t
index 7a778aa998a..b062c056424 100755
--- a/storage/maria/unittest/ma_test_all-t
+++ b/storage/maria/unittest/ma_test_all-t
@@ -3,8 +3,25 @@
# Run various unit tests.
#
+use Getopt::Long;
+
+$|= 1;
+$VER= "1.1";
+
+$opt_version= 0;
+$opt_help= 0;
+$opt_verbose= 0;
+$opt_maria_path= undef();
+$opt_valgrind= "valgrind --alignment=8 --leak-check=yes";
+$opt_suffix= "";
+$opt_silent= "-s";
my $maria_path= $ENV{'maria_path'};
+my $my_progname= $0;
+$my_progname=~ s/.*[\/]//;
+my $runtime_error= 0; # Return 1 if error(s) occur during run
+my $NEW_TEST= 0; # Test group separator in an array of tests
+
run_tests();
####
@@ -13,16 +30,34 @@ run_tests();
sub run_tests
{
- my $valgrind_opt= "valgrind --alignment=8 --leak-check=yes";
- my $silent_opt= "-s";
- my $suffix= "";
my $nr_tests= 0;
+ my $flag_exit= 0;
+
+ if (!GetOptions("help", "version", "verbose", "maria-path=s",
+ "valgrind=s", "suffix=s", "silent=s"))
+ {
+ $flag_exit= 1;
+ }
+ if ($opt_version)
+ {
+ print "$my_progname version $VER\n";
+ exit(0);
+ }
+ if (defined($opt_maria_path))
+ {
+ $maria_path= $opt_maria_path;
+ }
+ if (!defined($maria_path) || !length($maria_path))
+ {
+ $maria_path= ".";
+ }
+
+ usage() if ($opt_help || $flag_exit);
#
- # initialisations and previous run clean-ups
+ # clean-up
#
- $maria_path= "." if (!defined($maria_path) || !length($maria_path));
unlink <*.TMD maria_log*>; # Delete temporary files
#
@@ -49,33 +84,52 @@ sub run_tests
# Run tests
#
- print "1..$nr_tests\n";
+ if (!$opt_verbose)
+ {
+ print "1..$nr_tests\n";
+ }
+ else
+ {
+ print "Total tests: $nr_tests\n";
+ }
- print "Running tests with dynamic row format\n";
- run_check_tests($suffix, $silent_opt, "", 0, 0);
- run_repair_tests($suffix, $silent_opt, "", 0, 0);
- run_pack_tests($suffix, $silent_opt, "", 0, 0);
+ if ($opt_verbose)
+ {
+ print "Running tests with dynamic row format\n"
+ }
+ run_check_tests($opt_suffix, $opt_silent, "", $opt_verbose, 0);
+ run_repair_tests($opt_suffix, $opt_silent, "", $opt_verbose, 0);
+ run_pack_tests($opt_suffix, $opt_silent, "", $opt_verbose, 0);
- print "Running tests with static row format\n";
- run_check_tests($suffix, $silent_opt, "-S", 0, 0);
- run_repair_tests($suffix, $silent_opt, "-S", 0, 0);
- run_pack_tests($suffix, $silent_opt, "-S", 0, 0);
+ if ($opt_verbose)
+ {
+ print "\nRunning tests with static row format\n";
+ }
+ run_check_tests($opt_suffix, $opt_silent, "-S", $opt_verbose, 0);
+ run_repair_tests($opt_suffix, $opt_silent, "-S", $opt_verbose, 0);
+ run_pack_tests($opt_suffix, $opt_silent, "-S", $opt_verbose, 0);
- print "Running tests with block row format\n";
- run_check_tests($suffix, $silent_opt, "-M", 0, 0);
- run_repair_tests($suffix, $silent_opt, "-M", 0, 0);
- run_pack_tests($suffix, $silent_opt, "-M", 0, 0);
+ if ($opt_verbose)
+ {
+ print "\nRunning tests with block row format\n";
+ }
+ run_check_tests($opt_suffix, $opt_silent, "-M", $opt_verbose, 0);
+ run_repair_tests($opt_suffix, $opt_silent, "-M", $opt_verbose, 0);
+ run_pack_tests($opt_suffix, $opt_silent, "-M", $opt_verbose, 0);
- print "Running tests with block row format and transactions\n";
- run_check_tests($suffix, $silent_opt, "-M -T", 0, 0);
- run_repair_tests($suffix, $silent_opt, "-M -T", 0, 0);
- run_pack_tests($suffix, $silent_opt, "-M -T", 0, 0);
+ if ($opt_verbose)
+ {
+ print "\nRunning tests with block row format and transactions\n";
+ }
+ run_check_tests($opt_suffix, $opt_silent, "-M -T", $opt_verbose, 0);
+ run_repair_tests($opt_suffix, $opt_silent, "-M -T", $opt_verbose, 0);
+ run_pack_tests($opt_suffix, $opt_silent, "-M -T", $opt_verbose, 0);
- run_tests_on_warnings_and_errors($suffix, $silent_opt, 0, 0);
- run_ma_test_recovery(0, 0);
- run_tests_on_clrs(0, 0);
+ run_tests_on_warnings_and_errors($opt_suffix, $opt_silent, $opt_verbose, 0);
+ run_ma_test_recovery($opt_verbose, 0);
+ run_tests_on_clrs($opt_verbose, 0);
- return;
+ exit($runtime_error);
}
####
@@ -161,7 +215,7 @@ sub run_check_tests
ok("$maria_path/maria_chk$suffix $ma_test2_opt[$i][1] test2",
$verbose, $i + 1);
}
- unlink <rm -f maria_log_control maria_log.*>;
+ unlink <maria_log_control maria_log.*>;
return 0;
}
@@ -173,48 +227,42 @@ sub run_check_tests
sub run_repair_tests()
{
my ($suffix, $silent, $row_type, $verbose, $count)= @_;
- my ($i, $nr_tests);
- my @t1= ("$maria_path/ma_test1$suffix $silent --checksum $row_type",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix --silent -re --transaction-log test1",
- "$maria_path/maria_chk$suffix -rs test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -rqs test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -rs --correct-checksum test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -rqs --correct-checksum test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -ros --correct-checksum test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -rqos --correct-checksum test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -sz test1",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/ma_test2$suffix $silent -c -d1 $row_type",
- "$maria_path/maria_chk$suffix -s --parallel-recover test2",
- "$maria_path/maria_chk$suffix -se test2",
- "$maria_path/maria_chk$suffix -s --parallel-recover --quick test2",
- "$maria_path/maria_chk$suffix -se test2",
- "$maria_path/ma_test2$suffix $silent -c $row_type",
- "$maria_path/maria_chk$suffix -se test2",
- "$maria_path/maria_chk$suffix -sr test2",
- "$maria_path/maria_chk$suffix -se test2",
- "$maria_path/ma_test2$suffix $silent -c -t4 $row_type",
- "$maria_path/maria_chk$suffix -sz test1",
- "$maria_path/maria_chk$suffix -se test1"
- );
-
- if ($count)
- {
- $nr_tests= 0;
- for ($i= 0; defined($t1[$i]); $i++) { $nr_tests++; }
- return $nr_tests;
- }
- for ($i= 0; defined($t1[$i]); $i++)
- {
- ok($t1[$i], $verbose, $i + 1);
- }
+ my ($i);
+
+ my @t= ($NEW_TEST,
+ "$maria_path/ma_test1$suffix $silent --checksum $row_type",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix --silent -re --transaction-log test1",
+ "$maria_path/maria_chk$suffix -rs test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -rqs test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -rs --correct-checksum test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -rqs --correct-checksum test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -ros --correct-checksum test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -rqos --correct-checksum test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -sz test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/ma_test2$suffix $silent -c -d1 $row_type",
+ "$maria_path/maria_chk$suffix -s --parallel-recover test2",
+ "$maria_path/maria_chk$suffix -se test2",
+ "$maria_path/maria_chk$suffix -s --parallel-recover --quick test2",
+ "$maria_path/maria_chk$suffix -se test2",
+ "$maria_path/ma_test2$suffix $silent -c $row_type",
+ "$maria_path/maria_chk$suffix -se test2",
+ "$maria_path/maria_chk$suffix -sr test2",
+ "$maria_path/maria_chk$suffix -se test2",
+ "$maria_path/ma_test2$suffix $silent -c -t4 $row_type",
+ "$maria_path/maria_chk$suffix -sz test1",
+ "$maria_path/maria_chk$suffix -se test1"
+ );
+
+ return &count_tests(\@t) if ($count);
+ &run_test_bunch(\@t, $verbose, 0);
return 0;
}
@@ -225,55 +273,48 @@ sub run_repair_tests()
sub run_pack_tests()
{
my ($suffix, $silent, $row_type, $verbose, $count)= @_;
- my ($i, $nr_tests);
-
- my @t1= ("$maria_path/ma_test1$suffix $silent --checksum $row_type",
- "$maria_path/maria_pack$suffix --force -s test1",
- "$maria_path/maria_chk$suffix -ess test1",
- "$maria_path/maria_chk$suffix -rqs test1",
- "$maria_path/maria_chk$suffix -es test1",
- "$maria_path/maria_chk$suffix -rs test1",
- "$maria_path/maria_chk$suffix -es test1",
- "$maria_path/maria_chk$suffix -rus test1",
- "$maria_path/maria_chk$suffix -es test1",
-
- "$maria_path/ma_test1$suffix $silent --checksum $row_type",
- "$maria_path/maria_pack$suffix --force -s test1",
- "$maria_path/maria_chk$suffix -rus --safe-recover test1",
- "$maria_path/maria_chk$suffix -es test1",
-
- "$maria_path/ma_test1$suffix $silent --checksum -S $row_type",
- "$maria_path/maria_chk$suffix -se test1",
- "$maria_path/maria_chk$suffix -ros test1",
- "$maria_path/maria_chk$suffix -rqs test1",
- "$maria_path/maria_chk$suffix -se test1",
-
- "$maria_path/maria_pack$suffix --force -s test1",
- "$maria_path/maria_chk$suffix -rqs test1",
- "$maria_path/maria_chk$suffix -es test1",
- "$maria_path/maria_chk$suffix -rus test1",
- "$maria_path/maria_chk$suffix -es test1",
-
- "$maria_path/ma_test2$suffix $silent -c -d1 $row_type",
- "$maria_path/maria_chk$suffix -s --parallel-recover test2",
- "$maria_path/maria_chk$suffix -se test2",
- "$maria_path/maria_chk$suffix -s --unpack --parallel-recover test2",
- "$maria_path/maria_chk$suffix -se test2",
- "$maria_path/maria_pack$suffix --force -s test1",
- "$maria_path/maria_chk$suffix -s --unpack --parallel-recover test2",
- "$maria_path/maria_chk$suffix -se test2"
- );
-
- if ($count)
- {
- $nr_tests= 0;
- for ($i= 0; defined($t1[$i]); $i++) { $nr_tests++; }
- return $nr_tests;
- }
- for ($i= 0; defined($t1[$i]); $i++)
- {
- ok($t1[$i], $verbose, $i + 1);
- }
+ my ($i);
+
+ my @t= ($NEW_TEST,
+ "$maria_path/ma_test1$suffix $silent --checksum $row_type",
+ "$maria_path/maria_pack$suffix --force -s test1",
+ "$maria_path/maria_chk$suffix -ess test1",
+ "$maria_path/maria_chk$suffix -rqs test1",
+ "$maria_path/maria_chk$suffix -es test1",
+ "$maria_path/maria_chk$suffix -rs test1",
+ "$maria_path/maria_chk$suffix -es test1",
+ "$maria_path/maria_chk$suffix -rus test1",
+ "$maria_path/maria_chk$suffix -es test1",
+ $NEW_TEST,
+ "$maria_path/ma_test1$suffix $silent --checksum $row_type",
+ "$maria_path/maria_pack$suffix --force -s test1",
+ "$maria_path/maria_chk$suffix -rus --safe-recover test1",
+ "$maria_path/maria_chk$suffix -es test1",
+ $NEW_TEST,
+ "$maria_path/ma_test1$suffix $silent --checksum -S $row_type",
+ "$maria_path/maria_chk$suffix -se test1",
+ "$maria_path/maria_chk$suffix -ros test1",
+ "$maria_path/maria_chk$suffix -rqs test1",
+ "$maria_path/maria_chk$suffix -se test1",
+ $NEW_TEST,
+ "$maria_path/maria_pack$suffix --force -s test1",
+ "$maria_path/maria_chk$suffix -rqs test1",
+ "$maria_path/maria_chk$suffix -es test1",
+ "$maria_path/maria_chk$suffix -rus test1",
+ "$maria_path/maria_chk$suffix -es test1",
+ $NEW_TEST,
+ "$maria_path/ma_test2$suffix $silent -c -d1 $row_type",
+ "$maria_path/maria_chk$suffix -s --parallel-recover test2",
+ "$maria_path/maria_chk$suffix -se test2",
+ "$maria_path/maria_chk$suffix -s --unpack --parallel-recover test2",
+ "$maria_path/maria_chk$suffix -se test2",
+ "$maria_path/maria_pack$suffix --force -s test1",
+ "$maria_path/maria_chk$suffix -s --unpack --parallel-recover test2",
+ "$maria_path/maria_chk$suffix -se test2"
+ );
+
+ return &count_tests(\@t) if ($count);
+ &run_test_bunch(\@t, $verbose, 0);
return 0;
}
@@ -286,7 +327,7 @@ sub run_tests_on_warnings_and_errors
my ($suffix, $silent, $verbose, $count)= @_;
my ($com);
- return 9 if ($count); # Number of tests in this function, e.g. calls to ok()
+ return 9 if ($count); # Number of tests in this function, e.g. calls to ok()
ok("$maria_path/ma_test2$suffix $silent -L -K -W -P -S -R1 -m500",
$verbose, 0);
@@ -305,7 +346,7 @@ sub run_tests_on_warnings_and_errors
ok("cat ma_test2_message.txt", $verbose, 0);
ok("grep \"warning: Datafile is almost full\" ma_test2_message.txt>/dev/null",
$verbose, 0);
- unlink <rm -f ma_test2_message.txt>;
+ unlink <ma_test2_message.txt>;
ok("$maria_path/maria_chk$suffix -ssm test2", $verbose, 0);
return 0;
@@ -331,64 +372,40 @@ sub run_ma_test_recovery
sub run_tests_on_clrs
{
my ($verbose, $count)= @_;
- my ($i, $nr_tests);
-
- my @t1= ("$maria_path/ma_test2 -s -L -K -W -P -M -T -c -b -t2 -A1",
- "cp maria_log_control tmp",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -s -e test2",
- "cp tmp/maria_log_control .",
- "rm test2.MA?",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -s -e test2",
- "rm test2.MA?"
- );
- my @t2= ("$maria_path/ma_test2 -s -L -K -W -P -M -T -c -b -t2 -A1",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -s -e test2",
- "rm test2.MA?",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -e -s test2",
- "rm test2.MA?"
- );
-
- my @t3= ("$maria_path/ma_test2 -s -L -K -W -P -M -T -c -b32768 -t4 -A1",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -es test2",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -es test2",
- "rm test2.MA?",
- "$maria_path/maria_read_log -a -s",
- "$maria_path/maria_chk -es test2",
- "rm test2.MA?"
- );
-
- if ($count)
- {
- $nr_tests= 0;
- for ($i= 0; defined($t1[$i]); $i++) { $nr_tests++; }
- for ($i= 0; defined($t2[$i]); $i++) { $nr_tests++; }
- for ($i= 0; defined($t3[$i]); $i++) { $nr_tests++; }
- return $nr_tests;
- }
-
- unlink <maria_log.* maria_log_control>;
- for ($i= 0; defined($t1[$i]); $i++)
- {
- ok($t1[$i], $verbose, $i + 1);
- }
-
- unlink <maria_log.* maria_log_control>;
- for ($i= 0; defined($t2[$i]); $i++)
- {
- ok($t2[$i], $verbose, $i + 1);
- }
-
- unlink <maria_log.* maria_log_control>;
- for ($i= 0; defined($t3[$i]); $i++)
- {
- ok($t3[$i], $verbose, $i + 1);
- }
+ my ($i);
+
+ my @t= ($NEW_TEST,
+ "$maria_path/ma_test2 -s -L -K -W -P -M -T -c -b -t2 -A1",
+ "cp maria_log_control tmp",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -s -e test2",
+ "cp tmp/maria_log_control .",
+ "rm test2.MA?",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -s -e test2",
+ "rm test2.MA?",
+ $NEW_TEST,
+ "$maria_path/ma_test2 -s -L -K -W -P -M -T -c -b -t2 -A1",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -s -e test2",
+ "rm test2.MA?",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -e -s test2",
+ "rm test2.MA?",
+ $NEW_TEST,
+ "$maria_path/ma_test2 -s -L -K -W -P -M -T -c -b32768 -t4 -A1",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -es test2",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -es test2",
+ "rm test2.MA?",
+ "$maria_path/maria_read_log -a -s",
+ "$maria_path/maria_chk -es test2",
+ "rm test2.MA?"
+ );
+
+ return &count_tests(\@t) if ($count);
+ &run_test_bunch(\@t, $verbose, 1);
return 0;
}
@@ -412,27 +429,44 @@ sub run_tests_on_clrs
sub ok
{
my ($com, $verbose, $iteration, $expected_error)= @_;
- my ($msg, $output, $err);
+ my ($msg, $output, $err, $len);
+ $msg= "";
$expected_error= 0 if (!defined($expected_error));
if ($verbose)
{
- print "Running: '$com'\n";
+ print "$com ";
}
$output= `$com 2>&1`;
- $err= $? >> 8;
+ $len= length($com);
if ($verbose)
{
- print "$output\n";
+ print " " x (65 - $len);
+ print " ";
}
+ $err= $? >> 8;
if ($err == $expected_error)
{
- print "ok\n";
+ print "[ " if ($verbose);
+ print "ok";
+ print " ]" if ($verbose);
+ print "\n";
return 1;
}
- print "not ok\n";
- $msg= "\nFailed test '$com' ";
+ print "[ " if ($verbose);
+ print "not ok";
+ print " ]" if ($verbose);
+ print "\n";
+ if ($verbose && length($output))
+ {
+ print "$output\n";
+ }
+ if (!$verbose)
+ {
+ $msg= "\n"; # Get a nicer output in perl unit test mode
+ }
+ $msg.= "Failed test '$com' ";
if ($iteration)
{
$msg.= "(loop iteration $iteration.) ";
@@ -445,6 +479,81 @@ sub ok
$msg.= "Was expecting errcode: $expected_error\n";
}
warn $msg;
+ $runtime_error= 1;
return 0;
}
+
+####
+#### Count tests
+#### Arguments: $t: an array of the tests
+####
+
+sub count_tests
+{
+ my ($t)= @_;
+ my ($i, $nr_tests);
+
+ $nr_tests= 0;
+ for ($i= 0; defined(@$t[$i]); $i++) { $nr_tests++ if (@$t[$i]); }
+ return $nr_tests;
+}
+
+####
+#### Run a bunch of tests
+#### Arguments: $t: an array of the tests
+#### $verbose: to be passed to ok()
+#### $clear: clear log files if set
+####
+
+sub run_test_bunch
+{
+ my ($t, $verbose, $clear)= @_;
+ my ($i);
+
+ for ($i= 0; defined(@$t[$i]); $i++)
+ {
+ if ($clear && @$t[$i] eq $NEW_TEST)
+ {
+ unlink <maria_log.* maria_log_control>;
+ }
+ if (@$t[$i] ne $NEW_TEST)
+ {
+ ok(@$t[$i], $verbose, $i + 1);
+ }
+ }
+}
+
+####
+#### usage
+####
+
+sub usage
+{
+ print <<EOF;
+$my_progname version $VER
+
+Description:
+
+Run various Maria related tests. Typically used via make test as a unittest.
+Please set environment variable maria_path before executing, if you
+are not starting the program where ma_test1, ma_test2, ma_test3,
+ma_test_recovery etc. files are.
+
+Options
+--help Show this help and exit.
+--version Show version number and exit.
+--verbose Be more verbose. Will print each unittest on a line
+ and result after. This mode cannot be used with unit.pl
+ when running in normal unit test mode.
+--maria-path=... Path to maria test files. You can set this as an
+ environment variable 'maria_path' also.
+ (maria_path: '$maria_path')
+--valgrind=... Options for valgrind.
+ ('$opt_valgrind')
+--suffix=... Suffix for test files (ma_test1, ma_test2 etc.),
+ if they have one ('$opt_suffix')
+--silent=... Silent option passed to ma_test* tests ('$opt_silent')
+EOF
+ exit(0);
+}
diff --git a/unittest/Makefile.am b/unittest/Makefile.am
index 8684fd3fc7d..e9eb6737ce5 100644
--- a/unittest/Makefile.am
+++ b/unittest/Makefile.am
@@ -21,10 +21,10 @@ CLEANFILES = unit
unittests = mytap mysys @mysql_se_unittest_dirs@ @mysql_pg_unittest_dirs@
test:
- perl unit.pl run $(unittests)
+ maria_path=../storage/maria perl unit.pl run $(unittests)
test-verbose:
- HARNESS_VERBOSE=1 perl unit.pl run $(unittests)
+ HARNESS_VERBOSE=1 maria_path=../storage/maria perl unit.pl run $(unittests)
# Don't update the files from bitkeeper
%::SCCS/s.%