version 1.7, 2002/08/14 16:54:35
|
version 1.12, 2003/08/22 20:48:38
|
Line 16 B<perltest.pl> - Test status of perl mod
|
Line 16 B<perltest.pl> - Test status of perl mod
|
|
|
# Written to help LON-CAPA (The LearningOnline Network with CAPA) |
# Written to help LON-CAPA (The LearningOnline Network with CAPA) |
# |
# |
# YEAR=2001 |
|
# 9/30 Scott Harrison |
|
# YEAR 2002 and onwards |
|
# Scott Harrison, sharrison@users.sourceforge.net |
|
|
|
=pod |
=pod |
|
|
Line 142 Ratings: 1=horrible 2=poor 3=fair 4=good
|
Line 138 Ratings: 1=horrible 2=poor 3=fair 4=good
|
|
|
=head1 AUTHOR |
=head1 AUTHOR |
|
|
Scott Harrison, sharrison@users.sourceforge.net, 2001, 2002 |
|
|
|
This software is distributed under the General Public License, |
This software is distributed under the General Public License, |
version 2, June 1991 (which is the same terms as LON-CAPA). |
version 2, June 1991 (which is the same terms as LON-CAPA). |
|
|
Line 187 if ($mode eq "html") {
|
Line 181 if ($mode eq "html") {
|
print(<<END); |
print(<<END); |
Content-type: text/html |
Content-type: text/html |
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html> |
<html> |
<head> |
<head> |
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> |
<title>CPAN perl status report; $hostname; $date</title> |
<title>CPAN perl status report; $hostname; $date</title> |
</head> |
</head> |
<body bgcolor="#ffffff"> |
<body bgcolor="white"> |
<h1>CPAN perl status report</h1> |
<h1>CPAN perl status report</h1> |
<pre> |
<pre> |
END |
END |
Line 328 my @dev_missing;
|
Line 325 my @dev_missing;
|
my @dev_outdated; |
my @dev_outdated; |
my @dev_okay; |
my @dev_okay; |
my @dev_veryokay; |
my @dev_veryokay; |
|
my @dev_to_update; |
my @stable_missing; |
my @stable_missing; |
my @stable_outdated; |
my @stable_outdated; |
my @stable_okay; |
my @stable_okay; |
my @stable_veryokay; |
my @stable_veryokay; |
|
my @stable_to_update; |
|
|
# ===== Loop through all of the needed CPAN distributions and probe the system. |
# ===== Loop through all of the needed CPAN distributions and probe the system. |
foreach my $dist (keys %dist_module_hash) |
foreach my $dist (keys %dist_module_hash) { |
{ |
|
my $module = $dist_module_hash{$dist}; |
my $module = $dist_module_hash{$dist}; |
my $fs = $modulefs_hash{$module}; |
my $fs = $modulefs_hash{$module}; |
my $fsflag = 0; |
my $fsflag = 0; |
if ($big_module_string =~ /$fs/) |
if ($big_module_string =~ /$fs/) { $fsflag = 1; } |
{ |
|
$fsflag = 1; |
|
} |
|
my ($vok,$vstr); |
my ($vok,$vstr); |
($vok,$vstr) = have_vers($module,$module_dev_version_hash{$module}); |
foreach my $type ('dev','stable') { |
# print "fsflag: $fsflag, vok: $vok, vstr: $vstr, fs: $fs\n"; |
my ($vers_mod,$vers_dist); |
if ($fsflag and !$vok and $vstr=~/not found/) |
my ($missing,$outdated,$veryokay,$okay,$to_update); |
{ |
if ($type eq 'dev') { |
push(@dev_missing,'MISSING '.$dist.' (want distribution version '. |
$vers_mod=$module_dev_version_hash{$module}; |
$dist_dev_version_hash{$dist}.') ?'."\n"); |
$vers_dist=$dist_dev_version_hash{$dist}; |
# The question mark indicates there was a pattern match in the |
($missing,$outdated,$veryokay,$okay,$to_update)= |
# big_module_string which would be unexpected. |
(\@dev_missing,\@dev_outdated,\@dev_veryokay,\@dev_okay, |
# There is no usual reason to tell the normal LON-CAPA user about this |
\@dev_to_update); |
# question mark. This is just source code magic. |
} elsif ($type eq 'stable') { |
} |
$vers_mod=$module_stable_version_hash{$module}; |
elsif (!$fsflag and !$vok and $vstr=~/not found/) |
$vers_dist=$dist_stable_version_hash{$dist}; |
{ |
($missing,$outdated,$veryokay,$okay,$to_update)= |
push(@dev_missing,'MISSING '.$dist.' (want distribution version '. |
(\@stable_missing,\@stable_outdated,\@stable_veryokay, |
$dist_dev_version_hash{$dist}.')'."\n"); |
\@stable_okay,\@stable_to_update); |
} |
} |
elsif ($fsflag and !$vok and $vstr!~/not found/) |
($vok,$vstr) = have_vers($module,$vers_mod); |
{ |
# print "fsflag: $fsflag, vok: $vok, vstr: $vstr, fs: $fs\n"; |
push(@dev_outdated,'OUTDATED '.$dist.' wanted module: v'. |
if ($fsflag and !$vok and $vstr=~/not found/) { |
$module_dev_version_hash{$module}.'; '.$vstr.' (VERSION_FROM is '. |
push(@$missing,'MISSING '.$dist.' (want distribution '. |
$fs.') want dist version '.$dist_dev_version_hash{$dist}.'.'. |
$module.' version '. $vers_dist.') ?'."\n"); |
"\n"); |
push(@$to_update,$dist); |
} |
# The question mark indicates there was a pattern match in the |
elsif ($fsflag) |
# big_module_string which would be unexpected. |
{ |
# There is no usual reason to tell the normal LON-CAPA user about this |
$vstr=~/found v(.*)/; |
# question mark. This is just source code magic. |
my $vc=$1; |
} elsif (!$fsflag and !$vok and $vstr=~/not found/) { |
if ($vc eq $module_dev_version_hash{$module}) |
push(@$missing,'MISSING '.$dist.' (want distribution '. |
{ |
$module.' version '.$vers_dist.')'."\n"); |
push(@dev_veryokay,'VERYOKAY '.$dist.' wanted: v'. |
push(@$to_update,$dist); |
$module_dev_version_hash{$module}.'; '.$vstr. |
} elsif ($fsflag and !$vok and $vstr!~/not found/) { |
' (VERSION_FROM is '.$fs.') want dist version '. |
push(@$outdated,'OUTDATED '.$dist.' wanted module: v'. |
$dist_dev_version_hash{$dist}."\n"); |
$vers_mod.'; '.$vstr.' (VERSION_FROM is '. |
} |
$fs.') want dist '.$module.' version '.$vers_dist.'.'. "\n"); |
else |
push(@$to_update,$dist); |
{ |
} elsif ($fsflag) { |
push(@dev_okay,'OKAY '.$dist.' wanted: v'. |
$vstr=~/found v(.*)/; |
$module_dev_version_hash{$module}.'; '.$vstr. |
my $vc=$1; |
' (VERSION_FROM is '.$fs.').'."\n"); |
if ($vc eq $vers_mod) { |
} |
push(@$veryokay,'VERYOKAY '.$dist.' wanted: v'. |
} |
$vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs. |
($vok,$vstr) = have_vers($module,$module_stable_version_hash{$module}); |
') want dist '.$module.' version '.$vers_dist."\n"); |
if ($fsflag and !$vok and $vstr=~/not found/) |
} else { |
{ |
push(@$okay,'OKAY '.$dist.' wanted: v'. |
push(@stable_missing,'MISSING '.$dist.' (want distribution version '. |
$vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs.').'."\n"); |
$dist_stable_version_hash{$dist}.') ?'."\n"); |
} |
# The question mark indicates there was a pattern match in the |
} |
# big_module_string which would be unexpected. |
} |
# There is no usual reason to tell the normal LON-CAPA user about this |
} |
# question mark. This is just source code magic. |
|
} |
|
elsif (!$fsflag and !$vok and $vstr=~/not found/) |
|
{ |
|
push(@stable_missing,'MISSING '.$dist.' (want distribution version '. |
|
$dist_stable_version_hash{$dist}.')'."\n"); |
|
} |
|
elsif ($fsflag and !$vok and $vstr!~/not found/) |
|
{ |
|
push(@stable_outdated,'OUTDATED '.$dist.' wanted module: v'. |
|
$module_stable_version_hash{$module}.'; '.$vstr. |
|
' (VERSION_FROM is '.$fs.') want dist version '. |
|
$dist_stable_version_hash{$dist}.'.'."\n"); |
|
} |
|
elsif ($fsflag) |
|
{ |
|
$vstr=~/found v(.*)/; |
|
my $vc=$1; |
|
if ($vc eq $module_stable_version_hash{$module}) |
|
{ |
|
push(@stable_veryokay,'VERYOKAY '.$dist.' wanted: v'. |
|
$module_stable_version_hash{$module}.'; '.$vstr. |
|
' (VERSION_FROM is '.$fs.') want dist version '. |
|
$dist_stable_version_hash{$dist}."\n"); |
|
} |
|
else |
|
{ |
|
push(@stable_okay,'OKAY '.$dist.' wanted: v'. |
|
$module_stable_version_hash{$module}.'; '.$vstr. |
|
' (VERSION_FROM is '.$fs.').'."\n"); |
|
} |
|
} |
|
} |
|
|
|
print("\n".'SYNOPSIS'."\n"); |
print("\n".'SYNOPSIS'."\n"); |
|
|
# ========================================================== The stable report. |
# ========================================================== The stable report. |
print('**** STABLE REPORT (what a production server should worry about)'."\n"); |
print('**** STABLE REPORT (what a production server should worry about)'."\n"); |
if (@stable_missing) { |
if (@stable_missing) |
|
{ |
print('There are '.scalar(@stable_missing).' CPAN distributions missing '. |
print('There are '.scalar(@stable_missing).' CPAN distributions missing '. |
'from this LON-CAPA system.'."\n"); |
'from this LON-CAPA system.'."\n"); |
} |
} |
else { |
else |
|
{ |
print('All perl modules needed by LON-CAPA appear to be present.'."\n"); |
print('All perl modules needed by LON-CAPA appear to be present.'."\n"); |
} |
} |
if (@stable_outdated) { |
if (@stable_outdated) |
|
{ |
print(scalar(@stable_outdated).' CPAN distributions are out-dated '. |
print(scalar(@stable_outdated).' CPAN distributions are out-dated '. |
'on this LON-CAPA system.'."\n"); |
'on this LON-CAPA system.'."\n"); |
} |
} |
if (@stable_veryokay) { |
if (@stable_veryokay) |
|
{ |
print(scalar(@stable_veryokay).' CPAN distributions are an exact match '. |
print(scalar(@stable_veryokay).' CPAN distributions are an exact match '. |
'(based on version number).'."\n"); |
'(based on version number).'."\n"); |
# print @stable_veryokay; |
# print @stable_veryokay; |
} |
} |
if (@stable_okay) { |
if (@stable_okay) |
|
{ |
print(scalar(@stable_okay).' CPAN dists have a version number '. |
print(scalar(@stable_okay).' CPAN dists have a version number '. |
'higher than expected'. |
'higher than expected'. |
' (probably okay).'. "\n"); |
' (probably okay).'. "\n"); |
} |
} |
print("\n"); |
print("\n"); |
|
|
# ===================================================== The development report. |
# ===================================================== The development report. |
print('**** DEVELOPMENT REPORT (do not worry about this unless you are a'. |
print('**** DEVELOPMENT REPORT (do not worry about this unless you are a'. |
' coder)'."\n"); |
' coder)'."\n"); |
if (@dev_missing) { |
if (@dev_missing) |
|
{ |
print('There are '.scalar(@dev_missing).' CPAN distributions missing '. |
print('There are '.scalar(@dev_missing).' CPAN distributions missing '. |
'from this LON-CAPA system.'."\n"); |
'from this LON-CAPA system.'."\n"); |
} |
} |
else { |
else |
|
{ |
print('All perl modules needed by LON-CAPA appear to be present.'."\n"); |
print('All perl modules needed by LON-CAPA appear to be present.'."\n"); |
} |
} |
if (@dev_outdated) { |
if (@dev_outdated) |
|
{ |
print(scalar(@dev_outdated).' CPAN distributions are out-dated '. |
print(scalar(@dev_outdated).' CPAN distributions are out-dated '. |
'on this LON-CAPA system.'."\n"); |
'on this LON-CAPA system.'."\n"); |
} |
} |
if (@dev_veryokay) { |
if (@dev_veryokay) |
|
{ |
print(scalar(@dev_veryokay).' CPAN distributions are an exact match '. |
print(scalar(@dev_veryokay).' CPAN distributions are an exact match '. |
'(based on version number).'."\n"); |
'(based on version number).'."\n"); |
# print @dev_veryokay; |
# print @dev_veryokay; |
} |
} |
if (@dev_okay) { |
if (@dev_okay) |
|
{ |
print(scalar(@stable_okay).' CPAN dists have a version number '. |
print(scalar(@stable_okay).' CPAN dists have a version number '. |
'higher than expected'. |
'higher than expected'. |
' (probably okay).'. "\n"); |
' (probably okay).'. "\n"); |
} |
} |
|
|
if ($mode eq 'synopsis') { |
my $detailstream; |
|
if ($mode eq 'synopsis') |
|
{ |
print("\n".'**** NOTE ****'."\n". |
print("\n".'**** NOTE ****'."\n". |
'After everything completes, please view the CPAN_STATUS_REPORT'. |
'After everything completes, please view the CPAN_STATUS_REPORT'. |
' file for more '."\n".'information on resolving your perl modules.'. |
' file for more '."\n".'information on resolving your perl modules.'. |
Line 487 if ($mode eq 'synopsis') {
|
Line 461 if ($mode eq 'synopsis') {
|
|
|
print('* HIT RETURN WHEN READY TO CONTINUE *'."\n"); |
print('* HIT RETURN WHEN READY TO CONTINUE *'."\n"); |
my $returnkey=<>; |
my $returnkey=<>; |
} |
open(OUT,'>CPAN_STATUS_REPORT'); |
else { |
$detailstream=\*OUT; |
print("\n".'DETAILED STATUS REPORT'."\n"); # Header of status report. |
} |
|
else |
# Print advisory notices. |
{ |
print("\n".'(Consult loncapa/doc/otherfiles/perl_modules.txt for '. |
$detailstream=\*STDOUT; |
'information on'."\n". |
} |
' manual build instructions.)'."\n"); |
print($detailstream |
print("\n".'(**** IMPORTANT NOTICE **** HTML-Parser needs to be patched '. |
"\n".'DETAILED STATUS REPORT'."\n"); # Header of status report. |
"\n".' as described in loncapa/doc/otherfiles/perl_modules.txt)'. |
|
"\n"); |
|
|
|
print("\n".'For manual installation of CPAN distributions, visit'."\n". |
|
'http://search.cpan.org/dist/DistName'."\n". |
|
'where DistName is something like "HTML-Parser" or "libwww-perl".'. |
|
"\n"); |
|
|
|
print("\n".'For automatic installation of CPAN distributions, visit'."\n". |
# Print advisory notices. |
'http://install.lon-capa.org/resources/cpanauto/DistName.bin'."\n". |
print($detailstream |
'where DistName.bin is something like "HTML-Parser.bin" or '. |
"\n".'(Consult loncapa/doc/otherfiles/perl_modules.txt for '. |
'"libwww-perl.bin".'."\n"); |
'information on'."\n". |
|
' manual build instructions.)'."\n"); |
# Print detailed report of stable. |
print($detailstream |
print("\n".'STABLE (DETAILED REPORT)'."\n"); |
"\n".'(**** IMPORTANT NOTICE **** HTML-Parser needs to be patched '. |
print @stable_missing; |
"\n".' as described in loncapa/doc/otherfiles/perl_modules.txt)'. |
print @stable_outdated; |
"\n"); |
print @stable_veryokay; |
|
print @stable_okay; |
print($detailstream |
print("\n".'DEVELOPMENT (DETAILED REPORT)'."\n"); |
"\n".'For manual installation of CPAN distributions, visit'."\n". |
print @dev_missing; |
'http://search.cpan.org/dist/DistName'."\n". |
print @dev_outdated; |
'where DistName is something like "HTML-Parser" or "libwww-perl".'. |
print @dev_veryokay; |
"\n"); |
print @dev_okay; |
|
} |
print($detailstream |
|
"\n".'For automatic installation of CPAN distributions, visit'."\n". |
|
'http://install.lon-capa.org/resources/cpanauto/DistName.bin'."\n". |
|
'where DistName.bin is something like "HTML-Parser.bin" or '. |
|
'"libwww-perl.bin".'."\n"); |
|
|
|
# Print detailed report of stable. |
|
print($detailstream |
|
"\n".'STABLE (DETAILED REPORT)'."\n"); |
|
print $detailstream @stable_missing; |
|
print $detailstream @stable_outdated; |
|
print $detailstream @stable_veryokay; |
|
print $detailstream @stable_okay; |
|
print($detailstream "\n".'DEVELOPMENT (DETAILED REPORT)'."\n"); |
|
print $detailstream @dev_missing; |
|
print $detailstream @dev_outdated; |
|
print $detailstream @dev_veryokay; |
|
print $detailstream @dev_okay; |
|
|
if ($mode eq "html") { |
if ($mode eq "html") |
|
{ |
print(<<END); |
print(<<END); |
</pre> |
</pre> |
</body> |
</body> |
</html> |
</html> |
END |
END |
} |
} |
|
|
|
if ($mode =~ /^update(dev|stable)$/) { |
|
use CPAN; |
|
my $type=$1; |
|
print $detailstream 'Attempting to do a '.$type.' update'."\n"; |
|
my $to_update; |
|
if ($type eq 'dev') { |
|
$to_update=\@dev_to_update; |
|
} elsif ($type eq 'stable') { |
|
$to_update=\@stable_to_update; |
|
} |
|
foreach my $dist (@$to_update) { |
|
my $module=$dist_module_hash{$dist}; |
|
my ($vers_mod,$vers_dist); |
|
if ($type eq 'dev') { |
|
$vers_mod=$module_dev_version_hash{$module}; |
|
$vers_dist=$dist_dev_version_hash{$dist}; |
|
} elsif ($type eq 'stable') { |
|
$vers_mod=$module_stable_version_hash{$module}; |
|
$vers_dist=$dist_stable_version_hash{$dist}; |
|
} |
|
install($module); |
|
} |
|
} |
# ================================================================ Subroutines. |
# ================================================================ Subroutines. |
# Note that "vers_cmp" and "have_vers" are adapted from a bugzilla version 2.16 |
# Note that "vers_cmp" and "have_vers" are adapted from a bugzilla version 2.16 |
# "checksetup.pl" script. |
# "checksetup.pl" script. |