forked from Kistler-Group/sdbus-cpp
Switch to more modern CMake
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
# PROJECT INFORMATION
|
# PROJECT INFORMATION
|
||||||
#-------------------------------
|
#-------------------------------
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.6)
|
cmake_minimum_required(VERSION 3.12)
|
||||||
|
|
||||||
project(sdbus-c++ VERSION 0.8.0 LANGUAGES C CXX)
|
project(sdbus-c++ VERSION 0.8.0 LANGUAGES C CXX)
|
||||||
|
|
||||||
@ -16,12 +16,14 @@ option(BUILD_LIBSYSTEMD "Build libsystemd static library and incorporate it into
|
|||||||
|
|
||||||
if(NOT BUILD_LIBSYSTEMD)
|
if(NOT BUILD_LIBSYSTEMD)
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(SYSTEMD libsystemd>=236)
|
pkg_check_modules(Systemd IMPORTED_TARGET GLOBAL libsystemd>=236)
|
||||||
if(NOT SYSTEMD_FOUND)
|
if(NOT TARGET PkgConfig::Systemd)
|
||||||
message(FATAL_ERROR "libsystemd of version at least 236 is required, but was not found "
|
message(FATAL_ERROR "libsystemd of version at least 236 is required, but was not found "
|
||||||
"(you may turn BUILD_LIBSYSTEMD on for sdbus-c++ to try downloading "
|
"(you may turn BUILD_LIBSYSTEMD on for sdbus-c++ to try downloading "
|
||||||
"and building libsystemd in as part of sdbus-c++ during configuration)")
|
"and building libsystemd in as part of sdbus-c++ during configuration)")
|
||||||
endif()
|
endif()
|
||||||
|
add_library(Systemd::Libsystemd ALIAS PkgConfig::Systemd)
|
||||||
|
set(LIBSYSTEMD_VERSION ${Systemd_VERSION})
|
||||||
else()
|
else()
|
||||||
# Build static libsystemd library as an external project
|
# Build static libsystemd library as an external project
|
||||||
include(cmake/LibsystemdExternalProject.cmake)
|
include(cmake/LibsystemdExternalProject.cmake)
|
||||||
@ -80,11 +82,7 @@ set(SDBUSCPP_SRCS ${SDBUSCPP_CPP_SRCS} ${SDBUSCPP_HDR_SRCS} ${SDBUSCPP_PUBLIC_HD
|
|||||||
# GENERAL COMPILER CONFIGURATION
|
# GENERAL COMPILER CONFIGURATION
|
||||||
#-------------------------------
|
#-------------------------------
|
||||||
|
|
||||||
if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
|
||||||
else()
|
|
||||||
set(CMAKE_CXX_STANDARD 17) # Supported in CMake>=3.8
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
# LIBRARY BUILD INFORMATION
|
# LIBRARY BUILD INFORMATION
|
||||||
@ -93,22 +91,25 @@ endif()
|
|||||||
set(SDBUSCPP_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
set(SDBUSCPP_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
||||||
set(SDBUSCPP_VERSION "${PROJECT_VERSION}")
|
set(SDBUSCPP_VERSION "${PROJECT_VERSION}")
|
||||||
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries (.so) instead of static ones (.a)" ON)
|
# We promote BUILD_SHARED_LIBS flags to (global) option only if we are the main project
|
||||||
|
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||||
|
option(BUILD_SHARED_LIBS "Build shared libraries (.so) instead of static ones (.a)" ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Having an object target allows unit tests to reuse already built sources without re-building
|
# Having an object target allows unit tests to reuse already built sources without re-building
|
||||||
add_library(sdbus-c++-objlib OBJECT ${SDBUSCPP_SRCS})
|
add_library(sdbus-c++-objlib OBJECT ${SDBUSCPP_SRCS})
|
||||||
target_compile_definitions(sdbus-c++-objlib PRIVATE BUILD_LIB=1 LIBSYSTEMD_VERSION=${SYSTEMD_VERSION})
|
target_compile_definitions(sdbus-c++-objlib PRIVATE BUILD_LIB=1 LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
|
||||||
target_include_directories(sdbus-c++-objlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
target_include_directories(sdbus-c++-objlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
|
||||||
$<BUILD_INTERFACE:${SYSTEMD_INCLUDE_DIRS}>)
|
if(DEFINED BUILD_SHARED_LIBS)
|
||||||
if(BUILD_SHARED_LIBS)
|
set_target_properties(sdbus-c++-objlib PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS})
|
||||||
set_target_properties(sdbus-c++-objlib PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
||||||
endif()
|
endif()
|
||||||
if(BUILD_LIBSYSTEMD)
|
if(BUILD_LIBSYSTEMD)
|
||||||
add_dependencies(sdbus-c++-objlib LibsystemdBuildProject)
|
add_dependencies(sdbus-c++-objlib LibsystemdBuildProject)
|
||||||
endif()
|
endif()
|
||||||
|
target_link_libraries(sdbus-c++-objlib PUBLIC Systemd::Libsystemd)
|
||||||
|
|
||||||
add_library(sdbus-c++ $<TARGET_OBJECTS:sdbus-c++-objlib>)
|
add_library(sdbus-c++)
|
||||||
target_include_directories(sdbus-c++ PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
target_include_directories(sdbus-c++ PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
||||||
set_target_properties(sdbus-c++
|
set_target_properties(sdbus-c++
|
||||||
@ -116,13 +117,17 @@ set_target_properties(sdbus-c++
|
|||||||
VERSION "${SDBUSCPP_VERSION}"
|
VERSION "${SDBUSCPP_VERSION}"
|
||||||
SOVERSION "${SDBUSCPP_VERSION_MAJOR}"
|
SOVERSION "${SDBUSCPP_VERSION_MAJOR}"
|
||||||
OUTPUT_NAME "sdbus-c++")
|
OUTPUT_NAME "sdbus-c++")
|
||||||
target_link_libraries(sdbus-c++ PRIVATE ${SYSTEMD_LIBRARIES})
|
target_link_libraries(sdbus-c++ PRIVATE sdbus-c++-objlib)
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
# INSTALLATION
|
# INSTALLATION
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
|
set(EXPORT_SET sdbus-c++)
|
||||||
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
|
list(APPEND EXPORT_SET "sdbus-c++-objlib")
|
||||||
|
endif()
|
||||||
|
|
||||||
install(TARGETS sdbus-c++
|
install(TARGETS ${EXPORT_SET}
|
||||||
EXPORT sdbus-c++-targets
|
EXPORT sdbus-c++-targets
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
|
||||||
|
@ -38,20 +38,19 @@ ExternalProject_Add(LibsystemdBuildProject
|
|||||||
GIT_SHALLOW 1
|
GIT_SHALLOW 1
|
||||||
UPDATE_COMMAND ""
|
UPDATE_COMMAND ""
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E remove <BINARY_DIR>/*
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E remove <BINARY_DIR>/*
|
||||||
COMMAND ${MESON} --buildtype=${LIBSYSTEMD_BUILD_TYPE} -Dstatic-libsystemd=pic <SOURCE_DIR> <BINARY_DIR>
|
COMMAND ${MESON} --prefix=<INSTALL_DIR> --buildtype=${LIBSYSTEMD_BUILD_TYPE} -Dstatic-libsystemd=pic <SOURCE_DIR> <BINARY_DIR>
|
||||||
BUILD_COMMAND ${BUILD_VERSION_H}
|
BUILD_COMMAND ${BUILD_VERSION_H}
|
||||||
COMMAND ${NINJA} -C <BINARY_DIR> libsystemd.a
|
COMMAND ${NINJA} -C <BINARY_DIR> libsystemd.a
|
||||||
BUILD_ALWAYS 1
|
BUILD_ALWAYS 1
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory <SOURCE_DIR>/src/libsystemd <INSTALL_DIR>/include
|
||||||
LOG_DOWNLOAD 1 LOG_UPDATE 1 LOG_CONFIGURE 1 LOG_BUILD 1)
|
LOG_DOWNLOAD 1 LOG_UPDATE 1 LOG_CONFIGURE 1 LOG_BUILD 1)
|
||||||
|
|
||||||
ExternalProject_Get_property(LibsystemdBuildProject SOURCE_DIR)
|
ExternalProject_Get_property(LibsystemdBuildProject SOURCE_DIR)
|
||||||
set(SYSTEMD_INCLUDE_DIRS ${SOURCE_DIR}/src)
|
|
||||||
ExternalProject_Get_property(LibsystemdBuildProject BINARY_DIR)
|
ExternalProject_Get_property(LibsystemdBuildProject BINARY_DIR)
|
||||||
set(SYSTEMD_LIBRARY_DIRS ${BINARY_DIR})
|
ExternalProject_Get_property(LibsystemdBuildProject INSTALL_DIR)
|
||||||
|
|
||||||
set(SYSTEMD_VERSION ${LIBSYSTEMD_VERSION})
|
|
||||||
|
|
||||||
add_library(Systemd::Libsystemd STATIC IMPORTED)
|
add_library(Systemd::Libsystemd STATIC IMPORTED)
|
||||||
set_target_properties(Systemd::Libsystemd PROPERTIES IMPORTED_LOCATION ${SYSTEMD_LIBRARY_DIRS}/libsystemd.a)
|
set_target_properties(Systemd::Libsystemd PROPERTIES IMPORTED_LOCATION ${BINARY_DIR}/libsystemd.a)
|
||||||
set(SYSTEMD_LIBRARIES Systemd::Libsystemd ${CAP_LIBRARIES} ${GLIBC_RT_LIBRARY} ${MOUNT_LIBRARIES})
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include) # Trick for CMake to stop complaining about non-existent ${INSTALL_DIR}/include directory
|
||||||
|
target_include_directories(Systemd::Libsystemd INTERFACE ${INSTALL_DIR}/include)
|
||||||
|
target_link_libraries(Systemd::Libsystemd INTERFACE ${CAP_LIBRARIES} ${GLIBC_RT_LIBRARY} ${MOUNT_LIBRARIES})
|
||||||
|
@ -2,10 +2,3 @@
|
|||||||
|
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
|
||||||
check_required_components("@PROJECT_NAME@")
|
check_required_components("@PROJECT_NAME@")
|
||||||
|
|
||||||
# This is here for backwards-compatibility. Please use more modern target-based approach.
|
|
||||||
set(SDBUSCPP_VERSION "@SDBUSCPP_VERSION@")
|
|
||||||
set(SDBUSCPP_FOUND "TRUE")
|
|
||||||
set_and_check(SDBUSCPP_INCLUDE_DIRS "@CMAKE_INSTALL_FULL_INCLUDEDIR@")
|
|
||||||
set_and_check(SDBUSCPP_LIBRARY_DIR "@CMAKE_INSTALL_FULL_LIBDIR@")
|
|
||||||
set(SDBUSCPP_LIBRARIES sdbus-c++)
|
|
||||||
|
@ -1,37 +1,29 @@
|
|||||||
#-------------------------------
|
#-------------------------------
|
||||||
# DOWNLOAD AND BUILD OF GOOGLETEST
|
# DOWNLOAD AND BUILD OF GOOGLETEST
|
||||||
# https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project
|
|
||||||
#-------------------------------
|
#-------------------------------
|
||||||
|
|
||||||
configure_file(googletest-download/CMakeLists.txt.in googletest-download/CMakeLists.txt)
|
include(FetchContent)
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
message("Fetching googletest...")
|
||||||
RESULT_VARIABLE result
|
FetchContent_Declare(googletest
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download)
|
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||||
|
GIT_TAG master
|
||||||
|
GIT_SHALLOW 1
|
||||||
|
UPDATE_COMMAND "")
|
||||||
|
|
||||||
if(result)
|
#FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually:
|
||||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
FetchContent_GetProperties(googletest)
|
||||||
|
if(NOT googletest_POPULATED)
|
||||||
|
FetchContent_Populate(googletest)
|
||||||
|
set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE)
|
||||||
|
set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE)
|
||||||
|
set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
|
||||||
|
set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS})
|
||||||
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
|
||||||
|
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download)
|
|
||||||
|
|
||||||
if(result)
|
|
||||||
message(FATAL_ERROR "Build step for googletest failed: ${result}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE)
|
|
||||||
set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE)
|
|
||||||
set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
|
|
||||||
|
|
||||||
set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS})
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
|
||||||
add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/googletest-build
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK})
|
|
||||||
|
|
||||||
#-------------------------------
|
#-------------------------------
|
||||||
# SOURCE FILES CONFIGURATION
|
# SOURCE FILES CONFIGURATION
|
||||||
#-------------------------------
|
#-------------------------------
|
||||||
@ -84,15 +76,12 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|||||||
# BUILD INFORMATION
|
# BUILD INFORMATION
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
|
|
||||||
add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS} $<TARGET_OBJECTS:sdbus-c++-objlib>)
|
add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS})
|
||||||
target_compile_definitions(sdbus-c++-unit-tests PRIVATE LIBSYSTEMD_VERSION=${SYSTEMD_VERSION})
|
target_compile_definitions(sdbus-c++-unit-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
|
||||||
target_include_directories(sdbus-c++-unit-tests PRIVATE ${SYSTEMD_INCLUDE_DIRS}
|
target_link_libraries(sdbus-c++-unit-tests sdbus-c++-objlib gmock gmock_main)
|
||||||
${CMAKE_SOURCE_DIR}/src
|
|
||||||
${CMAKE_SOURCE_DIR}/include)
|
|
||||||
target_link_libraries(sdbus-c++-unit-tests ${SYSTEMD_LIBRARIES} gmock gmock_main)
|
|
||||||
|
|
||||||
add_executable(sdbus-c++-integration-tests ${INTEGRATIONTESTS_SRCS})
|
add_executable(sdbus-c++-integration-tests ${INTEGRATIONTESTS_SRCS})
|
||||||
target_compile_definitions(sdbus-c++-integration-tests PRIVATE LIBSYSTEMD_VERSION=${SYSTEMD_VERSION})
|
target_compile_definitions(sdbus-c++-integration-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
|
||||||
target_link_libraries(sdbus-c++-integration-tests sdbus-c++ gmock gmock_main)
|
target_link_libraries(sdbus-c++-integration-tests sdbus-c++ gmock gmock_main)
|
||||||
|
|
||||||
# Manual performance and stress tests
|
# Manual performance and stress tests
|
||||||
|
Reference in New Issue
Block a user