From bd1db368b333783697d686c82c42e48c4bec8b9e Mon Sep 17 00:00:00 2001
From: James Le Cuirot <chewi@gentoo.org>
Date: Fri, 21 Aug 2020 23:13:58 +0100
Subject: [PATCH] Add BARRIER_USE_EXTERNAL_GTEST CMake option to use external
 GTest

---
 CMakeLists.txt                     |  1 +
 src/test/CMakeLists.txt            | 38 ++++++++++++++++++++----------
 src/test/integtests/CMakeLists.txt |  4 +---
 src/test/unittests/CMakeLists.txt  |  4 +---
 4 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4947d20f..18b242db 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,7 @@ project (barrier C CXX)
 option (BARRIER_BUILD_GUI "Build the GUI" ON)
 option (BARRIER_BUILD_INSTALLER "Build the installer" ON)
 option (BARRIER_BUILD_TESTS "Build the tests" ON)
+option (BARRIER_USE_EXTERNAL_GTEST "Use external installation of Google Test framework" OFF)
 
 set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
 set (CMAKE_CXX_STANDARD 14)
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index daecb317..4a50e701 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -14,19 +14,33 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-include_directories(
-    ../../ext/gtest
-    ../../ext/gtest/include
-    ../../ext/gmock
-    ../../ext/gmock/include)
-    
-add_library(gtest STATIC ../../ext/gtest/src/gtest-all.cc)
-add_library(gmock STATIC ../../ext/gmock/src/gmock-all.cc)
+if (BARRIER_USE_EXTERNAL_GTEST)
+    include (FindPkgConfig)
+    find_package(GTest REQUIRED)
+    pkg_check_modules(GMOCK REQUIRED gmock)
+    include_directories(
+        ${GTEST_INCLUDE_DIRS}
+        ${GMOCK_INCLUDE_DIRS}
+    )
+else()
+    include_directories(
+        ../../ext/gtest
+        ../../ext/gtest/include
+        ../../ext/gmock
+        ../../ext/gmock/include
+    )
 
-if (UNIX)
-    # ignore warnings in gtest and gmock
-    set_target_properties(gtest PROPERTIES COMPILE_FLAGS "-w")
-    set_target_properties(gmock PROPERTIES COMPILE_FLAGS "-w")
+    add_library(gtest STATIC ../../ext/gtest/src/gtest-all.cc)
+    add_library(gmock STATIC ../../ext/gmock/src/gmock-all.cc)
+
+    set(GTEST_LIBRARIES gtest)
+    set(GMOCK_LIBRARIES gmock)
+
+    if (UNIX)
+        # ignore warnings in gtest and gmock
+        set_target_properties(gtest PROPERTIES COMPILE_FLAGS "-w")
+        set_target_properties(gmock PROPERTIES COMPILE_FLAGS "-w")
+    endif()
 endif()
 
 add_subdirectory(integtests)
diff --git a/src/test/integtests/CMakeLists.txt b/src/test/integtests/CMakeLists.txt
index 0460d8df..9ef875bd 100644
--- a/src/test/integtests/CMakeLists.txt
+++ b/src/test/integtests/CMakeLists.txt
@@ -68,8 +68,6 @@ endif()
 
 include_directories(
     ../../
-    ../../../ext/gtest/include
-    ../../../ext/gmock/include
 )
 
 if (UNIX)
@@ -80,4 +78,4 @@ endif()
 
 add_executable(integtests ${sources})
 target_link_libraries(integtests
-    arch base client common io ipc mt net platform server synlib gtest gmock ${libs} ${OPENSSL_LIBS})
+    arch base client common io ipc mt net platform server synlib ${GTEST_LIBRARIES} ${GMOCK_LIBRARIES} ${libs} ${OPENSSL_LIBS})
diff --git a/src/test/unittests/CMakeLists.txt b/src/test/unittests/CMakeLists.txt
index c46375ce..61a0d35f 100644
--- a/src/test/unittests/CMakeLists.txt
+++ b/src/test/unittests/CMakeLists.txt
@@ -50,8 +50,6 @@ list(APPEND headers ${platform_sources})
 
 include_directories(
     ../../
-    ../../../ext/gtest/include
-    ../../../ext/gmock/include
     ../../../ext
 )
 
@@ -67,4 +65,4 @@ endif()
 
 add_executable(unittests ${sources})
 target_link_libraries(unittests
-    arch base client server common io net platform server synlib mt ipc gtest gmock ${libs} ${OPENSSL_LIBS})
+    arch base client server common io net platform server synlib mt ipc ${GTEST_LIBRARIES} ${GMOCK_LIBRARIES} ${libs} ${OPENSSL_LIBS})
-- 
2.26.2

