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 | |||
@@ -32,13 +32,13 @@ sub logger { shift->{_logger} //= Log::Log4perl::get_logger(__PACKAGE__) } | |||
32 | sub builder { shift->{_builder} } | 32 | sub builder { shift->{_builder} } |
33 | 33 | ||
34 | sub resolve { | 34 | 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; |
42 | } else { | 42 | } else { |
43 | $q{package} = $pkg; | 43 | $q{package} = $pkg; |
44 | } | 44 | } |
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 = ( | |||
140 | }, | 140 | }, |
141 | prereq => { | 141 | prereq => { |
142 | info => 'REQUIRES', | 142 | info => 'REQUIRES', |
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 | }, |
149 | environ => { | 152 | environ => { |
150 | type => 'HASH' | 153 | type => 'HASH' |
151 | }, | 154 | }, |
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 } | |||
163 | sub rc { shift->request->rc } | 163 | sub rc { shift->request->rc } |
164 | sub slackbuild_uri { shift->request->slackbuild_uri } | 164 | sub slackbuild_uri { shift->request->slackbuild_uri } |
165 | sub source_uri { shift->request->source_uri } | 165 | 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 // {}}, |
172 | VERSION => $self->package_version}; | 212 | VERSION => $self->package_version}; |
173 | if (my $b = $self->package_build) { | 213 | if (my $b = $self->package_build) { |
174 | $env->{BUILD} = $b; | 214 | $env->{BUILD} = $b; |