forked from Kistler-Group/sdbus-cpp
Go a step further towards modern CMake and cleaner project structure
This commit is contained in:
@ -31,9 +31,9 @@ endif()
|
|||||||
# SOURCE FILES CONFIGURATION
|
# SOURCE FILES CONFIGURATION
|
||||||
#-------------------------------
|
#-------------------------------
|
||||||
|
|
||||||
set(SDBUSCPP_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
|
set(SDBUSCPP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||||||
set(SDBUSCPP_INCLUDE_SUBDIR sdbus-c++)
|
set(SDBUSCPP_INCLUDE_SUBDIR sdbus-c++)
|
||||||
set(SDBUSCPP_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/${SDBUSCPP_INCLUDE_SUBDIR})
|
set(SDBUSCPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include/${SDBUSCPP_INCLUDE_SUBDIR})
|
||||||
|
|
||||||
set(SDBUSCPP_CPP_SRCS
|
set(SDBUSCPP_CPP_SRCS
|
||||||
${SDBUSCPP_SOURCE_DIR}/Connection.cpp
|
${SDBUSCPP_SOURCE_DIR}/Connection.cpp
|
||||||
@ -86,9 +86,6 @@ if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
|
|||||||
else()
|
else()
|
||||||
set(CMAKE_CXX_STANDARD 17) # Supported in CMake>=3.8
|
set(CMAKE_CXX_STANDARD 17) # Supported in CMake>=3.8
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
|
||||||
include_directories("${CMAKE_SOURCE_DIR}/include")
|
|
||||||
include_directories("${CMAKE_SOURCE_DIR}/src")
|
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
# LIBRARY BUILD INFORMATION
|
# LIBRARY BUILD INFORMATION
|
||||||
@ -99,30 +96,35 @@ set(SDBUSCPP_VERSION "${PROJECT_VERSION}")
|
|||||||
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries (.so) instead of static ones (.a)" ON)
|
option(BUILD_SHARED_LIBS "Build shared libraries (.so) instead of static ones (.a)" ON)
|
||||||
|
|
||||||
add_library(sdbus-cpp OBJECT ${SDBUSCPP_SRCS})
|
# Having an object target allows unit tests to reuse already built sources without re-building
|
||||||
target_include_directories(sdbus-cpp PUBLIC ${SYSTEMD_INCLUDE_DIRS})
|
add_library(sdbus-c++-objlib OBJECT ${SDBUSCPP_SRCS})
|
||||||
target_compile_definitions(sdbus-cpp PRIVATE BUILDLIB=1)
|
target_compile_definitions(sdbus-c++-objlib PRIVATE BUILDLIB=1)
|
||||||
|
target_include_directories(sdbus-c++-objlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||||
|
$<BUILD_INTERFACE:${SYSTEMD_INCLUDE_DIRS}>)
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
set_target_properties(sdbus-cpp PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
set_target_properties(sdbus-c++-objlib PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||||
endif()
|
endif()
|
||||||
if(BUILD_LIBSYSTEMD)
|
if(BUILD_LIBSYSTEMD)
|
||||||
add_dependencies(sdbus-cpp LibsystemdBuildProject)
|
add_dependencies(sdbus-c++-objlib LibsystemdBuildProject)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(sdbus-c++ $<TARGET_OBJECTS:sdbus-cpp>)
|
add_library(sdbus-c++ $<TARGET_OBJECTS:sdbus-c++-objlib>)
|
||||||
|
target_include_directories(sdbus-c++ PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
||||||
set_target_properties(sdbus-c++
|
set_target_properties(sdbus-c++
|
||||||
PROPERTIES
|
PROPERTIES PUBLIC_HEADER "${SDBUSCPP_PUBLIC_HDRS}"
|
||||||
PUBLIC_HEADER "${SDBUSCPP_PUBLIC_HDRS}"
|
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++ ${SYSTEMD_LIBRARIES})
|
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
# INSTALLATION
|
# INSTALLATION
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
|
|
||||||
install(TARGETS sdbus-c++
|
install(TARGETS sdbus-c++
|
||||||
|
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
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT static_libraries
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT static_libraries
|
||||||
@ -136,7 +138,7 @@ option(BUILD_TESTS "Build and install tests (default OFF)" OFF)
|
|||||||
|
|
||||||
if(BUILD_TESTS)
|
if(BUILD_TESTS)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory("${CMAKE_SOURCE_DIR}/tests")
|
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/tests")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
@ -146,7 +148,7 @@ endif()
|
|||||||
option(BUILD_CODE_GEN "Build and install interface stub code generator (default OFF)" OFF)
|
option(BUILD_CODE_GEN "Build and install interface stub code generator (default OFF)" OFF)
|
||||||
|
|
||||||
if(BUILD_CODE_GEN)
|
if(BUILD_CODE_GEN)
|
||||||
add_subdirectory("${CMAKE_SOURCE_DIR}/tools")
|
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/tools")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
@ -157,7 +159,7 @@ option(BUILD_DOC "Build documentation for sdbus-c++" ON)
|
|||||||
|
|
||||||
if(BUILD_DOC)
|
if(BUILD_DOC)
|
||||||
option(BUILD_DOXYGEN_DOC "Build doxygen documentation for sdbus-c++ API" OFF)
|
option(BUILD_DOXYGEN_DOC "Build doxygen documentation for sdbus-c++ API" OFF)
|
||||||
add_subdirectory("${CMAKE_SOURCE_DIR}/docs")
|
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/docs")
|
||||||
install(FILES README README.md NEWS COPYING ChangeLog AUTHORS DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
install(FILES README README.md NEWS COPYING ChangeLog AUTHORS DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -166,15 +168,20 @@ endif()
|
|||||||
#----------------------------------
|
#----------------------------------
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
set(SDBUSCPP_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/sdbus-c++)
|
|
||||||
|
|
||||||
configure_file(sdbus-c++-config.cmake.in sdbus-c++-config.cmake @ONLY)
|
install(EXPORT sdbus-c++-targets
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/sdbus-c++-config.cmake DESTINATION ${SDBUSCPP_CONFIG_INSTALL_DIR} COMPONENT dev)
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/sdbus-c++
|
||||||
|
NAMESPACE SDBusCpp::
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
write_basic_package_version_file(sdbus-c++-config-version.cmake
|
configure_package_config_file(cmake/sdbus-c++-config.cmake.in cmake/sdbus-c++-config.cmake
|
||||||
VERSION ${PROJECT_VERSION}
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/sdbus-c++)
|
||||||
COMPATIBILITY AnyNewerVersion)
|
write_basic_package_version_file(cmake/sdbus-c++-config-version.cmake COMPATIBILITY SameMajorVersion)
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/sdbus-c++-config-version.cmake DESTINATION ${SDBUSCPP_CONFIG_INSTALL_DIR} COMPONENT dev)
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/sdbus-c++-config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/cmake/sdbus-c++-config-version.cmake
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/sdbus-c++
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
configure_file(sdbus-c++.pc.in sdbus-c++.pc @ONLY)
|
configure_file(pkgconfig/sdbus-c++.pc.in pkgconfig/sdbus-c++.pc @ONLY)
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/sdbus-c++.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT dev)
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/sdbus-c++.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT dev)
|
||||||
|
@ -49,6 +49,6 @@ 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})
|
set(SYSTEMD_LIBRARY_DIRS ${BINARY_DIR})
|
||||||
|
|
||||||
add_library(libsystemd-static STATIC IMPORTED)
|
add_library(Systemd::Libsystemd STATIC IMPORTED)
|
||||||
set_target_properties(libsystemd-static PROPERTIES IMPORTED_LOCATION ${SYSTEMD_LIBRARY_DIRS}/libsystemd.a)
|
set_target_properties(Systemd::Libsystemd PROPERTIES IMPORTED_LOCATION ${SYSTEMD_LIBRARY_DIRS}/libsystemd.a)
|
||||||
set(SYSTEMD_LIBRARIES libsystemd-static ${CAP_LIBRARIES} ${GLIBC_RT_LIBRARY} ${MOUNT_LIBRARIES})
|
set(SYSTEMD_LIBRARIES Systemd::Libsystemd ${CAP_LIBRARIES} ${GLIBC_RT_LIBRARY} ${MOUNT_LIBRARIES})
|
||||||
|
11
cmake/sdbus-c++-config.cmake.in
Normal file
11
cmake/sdbus-c++-config.cmake.in
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
|
||||||
|
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,14 +0,0 @@
|
|||||||
# Config file for the sdbus-c++ package.
|
|
||||||
#
|
|
||||||
# It defines the following variables:
|
|
||||||
# SDBUSCPP_VERSION - version of sdbus-c++
|
|
||||||
# SDBUSCPP_FOUND - set to true
|
|
||||||
# SDBUSCPP_INCLUDE_DIRS - include directories for sdbus-c++
|
|
||||||
# SDBUSCPP_LIBRARY_DIR - library directories for sdbus-c++
|
|
||||||
# SDBUSCPP_LIBRARIES - libraries to link against
|
|
||||||
|
|
||||||
set(SDBUSCPP_VERSION "@SDBUSCPP_VERSION@")
|
|
||||||
set(SDBUSCPP_FOUND "TRUE")
|
|
||||||
set(SDBUSCPP_INCLUDE_DIRS "@CMAKE_INSTALL_FULL_INCLUDEDIR@")
|
|
||||||
set(SDBUSCPP_LIBRARY_DIR "@CMAKE_INSTALL_FULL_LIBDIR@")
|
|
||||||
set(SDBUSCPP_LIBRARIES sdbus-c++)
|
|
@ -84,8 +84,10 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|||||||
# BUILD INFORMATION
|
# BUILD INFORMATION
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
|
|
||||||
add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS} $<TARGET_OBJECTS:sdbus-cpp>)
|
add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS} $<TARGET_OBJECTS:sdbus-c++-objlib>)
|
||||||
target_include_directories(sdbus-c++-unit-tests PUBLIC ${SYSTEMD_INCLUDE_DIRS})
|
target_include_directories(sdbus-c++-unit-tests PRIVATE ${SYSTEMD_INCLUDE_DIRS}
|
||||||
|
${CMAKE_SOURCE_DIR}/src
|
||||||
|
${CMAKE_SOURCE_DIR}/include)
|
||||||
target_link_libraries(sdbus-c++-unit-tests ${SYSTEMD_LIBRARIES} gmock gmock_main)
|
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})
|
||||||
|
Reference in New Issue
Block a user