From e9b399fc91e72b3cf81337e6b4dca8bc60fafaf8 Mon Sep 17 00:00:00 2001 From: Mateusz Loskot Date: Thu, 7 Jun 2018 17:45:42 +0200 Subject: Add CMake configuration for test/googletest and test/unit For CMake builds, latest googletest 1.8.0 is downloaded. Following officially recommended integration for CMake-enabled projects https://github.com/google/googletest/blob/master/googletest/README.md "Use CMake to download GoogleTest as part of the build's configure step. This is just a little more complex, but doesn't have the limitations of the other methods." Since, our copy of test/googletest - is a very minimalist copy of googletest - does not include any official CMake scripts - would require copying parts of googletest CMakeLists.txt, compilater/linker flags (e.g. -lpthreads) for reliable multi-platform builds, it is reasoanable to rely on download All pros and cons advantages are discussed in teh README.md linked above. Closes #1033 --- test/googletest/CMakeLists.txt.in | 18 ++++++++++ test/unit/CMakeLists.txt | 72 ++++++++++++++++++++++++++++++++------- 2 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 test/googletest/CMakeLists.txt.in diff --git a/test/googletest/CMakeLists.txt.in b/test/googletest/CMakeLists.txt.in new file mode 100644 index 00000000..38f90ca5 --- /dev/null +++ b/test/googletest/CMakeLists.txt.in @@ -0,0 +1,18 @@ +# Source https://github.com/google/googletest/blob/master/googletest/README.md +cmake_minimum_required(VERSION 2.8.2) # minimum version for ExternalProject_Add + +project(googletest-download NONE) + +include(ExternalProject) +ExternalProject_Add(googletest + URL https://github.com/google/googletest/archive/release-1.8.0.zip + URL_HASH SHA1=667f873ab7a4d246062565fad32fb6d8e203ee73 + DOWNLOAD_NO_PROGRESS ON + SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + TEST_COMMAND "" + # Disable install step + INSTALL_COMMAND "" +) \ No newline at end of file diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 899aec9b..35c2c29d 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -1,13 +1,59 @@ -#SET(CATCH2_INCLUDE ../catch.hpp) -#include_directories(..) - -#SET(BASIC_TEST_SRC basic_test.cpp) -#add_executable(basic_test ${BASIC_TEST_SRC} ${CATCH2_INCLUDE}) -#target_link_libraries(basic_test ${PROJ_LIBRARIES} ${TEST_MAIN_LIBRARIES}) -#set_target_properties(basic_test -# PROPERTIES -# LINKER_LANGUAGE CXX) -# -#add_test( NAME basic_test -# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/test -# COMMAND basic_test ) +# CMake configuration for PROJ unit tests + +# FIXME: Deal with our old-school CMakeLists.txt behaving badly +set(_save_c_flags "${CMAKE_C_FLAGS}") +set(_save_cxx_flags "${CMAKE_CXX_FLAGS}") +string(REGEX REPLACE "\\-W[a-z\\-]+" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) +string(REGEX REPLACE "\\-W[a-z\\-]+" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + +# +# Build Google Test +# +# Source https://github.com/google/googletest/blob/master/googletest/README.md +# Download and unpack googletest at configure time +configure_file( + ${CMAKE_SOURCE_DIR}/test/googletest/CMakeLists.txt.in + ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt) +execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download ) +if(result) + message(FATAL_ERROR "CMake step for googletest failed: ${result}") +endif() +execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) +if(result) + message(FATAL_ERROR "Build step for googletest failed: ${result}") +endif() +# Prevent overriding the parent project's compiler/linker +# settings on Windows +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +# Add googletest directly to our build. This defines +# the gtest and gtest_main targets. +add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src + ${CMAKE_BINARY_DIR}/googletest-build + EXCLUDE_FROM_ALL) +# The gtest/gtest_main targets carry header search path +# dependencies automatically when using CMake 2.8.11 or +# later. Otherwise we have to add them here ourselves. +if (CMAKE_VERSION VERSION_LESS 2.8.11) + include_directories("${gtest_SOURCE_DIR}/include") +endif() + +# FIXME: Deal with our old-school CMakeLists.txt behaving badly +set(CMAKE_C_FLAGS "${_save_c_flags}") +set(CMAKE_CXX_FLAGS "${_save_cxx_flags}") +unset(_save_c_flags) +unset(_save_cxx_flags) + +# +# Build PROJ unit tests +# +add_executable(proj_test_unit + main.cpp + basic_test.cpp) +target_link_libraries(proj_test_unit + gtest + ${PROJ_LIBRARIES}) +add_test(NAME proj_test_unit COMMAND proj_test_unit) -- cgit v1.2.3