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
@@ -35,7 +35,7 @@ sub resolve {
35 my ($self, $reg) = @_; 35 my ($self, $reg) = @_;
36 my @packages; 36 my @packages;
37 my @unresolved; 37 my @unresolved;
38 foreach my $pkg (@{$self->builder->prereq}) { 38 foreach my $pkg (@{$self->builder->prereq_full}) {
39 my %q; 39 my %q;
40 if (ref($pkg) eq 'HASH') { 40 if (ref($pkg) eq 'HASH') {
41 %q = %$pkg; 41 %q = %$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
@@ -143,6 +143,9 @@ my %attributes = (
143 type => 'ARRAY', 143 type => 'ARRAY',
144 strategy => 'merge' 144 strategy => 'merge'
145 }, 145 },
146 build_prereq => {
147 type => 'ARRAY',
148 },
146 rc => { 149 rc => {
147 type => 'ARRAY', 150 type => 'ARRAY',
148 }, 151 },
diff --git a/lib/SlackBuilder.pm b/lib/SlackBuilder.pm
index 3e8b2be..31b9571 100644
--- a/lib/SlackBuilder.pm
+++ b/lib/SlackBuilder.pm
@@ -166,6 +166,46 @@ sub source_uri { shift->request->source_uri }
166sub prereq { shift->request->prereq || []} 166sub prereq { shift->request->prereq || []}
167sub registry { shift->{_registry} } 167sub registry { shift->{_registry} }
168 168
169sub prereq_full {
170 my $self = shift;
171
172 my %h;
173 # Build initial prerequisite hash.
174 foreach my $r (@{$self->request->prereq || []}) {
175 if (ref($r) eq 'HASH') {
176 $h{$r->{package}} = $r;
177 } else {
178 $h{$r} = $r;
179 }
180 }
181
182 # Apply build prerequisites, if any.
183 # FIXME: Take into account $br->{arch} as well.
184 # FIXME: Shouldn't the loop below be part of 'merge' policy in Request.pm?
185 foreach my $br (@{$self->request->build_prereq || []}) {
186 if (ref($br) eq 'HASH') {
187 if (exists($h{$br->{package}})) {
188 if ($br->{version}) {
189 my $r = $h{$br->{package}};
190 if (ref($r) eq 'HASH') {
191 if (SlackBuild::Registry::Version->new($r->{version}) < SlackBuild::Registry::Version->new($br->{version})) {
192 $h{$br->{package}}{version} = $br->{version}
193 }
194 } else {
195 $h{$br->{package}}{version} = { package => $br->{package},
196 version => $br->{version} }
197 }
198 }
199 } else {
200 $h{$br->{package}} = $br;
201 }
202 } else {
203 $h{$br} = $br;
204 }
205 }
206 return [ map { $h{$_} } sort keys %h ]
207}
208
169sub environ { 209sub environ {
170 my $self = shift; 210 my $self = shift;
171 my $env = {%{$self->request->environ // {}}, 211 my $env = {%{$self->request->environ // {}},

Return to:

Send suggestions and report system problems to the System administrator.