diff --git a/macros.perl-meta b/macros.perl-meta new file mode 100644 index 0000000000000000000000000000000000000000..20a6d68d622b677259c23bbe73a748afa9446546 --- /dev/null +++ b/macros.perl-meta @@ -0,0 +1,9 @@ +# Usage example: +# %generate_build_requires +# %perlmeta_buildrequires +# +# Where '%perlmeta_buildrequires' -x means test dependencies should be skipped + +%__perlmeta_buildrequires %{_rpmconfigdir}/@VENDOR@/perlmeta_buildrequires + +%perlmeta_buildrequires(x) %__perlmeta_buildrequires %{-x:--notest} diff --git a/perl-generators.spec b/perl-generators.spec index 2ede131667820fbd83187f68334d2d650bea8bca..ec518cd64ad61f4f61c4d7d1a6ff4a8387c13f48 100644 --- a/perl-generators.spec +++ b/perl-generators.spec @@ -1,6 +1,6 @@ Name: perl-generators Version: 1.16 -Release: 3 +Release: 4 Summary: RPM Perl dependencies generators License: GPL-1.0-or-later and GPL-2.0-or-later URL: http://jplesnik.fedorapeople.org/generators @@ -12,6 +12,8 @@ Source0: %{url}/generators-%{version}.tar.gz Source11: perl_from_meta.attr Source12: perl.req-from-meta Source13: perl.recommends-from-meta +Source14: perlmeta_buildrequires +Source15: macros.perl-meta BuildArch: noarch BuildRequires: coreutils findutils make @@ -64,6 +66,10 @@ install -p -m 644 fileattrs/* '%{buildroot}%{_rpmconfigdir}/fileattrs' install %{S:11} %{buildroot}%{_rpmconfigdir}/fileattrs install %{S:12} %{S:13} %{buildroot}%{_rpmconfigdir}/ +install -D -m 0755 %{S:14} %{buildroot}%{_rpmconfigdir}/%{_vendor}/perlmeta_buildrequires +install -D -m 0644 %{S:15} %{buildroot}%{_rpmmacrodir}/macros.perl-meta +sed -i -e 's/@VENDOR@/%{_vendor}/g' %{buildroot}%{_rpmmacrodir}/macros.perl-meta + %check make test @@ -72,8 +78,13 @@ make test %doc Changes TODO %{_rpmconfigdir}/perl.* %{_rpmconfigdir}/fileattrs/perl*.attr +%{_rpmconfigdir}/%{_vendor}/perlmeta_buildrequires +%{_rpmmacrodir}/macros.perl-meta %changelog +* Thu Aug 28 2025 Funda Wang - 1.16-4 +- provide perlmeta_buildrequires script + * Fri Aug 01 2025 Funda Wang - 1.16-3 - use perl-generators to scan META.json for requirements diff --git a/perlmeta_buildrequires b/perlmeta_buildrequires new file mode 100755 index 0000000000000000000000000000000000000000..d3f297092b97f4e837bc4f0ecb6285bacb4c38b6 --- /dev/null +++ b/perlmeta_buildrequires @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +# Inspired from Mageia script: +# https://gitweb.mageia.org/software/rpm/rpm-setup/ +# Licensed under GPL-2.0-or-later (maybe?) +# via: https://svnweb.mageia.org/packages/cauldron/rpm-mageia-setup/current/SPECS/rpm-mageia-setup.spec +# +# Written by Funda Wang , Aug 2025 + +use strict; +use warnings; + +use JSON qw{ from_json }; +use YAML qw{ Load }; +use Getopt::Long; + +# slurp the file +my $path = './META.json'; +my $fh; +open $fh, '<', $path + or (open $fh, '<', './META.yml' and $path = './META.yml') + 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 ); + +my $module; +my $requires; + +# dump the runtime requires with their version +$requires = $meta->{"meta-spec"}{version} >= 2 + ? $meta->{prereqs}{runtime}{requires} + : $meta->{requires}; +foreach $module ( sort keys %$requires ) { + next if $module eq 'perl'; # minimum perl version + my $version = $requires->{$module}; + if ( $version == 0 ) { + print "perl($module)\n"; + } else { + print "perl($module) >= $version\n"; + } +} + +if ($meta->{"meta-spec"}{version} >= 2) { + # dump the configure requires with their version + $requires = $meta->{prereqs}{configure}{requires}; + foreach $module ( sort keys %$requires ) { + next if $module eq 'perl'; # minimum perl version + my $version = $requires->{$module}; + if ( $version == 0 ) { + print "perl($module)\n"; + } else { + print "perl($module) >= $version\n"; + } + } + + my $process_test = 1; + GetOptions ('test!' => \$process_test); + if($process_test) { + # dump the test requires with their version + $requires = $meta->{prereqs}{test}{requires}; + foreach $module ( sort keys %$requires ) { + next if $module eq 'perl'; # minimum perl version + my $version = $requires->{$module}; + if ( $version == 0 ) { + print "perl($module)\n"; + } else { + print "perl($module) >= $version\n"; + } + } + } +} + +exit;