diff options
-rw-r--r-- | lib/SlackBuild/Rc.pm | 2 | ||||
-rw-r--r-- | lib/SlackBuild/Request.pm | 3 | ||||
-rw-r--r-- | lib/SlackBuilder.pm | 40 |
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 } | |||
166 | sub prereq { shift->request->prereq || []} | 166 | sub prereq { shift->request->prereq || []} |
167 | sub registry { shift->{_registry} } | 167 | sub registry { shift->{_registry} } |
168 | 168 | ||
169 | sub 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 | |||
169 | sub environ { | 209 | sub environ { |
170 | my $self = shift; | 210 | my $self = shift; |
171 | my $env = {%{$self->request->environ // {}}, | 211 | my $env = {%{$self->request->environ // {}}, |