From 78f8c7193f367b5876838dde8b63d3bc99eae37b Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Fri, 10 Jul 2020 15:08:46 -0700 Subject: [PATCH 1/8] [vcpkg] Enable binary caching by default. Support `x-` migration. Fix passing multiple copies of single parameter arguments. --- toolsrc/include/vcpkg/vcpkgcmdarguments.h | 6 +-- toolsrc/src/vcpkg/binarycaching.cpp | 61 ++++++++++++++--------- toolsrc/src/vcpkg/vcpkgcmdarguments.cpp | 29 +++++++++-- 3 files changed, 67 insertions(+), 29 deletions(-) diff --git a/toolsrc/include/vcpkg/vcpkgcmdarguments.h b/toolsrc/include/vcpkg/vcpkgcmdarguments.h index bcbf106191c03e..09ec5639260499 100644 --- a/toolsrc/include/vcpkg/vcpkgcmdarguments.h +++ b/toolsrc/include/vcpkg/vcpkgcmdarguments.h @@ -135,7 +135,7 @@ namespace vcpkg constexpr static StringLiteral OVERLAY_TRIPLETS_ARG = "overlay-triplets"; std::vector overlay_triplets; - constexpr static StringLiteral BINARY_SOURCES_ARG = "x-binarysource"; + constexpr static StringLiteral BINARY_SOURCES_ARG = "binarysource"; std::vector binary_sources; constexpr static StringLiteral DEBUG_SWITCH = "debug"; @@ -166,8 +166,8 @@ namespace vcpkg constexpr static StringLiteral MANIFEST_MODE_FEATURE = "manifests"; Optional manifest_mode = nullopt; - bool binary_caching_enabled() const { return binary_caching.value_or(false); } - bool compiler_tracking_enabled() const { return compiler_tracking.value_or(false); } + bool binary_caching_enabled() const { return binary_caching.value_or(true); } + bool compiler_tracking_enabled() const { return compiler_tracking.value_or(true); } std::string command; std::vector command_arguments; diff --git a/toolsrc/src/vcpkg/binarycaching.cpp b/toolsrc/src/vcpkg/binarycaching.cpp index 583720bc9344a0..0eff180354e240 100644 --- a/toolsrc/src/vcpkg/binarycaching.cpp +++ b/toolsrc/src/vcpkg/binarycaching.cpp @@ -659,6 +659,22 @@ ExpectedS> vcpkg::create_binary_provider_from_c } namespace { + const ExpectedS& default_cache_path() + { + static auto cachepath = System::get_platform_cache_home().then([](fs::path p) -> ExpectedS { + p /= fs::u8path("vcpkg/archives"); + if (!p.is_absolute()) + { + return {"default path was not absolute: " + p.u8string(), expected_right_tag}; + } + else + { + return {std::move(p), expected_left_tag}; + } + }); + return cachepath; + } + struct State { bool m_cleared = false; @@ -855,17 +871,11 @@ namespace segments[0].first); } - auto&& maybe_home = System::get_platform_cache_home(); + const auto& maybe_home = default_cache_path(); if (!maybe_home.has_value()) return add_error(maybe_home.error(), segments[0].first); - auto p = *maybe_home.get(); - p /= fs::u8path("vcpkg/archives"); - if (!p.is_absolute()) - { - return add_error("default path was not absolute: " + p.u8string(), segments[0].first); - } - - handle_readwrite(state->archives_to_read, state->archives_to_write, std::move(p), segments, 1); + handle_readwrite( + state->archives_to_read, state->archives_to_write, fs::path(*maybe_home.get()), segments, 1); } else { @@ -985,38 +995,43 @@ std::string vcpkg::generate_nuspec(const VcpkgPaths& paths, void vcpkg::help_topic_binary_caching(const VcpkgPaths&) { - System::print2( - System::Color::warning, - "** The following help documentation covers an experimental feature that will change at any time **\n\n"); - HelpTableFormatter tbl; tbl.text( "Vcpkg can cache compiled packages to accelerate restoration on a single machine or across the network." - " This functionality is currently disabled by default and must be enabled by either passing `--binarycaching` " - "to every vcpkg command line or setting the environment variable `VCPKG_FEATURE_FLAGS` to `binarycaching`."); + " This functionality is currently enable by default and can be disabled by either passing `--no-binarycaching` " + "to every vcpkg command line or setting the environment variable `VCPKG_FEATURE_FLAGS` to `-binarycaching`."); tbl.blank(); tbl.blank(); tbl.text( - "Once caching is enabled, it can be further configured by either passing `--x-binarysource=` options " + "Once caching is enabled, it can be further configured by either passing `--binarysource=` options " "to every command line or setting the `VCPKG_BINARY_SOURCES` environment variable to a set of sources (Ex: " "\";;...\"). Command line sources are interpreted after environment sources."); tbl.blank(); tbl.blank(); tbl.header("Valid source strings"); tbl.format("clear", "Removes all previous sources"); - tbl.format("default[,upload]", "Adds the default file-based source location (~/.vcpkg/archives)."); - tbl.format("files,[,upload]", "Adds a custom file-based source location."); - tbl.format("nuget,[,upload]", + tbl.format("default[,]", "Adds the default file-based location."); + tbl.format("files,[,]", "Adds a custom file-based location."); + tbl.format("nuget,[,]", "Adds a NuGet-based source; equivalent to the `-Source` parameter of the NuGet CLI."); - tbl.format("nugetconfig,[,upload]", + tbl.format("nugetconfig,[,]", "Adds a NuGet-config-file-based source; equivalent to the `-Config` parameter of the NuGet CLI. This " "config should specify `defaultPushSource` for uploads."); tbl.format("interactive", "Enables interactive credential management for some source types"); tbl.blank(); - tbl.text("The `upload` optional parameter for certain source strings controls whether on-demand builds will be " - "uploaded to that remote."); - + tbl.text("The `` optional parameter for certain strings controls whether they will be consulted for " + "downloading binaries and whether on-demand builds will be uploaded to that remote. It can be specified " + "as 'read', 'write', or 'readwrite'."); + tbl.blank(); System::print2(tbl.m_str); + const auto& maybe_cachepath = default_cache_path(); + if (auto p = maybe_cachepath.get()) + { + auto p_preferred = *p; + System::print2("\nBased on your system settings, the default path to store binaries is\n ", + p_preferred.make_preferred().u8string(), + '\n'); + } } std::string vcpkg::generate_nuget_packages_config(const Dependencies::ActionPlan& action) diff --git a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp index 6bc14309e40265..9f1df5b3ecd842 100644 --- a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp +++ b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp @@ -410,7 +410,12 @@ namespace vcpkg auto options_copy = this->optional_command_arguments; for (auto&& option : command_structure.options.switches) { - const auto it = options_copy.find(option.name); + auto it = options_copy.find(option.name); + if (it == options_copy.end() && !Strings::starts_with(option.name, "x-")) + { + // Support x- as a fallback to enable easier migration for users + it = options_copy.find(Strings::concat("x-", option.name)); + } if (it != options_copy.end()) { if (it->second.has_value()) @@ -430,7 +435,12 @@ namespace vcpkg for (auto&& option : command_structure.options.settings) { - const auto it = options_copy.find(option.name); + auto it = options_copy.find(option.name); + if (it == options_copy.end() && !Strings::starts_with(option.name, "x-")) + { + // Support x- as a fallback to enable easier migration for users + it = options_copy.find(Strings::concat("x-", option.name)); + } if (it != options_copy.end()) { if (!it->second.has_value()) @@ -450,6 +460,12 @@ namespace vcpkg System::Color::error, "Error: The option '%s' must be passed an argument.\n", option.name); failed = true; } + else if (value.size() > 1) + { + System::printf( + System::Color::error, "Error: The option '%s' can only be passed once.\n", option.name); + failed = true; + } else { output.settings.emplace(option.name, value.front()); @@ -461,7 +477,12 @@ namespace vcpkg for (auto&& option : command_structure.options.multisettings) { - const auto it = options_copy.find(option.name); + auto it = options_copy.find(option.name); + if (it == options_copy.end() && !Strings::starts_with(option.name, "x-")) + { + // Support x- as a fallback to enable easier migration for users + it = options_copy.find(Strings::concat("x-", option.name)); + } if (it != options_copy.end()) { if (!it->second.has_value()) @@ -587,6 +608,8 @@ namespace vcpkg table.format("", "(default: " + format_environment_variable("VCPKG_DEFAULT_TRIPLET") + ')'); table.format(opt(OVERLAY_PORTS_ARG, "=", ""), "Specify directories to be used when searching for ports"); table.format(opt(OVERLAY_TRIPLETS_ARG, "=", ""), "Specify directories containing triplets files"); + table.format(opt(BINARY_SOURCES_ARG, "=", ""), + "Add sources for binary caching. See 'vcpkg help binarycaching'"); table.format(opt(DOWNLOADS_ROOT_DIR_ARG, "=", ""), "Specify the downloads root directory"); table.format("", "(default: " + format_environment_variable("VCPKG_DOWNLOADS") + ')'); table.format(opt(VCPKG_ROOT_DIR_ARG, " ", ""), "Specify the vcpkg root directory"); From c8e5ac3ba4d65ae6e459cb154815239537a1755b Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Fri, 10 Jul 2020 15:22:48 -0700 Subject: [PATCH 2/8] [vcpkg] Handle x- prefixes for general arguments --- toolsrc/src/vcpkg/vcpkgcmdarguments.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp index 9f1df5b3ecd842..8230e61afeb439 100644 --- a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp +++ b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp @@ -181,13 +181,17 @@ namespace vcpkg static bool try_parse_argument_as_option(StringView option, StringView argument, T& place, F parser) { // remove the first two '-'s - const auto arg = argument.substr(2); + auto arg = argument.substr(2); if (arg.size() <= option.size() + 1) { // it is impossible for this argument to be this option return false; } + if (Strings::starts_with(arg, "x-") && !Strings::starts_with(option, "x-")) + { + arg = arg.substr(2); + } if (Strings::starts_with(arg, option) && arg.byte_at_index(option.size()) == '=') { parser(arg.substr(option.size() + 1), option, place); @@ -197,21 +201,33 @@ namespace vcpkg return false; } + static bool equals_modulo_experimental(StringView arg, StringView option) + { + if (Strings::starts_with(arg, "x-") && !Strings::starts_with(option, "x-")) + { + return arg.substr(2) == option; + } + else + { + return arg == option; + } + } + // returns true if this does parse this argument as this option // REQUIRES: Strings::starts_with(argument, "--"); template static bool try_parse_argument_as_switch(StringView option, StringView argument, T& place) { // remove the first two '-'s - const auto arg = argument.substr(2); + auto arg = argument.substr(2); - if (arg == option) + if (equals_modulo_experimental(arg, option)) { parse_switch(true, option, place); return true; } - if (Strings::starts_with(arg, "no-") && arg.substr(3) == option) + if (Strings::starts_with(arg, "no-") && equals_modulo_experimental(arg.substr(3), option)) { parse_switch(false, option, place); return true; From 80f62a681b10e18f7442bafe22f4ef5076e4d2ca Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Fri, 10 Jul 2020 15:34:32 -0700 Subject: [PATCH 3/8] [vcpkg] Fix #12285 and improve documentation of default binary cache path --- toolsrc/src/vcpkg/base/system.cpp | 15 ++++++++++++++- toolsrc/src/vcpkg/binarycaching.cpp | 15 ++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/toolsrc/src/vcpkg/base/system.cpp b/toolsrc/src/vcpkg/base/system.cpp index d02c7ae4b8f023..54f3211f99c85b 100644 --- a/toolsrc/src/vcpkg/base/system.cpp +++ b/toolsrc/src/vcpkg/base/system.cpp @@ -135,7 +135,20 @@ namespace vcpkg static ExpectedS s_home = []() -> ExpectedS { auto maybe_home = System::get_environment_variable("LOCALAPPDATA"); if (!maybe_home.has_value() || maybe_home.get()->empty()) - return {"unable to read %LOCALAPPDATA%", ExpectedRightTag{}}; + { + // Consult %APPDATA% as a workaround for Service accounts + // Microsoft/vcpkg#12285 + maybe_home = System::get_environment_variable("APPDATA"); + if (!maybe_home.has_value() || maybe_home.get()->empty()) + { + return {"unable to read %LOCALAPPDATA% or %APPDATA%", ExpectedRightTag{}}; + } + + auto p = fs::u8path(*maybe_home.get()).parent_path(); + p /= "Local"; + if (!p.is_absolute()) return {"%APPDATA% was not an absolute path", ExpectedRightTag{}}; + return {std::move(p), ExpectedLeftTag{}}; + } auto p = fs::u8path(*maybe_home.get()); if (!p.is_absolute()) return {"%LOCALAPPDATA% was not an absolute path", ExpectedRightTag{}}; diff --git a/toolsrc/src/vcpkg/binarycaching.cpp b/toolsrc/src/vcpkg/binarycaching.cpp index 0eff180354e240..1d9197c2045f6a 100644 --- a/toolsrc/src/vcpkg/binarycaching.cpp +++ b/toolsrc/src/vcpkg/binarycaching.cpp @@ -996,10 +996,10 @@ std::string vcpkg::generate_nuspec(const VcpkgPaths& paths, void vcpkg::help_topic_binary_caching(const VcpkgPaths&) { HelpTableFormatter tbl; - tbl.text( - "Vcpkg can cache compiled packages to accelerate restoration on a single machine or across the network." - " This functionality is currently enable by default and can be disabled by either passing `--no-binarycaching` " - "to every vcpkg command line or setting the environment variable `VCPKG_FEATURE_FLAGS` to `-binarycaching`."); + tbl.text("Vcpkg can cache compiled packages to accelerate restoration on a single machine or across the network." + " This functionality is currently enabled by default and can be disabled by either passing " + "`--no-binarycaching` to every vcpkg command line or setting the environment variable " + "`VCPKG_FEATURE_FLAGS` to `-binarycaching`."); tbl.blank(); tbl.blank(); tbl.text( @@ -1028,9 +1028,10 @@ void vcpkg::help_topic_binary_caching(const VcpkgPaths&) if (auto p = maybe_cachepath.get()) { auto p_preferred = *p; - System::print2("\nBased on your system settings, the default path to store binaries is\n ", - p_preferred.make_preferred().u8string(), - '\n'); + System::print2( + "\nBased on your system settings, the default path to store binaries is\n ", + p_preferred.make_preferred().u8string(), + "\n\nThis consults %LOCALAPPDATA%/%APPDATA% on Windows and $XDG_CACHE_HOME or $HOME on other platforms."); } } From eb882e707144f7bb89e2ad57dffa87cee946b500 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Sat, 11 Jul 2020 21:12:03 -0700 Subject: [PATCH 4/8] [vcpkg] Revert x- prefix homogenization for per-command arguments --- toolsrc/src/vcpkg/vcpkgcmdarguments.cpp | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp index 4f59eea68877b1..6cfbd43f8492af 100644 --- a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp +++ b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp @@ -427,12 +427,7 @@ namespace vcpkg auto options_copy = this->optional_command_arguments; for (auto&& option : command_structure.options.switches) { - auto it = options_copy.find(option.name); - if (it == options_copy.end() && !Strings::starts_with(option.name, "x-")) - { - // Support x- as a fallback to enable easier migration for users - it = options_copy.find(Strings::concat("x-", option.name)); - } + const auto it = options_copy.find(option.name); if (it != options_copy.end()) { if (it->second.has_value()) @@ -452,12 +447,7 @@ namespace vcpkg for (auto&& option : command_structure.options.settings) { - auto it = options_copy.find(option.name); - if (it == options_copy.end() && !Strings::starts_with(option.name, "x-")) - { - // Support x- as a fallback to enable easier migration for users - it = options_copy.find(Strings::concat("x-", option.name)); - } + const auto it = options_copy.find(option.name); if (it != options_copy.end()) { if (!it->second.has_value()) @@ -494,12 +484,7 @@ namespace vcpkg for (auto&& option : command_structure.options.multisettings) { - auto it = options_copy.find(option.name); - if (it == options_copy.end() && !Strings::starts_with(option.name, "x-")) - { - // Support x- as a fallback to enable easier migration for users - it = options_copy.find(Strings::concat("x-", option.name)); - } + const auto it = options_copy.find(option.name); if (it != options_copy.end()) { if (!it->second.has_value()) From f5b2abc04613ead3e15739c412dc400f9995c7c3 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Sat, 11 Jul 2020 21:36:17 -0700 Subject: [PATCH 5/8] [vcpkg] Only use accelerated compiler detection for Windows Desktop + Ninja. Improve breadcrumbs for users encountering issues. --- scripts/detect_compiler/CMakeLists.txt | 14 ++++++++------ toolsrc/src/vcpkg/build.cpp | 8 ++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/scripts/detect_compiler/CMakeLists.txt b/scripts/detect_compiler/CMakeLists.txt index 379a87d03c06ff..ea27db2b9ca297 100644 --- a/scripts/detect_compiler/CMakeLists.txt +++ b/scripts/detect_compiler/CMakeLists.txt @@ -1,12 +1,14 @@ cmake_minimum_required(VERSION 3.10) project(detect_compiler NONE) -set(CMAKE_C_COMPILER_WORKS 1) -set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_COMPILER_FORCED 1) -set(CMAKE_CXX_COMPILER_WORKS 1) -set(CMAKE_CXX_COMPILER_ID_RUN 1) -set(CMAKE_CXX_COMPILER_FORCED 1) +if(CMAKE_GENERATOR STREQUAL "Ninja" AND CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(CMAKE_C_COMPILER_WORKS 1) + set(CMAKE_C_COMPILER_ID_RUN 1) + set(CMAKE_C_COMPILER_FORCED 1) + set(CMAKE_CXX_COMPILER_WORKS 1) + set(CMAKE_CXX_COMPILER_ID_RUN 1) + set(CMAKE_CXX_COMPILER_FORCED 1) +endif() enable_language(C) enable_language(CXX) diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index 994ba441e78f50..74796517800c78 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -501,6 +501,14 @@ namespace vcpkg::Build env); out_file.close(); + if (compiler_hash.empty()) + { + Debug::print("Compiler information tracking can be disabled by passing --", + VcpkgCmdArguments::FEATURE_FLAGS_ARG, + "=-", + VcpkgCmdArguments::COMPILER_TRACKING_FEATURE, + "\n"); + } Checks::check_exit(VCPKG_LINE_INFO, !compiler_hash.empty(), "Error occured while detecting compiler information. Pass `--debug` for more information."); From 353b6be4c83eb55f4ceb79d9ea1dac128694d87a Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Sat, 11 Jul 2020 23:43:02 -0700 Subject: [PATCH 6/8] [vcpkg] Fix compiler tracking not pre-downloading Ninja. Fix compiler tracking not looking in -err.log. --- scripts/detect_compiler/portfile.cmake | 4 ++-- toolsrc/src/vcpkg/build.cpp | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/detect_compiler/portfile.cmake b/scripts/detect_compiler/portfile.cmake index 16c760706a0b5d..4f68faea46936b 100644 --- a/scripts/detect_compiler/portfile.cmake +++ b/scripts/detect_compiler/portfile.cmake @@ -2,6 +2,8 @@ set(LOGS ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-out.log ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-rel-out.log ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-dbg-out.log + ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-rel-err.log + ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-dbg-err.log ) foreach(LOG IN LISTS LOGS) @@ -22,7 +24,5 @@ foreach(LOG IN LISTS LOGS) if(EXISTS ${LOG}) file(READ "${LOG}" _contents) message("${_contents}") - return() endif() endforeach() -message(FATAL_ERROR "Could read logs: ${LOGS}") diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index 74796517800c78..be80048750117f 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -460,6 +460,11 @@ namespace vcpkg::Build System::print2("Detecting compiler hash for triplet ", triplet, "...\n"); auto buildpath = paths.buildtrees / "detect_compiler"; +#if !defined(_WIN32) + // TODO: remove when vcpkg.exe is in charge for acquiring tools. Change introduced in vcpkg v0.0.107. + // bootstrap should have already downloaded ninja, but making sure it is present in case it was deleted. + vcpkg::Util::unused(paths.get_tool_exe(Tools::NINJA)); +#endif std::vector cmake_args{ {"CURRENT_PORT_DIR", paths.scripts / "detect_compiler"}, {"CURRENT_BUILDTREES_DIR", buildpath}, From acc6dc66091965349c544043daff697cf3827da8 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Mon, 13 Jul 2020 11:22:33 -0700 Subject: [PATCH 7/8] [vcpkg] Update toolsrc/src/vcpkg/binarycaching.cpp Co-authored-by: Billy O'Neal --- toolsrc/src/vcpkg/binarycaching.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/toolsrc/src/vcpkg/binarycaching.cpp b/toolsrc/src/vcpkg/binarycaching.cpp index 66ac9a84a90cce..6f1c1a9851ac59 100644 --- a/toolsrc/src/vcpkg/binarycaching.cpp +++ b/toolsrc/src/vcpkg/binarycaching.cpp @@ -664,14 +664,15 @@ namespace { static auto cachepath = System::get_platform_cache_home().then([](fs::path p) -> ExpectedS { p /= fs::u8path("vcpkg/archives"); - if (!p.is_absolute()) + if (p.is_absolute()) { - return {"default path was not absolute: " + p.u8string(), expected_right_tag}; + return {std::move(p), expected_left_tag}; } else { - return {std::move(p), expected_left_tag}; + return {"default path was not absolute: " + p.u8string(), expected_right_tag}; } + }); return cachepath; } From 6668600b6303be1b0471e10795e3a3ed58c2ae00 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Mon, 13 Jul 2020 11:27:03 -0700 Subject: [PATCH 8/8] [vcpkg] Format --- toolsrc/src/vcpkg/binarycaching.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/toolsrc/src/vcpkg/binarycaching.cpp b/toolsrc/src/vcpkg/binarycaching.cpp index 6f1c1a9851ac59..0a0b100dc2727b 100644 --- a/toolsrc/src/vcpkg/binarycaching.cpp +++ b/toolsrc/src/vcpkg/binarycaching.cpp @@ -672,7 +672,6 @@ namespace { return {"default path was not absolute: " + p.u8string(), expected_right_tag}; } - }); return cachepath; }