option(USE_SYSTEM_GTEST "Use system installed gtest when set to ON, or build gtest locally when set to OFF" OFF)
if(USE_SYSTEM_GTEST)
if( (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 2.8) )
message( STATUS "Cmake version 2.8 or greater needed to use GTest" )
else()
# This will define GTEST_FOUND
find_package( GTest )
endif()
else()
if(CMAKE_VERSION VERSION_LESS 3.2 AND CMAKE_GENERATOR MATCHES "Ninja")
message(WARNING "Building GTest with Ninja has known issues with CMake older than 3.2")
endif()
include(ExternalProject)
set(GTEST_LIBRARIES gtest gtest_main)
# the binary dir must be know before creating the external project in order
# to pass the byproducts
set(prefix "${CMAKE_CURRENT_BINARY_DIR}/gtest-external-prefix")
set(binary_dir "${prefix}/src/gtest-external-build")
set(byproducts)
foreach(lib ${GTEST_LIBRARIES})
set(${lib}_location
${binary_dir}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX})
list(APPEND byproducts ${${lib}_location})
endforeach()
if( MSVC )
if( MSVC_VERSION LESS 1800 )
set(EXTRA_FLAG "/D_VARIADIC_MAX=10 ")
else()
set(EXTRA_FLAG "")
endif()
else()
set(EXTRA_FLAG "")
endif()
ExternalProject_Add(
gtest-external
URL https://github.com/google/googletest/archive/release-1.7.0.zip
URL_MD5 EF5E700C8A0F3EE123E2E0209B8B4961
PREFIX ${prefix}
BINARY_DIR ${binary_dir}
CMAKE_CACHE_ARGS
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
-DCMAKE_CXX_FLAGS_DEBUG:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_MINSIZEREL:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELEASE:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_MINSIZEREL:STRING=${CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-Dgtest_force_shared_crt:BOOL=ON
BUILD_BYPRODUCTS ${byproducts}
INSTALL_COMMAND "")
foreach(lib ${GTEST_LIBRARIES})
add_library(${lib} IMPORTED STATIC)
add_dependencies(${lib} gtest-external)
set_target_properties(${lib} PROPERTIES IMPORTED_LOCATION ${${lib}_location})
endforeach()
ExternalProject_Get_Property(gtest-external source_dir)
set(GTEST_INCLUDE_DIRS ${source_dir}/include)
set(GTEST_FOUND ON)
endif()
# Hack to get googletest v1.6 to work with vs2012
if( MSVC11 )
add_definitions( "/D_VARIADIC_MAX=10" )
endif( )