Author: dagolden
Date: Wed Apr 1 03:59:50 2009
New Revision: 12663
Modified:
Module-Build/branches/mymeta-yml/ (props changed)
Module-Build/branches/mymeta-yml/Changes
Module-Build/branches/mymeta-yml/MANIFEST.SKIP
Module-Build/branches/mymeta-yml/lib/Module/Build/Base.pm
Log:
restored MYMETA.yml support in this branch (some test bugs remaining)
Modified: Module-Build/branches/mymeta-yml/Changes
==============================================================================
--- Module-Build/branches/mymeta-yml/Changes (original)
+++ Module-Build/branches/mymeta-yml/Changes Wed Apr 1 03:59:50 2009
@@ -2,6 +2,10 @@
0.32_01 -
+ Enhancements
+ - Generates MYMETA.yml during Build.PL (new standard protocol for
communicating
+ configuration between toolchain components)
+
Bug-fixes:
- Module::Build::Compat had stopped adding "PL_FILES => {}" when no
PL_files property was set in Build.PL; restored old behavior and fixed
Modified: Module-Build/branches/mymeta-yml/MANIFEST.SKIP
==============================================================================
--- Module-Build/branches/mymeta-yml/MANIFEST.SKIP (original)
+++ Module-Build/branches/mymeta-yml/MANIFEST.SKIP Wed Apr 1 03:59:50 2009
@@ -33,6 +33,7 @@
^website
/Script$
^META-
+^MYMETA\.yml$
Plugin
doc_check.pl$
^[^/]+\.patch$
Modified: Module-Build/branches/mymeta-yml/lib/Module/Build/Base.pm
==============================================================================
--- Module-Build/branches/mymeta-yml/lib/Module/Build/Base.pm (original)
+++ Module-Build/branches/mymeta-yml/lib/Module/Build/Base.pm Wed Apr 1
03:59:50 2009
@@ -826,7 +826,9 @@
__PACKAGE__->add_property(build_bat => 0);
__PACKAGE__->add_property(config_dir => '_build');
__PACKAGE__->add_property(include_dirs => []);
+__PACKAGE__->add_property(license => 'unknown');
__PACKAGE__->add_property(metafile => 'META.yml');
+__PACKAGE__->add_property(mymetafile => 'MYMETA.yml');
__PACKAGE__->add_property(recurse_into => []);
__PACKAGE__->add_property(use_rcfile => 1);
__PACKAGE__->add_property(create_packlist => 1);
@@ -896,7 +898,6 @@
has_config_data
install_base
libdoc_dirs
- license
magic_number
mb_version
module_name
@@ -1526,17 +1527,26 @@
= map $self->$_(), qw(build_script dist_name dist_version);
if ( $self->delete_filetree($build_script) ) {
- $self->log_info("Removed previous script '$build_script'\n\n");
+ $self->log_info("Removed previous script '$build_script'\n");
}
$self->log_info("Creating new '$build_script' script for ",
- "'$dist_name' version '$dist_version'\n");
+ "'$dist_name' version '$dist_version'\n\n");
my $fh = IO::File->new(">$build_script") or die "Can't create
'$build_script': $!";
$self->print_build_script($fh);
close $fh;
$self->make_executable($build_script);
-
+
+ my $mymetafile = $self->mymetafile;
+ if ( $self->delete_filetree($mymetafile) ) {
+ $self->log_info("Removed previous '$mymetafile'\n");
+ }
+ $self->log_info("Creating new '$mymetafile' with configuration results\n");
+ if ( $self->write_metafile( $mymetafile, $self->generate_metadata ) ) {
+ $self->add_to_cleanup( $mymetafile );
+ }
+
return 1;
}
@@ -3096,6 +3106,8 @@
sub ACTION_distcheck {
my ($self) = @_;
+ $self->_check_mymeta_skip('MANIFEST.SKIP');
+
require ExtUtils::Manifest;
local $^W; # ExtUtils::Manifest is not warnings clean.
my ($missing, $extra) = ExtUtils::Manifest::fullcheck();
@@ -3110,6 +3122,21 @@
}
}
+sub _check_mymeta_skip {
+ my $self = shift;
+ my $maniskip = shift || 'MANIFEST.SKIP';
+
+ require ExtUtils::Manifest;
+ local $^W; # ExtUtils::Manifest is not warnings clean.
+
+ my $skip_check = ExtUtils::Manifest::maniskip($maniskip);
+ my $mymetafile = $self->mymetafile;
+ if ( ! $skip_check->( $mymetafile ) ) {
+ $self->log_warn("File '$maniskip' does not include '$mymetafile'. Adding
it now.\n");
+ $self->_append_maniskip("^$mymetafile\$", $maniskip);
+ }
+}
+
sub _add_to_manifest {
my ($self, $manifest, $lines) = @_;
$lines = [$lines] unless ref $lines;
@@ -3299,9 +3326,11 @@
my ($self) = @_;
$self->depends_on('distmeta');
+
+ $self->_check_mymeta_skip('MANIFEST.SKIP');
my $dist_files = $self->_read_manifest('MANIFEST')
- or die "Can't create distdir without a MANIFEST file - run 'manifest'
action first";
+ or die "Can't create distdir without a MANIFEST file - run 'manifest'
action first.\n";
delete $dist_files->{SIGNATURE}; # Don't copy, create a fresh one
die "No files found in MANIFEST - try running 'manifest' action?\n"
unless ($dist_files and keys %$dist_files);
@@ -3340,6 +3369,19 @@
});
}
+
+sub _append_maniskip {
+ my $self = shift;
+ my $skip = shift;
+ my $file = shift || 'MANIFEST.SKIP';
+ return unless defined $skip && length $skip;
+ my $fh = IO::File->new(">> $file")
+ or die "Can't open $file: $!";
+
+ print $fh "$skip\n";
+ $fh->close();
+}
+
sub _write_default_maniskip {
my $self = shift;
my $file = shift || 'MANIFEST.SKIP';
@@ -3357,6 +3399,9 @@
\B\.svn\b
\B\.cvsignore$
+# Avoid configuration metadata files.
+^MYMETA.yml$
+
# Avoid Makemaker generated and utility files.
\bMakefile$
\bblib
@@ -3408,6 +3453,9 @@
my ($self) = @_;
my $maniskip = 'MANIFEST.SKIP';
+
+ $self->_check_mymeta_skip( $maniskip );
+
unless ( -e 'MANIFEST' || -e $maniskip ) {
$self->log_warn("File '$maniskip' does not exist: Creating a default
'$maniskip'\n");
$self->_write_default_maniskip($maniskip);
@@ -3627,7 +3675,7 @@
foreach (qw(dist_name dist_version dist_author dist_abstract license)) {
(my $name = $_) =~ s/^dist_//;
$add_node->($name, $self->$_());
- die "ERROR: Missing required field '$_' for META.yml\n"
+ die "ERROR: Missing required field '$_' for metafile\n"
unless defined($node->{$name}) && length($node->{$name});
}
$node->{version} = '' . $node->{version}; # Stringify version objects
@@ -3670,7 +3718,7 @@
my $pkgs = eval { $self->find_dist_packages };
if ($@) {
$self->log_warn("$...@\nwarning: Possible missing or corrupt 'MANIFEST'
file.\n" .
- "Nothing to enter for 'provides' field in META.yml\n");
+ "Nothing to enter for 'provides' field in metafile.\n");
} else {
$node->{provides} = $pkgs if %$pkgs;
}
@@ -3714,7 +3762,7 @@
# private stock.
my $manifest = $self->_read_manifest('MANIFEST')
- or die "Can't find dist packages without a MANIFEST file - run 'manifest'
action first";
+ or die "Can't find dist packages without a MANIFEST file\nRun 'Build
manifest' to generate one\n";
# Localize
my %dist_files = map { $self->localize_file_path($_) => $_ }