diff --git a/ports/gtest/0001-Enable-C-11-features-for-VS2015-fix-appveyor-fail.patch b/ports/gtest/0001-Enable-C-11-features-for-VS2015-fix-appveyor-fail.patch new file mode 100644 index 000000000..274942482 --- /dev/null +++ b/ports/gtest/0001-Enable-C-11-features-for-VS2015-fix-appveyor-fail.patch @@ -0,0 +1,177 @@ +From 1695708beda0306f3b4dffd66f4be142425894a0 Mon Sep 17 00:00:00 2001 +From: Arkady Shapkin +Date: Wed, 2 Mar 2016 02:53:10 +0300 +Subject: [PATCH] Enable C++11 features for VS2015 (fix appveyor fail) + +--- + .gitignore | 13 ++++++++ + googlemock/test/gmock-matchers_test.cc | 5 +++ + googletest/include/gtest/internal/gtest-port.h | 10 ++++-- + googletest/test/gtest-printers_test.cc | 43 ++++++++++++++++++++++--- + googletest/test/gtest_catch_exceptions_test_.cc | 2 +- + 5 files changed, 64 insertions(+), 9 deletions(-) + +diff --git a/.gitignore b/.gitignore +index ce310bc..08a67cd 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -1,2 +1,15 @@ + # Ignore CI build directory + build/ ++_build/ ++ ++# Visual Studio files ++*.sdf ++*.opensdf ++*.VC.opendb ++*.suo ++*.user ++_ReSharper.Caches/ ++Win32-Debug/ ++Win32-Release/ ++x64-Debug/ ++x64-Release/ +diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc +index 9f62c3d..eaba362 100644 +--- a/googlemock/test/gmock-matchers_test.cc ++++ b/googlemock/test/gmock-matchers_test.cc +@@ -58,6 +58,11 @@ + # include // NOLINT + #endif + ++// Disable MSVC warning: "decorated name length exceeded, name was truncated". ++#ifdef _MSC_VER ++# pragma warning(disable:4503) ++#endif ++ + namespace testing { + + namespace internal { +diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h +index 0094ed5..c07c455 100644 +--- a/googletest/include/gtest/internal/gtest-port.h ++++ b/googletest/include/gtest/internal/gtest-port.h +@@ -323,7 +323,7 @@ + // -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a + // value for __cplusplus, and recent versions of clang, gcc, and + // probably other compilers set that too in C++11 mode. +-# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L ++# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L || _MSC_VER >= 1900 + // Compiling in at least C++11 mode. + # define GTEST_LANG_CXX11 1 + # else +@@ -355,12 +355,16 @@ + #if GTEST_STDLIB_CXX11 + # define GTEST_HAS_STD_BEGIN_AND_END_ 1 + # define GTEST_HAS_STD_FORWARD_LIST_ 1 +-# define GTEST_HAS_STD_FUNCTION_ 1 ++# if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824) // works only with VS2015U2 and better ++# define GTEST_HAS_STD_FUNCTION_ 1 ++# endif + # define GTEST_HAS_STD_INITIALIZER_LIST_ 1 + # define GTEST_HAS_STD_MOVE_ 1 + # define GTEST_HAS_STD_SHARED_PTR_ 1 + # define GTEST_HAS_STD_TYPE_TRAITS_ 1 + # define GTEST_HAS_STD_UNIQUE_PTR_ 1 ++# define GTEST_HAS_UNORDERED_MAP_ 1 ++# define GTEST_HAS_UNORDERED_SET_ 1 + #endif + + // C++11 specifies that provides std::tuple. +@@ -616,7 +620,7 @@ struct _RTL_CRITICAL_SECTION; + // Determines if hash_map/hash_set are available. + // Only used for testing against those containers. + #if !defined(GTEST_HAS_HASH_MAP_) +-# if _MSC_VER ++# if defined(_MSC_VER) && (_MSC_VER < 1900) + # define GTEST_HAS_HASH_MAP_ 1 // Indicates that hash_map is available. + # define GTEST_HAS_HASH_SET_ 1 // Indicates that hash_set is available. + # endif // _MSC_VER +diff --git a/googletest/test/gtest-printers_test.cc b/googletest/test/gtest-printers_test.cc +index 3e97cc2..6320563 100644 +--- a/googletest/test/gtest-printers_test.cc ++++ b/googletest/test/gtest-printers_test.cc +@@ -51,10 +51,15 @@ + #include "gtest/gtest.h" + + // hash_map and hash_set are available under Visual C++, or on Linux. +-#if GTEST_HAS_HASH_MAP_ ++#if GTEST_HAS_UNORDERED_MAP_ ++# include // NOLINT ++#elif GTEST_HAS_HASH_MAP_ + # include // NOLINT + #endif // GTEST_HAS_HASH_MAP_ +-#if GTEST_HAS_HASH_SET_ ++ ++#if GTEST_HAS_UNORDERED_SET_ ++# include // NOLINT ++#elif GTEST_HAS_HASH_SET_ + # include // NOLINT + #endif // GTEST_HAS_HASH_SET_ + +@@ -217,18 +222,46 @@ using ::testing::internal::string; + // The hash_* classes are not part of the C++ standard. STLport + // defines them in namespace std. MSVC defines them in ::stdext. GCC + // defines them in ::. ++#if GTEST_HAS_UNORDERED_MAP_ ++ ++#define GTEST_HAS_HASH_MAP_ 1 ++template ++using hash_map = ::std::unordered_map; ++template ++using hash_multimap = ::std::unordered_multimap; ++ ++#elif GTEST_HAS_HASH_MAP_ ++ + #ifdef _STLP_HASH_MAP // We got from STLport. + using ::std::hash_map; +-using ::std::hash_set; + using ::std::hash_multimap; +-using ::std::hash_multiset; + #elif _MSC_VER + using ::stdext::hash_map; +-using ::stdext::hash_set; + using ::stdext::hash_multimap; ++#endif ++ ++#endif ++ ++#if GTEST_HAS_UNORDERED_SET_ ++ ++#define GTEST_HAS_HASH_SET_ 1 ++template ++using hash_set = ::std::unordered_set; ++template ++using hash_multiset = ::std::unordered_multiset; ++ ++#elif GTEST_HAS_HASH_SET_ ++ ++#ifdef _STLP_HASH_MAP // We got from STLport. ++using ::std::hash_set; ++using ::std::hash_multiset; ++#elif _MSC_VER ++using ::stdext::hash_set; + using ::stdext::hash_multiset; + #endif + ++#endif ++ + // Prints a value to a string using the universal value printer. This + // is a helper for testing UniversalPrinter::Print() for various types. + template +diff --git a/googletest/test/gtest_catch_exceptions_test_.cc b/googletest/test/gtest_catch_exceptions_test_.cc +index d0fc82c..c6d953c 100644 +--- a/googletest/test/gtest_catch_exceptions_test_.cc ++++ b/googletest/test/gtest_catch_exceptions_test_.cc +@@ -138,7 +138,7 @@ TEST_F(CxxExceptionInConstructorTest, ThrowsExceptionInConstructor) { + } + + // Exceptions in destructors are not supported in C++11. +-#if !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L ++#if !GTEST_LANG_CXX11 + class CxxExceptionInDestructorTest : public Test { + public: + static void TearDownTestCase() { +-- +2.10.0.windows.1 + diff --git a/ports/gtest/CONTROL b/ports/gtest/CONTROL new file mode 100644 index 000000000..07336b978 --- /dev/null +++ b/ports/gtest/CONTROL @@ -0,0 +1,3 @@ +Source: gtest +Version: 1.8 +Description: GoogleTest and GoogleMock testing frameworks. \ No newline at end of file diff --git a/ports/gtest/portfile.cmake b/ports/gtest/portfile.cmake new file mode 100644 index 000000000..bfac8ab61 --- /dev/null +++ b/ports/gtest/portfile.cmake @@ -0,0 +1,56 @@ +include(vcpkg_common_functions) + +find_program(GIT git) + +set(GIT_URL "https://github.com/google/googletest.git") +set(GIT_TAG "release-1.8.0") + +if(NOT EXISTS "${DOWNLOADS}/googletest.git") + message(STATUS "Cloning") + vcpkg_execute_required_process( + COMMAND ${GIT} clone --bare ${GIT_URL} ${DOWNLOADS}/googletest.git + WORKING_DIRECTORY ${DOWNLOADS} + LOGNAME clone + ) +endif() +message(STATUS "Cloning done") + +if(NOT EXISTS "${CURRENT_BUILDTREES_DIR}/src/.git") + message(STATUS "Adding worktree and patching") + vcpkg_execute_required_process( + COMMAND ${GIT} worktree add -f --detach ${CURRENT_BUILDTREES_DIR}/src ${GIT_TAG} + WORKING_DIRECTORY ${DOWNLOADS}/googletest.git + LOGNAME worktree + ) + message(STATUS "Patching") + vcpkg_execute_required_process( + COMMAND ${GIT} am ${CMAKE_CURRENT_LIST_DIR}/0001-Enable-C-11-features-for-VS2015-fix-appveyor-fail.patch --ignore-whitespace --whitespace=fix + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src + LOGNAME patch + ) +endif() +message(STATUS "Adding worktree and patching done") + +vcpkg_configure_cmake( + SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src + OPTIONS + -DBUILD_SHARED_LIBS=ON +) + +vcpkg_build_cmake() + +vcpkg_install_cmake() +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(INSTALL ${CURRENT_BUILDTREES_DIR}/src/googletest/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/gtest RENAME copyright) +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/bin/) +file(RENAME ${CURRENT_PACKAGES_DIR}/lib/gtest.dll ${CURRENT_PACKAGES_DIR}/bin/gtest.dll) +file(RENAME ${CURRENT_PACKAGES_DIR}/lib/gtest_main.dll ${CURRENT_PACKAGES_DIR}/bin/gtest_main.dll) +file(RENAME ${CURRENT_PACKAGES_DIR}/lib/gmock.dll ${CURRENT_PACKAGES_DIR}/bin/gmock.dll) +file(RENAME ${CURRENT_PACKAGES_DIR}/lib/gmock_main.dll ${CURRENT_PACKAGES_DIR}/bin/gmock_main.dll) +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/bin/) +file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/gtest.dll ${CURRENT_PACKAGES_DIR}/debug/bin/gtest.dll) +file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/gtest_main.dll ${CURRENT_PACKAGES_DIR}/debug/bin/gtest_main.dll) +file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/gmock.dll ${CURRENT_PACKAGES_DIR}/debug/bin/gmock.dll) +file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/gmock_main.dll ${CURRENT_PACKAGES_DIR}/debug/bin/gmock_main.dll) + +vcpkg_copy_pdbs()