diff options
| author | Mateusz Loskot <mateusz@loskot.net> | 2018-06-07 17:45:42 +0200 |
|---|---|---|
| committer | Mateusz Loskot <mateusz@loskot.net> | 2018-06-07 21:21:49 +0200 |
| commit | e9b399fc91e72b3cf81337e6b4dca8bc60fafaf8 (patch) | |
| tree | e7f0d74243cb6bd0ef5510c6ecb4527535490a97 | |
| parent | c1a70986674e8129a2a0d1779896386c1fea6a80 (diff) | |
| download | PROJ-e9b399fc91e72b3cf81337e6b4dca8bc60fafaf8.tar.gz PROJ-e9b399fc91e72b3cf81337e6b4dca8bc60fafaf8.zip | |
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
| -rw-r--r-- | test/googletest/CMakeLists.txt.in | 18 | ||||
| -rw-r--r-- | test/unit/CMakeLists.txt | 72 |
2 files changed, 77 insertions, 13 deletions
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) |
