From 73cb6cd8b6ae7425b380586d8b037aba834ca7a1 Mon Sep 17 00:00:00 2001
From: Hauke Moenck <hauke_moenck@gmx.de>
Date: Fri, 19 Oct 2018 13:48:45 +0200
Subject: [PATCH] Created Cmake

---
 .gitignore                                    |  5 +-
 CMakeLists.txt                                | 82 +++++++++++++++++++
 Src/CMakeLists.txt                            | 72 ++++++++++++++++
 ....cmake.in => BT_InterfacesConfig.cmake.in} |  0
 4 files changed, 155 insertions(+), 4 deletions(-)
 create mode 100644 CMakeLists.txt
 create mode 100644 Src/CMakeLists.txt
 rename cmake/{InterfacesConfig.cmake.in => BT_InterfacesConfig.cmake.in} (100%)

diff --git a/.gitignore b/.gitignore
index 76b9674..5a50ff8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,7 +14,4 @@ CMakeCache.txt
 *.qm
 *.ilk
 *.pdb
-*.lib
-*.json
-*.txt
-*.xml
\ No newline at end of file
+*.lib
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..1e8bac5
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,82 @@
+cmake_minimum_required(VERSION 3.12)
+
+exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "describe --tags --abbrev=0" OUTPUT_VARIABLE GIT_TAG)
+
+project(BT_Interfaces
+    VERSION ${GIT_TAG}
+    LANGUAGES CXX)
+
+include(GNUInstallDirs)
+
+set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables")
+set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
+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_Interfaces)
+add_library(${TN} SHARED)
+set_target_properties(${TN} PROPERTIES OUTPUT_NAME bt_interfaces)
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+  set_target_properties(${TN} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true)
+endif()
+ 
+include(Src/CMakeLists.txt)
+
+install(
+    TARGETS
+        BT_Interfaces
+    EXPORT
+        ${PROJECT_NAME}Targets
+    RUNTIME DESTINATION "${INSTALL_BINDIR}"
+    LIBRARY DESTINATION "${INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${INSTALL_LIBDIR}"
+)
+foreach(file ${BT_Interfaces_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()
+
+export(
+    TARGETS
+        BT_Interfaces
+    FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake"
+)
+
+install(EXPORT ${PROJECT_NAME}Targets
+    FILE ${PROJECT_NAME}Targets.cmake
+    DESTINATION ${INSTALL_CONFIGDIR}
+)
+
+include(CMakePackageConfigHelpers)
+
+write_basic_package_version_file(
+    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+    VERSION ${PROJECT_VERSION}
+    COMPATIBILITY AnyNewerVersion
+)
+
+configure_package_config_file(
+    ${CMAKE_CURRENT_LIST_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+    INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
+)
+
+install(
+    FILES
+        ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+        ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+    DESTINATION ${INSTALL_CONFIGDIR}
+)
+
+install(
+    FILES
+        ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Deploy.cmake
+        ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Windeployqt.cmake
+    DESTINATION ${INSTALL_CONFIGDIR}/Modules/${PROJECT_NAME}
+)
+
+set(CPACK_GENERATOR "TXZ")
+set(CPACK_PACKAGE_VERSION ${GIT_TAG})
+
+include(CPack)
diff --git a/Src/CMakeLists.txt b/Src/CMakeLists.txt
new file mode 100644
index 0000000..b0570a3
--- /dev/null
+++ b/Src/CMakeLists.txt
@@ -0,0 +1,72 @@
+##############################################################
+#### Biotracker: Interfaces
+##############################################################
+
+target_include_directories(${TN} PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
+    $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
+)
+
+find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets OpenGL Xml Network)
+target_link_libraries(${TN}  Qt5::Core Qt5::Gui Qt5::Xml Qt5::Network Qt5::Widgets)
+
+find_package(OpenCV 3 REQUIRED)
+target_link_libraries(${TN} ${OpenCV_LIBS})
+
+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
+    CXX_STANDARD 17
+    CXX_STANDARD_REQUIRED YES
+    CXX_EXTENSIONS NO
+)
+
+target_compile_definitions(${TN} PRIVATE RF_INTERFACES_EXPORT)
+
+target_sources(${TN}
+PRIVATE
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerContext.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerPlugin.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IController/IController.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModel.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelAreaDescriptor.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelDataExporter.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponent.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponentFactory.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedTrajectory.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackingAlgorithm.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IObject.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/Serializable.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IView.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsPixmapItem.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsScene.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsView.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewMainWindow.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewOpenGLWidget.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewTrackedComponent.cpp"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewWidget.cpp"
+)
+
+set(${TN}_PUBLIC_HEADERS
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/ENUMS.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerContext.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IBioTrackerPlugin.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IController/IController.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModel.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelAreaDescriptor.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelDataExporter.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponent.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedComponentFactory.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackedTrajectory.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IModelTrackingAlgorithm.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/IObject.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IModel/Serializable.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IView.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsPixmapItem.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsScene.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewGraphicsView.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewMainWindow.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewOpenGLWidget.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewTrackedComponent.h"
+    "${CMAKE_CURRENT_LIST_DIR}/Interfaces/IView/IViewWidget.h"
+)
diff --git a/cmake/InterfacesConfig.cmake.in b/cmake/BT_InterfacesConfig.cmake.in
similarity index 100%
rename from cmake/InterfacesConfig.cmake.in
rename to cmake/BT_InterfacesConfig.cmake.in
-- 
GitLab