aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--NEWS2
-rwxr-xr-xperl.recommends-from-meta57
-rw-r--r--perl_from_meta.attr1
4 files changed, 61 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 12e24a3..ddfdd73 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,6 +31,7 @@ pkg_scripts = \
perl.prov \
perl.req \
perl.req-from-meta \
+ perl.recommends-from-meta \
php.prov \
php.req
diff --git a/NEWS b/NEWS
index ae4d02b..ce2d3d9 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,5 @@
+- generate Recommends from perl META (mga#33945)
+
Version 2.82 - 28 December 2024, by Jani Välimaa
- macros: automatically use %set_build_flags macro for build, check, and install phases
- brp-mangle-shebangs: restore handling of %__brp_mangle_shebangs_exclude
diff --git a/perl.recommends-from-meta b/perl.recommends-from-meta
new file mode 100755
index 0000000..c0c7521
--- /dev/null
+++ b/perl.recommends-from-meta
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use JSON qw{ from_json };
+use YAML qw{ Load };
+
+# slurp the file
+my $path = <>;
+chomp($path);
+open my $fh, '<', $path or die "can't open $path: $!";
+my $data = do { local $/; <$fh> };
+close $fh;
+
+# parse meta - either yaml or json
+my $meta = $path =~ /\.yml$/
+ ? Load( $data )
+ : from_json( $data );
+
+# dump the recommends with their version
+my $recommends = $meta->{"meta-spec"}{version} >= 2
+ ? $meta->{prereqs}{runtime}{recommends}
+ : $meta->{recommends};
+foreach my $module ( sort keys %$recommends ) {
+ next if $module eq 'perl'; # minimum perl version
+ my $version = $recommends->{$module};
+ if ( $version == 0 ) {
+ print "perl($module)\n";
+ } else {
+ my $v = qx{ rpm --eval '%perl_convert_version $version' };
+ print "perl($module) >= $v";
+ }
+}
+
+exit;
+
+=head1 NAME
+
+perl.recommends-from-meta - extract recommends from meta file
+
+=head1 SYNOPSIS
+
+ $ perl.recommends-from-meta /path/to/META.yml
+ $ perl.recommends-from-meta /path/to/META.json
+
+=head1 DESCRIPTION
+
+This script will extract Perl recommends from the distribution meta
+file. For each such recommends, it'll convert the minimum version to
+follow Mageia perl versioning (using C<%perl_convert_version>), and
+print them as:
+
+ perl(Foo::Bar)
+ perl(App::Frobnizer) >= 1.23.456
+
+Minimum perl version are skipped.
diff --git a/perl_from_meta.attr b/perl_from_meta.attr
index cabf1b0..4a44c19 100644
--- a/perl_from_meta.attr
+++ b/perl_from_meta.attr
@@ -1,2 +1,3 @@
+%__perl_from_meta_recommends %{_rpmconfigdir}/mageia/perl.recommends-from-meta
%__perl_from_meta_requires %{_rpmconfigdir}/mageia/perl.req-from-meta
%__perl_from_meta_path /(META.json|(MY|)META.yml)$