aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-02-13 14:01:27 -0800
committerAlexander Karatarakis <alkarata@microsoft.com>2017-02-15 18:06:06 -0800
commitc60c9de6e2371b31a79c58719df1d344b564111c (patch)
tree5620d19c1f277c409311bb7af95837faa75882cf /toolsrc/src
parentcc1692f304ed5c2514e69a12c4ed974b0d7b679e (diff)
downloadvcpkg-c60c9de6e2371b31a79c58719df1d344b564111c.tar.gz
vcpkg-c60c9de6e2371b31a79c58719df1d344b564111c.zip
Restore dependency check in build_package()
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/commands_build.cpp47
-rw-r--r--toolsrc/src/commands_build_external.cpp7
-rw-r--r--toolsrc/src/commands_install.cpp7
3 files changed, 37 insertions, 24 deletions
diff --git a/toolsrc/src/commands_build.cpp b/toolsrc/src/commands_build.cpp
index c9292aae9..8dc4a455d 100644
--- a/toolsrc/src/commands_build.cpp
+++ b/toolsrc/src/commands_build.cpp
@@ -24,12 +24,19 @@ namespace vcpkg::Commands::Build
std::ofstream(binary_control_file) << bpgh;
}
- BuildResult build_package(const SourceParagraph& source_paragraph, const package_spec& spec, const vcpkg_paths& paths, const fs::path& port_dir, const DependencyStatus& dependency_status)
+ BuildResult build_package(const SourceParagraph& source_paragraph, const package_spec& spec, const vcpkg_paths& paths, const fs::path& port_dir, const StatusParagraphs& status_db)
{
Checks::check_exit(spec.name() == source_paragraph.name, "inconsistent arguments to build_package()");
- Checks::check_exit(dependency_status == DependencyStatus::ALL_DEPENDENCIES_INSTALLED, "Dependencies must be satisfied before attempting to build a package");
const triplet& target_triplet = spec.target_triplet();
+ for (auto&& dep : source_paragraph.depends)
+ {
+ if (status_db.find_installed(dep.name, target_triplet) == status_db.end())
+ {
+ return BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES;
+ }
+ }
+
const fs::path ports_cmake_script_path = paths.ports_cmake;
const Environment::vcvarsall_and_platform_toolset vcvarsall_bat = Environment::get_vcvarsall_bat(paths);
const std::wstring command = Strings::wformat(LR"("%s" %s >nul 2>&1 && cmake -DCMD=BUILD -DPORT=%s -DTARGET_TRIPLET=%s -DVCPKG_PLATFORM_TOOLSET=%s "-DCURRENT_PORT_DIR=%s/." -P "%s")",
@@ -74,23 +81,31 @@ namespace vcpkg::Commands::Build
// const fs::path port_buildtrees_dir = paths.buildtrees / spec.name;
// delete_directory(port_buildtrees_dir);
- return BuildResult::SUCCESS;
+ return BuildResult::SUCCEEDED;
}
- DependencyStatus check_dependencies(const SourceParagraph& source_paragraph, const package_spec& spec, const StatusParagraphs& status_db)
+ const std::string& to_string(const BuildResult build_result)
{
- Checks::check_exit(spec.name() == source_paragraph.name, "inconsistent arguments to check_dependencies()");
- const triplet& target_triplet = spec.target_triplet();
+ static const std::string BUILD_NOT_STARTED_STRING = "BUILD_NOT_STARTED";
+ static const std::string SUCCEEDED_STRING = "SUCCEEDED";
+ static const std::string BUILD_FAILED_STRING = "BUILD_FAILED";
+ static const std::string POST_BUILD_CHECKS_FAILED_STRING = "POST_BUILD_CHECKS_FAILED";
+ static const std::string CASCADED_DUE_TO_MISSING_DEPENDENCIES_STRING = "CASCADED_DUE_TO_MISSING_DEPENDENCIES";
- for (auto&& dep : source_paragraph.depends)
+ switch (build_result)
{
- if (status_db.find_installed(dep.name, target_triplet) == status_db.end())
- {
- return DependencyStatus::MISSING_DEPENDENCIES;
- }
+ case BuildResult::BUILD_NOT_STARTED: return BUILD_NOT_STARTED_STRING;
+ case BuildResult::SUCCEEDED: return SUCCEEDED_STRING;
+ case BuildResult::BUILD_FAILED: return BUILD_FAILED_STRING;
+ case BuildResult::POST_BUILD_CHECKS_FAILED: return POST_BUILD_CHECKS_FAILED_STRING;
+ case BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES: return CASCADED_DUE_TO_MISSING_DEPENDENCIES_STRING;
+ default: Checks::unreachable();
}
+ }
- return DependencyStatus::ALL_DEPENDENCIES_INSTALLED;
+ std::string create_error_message(const std::string& package_id, const BuildResult build_result)
+ {
+ return Strings::format("Error: Building package %s failed with: %s", package_id, Build::to_string(build_result));
}
void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
@@ -124,8 +139,8 @@ namespace vcpkg::Commands::Build
const SourceParagraph& spgh = *maybe_spgh.get();
Environment::ensure_utilities_on_path(paths);
- const DependencyStatus dependency_status = check_dependencies(spgh, spec, status_db);
- if (dependency_status == DependencyStatus::MISSING_DEPENDENCIES)
+ const BuildResult result = build_package(spgh, spec, paths, paths.port_dir(spec), status_db);
+ if (result == BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES)
{
std::vector<package_spec_with_install_plan> unmet_dependencies = Dependencies::create_install_plan(paths, { spec }, status_db);
unmet_dependencies.erase(
@@ -147,9 +162,9 @@ namespace vcpkg::Commands::Build
exit(EXIT_FAILURE);
}
- const BuildResult result = build_package(spgh, spec, paths, paths.port_dir(spec), dependency_status);
- if (result != BuildResult::SUCCESS)
+ if (result != BuildResult::SUCCEEDED)
{
+ System::println(System::color::error, Build::create_error_message(spec.toString(), result));
exit(EXIT_FAILURE);
}
diff --git a/toolsrc/src/commands_build_external.cpp b/toolsrc/src/commands_build_external.cpp
index 319e3c3d8..0b2fdc766 100644
--- a/toolsrc/src/commands_build_external.cpp
+++ b/toolsrc/src/commands_build_external.cpp
@@ -23,11 +23,10 @@ namespace vcpkg::Commands::BuildExternal
const expected<SourceParagraph> maybe_spgh = try_load_port(port_dir);
if (auto spgh = maybe_spgh.get())
{
- const Build::DependencyStatus dependency_status = Build::check_dependencies(*spgh, *spec, status_db);
- Checks::check_exit(dependency_status == Build::DependencyStatus::ALL_DEPENDENCIES_INSTALLED);
- const Build::BuildResult result = Commands::Build::build_package(*spgh, *spec, paths, port_dir, dependency_status);
- if (result != Build::BuildResult::SUCCESS)
+ const Build::BuildResult result = Commands::Build::build_package(*spgh, *spec, paths, port_dir, status_db);
+ if (result != Build::BuildResult::SUCCEEDED)
{
+ System::println(System::color::error, Build::create_error_message(spec->toString(), result));
exit(EXIT_FAILURE);
}
diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp
index a57d2cc6d..b1a0108b7 100644
--- a/toolsrc/src/commands_install.cpp
+++ b/toolsrc/src/commands_install.cpp
@@ -214,11 +214,10 @@ namespace vcpkg::Commands::Install
}
else if (action.plan.plan_type == install_plan_type::BUILD_AND_INSTALL)
{
- const Build::DependencyStatus dependency_status = Build::check_dependencies(*action.plan.source_pgh, action.spec, status_db);
- Checks::check_exit(dependency_status == Build::DependencyStatus::ALL_DEPENDENCIES_INSTALLED);
- const Build::BuildResult result = Commands::Build::build_package(*action.plan.source_pgh, action.spec, paths, paths.port_dir(action.spec), dependency_status);
- if (result != Build::BuildResult::SUCCESS)
+ const Build::BuildResult result = Commands::Build::build_package(*action.plan.source_pgh, action.spec, paths, paths.port_dir(action.spec), status_db);
+ if (result != Build::BuildResult::SUCCEEDED)
{
+ System::println(System::color::error, Build::create_error_message(action.spec.toString(), result));
exit(EXIT_FAILURE);
}
const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw();