From 6280dda44382635caada04f1bbd5aeb5e9d1c63f Mon Sep 17 00:00:00 2001 From: Leon Timmermans Date: Tue, 8 Apr 2025 21:56:05 +0200 Subject: [PATCH 1/2] Don't regenerate mymeta if dynamic_config==0 --- lib/Module/Build/Base.pm | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/Module/Build/Base.pm b/lib/Module/Build/Base.pm index 10b653f9..8ed9f4af 100644 --- a/lib/Module/Build/Base.pm +++ b/lib/Module/Build/Base.pm @@ -1927,14 +1927,18 @@ sub create_mymeta { my $mymeta_obj; if ($meta_obj) { - # if we have metadata, just update it - my %updated = ( - %{ $meta_obj->as_struct({ version => 2.0 }) }, - prereqs => $self->_normalize_prereqs, - dynamic_config => 0, - generated_by => "Module::Build version $Module::Build::VERSION", - ); - $mymeta_obj = CPAN::Meta->new( \%updated, { lazy_validation => 0 } ); + if ($meta_obj->dynamic_config == 0) { + $mymeta_obj = $meta_obj; + } else { + # if we have metadata, just update it + my %updated = ( + %{ $meta_obj->as_struct({ version => 2.0 }) }, + prereqs => $self->_normalize_prereqs, + dynamic_config => 0, + generated_by => "Module::Build version $Module::Build::VERSION", + ); + $mymeta_obj = CPAN::Meta->new( \%updated, { lazy_validation => 0 } ); + } } else { $mymeta_obj = $self->_get_meta_object(quiet => 0, dynamic => 0, fatal => 1, auto => 0); From 99cd1c87bb2b9a6dc3f2dc8402223cbc6130411b Mon Sep 17 00:00:00 2001 From: Leon Timmermans Date: Tue, 8 Apr 2025 22:05:51 +0200 Subject: [PATCH 2/2] Add prereqs in meta_merge to mymeta --- lib/Module/Build/Base.pm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Module/Build/Base.pm b/lib/Module/Build/Base.pm index 8ed9f4af..cc5aec2a 100644 --- a/lib/Module/Build/Base.pm +++ b/lib/Module/Build/Base.pm @@ -1931,9 +1931,22 @@ sub create_mymeta { $mymeta_obj = $meta_obj; } else { # if we have metadata, just update it + my $prereqs = $self->_normalize_prereqs; + if (my $merge = $self->meta_merge) { + unless ($merge->{'meta-spec'} && ($merge->{'meta-spec'}{version} // '1.4') eq '2') { + require CPAN::Meta::Converter; + $merge = CPAN::Meta::Converter->new($merge)->upgrade_fragment; + } + if ($merge->{prereqs}) { + my $left = CPAN::Meta::Prereqs->new($prereqs); + my $right = CPAN::Meta::Prereqs->new($merge->{prereqs}); + $prereqs = $left->with_merged_prereqs($right)->as_string_hash; + } + } + my %updated = ( %{ $meta_obj->as_struct({ version => 2.0 }) }, - prereqs => $self->_normalize_prereqs, + prereqs => $prereqs, dynamic_config => 0, generated_by => "Module::Build version $Module::Build::VERSION", );