# Copyright José Manuel Barroso Galindo <theypsilon@gmail.com>
# SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
include_guard(GLOBAL)
get_filename_component(ZAPAROO_UPDATE_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
set(
ZAPAROO_UPDATE_IMPL_ROOT
""
CACHE PATH "Optional explicit path to the private zaparoo-update implementation source."
)
set(
ZAPAROO_UPDATE_RUNTIME_ROOT
""
CACHE PATH
"Optional path to a zaparoo-update runtime crate root or its artifacts directory."
)
set(
ZAPAROO_UPDATE_CARGO_MANIFEST_PATH
""
CACHE FILEPATH "Optional Cargo manifest used to locate zaparoo-update runtime packages."
)
set(
ZAPAROO_UPDATE_QML_LIBRARY_TYPE
"STATIC"
CACHE STRING "Library type for source-built zaparoo-update QML module: STATIC or SHARED."
)
set_property(CACHE ZAPAROO_UPDATE_QML_LIBRARY_TYPE PROPERTY STRINGS STATIC SHARED)
option(
ZAPAROO_UPDATE_LINK_HOST_QML_MODULES
"Link the embedding app's Zaparoo.Update.Host and Zaparoo.Theme QML modules into zaparoo-update targets."
ON
)
function(_zaparoo_update_host_qml_libraries out_var)
set(_zaparoo_update_host_libraries)
if(ZAPAROO_UPDATE_LINK_HOST_QML_MODULES)
if(NOT TARGET zaparoo_update_hostplugin)
message(
FATAL_ERROR
"zaparoo-update QML requires the frontend host module Zaparoo.Update.Host (target zaparoo_update_hostplugin)"
)
endif()
if(NOT TARGET zaparoo_ui_themeplugin)
message(
FATAL_ERROR
"zaparoo-update QML requires the frontend theme module Zaparoo.Theme (target zaparoo_ui_themeplugin)"
)
endif()
list(APPEND _zaparoo_update_host_libraries zaparoo_update_hostplugin
zaparoo_ui_themeplugin
)
endif()
set(${out_var} "${_zaparoo_update_host_libraries}" PARENT_SCOPE)
endfunction()
function(_zaparoo_update_artifact_root_from_candidate candidate out_var)
set(_zaparoo_update_candidate_root "")
if(candidate)
if(EXISTS "${candidate}/qml/Zaparoo/Update/qmldir"
AND EXISTS "${candidate}/qml/Zaparoo/Update/Native/qmldir")
set(_zaparoo_update_candidate_root "${candidate}")
elseif(EXISTS "${candidate}/artifacts/qml/Zaparoo/Update/qmldir"
AND EXISTS "${candidate}/artifacts/qml/Zaparoo/Update/Native/qmldir")
set(_zaparoo_update_candidate_root "${candidate}/artifacts")
endif()
endif()
set(${out_var} "${_zaparoo_update_candidate_root}" PARENT_SCOPE)
endfunction()
function(_zaparoo_update_find_runtime_library runtime_root relative_dir library_name out_path out_type)
set(_zaparoo_update_library_names "${library_name}")
if(library_name MATCHES "^lib(.+)$")
list(APPEND _zaparoo_update_library_names "${CMAKE_MATCH_1}")
endif()
foreach(_zaparoo_update_library_name IN LISTS _zaparoo_update_library_names)
foreach(_zaparoo_update_shared_suffix IN ITEMS ".so" ".dylib" ".dll")
if(EXISTS
"${runtime_root}/${relative_dir}/${_zaparoo_update_library_name}${_zaparoo_update_shared_suffix}"
)
set(
${out_path}
"${runtime_root}/${relative_dir}/${_zaparoo_update_library_name}${_zaparoo_update_shared_suffix}"
PARENT_SCOPE
)
set(${out_type} "SHARED" PARENT_SCOPE)
return()
endif()
endforeach()
endforeach()
foreach(_zaparoo_update_library_name IN LISTS _zaparoo_update_library_names)
foreach(_zaparoo_update_static_suffix IN ITEMS ".a" ".lib")
if(EXISTS
"${runtime_root}/${relative_dir}/${_zaparoo_update_library_name}${_zaparoo_update_static_suffix}"
)
set(
${out_path}
"${runtime_root}/${relative_dir}/${_zaparoo_update_library_name}${_zaparoo_update_static_suffix}"
PARENT_SCOPE
)
set(${out_type} "STATIC" PARENT_SCOPE)
return()
endif()
endforeach()
endforeach()
set(${out_path} "" PARENT_SCOPE)
set(${out_type} "" PARENT_SCOPE)
endfunction()
function(_zaparoo_update_import_library target_name library_path library_type)
if(TARGET ${target_name})
return()
endif()
add_library(${target_name} ${library_type} IMPORTED GLOBAL)
set_target_properties(${target_name} PROPERTIES IMPORTED_LOCATION "${library_path}")
if(library_type STREQUAL "SHARED" AND library_path MATCHES "\\.dll$")
get_filename_component(_zaparoo_update_import_dir "${library_path}" DIRECTORY)
get_filename_component(_zaparoo_update_import_name "${library_path}" NAME_WE)
set(
_zaparoo_update_import_library_candidates
"${_zaparoo_update_import_dir}/${_zaparoo_update_import_name}.lib"
"${_zaparoo_update_import_dir}/${_zaparoo_update_import_name}.dll.lib"
"${_zaparoo_update_import_dir}/${_zaparoo_update_import_name}.dll.a"
"${_zaparoo_update_import_dir}/lib${_zaparoo_update_import_name}.dll.a"
)
foreach(_zaparoo_update_import_library IN LISTS
_zaparoo_update_import_library_candidates)
if(EXISTS "${_zaparoo_update_import_library}")
set_target_properties(
${target_name} PROPERTIES IMPORTED_IMPLIB
"${_zaparoo_update_import_library}"
)
break()
endif()
endforeach()
endif()
endfunction()
function(_zaparoo_update_find_cargo_package_root package_name out_var)
set(${out_var} "" PARENT_SCOPE)
find_program(_zaparoo_update_cargo_executable NAMES cargo)
if(NOT _zaparoo_update_cargo_executable)
return()
endif()
set(_zaparoo_update_manifest_candidates)
if(ZAPAROO_UPDATE_CARGO_MANIFEST_PATH)
list(APPEND _zaparoo_update_manifest_candidates "${ZAPAROO_UPDATE_CARGO_MANIFEST_PATH}")
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/rust/Cargo.toml")
list(APPEND _zaparoo_update_manifest_candidates "${CMAKE_SOURCE_DIR}/rust/Cargo.toml")
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/Cargo.toml")
list(APPEND _zaparoo_update_manifest_candidates "${CMAKE_SOURCE_DIR}/Cargo.toml")
endif()
if(NOT _zaparoo_update_manifest_candidates)
return()
endif()
list(REMOVE_DUPLICATES _zaparoo_update_manifest_candidates)
foreach(_zaparoo_update_manifest IN LISTS _zaparoo_update_manifest_candidates)
execute_process(
COMMAND "${_zaparoo_update_cargo_executable}" metadata --format-version 1
--locked --manifest-path "${_zaparoo_update_manifest}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE _zaparoo_update_metadata
ERROR_QUIET RESULT_VARIABLE _zaparoo_update_metadata_result
)
if(NOT _zaparoo_update_metadata_result EQUAL 0)
continue()
endif()
string(JSON _zaparoo_update_package_count ERROR_VARIABLE _zaparoo_update_json_error
LENGTH "${_zaparoo_update_metadata}" packages
)
if(_zaparoo_update_json_error)
continue()
endif()
math(EXPR _zaparoo_update_last_package "${_zaparoo_update_package_count} - 1")
if(_zaparoo_update_last_package LESS 0)
continue()
endif()
foreach(_zaparoo_update_index RANGE 0 ${_zaparoo_update_last_package})
string(JSON _zaparoo_update_current_name GET "${_zaparoo_update_metadata}" packages
${_zaparoo_update_index} name
)
if(_zaparoo_update_current_name STREQUAL package_name)
string(JSON _zaparoo_update_manifest_path GET "${_zaparoo_update_metadata}"
packages ${_zaparoo_update_index} manifest_path
)
get_filename_component(
_zaparoo_update_package_root "${_zaparoo_update_manifest_path}" DIRECTORY
)
set(${out_var} "${_zaparoo_update_package_root}" PARENT_SCOPE)
return()
endif()
endforeach()
endforeach()
endfunction()
function(_zaparoo_update_normalize_arch arch out_var)
string(TOLOWER "${arch}" _zaparoo_update_arch)
if(_zaparoo_update_arch MATCHES "^(x86_64|amd64)$")
set(_zaparoo_update_normalized_arch "x86_64")
elseif(_zaparoo_update_arch MATCHES "^(aarch64|arm64)$")
set(_zaparoo_update_normalized_arch "aarch64")
elseif(_zaparoo_update_arch MATCHES "^(arm|armv7|armv7l|armhf)$")
set(_zaparoo_update_normalized_arch "armv7")
else()
set(_zaparoo_update_normalized_arch "${_zaparoo_update_arch}")
endif()
set(${out_var} "${_zaparoo_update_normalized_arch}" PARENT_SCOPE)
endfunction()
function(_zaparoo_update_runtime_package_name out_var)
_zaparoo_update_normalize_arch("${CMAKE_SYSTEM_PROCESSOR}" _zaparoo_update_arch)
set(_zaparoo_update_runtime_package "")
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(_zaparoo_update_arch STREQUAL "x86_64")
set(_zaparoo_update_runtime_package "zaparoo-update-runtime-linux-x86_64")
elseif(_zaparoo_update_arch STREQUAL "armv7")
set(_zaparoo_update_runtime_package "zaparoo-update-runtime-linux-armv7")
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR WIN32)
if(_zaparoo_update_arch STREQUAL "x86_64")
set(_zaparoo_update_runtime_package "zaparoo-update-runtime-windows-x86_64")
endif()
endif()
set(${out_var} "${_zaparoo_update_runtime_package}" PARENT_SCOPE)
endfunction()
function(_zaparoo_update_resolve_runtime_root out_var)
if(ZAPAROO_UPDATE_RUNTIME_ROOT)
_zaparoo_update_artifact_root_from_candidate("${ZAPAROO_UPDATE_RUNTIME_ROOT}"
_zaparoo_update_explicit_root
)
if(NOT _zaparoo_update_explicit_root)
message(
FATAL_ERROR
"ZAPAROO_UPDATE_RUNTIME_ROOT='${ZAPAROO_UPDATE_RUNTIME_ROOT}' does not contain "
"artifacts/qml/Zaparoo/Update/qmldir or qml/Zaparoo/Update/qmldir."
)
endif()
set(${out_var} "${_zaparoo_update_explicit_root}" PARENT_SCOPE)
return()
endif()
_zaparoo_update_runtime_package_name(_zaparoo_update_runtime_package)
if(NOT _zaparoo_update_runtime_package)
set(${out_var} "" PARENT_SCOPE)
return()
endif()
set(
_zaparoo_update_runtime_candidates
"${ZAPAROO_UPDATE_ROOT}/runtime/${_zaparoo_update_runtime_package}"
"${ZAPAROO_UPDATE_ROOT}/runtime/${_zaparoo_update_runtime_package}/artifacts"
"${ZAPAROO_UPDATE_ROOT}/../${_zaparoo_update_runtime_package}"
"${ZAPAROO_UPDATE_ROOT}/../${_zaparoo_update_runtime_package}/artifacts"
)
_zaparoo_update_find_cargo_package_root("${_zaparoo_update_runtime_package}"
_zaparoo_update_runtime_package_root
)
if(_zaparoo_update_runtime_package_root)
list(APPEND _zaparoo_update_runtime_candidates "${_zaparoo_update_runtime_package_root}"
"${_zaparoo_update_runtime_package_root}/artifacts"
)
endif()
file(
GLOB _zaparoo_update_registry_candidates
"${ZAPAROO_UPDATE_ROOT}/../${_zaparoo_update_runtime_package}-*"
"${ZAPAROO_UPDATE_ROOT}/../${_zaparoo_update_runtime_package}-*/artifacts"
)
list(APPEND _zaparoo_update_runtime_candidates ${_zaparoo_update_registry_candidates})
foreach(_zaparoo_update_runtime_candidate IN LISTS _zaparoo_update_runtime_candidates)
_zaparoo_update_artifact_root_from_candidate("${_zaparoo_update_runtime_candidate}"
_zaparoo_update_candidate_root
)
if(_zaparoo_update_candidate_root)
set(${out_var} "${_zaparoo_update_candidate_root}" PARENT_SCOPE)
return()
endif()
endforeach()
set(${out_var} "" PARENT_SCOPE)
endfunction()
function(_zaparoo_update_add_binary_qml_module runtime_root)
set(_zaparoo_update_binary_qmldir "${runtime_root}/qml/Zaparoo/Update/qmldir")
set(_zaparoo_update_binary_native_qmldir "${runtime_root}/qml/Zaparoo/Update/Native/qmldir")
_zaparoo_update_find_runtime_library(
"${runtime_root}" "qml/Zaparoo/Update" "libzaparoo_update_qmlplugin"
_zaparoo_update_binary_plugin _zaparoo_update_binary_plugin_type
)
_zaparoo_update_find_runtime_library(
"${runtime_root}" "lib" "libzaparoo_update_qml" _zaparoo_update_binary_module
_zaparoo_update_binary_module_type
)
_zaparoo_update_find_runtime_library(
"${runtime_root}" "qml/Zaparoo/Update/Native" "libZaparoo_Update_Native"
_zaparoo_update_binary_native_plugin _zaparoo_update_binary_native_plugin_type
)
if(NOT _zaparoo_update_binary_native_plugin)
_zaparoo_update_find_runtime_library(
"${runtime_root}" "lib" "libZaparoo_Update_Native"
_zaparoo_update_binary_native_plugin _zaparoo_update_binary_native_plugin_type
)
endif()
if(EXISTS "${runtime_root}/lib/libzaparoo_update_impl.a")
set(_zaparoo_update_binary_impl "${runtime_root}/lib/libzaparoo_update_impl.a")
set(_zaparoo_update_binary_impl_type "STATIC")
else()
_zaparoo_update_find_runtime_library(
"${runtime_root}" "lib" "libzaparoo_update_impl" _zaparoo_update_binary_impl
_zaparoo_update_binary_impl_type
)
endif()
if(NOT EXISTS "${_zaparoo_update_binary_qmldir}")
message(FATAL_ERROR "zaparoo-update runtime is missing ${_zaparoo_update_binary_qmldir}")
endif()
if(NOT _zaparoo_update_binary_plugin)
message(
FATAL_ERROR
"zaparoo-update runtime is missing qml/Zaparoo/Update/libzaparoo_update_qmlplugin.so, .dylib, .dll, or .a under ${runtime_root}"
)
endif()
if(NOT EXISTS "${_zaparoo_update_binary_native_qmldir}")
message(
FATAL_ERROR "zaparoo-update runtime is missing ${_zaparoo_update_binary_native_qmldir}"
)
endif()
if(_zaparoo_update_binary_plugin_type STREQUAL "STATIC" AND NOT _zaparoo_update_binary_module)
message(
FATAL_ERROR
"zaparoo-update runtime static QML plugin requires lib/libzaparoo_update_qml.a under ${runtime_root}"
)
endif()
if(_zaparoo_update_binary_module)
_zaparoo_update_import_library(
zaparoo_update_qml "${_zaparoo_update_binary_module}"
"${_zaparoo_update_binary_module_type}"
)
_zaparoo_update_host_qml_libraries(_zaparoo_update_host_libraries)
target_link_libraries(
zaparoo_update_qml INTERFACE Qt6::Quick Qt6::Svg
${_zaparoo_update_host_libraries}
)
else()
add_library(zaparoo_update_qml INTERFACE)
endif()
_zaparoo_update_import_library(
zaparoo_update_qmlplugin "${_zaparoo_update_binary_plugin}"
"${_zaparoo_update_binary_plugin_type}"
)
_zaparoo_update_host_qml_libraries(_zaparoo_update_host_libraries)
target_link_libraries(
zaparoo_update_qmlplugin INTERFACE Qt6::Quick Qt6::Svg
${_zaparoo_update_host_libraries}
)
if(_zaparoo_update_binary_module)
target_link_libraries(zaparoo_update_qmlplugin INTERFACE zaparoo_update_qml)
endif()
if(_zaparoo_update_binary_plugin_type STREQUAL "STATIC")
target_compile_definitions(
zaparoo_update_qmlplugin INTERFACE ZAPAROO_UPDATE_STATIC_QML_PLUGIN
)
endif()
if(_zaparoo_update_binary_native_plugin)
_zaparoo_update_import_library(
Zaparoo_Update_Native "${_zaparoo_update_binary_native_plugin}"
"${_zaparoo_update_binary_native_plugin_type}"
)
target_link_libraries(zaparoo_update_qmlplugin INTERFACE Zaparoo_Update_Native)
if(_zaparoo_update_binary_native_plugin_type STREQUAL "STATIC")
target_compile_definitions(
zaparoo_update_qmlplugin INTERFACE ZAPAROO_UPDATE_STATIC_NATIVE_PLUGIN
)
endif()
endif()
if(_zaparoo_update_binary_impl)
_zaparoo_update_import_library(
zaparoo_update_impl "${_zaparoo_update_binary_impl}"
"${_zaparoo_update_binary_impl_type}"
)
if(_zaparoo_update_binary_impl_type STREQUAL "STATIC"
AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_options(zaparoo_update_impl INTERFACE "-Wl,--allow-multiple-definition")
endif()
target_link_libraries(zaparoo_update_qmlplugin INTERFACE zaparoo_update_impl)
endif()
if(NOT TARGET Zaparoo_Update_Native)
add_library(Zaparoo_Update_Native INTERFACE)
endif()
set(ZAPAROO_UPDATE_RESOLVED_RUNTIME_ROOT "${runtime_root}" CACHE INTERNAL
"Resolved zaparoo-update runtime artifacts root."
)
list(APPEND QML_IMPORT_PATH "${runtime_root}/qml")
set(QML_IMPORT_PATH "${QML_IMPORT_PATH}" CACHE PATH "Extra QML import paths" FORCE)
message(STATUS "Using zaparoo-update binary runtime artifacts from ${runtime_root}")
endfunction()
function(zaparoo_update_runtime_qml_import_path out_var)
_zaparoo_update_resolve_runtime_root(_zaparoo_update_runtime_root)
if(_zaparoo_update_runtime_root)
set(${out_var} "${_zaparoo_update_runtime_root}/qml" PARENT_SCOPE)
else()
set(${out_var} "" PARENT_SCOPE)
endif()
endfunction()
function(zaparoo_update_add_qml_module)
if(TARGET zaparoo_update_qml)
return()
endif()
_zaparoo_update_host_qml_libraries(_zaparoo_update_host_libraries)
if(NOT ZAPAROO_UPDATE_IMPL_ROOT
OR NOT EXISTS "${ZAPAROO_UPDATE_IMPL_ROOT}/qml/UpdateScreen.qml")
_zaparoo_update_resolve_runtime_root(_zaparoo_update_runtime_root)
if(_zaparoo_update_runtime_root)
_zaparoo_update_add_binary_qml_module("${_zaparoo_update_runtime_root}")
return()
endif()
_zaparoo_update_runtime_package_name(_zaparoo_update_runtime_package)
if(_zaparoo_update_runtime_package)
set(
_zaparoo_update_runtime_hint
"Install/provide the ${_zaparoo_update_runtime_package} binary runtime package"
)
else()
set(
_zaparoo_update_runtime_hint
"Install/provide a zaparoo-update binary runtime package for ${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}"
)
endif()
message(
FATAL_ERROR
"zaparoo-update binary runtime artifacts were not found. "
"${_zaparoo_update_runtime_hint} "
"or, for private runtime artifact builds only, pass ZAPAROO_UPDATE_IMPL_ROOT explicitly."
)
endif()
set(_zaparoo_update_qml_root "${ZAPAROO_UPDATE_IMPL_ROOT}/qml")
set(_zaparoo_update_screen "${_zaparoo_update_qml_root}/UpdateScreen.qml")
set(_zaparoo_update_details_screen "${_zaparoo_update_qml_root}/UpdateDetailsScreen.qml")
set(_zaparoo_update_wait_indicator "${_zaparoo_update_qml_root}/UpdateWaitIndicator.qml")
set(_zaparoo_update_chevron_down "${_zaparoo_update_qml_root}/icons/ChevronDown.svg")
set(_zaparoo_update_chevron_right "${_zaparoo_update_qml_root}/icons/ChevronRight.svg")
set(_zaparoo_update_minus "${_zaparoo_update_qml_root}/icons/Minus.svg")
set(_zaparoo_update_plus "${_zaparoo_update_qml_root}/icons/Plus.svg")
set(_zaparoo_update_refresh "${_zaparoo_update_qml_root}/icons/Refresh.svg")
set(_zaparoo_update_warning_triangle_salmon
"${_zaparoo_update_qml_root}/icons/WarningTriangleSalmon.svg"
)
set_source_files_properties(
"${_zaparoo_update_screen}" PROPERTIES QT_RESOURCE_ALIAS "UpdateScreen.qml"
)
set_source_files_properties(
"${_zaparoo_update_details_screen}" PROPERTIES QT_RESOURCE_ALIAS "UpdateDetailsScreen.qml"
)
set_source_files_properties(
"${_zaparoo_update_wait_indicator}" PROPERTIES QT_RESOURCE_ALIAS "UpdateWaitIndicator.qml"
)
set_source_files_properties(
"${_zaparoo_update_chevron_down}" PROPERTIES QT_RESOURCE_ALIAS "icons/ChevronDown.svg"
)
set_source_files_properties(
"${_zaparoo_update_chevron_right}" PROPERTIES QT_RESOURCE_ALIAS "icons/ChevronRight.svg"
)
set_source_files_properties(
"${_zaparoo_update_minus}" PROPERTIES QT_RESOURCE_ALIAS "icons/Minus.svg"
)
set_source_files_properties(
"${_zaparoo_update_plus}" PROPERTIES QT_RESOURCE_ALIAS "icons/Plus.svg"
)
set_source_files_properties(
"${_zaparoo_update_refresh}" PROPERTIES QT_RESOURCE_ALIAS "icons/Refresh.svg"
)
set_source_files_properties(
"${_zaparoo_update_warning_triangle_salmon}" PROPERTIES QT_RESOURCE_ALIAS "icons/WarningTriangleSalmon.svg"
)
if(NOT ZAPAROO_UPDATE_QML_LIBRARY_TYPE MATCHES "^(STATIC|SHARED)$")
message(
FATAL_ERROR
"ZAPAROO_UPDATE_QML_LIBRARY_TYPE must be STATIC or SHARED, got '${ZAPAROO_UPDATE_QML_LIBRARY_TYPE}'"
)
endif()
qt_add_library(zaparoo_update_qml ${ZAPAROO_UPDATE_QML_LIBRARY_TYPE})
qt_add_qml_module(
zaparoo_update_qml
URI Zaparoo.Update
VERSION 1.0
QML_FILES
"${_zaparoo_update_screen}"
"${_zaparoo_update_details_screen}"
"${_zaparoo_update_wait_indicator}"
RESOURCES
"${_zaparoo_update_chevron_down}"
"${_zaparoo_update_chevron_right}"
"${_zaparoo_update_minus}"
"${_zaparoo_update_plus}"
"${_zaparoo_update_refresh}"
"${_zaparoo_update_warning_triangle_salmon}"
IMPORTS
Zaparoo.Theme
Zaparoo.Update.Host
Zaparoo.Update.Native
)
target_link_libraries(
zaparoo_update_qml
PUBLIC Qt6::Quick Qt6::Svg ${_zaparoo_update_host_libraries}
PRIVATE Zaparoo::CompileOptions
)
if(NOT TARGET Zaparoo_Update_Native)
add_library(Zaparoo_Update_Native INTERFACE)
endif()
endfunction()
function(zaparoo_update_configure_qml_test_target qml_files_var imports_var link_libraries_var)
set(_zaparoo_update_test_screen "${ZAPAROO_UPDATE_ROOT}/tests/ui/tst_update_screen.qml")
set_source_files_properties(
"${_zaparoo_update_test_screen}" PROPERTIES QT_RESOURCE_ALIAS "tst_update_screen.qml"
)
list(APPEND ${qml_files_var} "${_zaparoo_update_test_screen}")
list(APPEND ${imports_var} Zaparoo.Update Zaparoo.Update.Host Zaparoo.Update.Native)
list(APPEND ${link_libraries_var} zaparoo_update_qmlplugin zaparoo_update_hostplugin)
set(${qml_files_var} "${${qml_files_var}}" PARENT_SCOPE)
set(${imports_var} "${${imports_var}}" PARENT_SCOPE)
set(${link_libraries_var} "${${link_libraries_var}}" PARENT_SCOPE)
endfunction()
function(zaparoo_update_add_qml_tests test_target)
add_test(
NAME update_ui
COMMAND "$<TARGET_FILE:${test_target}>" -input "${ZAPAROO_UPDATE_ROOT}/tests/ui" -platform offscreen
)
set_tests_properties(update_ui PROPERTIES TIMEOUT 30)
endfunction()