From bb5c92f9d1f0b26c79978e92f38a0e5fbcc8c9bf Mon Sep 17 00:00:00 2001 From: Dominic Meiser Date: Mon, 5 Oct 2015 17:27:17 -0400 Subject: [PATCH 1/3] Fix definition of GTEST_API_ macro for gcc and clang [#451]. This is to enable using gtest with -fvisibility=hidden. --- googletest/include/gtest/internal/gtest-port.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h index 141d4579..d768bd6a 100644 --- a/googletest/include/gtest/internal/gtest-port.h +++ b/googletest/include/gtest/internal/gtest-port.h @@ -920,14 +920,14 @@ using ::std::tuple_size; #endif // GTEST_HAS_SEH #ifdef _MSC_VER - # if GTEST_LINKED_AS_SHARED_LIBRARY # define GTEST_API_ __declspec(dllimport) # elif GTEST_CREATE_SHARED_LIBRARY # define GTEST_API_ __declspec(dllexport) # endif - -#endif // _MSC_VER +#elif __GNUC__ >= 4 || defined(__clang__) +# define GTEST_API_ __attribute__((visibility ("default"))) +#endif // _MSC_VER #ifndef GTEST_API_ # define GTEST_API_ From 580378d522d579bcaca24a90ccb31abafa157a8d Mon Sep 17 00:00:00 2001 From: Dominic Meiser Date: Mon, 5 Oct 2015 18:02:02 -0400 Subject: [PATCH 2/3] Add an option to enable building with -fvisibility=hidden. When this option is set gtest itself is built with -fvisibility=hidden with gcc and clang. This replicates MSVC's default behaviour with gcc and clang. --- googletest/CMakeLists.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/googletest/CMakeLists.txt b/googletest/CMakeLists.txt index bd78cfe6..961672aa 100644 --- a/googletest/CMakeLists.txt +++ b/googletest/CMakeLists.txt @@ -22,6 +22,11 @@ option(gtest_build_samples "Build gtest's sample programs." OFF) option(gtest_disable_pthreads "Disable uses of pthreads in gtest." OFF) +option( + gtest_hide_internal_symbols + "Build gtest with internal symbols hidden in shared libraries." + OFF) + # Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). include(cmake/hermetic_build.cmake OPTIONAL) @@ -46,6 +51,11 @@ if (COMMAND set_up_hermetic_build) set_up_hermetic_build() endif() +if (gtest_hide_internal_symbols) + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) +endif() + # Define helper functions and macros used by Google Test. include(cmake/internal_utils.cmake) From 84d7ff10888c3004fc87b8438a98ecf4f863242e Mon Sep 17 00:00:00 2001 From: Dominic Meiser Date: Mon, 5 Oct 2015 18:04:38 -0400 Subject: [PATCH 3/3] Fix symbol visibility of StreamingListener. --- googletest/src/gtest-internal-inl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/googletest/src/gtest-internal-inl.h b/googletest/src/gtest-internal-inl.h index 56c8a20c..ed8a682a 100644 --- a/googletest/src/gtest-internal-inl.h +++ b/googletest/src/gtest-internal-inl.h @@ -1032,7 +1032,7 @@ class TestResultAccessor { #if GTEST_CAN_STREAM_RESULTS_ // Streams test results to the given port on the given host machine. -class StreamingListener : public EmptyTestEventListener { +class GTEST_API_ StreamingListener : public EmptyTestEventListener { public: // Abstract base class for writing strings to a socket. class AbstractSocketWriter {