dev-cpp/gtest: Add live ebuild
authorDavid Seifert <soap@gentoo.org>
Fri, 18 Aug 2017 11:10:19 +0000 (13:10 +0200)
committerDavid Seifert <soap@gentoo.org>
Fri, 18 Aug 2017 11:11:19 +0000 (13:11 +0200)
Package-Manager: Portage-2.3.6, Repoman-2.3.3

dev-cpp/gtest/files/gtest-9999-fix-gcc6-undefined-behavior.patch [new file with mode: 0644]
dev-cpp/gtest/files/gtest-9999-fix-py-tests.patch [new file with mode: 0644]
dev-cpp/gtest/gtest-9999.ebuild [new file with mode: 0644]

diff --git a/dev-cpp/gtest/files/gtest-9999-fix-gcc6-undefined-behavior.patch b/dev-cpp/gtest/files/gtest-9999-fix-gcc6-undefined-behavior.patch
new file mode 100644 (file)
index 0000000..eadfe61
--- /dev/null
@@ -0,0 +1,21 @@
+Fix build with GCC 6 due to lifetime issues.
+
+--- a/googletest/src/gtest.cc
++++ b/googletest/src/gtest.cc
+@@ -2654,10 +2654,12 @@
+     test->Run();
+   }
+-  // Deletes the test object.
+-  impl->os_stack_trace_getter()->UponLeavingGTest();
+-  internal::HandleExceptionsInMethodIfSupported(
+-      test, &Test::DeleteSelf_, "the test fixture's destructor");
++  if (test != NULL) {
++    // Deletes the test object.
++    impl->os_stack_trace_getter()->UponLeavingGTest();
++    internal::HandleExceptionsInMethodIfSupported(
++        test, &Test::DeleteSelf_, "the test fixture's destructor");
++  }
+   result_.set_elapsed_time(internal::GetTimeInMillis() - start);
diff --git a/dev-cpp/gtest/files/gtest-9999-fix-py-tests.patch b/dev-cpp/gtest/files/gtest-9999-fix-py-tests.patch
new file mode 100644 (file)
index 0000000..ba63c7b
--- /dev/null
@@ -0,0 +1,19 @@
+Fix python tests that use broken generator expressions
+
+--- a/googletest/cmake/internal_utils.cmake
++++ b/googletest/cmake/internal_utils.cmake
+@@ -247,12 +247,12 @@
+       add_test(
+         NAME ${name}
+         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py
+-            --build_dir=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>)
++            --build_dir=${CMAKE_CURRENT_BINARY_DIR})
+     else (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.1)
+       add_test(
+         ${name}
+         ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py
+-          --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE})
++          --build_dir=${CMAKE_CURRENT_BINARY_DIR})
+     endif (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.1)
+   endif()
+ endfunction()
diff --git a/dev-cpp/gtest/gtest-9999.ebuild b/dev-cpp/gtest/gtest-9999.ebuild
new file mode 100644 (file)
index 0000000..0c82ebf
--- /dev/null
@@ -0,0 +1,64 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+# Python is required for tests and some build tasks.
+PYTHON_COMPAT=( python2_7 )
+
+inherit git-r3 python-any-r1 cmake-multilib
+
+DESCRIPTION="Google C++ Testing Framework"
+HOMEPAGE="https://github.com/google/googletest"
+EGIT_REPO_URI="https://github.com/google/googletest.git"
+
+LICENSE="BSD"
+SLOT="0"
+IUSE="examples test"
+# Test require a ton of privileges, namely
+# FEATURES="-sandbox -userpriv -usersandbox"
+# which is generally not acceptable for Gentoo
+RESTRICT="test"
+
+DEPEND="test? ( ${PYTHON_DEPS} )"
+RDEPEND="!dev-cpp/gmock"
+
+PATCHES=(
+       "${FILESDIR}"/${P}-fix-py-tests.patch
+       "${FILESDIR}"/${P}-fix-gcc6-undefined-behavior.patch
+)
+
+pkg_setup() {
+       use test && python-any-r1_pkg_setup
+}
+
+multilib_src_configure() {
+       local mycmakeargs=(
+               -DBUILD_GMOCK=ON
+               -DBUILD_GTEST=ON
+               -DINSTALL_GMOCK=ON
+               -DINSTALL_GTEST=ON
+               -Dgtest_build_samples=OFF
+               -Dgtest_disable_pthreads=OFF
+
+               # currently only static libs work
+               # due to numerous ODR violations
+               # https://github.com/google/googletest/issues/930
+               -DBUILD_SHARED_LIBS=OFF
+
+               # tests
+               -Dgmock_build_tests=$(usex test)
+               -Dgtest_build_tests=$(usex test)
+               -DPYTHON_EXECUTABLE="${PYTHON}"
+       )
+       cmake-utils_src_configure
+}
+
+multilib_src_install_all() {
+       einstalldocs
+
+       if use examples; then
+               docinto examples
+               dodoc googletest/samples/*.{cc,h}
+       fi
+}