diff --git a/.gitmodules b/.gitmodules index 42a6fe7..8fba731 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "extern/googletest"] - path = extern/googletest - url = https://github.com/google/googletest.git [submodule "extern/doxygen-awesome-css"] path = extern/doxygen-awesome-css url = https://github.com/jothepro/doxygen-awesome-css.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c25343..f67769a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,10 @@ project( LANGUAGES CXX ) +# dependencies +include(FetchContent) + + if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) # folder support for IDEs set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -33,15 +37,6 @@ if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) endif () endif () -# Require out-of-source builds -file(TO_CMAKE_PATH "${PROJECT_BINARY_DIR}/CMakeLists.txt" LOC_PATH) -if (EXISTS "${LOC_PATH}") - message( - FATAL_ERROR - "You cannot build in a source directory (or any directory with a CMakeLists.txt file). Please make a build subdirectory. Feel free to remove CMakeCache.txt and CMakeFiles." - ) -endif () - option(KASSERT_WARNINGS_ARE_ERRORS OFF) option(KASSERT_BUILD_TESTS OFF) @@ -53,51 +48,44 @@ target_include_directories(kassert_base INTERFACE include) # set C++ standard to C++17 target_compile_features(kassert_base INTERFACE cxx_std_17) - -list( - APPEND - KASSERT_WARNING_FLAGS - "-Wall" - "-Wextra" - "-Wconversion" - "-Wnon-virtual-dtor" - "-Woverloaded-virtual" - "-Wshadow" - "-Wsign-conversion" - "-Wundef" - "-Wunreachable-code" - "-Wunused" +add_library(kassert_warnings INTERFACE) +target_compile_options( + kassert_warnings + INTERFACE "-Wall" + "-Wextra" + "-Wconversion" + "-Wnon-virtual-dtor" + "-Woverloaded-virtual" + "-Wshadow" + "-Wsign-conversion" + "-Wundef" + "-Wunreachable-code" + "-Wunused" ) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - list( - APPEND - KASSERT_WARNING_FLAGS - "-Wcast-align" - "-Wnull-dereference" - "-Wpedantic" - "-Wextra-semi" - "-Wno-gnu-zero-variadic-macro-arguments" + target_compile_options( + kassert_warnings INTERFACE "-Wcast-align" "-Wnull-dereference" "-Wpedantic" "-Wextra-semi" + "-Wno-gnu-zero-variadic-macro-arguments" ) endif () if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - list( - APPEND - KASSERT_WARNING_FLAGS - "-Wcast-align" - "-Wnull-dereference" - "-Wpedantic" - "-Wnoexcept" - "-Wsuggest-attribute=const" - "-Wsuggest-attribute=noreturn" - "-Wsuggest-override" + target_compile_options( + kassert_warnings + INTERFACE "-Wcast-align" + "-Wnull-dereference" + "-Wpedantic" + "-Wnoexcept" + "-Wsuggest-attribute=const" + "-Wsuggest-attribute=noreturn" + "-Wsuggest-override" ) endif () # OFF by default. if (KASSERT_WARNINGS_ARE_ERRORS) - list(APPEND KASSERT_WARNING_FLAGS "-Werror") + target_compile_options(kassert_warnings INTERFACE "-Werror") endif () # Actual library target with compile definitions @@ -125,5 +113,6 @@ add_library(kassert::kassert ALIAS kassert) # Testing and examples are only built if this is the main project or if KASSERT_BUILD_TESTS is set (OFF by default) if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR KASSERT_BUILD_TESTS) + ensure_googletest() add_subdirectory(tests) endif () diff --git a/extern/googletest b/extern/googletest deleted file mode 160000 index af29db7..0000000 --- a/extern/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit af29db7ec28d6df1c7f0f745186884091e602e07 diff --git a/tests/cmake/KassertTestHelper.cmake b/tests/cmake/KassertTestHelper.cmake index 466cec6..aae4776 100644 --- a/tests/cmake/KassertTestHelper.cmake +++ b/tests/cmake/KassertTestHelper.cmake @@ -1,4 +1,4 @@ -add_subdirectory("${PROJECT_SOURCE_DIR}/extern/googletest" "extern/googletest") +find_package(googletest REQUIRED) include(GoogleTest) @@ -10,7 +10,7 @@ function (kassert_register_test KASSERT_TARGET_NAME) cmake_parse_arguments("KASSERT" "EXCEPTION_MODE" "" "FILES" ${ARGN}) add_executable(${KASSERT_TARGET_NAME} ${KASSERT_FILES}) target_link_libraries(${KASSERT_TARGET_NAME} PRIVATE gtest gtest_main gmock kassert_base) - target_compile_options(${KASSERT_TARGET_NAME} PRIVATE ${KASSERT_WARNING_FLAGS}) + target_link_libraries(${KASSERT_TARGET_NAME} PRIVATE kassert_warnings) gtest_discover_tests(${KASSERT_TARGET_NAME} WORKING_DIRECTORY ${PROJECT_DIR}) if (KASSERT_EXCEPTION_MODE)