diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e319bae7c8118c47006be4b0103b34dc95c9b97..f84b2083b1dba94b4ed1a4a93a45da140e09c31b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,8 @@ -cmake_minimum_required(VERSION 3.12) +cmake_minimum_required(VERSION 3.13) exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "describe --abbrev=0 --tags" OUTPUT_VARIABLE GIT_TAG) -cmake_policy (SET CMP0020 NEW) - -project(BT_Utility +project(biotracker-utility VERSION ${GIT_TAG} LANGUAGES CXX) @@ -15,28 +13,14 @@ set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory fo set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} CACHE PATH "Installation directory for header files") set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} CACHE STRING "Installation directory for cmake configuration files") -set(TN BT_Utility) -add_library(${TN} STATIC) -set_target_properties(${TN} PROPERTIES OUTPUT_NAME bt_utility) -include(Src/CMakeLists.txt) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) +include(Headers) -install( - TARGETS - BT_Utility - EXPORT - ${PROJECT_NAME}Targets - RUNTIME DESTINATION "${INSTALL_BINDIR}" - ARCHIVE DESTINATION "${INSTALL_LIBDIR}" -) -foreach(file ${BT_Utility_PUBLIC_HEADERS}) - file(RELATIVE_PATH rel_path "${CMAKE_CURRENT_LIST_DIR}/Src" ${file}) - get_filename_component(install_path ${rel_path} DIRECTORY) - install(FILES ${file} DESTINATION "${INSTALL_INCLUDEDIR}/${install_path}") -endforeach() +add_subdirectory(Src) export( TARGETS - BT_Utility + ${PROJECT_NAME} FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake" ) diff --git a/Src/CMakeLists.txt b/Src/CMakeLists.txt index 53167ff20edaf21a8a1f00089ce78609af037784..29e08b914594cbb54b8c858702eaabe2681461c5 100644 --- a/Src/CMakeLists.txt +++ b/Src/CMakeLists.txt @@ -1,46 +1,57 @@ ############################################################## #### Biotracker: Utility ############################################################## +set(target ${PROJECT_NAME}) +add_library(${target} STATIC) -target_include_directories(${TN} PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}> - $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}> -) +find_package(biotracker-interfaces 0.2 REQUIRED) +target_link_libraries(${target} biotracker-interfaces) -find_package(BT_Interfaces 0.1 REQUIRED) -target_link_libraries(${TN} BT_Interfaces) - -find_package(Qt5 REQUIRED COMPONENTS Core Gui Xml Network Widgets) -target_link_libraries (${TN} Qt5::Core Qt5::Gui Qt5::Xml Qt5::Network Qt5::Widgets) find_package(Boost REQUIRED system filesystem chrono timer) -target_link_libraries(${TN} +target_link_libraries(${target} ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_CHRONO_LIBRARY} ${Boost_TIMER_LIBRARY} ) -set_target_properties(${TN} PROPERTIES POSITION_INDEPENDENT_CODE ON) -set_target_properties(${TN} PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON) -set_target_properties(${TN} PROPERTIES +install( + TARGETS + ${PROJECT_NAME} + EXPORT + ${PROJECT_NAME}Targets + RUNTIME DESTINATION "${INSTALL_BINDIR}" + ARCHIVE DESTINATION "${INSTALL_LIBDIR}" +) + +target_include_directories(${target} PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}> + $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}> +) + +set_target_properties(${target} PROPERTIES POSITION_INDEPENDENT_CODE ON) +set_target_properties(${target} PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON) +set_target_properties(${target} PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) -target_sources(${TN} +target_sources(${target} PRIVATE - "${CMAKE_CURRENT_LIST_DIR}/Utility/TrackedComponents/TrackedComponentFactory.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Utility/TrackedComponents/TrackedElement.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Utility/TrackedComponents/TrackedTrajectory.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Utility/misc.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Utility/IConfig.cpp" + "Utility/TrackedComponents/TrackedComponentFactory.cpp" + "Utility/TrackedComponents/TrackedElement.cpp" + "Utility/TrackedComponents/TrackedTrajectory.cpp" + "Utility/misc.cpp" + "Utility/IConfig.cpp" ) -set(${TN}_PUBLIC_HEADERS - "${CMAKE_CURRENT_LIST_DIR}/Utility/TrackedComponents/TrackedComponentFactory.h" - "${CMAKE_CURRENT_LIST_DIR}/Utility/TrackedComponents/TrackedElement.h" - "${CMAKE_CURRENT_LIST_DIR}/Utility/TrackedComponents/TrackedTrajectory.h" - "${CMAKE_CURRENT_LIST_DIR}/Utility/misc.h" - "${CMAKE_CURRENT_LIST_DIR}/Utility/IConfig.h" +install_headers( + HEADERS + "Utility/TrackedComponents/TrackedComponentFactory.h" + "Utility/TrackedComponents/TrackedElement.h" + "Utility/TrackedComponents/TrackedTrajectory.h" + "Utility/misc.h" + "Utility/IConfig.h" + DESTINATION "${INSTALL_INCLUDEDIR}" ) \ No newline at end of file diff --git a/cmake/Headers.cmake b/cmake/Headers.cmake new file mode 100644 index 0000000000000000000000000000000000000000..5e3dfec50ae4139c5a2ff075793add0d6563c160 --- /dev/null +++ b/cmake/Headers.cmake @@ -0,0 +1,8 @@ +function(install_headers) + cmake_parse_arguments(ARGS "" "DESTINATION" "HEADERS" ${ARGN}) + + foreach(file ${ARGS_HEADERS}) + get_filename_component(install_path ${file} DIRECTORY) + install(FILES ${file} DESTINATION "${ARGS_DESTINATION}/${install_path}") + endforeach() +endfunction() diff --git a/cmake/TrackerPlugin.cmake b/cmake/TrackerPlugin.cmake index c04591b0540fa8db3a546bbd4b6bf5f5f4ad98d8..e8e2178a994d66288b20c73d9f096108f5c7dc41 100644 --- a/cmake/TrackerPlugin.cmake +++ b/cmake/TrackerPlugin.cmake @@ -1,28 +1,31 @@ -exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "log --pretty=format:%h -n 1" OUTPUT_VARIABLE CURRENT_GIT_HASH) +function(add_behavior_plugin target) -add_definitions(-DCURRENT_GIT_HASH="${CURRENT_GIT_HASH}") + exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "log --pretty=format:%h -n 1" OUTPUT_VARIABLE GIT_HASH) -if("$ENV{USERNAME}" STREQUAL "ContainerAdministrator") - # Note: This is a workaround for Qt5's "moc" in Windows Docker getting - # "System cannot find the file" errors when trying to read - # files generated by "configure_file" in conventional directories. - set(METADATA_DIR "$ENV{TMP}/${TN}") -else() - set(METADATA_DIR "${CMAKE_CURRENT_BINARY_DIR}") -endif() + if("$ENV{USERNAME}" STREQUAL "ContainerAdministrator") + # Note: This is a workaround for Qt5's "moc" in Windows Docker getting + # "System cannot find the file" errors when trying to read + # files generated by "configure_file" in conventional directories. + set(METADATA_DIR "$ENV{TMP}/${target}") + else() + set(METADATA_DIR "${CMAKE_CURRENT_BINARY_DIR}") + endif() -add_library (${TN} MODULE) + add_library (${target} MODULE ${ARGN}) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/plugin.json.in ${METADATA_DIR}/plugin.json) -target_include_directories(${TN} PRIVATE ${METADATA_DIR}) + target_compile_definitions(${target} PRIVATE CURRENT_GIT_HASH="${GIT_HASH}") -set_target_properties(${TN} PROPERTIES PREFIX "") -set_target_properties(${TN} PROPERTIES OUTPUT_NAME ${TN}) -set_target_properties(${TN} PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON) -set_target_properties(${TN} PROPERTIES - CXX_STANDARD 17 - CXX_STANDARD_REQUIRED YES - CXX_EXTENSIONS NO -) - -target_link_libraries (${TN} BT_Utility) \ No newline at end of file + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/plugin.json.in ${METADATA_DIR}/plugin.json) + target_include_directories(${target} PRIVATE ${METADATA_DIR}) + + set_target_properties(${target} PROPERTIES PREFIX "") + set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}) + set_target_properties(${target} PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON) + set_target_properties(${target} PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO + ) + + target_link_libraries (${target} biotracker-utility) +endfunction() diff --git a/cmake/BT_UtilityConfig.cmake.in b/cmake/biotracker-utilityConfig.cmake.in similarity index 57% rename from cmake/BT_UtilityConfig.cmake.in rename to cmake/biotracker-utilityConfig.cmake.in index 036377b7de3a3132ae2f1eddcb433dfb9e2e0b89..f1752c32fcf786c9bbe059638d905641043aefa7 100644 --- a/cmake/BT_UtilityConfig.cmake.in +++ b/cmake/biotracker-utilityConfig.cmake.in @@ -1,8 +1,6 @@ @PACKAGE_INIT@ -find_package(BT_Interfaces 0.1 REQUIRED) - -find_package(Qt5 REQUIRED COMPONENTS Core Gui Xml Network Widgets) +find_package(biotracker-interfaces 0.2 REQUIRED) include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake) diff --git a/version.txt b/version.txt new file mode 100644 index 0000000000000000000000000000000000000000..341cf11faf9a29504168de4e54beaad182c5adc5 --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +0.2.0 \ No newline at end of file