This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Module-Build-0.2803
[perl5.git] / lib / Module / Build / Base.pm
index c8d6275..5007da2 100644 (file)
@@ -499,9 +499,8 @@ EOF
 
   my $ans = $self->_readline();
 
-  if ( !defined($ans) ) {     # Ctrl-D
-    print "\n";
-  } elsif ( !length($ans) ) { # Default
+  if ( !defined($ans)        # Ctrl-D or unattended
+       or !length($ans) ) {  # User hit return
     print "$def\n";
     $ans = $def;
   }
@@ -1233,10 +1232,8 @@ sub check_installed_status {
 sub compare_versions {
   my $self = shift;
   my ($v1, $op, $v2) = @_;
-
-  # for alpha versions - this doesn't cover all cases, but should work for most:
-  $v1 =~ s/_(\d+)\z/$1/;
-  $v2 =~ s/_(\d+)\z/$1/;
+  $v1 = Module::Build::Version->new($v1) 
+    unless UNIVERSAL::isa($v1,'Module::Build::Version');
 
   my $eval_str = "\$v1 $op \$v2";
   my $result   = eval $eval_str;
@@ -1272,6 +1269,13 @@ sub make_executable {
   }
 }
 
+sub is_executable {
+  # We assume this does the right thing on generic platforms, though
+  # we do some other more specific stuff on Unixish platforms.
+  my ($self, $file) = @_;
+  return -x $file;
+}
+
 sub _startperl { shift()->config('startperl') }
 
 # Return any directories in @INC which are not in the default @INC for
@@ -2437,6 +2441,7 @@ sub _find_pods {
   foreach my $spec (@$dirs) {
     my $dir = $self->localize_dir_path($spec);
     next unless -e $dir;
+
     FILE: foreach my $file ( @{ $self->rscan_dir( $dir ) } ) {
       foreach my $regexp ( @{ $args{exclude} } ) {
        next FILE if $file =~ $regexp;
@@ -2496,7 +2501,7 @@ sub htmlify_pods {
 
   my $pods = $self->_find_pods( $self->{properties}{"${type}doc_dirs"},
                                 exclude => [ qr/\.(?:bat|com|html)$/ ] );
-  next unless %$pods;  # nothing to do
+  return unless %$pods;  # nothing to do
 
   unless ( -d $htmldir ) {
     File::Path::mkpath($htmldir, 0, 0755)
@@ -3206,6 +3211,8 @@ sub prepare_metadata {
     die "ERROR: Missing required field '$_' for META.yml\n"
       unless defined($node->{$name}) && length($node->{$name});
   }
+  # Really don't understand why I need the "... if exists" here
+  $node->{version} = $node->{version}->stringify if exists $node->{version};
 
   if (defined( $self->license ) &&
       defined( my $url = $self->valid_licenses->{ $self->license } )) {
@@ -3223,7 +3230,7 @@ sub prepare_metadata {
   }
   my $pkgs = eval { $self->find_dist_packages };
   if ($@) {
-    $self->log_warn("WARNING: Possible missing or corrupt 'MANIFEST' file.\n" .
+    $self->log_warn("$@\nWARNING: Possible missing or corrupt 'MANIFEST' file.\n" .
                    "Nothing to enter for 'provides' field in META.yml\n");
   } else {
     $node->{provides} = $pkgs if %$pkgs;
@@ -3374,6 +3381,11 @@ sub find_dist_packages {
     }
   }
 
+  # Stringify versions
+  for (grep exists $_->{version}, values %prime) {
+    $_->{version} = $_->{version}->stringify;
+  }
+
   return \%prime;
 }
 
@@ -3955,7 +3967,7 @@ sub copy_if_modified {
   $self->log_info("$file -> $to_path\n") if $args{verbose};
   File::Copy::copy($file, $to_path) or die "Can't copy('$file', '$to_path'): $!";
   # mode is read-only + (executable if source is executable)
-  my $mode = 0444 | ( -x $file ? 0111 : 0 );
+  my $mode = 0444 | ( $self->is_executable($file) ? 0111 : 0 );
   chmod( $mode, $to_path );
 
   return $to_path;