# ------------------------------------------------------------------------- # $HeadURL$ # ------------------------------------------------------------------------- #! # ------------------------------------------------------------------------- # COPYRIGHT (C) 2008: RHEINMETALL DEFENCE ELECTRONICS GmbH, D-28305 BREMEN # ------------------------------------------------------------------------- # # HIER/ITEM : CSU: RP 5187 P 0211 SRC 14001 # BRIEF DESC: CMake-Findskript # AUTHOR : RDE / SGS # ORIGIN REF: BWB / Projekt GUEZ-HAS # # Revision INFO: # -------------- # $Revision$ # $Date$ # $Id$ # # LANGUAGE: - # # PURPOSE: # -------- # Suchen der RTI-Library und Setzen der folgenden CMake-Variablen: # RTI_INCLUDE_DIRS - RTI headers location # RTI_LIBRARIES - RTI libraries # RTI_FOUND - TRUE wenn Library gefunden wurde # # RTI_DIR (from environment) SET(_rti_gcc_arch "") IF(NOT RTI_DIR) SET(_arch "unknown") IF(WIN32) SET(_RTI_DIR $ENV{DDS_PATH}) IF(NOT _RTI_DIR) GET_FILENAME_COMPONENT(_rti_root_path "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Real-Time Innovations\\RTI Connext DDS Pro 5.2.3;Location]" ABSOLUTE) SET(_RTI_DIR "${_rti_root_path}") ENDIF() IF(MSVC_VERSION EQUAL 1900) SET(_rti_msvc_ver "VS2015") ELSEIF(MSVC_VERSION GREATER_EQUAL 1910) SET(_rti_msvc_ver "VS2017") ENDIF() IF(CMAKE_SIZEOF_VOID_P EQUAL 8) SET(_rti_msvc_ver "x64Win64${_rti_msvc_ver}") ELSE() SET(_rti_msvc_ver "i86Win32${_rti_msvc_ver}") ENDIF() IF(NOT ${_rti_root_path}) SET(_RTI_DIR $ENV{KDEROOT}) FILE(TO_CMAKE_PATH "${_RTI_DIR}" _RTI_DIR) IF(NOT EXISTS "${_RTI_DIR}" OR NOT IS_DIRECTORY "${_RTI_DIR}") SET(_RTI_DIR $ENV{WORKSPACE}) FILE(TO_CMAKE_PATH "${_RTI_DIR}" _RTI_DIR) ENDIF() IF(NOT EXISTS "${_RTI_DIR}" OR NOT IS_DIRECTORY "${_RTI_DIR}") SET(_RTI_DIR ${EXTERNAL_LIBRARY_DIR}) FILE(TO_CMAKE_PATH "${_RTI_DIR}" _RTI_DIR) ENDIF() ENDIF() SET(_arch "${_rti_msvc_ver}") ELSE(WIN32) SET(_RTI_DIR $ENV{DDS_PATH}) IF(NOT _RTI_DIR) SET(_RTI_DIR "/opt/RTI") ENDIF() IF(NOT EXISTS "${_RTI_DIR}" OR NOT IS_DIRECTORY "${_RTI_DIR}") MESSAGE(FATAL_ERROR "Umgebungsvariable DDS_PATH nicht gesetzt!") ENDIF() SET(_rti_gcc_arch "x64Linux3gcc4.8.2") IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0.0) SET(_rti_gcc_arch "x64Linux3gcc5.4.0") SET(_tmp "${_RTI_DIR}/lib/${_rti_gcc_arch}") IF (NOT EXISTS ${_tmp}) SET(_rti_gcc_arch "x64Linux4gcc7.3.0") ENDIF() ENDIF() ENDIF() SET(_arch "${_rti_gcc_arch}") ENDIF() SET(RTI_DIR "${_RTI_DIR}" CACHE STRING "RTI base path" FORCE) MESSAGE(STATUS "Trying to use RTI from ${RTI_DIR} with arch ${_arch}") ENDIF() IF(WIN32) SET(_rti_include_hint "${RTI_DIR}/include/") SET(_rti_library_hint "${RTI_DIR}/lib/${_rti_msvc_ver}/") ELSE() SET(_rti_include_hint "${RTI_DIR}/include/") SET(_rti_library_hint "${RTI_DIR}/lib/") ENDIF() # RTI include dir IF(NOT RTI_INCLUDE_DIR) FIND_PATH(RTI_INCLUDE_DIR ndds/ndds_cpp.h HINTS ${_rti_include_hint}) IF(RTI_INCLUDE_DIR) SET(RTI_INCLUDE_DIRS "${RTI_INCLUDE_DIR}" "${RTI_INCLUDE_DIR}/ndds" "${RTI_INCLUDE_DIR}/ndds/hpp" CACHE STRING "RTI include directories" FORCE) MARK_AS_ADVANCED(RTI_INCLUDE_DIRS) ELSE() MESSAGE(FATAL "Could not find RTI include directory at ${_rti_include_hint}") ENDIF() ENDIF() # rtiddsgen IF(NOT RTI_DDSGEN_EXECUTABLE) FIND_PROGRAM(RTI_DDSGEN_EXECUTABLE NAMES rtiddsgen rtiddsgen.bat HINTS ${RTI_DIR}/scripts ${RTI_DIR}/bin) ENDIF() IF(NOT RTI_VERSION_MAJOR) EXEC_PROGRAM(${RTI_DDSGEN_EXECUTABLE} ARGS -version OUTPUT_VARIABLE _dds_version_output) STRING(REGEX REPLACE ".* ([0-9]\\.[0-9]\\.[0-9]).*" "\\1" _dds_version_output ${_dds_version_output}) SET(_rti_version_major 5) IF(_dds_version_output VERSION_GREATER 2.9.9) SET(_rti_version_major 6) ENDIF() SET(RTI_VERSION_MAJOR ${_rti_version_major} CACHE STRING "RTI version" FORCE) ENDIF() INCLUDE(FindLibraryWithDebug) INCLUDE(FindPackageHandleStandardArgs) # rti libraries SET(_RTI_LIBS nddscore nddsc nddscpp2 rtiroutingservice) SET(_libs "") SET(_lib_vars "") FOREACH(_lib ${_RTI_LIBS}) SET(_libname "RTI_${_lib}_LIBRARY") IF (NOT ${_libname}) FIND_LIBRARY_WITH_DEBUG("${_libname}" WIN32_DEBUG_POSTFIX d NAMES ${_lib} HINTS ${_rti_library_hint} ${RTI_DIR}/lib ${RTI_DIR}/lib/${_rti_gcc_arch}) ENDIF() SET(_tgt_name RTI::${_lib}) IF(NOT TARGET ${_tgt_name}) ADD_LIBRARY(${_tgt_name} UNKNOWN IMPORTED) SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIRS}") SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIRS}") IF(UNIX) SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_COMPILE_DEFINITIONS "RTI_UNIX;RTI_LINUX;RTI_64BIT" ) ENDIF() IF(WIN32) IF("${_lib}" STREQUAL "rtiroutingservice") SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_COMPILE_DEFINITIONS "RTI_WIN32;RTI_routingservice_DLL_VARIABLE" ) ELSE() SET_PROPERTY(TARGET ${_tgt_name} PROPERTY INTERFACE_COMPILE_DEFINITIONS "RTI_WIN32;NDDS_DLL_VARIABLE" ) ENDIF() ENDIF() IF(${_libname}_RELEASE) SET_PROPERTY(TARGET ${_tgt_name} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) SET_PROPERTY(TARGET ${_tgt_name} PROPERTY IMPORTED_LOCATION_RELEASE "${${_libname}_RELEASE}") ENDIF() IF(${_libname}_DEBUG) SET_PROPERTY(TARGET ${_tgt_name} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) SET_PROPERTY(TARGET ${_tgt_name} PROPERTY IMPORTED_LOCATION_DEBUG "${${_libname}_DEBUG}") ENDIF() IF(NOT ${_libname}_RELEASE AND NOT ${_libname}_DEBUG) SET_PROPERTY(TARGET ${_tgt_name} PROPERTY IMPORTED_LOCATION "${${_libname}}") ENDIF() ENDIF() LIST(APPEND _libs "${${_libname}}") LIST(APPEND _lib_vars "${_libname}") ENDFOREACH() # does not link against dl on unix IF(TARGET RTI::nddscore AND UNIX) SET_PROPERTY(TARGET RTI::nddscore PROPERTY INTERFACE_LINK_LIBRARIES "dl" ) ENDIF() SET(RTI_LIBRARIES ${_libs} CACHE STRING "All rti libraries" FORCE) MARK_AS_ADVANCED(RTI_LIBRARIES) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTI DEFAULT_MSG RTI_DIR RTI_INCLUDE_DIR RTI_DDSGEN_EXECUTABLE ${_lib_vars})