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
@@ -37,3 +37,3 @@ sub resolve {
my @unresolved;
- foreach my $pkg (@{$self->builder->prereq}) {
+ foreach my $pkg (@{$self->builder->prereq_full}) {
my %q;
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
@@ -145,2 +145,5 @@ my %attributes = (
},
+ build_prereq => {
+ type => 'ARRAY',
+ },
rc => {
diff --git a/lib/SlackBuilder.pm b/lib/SlackBuilder.pm
index 3e8b2be..31b9571 100644
--- a/lib/SlackBuilder.pm
+++ b/lib/SlackBuilder.pm
@@ -168,2 +168,42 @@ 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 {

Return to:

Send suggestions and report system problems to the System administrator.