diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2022-02-07 14:02:11 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2022-02-07 14:02:44 +0300 |
commit | 2dbac9c6d08697e28af28178b2ce041140164842 (patch) | |
tree | 293996fcce76c18f03ef8f4577e92a0e04f0ffd7 /bpkg/package.cxx | |
parent | 0e954df70c6133d84660ee446fdb33ecb61a8c3f (diff) |
Introduce package_skeleton for evaluating dependency clauses
Diffstat (limited to 'bpkg/package.cxx')
-rw-r--r-- | bpkg/package.cxx | 33 |
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) { |