# # some macros for NGL # # $Id$ # $HeadURL$ # $Author$ # # # _INSTALL_PATH: prefix for installation path for component # # NGL_ADD_LIBRARY: like ADD_LIBRARY but expects at least one of the # buildcomponent keywords which triggers building # and installation dependening on BUILD_ options # The default visibility is set to 'hidden' (CMAKE_CXX_VISIBILITY_PRESET) # NGL_ADD_LIBRARY2: Same as NGL_ADD_LIBRARY, but the export header (foo_export.h) # is automatically created and the target is also automatically installed # # NGL_ADD_EXECUTABLE: like ADD_EXECUTABLE but expects at least on of the # buildcomponent keywords which triggers building # and installation dependening on BUILD_ optionsB # # NGL_TARGET_LINK_LIBRARIES: like TARGET_LINK_LIBRARIES but does not # executes TARGET_LINK_LIBRARIES when the target is # not been build because of BUILD_ options # # NGL_INSTALL_TARGET: Installs the target dependening on BUILD_WS and # BUILD_SV options. When no arguments are given, # INSTALL_DEFAULT_ARGS is used. The paths are modifed to # make sure _INSTALL_PATH is added # # NGL_ADD_BIG_RESOURCES - is using QT5_ADD_BIG_RESOURCES if available, otherwise QT5_ADD_RESOURCES # NGL_WRAP_UI - deprecated, use QT5_WRAP_UI INCLUDE(GenerateExportHeader) # for NGL_ADD_LIBRARY2 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") 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 SV WS AAR TOOLSWS TOOLSSV HLA) # # Extrahierung der Buildoptionen aus den Kommandos # MACRO (NGL_GET_BUILDPARTS _args _buildopts) SET(${_buildopts} "") SET(_at_least_one_keyword_found OFF) LIST(FIND ${_args} "ALL" _all) IF (_all GREATER -1) LIST(REMOVE_AT ${_args} ${_all}) SET(_at_least_one_keyword_found ON) FOREACH(_component ${_components}) IF(BUILD_${_component}) LIST(APPEND ${_buildopts} ${_component}) 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) IF(BUILD_${_component}) LIST(APPEND ${_buildopts} ${_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) FOREACH(_component ${_components}) LIST(FIND _buildopts ${_component} _idx) IF(_idx GREATER -1) LIST(APPEND ${_properties} NGL_INSTALL_${_component} ON) SET(${_build_target} ON) 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 Qt5::lrelease ARGS ${_abs_FILE} -qm ${qm} DEPENDS ${_abs_FILE} ) SET(${_qm_files} ${${_qm_files}} ${qm}) ENDMACRO() # # NGL_ADD_LIBRARY / NGL_ADD_LIBRARY2 # MACRO (NGL_ADD_LIBRARY) SET(_args ${ARGN}) # nur statische Libs unter Windows 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) # create library ADD_LIBRARY(${_args}) SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES ${_properties}) IF(NOT MSVC AND NOT USE_ASAN AND NOT USE_UBSAN) # APPEND_STRING - make sure to add whitespace before string to append SET_PROPERTY(TARGET ${_target_NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined") ENDIF() # add MAKE_FOO_LIB 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() #MESSAGE(STATUS "Build: ${_target_NAME} ${_build_ws} ${_build_sv}") ENDMACRO() MACRO (NGL_ADD_LIBRARY2) SET(_args ${ARGN}) # nur statische Libs unter Windows 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) # create library ADD_LIBRARY(${_args}) SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES ${_properties}) IF(NOT MSVC AND NOT USE_ASAN AND NOT USE_UBSAN) # APPEND_STRING - make sure to add whitespace before string to append SET_PROPERTY(TARGET ${_target_NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined") ENDIF() TARGET_INCLUDE_DIRECTORIES(${_target_NAME} PUBLIC ${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() #MESSAGE(STATUS "Build: ${_target_NAME} ${_build_ws} ${_build_sv}") ENDMACRO() # # NGL_ADD_EXECUTABLE # 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) IF(_build_target) ADD_EXECUTABLE(${_args}) SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES ${_properties}) SET_PROPERTY(GLOBAL APPEND PROPERTY NGL_TS_TARGETS ${_target_NAME}) ENDIF() #MESSAGE(STATUS "Build: ${_target_NAME} '${_build_WS}' '${_build_SV}' '${_build_IF}'") ENDMACRO() # # NGL_TARGET_INCLUDE_DIRECTORIES # MACRO(NGL_TARGET_INCLUDE_DIRECTORIES _target_NAME) IF(TARGET ${_target_NAME}) TARGET_INCLUDE_DIRECTORIES(${_target_NAME} ${ARGN}) ENDIF() ENDMACRO() # # NGL_TARGET_LINK_LIBRARIES # 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() # # NGL_INSTALL_TARGET # only works for a single target atm # 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}) NGL_ADD_INSTALL_PREFIX_INTERNAL(_my_args ${${_component}_INSTALL_PATH}) INSTALL(TARGETS ${_target_NAME} ${_my_args}) 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}) # APPEND_STRING - make sure to add whitespace before string to append 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}) # TODO: per FIND_PROGRAM suchen 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) #bis Lösung für Windows gefunden 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() #not win32 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) # qrc_files ... # VERSION_GREATER_EQUAL only available in cmake 3.7 and up # rcc does not work correctly on windows with Qt5.12.3 - permission denied error... :( get_property(ipo_active VARIABLE PROPERTY CMAKE_INTERPROCEDURAL_OPTIMIZATION) if(CMAKE_VERSION VERSION_GREATER 3.8.99 AND Qt5Core_VERSION VERSION_GREATER 5.12.99 AND NOT WIN32 AND NOT ipo_active) # bug in Qt 5.12.2 - 5.13 seems to have a fix set(_QT5_INTERNAL_SCOPE ON) # prevent dev warnings for calling internal API functions 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 ${Qt5Core_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 $" COMMAND ${Qt5Core_RCC_EXECUTABLE} ARGS ${rcc_options} --name ${qrc_object_file} --pass 2 --temp $ --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() # fallback for openSUSE 42.3 - resources not rebuilt automatically QT5_ADD_RESOURCES(${output_qrc_objects} ${ARGN}) endif() endmacro() MACRO(NGL_ADD_BIG_RESOURCES) # VERSION_GREATER_EQUAL only available in cmake 3.7 and up # rcc does not work correctly on windows with Qt5.12.3 - permission denied error... :( GET_PROPERTY(ipo_active VARIABLE PROPERTY CMAKE_INTERPROCEDURAL_OPTIMIZATION) IF(CMAKE_VERSION VERSION_GREATER 3.8.99 AND Qt5Core_VERSION VERSION_GREATER 5.12.99 AND NOT WIN32 AND NOT ipo_active) # bug in Qt 5.12.2, 5.13 seems to have a fix QT5_ADD_BIG_RESOURCES(${ARGN}) ELSE() QT5_ADD_RESOURCES(${ARGN}) ENDIF() ENDMACRO() # NGL_WRAP_UI(outfiles inputfile ... ) # no longer needed MACRO(NGL_WRAP_UI) QT5_WRAP_UI(${ARGN}) 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 $ 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()