diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-05-02 17:52:59 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-05-02 17:52:59 -0700 |
| commit | f10861fa7af9bd675cb4e80ea31d85d7e5c6d906 (patch) | |
| tree | 7d3e91d469246b20ac651c24ec123184bc4b8e09 | |
| parent | 8c1b8b5ed7485079730dfe3d93416feba5f74d04 (diff) | |
| download | vcpkg-f10861fa7af9bd675cb4e80ea31d85d7e5c6d906.tar.gz vcpkg-f10861fa7af9bd675cb4e80ea31d85d7e5c6d906.zip | |
[vcpkg] Reduce arguments to build_package() by bundling
| -rw-r--r-- | toolsrc/include/PackageSpec.h | 2 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg_Build.h | 18 | ||||
| -rw-r--r-- | toolsrc/src/PackageSpec.cpp | 6 | ||||
| -rw-r--r-- | toolsrc/src/commands_build.cpp | 10 | ||||
| -rw-r--r-- | toolsrc/src/commands_ci.cpp | 6 | ||||
| -rw-r--r-- | toolsrc/src/commands_install.cpp | 18 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg_Build.cpp | 41 |
7 files changed, 63 insertions, 38 deletions
diff --git a/toolsrc/include/PackageSpec.h b/toolsrc/include/PackageSpec.h index 8f1d8cfc5..050d9d079 100644 --- a/toolsrc/include/PackageSpec.h +++ b/toolsrc/include/PackageSpec.h @@ -8,7 +8,7 @@ namespace vcpkg struct PackageSpec { static Expected<PackageSpec> from_string(const std::string& spec_as_string, const Triplet& default_triplet); - + static std::string to_string(const std::string& name, const Triplet& triplet); static Expected<PackageSpec> from_name_and_triplet(const std::string& name, const Triplet& triplet); const std::string& name() const; diff --git a/toolsrc/include/vcpkg_Build.h b/toolsrc/include/vcpkg_Build.h index f4b9300c5..eec98d861 100644 --- a/toolsrc/include/vcpkg_Build.h +++ b/toolsrc/include/vcpkg_Build.h @@ -40,10 +40,20 @@ namespace vcpkg::Build std::vector<PackageSpec> unmet_dependencies; }; - ExtendedBuildResult build_package(const SourceParagraph& source_paragraph, - const PackageSpec& spec, - const VcpkgPaths& paths, - const fs::path& port_dir, + struct BuildPackageConfig + { + BuildPackageConfig(const SourceParagraph& src, const Triplet& triplet, fs::path&& port_dir) + : src(src), triplet(triplet), port_dir(std::move(port_dir)), use_head_version(false), no_downloads(false) + { + } + + const SourceParagraph& src; + const Triplet& triplet; + fs::path port_dir; + }; + + ExtendedBuildResult build_package(const VcpkgPaths& paths, + const BuildPackageConfig& config, const StatusParagraphs& status_db); struct BuildInfo diff --git a/toolsrc/src/PackageSpec.cpp b/toolsrc/src/PackageSpec.cpp index af70dd615..69883a030 100644 --- a/toolsrc/src/PackageSpec.cpp +++ b/toolsrc/src/PackageSpec.cpp @@ -45,7 +45,11 @@ namespace vcpkg std::string PackageSpec::dir() const { return Strings::format("%s_%s", this->m_name, this->m_triplet); } - std::string PackageSpec::to_string() const { return Strings::format("%s:%s", this->name(), this->triplet()); } + std::string PackageSpec::to_string(const std::string& name, const Triplet& triplet) + { + return Strings::format("%s:%s", name, triplet); + } + std::string PackageSpec::to_string() const { return to_string(this->name(), this->triplet()); } bool operator==(const PackageSpec& left, const PackageSpec& right) { diff --git a/toolsrc/src/commands_build.cpp b/toolsrc/src/commands_build.cpp index b6be68f02..fe84f4b13 100644 --- a/toolsrc/src/commands_build.cpp +++ b/toolsrc/src/commands_build.cpp @@ -42,9 +42,17 @@ namespace vcpkg::Commands::BuildCommand spec, maybe_spgh.error_code().message()); const SourceParagraph& spgh = *maybe_spgh.get(); + Checks::check_exit(VCPKG_LINE_INFO, + spec.name() == spgh.name, + "The Name: field inside the CONTROL does not match the port directory: '%s' != '%s'", + spgh.name, + spec.name()); StatusParagraphs status_db = database_load_check(paths); - const auto result = Build::build_package(spgh, spec, paths, paths.port_dir(spec), status_db); + const Build::BuildPackageConfig build_config{ + spgh, spec.triplet(), paths.port_dir(spec), + }; + const auto result = Build::build_package(paths, build_config, status_db); if (result.code == BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES) { System::println(System::Color::error, diff --git a/toolsrc/src/commands_ci.cpp b/toolsrc/src/commands_ci.cpp index 398f6a5f4..e9755335c 100644 --- a/toolsrc/src/commands_ci.cpp +++ b/toolsrc/src/commands_ci.cpp @@ -72,8 +72,10 @@ namespace vcpkg::Commands::CI { System::println("Building package %s... ", display_name); auto&& source_paragraph = action.any_paragraph.source_paragraph.value_or_exit(VCPKG_LINE_INFO); - const auto result_ex = Build::build_package( - source_paragraph, action.spec, paths, paths.port_dir(action.spec), status_db); + const Build::BuildPackageConfig build_config{ + source_paragraph, action.spec.triplet(), paths.port_dir(action.spec), + }; + const auto result_ex = Build::build_package(paths, build_config, status_db); const auto result = result_ex.code; timing.back() = build_timer.to_string(); diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index 727bae666..bfbefe1c1 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -301,8 +301,7 @@ namespace vcpkg::Commands::Install if (has_non_user_requested_packages) { - System::println(System::Color::warning, - "Additional packages (*) need to be installed to complete this operation."); + System::println("Additional packages (*) will be installed to complete this operation."); } if (dryRun) @@ -325,12 +324,13 @@ namespace vcpkg::Commands::Install case InstallPlanType::BUILD_AND_INSTALL: { System::println("Building package %s... ", display_name); - const auto result = - Build::build_package(action.any_paragraph.source_paragraph.value_or_exit(VCPKG_LINE_INFO), - action.spec, - paths, - paths.port_dir(action.spec), - status_db); + Build::BuildPackageConfig build_config{ + action.any_paragraph.source_paragraph.value_or_exit(VCPKG_LINE_INFO), + action.spec.triplet(), + paths.port_dir(action.spec), + }; + + const auto result = Build::build_package(paths, build_config, status_db); if (result.code != Build::BuildResult::SUCCEEDED) { System::println(System::Color::error, @@ -338,7 +338,7 @@ namespace vcpkg::Commands::Install System::println(Build::create_user_troubleshooting_message(action.spec)); Checks::exit_fail(VCPKG_LINE_INFO); } - System::println(System::Color::success, "Building package %s... done", display_name); + System::println("Building package %s... done", display_name); const BinaryParagraph bpgh = Paragraphs::try_load_cached_package(paths, action.spec).value_or_exit(VCPKG_LINE_INFO); diff --git a/toolsrc/src/vcpkg_Build.cpp b/toolsrc/src/vcpkg_Build.cpp index ca731e759..2573feb68 100644 --- a/toolsrc/src/vcpkg_Build.cpp +++ b/toolsrc/src/vcpkg_Build.cpp @@ -40,26 +40,25 @@ namespace vcpkg::Build static void create_binary_control_file(const VcpkgPaths& paths, const SourceParagraph& source_paragraph, - const Triplet& triplet) + const Triplet& triplet, + const BuildInfo& build_info) { const BinaryParagraph bpgh = BinaryParagraph(source_paragraph, triplet); const fs::path binary_control_file = paths.packages / bpgh.dir() / "CONTROL"; paths.get_filesystem().write_contents(binary_control_file, Strings::serialize(bpgh)); } - ExtendedBuildResult build_package(const SourceParagraph& source_paragraph, - const PackageSpec& spec, - const VcpkgPaths& paths, - const fs::path& port_dir, + ExtendedBuildResult build_package(const VcpkgPaths& paths, + const BuildPackageConfig& config, const StatusParagraphs& status_db) { - Checks::check_exit( - VCPKG_LINE_INFO, spec.name() == source_paragraph.name, "inconsistent arguments to build_package()"); + const PackageSpec spec = + PackageSpec::from_name_and_triplet(config.src.name, config.triplet).value_or_exit(VCPKG_LINE_INFO); - const Triplet& triplet = spec.triplet(); + const Triplet& triplet = config.triplet; { std::vector<PackageSpec> missing_specs; - for (auto&& dep : filter_dependencies(source_paragraph.depends, triplet)) + for (auto&& dep : filter_dependencies(config.src.depends, triplet)) { if (status_db.find_installed(dep, triplet) == status_db.end()) { @@ -81,14 +80,15 @@ namespace vcpkg::Build const Toolset& toolset = paths.get_toolset(); const auto cmd_set_environment = make_build_env_cmd(triplet, toolset); - const std::wstring cmd_launch_cmake = make_cmake_cmd(cmake_exe_path, - ports_cmake_script_path, - {{L"CMD", L"BUILD"}, - {L"PORT", source_paragraph.name}, - {L"CURRENT_PORT_DIR", port_dir / "/."}, - {L"TARGET_TRIPLET", triplet.canonical_name()}, - {L"VCPKG_PLATFORM_TOOLSET", toolset.version}, - {L"GIT", git_exe_path}}); + const std::wstring cmd_launch_cmake = + make_cmake_cmd(cmake_exe_path, + ports_cmake_script_path, + {{L"CMD", L"BUILD"}, + {L"PORT", config.src.name}, + {L"CURRENT_PORT_DIR", config.port_dir / "/."}, + {L"TARGET_TRIPLET", triplet.canonical_name()}, + {L"VCPKG_PLATFORM_TOOLSET", toolset.version}, + {L"GIT", git_exe_path}}); const std::wstring command = Strings::wformat(LR"(%s && %s)", cmd_set_environment, cmd_launch_cmake); @@ -96,12 +96,13 @@ namespace vcpkg::Build int return_code = System::cmd_execute_clean(command); auto buildtimeus = timer.microseconds(); - Metrics::track_metric("buildtimeus-" + spec.to_string(), buildtimeus); + const auto spec_string = spec.to_string(); + Metrics::track_metric("buildtimeus-" + spec_string, buildtimeus); if (return_code != 0) { Metrics::track_property("error", "build failed"); - Metrics::track_property("build_error", spec.to_string()); + Metrics::track_property("build_error", spec_string); return {BuildResult::BUILD_FAILED, {}}; } @@ -113,7 +114,7 @@ namespace vcpkg::Build return {BuildResult::POST_BUILD_CHECKS_FAILED, {}}; } - create_binary_control_file(paths, source_paragraph, triplet); + create_binary_control_file(paths, config.src, triplet, build_info); // const fs::path port_buildtrees_dir = paths.buildtrees / spec.name; // delete_directory(port_buildtrees_dir); |
