diff options
| author | Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> | 2020-11-30 19:07:51 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-30 10:07:51 -0800 |
| commit | 3fd77452e0629db5a0f672b646368552a85ccce2 (patch) | |
| tree | b8fc9f45d263f59cf94f86c59fa2a91ae8d9404d /toolsrc/src | |
| parent | 24c67cb37910371b1572ec7afc919d49e329b6a6 (diff) | |
| download | vcpkg-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>
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/vcpkg/base/system.process.cpp | 1 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/build.cpp | 40 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.buildexternal.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.ci.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.setinstalled.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.upgrade.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/install.cpp | 18 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/vcpkgcmdarguments.cpp | 3 |
8 files changed, 50 insertions, 24 deletions
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; } |
