Replaced deprecated qAsConst usages in built modules and updated QMouseEvent::localPos() to position() per Qt6 deprecation guidance.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
341 lines
13 KiB
CMake
Executable File
341 lines
13 KiB
CMake
Executable File
#
|
|
# Haupt CMakeLists.txt für das Projekt TDS
|
|
#
|
|
# $Id$
|
|
# $HeadURL$
|
|
# $Author$
|
|
#
|
|
# Setzen von CMAKE_INSTALL_PREFIX auf "/shd/CTC" falls nicht über Kommandozeile angegeben
|
|
#
|
|
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
|
|
IF(POLICY CMP0069)
|
|
CMAKE_POLICY(SET CMP0069 NEW) # cmake >= 3.9.0 - INTERPROCEDURAL_OPTIMIZATION behavior
|
|
ENDIF()
|
|
IF(POLICY CMP0071)
|
|
CMAKE_POLICY(SET CMP0071 NEW) # cmake >= 3.10.0 - automatically process generated sources with AUTOMOC
|
|
ENDIF()
|
|
IF(POLICY CMP0072)
|
|
CMAKE_POLICY(SET CMP0072 NEW) # cmake >= 3.11.0 - prefer libOpenGL.so over legacy libGL.so
|
|
ENDIF()
|
|
|
|
|
|
IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
|
SET(CMAKE_INSTALL_PREFIX "/shd/CTC" CACHE STRING "Install path prefix, prepended onto install directories." FORCE)
|
|
ENDIF()
|
|
#
|
|
# # Setzen von CMAKE_BUILD_TYPE auf "Debug" falls nicht über Kommandozeile angegeben
|
|
#
|
|
IF(NOT DEFINED CMAKE_BUILD_TYPE)
|
|
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
|
ENDIF()
|
|
ADD_DEFINITIONS(-DEXPORT_BDV_TOPIC_AS_JSON)
|
|
SET(_ver "1.2.0")
|
|
IF(DEFINED LTS_VERSION_MAJOR AND DEFINED LTS_VERSION_MINOR AND DEFINED LTS_VERSION_PATCH)
|
|
SET(_ver "${LTS_VERSION_MAJOR}.${LTS_VERSION_MINOR}.${LTS_VERSION_PATCH}")
|
|
ENDIF()
|
|
PROJECT(LTS VERSION ${_ver})
|
|
MESSAGE(STATUS "LTS Version: ${LTS_VERSION_MAJOR}.${LTS_VERSION_MINOR}.${LTS_VERSION_PATCH}")
|
|
SET(LTS_VERSION_DATE "01.01.2018" CACHE STRING "The date when this software was compiled")
|
|
ADD_DEFINITIONS(-DLTS_VERSION_MAJOR=\"${LTS_VERSION_MAJOR}\")
|
|
ADD_DEFINITIONS(-DLTS_VERSION_MINOR=\"${LTS_VERSION_MINOR}\")
|
|
ADD_DEFINITIONS(-DLTS_VERSION_PATCH=\"${LTS_VERSION_PATCH}\")
|
|
ADD_DEFINITIONS(-DLTS_VERSION_DATE=\"${LTS_VERSION_DATE}\")
|
|
IF(JENKINS_BUILD_NUMBER)
|
|
ADD_DEFINITIONS(-DJENKINS_BUILD_NUMBER=\"${JENKINS_BUILD_NUMBER}\")
|
|
ELSE()
|
|
ADD_DEFINITIONS(-DJENKINS_BUILD_NUMBER=\"unknown\")
|
|
ENDIF()
|
|
|
|
ADD_DEFINITIONS(-DAPP6C)
|
|
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
include_directories(${CMAKE_SOURCE_DIR}/include)
|
|
SET(CMAKE_CXX_STANDARD 20)
|
|
SET(CMAKE_CXX_STANDARD_REQUIRED 14)
|
|
SET(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
|
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
IF(CMAKE_VERSION VERSION_GREATER 3.15.9)
|
|
OPTION(USE_UNITY_BUILDS "Use Unity builds to speed up compilation (cmake 3.16 or newer required!)" OFF)
|
|
IF (USE_UNITY_BUILDS)
|
|
SET(CMAKE_UNITY_BUILD ON)
|
|
SET(CMAKE_UNITY_BUILD_BATCH_SIZE 40)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
IF(WIN32)
|
|
SET(EXTERNAL_LIBRARY_DIR "C:/Development/Projekte/SituationMap/ExtFw" CACHE STRING "Library dir with all external dependencies")
|
|
LIST(APPEND CMAKE_PREFIX_PATH "${EXTERNAL_LIBRARY_DIR}")
|
|
LIST(APPEND CMAKE_PROGRAM_PATH "${EXTERNAL_LIBRARY_DIR}/bin;${EXTERNAL_LIBRARY_DIR}/dev-utils/bin")
|
|
ENDIF()
|
|
|
|
ENABLE_TESTING()
|
|
INCLUDE(CTest)
|
|
CONFIGURE_FILE(CTestCustom.ctest ${CMAKE_BINARY_DIR}/CTestCustom.ctest COPYONLY)
|
|
CONFIGURE_FILE(lts-cc.conf ${CMAKE_BINARY_DIR}/lts-cc.conf.distrib COPYONLY)
|
|
|
|
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
|
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
|
|
IF(WIN32)
|
|
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
|
|
ELSE(WIN32)
|
|
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
|
|
ENDIF()
|
|
|
|
#
|
|
# Disallow in-source build
|
|
#
|
|
INCLUDE(MacroEnsureOutOfSourceBuild)
|
|
|
|
macro_ensure_out_of_source_build("In-Source build nicht erlaubt!")
|
|
|
|
#
|
|
# Qt ist wichtig - zuerst suchen
|
|
#
|
|
SET(CMAKE_AUTOMOC TRUE)
|
|
SET(CMAKE_AUTOUIC TRUE)
|
|
SET(QT_USE_IMPORTED_TARGETS TRUE)
|
|
# Prefer Qt6, fallback to Qt5. Create Qt5::*-aliases when Qt6 is found so existing CMakeLists continue to work.
|
|
# Try to detect Qt6 with a minimal check and then create aliases/placeholders for components used across the project.
|
|
# Prefer Qt6, fallback to Qt5. Create Qt5::* aliases only when the corresponding
|
|
# Qt6:: component target exists. Avoid creating IMPORTED placeholder targets which
|
|
# have no LOCATION and later inject 'NOTFOUND' into autogen timestamp deps.
|
|
# Find minimal Qt6 Core first, then probe for other components (non-fatal).
|
|
find_package(Qt6 6.8 COMPONENTS Core QUIET)
|
|
if(Qt6_FOUND)
|
|
message(STATUS "Found Qt6: ${Qt6Core_VERSION}")
|
|
set(_qlist Concurrent Core Gui Location LinguistTools Network OpenGL PrintSupport
|
|
Sensors Multimedia Sql Svg SerialPort Test UiTools WebSockets WebEngineCore WebEngineWidgets
|
|
Widgets Xml XmlPatterns)
|
|
foreach(_comp ${_qlist})
|
|
# Probe for each component (non-fatal). If found, create a Qt5:: alias.
|
|
find_package(Qt6 COMPONENTS ${_comp} QUIET)
|
|
if(TARGET "Qt6::${_comp}")
|
|
add_library("Qt5::${_comp}" ALIAS "Qt6::${_comp}")
|
|
endif()
|
|
endforeach()
|
|
# Map version variable for compatibility if available
|
|
if(Qt6Core_VERSION)
|
|
set(Qt5Core_VERSION ${Qt6Core_VERSION} CACHE INTERNAL "Compatibility Qt5Core_VERSION mapped from Qt6")
|
|
endif()
|
|
# Find rcc/lrelease programs as compatibility fallbacks
|
|
find_program(_rcc_exec rcc-qt6 rcc)
|
|
if(_rcc_exec)
|
|
set(Qt5Core_RCC_EXECUTABLE ${_rcc_exec} CACHE INTERNAL "Compatibility rcc executable")
|
|
endif()
|
|
find_program(_lrelease_exec lrelease-qt6 lrelease)
|
|
if(_lrelease_exec)
|
|
set(Qt5_LRELEASE_EXECUTABLE ${_lrelease_exec} CACHE INTERNAL "Compatibility lrelease executable")
|
|
if(TARGET Qt6::LinguistTools AND NOT TARGET Qt5::lrelease)
|
|
add_executable(Qt5::lrelease IMPORTED)
|
|
set_target_properties(Qt5::lrelease PROPERTIES IMPORTED_LOCATION ${Qt5_LRELEASE_EXECUTABLE})
|
|
endif()
|
|
endif()
|
|
else()
|
|
FIND_PACKAGE(Qt5 5.9.0 COMPONENTS Concurrent Core Gui Location LinguistTools
|
|
Network OpenGL PrintSupport Sensors Multimedia
|
|
Sql Svg SerialPort Test UiTools WebSockets
|
|
WebEngineCore WebEngineWidgets Widgets
|
|
Xml XmlPatterns
|
|
REQUIRED)
|
|
MESSAGE(STATUS "Qt version is ${Qt5Core_VERSION}")
|
|
endif()
|
|
|
|
MESSAGE(STATUS "Qt version is ${Qt5Core_VERSION}")
|
|
ADD_DEFINITIONS(-DQT_USE_QSTRINGBUILDER)
|
|
ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII)
|
|
ADD_DEFINITIONS(-DQT_NO_CAST_FROM_ASCII)
|
|
ADD_DEFINITIONS(-DQT_NO_URL_CAST_FROM_STRING)
|
|
ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS)
|
|
ADD_DEFINITIONS(-DQT_NO_CAST_FROM_BYTEARRAY)
|
|
#ADD_DEFINITIONS(-DQT_NO_DEPRECATED)
|
|
ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE=0x050900)
|
|
ADD_DEFINITIONS(-DQT_NO_FOREACH)
|
|
IF(NOT WIN32)
|
|
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
|
|
ENDIF()
|
|
|
|
#
|
|
# Ein paar NGL-spezifische Macros
|
|
#
|
|
INCLUDE(NGLMacros)
|
|
|
|
#
|
|
# Projektspezifische Einstellungen?
|
|
#
|
|
NGL_INSTALL(SV AAR WS FILES lts-cc.conf DESTINATION . RENAME lts-cc.conf.distrib)
|
|
|
|
OPTION(ETS_MODE "Build for ETS (No B-Contamination etc)" OFF)
|
|
IF(ETS_MODE)
|
|
ADD_DEFINITIONS(-DETS_MODE)
|
|
ENDIF()
|
|
OPTION(TABLET_MODE "Build for TABLET " OFF)
|
|
IF(TABLET_MODE)
|
|
ADD_DEFINITIONS(-DTABLET_MODE)
|
|
ENDIF()
|
|
|
|
OPTION(GUEZ_MODE "Build for GUEZ " ON)
|
|
IF(GUEZ_MODE)
|
|
ADD_DEFINITIONS(-DGUEZ_MODE)
|
|
ENDIF()
|
|
|
|
#
|
|
# Doxygen
|
|
#
|
|
INCLUDE(DoxygenMacros)
|
|
IF(NOT DOXYGEN_OUT_DIR)
|
|
SET(DOXYGEN_OUT_DIR ${CMAKE_BINARY_DIR}/doxygen)
|
|
ENDIF()
|
|
ADD_DOXYGEN_TARGET(TDS ${CMAKE_SOURCE_DIR}/doxygen/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile
|
|
${CMAKE_SOURCE_DIR}/doxygen/rheinmetall_defence_logo.jpg
|
|
${DOXYGEN_OUT_DIR})
|
|
|
|
IF(NOT DOXYGEN_OUT_DIR_2025)
|
|
SET(DOXYGEN_OUT_DIR_2025 ${CMAKE_BINARY_DIR}/doxygen2025)
|
|
ENDIF()
|
|
ADD_DOXYGEN_TARGET(TDS2025 ${CMAKE_SOURCE_DIR}/doxygen/Doxyfile2025.in ${CMAKE_BINARY_DIR}/Doxyfile
|
|
${CMAKE_SOURCE_DIR}/doxygen/rheinmetall_defence_logo.jpg
|
|
${DOXYGEN_OUT_DIR_2025})
|
|
|
|
#
|
|
# Compilerflags
|
|
#
|
|
IF(WIN32)
|
|
ADD_DEFINITIONS(-DWIN32 -D_USE_MATH_DEFINES -D_WIN32_WINNT=0x0501 -DUNICODE)
|
|
ELSE()
|
|
ADD_DEFINITIONS(-D_LINUX)
|
|
ENDIF()
|
|
|
|
IF(MSVC)
|
|
# C4250: 'class1' : inherits 'class2::member' via dominance
|
|
# C4251: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
|
|
# C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
|
|
# C4496: 'function': was declared deprecated
|
|
# C4267: 'var' : conversion from 'size_t' to 'type', possible loss of data
|
|
ADD_DEFINITIONS(-wd4250
|
|
-wd4251
|
|
-wd4290
|
|
-wd4496
|
|
-wd4267
|
|
-D_CRT_SECURE_NO_DEPRECATE
|
|
-D_CRT_NONSTDC_NO_DEPRECATE
|
|
-D_SCL_SECURE_NO_WARNINGS
|
|
-D_WINSOCK_DEPRECATED_NO_WARNINGS
|
|
/bigobj
|
|
)
|
|
# komplette Programmoptimierung
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
# .pdb - Datei nicht gefunden
|
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /IGNORE:4099")
|
|
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4099")
|
|
# min() und max() nicht als Macros
|
|
ADD_DEFINITIONS(-DNOMINMAX)
|
|
SET(CMAKE_MSVCIDE_RUN_PATH "" CACHE PATH "Run path to use when starting programs from MSVC")
|
|
ENDIF()
|
|
|
|
IF(UNIX)
|
|
# Alle Warnungen aktivieren
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wmissing-include-dirs")
|
|
# disable
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-overloaded-virtual")
|
|
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
IF(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.0)
|
|
MESSAGE(FATAL_ERROR "gcc 4.8 or higher is required to build TDS: ${CMAKE_CXX_COMPILER_VERSION}")
|
|
ENDIF()
|
|
IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9.99)
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing")
|
|
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-attribute=const")
|
|
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-final-types")
|
|
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-final-methods")
|
|
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override")
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
OPTION(USE_IPO "Use interprocedural optimizations (cmake 3.9 or higher required)" OFF)
|
|
IF (USE_IPO AND CMAKE_VERSION VERSION_GREATER 3.8.9)
|
|
INCLUDE(CheckIPOSupported)
|
|
check_ipo_supported(RESULT result OUTPUT output)
|
|
IF(result)
|
|
SET(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
ELSE()
|
|
MESSAGE(WARNING "IPO is not supported: ${output}")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
OPTION(USE_ASAN "Use Address Sanitizer (current Clang only)" OFF)
|
|
IF (USE_ASAN)
|
|
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
MESSAGE(STATUS "enable Address Sanitizer with Clang (is: ${CMAKE_CXX_COMPILER_ID})")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer -g -O1")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer -g -O1")
|
|
ELSE()
|
|
MESSAGE(STATUS "Address Sanitizer only supported with Clang (is: ${CMAKE_CXX_COMPILER_ID})")
|
|
ENDIF()
|
|
ENDIF(USE_ASAN)
|
|
|
|
OPTION(USE_UBSAN "Use UndefinedBehavior Sanitizer (current Clang only)" OFF)
|
|
IF (USE_UBSAN)
|
|
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
|
ELSE()
|
|
MESSAGE(STATUS "UndefinedBehavior only supported with Clang (is: ${CMAKE_CXX_COMPILER_ID})")
|
|
ENDIF()
|
|
ENDIF(USE_UBSAN)
|
|
|
|
OPTION(BUILD_RPM "Build a RPM - install script in scripts subdir" OFF)
|
|
|
|
IF(BUILD_RPM)
|
|
ADD_SUBDIRECTORY(scripts)
|
|
ELSE()
|
|
ADD_DEFINITIONS(-DLTS_DEBUG)
|
|
ENDIF()
|
|
|
|
IF (NOT DEFINED _pname)
|
|
IF(GUEZ_MODE)
|
|
SET (_pname "guez")
|
|
ADD_DEFINITIONS(-DPROJECTBUILD="guez")
|
|
MESSAGE(STATUS "NO ProjectName givin! BUT GUEZ_MODE set PROJECTBUILD to guez")
|
|
ELSE()
|
|
MESSAGE(WARNING "NO ProjectName givin! Can't install coresponding lts-cc.conf! and PROJECTBUILD is empty")
|
|
ADD_DEFINITIONS(-DPROJECTBUILD="")
|
|
ENDIF()
|
|
ELSE()
|
|
MESSAGE(STATUS "ProjectName givin! PROJECTBUILD is ${_pname} ")
|
|
ADD_DEFINITIONS(-DPROJECTBUILD=\"${_pname}\")
|
|
ENDIF()
|
|
|
|
|
|
#
|
|
# DDS benoetigt zwingend RTI
|
|
#
|
|
FIND_PACKAGE(RTI QUIET)
|
|
if(NOT RTI_FOUND)
|
|
message(WARNING "RTI not found; creating placeholder RTI::* imported targets to allow configure without RTI installation")
|
|
set(_rti_libs nddscore nddsc nddscpp2 rtiroutingservice)
|
|
foreach(_lib ${_rti_libs})
|
|
if(NOT TARGET RTI::${_lib})
|
|
add_library(RTI::${_lib} UNKNOWN IMPORTED)
|
|
set_property(TARGET RTI::${_lib} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "")
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
ADD_SUBDIRECTORY(TetraIF)
|
|
ADD_SUBDIRECTORY(Z/src)
|
|
ADD_SUBDIRECTORY(Lts)
|
|
# at last, to make sure we get all targets in NGL_TS_TARGETS property
|
|
ADD_SUBDIRECTORY(translations)
|
|
#-----------------------------------------------------------------------------------------------------
|
|
|
|
|
|
OPTION(BUILD_QAV "Build script for local QAV analysis" OFF)
|
|
IF (BUILD_QAV)
|
|
ADD_SUBDIRECTORY(qav)
|
|
ENDIF()
|