aboutsummaryrefslogtreecommitdiff
path: root/test/unit/CMakeLists.txt
diff options
context:
space:
mode:
authorMateusz Loskot <mateusz@loskot.net>2018-06-07 17:45:42 +0200
committerMateusz Loskot <mateusz@loskot.net>2018-06-07 21:21:49 +0200
commite9b399fc91e72b3cf81337e6b4dca8bc60fafaf8 (patch)
treee7f0d74243cb6bd0ef5510c6ecb4527535490a97 /test/unit/CMakeLists.txt
parentc1a70986674e8129a2a0d1779896386c1fea6a80 (diff)
downloadPROJ-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
Diffstat (limited to 'test/unit/CMakeLists.txt')
-rw-r--r--test/unit/CMakeLists.txt72
1 files changed, 59 insertions, 13 deletions
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)