diff --git a/CMakeLists.txt b/CMakeLists.txt index e28f51f..92c6d68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ # Copyright (c) 2016-2020 Alexey Gruzdev # -cmake_minimum_required (VERSION 3.8) +cmake_minimum_required (VERSION 3.15) if(NOT YATO_NO_PROJECT_FOLDERS) set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -13,7 +13,10 @@ endif() set(YATO_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -project(Yato) +project(Yato VERSION 1.2.0 LANGUAGES CXX) + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) #========================================== # Output @@ -48,11 +51,6 @@ if(MSVC) list(APPEND yato_extra_sources ${YATO_SOURCE_DIR}/extras/yato.natvis) endif() -add_custom_target(Yato SOURCES ${yato_sources} - ${yato_extra_sources} -) -set_property(TARGET Yato PROPERTY FOLDER "Modules") - #========================================== # Targets @@ -78,15 +76,67 @@ if(YATO_BUILD_ACTORS) list(APPEND YATO_INCLUDE_DIRS "${YATO_SOURCE_DIR}/modules/actors") endif() + +add_library(Yato INTERFACE) + +set_property(TARGET Yato PROPERTY FOLDER "Modules") + +target_sources(Yato INTERFACE + FILE_SET HEADERS + BASE_DIRS ${YATO_SOURCE_DIR}/include + FILES ${yato_sources} +) + +target_include_directories(Yato INTERFACE + $ + $ +) + +#========================================== +# Installation + +# Generate and install CMake config files. +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/YatoConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Yato +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Yato +) + +# Install header-only library. +install(TARGETS Yato + EXPORT YatoTargets + FILE_SET HEADERS +) + +install(EXPORT YatoTargets + FILE YatoTargets.cmake + NAMESPACE Yato:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Yato +) + #========================================== # Tests option(YATO_BUILD_TESTS "Build unit tests" ON) if(YATO_BUILD_TESTS) + enable_testing() add_subdirectory(./tests) endif() -option(YATO_BUILD_PERFORMANCE_TESTS "Buidl performance tests" OFF) +option(YATO_BUILD_PERFORMANCE_TESTS "Build performance tests" OFF) if(YATO_BUILD_PERFORMANCE_TESTS) add_subdirectory(./perf_tests) endif() diff --git a/cmake/YatoConfig.cmake.in b/cmake/YatoConfig.cmake.in new file mode 100644 index 0000000..12b1625 --- /dev/null +++ b/cmake/YatoConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/YatoTargets.cmake") diff --git a/cmake/dependency.gtest.cmake b/cmake/dependency.gtest.cmake index 5e07fd0..ae7e93c 100644 --- a/cmake/dependency.gtest.cmake +++ b/cmake/dependency.gtest.cmake @@ -7,14 +7,8 @@ # Google test dependency # https://github.com/google/googletest # -# Output variables: -# GTEST_INCLUDE_DIR - includes -# GTEST_LIBRARY_DIR - link directories -# GTEST_LIBRARIES - link targets -# GMOCK_INCLUDE_DIR - includes - - -include(${YATO_SOURCE_DIR}/cmake/dependency.common.functions.cmake) +# Targets: +# gtest and gtest_main macro(_gtest_fix_definitions _TARGET_NAME_) if(TARGET ${_TARGET_NAME_}) @@ -22,6 +16,15 @@ macro(_gtest_fix_definitions _TARGET_NAME_) endif() endmacro(_gtest_fix_definitions) +if (NOT TARGET gtest) + find_package(GTest REQUIRED CONFIG) + add_library(gtest ALIAS GTest::gtest) + add_library(gtest_main ALIAS GTest::gtest_main) + return() +endif() + +include(${YATO_SOURCE_DIR}/cmake/dependency.common.functions.cmake) + dependency_find_or_download( NAME GTEST VERBOSE_NAME "GoogleTest" @@ -50,12 +53,3 @@ if(NOT TARGET gtest) set_property(TARGET gtest PROPERTY FOLDER "Dependencies") set_property(TARGET gtest_main PROPERTY FOLDER "Dependencies") endif() - -set(GTEST_INCLUDE_DIR ${GTEST_FOUND_ROOT}/googletest/include CACHE INTERNAL "") -set(GMOCK_INCLUDE_DIR ${GTEST_FOUND_ROOT}/googlemock/include CACHE INTERNAL "") -set(GTEST_LIBRARY_DIR "" CACHE INTERNAL "") -list(APPEND GTEST_LIBRARIES gtest) -list(APPEND GTEST_LIBRARIES gtest_main) -set(GTEST_LIBRARIES ${GTEST_LIBRARIES} CACHE INTERNAL "") - - diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 514d80f..d57d745 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -15,7 +15,6 @@ include(${YATO_SOURCE_DIR}/cmake/dependency.gtest.cmake) #========================================== # Sources -include_directories(${GTEST_INCLUDE_DIR}) include_directories(${YATO_INCLUDE_DIRS}) file(GLOB all_tests "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/source/*.h") @@ -33,9 +32,9 @@ source_group(TREE "${YATO_SOURCE_DIR}" FILES ${all_sources}) # Targets add_definitions(-DYATO_ENABLE_TESTED_ASSERTIONS) -link_directories(${GTEST_LIBRARY_DIR}) add_executable(YatoTests ${all_sources}) +target_link_libraries(YatoTests PRIVATE gtest_main) set_property(TARGET YatoTests PROPERTY FOLDER "Tests") @@ -45,6 +44,5 @@ _gtest_fix_definitions(YatoTests) foreach(lib ${Yato_TEST_LIBS}) target_link_libraries(YatoTests ${lib}) endforeach() -foreach(lib ${GTEST_LIBRARIES}) - target_link_libraries(YatoTests ${lib}) -endforeach() + +add_test(NAME "unit-tests" COMMAND "./YatoTests")