From 221ff7fa3ee4582d433417dc5a4f47c6626fb7b3 Mon Sep 17 00:00:00 2001 From: Carlos Gomes Martinho Date: Tue, 31 Dec 2019 19:59:29 +0100 Subject: [PATCH] build: install cmake config files to enable cmake find_package (#11) * build: install cmake config files to enable cmake find_package * fix: destination for header files --- CMakeLists.txt | 160 ++++++++++++++++++++++++++++-------------- cmake-format.yaml | 4 ++ cmake/Config.cmake.in | 4 ++ 3 files changed, 116 insertions(+), 52 deletions(-) create mode 100644 cmake/Config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index a90b5977..b7c4b5e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,24 @@ -cmake_minimum_required(VERSION 3.12 FATAL_ERROR) +cmake_minimum_required(VERSION 3.10 FATAL_ERROR) -project(bacnet-stack LANGUAGES C) +project(bacnet-stack VERSION 0.8.6 LANGUAGES C) -option(BACNET_STACK_BUILD_APPS - "build apps" - OFF) +# +# options +# -option(BAC_ROUTING - "enable bac routing" - OFF) +option( + BACNET_STACK_BUILD_APPS + "build apps" + OFF) + +option( + BAC_ROUTING + "enable bac routing" + OFF) + +# +# sources +# set(BACNETSTACK_SRCS ${CMAKE_CURRENT_LIST_DIR}/src/bacnet/abort.c @@ -349,50 +359,66 @@ set(BACNETSTACK_SRCS ${CMAKE_CURRENT_LIST_DIR}/src/bacnet/wpm.h) if(LINUX) - list(APPEND BACNETSTACK_SRCS - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/arcnet.c - # ${CMAKE_CURRENT_LIST_DIR}/ports/linux/bip6.c - # ${CMAKE_CURRENT_LIST_DIR}/ports/linux/rx_fsm.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/bip-init.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/dlmstp.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/dlmstp_linux.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/dlmstp_linux.h - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/ethernet.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/mstpsnap.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/net.h - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/rs485.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/rs485.h - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/timer.c - ${CMAKE_CURRENT_LIST_DIR}/ports/linux/timer.h) + list( + APPEND BACNETSTACK_SRCS + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/arcnet.c + # ${CMAKE_CURRENT_LIST_DIR}/ports/linux/bip6.c + # ${CMAKE_CURRENT_LIST_DIR}/ports/linux/rx_fsm.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/bip-init.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/dlmstp.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/dlmstp_linux.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/dlmstp_linux.h + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/ethernet.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/mstpsnap.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/net.h + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/rs485.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/rs485.h + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/timer.c + ${CMAKE_CURRENT_LIST_DIR}/ports/linux/timer.h) elseif(WIN32) - list(APPEND BACNETSTACK_SRCS - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/bacport.h - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/bip6.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/bip-init.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/datetime-init.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/dlmstp.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/dlmstp.cbp - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/dlmstp-mm.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/ethernet.c - # ${CMAKE_CURRENT_LIST_DIR}/ports/win32/main.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/mstimer-init.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rs485.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rs485.h - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rx_fsm.c - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rx_fsm.cbp - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/stdbool.h - ${CMAKE_CURRENT_LIST_DIR}/ports/win32/stdint.h) + list( + APPEND BACNETSTACK_SRCS + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/bacport.h + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/bip6.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/bip-init.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/datetime-init.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/dlmstp.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/dlmstp.cbp + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/dlmstp-mm.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/ethernet.c + # ${CMAKE_CURRENT_LIST_DIR}/ports/win32/main.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/mstimer-init.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rs485.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rs485.h + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rx_fsm.c + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/rx_fsm.cbp + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/stdbool.h + ${CMAKE_CURRENT_LIST_DIR}/ports/win32/stdint.h) endif() +# +# library +# + add_library(${PROJECT_NAME} ${BACNETSTACK_SRCS}) -target_include_directories(${PROJECT_NAME} - PUBLIC $ - $ - $ - $) -target_compile_definitions(${PROJECT_NAME} - PUBLIC - $<$:BAC_ROUTING>) +target_include_directories( + ${PROJECT_NAME} + PUBLIC $ + $ + $ + $) +target_compile_definitions( + ${PROJECT_NAME} + PUBLIC + $<$:BAC_ROUTING>) +add_library( + ${PROJECT_NAME}::${PROJECT_NAME} + ALIAS + ${PROJECT_NAME}) + +# +# examples +# if(BACNET_STACK_BUILD_APPS) message(STATUS "BACNET: compilinng also apps") @@ -464,8 +490,38 @@ if(BACNET_STACK_BUILD_APPS) target_link_libraries(writepropm PRIVATE ${PROJECT_NAME}) endif() -install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/src/bacnet/ DESTINATION include/bacnet FILES_MATCHING PATTERN "*.h") +# +# install +# + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +set(BACNET_STACK_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) install(TARGETS ${PROJECT_NAME} - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib PERMISSIONS WORLD_READ) + EXPORT ${PROJECT_NAME}Targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib) + +install(EXPORT ${PROJECT_NAME}Targets + DESTINATION ${BACNET_STACK_CONFIG_INSTALL_DIR} + NAMESPACE ${PROJECT_NAME}:: + COMPONENT dev) + +configure_package_config_file(cmake/Config.cmake.in + ${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION + ${BACNET_STACK_CONFIG_INSTALL_DIR}) +write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake + COMPATIBILITY SameMajorVersion) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${BACNET_STACK_CONFIG_INSTALL_DIR} + COMPONENT dev) + +install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/src/bacnet + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT dev + FILES_MATCHING + PATTERN "*.h") + diff --git a/cmake-format.yaml b/cmake-format.yaml index 9175af04..7d541e81 100644 --- a/cmake-format.yaml +++ b/cmake-format.yaml @@ -16,3 +16,7 @@ enable_markup: False # If arglists are longer than this, break them always max_subargs_per_line: 1 + +max_pargs_hwrap: 2 + +max_subgroups_hwrap: 2 \ No newline at end of file diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in new file mode 100644 index 00000000..9c15f36a --- /dev/null +++ b/cmake/Config.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@")