--- loncom/build/system_dependencies/perltest.pl 2002/11/04 01:57:53 1.9 +++ loncom/build/system_dependencies/perltest.pl 2003/08/22 20:48:38 1.12 @@ -2,7 +2,7 @@ # perltest.pl - script to test the status of perl modules on a LON-CAPA system # -# $Id: perltest.pl,v 1.9 2002/11/04 01:57:53 harris41 Exp $ +# $Id: perltest.pl,v 1.12 2003/08/22 20:48:38 albertel Exp $ # ### @@ -16,10 +16,6 @@ B - Test status of perl mod # 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 @@ -142,8 +138,6 @@ Ratings: 1=horrible 2=poor 3=fair 4=good =head1 AUTHOR -Scott Harrison, sharrison@users.sourceforge.net, 2001, 2002 - This software is distributed under the General Public License, version 2, June 1991 (which is the same terms as LON-CAPA). @@ -164,7 +158,7 @@ Foundation, Inc., 59 Temple Place, Suite =cut # =================================== Process version information of this file. -my $VERSION = sprintf("%d.%02d", q$Revision: 1.9 $ =~ /(\d+)\.(\d+)/); +my $VERSION = sprintf("%d.%02d", q$Revision: 1.12 $ =~ /(\d+)\.(\d+)/); # ========================== Determine the mode that this script should run in. my $mode; @@ -331,104 +325,69 @@ my @dev_missing; my @dev_outdated; my @dev_okay; my @dev_veryokay; +my @dev_to_update; my @stable_missing; my @stable_outdated; my @stable_okay; my @stable_veryokay; +my @stable_to_update; # ===== 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 $fs = $modulefs_hash{$module}; my $fsflag = 0; - if ($big_module_string =~ /$fs/) - { - $fsflag = 1; - } + if ($big_module_string =~ /$fs/) { $fsflag = 1; } my ($vok,$vstr); - ($vok,$vstr) = have_vers($module,$module_dev_version_hash{$module}); - # print "fsflag: $fsflag, vok: $vok, vstr: $vstr, fs: $fs\n"; - if ($fsflag and !$vok and $vstr=~/not found/) - { - push(@dev_missing,'MISSING '.$dist.' (want distribution version '. - $dist_dev_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(@dev_missing,'MISSING '.$dist.' (want distribution version '. - $dist_dev_version_hash{$dist}.')'."\n"); - } - elsif ($fsflag and !$vok and $vstr!~/not found/) - { - push(@dev_outdated,'OUTDATED '.$dist.' wanted module: v'. - $module_dev_version_hash{$module}.'; '.$vstr.' (VERSION_FROM is '. - $fs.') want dist version '.$dist_dev_version_hash{$dist}.'.'. - "\n"); - } - elsif ($fsflag) - { - $vstr=~/found v(.*)/; - my $vc=$1; - if ($vc eq $module_dev_version_hash{$module}) - { - push(@dev_veryokay,'VERYOKAY '.$dist.' wanted: v'. - $module_dev_version_hash{$module}.'; '.$vstr. - ' (VERSION_FROM is '.$fs.') want dist version '. - $dist_dev_version_hash{$dist}."\n"); - } - else - { - push(@dev_okay,'OKAY '.$dist.' wanted: v'. - $module_dev_version_hash{$module}.'; '.$vstr. - ' (VERSION_FROM is '.$fs.').'."\n"); - } - } - ($vok,$vstr) = have_vers($module,$module_stable_version_hash{$module}); - if ($fsflag and !$vok and $vstr=~/not found/) - { - push(@stable_missing,'MISSING '.$dist.' (want distribution version '. - $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"); - } - } - } + foreach my $type ('dev','stable') { + my ($vers_mod,$vers_dist); + my ($missing,$outdated,$veryokay,$okay,$to_update); + if ($type eq 'dev') { + $vers_mod=$module_dev_version_hash{$module}; + $vers_dist=$dist_dev_version_hash{$dist}; + ($missing,$outdated,$veryokay,$okay,$to_update)= + (\@dev_missing,\@dev_outdated,\@dev_veryokay,\@dev_okay, + \@dev_to_update); + } elsif ($type eq 'stable') { + $vers_mod=$module_stable_version_hash{$module}; + $vers_dist=$dist_stable_version_hash{$dist}; + ($missing,$outdated,$veryokay,$okay,$to_update)= + (\@stable_missing,\@stable_outdated,\@stable_veryokay, + \@stable_okay,\@stable_to_update); + } + ($vok,$vstr) = have_vers($module,$vers_mod); + # print "fsflag: $fsflag, vok: $vok, vstr: $vstr, fs: $fs\n"; + if ($fsflag and !$vok and $vstr=~/not found/) { + push(@$missing,'MISSING '.$dist.' (want distribution '. + $module.' version '. $vers_dist.') ?'."\n"); + push(@$to_update,$dist); + # 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(@$missing,'MISSING '.$dist.' (want distribution '. + $module.' version '.$vers_dist.')'."\n"); + push(@$to_update,$dist); + } elsif ($fsflag and !$vok and $vstr!~/not found/) { + push(@$outdated,'OUTDATED '.$dist.' wanted module: v'. + $vers_mod.'; '.$vstr.' (VERSION_FROM is '. + $fs.') want dist '.$module.' version '.$vers_dist.'.'. "\n"); + push(@$to_update,$dist); + } elsif ($fsflag) { + $vstr=~/found v(.*)/; + my $vc=$1; + if ($vc eq $vers_mod) { + push(@$veryokay,'VERYOKAY '.$dist.' wanted: v'. + $vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs. + ') want dist '.$module.' version '.$vers_dist."\n"); + } else { + push(@$okay,'OKAY '.$dist.' wanted: v'. + $vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs.').'."\n"); + } + } + } +} print("\n".'SYNOPSIS'."\n"); @@ -556,6 +515,29 @@ if ($mode eq "html") 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. # Note that "vers_cmp" and "have_vers" are adapted from a bugzilla version 2.16 # "checksetup.pl" script.