Files
qt6-migration-pipeline/external/rti_connext_dds-7.7.0/resource/cmake/ConnextDdsImportedTargets.cmake
T
torstenandCopilot 342ffd3e5c Update submodule to latest BUILD_RTI fixes
- HandlerMinelayerData: BUILD_RTI Guards für RTI-Abhängigkeiten
- svcTabCommon: Export-Header-Fix via Fallback-Target
- TrainingAreaBase: Stub-Header für BUILD_RTI=OFF
- ddsfts: Include-Pfad und Dependency-Fixes
- BUILD_RTI=OFF Compilation vollständig unterstützt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0JNZA586SACX1PRZ2DJAE5S
2026-08-21 19:30:20 +02:00

229 lines
7.8 KiB
CMake

# (c) 2018 Copyright, Real-Time Innovations, Inc. All rights reserved.
# No duplications, whole or partial, manual or electronic, may be made
# without express written permission. Any such copies, or revisions thereof,
# must display this notice unaltered.
# This code contains trade secrets of Real-Time Innovations, Inc.
#[[.rst:
.. _connextdds_create_imported_target:
Imported targets
----------------
::
connextdds_create_imported_target(
TARGET name
BASENAME name
STATIC|SHARED|UNKNOWN|INTERFACE
LANGUAGES lang1 [...]
CPE cpe_string
LICENSE license_name
PURL purl_string
[INCLUDE_DIRS ...]
[COMPILE_DEFINITIONS ...]
[COMPILE_OPTIONS ...]
[MD5_HASH hash]
[SHA1_HASH hash]
)
Create a virtual imported target. By Linking against these targets,
it will use its include directories and compile definitions. This is recommended
instead of using variables defined in find modules.
Arguments:
``TARGET`` (mandatory)
Name of the target to create.
``BASENAME`` (mandatory)
Prefix of the variables containing the libraries. The variables
to search are: ``{BASENAME}_LIBRARY`` with the debug and/or release version
of the libraries, ``{BASENAME}_LIBRARY_DEBUG`` with the debug version and
``{BASENAME}_LIBRARY_RELEASE`` for the release version.
``STATIC``, ``SHARED``, ``UNKNOWN``, ``INTERFACE`` (mandatory)
Specify the configuration of the target libraries. Use ``UNKNOWN`` if you
don't know if it's static or dynamic and ``INTERFACE`` for header-only
targets.
``LANGUAGES`` (mandatory)
List of languages supporting this library. Usually this is just C.
``CPE`` (mandatory)
Common Platform Enumeration string identifying the software component.
``LICENSE`` (mandatory)
License name for the software component.
``PURL`` (mandatory)
Package URL string identifying the software component package.
``INCLUDE_DIRS`` (optional)
List of additional include directories to use with this target.
``COMPILE_DEFINITIONS`` (optional)
List of additional compile definitions to use with this target.
``COMPILE_OPTIONS`` (optional)
List of additional compile options to use with this target.
``MD5_HASH`` (optional)
Pre-computed MD5 hash to use instead of calculating from library file.
If not provided, the hash will be computed from the library file or basename.
``SHA1_HASH`` (optional)
Pre-computed SHA1 hash to use instead of calculating from library file.
If not provided, the hash will be computed from the library file or basename.
#]]
include(CMakeParseArguments)
include(ConnextDdsArgumentChecks)
function(connextdds_create_imported_target)
set(options STATIC SHARED UNKNOWN INTERFACE)
set(single_value_args TARGET BASENAME CPE LICENSE PURL MD5_HASH SHA1_HASH)
set(multi_value_args LANGUAGES INCLUDE_DIRS COMPILE_DEFINITIONS COMPILE_OPTIONS)
cmake_parse_arguments(
_IMPORTED
"${options}" "${single_value_args}" "${multi_value_args}"
${ARGN}
)
connextdds_check_required_arguments(
_IMPORTED_TARGET
_IMPORTED_BASENAME
_IMPORTED_LANGUAGES
_IMPORTED_CPE
_IMPORTED_LICENSE
_IMPORTED_PURL
)
if(NOT _IMPORTED_STATIC AND NOT _IMPORTED_SHARED AND NOT _IMPORTED_UNKNOWN
AND NOT _IMPORTED_INTERFACE)
connextdds_log_message(FATAL_ERROR
"Missing library type: static / shared / unknown / interface"
)
endif()
if(NOT ${_IMPORTED_BASENAME}_LIBRARY AND NOT _IMPORTED_INCLUDE_DIRS)
connextdds_log_message(FATAL_ERROR
"Missing libraries/headers for imported target ${_IMPORTED_TARGET}"
)
endif()
# If it already exists, nothing to do.
if(TARGET ${_IMPORTED_TARGET})
return()
endif()
if(_IMPORTED_INTERFACE)
# If there aren't libraries, it's a header-only so we need INTERFACE,
# otherwise it will complain about missing libraries.
set(library_type INTERFACE)
elseif(_IMPORTED_STATIC)
set(library_type STATIC)
elseif(_IMPORTED_SHARED)
set(library_type SHARED)
elseif(_IMPORTED_UNKNOWN)
# UNKNOWN reprents that we don't know if it's static or shared.
set(library_type UNKNOWN)
else()
connextdds_log_message(FATAL_ERROR
"Missing library type for '${_IMPORTED_TARGET}'. "
"Valid types are: STATIC, SHARED, UNKNOWN or INTERFACE"
)
endif()
# Create the library
add_library(${_IMPORTED_TARGET} ${library_type} IMPORTED)
# Set the include directory and the default library
set_target_properties(${_IMPORTED_TARGET} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORTED_INCLUDE_DIRS}"
INTERFACE_COMPILE_DEFINITIONS "${_IMPORTED_COMPILE_DEFINITIONS}"
INTERFACE_COMPILE_OPTIONS "${_IMPORTED_COMPILE_OPTIONS}"
)
if(WIN32 AND _IMPORTED_SHARED)
# For Windows shared libraries, IMPORTED_LOCATION must contain the
# path to the DLL file. Since for linking we only need the .lib file
# which is the one found by add_library, we only need to set
# IMPORTED_IMPLIB.
set(location_property IMPORTED_IMPLIB)
else()
set(location_property IMPORTED_LOCATION)
endif()
# Set the library
if(EXISTS "${${_IMPORTED_BASENAME}_LIBRARY}")
set_target_properties(${_IMPORTED_TARGET} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "${_IMPORTED_LANGUAGES}"
${location_property} "${${_IMPORTED_BASENAME}_LIBRARY}"
)
# Use provided hash values if available, otherwise calculate them
if(_IMPORTED_MD5_HASH)
set(_md5 "${_IMPORTED_MD5_HASH}")
else()
file(MD5 "${${_IMPORTED_BASENAME}_LIBRARY}" _md5)
endif()
if(_IMPORTED_SHA1_HASH)
set(_sha1 "${_IMPORTED_SHA1_HASH}")
else()
file(SHA1 "${${_IMPORTED_BASENAME}_LIBRARY}" _sha1)
endif()
else()
# Use provided hash values if available, otherwise calculate from basename
if(_IMPORTED_MD5_HASH)
set(_md5 "${_IMPORTED_MD5_HASH}")
else()
string(MD5 _md5 ${_IMPORTED_BASENAME})
endif()
if(_IMPORTED_SHA1_HASH)
set(_sha1 "${_IMPORTED_SHA1_HASH}")
else()
string(SHA1 _sha1 ${_IMPORTED_BASENAME})
endif()
endif()
# Set the debug library
if(EXISTS ${${_IMPORTED_BASENAME}_LIBRARY_DEBUG})
set_property(TARGET ${_IMPORTED_TARGET} APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG
)
set_target_properties(${_IMPORTED_TARGET} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "${_IMPORTED_LANGUAGES}"
${location_property}_DEBUG "${${_IMPORTED_BASENAME}_LIBRARY_DEBUG}"
)
endif()
# Set the release library
if(EXISTS ${${_IMPORTED_BASENAME}_LIBRARY_RELEASE})
set_property(TARGET ${_IMPORTED_TARGET} APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE
)
set_target_properties(${_IMPORTED_TARGET} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "${_IMPORTED_LANGUAGES}"
${location_property}_RELEASE "${${_IMPORTED_BASENAME}_LIBRARY_RELEASE}"
)
endif()
if(_IMPORTED_INTERFACE)
# Set Third-Party metadata
set_target_properties(
${_IMPORTED_TARGET} PROPERTIES
INTERFACE_CPE "${_IMPORTED_CPE}#${_md5}#${_sha1}"
INTERFACE_LICENSE ${_IMPORTED_LICENSE}
INTERFACE_PURL "${_IMPORTED_PURL}"
)
else()
set_target_properties(
${_IMPORTED_TARGET} PROPERTIES
CPE "${_IMPORTED_CPE}#${_md5}#${_sha1}"
LICENSE ${_IMPORTED_LICENSE}
PURL "${_IMPORTED_PURL}"
)
endif()
endfunction()