From 0d8bba52e4c0a861b25f9d32006bfde9b749e09f Mon Sep 17 00:00:00 2001 From: Nicole Mazzuca Date: Fri, 19 Jul 2019 23:20:28 -0700 Subject: [PATCH] allow tests to run on older standard libraries --- toolsrc/CMakeLists.txt | 3 +- .../{vcpkg-tests => vcpkg-test}/catch.h | 0 .../{vcpkg-tests => vcpkg-test}/util.h | 4 + .../{vcpkg-tests => vcpkg-test}/arguments.cpp | 2 +- .../src/{vcpkg-tests => vcpkg-test}/catch.cpp | 2 +- .../{vcpkg-tests => vcpkg-test}/chrono.cpp | 2 +- .../dependencies.cpp | 2 +- .../src/{vcpkg-tests => vcpkg-test}/files.cpp | 17 ++-- .../{vcpkg-tests => vcpkg-test}/paragraph.cpp | 4 +- .../src/{vcpkg-tests => vcpkg-test}/plan.cpp | 4 +- .../{vcpkg-tests => vcpkg-test}/specifier.cpp | 2 +- .../statusparagraphs.cpp | 4 +- .../{vcpkg-tests => vcpkg-test}/strings.cpp | 2 +- .../{vcpkg-tests => vcpkg-test}/supports.cpp | 2 +- .../{vcpkg-tests => vcpkg-test}/update.cpp | 4 +- .../src/{vcpkg-tests => vcpkg-test}/util.cpp | 83 ++++++++++++++++--- toolsrc/vcpkg/vcpkg.vcxproj | 6 +- toolsrc/vcpkglib/vcpkglib.vcxproj | 6 +- .../vcpkgmetricsuploader.vcxproj | 6 +- toolsrc/vcpkgtest/vcpkgtest.vcxproj | 4 +- 20 files changed, 109 insertions(+), 50 deletions(-) rename toolsrc/include/{vcpkg-tests => vcpkg-test}/catch.h (100%) rename toolsrc/include/{vcpkg-tests => vcpkg-test}/util.h (86%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/arguments.cpp (99%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/catch.cpp (85%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/chrono.cpp (96%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/dependencies.cpp (96%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/files.cpp (84%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/paragraph.cpp (99%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/plan.cpp (99%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/specifier.cpp (99%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/statusparagraphs.cpp (97%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/strings.cpp (96%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/supports.cpp (98%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/update.cpp (98%) rename toolsrc/src/{vcpkg-tests => vcpkg-test}/util.cpp (66%) diff --git a/toolsrc/CMakeLists.txt b/toolsrc/CMakeLists.txt index 6697a919e5f..1db8bc36a49 100644 --- a/toolsrc/CMakeLists.txt +++ b/toolsrc/CMakeLists.txt @@ -35,7 +35,7 @@ if(GCC OR CLANG) endif() file(GLOB_RECURSE VCPKGLIB_SOURCES src/vcpkg/*.cpp) -file(GLOB_RECURSE VCPKGTEST_SOURCES src/vcpkg-tests/*.cpp) +file(GLOB_RECURSE VCPKGTEST_SOURCES src/vcpkg-test/*.cpp) if (DEFINE_DISABLE_METRICS) set(DISABLE_METRICS_VALUE "1") @@ -95,3 +95,4 @@ endif() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) target_link_libraries(vcpkg PRIVATE Threads::Threads) +target_link_libraries(vcpkg-test PRIVATE Threads::Threads) diff --git a/toolsrc/include/vcpkg-tests/catch.h b/toolsrc/include/vcpkg-test/catch.h similarity index 100% rename from toolsrc/include/vcpkg-tests/catch.h rename to toolsrc/include/vcpkg-test/catch.h diff --git a/toolsrc/include/vcpkg-tests/util.h b/toolsrc/include/vcpkg-test/util.h similarity index 86% rename from toolsrc/include/vcpkg-tests/util.h rename to toolsrc/include/vcpkg-test/util.h index 8a0486285f9..fa650abc850 100644 --- a/toolsrc/include/vcpkg-tests/util.h +++ b/toolsrc/include/vcpkg-test/util.h @@ -35,4 +35,8 @@ extern const bool SYMLINKS_ALLOWED; extern const fs::path TEMPORARY_DIRECTORY; +void create_symlink(const fs::path& file, const fs::path& target, std::error_code& ec); + +void create_directory_symlink(const fs::path& file, const fs::path& target, std::error_code& ec); + } diff --git a/toolsrc/src/vcpkg-tests/arguments.cpp b/toolsrc/src/vcpkg-test/arguments.cpp similarity index 99% rename from toolsrc/src/vcpkg-tests/arguments.cpp rename to toolsrc/src/vcpkg-test/arguments.cpp index 8c625be0f81..3fe5fa420a1 100644 --- a/toolsrc/src/vcpkg-tests/arguments.cpp +++ b/toolsrc/src/vcpkg-test/arguments.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/catch.cpp b/toolsrc/src/vcpkg-test/catch.cpp similarity index 85% rename from toolsrc/src/vcpkg-tests/catch.cpp rename to toolsrc/src/vcpkg-test/catch.cpp index 701dcb39ae0..8b5d1aa15b4 100644 --- a/toolsrc/src/vcpkg-tests/catch.cpp +++ b/toolsrc/src/vcpkg-test/catch.cpp @@ -1,5 +1,5 @@ #define CATCH_CONFIG_RUNNER -#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/chrono.cpp b/toolsrc/src/vcpkg-test/chrono.cpp similarity index 96% rename from toolsrc/src/vcpkg-tests/chrono.cpp rename to toolsrc/src/vcpkg-test/chrono.cpp index c164753f944..306217ad07d 100644 --- a/toolsrc/src/vcpkg-tests/chrono.cpp +++ b/toolsrc/src/vcpkg-test/chrono.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/dependencies.cpp b/toolsrc/src/vcpkg-test/dependencies.cpp similarity index 96% rename from toolsrc/src/vcpkg-tests/dependencies.cpp rename to toolsrc/src/vcpkg-test/dependencies.cpp index 0dee6f296ee..5ed05cc078c 100644 --- a/toolsrc/src/vcpkg-tests/dependencies.cpp +++ b/toolsrc/src/vcpkg-test/dependencies.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/files.cpp b/toolsrc/src/vcpkg-test/files.cpp similarity index 84% rename from toolsrc/src/vcpkg-tests/files.cpp rename to toolsrc/src/vcpkg-test/files.cpp index d2edffcfff2..9e14cec0c30 100644 --- a/toolsrc/src/vcpkg-tests/files.cpp +++ b/toolsrc/src/vcpkg-test/files.cpp @@ -1,10 +1,9 @@ -#include -#include +#include +#include #include #include -#include // required for filesystem::create_{directory_}symlink #include #include @@ -20,7 +19,7 @@ namespace std::mt19937_64 get_urbg(std::uint64_t index) { // smallest prime > 2**63 - 1 - return std::mt19937_64{index + 9223372036854775837}; + return std::mt19937_64{index + 9223372036854775837ULL}; } std::string get_random_filename(std::mt19937_64& urbg) { return vcpkg::Strings::b32_encode(uid{}(urbg)); } @@ -83,16 +82,14 @@ namespace // regular symlink fs.write_contents(base, "", ec); REQUIRE_FALSE(ec); - const std::filesystem::path basep = base.native(); - auto basep_link = basep; - basep_link.replace_filename(basep.filename().native() + L"-link"); - std::filesystem::create_symlink(basep, basep_link, ec); + auto base_link = base; + base_link.replace_filename(base.filename().u8string() + "-link"); + vcpkg::Test::create_symlink(base, base_link, ec); } else // type == directory_symlink_tag { // directory symlink - std::filesystem::path basep = base.native(); - std::filesystem::create_directory_symlink(basep / "..", basep, ec); + vcpkg::Test::create_directory_symlink(base / "..", base, ec); } REQUIRE_FALSE(ec); diff --git a/toolsrc/src/vcpkg-tests/paragraph.cpp b/toolsrc/src/vcpkg-test/paragraph.cpp similarity index 99% rename from toolsrc/src/vcpkg-tests/paragraph.cpp rename to toolsrc/src/vcpkg-test/paragraph.cpp index 0fb85ec693e..a95879cfa35 100644 --- a/toolsrc/src/vcpkg-tests/paragraph.cpp +++ b/toolsrc/src/vcpkg-test/paragraph.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/plan.cpp b/toolsrc/src/vcpkg-test/plan.cpp similarity index 99% rename from toolsrc/src/vcpkg-tests/plan.cpp rename to toolsrc/src/vcpkg-test/plan.cpp index 7ecab460b33..049ef20662f 100644 --- a/toolsrc/src/vcpkg-tests/plan.cpp +++ b/toolsrc/src/vcpkg-test/plan.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/toolsrc/src/vcpkg-tests/specifier.cpp b/toolsrc/src/vcpkg-test/specifier.cpp similarity index 99% rename from toolsrc/src/vcpkg-tests/specifier.cpp rename to toolsrc/src/vcpkg-test/specifier.cpp index 52ef044e798..330a96d78a4 100644 --- a/toolsrc/src/vcpkg-tests/specifier.cpp +++ b/toolsrc/src/vcpkg-test/specifier.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/toolsrc/src/vcpkg-tests/statusparagraphs.cpp b/toolsrc/src/vcpkg-test/statusparagraphs.cpp similarity index 97% rename from toolsrc/src/vcpkg-tests/statusparagraphs.cpp rename to toolsrc/src/vcpkg-test/statusparagraphs.cpp index df52ccb875b..c0833e8ba0c 100644 --- a/toolsrc/src/vcpkg-tests/statusparagraphs.cpp +++ b/toolsrc/src/vcpkg-test/statusparagraphs.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/toolsrc/src/vcpkg-tests/strings.cpp b/toolsrc/src/vcpkg-test/strings.cpp similarity index 96% rename from toolsrc/src/vcpkg-tests/strings.cpp rename to toolsrc/src/vcpkg-test/strings.cpp index 3168a7c95f1..6b744eee651 100644 --- a/toolsrc/src/vcpkg-tests/strings.cpp +++ b/toolsrc/src/vcpkg-test/strings.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/supports.cpp b/toolsrc/src/vcpkg-test/supports.cpp similarity index 98% rename from toolsrc/src/vcpkg-tests/supports.cpp rename to toolsrc/src/vcpkg-test/supports.cpp index c6c88bdbca5..8bd386da056 100644 --- a/toolsrc/src/vcpkg-tests/supports.cpp +++ b/toolsrc/src/vcpkg-test/supports.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/update.cpp b/toolsrc/src/vcpkg-test/update.cpp similarity index 98% rename from toolsrc/src/vcpkg-tests/update.cpp rename to toolsrc/src/vcpkg-test/update.cpp index 93a8f74a980..70b2f04c1ba 100644 --- a/toolsrc/src/vcpkg-tests/update.cpp +++ b/toolsrc/src/vcpkg-test/update.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include diff --git a/toolsrc/src/vcpkg-tests/util.cpp b/toolsrc/src/vcpkg-test/util.cpp similarity index 66% rename from toolsrc/src/vcpkg-tests/util.cpp rename to toolsrc/src/vcpkg-test/util.cpp index f146283790d..19f8f355e17 100644 --- a/toolsrc/src/vcpkg-tests/util.cpp +++ b/toolsrc/src/vcpkg-test/util.cpp @@ -1,6 +1,7 @@ -#include -#include +#include +#include +#include #include #include @@ -11,6 +12,18 @@ #include #endif +#if defined(_MSC_VER) && _MSC_VER >= 1914 + +#define USE_STD_FILESYSTEM + +#include // required for filesystem::create_{directory_}symlink + +#elif !defined(_MSC_VER) + +#include + +#endif + namespace vcpkg::Test { std::unique_ptr make_status_pgh(const char* name, @@ -51,9 +64,14 @@ namespace vcpkg::Test } - #if defined(_WIN32) + + // I am so sorry for this awful mix of macros static bool system_allows_symlinks() { +#if defined(_WIN32) + #if !defined(USE_STD_FILESYSTEM) + return false; + #else HKEY key; bool allow_symlinks = true; @@ -69,9 +87,14 @@ namespace vcpkg::Test if (status == ERROR_SUCCESS) RegCloseKey(key); return allow_symlinks; + #endif +#else + return true; +#endif } static fs::path internal_temporary_directory() { +#if defined(_WIN32) wchar_t* tmp = static_cast(std::calloc(32'767, 2)); if (!GetEnvironmentVariableW(L"TEMP", tmp, 32'767)) { @@ -83,19 +106,53 @@ namespace vcpkg::Test std::free(tmp); return result / L"vcpkg-test"; - } - - #else - - constexpr static bool system_allows_symlinks() { - return true; - } - static fs::path internal_temporary_directory() { +#else return "/tmp/vcpkg-test"; +#endif } - #endif - const bool SYMLINKS_ALLOWED = system_allows_symlinks(); const fs::path TEMPORARY_DIRECTORY = internal_temporary_directory(); + + void create_symlink(const fs::path& target, const fs::path& file, std::error_code& ec) { +#if defined(_MSC_VER) + #if defined(USE_STD_FILESYSTEM) + if (SYMLINKS_ALLOWED) + { + std::filesystem::path targetp = target.native(); + std::filesystem::path filep = file.native(); + + std::filesystem::create_symlink(targetp, filep); + } + else + #endif + { + vcpkg::Checks::exit_with_message(VCPKG_LINE_INFO, "Symlinks are not allowed on this system"); + } +#else + if(symlink(target.c_str(), file.c_str()) != 0) { + ec.assign(errno, std::system_category()); + } +#endif + } + + void create_directory_symlink(const fs::path& target, const fs::path& file, std::error_code& ec) { +#if defined(_MSC_VER) + #if defined(USE_STD_FILESYSTEM) + if (SYMLINKS_ALLOWED) + { + std::filesystem::path targetp = target.native(); + std::filesystem::path filep = file.native(); + + std::filesystem::create_symlink(targetp, filep); + } + else + #endif + { + vcpkg::Checks::exit_with_message(VCPKG_LINE_INFO, "Symlinks are not allowed on this system"); + } +#else + ::vcpkg::Test::create_symlink(target, file, ec); +#endif + } } diff --git a/toolsrc/vcpkg/vcpkg.vcxproj b/toolsrc/vcpkg/vcpkg.vcxproj index 06d849a740d..917cd3b9c86 100644 --- a/toolsrc/vcpkg/vcpkg.vcxproj +++ b/toolsrc/vcpkg/vcpkg.vcxproj @@ -21,8 +21,8 @@ {34671B80-54F9-46F5-8310-AC429C11D4FB} vcpkg - 10.0 - v142 + 8.1 + v140 @@ -147,4 +147,4 @@ - \ No newline at end of file + diff --git a/toolsrc/vcpkglib/vcpkglib.vcxproj b/toolsrc/vcpkglib/vcpkglib.vcxproj index 9312dd627db..d28bae8ec52 100644 --- a/toolsrc/vcpkglib/vcpkglib.vcxproj +++ b/toolsrc/vcpkglib/vcpkglib.vcxproj @@ -21,8 +21,8 @@ {B98C92B7-2874-4537-9D46-D14E5C237F04} vcpkglib - 10.0 - v142 + 8.1 + v140 @@ -274,4 +274,4 @@ - \ No newline at end of file + diff --git a/toolsrc/vcpkgmetricsuploader/vcpkgmetricsuploader.vcxproj b/toolsrc/vcpkgmetricsuploader/vcpkgmetricsuploader.vcxproj index 2e689c7fca0..14ec1e105da 100644 --- a/toolsrc/vcpkgmetricsuploader/vcpkgmetricsuploader.vcxproj +++ b/toolsrc/vcpkgmetricsuploader/vcpkgmetricsuploader.vcxproj @@ -21,8 +21,8 @@ {7D6FDEEB-B299-4A23-85EE-F67C4DED47BE} vcpkgmetricsuploader - 10.0 - v142 + 8.1 + v140 @@ -144,4 +144,4 @@ - \ No newline at end of file + diff --git a/toolsrc/vcpkgtest/vcpkgtest.vcxproj b/toolsrc/vcpkgtest/vcpkgtest.vcxproj index cf411d59186..530dfbc5dc3 100644 --- a/toolsrc/vcpkgtest/vcpkgtest.vcxproj +++ b/toolsrc/vcpkgtest/vcpkgtest.vcxproj @@ -46,8 +46,8 @@ {F27B8DB0-1279-4AF8-A2E3-1D49C4F0220D} Win32Proj vcpkgtest - 10.0 - v142 + 8.1 + v140