--- loncom/build/system_dependencies/perltest.pl 2003/08/22 19:56:02 1.11 +++ 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.11 2003/08/22 19:56:02 albertel Exp $ +# $Id: perltest.pl,v 1.12 2003/08/22 20:48:38 albertel Exp $ # ### @@ -158,7 +158,7 @@ Foundation, Inc., 59 Temple Place, Suite =cut # =================================== Process version information of this file. -my $VERSION = sprintf("%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/); +my $VERSION = sprintf("%d.%02d", q$Revision: 1.12 $ =~ /(\d+)\.(\d+)/); # ========================== Determine the mode that this script should run in. my $mode; @@ -325,10 +325,12 @@ 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) { @@ -339,44 +341,48 @@ foreach my $dist (keys %dist_module_hash my ($vok,$vstr); foreach my $type ('dev','stable') { my ($vers_mod,$vers_dist); - my ($missing_ref,$outdated_ref,$veryokay_ref,$okay_ref); + 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_ref,$outdated_ref,$veryokay_ref,$okay_ref)= - (\@dev_missing,\@dev_outdated,\@dev_veryokay,\@dev_okay); + ($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_ref,$outdated_ref,$veryokay_ref,$okay_ref)= + ($missing,$outdated,$veryokay,$okay,$to_update)= (\@stable_missing,\@stable_outdated,\@stable_veryokay, - \@stable_okay); + \@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_ref,'MISSING '.$dist.' (want distribution '. + 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_ref,'MISSING '.$dist.' (want distribution '. + 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_ref,'OUTDATED '.$dist.' wanted module: v'. + 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_ref,'VERYOKAY '.$dist.' wanted: v'. + push(@$veryokay,'VERYOKAY '.$dist.' wanted: v'. $vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs. ') want dist '.$module.' version '.$vers_dist."\n"); } else { - push(@$okay_ref,'OKAY '.$dist.' wanted: v'. + push(@$okay,'OKAY '.$dist.' wanted: v'. $vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs.').'."\n"); } } @@ -509,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.