aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Neumann <30894796+Neumann-A@users.noreply.github.com>2020-11-30 19:07:51 +0100
committerGitHub <noreply@github.com>2020-11-30 10:07:51 -0800
commit3fd77452e0629db5a0f672b646368552a85ccce2 (patch)
treeb8fc9f45d263f59cf94f86c59fa2a91ae8d9404d
parent24c67cb37910371b1572ec7afc919d49e329b6a6 (diff)
downloadvcpkg-3fd77452e0629db5a0f672b646368552a85ccce2.tar.gz
vcpkg-3fd77452e0629db5a0f672b646368552a85ccce2.zip
[vcpkg] Add option cmake-args (#12877)
* [vcpkg] Add option cmake-args to pass additional args to the script execution * apply clang format to install.cpp * rename command to x-cmake-args * imply editable if x-cmake-args are not empty. * don't use bitwise or * add a definition for CMAKE_SCRIPT_ARG Co-authored-by: wangli28 <wangli28@beyondsoft.com>
-rw-r--r--toolsrc/include/vcpkg/base/system.process.h1
-rw-r--r--toolsrc/include/vcpkg/build.h9
-rw-r--r--toolsrc/include/vcpkg/install.h6
-rw-r--r--toolsrc/include/vcpkg/vcpkgcmdarguments.h3
-rw-r--r--toolsrc/src/vcpkg/base/system.process.cpp1
-rw-r--r--toolsrc/src/vcpkg/build.cpp40
-rw-r--r--toolsrc/src/vcpkg/commands.buildexternal.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.ci.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.setinstalled.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.upgrade.cpp3
-rw-r--r--toolsrc/src/vcpkg/install.cpp18
-rw-r--r--toolsrc/src/vcpkg/vcpkgcmdarguments.cpp3
12 files changed, 64 insertions, 29 deletions
diff --git a/toolsrc/include/vcpkg/base/system.process.h b/toolsrc/include/vcpkg/base/system.process.h
index e81bcfed7..3b60630bb 100644
--- a/toolsrc/include/vcpkg/base/system.process.h
+++ b/toolsrc/include/vcpkg/base/system.process.h
@@ -15,6 +15,7 @@ namespace vcpkg::System
CMakeVariable(const StringView varname, const char* varvalue);
CMakeVariable(const StringView varname, const std::string& varvalue);
CMakeVariable(const StringView varname, const fs::path& path);
+ CMakeVariable(std::string var);
std::string s;
};
diff --git a/toolsrc/include/vcpkg/build.h b/toolsrc/include/vcpkg/build.h
index 773d3eeef..2e3c5fafa 100644
--- a/toolsrc/include/vcpkg/build.h
+++ b/toolsrc/include/vcpkg/build.h
@@ -56,13 +56,15 @@ namespace vcpkg::Build
namespace Command
{
- int perform_ex(const FullPackageSpec& full_spec,
+ int perform_ex(const VcpkgCmdArguments& args,
+ const FullPackageSpec& full_spec,
const SourceControlFileLocation& scfl,
const PortFileProvider::PathsPortFileProvider& provider,
IBinaryProvider& binaryprovider,
const IBuildLogsRecorder& build_logs_recorder,
const VcpkgPaths& paths);
- void perform_and_exit_ex(const FullPackageSpec& full_spec,
+ void perform_and_exit_ex(const VcpkgCmdArguments& args,
+ const FullPackageSpec& full_spec,
const SourceControlFileLocation& scfl,
const PortFileProvider::PathsPortFileProvider& provider,
IBinaryProvider& binaryprovider,
@@ -232,7 +234,8 @@ namespace vcpkg::Build
std::unique_ptr<BinaryControlFile> binary_control_file;
};
- ExtendedBuildResult build_package(const VcpkgPaths& paths,
+ ExtendedBuildResult build_package(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
const Dependencies::InstallPlanAction& config,
IBinaryProvider& binaries_provider,
const IBuildLogsRecorder& build_logs_recorder,
diff --git a/toolsrc/include/vcpkg/install.h b/toolsrc/include/vcpkg/install.h
index f85d48d8d..8187735c5 100644
--- a/toolsrc/include/vcpkg/install.h
+++ b/toolsrc/include/vcpkg/install.h
@@ -59,7 +59,8 @@ namespace vcpkg::Install
const fs::path& listfile() const;
};
- Build::ExtendedBuildResult perform_install_plan_action(const VcpkgPaths& paths,
+ Build::ExtendedBuildResult perform_install_plan_action(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
Dependencies::InstallPlanAction& action,
StatusParagraphs& status_db,
const CMakeVars::CMakeVarProvider& var_provider);
@@ -83,7 +84,8 @@ namespace vcpkg::Install
const BinaryControlFile& binary_paragraph,
StatusParagraphs* status_db);
- InstallSummary perform(Dependencies::ActionPlan& action_plan,
+ InstallSummary perform(const VcpkgCmdArguments& args,
+ Dependencies::ActionPlan& action_plan,
const KeepGoing keep_going,
const VcpkgPaths& paths,
StatusParagraphs& status_db,
diff --git a/toolsrc/include/vcpkg/vcpkgcmdarguments.h b/toolsrc/include/vcpkg/vcpkgcmdarguments.h
index db0d96316..16e433d63 100644
--- a/toolsrc/include/vcpkg/vcpkgcmdarguments.h
+++ b/toolsrc/include/vcpkg/vcpkgcmdarguments.h
@@ -149,6 +149,9 @@ namespace vcpkg
constexpr static StringLiteral BINARY_SOURCES_ARG = "binarysource";
std::vector<std::string> binary_sources;
+ constexpr static StringLiteral CMAKE_SCRIPT_ARG = "x-cmake-args";
+ std::vector<std::string> cmake_args;
+
constexpr static StringLiteral DEBUG_SWITCH = "debug";
Optional<bool> debug = nullopt;
constexpr static StringLiteral SEND_METRICS_SWITCH = "sendmetrics";
diff --git a/toolsrc/src/vcpkg/base/system.process.cpp b/toolsrc/src/vcpkg/base/system.process.cpp
index b330069e6..d4410e28a 100644
--- a/toolsrc/src/vcpkg/base/system.process.cpp
+++ b/toolsrc/src/vcpkg/base/system.process.cpp
@@ -182,6 +182,7 @@ namespace vcpkg
: CMakeVariable(varname, fs::generic_u8string(path))
{
}
+ System::CMakeVariable::CMakeVariable(std::string var) : s(std::move(var)) { }
std::string System::make_basic_cmake_cmd(const fs::path& cmake_tool_path,
const fs::path& cmake_script,
diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp
index 495b517ea..4cc4c2987 100644
--- a/toolsrc/src/vcpkg/build.cpp
+++ b/toolsrc/src/vcpkg/build.cpp
@@ -57,7 +57,8 @@ namespace vcpkg::Build
using Dependencies::InstallPlanAction;
using Dependencies::InstallPlanType;
- void Command::perform_and_exit_ex(const FullPackageSpec& full_spec,
+ void Command::perform_and_exit_ex(const VcpkgCmdArguments& args,
+ const FullPackageSpec& full_spec,
const SourceControlFileLocation& scfl,
const PathsPortFileProvider& provider,
IBinaryProvider& binaryprovider,
@@ -65,7 +66,7 @@ namespace vcpkg::Build
const VcpkgPaths& paths)
{
Checks::exit_with_code(VCPKG_LINE_INFO,
- perform_ex(full_spec, scfl, provider, binaryprovider, build_logs_recorder, paths));
+ perform_ex(args, full_spec, scfl, provider, binaryprovider, build_logs_recorder, paths));
}
const CommandStructure COMMAND_STRUCTURE = {
@@ -81,7 +82,8 @@ namespace vcpkg::Build
Checks::exit_with_code(VCPKG_LINE_INFO, perform(args, paths, default_triplet));
}
- int Command::perform_ex(const FullPackageSpec& full_spec,
+ int Command::perform_ex(const VcpkgCmdArguments& args,
+ const FullPackageSpec& full_spec,
const SourceControlFileLocation& scfl,
const PathsPortFileProvider& provider,
IBinaryProvider& binaryprovider,
@@ -134,7 +136,7 @@ namespace vcpkg::Build
action->build_options.clean_packages = CleanPackages::NO;
const auto build_timer = Chrono::ElapsedTimer::create_started();
- const auto result = Build::build_package(paths, *action, binaryprovider, build_logs_recorder, status_db);
+ const auto result = Build::build_package(args, paths, *action, binaryprovider, build_logs_recorder, status_db);
System::print2("Elapsed time for package ", spec, ": ", build_timer, '\n');
if (result.code == BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES)
@@ -182,7 +184,8 @@ namespace vcpkg::Build
Checks::check_exit(VCPKG_LINE_INFO, scfl != nullptr, "Error: Couldn't find port '%s'", port_name);
ASSUME(scfl != nullptr);
- return perform_ex(spec,
+ return perform_ex(args,
+ spec,
*scfl,
provider,
args.binary_caching_enabled() ? *binaryprovider : null_binary_provider(),
@@ -602,7 +605,8 @@ namespace vcpkg::Build
return compiler_info;
}
- static std::vector<System::CMakeVariable> get_cmake_build_args(const VcpkgPaths& paths,
+ static std::vector<System::CMakeVariable> get_cmake_build_args(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
const Dependencies::InstallPlanAction& action,
Triplet triplet)
{
@@ -631,6 +635,11 @@ namespace vcpkg::Build
{"ALL_FEATURES", all_features},
};
+ for (auto cmake_arg : args.cmake_args)
+ {
+ variables.push_back(System::CMakeVariable{cmake_arg});
+ }
+
if (action.build_options.backcompat_features == BackcompatFeatures::PROHIBIT)
{
variables.emplace_back("_VCPKG_PROHIBIT_BACKCOMPAT_FEATURES", "1");
@@ -723,7 +732,9 @@ namespace vcpkg::Build
}
}
- static ExtendedBuildResult do_build_package(const VcpkgPaths& paths, const Dependencies::InstallPlanAction& action)
+ static ExtendedBuildResult do_build_package(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
+ const Dependencies::InstallPlanAction& action)
{
const auto& pre_build_info = action.pre_build_info(VCPKG_LINE_INFO);
@@ -753,7 +764,8 @@ namespace vcpkg::Build
const auto timer = Chrono::ElapsedTimer::create_started();
- auto command = vcpkg::make_cmake_cmd(paths, paths.ports_cmake, get_cmake_build_args(paths, action, triplet));
+ auto command =
+ vcpkg::make_cmake_cmd(paths, paths.ports_cmake, get_cmake_build_args(args, paths, action, triplet));
const auto& env = paths.get_action_env(action.abi_info.value_or_exit(VCPKG_LINE_INFO));
@@ -849,10 +861,11 @@ namespace vcpkg::Build
return {BuildResult::SUCCEEDED, std::move(bcf)};
}
- static ExtendedBuildResult do_build_package_and_clean_buildtrees(const VcpkgPaths& paths,
+ static ExtendedBuildResult do_build_package_and_clean_buildtrees(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
const Dependencies::InstallPlanAction& action)
{
- auto result = do_build_package(paths, action);
+ auto result = do_build_package(args, paths, action);
if (action.build_options.clean_buildtrees == CleanBuildtrees::YES)
{
@@ -1078,7 +1091,8 @@ namespace vcpkg::Build
}
}
- ExtendedBuildResult build_package(const VcpkgPaths& paths,
+ ExtendedBuildResult build_package(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
const Dependencies::InstallPlanAction& action,
IBinaryProvider& binaries_provider,
const IBuildLogsRecorder& build_logs_recorder,
@@ -1122,7 +1136,7 @@ namespace vcpkg::Build
auto& abi_info = action.abi_info.value_or_exit(VCPKG_LINE_INFO);
if (!abi_info.abi_tag_file)
{
- return do_build_package_and_clean_buildtrees(paths, action);
+ return do_build_package_and_clean_buildtrees(args, paths, action);
}
auto& abi_file = *abi_info.abi_tag_file.get();
@@ -1149,7 +1163,7 @@ namespace vcpkg::Build
}
}
- ExtendedBuildResult result = do_build_package_and_clean_buildtrees(paths, action);
+ ExtendedBuildResult result = do_build_package_and_clean_buildtrees(args, paths, action);
fs.create_directories(abi_package_dir, ec);
fs.copy_file(abi_file, abi_file_in_package, fs::copy_options::none, ec);
diff --git a/toolsrc/src/vcpkg/commands.buildexternal.cpp b/toolsrc/src/vcpkg/commands.buildexternal.cpp
index 25c3f9822..cbf9c6ec1 100644
--- a/toolsrc/src/vcpkg/commands.buildexternal.cpp
+++ b/toolsrc/src/vcpkg/commands.buildexternal.cpp
@@ -36,7 +36,8 @@ namespace vcpkg::Commands::BuildExternal
Checks::check_exit(
VCPKG_LINE_INFO, maybe_scfl.has_value(), "could not load control file for %s", spec.package_spec.name());
- Build::Command::perform_and_exit_ex(spec,
+ Build::Command::perform_and_exit_ex(args,
+ spec,
maybe_scfl.value_or_exit(VCPKG_LINE_INFO),
provider,
args.binary_caching_enabled() ? *binaryprovider : null_binary_provider(),
diff --git a/toolsrc/src/vcpkg/commands.ci.cpp b/toolsrc/src/vcpkg/commands.ci.cpp
index ee6222d6e..8927c038f 100644
--- a/toolsrc/src/vcpkg/commands.ci.cpp
+++ b/toolsrc/src/vcpkg/commands.ci.cpp
@@ -525,7 +525,8 @@ namespace vcpkg::Commands::CI
else
{
auto collection_timer = Chrono::ElapsedTimer::create_started();
- auto summary = Install::perform(action_plan,
+ auto summary = Install::perform(args,
+ action_plan,
Install::KeepGoing::YES,
paths,
status_db,
diff --git a/toolsrc/src/vcpkg/commands.setinstalled.cpp b/toolsrc/src/vcpkg/commands.setinstalled.cpp
index 99c41a5b4..28eee6992 100644
--- a/toolsrc/src/vcpkg/commands.setinstalled.cpp
+++ b/toolsrc/src/vcpkg/commands.setinstalled.cpp
@@ -103,7 +103,8 @@ namespace vcpkg::Commands::SetInstalled
Checks::exit_success(VCPKG_LINE_INFO);
}
- const auto summary = Install::perform(action_plan,
+ const auto summary = Install::perform(args,
+ action_plan,
Install::KeepGoing::NO,
paths,
status_db,
diff --git a/toolsrc/src/vcpkg/commands.upgrade.cpp b/toolsrc/src/vcpkg/commands.upgrade.cpp
index 0d8a6c4af..2d25be455 100644
--- a/toolsrc/src/vcpkg/commands.upgrade.cpp
+++ b/toolsrc/src/vcpkg/commands.upgrade.cpp
@@ -182,7 +182,8 @@ namespace vcpkg::Commands::Upgrade
var_provider.load_tag_vars(action_plan, provider);
const Install::InstallSummary summary =
- Install::perform(action_plan,
+ Install::perform(args,
+ action_plan,
keep_going,
paths,
status_db,
diff --git a/toolsrc/src/vcpkg/install.cpp b/toolsrc/src/vcpkg/install.cpp
index f3da9c5d6..06b07fb4c 100644
--- a/toolsrc/src/vcpkg/install.cpp
+++ b/toolsrc/src/vcpkg/install.cpp
@@ -305,7 +305,8 @@ namespace vcpkg::Install
using Build::BuildResult;
using Build::ExtendedBuildResult;
- static ExtendedBuildResult perform_install_plan_action(const VcpkgPaths& paths,
+ static ExtendedBuildResult perform_install_plan_action(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
InstallPlanAction& action,
StatusParagraphs& status_db,
IBinaryProvider& binaries_provider,
@@ -336,7 +337,7 @@ namespace vcpkg::Install
else
System::printf("Building package %s...\n", display_name_with_features);
- auto result = Build::build_package(paths, action, binaries_provider, build_logs_recorder, status_db);
+ auto result = Build::build_package(args, paths, action, binaries_provider, build_logs_recorder, status_db);
if (BuildResult::DOWNLOADED == result.code)
{
@@ -454,7 +455,8 @@ namespace vcpkg::Install
TrackedPackageInstallGuard& operator=(const TrackedPackageInstallGuard&) = delete;
};
- InstallSummary perform(ActionPlan& action_plan,
+ InstallSummary perform(const VcpkgCmdArguments& args,
+ ActionPlan& action_plan,
const KeepGoing keep_going,
const VcpkgPaths& paths,
StatusParagraphs& status_db,
@@ -476,7 +478,7 @@ namespace vcpkg::Install
{
results.emplace_back(action.spec, &action);
results.back().build_result =
- perform_install_plan_action(paths, action, status_db, binaryprovider, build_logs_recorder);
+ perform_install_plan_action(args, paths, action, status_db, binaryprovider, build_logs_recorder);
}
Build::compute_all_abis(paths, action_plan, var_provider, status_db);
@@ -487,7 +489,8 @@ namespace vcpkg::Install
for (auto&& action : action_plan.install_actions)
{
TrackedPackageInstallGuard this_install(package_count, results, action.spec);
- auto result = perform_install_plan_action(paths, action, status_db, binaryprovider, build_logs_recorder);
+ auto result =
+ perform_install_plan_action(args, paths, action, status_db, binaryprovider, build_logs_recorder);
if (result.code != BuildResult::SUCCEEDED && keep_going == KeepGoing::NO)
{
System::print2(Build::create_user_troubleshooting_message(action.spec), '\n');
@@ -759,7 +762,7 @@ namespace vcpkg::Install
const bool no_downloads = Util::Sets::contains(options.switches, (OPTION_NO_DOWNLOADS));
const bool only_downloads = Util::Sets::contains(options.switches, (OPTION_ONLY_DOWNLOADS));
const bool is_recursive = Util::Sets::contains(options.switches, (OPTION_RECURSE));
- const bool is_editable = Util::Sets::contains(options.switches, (OPTION_EDITABLE));
+ const bool is_editable = Util::Sets::contains(options.switches, (OPTION_EDITABLE)) || !args.cmake_args.empty();
const bool use_aria2 = Util::Sets::contains(options.switches, (OPTION_USE_ARIA2));
const bool clean_after_build = Util::Sets::contains(options.switches, (OPTION_CLEAN_AFTER_BUILD));
const KeepGoing keep_going =
@@ -954,7 +957,8 @@ namespace vcpkg::Install
}
const InstallSummary summary =
- perform(action_plan,
+ perform(args,
+ action_plan,
keep_going,
paths,
status_db,
diff --git a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp
index d6634985e..a7e4c975b 100644
--- a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp
+++ b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp
@@ -283,6 +283,7 @@ namespace vcpkg
{OVERLAY_PORTS_ARG, &VcpkgCmdArguments::overlay_ports},
{OVERLAY_TRIPLETS_ARG, &VcpkgCmdArguments::overlay_triplets},
{BINARY_SOURCES_ARG, &VcpkgCmdArguments::binary_sources},
+ {CMAKE_SCRIPT_ARG, &VcpkgCmdArguments::cmake_args},
};
constexpr static std::pair<StringView, Optional<bool> VcpkgCmdArguments::*> switches[] = {
@@ -948,4 +949,6 @@ namespace vcpkg
constexpr StringLiteral VcpkgCmdArguments::REGISTRIES_FEATURE;
constexpr StringLiteral VcpkgCmdArguments::RECURSIVE_DATA_ENV;
constexpr StringLiteral VcpkgCmdArguments::VERSIONS_FEATURE;
+
+ constexpr StringLiteral VcpkgCmdArguments::CMAKE_SCRIPT_ARG;
}