diff options
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) { |