summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/SlackBuild/Rc.pm2
-rw-r--r--lib/SlackBuild/Request.pm3
-rw-r--r--lib/SlackBuilder.pm40
3 files changed, 44 insertions, 1 deletions
diff --git a/lib/SlackBuild/Rc.pm b/lib/SlackBuild/Rc.pm
index c4e5a5f..868e4f5 100644
--- a/lib/SlackBuild/Rc.pm
+++ b/lib/SlackBuild/Rc.pm
@@ -32,13 +32,13 @@ sub logger { shift->{_logger} //= Log::Log4perl::get_logger(__PACKAGE__) }
sub builder { shift->{_builder} }
sub resolve {
my ($self, $reg) = @_;
my @packages;
my @unresolved;
- foreach my $pkg (@{$self->builder->prereq}) {
+ foreach my $pkg (@{$self->builder->prereq_full}) {
my %q;
if (ref($pkg) eq 'HASH') {
%q = %$pkg;
} else {
$q{package} = $pkg;
}
diff --git a/lib/SlackBuild/Request.pm b/lib/SlackBuild/Request.pm
index 8fa831b..581d739 100644
--- a/lib/SlackBuild/Request.pm
+++ b/lib/SlackBuild/Request.pm
@@ -140,12 +140,15 @@ my %attributes = (
},
prereq => {
info => 'REQUIRES',
type => 'ARRAY',
strategy => 'merge'
},
+ build_prereq => {
+ type => 'ARRAY',
+ },
rc => {
type => 'ARRAY',
},
environ => {
type => 'HASH'
},
diff --git a/lib/SlackBuilder.pm b/lib/SlackBuilder.pm
index 3e8b2be..31b9571 100644
--- a/lib/SlackBuilder.pm
+++ b/lib/SlackBuilder.pm
@@ -163,12 +163,52 @@ sub package_build { shift->request->build }
sub rc { shift->request->rc }
sub slackbuild_uri { shift->request->slackbuild_uri }
sub source_uri { shift->request->source_uri }
sub prereq { shift->request->prereq || []}
sub registry { shift->{_registry} }
+sub prereq_full {
+ my $self = shift;
+
+ my %h;
+ # Build initial prerequisite hash.
+ foreach my $r (@{$self->request->prereq || []}) {
+ if (ref($r) eq 'HASH') {
+ $h{$r->{package}} = $r;
+ } else {
+ $h{$r} = $r;
+ }
+ }
+
+ # Apply build prerequisites, if any.
+ # FIXME: Take into account $br->{arch} as well.
+ # FIXME: Shouldn't the loop below be part of 'merge' policy in Request.pm?
+ foreach my $br (@{$self->request->build_prereq || []}) {
+ if (ref($br) eq 'HASH') {
+ if (exists($h{$br->{package}})) {
+ if ($br->{version}) {
+ my $r = $h{$br->{package}};
+ if (ref($r) eq 'HASH') {
+ if (SlackBuild::Registry::Version->new($r->{version}) < SlackBuild::Registry::Version->new($br->{version})) {
+ $h{$br->{package}}{version} = $br->{version}
+ }
+ } else {
+ $h{$br->{package}}{version} = { package => $br->{package},
+ version => $br->{version} }
+ }
+ }
+ } else {
+ $h{$br->{package}} = $br;
+ }
+ } else {
+ $h{$br} = $br;
+ }
+ }
+ return [ map { $h{$_} } sort keys %h ]
+}
+
sub environ {
my $self = shift;
my $env = {%{$self->request->environ // {}},
VERSION => $self->package_version};
if (my $b = $self->package_build) {
$env->{BUILD} = $b;

Return to:

Send suggestions and report system problems to the System administrator.