From 39150b6801dd47e827e770b848d3ffd9d247e8e1 Mon Sep 17 00:00:00 2001
From: Hauke Moenck <hauke_moenck@gmx.de>
Date: Wed, 19 Dec 2018 11:03:43 +0100
Subject: [PATCH] Updated naming scheme, toolchain and versioning

Signed-off-by: Hauke Moenck <hauke_moenck@gmx.de>
---
 CMakeLists.txt                                | 28 ++-------
 Src/CMakeLists.txt                            | 61 +++++++++++--------
 cmake/Headers.cmake                           |  8 +++
 cmake/TrackerPlugin.cmake                     | 49 ++++++++-------
 ...e.in => biotracker-utilityConfig.cmake.in} |  4 +-
 version.txt                                   |  1 +
 6 files changed, 78 insertions(+), 73 deletions(-)
 create mode 100644 cmake/Headers.cmake
 rename cmake/{BT_UtilityConfig.cmake.in => biotracker-utilityConfig.cmake.in} (57%)
 create mode 100644 version.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e319ba..f84b208 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 53167ff..29e08b9 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 0000000..5e3dfec
--- /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 c04591b..e8e2178 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 036377b..f1752c3 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 0000000..341cf11
--- /dev/null
+++ b/version.txt
@@ -0,0 +1 @@
+0.2.0
\ No newline at end of file
-- 
GitLab