Diff for /loncom/build/system_dependencies/perltest.pl between versions 1.8 and 1.12

version 1.8, 2002/09/08 15:53:26 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 331  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 490  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.

Removed from v.1.8  
changed lines
  Added in v.1.12


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>