Files
CMake/Modules/FindRTI.cmake
Peter Kokot 1526655507 Find*: Add intro code blocks
- Added intro code blocks showing how to use find modules.
- Synced modules documentation.
- Extended few examples to make the intro code blocks fit into the
  modules descriptions.
- Synced some RST formatting, variables descriptions and positions.
- Removed few redundant internal comments.

Issue: #26555
2025-08-04 21:26:12 +02:00

135 lines
4.1 KiB
CMake

# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindRTI
-------
Finds HLA RTI standard libraries and their include directories:
.. code-block:: cmake
find_package(RTI [...])
`RTI <https://en.wikipedia.org/wiki/Run-time_infrastructure_(simulation)>`_
(Run-Time Infrastructure) is a simulation infrastructure standardized by IEEE
and SISO, required when implementing HLA (High Level Architecture). It provides
a well-defined C++ API, ensuring that M&S (Modeling and Simulation) applications
remain independent of a particular RTI implementation.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
``RTI_FOUND``
Boolean indicating whether HLA RTI is found.
``RTI_LIBRARIES``
The libraries to link against to use RTI.
``RTI_DEFINITIONS``
Compile definitions for using RTI. Default value is set to
``-DRTI_USES_STD_FSTREAM``.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``RTI_INCLUDE_DIR``
Directory where RTI include files are found.
Examples
^^^^^^^^
Finding RTI and creating an imported interface target for linking it to a
project target:
.. code-block:: cmake
find_package(RTI)
if(RTI_FOUND AND NOT TARGET RTI::RTI)
add_library(RTI::RTI INTERFACE IMPORTED)
set_target_properties(
RTI::RTI
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${RTI_LIBRARIES}"
INTERFACE_COMPILE_DEFINITIONS "${RTI_DEFINITIONS}"
)
endif()
target_link_libraries(example PRIVATE RTI::RTI)
#]=======================================================================]
macro(RTI_MESSAGE_QUIETLY QUIET TYPE MSG)
if(NOT ${QUIET})
message(${TYPE} "${MSG}")
endif()
endmacro()
set(RTI_DEFINITIONS "-DRTI_USES_STD_FSTREAM")
# noqa: spellcheck off
# Detect the CERTI installation:
# - https://www.nongnu.org/certi/
# - Mailing list for reporting issues and development discussions:
# <certi-devel@nongnu.org>
# Detect the MAK Technologies RTI installation:
# - https://www.mak.com/mak-one/tools/mak-rti
# note: the following list is ordered to find the most recent version first
set(RTI_POSSIBLE_DIRS
ENV CERTI_HOME
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MAK Technologies\\MAK RTI 3.2 MSVC++ 8.0;Location]"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MAK RTI 3.2-win32-msvc++8.0;InstallLocation]"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MAK Technologies\\MAK RTI 2.2;Location]"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MAK RTI 2.2;InstallLocation]")
set(RTI_OLD_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
# The MAK RTI has the "lib" prefix even on Windows.
set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
# noqa: spellcheck on
find_library(RTI_LIBRARY
NAMES RTI RTI-NG
PATHS ${RTI_POSSIBLE_DIRS}
PATH_SUFFIXES lib
DOC "The RTI Library")
if (RTI_LIBRARY)
set(RTI_LIBRARIES ${RTI_LIBRARY})
RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI library found: ${RTI_LIBRARY}")
else ()
RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI library NOT found")
endif ()
find_library(RTI_FEDTIME_LIBRARY
NAMES FedTime
PATHS ${RTI_POSSIBLE_DIRS}
PATH_SUFFIXES lib
DOC "The FedTime Library")
if (RTI_FEDTIME_LIBRARY)
set(RTI_LIBRARIES ${RTI_LIBRARIES} ${RTI_FEDTIME_LIBRARY})
RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI FedTime found: ${RTI_FEDTIME_LIBRARY}")
endif ()
find_path(RTI_INCLUDE_DIR
NAMES RTI.hh
PATHS ${RTI_POSSIBLE_DIRS}
PATH_SUFFIXES include
DOC "The RTI Include Files")
if (RTI_INCLUDE_DIR)
RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI headers found: ${RTI_INCLUDE_DIR}")
else ()
RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI headers NOT found")
endif ()
# Set the modified system variables back to the original value.
set(CMAKE_FIND_LIBRARY_PREFIXES "${RTI_OLD_FIND_LIBRARY_PREFIXES}")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(RTI DEFAULT_MSG
RTI_LIBRARY RTI_INCLUDE_DIR)