diff --git a/CMakeLists.txt b/CMakeLists.txt index aa9b5ef2..b0ef5ee6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8.2) project(libmc) set(CMAKE_MACOSX_RPATH 1) @@ -48,8 +48,39 @@ install( option(WITH_TESTING "Enable testing" OFF) if (WITH_TESTING) - set(EXT_PROJECTS_DIR ${CMAKE_SOURCE_DIR}/ext) - add_subdirectory(${EXT_PROJECTS_DIR}/gtest) + # Download and unpack googletest at configure time + configure_file(ext/gtest/CMakeLists.txt.in ext/gtest/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/ext/gtest ) + 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}/ext/gtest ) + 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() + + # Now simply link against gtest or gtest_main as needed. Eg enable_testing() add_subdirectory(tests) endif (WITH_TESTING) diff --git a/ext/gtest/CMakeLists.txt b/ext/gtest/CMakeLists.txt deleted file mode 100644 index d8846c00..00000000 --- a/ext/gtest/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.6) -project(gtest_builder C CXX) -include(ExternalProject) - -ExternalProject_Add(googletest - # SVN_REPOSITORY http://googletest.googlecode.com/svn/trunk - GIT_REPOSITORY https://github.com/svn2github/googletest.git - CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs - -Dgtest_force_shared_crt=ON - PREFIX "${CMAKE_CURRENT_BINARY_DIR}" - INSTALL_COMMAND "" -) - -ExternalProject_Get_Property(googletest source_dir) -set(GTEST_INCLUDE_DIRS ${source_dir}/include PARENT_SCOPE) - -ExternalProject_Get_Property(googletest binary_dir) -set(GTEST_LIBS_DIR ${binary_dir} PARENT_SCOPE) diff --git a/ext/gtest/CMakeLists.txt.in b/ext/gtest/CMakeLists.txt.in new file mode 100644 index 00000000..354e80c6 --- /dev/null +++ b/ext/gtest/CMakeLists.txt.in @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 2.8.2) +project(gtest_builder C CXX) + +include(ExternalProject) + +ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG master + SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" + CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" +) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8a68922d..1eaf4089 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,14 +1,12 @@ -include_directories(${GTEST_INCLUDE_DIRS}) file(GLOB TEST_SRC_FILES ${PROJECT_SOURCE_DIR}/tests/test_*.cpp) foreach(SRC ${TEST_SRC_FILES}) get_filename_component(test_name ${SRC} NAME_WE) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS "-fexceptions") add_executable(${test_name} ${SRC}) - add_dependencies(${test_name} googletest) + add_dependencies(${test_name} gtest) target_link_libraries(${test_name} - ${GTEST_LIBS_DIR}/libgtest.a - ${GTEST_LIBS_DIR}/libgtest_main.a + gtest_main pthread mc )