aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/lib.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2016-11-05 01:02:15 -0700
committerRobert Schumacher <roschuma@microsoft.com>2016-11-05 01:02:15 -0700
commit7f336c746776daf2af95914ed25ff3d50a96b387 (patch)
tree2251824d5db437212c34dd80229e8241964dd774 /toolsrc/src/lib.cpp
parente5152851f2bb070eb4bcc2b8968d40d48226b04e (diff)
downloadvcpkg-7f336c746776daf2af95914ed25ff3d50a96b387.tar.gz
vcpkg-7f336c746776daf2af95914ed25ff3d50a96b387.zip
Enable qualified dependencies. Fix bug in internal 'build' command.
Added capability for CONTROL files to specify qualified dependencies, which are substring searched inside triplet names. Fixed bug in internal 'build' command where if a package is already built, that built package's dependencies will be used to determine requirements for the build instead of the port directory's CONTROL file.
Diffstat (limited to 'toolsrc/src/lib.cpp')
-rw-r--r--toolsrc/src/lib.cpp40
1 files changed, 22 insertions, 18 deletions
diff --git a/toolsrc/src/lib.cpp b/toolsrc/src/lib.cpp
index 45b73ee07..3c844ac3f 100644
--- a/toolsrc/src/lib.cpp
+++ b/toolsrc/src/lib.cpp
@@ -209,29 +209,33 @@ static void install_and_write_listfile(const vcpkg_paths& paths, const BinaryPar
// TODO: Refactoring between this function and install_package
std::vector<std::string> vcpkg::get_unmet_package_dependencies(const vcpkg_paths& paths, const package_spec& spec, const StatusParagraphs& status_db)
{
- std::vector<std::unordered_map<std::string, std::string>> pghs;
- {
- const fs::path packages_dir_control_file_path = paths.package_dir(spec) / "CONTROL";
+ const fs::path packages_dir_control_file_path = paths.package_dir(spec) / "CONTROL";
- auto control_contents_maybe = Files::get_contents(packages_dir_control_file_path);
- if (auto control_contents = control_contents_maybe.get())
+ auto control_contents_maybe = Files::get_contents(packages_dir_control_file_path);
+ if (auto control_contents = control_contents_maybe.get())
+ {
+ std::vector<std::unordered_map<std::string, std::string>> pghs;
+ try
+ {
+ pghs = parse_paragraphs(*control_contents);
+ }
+ catch (std::runtime_error)
{
- try
- {
- pghs = parse_paragraphs(*control_contents);
- }
- catch (std::runtime_error)
- {
- }
- Checks::check_exit(pghs.size() == 1, "Invalid control file at %s", packages_dir_control_file_path.string());
- return BinaryParagraph(pghs[0]).depends;
}
+ Checks::check_exit(pghs.size() == 1, "Invalid control file at %s", packages_dir_control_file_path.string());
+ return BinaryParagraph(pghs[0]).depends;
}
+ return get_unmet_package_build_dependencies(paths, spec, status_db);
+}
+
+std::vector<std::string> vcpkg::get_unmet_package_build_dependencies(const vcpkg_paths& paths, const package_spec& spec, const StatusParagraphs& status_db)
+{
const fs::path ports_dir_control_file_path = paths.port_dir(spec) / "CONTROL";
auto control_contents_maybe = Files::get_contents(ports_dir_control_file_path);
if (auto control_contents = control_contents_maybe.get())
{
+ std::vector<std::unordered_map<std::string, std::string>> pghs;
try
{
pghs = parse_paragraphs(*control_contents);
@@ -240,7 +244,7 @@ std::vector<std::string> vcpkg::get_unmet_package_dependencies(const vcpkg_paths
{
}
Checks::check_exit(pghs.size() == 1, "Invalid control file at %s", ports_dir_control_file_path.string());
- return SourceParagraph(pghs[0]).depends;
+ return filter_dependencies(SourceParagraph(pghs[0]).depends, spec.target_triplet());
}
Checks::exit_with_message("Could not find package named %s", spec);
@@ -252,11 +256,11 @@ void vcpkg::install_package(const vcpkg_paths& paths, const BinaryParagraph& bin
spgh.package = binary_paragraph;
spgh.want = want_t::install;
spgh.state = install_state_t::half_installed;
- for (const std::string& dependency : spgh.package.depends)
+ for (auto&& dep : spgh.package.depends)
{
- if (status_db.find_installed(dependency, spgh.package.spec.target_triplet()) == status_db.end())
+ if (status_db.find_installed(dep, spgh.package.spec.target_triplet()) == status_db.end())
{
- std::abort();
+ Checks::unreachable();
}
}
write_update(paths, spgh);