From 60cc7c6f3048850168ce55f3098567734715ad13 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Sat, 7 Oct 2023 02:10:49 +0300 Subject: [PATCH 1/5] Add a `BOTH` option to `ConfigurationType`. This removes the need to wrap it in an `Optional`. --- include/vcpkg/commands.build.h | 2 +- include/vcpkg/fwd/build.h | 1 + src/vcpkg/commands.build.cpp | 2 +- src/vcpkg/postbuildlint.cpp | 5 +++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/vcpkg/commands.build.h b/include/vcpkg/commands.build.h index 5a4e2efe46..82a4241fb8 100644 --- a/include/vcpkg/commands.build.h +++ b/include/vcpkg/commands.build.h @@ -157,7 +157,7 @@ namespace vcpkg Optional platform_toolset_version; Optional visual_studio_path; Optional external_toolchain_file; - Optional build_type; + ConfigurationType build_type; Optional public_abi_override; std::vector passthrough_env_vars; std::vector passthrough_env_vars_tracked; diff --git a/include/vcpkg/fwd/build.h b/include/vcpkg/fwd/build.h index c65ca91036..594e606947 100644 --- a/include/vcpkg/fwd/build.h +++ b/include/vcpkg/fwd/build.h @@ -53,6 +53,7 @@ namespace vcpkg enum class ConfigurationType { + BOTH, DEBUG, RELEASE, }; diff --git a/src/vcpkg/commands.build.cpp b/src/vcpkg/commands.build.cpp index 27e7f6b216..2f7e95991e 100644 --- a/src/vcpkg/commands.build.cpp +++ b/src/vcpkg/commands.build.cpp @@ -1789,7 +1789,7 @@ namespace vcpkg break; case VcpkgTripletVar::BUILD_TYPE: if (variable_value.empty()) - build_type = nullopt; + build_type = ConfigurationType::BOTH; else if (Strings::case_insensitive_ascii_equals(variable_value, "debug")) build_type = ConfigurationType::DEBUG; else if (Strings::case_insensitive_ascii_equals(variable_value, "release")) diff --git a/src/vcpkg/postbuildlint.cpp b/src/vcpkg/postbuildlint.cpp index 49f46681a1..36066f6873 100644 --- a/src/vcpkg/postbuildlint.cpp +++ b/src/vcpkg/postbuildlint.cpp @@ -1392,7 +1392,8 @@ namespace vcpkg std::vector release_libs = fs.get_regular_files_recursive(release_lib_dir, IgnoreErrors{}); Util::erase_remove_if(release_libs, lib_filter); - if (!pre_build_info.build_type && !build_info.policies.is_enabled(BuildPolicy::MISMATCHED_NUMBER_OF_BINARIES)) + if (pre_build_info.build_type == ConfigurationType::BOTH && + !build_info.policies.is_enabled(BuildPolicy::MISMATCHED_NUMBER_OF_BINARIES)) { error_count += check_matching_debug_and_release_binaries(debug_libs, release_libs, msg_sink); } @@ -1424,7 +1425,7 @@ namespace vcpkg { case LinkageType::DYNAMIC: { - if (!pre_build_info.build_type && + if (pre_build_info.build_type == ConfigurationType::BOTH && !build_info.policies.is_enabled(BuildPolicy::MISMATCHED_NUMBER_OF_BINARIES)) error_count += check_matching_debug_and_release_binaries(debug_dlls, release_dlls, msg_sink); From 154e5c0df541094431150c1cdc12df7ed310ea53 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Sat, 7 Oct 2023 23:00:30 +0300 Subject: [PATCH 2/5] Add a tool option to set the default build type and pass it to the port via `CMAKE_DEFAULT_BUILD_TYPE`. --- include/vcpkg/base/message-data.inc.h | 6 ++++ include/vcpkg/commands.build.h | 7 +++++ include/vcpkg/vcpkgcmdarguments.h | 3 ++ src/vcpkg/commands.build.cpp | 41 ++++++++++++++++++++------- src/vcpkg/commands.install.cpp | 3 +- src/vcpkg/vcpkgcmdarguments.cpp | 6 ++++ 6 files changed, 54 insertions(+), 12 deletions(-) diff --git a/include/vcpkg/base/message-data.inc.h b/include/vcpkg/base/message-data.inc.h index 4534b5665e..5c8b4ab0d3 100644 --- a/include/vcpkg/base/message-data.inc.h +++ b/include/vcpkg/base/message-data.inc.h @@ -2629,6 +2629,12 @@ DECLARE_MESSAGE(SpecifyTargetArch, (msg::env_var), "'vcpkg help triplet' is a command line that should not be localized", "Target triplet. See 'vcpkg help triplet' (default: {env_var})") +DECLARE_MESSAGE(SpecifyBuildType, + (msg::env_var), + "", + "Build type (experimental). Possible values are: debug, release. Defaults to both Debug and Release if " + "not specified. " + "Overrides {env_var}, may be overridden by the VCPKG_BUILD_TYPE variable of the triplet file.") DECLARE_MESSAGE(StartCodeUnitInContinue, (), "", "found start code unit in continue position") DECLARE_MESSAGE(StoredBinaryCache, (msg::path), "", "Stored binary cache: \"{path}\"") DECLARE_MESSAGE(StoredBinariesToDestinations, diff --git a/include/vcpkg/commands.build.h b/include/vcpkg/commands.build.h index 82a4241fb8..6d49056b75 100644 --- a/include/vcpkg/commands.build.h +++ b/include/vcpkg/commands.build.h @@ -60,6 +60,10 @@ namespace vcpkg StringLiteral to_string_view(DownloadTool tool); std::string to_string(DownloadTool tool); + ConfigurationType parse_configuration_type(const std::string& s); + StringLiteral to_string_view(ConfigurationType config_type); + std::string to_string(ConfigurationType config_type); + struct BuildPackageOptions { BuildMissing build_missing; @@ -74,6 +78,7 @@ namespace vcpkg Editable editable; BackcompatFeatures backcompat_features; PrintUsage print_usage; + ConfigurationType build_type; }; static constexpr BuildPackageOptions default_build_package_options{ @@ -89,6 +94,7 @@ namespace vcpkg Editable::NO, BackcompatFeatures::ALLOW, PrintUsage::YES, + ConfigurationType::BOTH, }; static constexpr BuildPackageOptions backcompat_prohibiting_package_options{ @@ -104,6 +110,7 @@ namespace vcpkg Editable::NO, BackcompatFeatures::PROHIBIT, PrintUsage::YES, + ConfigurationType::BOTH, }; struct BuildResultCounts diff --git a/include/vcpkg/vcpkgcmdarguments.h b/include/vcpkg/vcpkgcmdarguments.h index 03f172ca76..5bf5cf71f8 100644 --- a/include/vcpkg/vcpkgcmdarguments.h +++ b/include/vcpkg/vcpkgcmdarguments.h @@ -260,6 +260,9 @@ namespace vcpkg constexpr static StringLiteral OVERLAY_TRIPLETS_ARG = "overlay-triplets"; std::vector cli_overlay_triplets; std::vector env_overlay_triplets; + constexpr static StringLiteral BUILD_TYPE_ENV = "VCPKG_DEFAULT_BUILD_TYPE"; + constexpr static StringLiteral BUILD_TYPE_ARG = "build-type"; + Optional build_type; constexpr static StringLiteral BINARY_SOURCES_ENV = "VCPKG_BINARY_SOURCES"; constexpr static StringLiteral BINARY_SOURCES_ARG = "binarysource"; diff --git a/src/vcpkg/commands.build.cpp b/src/vcpkg/commands.build.cpp index 2f7e95991e..c715f4d3d7 100644 --- a/src/vcpkg/commands.build.cpp +++ b/src/vcpkg/commands.build.cpp @@ -282,6 +282,26 @@ namespace vcpkg std::string to_string(DownloadTool tool) { return to_string_view(tool).to_string(); } + ConfigurationType parse_configuration_type(const std::string& str) + { + if (str.empty()) return ConfigurationType::BOTH; + if (Strings::case_insensitive_ascii_equals(str, "debug")) return ConfigurationType::DEBUG; + if (Strings::case_insensitive_ascii_equals(str, "release")) return ConfigurationType::RELEASE; + Checks::msg_exit_with_message(VCPKG_LINE_INFO, msgUnknownSettingForBuildType, msg::option = str); + } + + StringLiteral to_string_view(ConfigurationType config_type) + { + switch (config_type) + { + case ConfigurationType::DEBUG: return "debug"; + case ConfigurationType::RELEASE: return "release"; + default: return "both"; + } + } + + std::string to_string(ConfigurationType config_type) { return to_string_view(config_type).to_string(); } + Optional to_linkage_type(StringView str) { if (str == "dynamic") return LinkageType::DYNAMIC; @@ -777,6 +797,11 @@ namespace vcpkg variables.emplace_back("ARIA2", paths.get_tool_exe(Tools::ARIA2, stdout_sink)); } + if (action.build_options.build_type != ConfigurationType::BOTH) + { + variables.emplace_back("VCPKG_DEFAULT_BUILD_TYPE", to_string(action.build_options.build_type)); + } + if (auto cmake_debug = args.cmake_debug.get()) { if (cmake_debug->is_port_affected(scf.core_paragraph->name)) @@ -1166,6 +1191,10 @@ namespace vcpkg const auto& triplet_canonical_name = action.spec.triplet().canonical_name(); abi_tag_entries.emplace_back("triplet", triplet_canonical_name); abi_tag_entries.emplace_back("triplet_abi", triplet_abi); + if (action.build_options.build_type != ConfigurationType::BOTH) + { + abi_tag_entries.emplace_back("build_type", to_string(action.build_options.build_type)); + } auto& fs = paths.get_filesystem(); abi_entries_from_pre_build_info(fs, grdk_cache, pre_build_info, abi_tag_entries); @@ -1787,17 +1816,7 @@ namespace vcpkg case VcpkgTripletVar::CHAINLOAD_TOOLCHAIN_FILE: external_toolchain_file = variable_value.empty() ? nullopt : Optional{variable_value}; break; - case VcpkgTripletVar::BUILD_TYPE: - if (variable_value.empty()) - build_type = ConfigurationType::BOTH; - else if (Strings::case_insensitive_ascii_equals(variable_value, "debug")) - build_type = ConfigurationType::DEBUG; - else if (Strings::case_insensitive_ascii_equals(variable_value, "release")) - build_type = ConfigurationType::RELEASE; - else - Checks::msg_exit_with_message( - VCPKG_LINE_INFO, msgUnknownSettingForBuildType, msg::option = variable_value); - break; + case VcpkgTripletVar::BUILD_TYPE: build_type = parse_configuration_type(variable_value); break; case VcpkgTripletVar::ENV_PASSTHROUGH: passthrough_env_vars_tracked = Strings::split(variable_value, ';'); Util::Vectors::append(&passthrough_env_vars, passthrough_env_vars_tracked); diff --git a/src/vcpkg/commands.install.cpp b/src/vcpkg/commands.install.cpp index 8ccd17875d..f37c6897f9 100644 --- a/src/vcpkg/commands.install.cpp +++ b/src/vcpkg/commands.install.cpp @@ -1090,7 +1090,8 @@ namespace vcpkg PurgeDecompressFailure::NO, Util::Enum::to_enum(is_editable), prohibit_backcompat_features ? BackcompatFeatures::PROHIBIT : BackcompatFeatures::ALLOW, - print_cmake_usage}; + print_cmake_usage, + parse_configuration_type(args.build_type.value_or(""))}; auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths); auto& var_provider = *var_provider_storage; diff --git a/src/vcpkg/vcpkgcmdarguments.cpp b/src/vcpkg/vcpkgcmdarguments.cpp index bda11c57f4..c58dc41413 100644 --- a/src/vcpkg/vcpkgcmdarguments.cpp +++ b/src/vcpkg/vcpkgcmdarguments.cpp @@ -324,6 +324,11 @@ namespace vcpkg StabilityTag::Standard, args.triplet, msg::format(msgSpecifyTargetArch, msg::env_var = format_environment_variable("VCPKG_DEFAULT_TRIPLET"))); + args.parser.parse_option( + BUILD_TYPE_ARG, + StabilityTag::Experimental, + args.build_type, + msg::format(msgSpecifyBuildType, msg::env_var = format_environment_variable("VCPKG_DEFAULT_BUILD_TYPE"))); args.parser.parse_option( HOST_TRIPLET_ARG, StabilityTag::Standard, @@ -547,6 +552,7 @@ namespace vcpkg from_env(get_env, TRIPLET_ENV, triplet); from_env(get_env, HOST_TRIPLET_ENV, host_triplet); + from_env(get_env, BUILD_TYPE_ENV, build_type); vcpkg_root_dir_env = get_env(VCPKG_ROOT_DIR_ENV); from_env(get_env, DOWNLOADS_ROOT_DIR_ENV, downloads_root_dir); from_env(get_env, ASSET_SOURCES_ENV, asset_sources_template_env); From cc11dd9661a937b43cd3ca82085307107d8d2123 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Fri, 13 Oct 2023 02:27:52 +0300 Subject: [PATCH 3/5] Make the default build type option exclusive to installing in manifest mode. --- include/vcpkg/base/message-data.inc.h | 7 +----- include/vcpkg/commands.build.h | 1 - include/vcpkg/vcpkgcmdarguments.h | 3 --- src/vcpkg/commands.build.cpp | 20 +++++++++-------- src/vcpkg/commands.install.cpp | 31 ++++++++++++++++++++++++++- src/vcpkg/vcpkgcmdarguments.cpp | 6 ------ 6 files changed, 42 insertions(+), 26 deletions(-) diff --git a/include/vcpkg/base/message-data.inc.h b/include/vcpkg/base/message-data.inc.h index 5c8b4ab0d3..c103c7363d 100644 --- a/include/vcpkg/base/message-data.inc.h +++ b/include/vcpkg/base/message-data.inc.h @@ -1668,6 +1668,7 @@ DECLARE_MESSAGE(HelpTxtOptManifestFeature, (), "", "Additional features from the top-level manifest to install (manifest mode)") +DECLARE_MESSAGE(HelpTxtBuildType, (), "", "Build type (debug, release or both if not specified) (manifest mode)") DECLARE_MESSAGE(HelpTxtOptManifestNoDefault, (), "", @@ -2629,12 +2630,6 @@ DECLARE_MESSAGE(SpecifyTargetArch, (msg::env_var), "'vcpkg help triplet' is a command line that should not be localized", "Target triplet. See 'vcpkg help triplet' (default: {env_var})") -DECLARE_MESSAGE(SpecifyBuildType, - (msg::env_var), - "", - "Build type (experimental). Possible values are: debug, release. Defaults to both Debug and Release if " - "not specified. " - "Overrides {env_var}, may be overridden by the VCPKG_BUILD_TYPE variable of the triplet file.") DECLARE_MESSAGE(StartCodeUnitInContinue, (), "", "found start code unit in continue position") DECLARE_MESSAGE(StoredBinaryCache, (msg::path), "", "Stored binary cache: \"{path}\"") DECLARE_MESSAGE(StoredBinariesToDestinations, diff --git a/include/vcpkg/commands.build.h b/include/vcpkg/commands.build.h index 6d49056b75..c0cdad90fa 100644 --- a/include/vcpkg/commands.build.h +++ b/include/vcpkg/commands.build.h @@ -60,7 +60,6 @@ namespace vcpkg StringLiteral to_string_view(DownloadTool tool); std::string to_string(DownloadTool tool); - ConfigurationType parse_configuration_type(const std::string& s); StringLiteral to_string_view(ConfigurationType config_type); std::string to_string(ConfigurationType config_type); diff --git a/include/vcpkg/vcpkgcmdarguments.h b/include/vcpkg/vcpkgcmdarguments.h index 5bf5cf71f8..03f172ca76 100644 --- a/include/vcpkg/vcpkgcmdarguments.h +++ b/include/vcpkg/vcpkgcmdarguments.h @@ -260,9 +260,6 @@ namespace vcpkg constexpr static StringLiteral OVERLAY_TRIPLETS_ARG = "overlay-triplets"; std::vector cli_overlay_triplets; std::vector env_overlay_triplets; - constexpr static StringLiteral BUILD_TYPE_ENV = "VCPKG_DEFAULT_BUILD_TYPE"; - constexpr static StringLiteral BUILD_TYPE_ARG = "build-type"; - Optional build_type; constexpr static StringLiteral BINARY_SOURCES_ENV = "VCPKG_BINARY_SOURCES"; constexpr static StringLiteral BINARY_SOURCES_ARG = "binarysource"; diff --git a/src/vcpkg/commands.build.cpp b/src/vcpkg/commands.build.cpp index c715f4d3d7..d327ac5703 100644 --- a/src/vcpkg/commands.build.cpp +++ b/src/vcpkg/commands.build.cpp @@ -282,14 +282,6 @@ namespace vcpkg std::string to_string(DownloadTool tool) { return to_string_view(tool).to_string(); } - ConfigurationType parse_configuration_type(const std::string& str) - { - if (str.empty()) return ConfigurationType::BOTH; - if (Strings::case_insensitive_ascii_equals(str, "debug")) return ConfigurationType::DEBUG; - if (Strings::case_insensitive_ascii_equals(str, "release")) return ConfigurationType::RELEASE; - Checks::msg_exit_with_message(VCPKG_LINE_INFO, msgUnknownSettingForBuildType, msg::option = str); - } - StringLiteral to_string_view(ConfigurationType config_type) { switch (config_type) @@ -1816,7 +1808,17 @@ namespace vcpkg case VcpkgTripletVar::CHAINLOAD_TOOLCHAIN_FILE: external_toolchain_file = variable_value.empty() ? nullopt : Optional{variable_value}; break; - case VcpkgTripletVar::BUILD_TYPE: build_type = parse_configuration_type(variable_value); break; + case VcpkgTripletVar::BUILD_TYPE: + if (variable_value.empty()) + build_type = ConfigurationType::BOTH; + else if (Strings::case_insensitive_ascii_equals(variable_value, "debug")) + build_type = ConfigurationType::DEBUG; + else if (Strings::case_insensitive_ascii_equals(variable_value, "release")) + build_type = ConfigurationType::RELEASE; + else + Checks::msg_exit_with_message( + VCPKG_LINE_INFO, msgUnknownSettingForBuildType, msg::option = variable_value); + break; case VcpkgTripletVar::ENV_PASSTHROUGH: passthrough_env_vars_tracked = Strings::split(variable_value, ';'); Util::Vectors::append(&passthrough_env_vars, passthrough_env_vars_tracked); diff --git a/src/vcpkg/commands.install.cpp b/src/vcpkg/commands.install.cpp index f37c6897f9..2bf25846a4 100644 --- a/src/vcpkg/commands.install.cpp +++ b/src/vcpkg/commands.install.cpp @@ -618,6 +618,7 @@ namespace vcpkg static constexpr StringLiteral OPTION_ENFORCE_PORT_CHECKS = "enforce-port-checks"; static constexpr StringLiteral OPTION_ALLOW_UNSUPPORTED_PORT = "allow-unsupported"; static constexpr StringLiteral OPTION_NO_PRINT_USAGE = "no-print-usage"; + static constexpr StringLiteral OPTION_DEFAULT_BUILD_TYPE = "x-build-type"; static constexpr CommandSwitch INSTALL_SWITCHES[] = { {OPTION_DRY_RUN, msgHelpTxtOptDryRun}, @@ -643,6 +644,7 @@ namespace vcpkg static constexpr CommandSetting INSTALL_SETTINGS[] = { {OPTION_XUNIT, {}}, // internal use {OPTION_WRITE_PACKAGES_CONFIG, msgHelpTxtOptWritePkgConfig}, + {OPTION_DEFAULT_BUILD_TYPE, msgHelpTxtBuildType}, }; static constexpr CommandMultiSetting INSTALL_MULTISETTINGS[] = { @@ -1017,6 +1019,7 @@ namespace vcpkg : UnsupportedPortAction::Error; const PrintUsage print_cmake_usage = Util::Sets::contains(options.switches, OPTION_NO_PRINT_USAGE) ? PrintUsage::NO : PrintUsage::YES; + ConfigurationType build_type = ConfigurationType::BOTH; get_global_metrics_collector().track_bool(BoolMetric::InstallManifestMode, paths.manifest_mode_enabled()); @@ -1039,6 +1042,27 @@ namespace vcpkg msg::println_error(msgErrorInvalidManifestModeOption, msg::option = OPTION_EDITABLE); failure = true; } + if (auto it = options.settings.find(OPTION_DEFAULT_BUILD_TYPE); it != options.settings.end()) + { + auto& str = it->second; + if (str.empty()) + { + build_type = ConfigurationType::BOTH; + } + else if (Strings::case_insensitive_ascii_equals(str, "debug")) + { + build_type = ConfigurationType::DEBUG; + } + else if (Strings::case_insensitive_ascii_equals(str, "release")) + { + build_type = ConfigurationType::RELEASE; + } + else + { + msg::println_error(msgUnknownSettingForBuildType, msg::option = str); + failure = true; + } + } if (failure) { msg::println(msgUsingManifestAt, msg::path = p->path); @@ -1066,6 +1090,11 @@ namespace vcpkg msg::println_error(msgErrorInvalidClassicModeOption, msg::option = OPTION_MANIFEST_FEATURE); failure = true; } + if (Util::Sets::contains(options.settings, OPTION_DEFAULT_BUILD_TYPE)) + { + msg::println_error(msgErrorInvalidClassicModeOption, msg::option = OPTION_DEFAULT_BUILD_TYPE); + failure = true; + } if (failure) { print_usage(CommandInstallMetadataClassic); @@ -1091,7 +1120,7 @@ namespace vcpkg Util::Enum::to_enum(is_editable), prohibit_backcompat_features ? BackcompatFeatures::PROHIBIT : BackcompatFeatures::ALLOW, print_cmake_usage, - parse_configuration_type(args.build_type.value_or(""))}; + build_type}; auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths); auto& var_provider = *var_provider_storage; diff --git a/src/vcpkg/vcpkgcmdarguments.cpp b/src/vcpkg/vcpkgcmdarguments.cpp index c58dc41413..bda11c57f4 100644 --- a/src/vcpkg/vcpkgcmdarguments.cpp +++ b/src/vcpkg/vcpkgcmdarguments.cpp @@ -324,11 +324,6 @@ namespace vcpkg StabilityTag::Standard, args.triplet, msg::format(msgSpecifyTargetArch, msg::env_var = format_environment_variable("VCPKG_DEFAULT_TRIPLET"))); - args.parser.parse_option( - BUILD_TYPE_ARG, - StabilityTag::Experimental, - args.build_type, - msg::format(msgSpecifyBuildType, msg::env_var = format_environment_variable("VCPKG_DEFAULT_BUILD_TYPE"))); args.parser.parse_option( HOST_TRIPLET_ARG, StabilityTag::Standard, @@ -552,7 +547,6 @@ namespace vcpkg from_env(get_env, TRIPLET_ENV, triplet); from_env(get_env, HOST_TRIPLET_ENV, host_triplet); - from_env(get_env, BUILD_TYPE_ENV, build_type); vcpkg_root_dir_env = get_env(VCPKG_ROOT_DIR_ENV); from_env(get_env, DOWNLOADS_ROOT_DIR_ENV, downloads_root_dir); from_env(get_env, ASSET_SOURCES_ENV, asset_sources_template_env); From ae5ffeb048cdf3b28a2c1183dd69a792d24f7c1d Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Fri, 13 Oct 2023 13:57:08 +0300 Subject: [PATCH 4/5] Consider the default build type when extracting information from the triplets. Fixes post-build validation warnings. --- include/vcpkg/cmakevars.h | 4 +++- src/vcpkg/cmakevars.cpp | 27 ++++++++++++++++++--------- src/vcpkg/commands.install.cpp | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/include/vcpkg/cmakevars.h b/include/vcpkg/cmakevars.h index 097cd99f3c..c063a00df6 100644 --- a/include/vcpkg/cmakevars.h +++ b/include/vcpkg/cmakevars.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -35,5 +36,6 @@ namespace vcpkg::CMakeVars virtual void load_tag_vars(const ActionPlan& action_plan, Triplet host_triplet) const = 0; }; - std::unique_ptr make_triplet_cmake_var_provider(const VcpkgPaths& paths); + std::unique_ptr make_triplet_cmake_var_provider( + const VcpkgPaths& paths, ConfigurationType default_build_type = ConfigurationType::BOTH); } diff --git a/src/vcpkg/cmakevars.cpp b/src/vcpkg/cmakevars.cpp index 5d1c199b5e..614b572e59 100644 --- a/src/vcpkg/cmakevars.cpp +++ b/src/vcpkg/cmakevars.cpp @@ -31,7 +31,10 @@ namespace vcpkg::CMakeVars { struct TripletCMakeVarProvider : CMakeVarProvider { - explicit TripletCMakeVarProvider(const vcpkg::VcpkgPaths& paths) : paths(paths) { } + explicit TripletCMakeVarProvider(const vcpkg::VcpkgPaths& paths, ConfigurationType default_build_type) + : paths(paths), default_build_type(default_build_type) + { + } TripletCMakeVarProvider(const TripletCMakeVarProvider&) = delete; TripletCMakeVarProvider& operator=(const TripletCMakeVarProvider&) = delete; @@ -60,26 +63,32 @@ namespace vcpkg::CMakeVars std::vector>>& vars) const; const VcpkgPaths& paths; + const ConfigurationType default_build_type; mutable std::unordered_map> dep_resolution_vars; mutable std::unordered_map> tag_vars; mutable std::unordered_map> generic_triplet_vars; }; } - std::unique_ptr make_triplet_cmake_var_provider(const vcpkg::VcpkgPaths& paths) + std::unique_ptr make_triplet_cmake_var_provider(const vcpkg::VcpkgPaths& paths, + ConfigurationType default_build_type) { - return std::make_unique(paths); + return std::make_unique(paths, default_build_type); } static std::string create_extraction_file_prelude(const VcpkgPaths& paths, - const std::map& emitted_triplets) + const std::map& emitted_triplets, + ConfigurationType default_build_type) { const auto& fs = paths.get_filesystem(); std::string extraction_file; - extraction_file.append("cmake_minimum_required(VERSION 3.5)\n" - "macro(vcpkg_triplet_file VCPKG_TRIPLET_ID)\n" - "set(_vcpkg_triplet_file_BACKUP_CURRENT_LIST_FILE \"${CMAKE_CURRENT_LIST_FILE}\")\n"); + fmt::format_to(std::back_inserter(extraction_file), + "cmake_minimum_required(VERSION 3.5)\n" + "macro(vcpkg_triplet_file VCPKG_TRIPLET_ID)\n" + "set(VCPKG_BUILD_TYPE \"{}\")\n" + "set(_vcpkg_triplet_file_BACKUP_CURRENT_LIST_FILE \"${{CMAKE_CURRENT_LIST_FILE}}\")\n", + to_string(default_build_type)); for (auto&& p : emitted_triplets) { @@ -116,7 +125,7 @@ endmacro() { emitted_triplets[spec_abi_setting.first.package_spec.triplet()] = emitted_triplet_id++; } - std::string extraction_file = create_extraction_file_prelude(paths, emitted_triplets); + std::string extraction_file = create_extraction_file_prelude(paths, emitted_triplets, default_build_type); // The variables collected here are those necessary to perform builds. extraction_file.append(R"( @@ -196,7 +205,7 @@ endfunction() emitted_triplets[spec.triplet()] = emitted_triplet_id++; } - std::string extraction_file = create_extraction_file_prelude(paths, emitted_triplets); + std::string extraction_file = create_extraction_file_prelude(paths, emitted_triplets, default_build_type); // The variables collected here are those necessary to perform dependency resolution. // If a value affects platform expressions, it must be here. diff --git a/src/vcpkg/commands.install.cpp b/src/vcpkg/commands.install.cpp index 2bf25846a4..9ce09ed14c 100644 --- a/src/vcpkg/commands.install.cpp +++ b/src/vcpkg/commands.install.cpp @@ -1122,7 +1122,7 @@ namespace vcpkg print_cmake_usage, build_type}; - auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths); + auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths, build_type); auto& var_provider = *var_provider_storage; const CreateInstallPlanOptions create_options{host_triplet, paths.packages(), unsupported_port_action}; From 137cd266f7d19dd1c179edb494ce3d85bc471b2a Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Fri, 13 Oct 2023 22:30:01 +0300 Subject: [PATCH 5/5] Fix CI. --- locales/messages.json | 1 + src/vcpkg/commands.build.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/messages.json b/locales/messages.json index 18c764cce4..19a8e7bf0c 100644 --- a/locales/messages.json +++ b/locales/messages.json @@ -948,6 +948,7 @@ "HelpTextOptFullDesc": "Does not truncate long text", "HelpTopicCommand": "Displays specific help topic", "HelpTopicsCommand": "Displays full list of help topics", + "HelpTxtBuildType": "Build type (debug, release or both if not specified) (manifest mode)", "HelpTxtOptAllowUnsupportedPort": "Continues with a warning on unsupported ports, rather than failing", "HelpTxtOptCleanAfterBuild": "Cleans buildtrees, packages and downloads after building each package", "HelpTxtOptCleanBuildTreesAfterBuild": "Cleans buildtrees after building each package", diff --git a/src/vcpkg/commands.build.cpp b/src/vcpkg/commands.build.cpp index d327ac5703..f13b045e6f 100644 --- a/src/vcpkg/commands.build.cpp +++ b/src/vcpkg/commands.build.cpp @@ -288,7 +288,7 @@ namespace vcpkg { case ConfigurationType::DEBUG: return "debug"; case ConfigurationType::RELEASE: return "release"; - default: return "both"; + default: return ""; } }