Update of /cvsroot/fink/experimental/chrisdolan/lib/Fink/CPANPLUS
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12802/lib/Fink/CPANPLUS

Modified Files:
        Module.pm 
Log Message:
v1.36
Better heuristics for guessing license.
Better abstraction of license and POD files.


Index: Module.pm
===================================================================
RCS file: /cvsroot/fink/experimental/chrisdolan/lib/Fink/CPANPLUS/Module.pm,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- Module.pm   19 Sep 2005 16:10:05 -0000      1.8
+++ Module.pm   3 Oct 2005 16:32:07 -0000       1.9
@@ -57,18 +57,18 @@
    my $self = shift;
 
    # Check files that are for-sure
-   my @licenses = grep /^(copyright|copying|license|gpl|lgpl|artistic)/i, 
$self->root_files();
+   my @licenses = grep /^(copyright|copying|license|gpl|lgpl|artistic)\b/i, 
$self->root_files();
    return $licenses[0] if (@licenses > 0);
 
    # Check doc files that might have copyright inline
    foreach my $file (grep(/^readme/i, $self->root_files()),
-                     grep({defined $_} $self->makefile->{version_from}))
+                     grep({defined $_} $self->version_from(), 
$self->version_from_pod()))
    {
       my $filename = $self->extract_dir()."/".$file;
       if (-f $filename)
       {
          my $content = read_file($filename);
-         if ($content =~ /licen[sc]e|licensing|copyright/i) # [sc] is to catch 
a common typo
+         if ($content =~ /\b(?:licen[sc]e|licensing|copyright)\b/i) # [sc] is 
to catch a common typo
          {
             return $file;
          }
@@ -131,24 +131,82 @@
 {
    my $self = shift;
 
-   return $self->yml->{license} || $self->dslip->{license};
+   my $license = $self->yml->{license} || $self->dslip->{license};
+   return $license if ($license);
+
+   foreach my $licensefile (
+      $self->version_from(),
+      $self->version_from_pod(),
+      $self->license_filename(),
+   )
+   {
+      if ($licensefile)
+      {
+         my $filename = $self->extract_dir()."/".$licensefile;
+         if (-f $filename)
+         {
+            my $content = read_file($filename);
+            if ($content =~ 
/=head\d\s+(?:licen[cs]e|licensing|copyright|legal)\b(.*?)(=head\\d.*|=cut.*|)$/si)
+            {
+               my $licensetext = $1;
+               my @phrases = (
+                  "under the same (?:terms|license) as Perl itself",
+               );
+               my $regex = join "|", map {join("\\s+", split /\s+/, $_)} 
@phrases;
+               if ($licensetext =~ /$regex/is)
+               {
+                  return "perl";
+               }
+            }
+         }
+      }
+   }
+
+   return undef;
 }
 
 sub version_from
 {
    my $self = shift;
-   return
-       $self->buildfile->{version_from} ||
-       $self->makefile->{version_from};
+   my @candidates = (
+      $self->yml->{version_from},
+      $self->buildfile->{version_from},
+      $self->makefile->{version_from},
+   );
+
+   for my $filename (@candidates)
+   {
+      if ($filename && -f $self->extract_dir."/".$filename)
+      {
+         return $filename;
+      }
+   }
+   return undef;
+}
+sub version_from_pod
+{
+   my $self = shift;
+
+   my $version_from = $self->version_from();
+   my $version_pod;
+   if ($version_from && $version_from =~ /\.pm$/)
+   {
+      ($version_pod = $version_from) =~ s/\.pm$/.pod/;
+   }
+   return $version_pod;
 }
 
 sub description
 {
    my $self = shift;
 
-   my $desc = $self->yml->{abstract} || $self->makefile->{abstract} || 
$self->{mod}->description();
+   my $desc =
+       $self->yml->{abstract} ||
+       $self->makefile->{abstract} ||
+       $self->{mod}->description();
+
    if (!$desc && 
-       $self->mainfile() =~ /=head1\s+NAME\s+[\w\-\'\:]+\s+\-\s+([^\r\n]+)/s)
+       $self->mainpod() =~ /=head1\s+NAME\s+[\w\-\'\:]+\s+\-\s+([^\r\n]+)/s)
    {
       $desc = $1;
    }
@@ -314,8 +372,7 @@
    if (!defined $self->{mainfile})
    {
       $self->{mainfile} = "";
-      my $version_from = ($self->buildfile->{version_from} ||
-                          $self->makefile->{version_from});
+      my $version_from = $self->version_from();
       if ($version_from)
       {
          my $filename = $self->extract_dir."/".$version_from;
@@ -328,6 +385,29 @@
    return $self->{mainfile};
 }
 
+sub mainpod
+{
+   my $self = shift;
+   if (!defined $self->{mainpod})
+   {
+      $self->{mainpod} = "";
+      my $version_pod = $self->version_from_pod();
+      if ($version_pod)
+      {
+         my $filename = $self->extract_dir."/".$version_pod;
+         if (-f $filename)
+         {
+            $self->{mainpod} = read_file($filename);
+         }
+      }
+      if (!$self->{mainpod})
+      {
+         $self->{mainpod} = $self->mainfile();
+      }
+   }
+   return $self->{mainpod};
+}
+
 sub yml
 {
    my $self = shift;
@@ -352,14 +432,14 @@
          }
          else
          {
-            if ($meta->{license})
-            {
-               $self->{yml}->{license} = $meta->{license};
-            }
-            if ($meta->{abstract})
+            for my $key (qw(license abstract version_from))
             {
-               $self->{yml}->{abstract} = $meta->{abstract};
+               if ($meta->{$key})
+               {
+                  $self->{yml}->{$key} = $meta->{$key};
+               }
             }
+
             my %libtrans = (
                             requires => "depends",
                             build_requires => "builddepends",



-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Fink-commits mailing list
Fink-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to