aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-05-02 17:52:59 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-05-02 17:52:59 -0700
commitf10861fa7af9bd675cb4e80ea31d85d7e5c6d906 (patch)
tree7d3e91d469246b20ac651c24ec123184bc4b8e09
parent8c1b8b5ed7485079730dfe3d93416feba5f74d04 (diff)
downloadvcpkg-f10861fa7af9bd675cb4e80ea31d85d7e5c6d906.tar.gz
vcpkg-f10861fa7af9bd675cb4e80ea31d85d7e5c6d906.zip
[vcpkg] Reduce arguments to build_package() by bundling
-rw-r--r--toolsrc/include/PackageSpec.h2
-rw-r--r--toolsrc/include/vcpkg_Build.h18
-rw-r--r--toolsrc/src/PackageSpec.cpp6
-rw-r--r--toolsrc/src/commands_build.cpp10
-rw-r--r--toolsrc/src/commands_ci.cpp6
-rw-r--r--toolsrc/src/commands_install.cpp18
-rw-r--r--toolsrc/src/vcpkg_Build.cpp41
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);