aboutsummaryrefslogtreecommitdiff
path: root/bpkg/package.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2022-02-07 14:02:11 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2022-02-07 14:02:44 +0300
commit2dbac9c6d08697e28af28178b2ce041140164842 (patch)
tree293996fcce76c18f03ef8f4577e92a0e04f0ffd7 /bpkg/package.cxx
parent0e954df70c6133d84660ee446fdb33ecb61a8c3f (diff)
Introduce package_skeleton for evaluating dependency clauses
Diffstat (limited to 'bpkg/package.cxx')
-rw-r--r--bpkg/package.cxx33
1 files changed, 33 insertions, 0 deletions
diff --git a/bpkg/package.cxx b/bpkg/package.cxx
index b544773..c8ad9d6 100644
--- a/bpkg/package.cxx
+++ b/bpkg/package.cxx
@@ -6,6 +6,7 @@
#include <bpkg/database.hxx>
#include <bpkg/checksum.hxx>
+#include <bpkg/pkg-verify.hxx>
#include <bpkg/diagnostics.hxx>
#include <bpkg/satisfaction.hxx>
#include <bpkg/manifest-utility.hxx>
@@ -539,6 +540,38 @@ namespace bpkg
return lazy_shared_ptr<selected_package> (ddb, move (prerequisite));
}
+ shared_ptr<available_package>
+ make_available (const common_options& options,
+ database& db,
+ const shared_ptr<selected_package>& sp)
+ {
+ assert (sp != nullptr && sp->state != package_state::broken);
+
+ if (sp->system ())
+ return make_shared<available_package> (sp->name, sp->version);
+
+ // The package is in at least fetched state, which means we should
+ // be able to get its manifest.
+ //
+ const optional<path>& a (sp->archive);
+
+ package_manifest m (
+ sp->state == package_state::fetched
+ ? pkg_verify (options,
+ a->absolute () ? *a : db.config_orig / *a,
+ true /* ignore_unknown */,
+ false /* expand_values */,
+ true /* load_buildfiles */)
+ : pkg_verify (options,
+ sp->effective_src_root (db.config_orig),
+ true /* ignore_unknown */,
+ true /* load_buildfiles */,
+ // Copy potentially fixed up version from selected package.
+ [&sp] (version& v) {v = sp->version;}));
+
+ return make_shared<available_package> (move (m));
+ }
+
pair<shared_ptr<selected_package>, database*>
find_dependency (database& db, const package_name& pn, bool buildtime)
{