r76971 - in /trunk/dh-make-perl: debian/changelog lib/DhMakePerl/Command/Packaging.pm

dmn at users.alioth.debian.org dmn at users.alioth.debian.org
Sat Jul 2 21:27:31 UTC 2011


Author: dmn
Date: Sat Jul  2 21:27:29 2011
New Revision: 76971

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=76971
Log:
When no META file is available, try parsing name and version from Build.PL before Makefile.PL. Closes: #589946

Modified:
    trunk/dh-make-perl/debian/changelog
    trunk/dh-make-perl/lib/DhMakePerl/Command/Packaging.pm

Modified: trunk/dh-make-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/dh-make-perl/debian/changelog?rev=76971&op=diff
==============================================================================
--- trunk/dh-make-perl/debian/changelog (original)
+++ trunk/dh-make-perl/debian/changelog Sat Jul  2 21:27:29 2011
@@ -30,6 +30,8 @@
     alternative dependencies when a given module is found in more than one
     package. Closes: #622852
   * Use CPAN::Meta for processing META.* files, adding support for META.json.
+  * When no META file is available, try parsing name and version from Build.PL
+    before Makefile.PL. Closes: #589946
 
  -- Salvatore Bonaccorso <carnil at debian.org>  Wed, 25 May 2011 16:04:40 +0200
 

Modified: trunk/dh-make-perl/lib/DhMakePerl/Command/Packaging.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/dh-make-perl/lib/DhMakePerl/Command/Packaging.pm?rev=76971&op=diff
==============================================================================
--- trunk/dh-make-perl/lib/DhMakePerl/Command/Packaging.pm (original)
+++ trunk/dh-make-perl/lib/DhMakePerl/Command/Packaging.pm Sat Jul  2 21:27:29 2011
@@ -99,6 +99,12 @@
     catfile( $self->main_file('debian'), $file );
 }
 
+sub build_pl {
+    my ($self) = @_;
+
+    return $self->main_file('Build.PL');
+}
+
 sub makefile_pl {
     my ($self) = @_;
 
@@ -296,7 +302,31 @@
         }
     }
     else {
-        $self->extract_name_ver_from_makefile( $self->makefile_pl );
+        if ( -e $self->build_pl ) {
+            print "Extracting name and version from Build.PL\n";
+            $self->extract_name_ver_from_build( $self->build_pl );
+        }
+        elsif ( -e $self->makefile_pl ) {
+            print "Extracting name and version from Makefile.PL\n";
+            $self->extract_name_ver_from_makefile( $self->makefile_pl );
+        }
+        else {
+            if ( $self->cfg->cpan ) {
+                my $name = $self->cfg->cpan;
+                $name =~ s/::/-/g;
+                $self->perlname($name);
+            }
+            else {
+                die "Unable to determine dist name, no Build.PL, no Makefile.PL\nPlease use --cpan.\n";
+            }
+
+            if ( $self->cfg->version ) {
+                $self->version( $self->cfg->version );
+            }
+            else {
+                die "Unable to determine dist version, no Build.PL, no Makefile.PL\nPlease use --version.\n";
+            }
+        }
         $name = $self->perlname;
         $ver  = $self->version;
     }
@@ -319,6 +349,135 @@
     $self->version($ver);
 
     $self->set_package_name;
+}
+
+sub extract_name_ver_from_build {
+    my ( $self, $build ) = @_;
+    my ( $file, $name, $ver, $vfrom, $dir );
+
+    {
+        local $/ = undef;
+        my $fh = $self->_file_r($build);
+        $file = $fh->getline;
+    }
+
+    # Replace q[quotes] by "quotes"
+    $file =~ s/q\[(.+)]/'$1'/g;
+
+    # Get the name
+    if ($file =~ /([\'\"]?)
+	    dist_name\1\s*
+	    (=>|,)
+	    \s*
+	    ([\'\"]?)
+	    (\S+)\3/xs
+        )
+    {
+        $name = $4;
+    }
+    elsif (
+        $file =~ /([\'\"]?)
+		 module_name\1\s*
+		 (=>|,)
+		 \s*
+		 ([\'\"]?)
+		 (\S+)\3/xs
+        )
+    {
+        $name = $4;
+        $name =~ s/::/-/g;
+
+        # just in case we need it later
+        $vfrom = $name;
+        $vfrom =~ s/-/::/g;
+        $vfrom =~s{::}{/}g;
+        $vfrom = "lib/$vfrom.pm";
+    }
+    $name =~ s/,.*$//;
+
+    # band aid: need to find a solution also for build in directories
+    # warn "name is $name (cpan name: $self->cfg->cpan)\n";
+    $name = $self->cfg->cpan     if ( $name eq '__PACKAGE__' && $self->cfg->cpan );
+    $name = $self->cfg->cpanplus if ( $name eq '__PACKAGE__' && $self->cfg->cpanplus );
+
+    # Get the version
+    if ( defined $self->cfg->version ) {
+
+        # Explicitly specified
+        $ver = $self->cfg->version;
+
+    }
+    elsif ( $file =~ /([\'\"]?)\sdist_version\1\s*(=>|,)\s*([\'\"]?)(\S+)\3/s ) {
+        $ver = $4;
+
+        # Where is the version taken from?
+        $vfrom = $4
+            if $file
+                =~ /([\'\"]?)dist_version_from\1\s*(=>|,)\s*([\'\"]?)(\S+)\3/s;
+
+    }
+    elsif ( $file =~ /([\'\"]?)dist_version_from\1\s*(=>|,)\s*([\'\"]?)(\S+)\3/s )
+    {
+        $vfrom = $4;
+
+    }
+
+    $dir = dirname($build) || './';
+
+    for ( ( $name, $ver ) ) {
+        next unless defined;
+        next unless /^\$/;
+
+        # decode simple vars
+        s/(\$\w+).*/$1/;
+        if ( $file =~ /\Q$_\E\s*=\s*([\'\"]?)(\S+)\1\s*;/ ) {
+            $_ = $2;
+        }
+    }
+
+    unless ( defined $ver ) {
+        local $/ = "\n";
+
+        # apply the method used by makemaker
+        if (    defined $dir
+            and defined $vfrom
+            and -f "$dir/$vfrom"
+            and -r "$dir/$vfrom" )
+        {
+            my $fh = $self->_file_r("$dir/$vfrom");
+            while ( my $lin = $fh->getline ) {
+                if ( $lin =~ /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/ ) {
+                    no strict;
+
+                    #warn "ver: $lin";
+                    $ver = ( eval $lin )[0];
+                    last;
+                }
+            }
+            $fh->close;
+        }
+        else {
+            if ( $self->mod_cpan_version ) {
+                $ver = $self->mod_cpan_version;
+                warn "Cannot use internal module data to gather the "
+                    . "version; using cpan_version\n";
+            }
+            else {
+                die "Cannot use internal module data to gather the "
+                    . "version; use --cpan or --version\n";
+            }
+        }
+    }
+
+    $self->perlname($name);
+    $self->version($ver);
+
+    $self->set_package_name;
+
+    if ( defined($vfrom) ) {
+        $self->extract_desc("$dir/$vfrom");
+        $self->extract_basic_copyright("$dir/$vfrom");
+    }
 }
 
 sub extract_name_ver_from_makefile {




More information about the Pkg-perl-cvs-commits mailing list