Commit 6acecb50 authored by dave%intrec.com's avatar dave%intrec.com

Fix for bug 65598: check for minimum versions of some of the Perl modules…

Fix for bug 65598: check for minimum versions of some of the Perl modules Bugzilla needs. Also check for minimum version of MySQL server on the other end.
parent 88458a65
...@@ -140,35 +140,93 @@ unless (eval "require 5.004") { ...@@ -140,35 +140,93 @@ unless (eval "require 5.004") {
die "Sorry, you need at least Perl 5.004\n"; die "Sorry, you need at least Perl 5.004\n";
} }
unless (eval "require DBI") { # vers_cmp is adapted from Sort::Versions 1.3 1996/07/11 13:37:00 kjahds,
# which is not included with Perl by default, hence the need to copy it here.
# Seems silly to require it when this is the only place we need it...
sub vers_cmp {
if (@_ < 2) { die "not enough parameters for vers_cmp" }
if (@_ > 2) { die "too many parameters for vers_cmp" }
my ($a, $b) = @_;
my (@A) = ($a =~ /(\.|\d+|[^\.\d]+)/g);
my (@B) = ($b =~ /(\.|\d+|[^\.\d]+)/g);
my ($A,$B);
while (@A and @B) {
$A = shift @A;
$B = shift @B;
if ($A eq "." and $B eq ".") {
next;
} elsif ( $A eq "." ) {
return -1;
} elsif ( $B eq "." ) {
return 1;
} elsif ($A =~ /^\d+$/ and $B =~ /^\d+$/) {
return $A <=> $B if $A <=> $B;
} else {
$A = uc $A;
$B = uc $B;
return $A cmp $B if $A cmp $B;
}
}
@A <=> @B;
}
# This was originally clipped from the libnet Makefile.PL, adapted here to
# use the above vers_cmp routine for accurate version checking.
sub have_vers {
my ($pkg, $wanted) = @_;
my ($msg, $vnum, $vstr);
no strict 'refs';
printf("Checking for %15s %-9s ", $pkg, !$wanted?'(any)':"(v$wanted)");
eval { my $p; ($p = $pkg . ".pm") =~ s!::!/!g; require $p; };
$vnum = ${"${pkg}::VERSION"} || ${"${pkg}::Version"} || 0;
$vnum = -1 if $@;
if ($vnum < 0) {
$vstr = "not found";
}
elsif ($vnum > 0) {
$vstr = "found v$vnum";
}
else {
$vstr = "found unknown version";
}
my $vok = (vers_cmp($vnum,$wanted) > -1);
print ((($vok) ? "ok: " : " "), "$vstr\n");
return $vok;
}
unless (have_vers("DBI","1.13")) {
die "Please install the DBI module. You can do this by running (as root)\n\n", die "Please install the DBI module. You can do this by running (as root)\n\n",
" perl -MCPAN -eshell\n", " perl -MCPAN -eshell\n",
" install DBI\n"; " install DBI\n";
} }
unless (eval "require Data::Dumper") { unless (have_vers("Data::Dumper",0)) { # 0 = any version
die "Please install the Data::Dumper module. You can do this by running (as root)\n\n", die "Please install the Data::Dumper module. You can do this by running (as root)\n\n",
" perl -MCPAN -eshell\n", " perl -MCPAN -eshell\n",
" install Data::Dumper\n"; " install Data::Dumper\n";
} }
unless (eval "require Mysql") { unless (have_vers("Mysql",0)) { # 0 = any version
die "Please install the Mysql database driver. You can do this by running (as root)\n\n", die "Please install the Mysql database driver. You can do this by running (as root)\n\n",
" perl -MCPAN -eshell\n", " perl -MCPAN -eshell\n",
" install Msql-Mysql\n\n", " install Msql-Mysql\n\n",
"Be sure to enable the Mysql emulation!\n"; "Be sure to enable the Mysql emulation!\n";
} }
unless (eval "require Date::Parse") { unless (have_vers("Date::Parse",0)) { # 0 = any version
die "Please install the Date::Parse module. You can do this by running (as root)\n\n", die "Please install the Date::Parse module. You can do this by running (as root)\n\n",
" perl -MCPAN -eshell\n", " perl -MCPAN -eshell\n",
" install Date::Parse\n"; " install Date::Parse\n";
} }
# The following two modules are optional: print "The following two modules are optional:\n";
my $charts = 0; my $charts = 0;
$charts++ if eval "require GD"; $charts++ if have_vers("GD","1.19");
$charts++ if eval "require Chart::Base"; $charts++ if have_vers("Chart::Base","0.99b");
if ($charts != 2) { if ($charts != 2) {
print "If you you want to see graphical bug dependency charts, you may install\n", print "If you you want to see graphical bug dependency charts, you may install\n",
"the optional libgd and the Perl modules GD-1.19 and Chart::Base-0.99b, e.g. by\n", "the optional libgd and the Perl modules GD-1.19 and Chart::Base-0.99b, e.g. by\n",
...@@ -512,12 +570,31 @@ my $drh = DBI->install_driver($db_base) ...@@ -512,12 +570,31 @@ my $drh = DBI->install_driver($db_base)
if ($::db_check) { if ($::db_check) {
# Do we have the database itself? # Do we have the database itself?
my $sql_want = "3.22.5"; # minimum version of MySQL
# original DSN line was: # original DSN line was:
# my $dsn = "DBI:$db_base:$::db_name;$::db_host;$::db_port"; # my $dsn = "DBI:$db_base:$::db_name;$::db_host;$::db_port";
# removed the $db_name because we don't know it exists yet, and this will # removed the $db_name because we don't know it exists yet, and this will
# fail if we request it here and it doesn't. - dave@intrec.com 2000/09/16 # fail if we request it here and it doesn't. - dave@intrec.com 2000/09/16
my $dsn = "DBI:$db_base:;$::db_host;$::db_port"; my $dsn = "DBI:$db_base:;$::db_host;$::db_port";
my $dbh = DBI->connect($dsn, $::db_user, $::db_pass); my $dbh = DBI->connect($dsn, $::db_user, $::db_pass);
printf("Checking for %15s %-9s ", "MySQL Server", "(v$sql_want)");
my $qh = $dbh->prepare("SELECT VERSION()");
$qh->execute;
my ($sql_vers) = $qh->fetchrow_array;
$qh->finish;
my $sql_vok = ((vers_cmp($sql_vers,$sql_want) > -1)
&& ($sql_vers ne "3.23.29")); # encrypt() is broken in 3.23.29
print (($sql_vok ? "ok: " : " "), "found v$sql_vers\n");
unless ($sql_vok) {
die "Your MySQL server is either too old or a known broken version.\n",
" Bugzilla requires version $sql_want or later of MySQL.\n",
($sql_vers eq "3.23.29") ? "Version 3.23.29 has a broken encrypt() command. 3.23.30 fixes this.\n" : "",
" Please visit http://www.mysql.org and download a newer version.\n";
}
my @databases = $dbh->func('_ListDBs'); my @databases = $dbh->func('_ListDBs');
unless (grep /^$::db_name$/, @databases) { unless (grep /^$::db_name$/, @databases) {
print "Creating database $::db_name ...\n"; print "Creating database $::db_name ...\n";
...@@ -1895,5 +1972,4 @@ if ($::regenerateshadow) { ...@@ -1895,5 +1972,4 @@ if ($::regenerateshadow) {
} }
unlink "data/versioncache"; unlink "data/versioncache";
print "Reminder: Bugzilla now requires version 3.22.5 or later of MySQL.\n";
print "Reminder: Bugzilla now requires version 8.7 or later of sendmail.\n"; print "Reminder: Bugzilla now requires version 8.7 or later of sendmail.\n";
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment