aboutsummaryrefslogtreecommitdiff
path: root/bpkg/package.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-03-21 21:40:28 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-04-19 19:39:55 +0300
commit15dff3c592385466406732cd6ced809dc28cf2e2 (patch)
tree1da9f0738293eb7906d92ab010a79c689087b655 /bpkg/package.cxx
parent46842f6cf74d085ced382dd0c187f6a7a578913c (diff)
Implement build plan simulation
Diffstat (limited to 'bpkg/package.cxx')
-rw-r--r--bpkg/package.cxx29
1 files changed, 26 insertions, 3 deletions
diff --git a/bpkg/package.cxx b/bpkg/package.cxx
index da862ef..29460e4 100644
--- a/bpkg/package.cxx
+++ b/bpkg/package.cxx
@@ -145,6 +145,28 @@ namespace bpkg
return result ();
}
+ vector<shared_ptr<available_package>>
+ filter (const vector<shared_ptr<repository>>& rps,
+ odb::result<available_package>&& apr,
+ bool prereq)
+ {
+ vector<shared_ptr<available_package>> aps;
+
+ for (shared_ptr<available_package> ap: pointer_result (apr))
+ {
+ for (const shared_ptr<repository> r: rps)
+ {
+ if (filter (r, ap, prereq) != nullptr)
+ {
+ aps.push_back (move (ap));
+ break;
+ }
+ }
+ }
+
+ return aps;
+ }
+
// selected_package
//
string selected_package::
@@ -201,6 +223,9 @@ namespace bpkg
string mc (sha256 (o, d / manifest_file));
+ // The selected package must not be "simulated" (see pkg-build for
+ // details).
+ //
assert (p->manifest_checksum);
bool changed (mc != *p->manifest_checksum);
@@ -211,9 +236,7 @@ namespace bpkg
//
if (!changed && p->external ())
{
- dir_path src_root (p->src_root->absolute ()
- ? *p->src_root
- : c / *p->src_root);
+ dir_path src_root (p->effective_src_root (c));
// We need to complete and normalize the source directory as it may
// generally be completed against the configuration directory (unlikely