From 259f944bc3e45420f5891737101260f07ab3030a Mon Sep 17 00:00:00 2001
From: "Azamat H. Hackimov" <azamat.hackimov@gmail.com>
Date: Tue, 27 Feb 2018 14:17:49 +0500
Subject: [PATCH] Externalize googletest project

Externalize gtest to avoid installation, fixes #539.
---
 test/CMakeLists.txt | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 3633da5..7b39dd4 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,16 +1,27 @@
+include(ExternalProject)
+
+ExternalProject_Add(
+	googletest_project
+	SOURCE_DIR "${CMAKE_SOURCE_DIR}/test/gtest-1.8.0"
+	INSTALL_DIR "${CMAKE_BINARY_DIR}/prefix"
+	CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DBUILD_GMOCK=ON
+)
+
+add_library(gmock UNKNOWN IMPORTED)
+set_target_properties(gmock PROPERTIES
+	IMPORTED_LOCATION ${PROJECT_BINARY_DIR}/prefix/lib/libgmock.a
+)
+
+find_package(Threads)
+
+include_directories(SYSTEM "${PROJECT_BINARY_DIR}/prefix/include")
+
 set(gtest_force_shared_crt ${MSVC_SHARED_RT} CACHE BOOL
   "Use shared (DLL) run-time lib even when Google Test built as a static lib.")
-add_subdirectory(gtest-1.8.0)
-include_directories(SYSTEM gtest-1.8.0/googlemock/include)
-include_directories(SYSTEM gtest-1.8.0/googletest/include)
-
-if(WIN32 AND BUILD_SHARED_LIBS)
-  add_definitions("-DGTEST_LINKED_AS_SHARED_LIBRARY")
-endif()
 
 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
    CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-  set(yaml_test_flags "-Wno-variadic-macros -Wno-sign-compare")
+	set(yaml_test_flags "-Wno-variadic-macros -Wno-sign-compare")
 
   if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
     set(yaml_test_flags "${yaml_test_flags} -Wno-c99-extensions")
@@ -36,9 +47,15 @@ add_executable(run-tests
 	${test_sources}
 	${test_headers}
 )
+
+add_dependencies(run-tests googletest_project)
+
 set_target_properties(run-tests PROPERTIES
   COMPILE_FLAGS "${yaml_c_flags} ${yaml_cxx_flags} ${yaml_test_flags}"
 )
-target_link_libraries(run-tests yaml-cpp gmock)
+target_link_libraries(run-tests
+	yaml-cpp
+	gmock
+	${CMAKE_THREAD_LIBS_INIT})
 
 add_test(yaml-test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/run-tests)
-- 
2.16.1

