- QT5_ADD_RESOURCES was a no-op stub under Qt6, silently dropping .qrc files: LogView's :/image/* icons were never compiled into the binary. Map the stub onto qt6_add_resources() (outfiles-variable form, which appends the generated qrc_*.cpp to the source list). LogView is the only caller of the stub. - nglwidgets' Qt6 branch only processed rme_light_style.qrc; nglresources.qrc (which provides :icons/16x16/* toolbar/window icons) was left as a raw file in the source list and never compiled (CMAKE_AUTORCC is off). Process both qrcs. - LogView never loads libnglwidgets.so at runtime (--as-needed drops it: the code uses no nglwidgets symbols), so its :icons/16x16 resources were never registered for the app. Embed the 20 icons LogView actually uses directly into LogViewResources.qrc with explicit aliases (rcc rejects XML comments in .qrc and, without an alias, registers the full relative path as the resource name).
701 lines
21 KiB
CMake
Executable File
701 lines
21 KiB
CMake
Executable File
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INCLUDE(GenerateExportHeader)
|
|
|
|
# Suppress CMP0177 warning: install() DESTINATION normalization
|
|
if(POLICY CMP0177)
|
|
cmake_policy(SET CMP0177 OLD)
|
|
endif()
|
|
|
|
# Compatibility stubs for Qt5 CMake macros when Qt6 is used (UI/CPP wrapping
|
|
# still no-op; resource handling is implemented below).
|
|
# QT5_ADD_RESOURCES maps onto Qt6's qt6_add_resources() in the outfiles-variable
|
|
# form: the generated qrc_<name>.cpp sources are appended to the given source
|
|
# list, so .qrc files are compiled into the targets that reference them
|
|
# (e.g. TetraIF/LogView). Without this the resources are silently dropped and
|
|
# ":/..." icons render empty at runtime.
|
|
if(NOT COMMAND QT5_ADD_RESOURCES)
|
|
macro(QT5_ADD_RESOURCES _out)
|
|
if(TARGET Qt6::Core)
|
|
qt6_add_resources(${_out} ${ARGN})
|
|
else()
|
|
message(WARNING "QT5_ADD_RESOURCES stub: Qt6::Core not found, skipping resources: ${ARGN}")
|
|
endif()
|
|
endmacro()
|
|
endif()
|
|
if(NOT COMMAND QT5_ADD_BIG_RESOURCES)
|
|
macro(QT5_ADD_BIG_RESOURCES _out)
|
|
set(${_out} "" PARENT_SCOPE)
|
|
endmacro()
|
|
endif()
|
|
if(NOT COMMAND QT5_WRAP_UI)
|
|
macro(QT5_WRAP_UI)
|
|
# noop at configure time
|
|
endmacro()
|
|
endif()
|
|
if(NOT COMMAND QT5_WRAP_CPP)
|
|
macro(QT5_WRAP_CPP)
|
|
endmacro()
|
|
endif()
|
|
|
|
# NGL_WRAP_UI: ensure .ui files are added to source lists so CMake's AUTOUIC can process them
|
|
if(NOT COMMAND NGL_WRAP_UI)
|
|
macro(NGL_WRAP_UI _out)
|
|
# Append provided UI files to the given source list variable
|
|
set(_cur "${${_out}}")
|
|
foreach(_ui ${ARGN})
|
|
list(APPEND _cur ${_ui})
|
|
endforeach()
|
|
set(${_out} "${_cur}" PARENT_SCOPE)
|
|
endmacro()
|
|
endif()
|
|
|
|
|
|
SET(_default_build OFF)
|
|
IF(BUILD_ALL)
|
|
SET(_default_build ON)
|
|
ENDIF()
|
|
|
|
OPTION(BUILD_SV "Build and install Server software parts" ${_default_build})
|
|
OPTION(BUILD_AAR "Build and install AAR software parts" ${_default_build})
|
|
OPTION(BUILD_LTSCC "Build and install LTS CC Conf" OFF)
|
|
OPTION(BUILD_HLA "Build and install HLA Server software parts" OFF)
|
|
OPTION(BUILD_WS "Build and install Workstation software parts" ${_default_build})
|
|
OPTION(BUILD_TOOLSWS "Build and install TOOLS for WS" OFF)
|
|
OPTION(BUILD_TOOLSSV "Build and install TOOLS for SV" OFF)
|
|
|
|
OPTION(BUILD_DEP_TEST_EXECUTABLES "Build executables for created libs to check library dependencies" OFF)
|
|
OPTION(BUILD_TS_FILES "Regenerate ts-files for translations" OFF)
|
|
OPTION(BUILD_STATIC_LIBRARIES "Build all libraries as static libraries" OFF)
|
|
|
|
IF(BUILD_STATIC_LIBRARIES)
|
|
ADD_DEFINITIONS(-DBUILD_STATIC_LIBRARIES)
|
|
ENDIF()
|
|
|
|
|
|
SET(AAR_INSTALL_PATH "AAR")
|
|
SET(SV_INSTALL_PATH "SV")
|
|
SET(HLA_INSTALL_PATH "SV")
|
|
SET(DDS_INSTALL_PATH "SV")
|
|
SET(WS_INSTALL_PATH "WS")
|
|
SET(TOOLSWS_INSTALL_PATH "WS")
|
|
SET(TOOLSSV_INSTALL_PATH "SV")
|
|
SET(ALL_INSTALL_PATH "")
|
|
SET(AAR_INSTALL_PATH "SV")
|
|
IF(WIN32)
|
|
SET(INSTALL_DEFAULT_ARGS RUNTIME DESTINATION bin
|
|
LIBRARY DESTINATION bin
|
|
ARCHIVE DESTINATION lib COMPONENT Devel)
|
|
ELSE()
|
|
SET(INSTALL_DEFAULT_ARGS RUNTIME DESTINATION bin
|
|
LIBRARY DESTINATION lib
|
|
ARCHIVE DESTINATION lib COMPONENT Devel)
|
|
ENDIF()
|
|
SET(INSTALL_DEFAULT_ARGS_DEVEL RUNTIME DESTINATION bin COMPONENT Devel
|
|
LIBRARY DESTINATION lib COMPONENT Devel
|
|
ARCHIVE DESTINATION lib COMPONENT Devel)
|
|
SET(_components ALL SV WS AAR TOOLSWS TOOLSSV HLA)
|
|
|
|
|
|
|
|
|
|
MACRO (NGL_GET_BUILDPARTS _args _buildopts)
|
|
SET(${_buildopts} "")
|
|
SET(_at_least_one_keyword_found OFF)
|
|
|
|
MESSAGE(STATUS "DEBUG NGL_GET_BUILDPARTS: _args (name)=${_args}, _args (value)=${${_args}}, BUILD_ALL=${BUILD_ALL}, BUILD_SV=${BUILD_SV}, BUILD_WS=${BUILD_WS}, BUILD_AAR=${BUILD_AAR}")
|
|
|
|
LIST(FIND ${_args} "ALL" _all)
|
|
IF (_all GREATER -1)
|
|
LIST(REMOVE_AT ${_args} ${_all})
|
|
SET(_at_least_one_keyword_found ON)
|
|
FOREACH(_component ${_components})
|
|
# CMake kann BUILD_${_component} nicht dynamisch auflösen - muss eval() verwenden
|
|
SET(_varname "BUILD_${_component}")
|
|
SET(_varvalue ${${_varname}})
|
|
MESSAGE(STATUS "DEBUG: _component=${_component}, _varname=${_varname}, _varvalue=${_varvalue}")
|
|
IF(${_varname})
|
|
LIST(APPEND ${_buildopts} ${_component})
|
|
MESSAGE(STATUS "DEBUG: Added ${_component} to _buildopts")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
ELSE()
|
|
FOREACH(_component ${_components})
|
|
LIST(FIND ${_args} "${_component}" _idx)
|
|
IF(_idx GREATER -1)
|
|
LIST(REMOVE_AT ${_args} ${_idx})
|
|
SET(_at_least_one_keyword_found ON)
|
|
MESSAGE(STATUS "DEBUG ELSE: _component=${_component}, BUILD_${_component}=${BUILD_${_component}}")
|
|
IF(BUILD_${_component})
|
|
LIST(APPEND ${_buildopts} ${_component})
|
|
MESSAGE(STATUS "DEBUG ELSE: Added ${_component} to _buildopts")
|
|
ELSE()
|
|
MESSAGE(STATUS "DEBUG ELSE: BUILD_${_component} is FALSE/NOTFOUND, NOT adding ${_component}")
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
ENDIF()
|
|
|
|
IF(NOT _at_least_one_keyword_found)
|
|
MESSAGE(FATAL_ERROR "No software component keyword (ALL/SV/WS) given!")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO (NGL_PARSE_BUILDCOMPONENT_INTERNAL _args _properties _build_target)
|
|
|
|
NGL_GET_BUILDPARTS(_args _buildopts)
|
|
SET(${_build_target} OFF)
|
|
|
|
MESSAGE(STATUS "DEBUG NGL_PARSE: _args=${_args}, _buildopts=${_buildopts}, _components=${_components}")
|
|
|
|
FOREACH(_component ${_components})
|
|
LIST(FIND _buildopts ${_component} _idx)
|
|
IF(_idx GREATER -1)
|
|
LIST(APPEND ${_properties} NGL_INSTALL_${_component} ON)
|
|
SET(${_build_target} ON)
|
|
MESSAGE(STATUS "DEBUG: Set _build_target=ON for component ${_component}")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
LIST(FIND ${_args} "NO_TRANSLATION" _no_i18n)
|
|
IF (_no_i18n GREATER -1)
|
|
LIST(REMOVE_AT ${_args} ${_no_i18n})
|
|
LIST(APPEND ${_properties} NO_TRANSLATION ON)
|
|
ENDIF ()
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_TRANSLATION output_location _qm_file_name _ts_file _qm_files)
|
|
GET_FILENAME_COMPONENT(_abs_FILE ${_ts_file} ABSOLUTE)
|
|
FILE(MAKE_DIRECTORY "${output_location}")
|
|
SET(qm "${output_location}/${_qm_file_name}.qm")
|
|
|
|
ADD_CUSTOM_COMMAND(OUTPUT ${qm}
|
|
COMMAND Qt6::lrelease
|
|
ARGS ${_abs_FILE} -qm ${qm}
|
|
DEPENDS ${_abs_FILE}
|
|
)
|
|
SET(${_qm_files} ${${_qm_files}} ${qm})
|
|
ENDMACRO()
|
|
|
|
|
|
|
|
|
|
MACRO (NGL_ADD_LIBRARY)
|
|
|
|
SET(_args ${ARGN})
|
|
|
|
|
|
IF(BUILD_STATIC_LIBRARIES)
|
|
LIST(FIND _args "SHARED" _is_shared)
|
|
IF(_is_shared GREATER -1)
|
|
LIST(REMOVE_AT _args ${_is_shared})
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
SET(_properties "")
|
|
SET(_build_target OFF)
|
|
NGL_PARSE_BUILDCOMPONENT_INTERNAL(_args _properties _build_target)
|
|
LIST(GET _args 0 _target_NAME)
|
|
|
|
IF(_build_target)
|
|
|
|
ADD_LIBRARY(${_args})
|
|
SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES ${_properties})
|
|
|
|
IF(NOT MSVC AND NOT USE_ASAN AND NOT USE_UBSAN)
|
|
|
|
SET_PROPERTY(TARGET ${_target_NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
|
|
ENDIF()
|
|
|
|
|
|
STRING(TOUPPER ${_target_NAME} _symbol)
|
|
STRING(REGEX REPLACE "[^_A-Za-z0-9]" "_" _symbol ${_symbol})
|
|
IF(BUILD_STATIC_LIBRARIES)
|
|
SET(_symbol "${_symbol}_EXPORT=")
|
|
TARGET_COMPILE_DEFINITIONS(${_target_NAME} PUBLIC ${_symbol})
|
|
ELSE()
|
|
GET_TARGET_PROPERTY(target_type ${_target_NAME} TYPE)
|
|
IF(target_type STREQUAL "SHARED_LIBRARY" OR
|
|
target_type STREQUAL "MODULE_LIBRARY")
|
|
SET(_symbol "MAKE_${_symbol}_LIB")
|
|
TARGET_COMPILE_DEFINITIONS(${_target_NAME} PRIVATE ${_symbol})
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
IF(BUILD_DEP_TEST_EXECUTABLES)
|
|
LIST(FIND _args "SHARED" _is_shared)
|
|
IF(_is_shared GREATER -1)
|
|
LIST(REMOVE_AT _args ${_is_shared})
|
|
LIST(REMOVE_ITEM _args "${_target_NAME}")
|
|
ADD_EXECUTABLE(${_target_NAME}_dep_test ${NGL_MODULE_DIR}/ngl_dep_test_main.cpp ${_args})
|
|
ENDIF()
|
|
ENDIF()
|
|
SET_PROPERTY(GLOBAL APPEND PROPERTY NGL_TS_TARGETS ${_target_NAME})
|
|
ENDIF()
|
|
|
|
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO (NGL_ADD_LIBRARY2)
|
|
|
|
SET(_args ${ARGN})
|
|
|
|
|
|
IF(BUILD_STATIC_LIBRARIES)
|
|
LIST(FIND _args "SHARED" _is_shared)
|
|
IF(_is_shared GREATER -1)
|
|
LIST(REMOVE_AT _args ${_is_shared})
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
SET(_properties "")
|
|
SET(_build_target OFF)
|
|
NGL_PARSE_BUILDCOMPONENT_INTERNAL(_args _properties _build_target)
|
|
LIST(GET _args 0 _target_NAME)
|
|
|
|
IF(_build_target)
|
|
|
|
ADD_LIBRARY(${_args})
|
|
SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES ${_properties})
|
|
|
|
IF(NOT MSVC AND NOT USE_ASAN AND NOT USE_UBSAN)
|
|
|
|
SET_PROPERTY(TARGET ${_target_NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
|
|
ENDIF()
|
|
TARGET_INCLUDE_DIRECTORIES(${_target_NAME}
|
|
PUBLIC
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${CMAKE_CURRENT_BINARY_DIR}/../
|
|
)
|
|
GET_PROPERTY(type TARGET ${_target_NAME} PROPERTY TYPE)
|
|
IF(NOT ${type} STREQUAL "STATIC_LIBRARY")
|
|
NGL_INSTALL_TARGET(${_target_NAME})
|
|
ENDIF()
|
|
IF(${type} STREQUAL "SHARED_LIBRARY" OR ${type} STREQUAL "MODULE_LIBRARY")
|
|
GENERATE_EXPORT_HEADER(${_target_NAME})
|
|
ENDIF()
|
|
IF(BUILD_DEP_TEST_EXECUTABLES)
|
|
IF(${type} STREQUAL "SHARED_LIBRARY")
|
|
LIST(REMOVE_ITEM _args "SHARED")
|
|
LIST(REMOVE_ITEM _args "${_target_NAME}")
|
|
ADD_EXECUTABLE(${_target_NAME}_dep_test ${NGL_MODULE_DIR}/ngl_dep_test_main.cpp ${_args})
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
SET_PROPERTY(GLOBAL APPEND PROPERTY NGL_TS_TARGETS ${_target_NAME})
|
|
ENDIF()
|
|
|
|
|
|
|
|
ENDMACRO()
|
|
|
|
|
|
|
|
|
|
MACRO (NGL_ADD_EXECUTABLE)
|
|
|
|
SET(_args ${ARGN})
|
|
SET(_properties "")
|
|
SET(_build_target OFF)
|
|
NGL_PARSE_BUILDCOMPONENT_INTERNAL(_args _properties _build_target)
|
|
LIST(GET _args 0 _target_NAME)
|
|
|
|
MESSAGE(STATUS "DEBUG NGL_ADD_EXECUTABLE: _target_NAME=${_target_NAME}, _build_target=${_build_target}")
|
|
IF(_build_target)
|
|
MESSAGE(STATUS "DEBUG NGL_ADD_EXECUTABLE: Creating executable ${_target_NAME}")
|
|
ADD_EXECUTABLE(${_args})
|
|
SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES ${_properties})
|
|
SET_PROPERTY(GLOBAL APPEND PROPERTY NGL_TS_TARGETS ${_target_NAME})
|
|
ELSE()
|
|
MESSAGE(STATUS "DEBUG NGL_ADD_EXECUTABLE: SKIPPING executable ${_target_NAME}")
|
|
ENDIF()
|
|
|
|
|
|
|
|
ENDMACRO()
|
|
|
|
|
|
|
|
|
|
MACRO(NGL_TARGET_INCLUDE_DIRECTORIES _target_NAME)
|
|
|
|
IF(TARGET ${_target_NAME})
|
|
TARGET_INCLUDE_DIRECTORIES(${_target_NAME} ${ARGN})
|
|
ENDIF()
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_TARGET_LINK_DIRECTORIES _target_NAME)
|
|
|
|
IF(TARGET ${_target_NAME})
|
|
TARGET_LINK_DIRECTORIES(${_target_NAME} ${ARGN})
|
|
ENDIF()
|
|
|
|
ENDMACRO()
|
|
|
|
|
|
|
|
|
|
MACRO(NGL_TARGET_LINK_LIBRARIES _target_NAME)
|
|
|
|
IF(TARGET ${_target_NAME})
|
|
TARGET_LINK_LIBRARIES(${_target_NAME} ${ARGN})
|
|
IF(BUILD_DEP_TEST_EXECUTABLES)
|
|
GET_TARGET_PROPERTY(_type ${_target_NAME} TYPE)
|
|
IF("${_type}" STREQUAL "SHARED_LIBRARY")
|
|
TARGET_LINK_LIBRARIES(${_target_NAME}_dep_test ${ARGN} ${_target_NAME})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
ENDMACRO()
|
|
MACRO(NGL_ADD_INSTALL_PREFIX_INTERNAL _args prefix)
|
|
LIST(LENGTH ${_args} len)
|
|
|
|
SET(_ret_args "")
|
|
SET(_replace_next OFF)
|
|
FOREACH( _arg ${${_args}})
|
|
IF(${_arg} STREQUAL "DESTINATION")
|
|
SET(_replace_next ON)
|
|
LIST(APPEND _ret_args ${_arg})
|
|
ELSE()
|
|
IF(_replace_next)
|
|
LIST(APPEND _ret_args "${prefix}/${_arg}")
|
|
SET(_replace_next OFF)
|
|
ELSE()
|
|
LIST(APPEND _ret_args ${_arg})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
SET(${_args} ${_ret_args})
|
|
ENDMACRO()
|
|
|
|
|
|
|
|
|
|
|
|
MACRO(_NGL_INSTALL_TARGET_internal _target_NAME)
|
|
|
|
SET(_args ${ARGN})
|
|
IF(TARGET ${_target_NAME})
|
|
FOREACH(_component ${_components})
|
|
GET_TARGET_PROPERTY(_install_component ${_target_NAME} NGL_INSTALL_${_component})
|
|
IF(_install_component)
|
|
SET(_my_args ${_args})
|
|
IF(NOT "${${_component}_INSTALL_PATH}" STREQUAL "")
|
|
NGL_ADD_INSTALL_PREFIX_INTERNAL(_my_args ${${_component}_INSTALL_PATH})
|
|
INSTALL(TARGETS ${_target_NAME} ${_my_args})
|
|
ELSE()
|
|
INSTALL(TARGETS ${_target_NAME} ${_my_args})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_INSTALL_TARGET _target_NAME)
|
|
SET(_args ${ARGN})
|
|
LIST(LENGTH _args len)
|
|
IF(${len} EQUAL 0)
|
|
SET(_args ${INSTALL_DEFAULT_ARGS})
|
|
ENDIF()
|
|
_NGL_INSTALL_TARGET_internal(${_target_NAME} ${_args})
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_INSTALL_TARGET_DEVEL _target_NAME)
|
|
IF (NOT BUILD_RPM)
|
|
SET(_args ${ARGN})
|
|
LIST(LENGTH _args len)
|
|
IF(${len} EQUAL 0)
|
|
SET(_args ${INSTALL_DEFAULT_ARGS_DEVEL})
|
|
ENDIF()
|
|
_NGL_INSTALL_TARGET_internal(${_target_NAME} ${_args})
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_INSTALL)
|
|
SET(_args ${ARGN})
|
|
|
|
NGL_GET_BUILDPARTS(_args _buildopts)
|
|
|
|
FOREACH(_component ${_components})
|
|
LIST(FIND _buildopts ${_component} _idx)
|
|
IF(_idx GREATER -1)
|
|
SET(_my_args ${_args})
|
|
NGL_ADD_INSTALL_PREFIX_INTERNAL(_my_args ${${_component}_INSTALL_PATH})
|
|
INSTALL(${_my_args})
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_SET_TARGET_PROPERTIES _target_NAME)
|
|
IF(TARGET ${_target_NAME})
|
|
SET_TARGET_PROPERTIES(${_target_NAME} ${ARGN})
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_TARGET_COMPILE_DEFINITIONS _target_NAME)
|
|
IF(TARGET ${_target_NAME})
|
|
TARGET_COMPILE_DEFINITIONS(${_target_NAME} ${ARGN})
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_COMPILE_FLAGS _target_NAME _property_value)
|
|
IF(TARGET ${_target_NAME})
|
|
|
|
SET_PROPERTY(TARGET ${_target_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_property_value}")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_TEST)
|
|
IF(TARGET ${_target_NAME})
|
|
ADD_TEST(${_target_NAME} ${ARGN})
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_CREATE_ASSISTANT_HELP type target_name language)
|
|
|
|
SET(_QHP_FILE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${language}.qhp")
|
|
SET(_QHP_FILE_BLD "${CMAKE_CURRENT_BINARY_DIR}/${language}/${language}.qhp")
|
|
SET(_QCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/${language}/${language}.qch")
|
|
SET(_QHCP_FILE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${language}.qhcp")
|
|
SET(_QHCP_FILE_BLD "${CMAKE_CURRENT_BINARY_DIR}/${language}/${language}.qhcp")
|
|
SET(_QHC_FILE "${CMAKE_CURRENT_BINARY_DIR}/${language}/${language}.qhc")
|
|
|
|
SET(_file_list ${ARGN})
|
|
|
|
SET(_command_qhg qhelpgenerator-qt5)
|
|
SET(_command_qcg qcollectiongenerator-qt5)
|
|
|
|
ADD_CUSTOM_COMMAND(DEPENDS ${_file_list} ${_QHP_FILE_SRC} ${_QHCP_FILE_SRC}
|
|
COMMAND ${NGL_MODULE_DIR}/make_qt_help.py
|
|
ARGS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${language} ${language} ${_file_list}
|
|
COMMAND ${_command_qhg}
|
|
ARGS ${_QHP_FILE_BLD} -o ${_QCH_FILE}
|
|
COMMAND ${_command_qcg}
|
|
ARGS "${_QHCP_FILE_BLD}" -o "${_QHC_FILE}"
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -E touch ${CMAKE_CURRENT_BINARY_DIR}/${language}_qch_dummy.c
|
|
OUTPUT "${_QHC_FILE}"
|
|
"${_QHCP_FILE_BLD}"
|
|
"${_QHP_FILE_BLD}"
|
|
"${_QCH_FILE}"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${language}_qch_dummy.c"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BUILD_DIR}
|
|
COMMENT "Generating Qt assistant help for language ${language}"
|
|
)
|
|
|
|
NGL_ADD_LIBRARY(${type} "${type}_${target_name}_${language}_qch_dummy" "${language}_qch_dummy")
|
|
NGL_INSTALL(${type} FILES "${_QCH_FILE}" "${_QHC_FILE}" DESTINATION help/${target_name}/)
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_TARGET_LINK targetName targetAbbr)
|
|
|
|
IF(TARGET ${targetName})
|
|
IF(NOT WIN32)
|
|
SET(cmake_operation create_symlink)
|
|
IF(WIN32)
|
|
SET(cmake_operation copy)
|
|
ENDIF(WIN32)
|
|
ADD_CUSTOM_COMMAND(TARGET ${targetName} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E remove -f ${targetAbbr}
|
|
COMMAND ${CMAKE_COMMAND} -E ${cmake_operation} ${targetName} ${targetAbbr}
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
|
)
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
|
|
MACRO(ADD_INTERFACE_LIBRARY name_ header_ inc_path_)
|
|
SET(link_libs_ ${ARGN})
|
|
ADD_LIBRARY(${name_} INTERFACE)
|
|
TARGET_INCLUDE_DIRECTORIES(${name_}
|
|
INTERFACE
|
|
${inc_path_}
|
|
)
|
|
FOREACH(link_lib_ ${link_libs_})
|
|
TARGET_LINK_LIBRARIES(${name_}
|
|
INTERFACE
|
|
${link_lib_}
|
|
)
|
|
ENDFOREACH()
|
|
TARGET_SOURCES(${name_} INTERFACE ${header_})
|
|
ENDMACRO()
|
|
|
|
|
|
macro(NGL_COMPILE_RESOURCES output_qrc_objects)
|
|
|
|
# Qt6 path: use qt6_add_resources
|
|
if(TARGET Qt6::Core)
|
|
qt6_add_resources(${output_qrc_objects} ${ARGN})
|
|
# Note: Removed return() as it exits the calling CMakeLists.txt file
|
|
else()
|
|
|
|
get_property(ipo_active VARIABLE PROPERTY CMAKE_INTERPROCEDURAL_OPTIMIZATION)
|
|
if(CMAKE_VERSION VERSION_GREATER 3.8.99 AND Qt6Core_VERSION VERSION_GREATER 5.12.99 AND NOT WIN32 AND NOT ipo_active)
|
|
set(_QT5_INTERNAL_SCOPE ON)
|
|
|
|
set(options)
|
|
set(oneValueArgs)
|
|
set(multiValueArgs OPTIONS)
|
|
cmake_parse_arguments(_NGL_COMPILE_RESOURCES "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
set(qrc_files ${_NGL_COMPILE_RESOURCES_UNPARSED_ARGUMENTS})
|
|
set(rcc_options ${_NGL_COMPILE_RESOURCES_OPTIONS})
|
|
|
|
foreach(qrc_file ${qrc_files})
|
|
get_filename_component(qrc_object_file ${qrc_file} NAME_WE)
|
|
get_filename_component(qrc_filename ${qrc_file} ABSOLUTE)
|
|
set(qrc_header_file ${CMAKE_CURRENT_BINARY_DIR}/qrc_${qrc_object_file}_header.cpp)
|
|
set(qrc_object ${CMAKE_CURRENT_BINARY_DIR}/qrc_${qrc_object_file}.o)
|
|
|
|
_qt5_parse_qrc_file(${qrc_filename} _out_depends _rc_depends)
|
|
set_source_files_properties(${qrc_filename} PROPERTIES SKIP_AUTORCC ON)
|
|
add_custom_command(OUTPUT ${qrc_header_file}
|
|
COMMAND echo ">>> 1: Regenerating ${qrc_header_file}"
|
|
COMMAND ${Qt6Core_RCC_EXECUTABLE} ${rcc_options} --name ${qrc_object_file} --pass 1 --output ${qrc_header_file} ${qrc_filename}
|
|
DEPENDS ${qrc_filename} ${_rc_depends} "${_out_depends}"
|
|
VERBATIM)
|
|
|
|
add_custom_target(resources_${qrc_object_file} ALL DEPENDS ${qrc_header_file})
|
|
add_library(qrc_object_${qrc_object_file} OBJECT ${qrc_header_file})
|
|
add_dependencies(qrc_object_${qrc_object_file} resources_${qrc_object_file})
|
|
|
|
set_target_properties(qrc_object_${qrc_object_file} PROPERTIES AUTOMOC OFF)
|
|
set_target_properties(qrc_object_${qrc_object_file} PROPERTIES AUTOUIC OFF)
|
|
|
|
add_custom_command(OUTPUT ${qrc_object}
|
|
COMMAND echo ">>> 2: Regenerating ${qrc_object} with $<TARGET_OBJECTS:qrc_object_${qrc_object_file}>"
|
|
COMMAND ${Qt6Core_RCC_EXECUTABLE}
|
|
ARGS ${rcc_options} --name ${qrc_object_file} --pass 2 --temp $<TARGET_OBJECTS:qrc_object_${qrc_object_file}> --output ${qrc_object} ${qrc_filename}
|
|
DEPENDS qrc_object_${qrc_object_file} ${qrc_filename} ${qrc_header_file}
|
|
VERBATIM)
|
|
|
|
list(APPEND ${output_qrc_objects} ${qrc_object})
|
|
endforeach()
|
|
else()
|
|
|
|
QT5_ADD_RESOURCES(${output_qrc_objects} ${ARGN})
|
|
endif()
|
|
endif()
|
|
endmacro()
|
|
|
|
|
|
MACRO(NGL_ADD_BIG_RESOURCES)
|
|
# Qt6 path: use qt6_add_resources
|
|
if(TARGET Qt6::Core)
|
|
qt6_add_resources(${ARGN})
|
|
# Note: Removed return() as it exits the calling CMakeLists.txt file
|
|
else()
|
|
GET_PROPERTY(ipo_active VARIABLE PROPERTY CMAKE_INTERPROCEDURAL_OPTIMIZATION)
|
|
IF(CMAKE_VERSION VERSION_GREATER 3.8.99 AND Qt6Core_VERSION VERSION_GREATER 5.12.99 AND NOT WIN32 AND NOT ipo_active)
|
|
QT5_ADD_BIG_RESOURCES(${ARGN})
|
|
ELSE()
|
|
QT5_ADD_RESOURCES(${ARGN})
|
|
ENDIF()
|
|
endif()
|
|
ENDMACRO()
|
|
|
|
|
|
|
|
|
|
MACRO(NGL_WRAP_UI _out)
|
|
# Qt6 path: use qt6_wrap_ui if available
|
|
if(COMMAND qt6_wrap_ui)
|
|
qt6_wrap_ui(${_out} ${ARGN})
|
|
elseif(TARGET Qt6::Core)
|
|
# Qt6 Core-only mode: UI files cannot be processed - stub for now
|
|
message(WARNING "Qt6 Widgets not available - UI wrapping disabled, using stub")
|
|
set(${_out} "${${_out}}" PARENT_SCOPE)
|
|
else()
|
|
# Qt5 fallback
|
|
QT5_WRAP_UI(${_out} ${ARGN})
|
|
endif()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_APP_ICON_INTERNAL _srcs icon)
|
|
IF(WIN32)
|
|
SET(_rc_file ${CMAKE_CURRENT_BINARY_DIR}/${target}_icon.rc)
|
|
FILE(WRITE ${_rc_file} "IDI_ICON1 ICON DISCARDABLE \"${icon}\"\n")
|
|
LIST(APPEND ${target} ${_rc_file})
|
|
SET_SOURCE_FILES_PROPERTIES(${_rc_file} PROPERTIES OBJECT_DEPENDS ${icon})
|
|
LIST(APPEND ${_srcs} ${_rc_file})
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_APP_ICON target)
|
|
NGL_ADD_APP_ICON_INTERNAL(${target} "${CMAKE_SOURCE_DIR}/Lts/Common/LtsWidgets/resources/rde_icon_256.ico")
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_SVC_ICON target)
|
|
NGL_ADD_APP_ICON_INTERNAL(${target} "${CMAKE_SOURCE_DIR}/Lts/Common/LtsWidgets/resources/rde_icon_256.ico")
|
|
ENDMACRO()
|
|
|
|
MACRO(NGL_ADD_TOOL_ICON target)
|
|
SET(_args ${ARGN})
|
|
LIST(LENGTH _args len)
|
|
SET(_ico "rde_logo.ico")
|
|
IF (len EQUAL 1)
|
|
LIST(GET _args 0 _tool)
|
|
SET(_ico "rde_internal_${_tool}_logo_256x256.ico")
|
|
ENDIF()
|
|
NGL_ADD_APP_ICON_INTERNAL(${target} "${CMAKE_SOURCE_DIR}/Lts/Common/LtsWidgets/resources/${_ico}")
|
|
ENDMACRO()
|
|
|
|
|
|
macro(NGL_TEST_APPS_JSON target)
|
|
if(NOT BUILD_RPM AND TARGET ${target})
|
|
add_custom_command(
|
|
TARGET ${target}
|
|
PRE_BUILD
|
|
COMMAND $<TARGET_FILE:LtsAppDescriptorChecker>
|
|
ARGS ${CMAKE_CURRENT_SOURCE_DIR} resources/apps.json
|
|
VERBATIM)
|
|
|
|
if(jsonschema)
|
|
add_custom_command(
|
|
TARGET ${target}
|
|
POST_BUILD
|
|
COMMAND jsonschema
|
|
ARGS -i ${CMAKE_CURRENT_SOURCE_DIR}/resources/apps.json ${CMAKE_CURRENT_SOURCE_DIR}/../apps.schema.json
|
|
VERBATIM)
|
|
endif()
|
|
endif()
|
|
endmacro()
|