Author: dagolden
Date: Mon May 18 06:04:25 2009
New Revision: 12774
Modified:
Module-Build/trunk/Changes
Module-Build/trunk/lib/Module/Build/Base.pm
Log:
Normalize versions in META.yml; add M::B to configure_requires
>From Changes:
- Adds current Module::Build to configure_requires (and build_requires)
if no configure_requires is specified
- Always normalizes version number tuples in META.yml (e.g. 'v1.2.0')
(Partially addresses RT#46150)
- Normalizes a generated dist_version (e.g. from a .pm file) --
dist_version set manually in Build.PL is not normalized
Modified: Module-Build/trunk/Changes
==============================================================================
--- Module-Build/trunk/Changes (original)
+++ Module-Build/trunk/Changes Mon May 18 06:04:25 2009
@@ -5,6 +5,14 @@
Bug-fixes:
- Fixed RT#42724: consolidated VMS fixes [patch by CBERRY]
+ Other:
+ - Adds current Module::Build to configure_requires (and build_requires)
+ if no configure_requires is specified
+ - Always normalizes version number tuples in META.yml (e.g. 'v1.2.0')
+ (Partially addresses RT#46150)
+ - Normalizes a generated dist_version (e.g. from a .pm file) --
+ dist_version set manually in Build.PL is not normalized
+
0.33 - Sun May 3 20:16:34 PDT 2009
Bug-fixes:
Modified: Module-Build/trunk/lib/Module/Build/Base.pm
==============================================================================
--- Module-Build/trunk/lib/Module/Build/Base.pm (original)
+++ Module-Build/trunk/lib/Module/Build/Base.pm Mon May 18 06:04:25 2009
@@ -1040,7 +1040,7 @@
my $version_from = File::Spec->catfile( split( qr{/}, $dist_version_from )
);
my $pm_info = Module::Build::ModuleInfo->new_from_file( $version_from )
or die "Can't find file $version_from to determine version";
- $p->{dist_version} = $pm_info->version();
+ $p->{dist_version} = $self->normalize_version( $pm_info->version() );
}
die ("Can't determine distribution version, must supply either
'dist_version',\n".
@@ -3613,6 +3613,27 @@
return 1;
}
+sub normalize_version {
+ my ($self, $version) = @_;
+ if ( $version =~ /[=<>!,]/ ) { # logic, not just version
+ # take as is without modification
+ }
+ elsif ( ref $version eq 'version' ||
+ ref $version eq 'Module::Build::Version' ) { # version objects
+ my $string = $version->stringify;
+ # normalize leading-v: "v1.2" -> "v1.2.0"
+ $version = substr($string,0,1) eq 'v' ? $version->normal : $string;
+ }
+ elsif ( $version =~ /^[^v][^.]*\.[^.]+\./ ) { # no leading v, multiple dots
+ # normalize string tuples without "v": "1.2.3" -> "v1.2.3"
+ $version = "v$version";
+ }
+ else {
+ # leave alone
+ }
+ return $version;
+}
+
sub prepare_metadata {
my ($self, $node, $keys) = @_;
my $p = $self->{properties};
@@ -3630,7 +3651,7 @@
die "ERROR: Missing required field '$_' for META.yml\n"
unless defined($node->{$name}) && length($node->{$name});
}
- $node->{version} = '' . $node->{version}; # Stringify version objects
+ $node->{version} = $self->normalize_version($node->{version});
if (defined( my $l = $self->license )) {
die "Unknown license string '$l'"
@@ -3652,18 +3673,35 @@
if (exists $p->{configure_requires}) {
foreach my $spec (keys %{$p->{configure_requires}}) {
warn ("Warning: $spec is listed in 'configure_requires', but ".
- "it is not found in any of the other prereq fields.\n")
- unless grep exists $p->{$_}{$spec},
- grep !/conflicts$/, @{$self->prereq_action_types};
+ "it is not found in any of the other prereq fields.\n")
+ unless grep exists $p->{$_}{$spec},
+ grep !/conflicts$/, @{$self->prereq_action_types};
}
}
- foreach ( 'configure_requires', @{$self->prereq_action_types} ) {
- if (exists $p->{$_} and keys %{ $p->{$_} }) {
- $add_node->($_, $p->{$_});
+ # copy prereq data structures so we can modify them before writing to META
+ my %prereq_types;
+ for my $type ( 'configure_requires', @{$self->prereq_action_types} ) {
+ if (exists $p->{$type}) {
+ for my $mod ( keys %{ $p->{$type} } ) {
+ $prereq_types{$type}{$mod} =
+ $self->normalize_version($p->{$type}{$mod});
+ }
}
}
+ # add current Module::Build to configure_requires if there
+ # isn't a configure_requires already specified
+ if ( ! $prereq_types{'configure_requires'} ) {
+ for my $t ('configure_requires', 'build_requires') {
+ $prereq_types{$t}{'Module::Build'} = $VERSION;
+ }
+ }
+
+ for my $t ( keys %prereq_types ) {
+ $add_node->($t, $prereq_types{$t});
+ }
+
if (exists $p->{dynamic_config}) {
$add_node->('dynamic_config', $p->{dynamic_config});
}
@@ -3820,9 +3858,10 @@
}
}
- # Stringify versions. Can't use exists() here because of bug in YAML::Node.
+ # Normalize versions. Can't use exists() here because of bug in YAML::Node.
+ # XXX "bug in YAML::Node" comment seems irrelvant -- dagolden, 2009-05-18
for (grep defined $_->{version}, values %prime) {
- $_->{version} = '' . $_->{version};
+ $_->{version} = $self->normalize_version( $_->{version} );
}
return \%prime;