From 1979214e69399d503b0f5a5b302101c80d8f437a Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sat, 14 Apr 2018 00:23:10 +0200 Subject: [PATCH 15/23] cctest: allow building with -municode The rest of the code is built with -municode, we cannot start building cctest (which relies on the already-built parts) without this option. Signed-off-by: Johannes Schindelin --- deps/gtest/src/gtest_main.cc | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/deps/gtest/src/gtest_main.cc b/deps/gtest/src/gtest_main.cc index 4cf03e59..e71ff613 100644 --- a/deps/gtest/src/gtest_main.cc +++ b/deps/gtest/src/gtest_main.cc @@ -31,7 +31,68 @@ #include "gtest/gtest.h" +#ifdef _WIN32 +#include +#include + +#if defined(__MINGW_VERSION_MAJOR) +#extern "C" { +#endif + +int wmain(int argc, wchar_t *wargv[]) { + if (!IsWindows7OrGreater()) { + fprintf(stderr, "This application is only supported on Windows 7, " + "Windows Server 2008 R2, or higher."); + exit(1); + } + + // Convert argv to to UTF8 + char** argv = new char*[argc + 1]; + for (int i = 0; i < argc; i++) { + // Compute the size of the required buffer + DWORD size = WideCharToMultiByte(CP_UTF8, + 0, + wargv[i], + -1, + nullptr, + 0, + nullptr, + nullptr); + if (size == 0) { + // This should never happen. + fprintf(stderr, "Could not convert arguments to utf8."); + exit(1); + } + // Do the actual conversion + argv[i] = new char[size]; + DWORD result = WideCharToMultiByte(CP_UTF8, + 0, + wargv[i], + -1, + argv[i], + size, + nullptr, + nullptr); + if (result == 0) { + // This should never happen. + fprintf(stderr, "Could not convert arguments to utf8."); + exit(1); + } + } + argv[argc] = nullptr; + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + +#if defined(__MINGW_VERSION_MAJOR) +} +#endif + +#else + GTEST_API_ int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } + +#endif -- 2.17.0.windows.1