function(qt_maintenance_tool_get_component_platform platform_dir component_platform) # Mapping between platform file directory and component platform set(map_llvm-mingw_64 win64_llvm_mingw) set(map_mingw_64 win64_mingw) set(map_msvc2019_64 win64_msvc2019_64) set(map_msvc2022_64 win64_msvc2022_64) set(map_msvc2022_arm64 win64_msvc2022_arm64) set(map_gcc_64 linux_gcc_64) set(map_gcc_arm64 linux_gcc_arm64) set(map_ios ios) set(map_macos clang_64) set(map_android_arm64_v8a android) set(map_android_armv7 android) set(map_android_x86 android) set(map_android_x86_64 android) set(map_wasm_multithread wasm_multithread) set(map_wasm_singlethread wasm_singlethread) if (platform_dir STREQUAL "msvc2022_arm64" AND QT_HOST_PATH) set(${component_platform} "win64_msvc2022_arm64_cross_compiled" PARENT_SCOPE) return() endif() set(${component_platform} ${map_${platform_dir}} PARENT_SCOPE) endfunction() function(qt_maintenance_tool_get_addons addon_list) set(${addon_list} qt3d qt5compat qtcharts qtconnectivity qtdatavis3d qtgraphs qtgrpc qthttpserver qtimageformats qtlocation qtlottie qtmultimedia qtnetworkauth qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech qtvirtualkeyboard qtwebchannel qtwebsockets qtwebview # found in commercial version qtapplicationmanager qtinterfraceframework qtlanguageserver qtmqtt qtstatemachine qtopcua tqtc-qtvncserver PARENT_SCOPE ) endfunction() function(qt_maintenance_tool_get_extensions extensions) set(${extensions} qtinsighttracker qtpdf qtwebengine PARENT_SCOPE ) endfunction() function(qt_maintenance_tool_get_standalone_addons standalone_addons_list) set(${standalone_addons_list} qtquick3d qt5compat qtshadertools qtquicktimeline PARENT_SCOPE ) endfunction() function(qt_maintenance_tool_remove_installed_components components_list) set(actual_components_list ${${components_list}}) execute_process( COMMAND "${QT_MAINTENANCE_TOOL}" list RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE output TIMEOUT 600 ) if (NOT result EQUAL 0) message(WARNING "Qt MaintenanceTool returned an error.\n${output}") set(${components_list} "" PARENT_SCOPE) return() endif() foreach(component_name IN LISTS actual_components_list) string(FIND "${output}" "= 20." ) # We don't create an explicit policy stack entry before changing the policy, because setting # the policy value bubbles it up to the parent find_package() scope, which is fine, that's # exactly the scope we want to modify. cmake_policy(SET CMP0155 OLD) endif() if (${package_name} MATCHES "^Qt([5-9])(.*)$") set(__qt_dependency_qt_major_version ${CMAKE_MATCH_1}) set(__qt_dependency_qt_package_name ${CMAKE_MATCH_2}) # https://cmake.org/cmake/help/latest/command/find_package.html set(__qt_dependency_options CONFIG NO_MODULE MODULE REQUIRED EXACT QUIET GLOBAL NO_POLICY_SCOPE NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_SYSTEM_PACKAGE_REGISTRY CMAKE_FIND_ROOT_PATH_BOTH ONLY_CMAKE_FIND_ROOT_PATH NO_CMAKE_FIND_ROOT_PATH ) set(__qt_dependency_oneValueArgs REGISTRY_VIEW) set(__qt_dependency_multiValueArgs COMPONENTS OPTIONAL_COMPONENTS NAMES CONFIGS HINTS PATHS PATH_SUFFIXES) cmake_parse_arguments(__qt_dependency_arg "${__qt_dependency_options}" "${__qt_dependency_oneValueArgs}" "${__qt_dependency_multiValueArgs}" ${ARGN}) if (__qt_dependency_arg_REQUIRED AND __qt_dependency_arg_COMPONENTS) # Install missing COMPONENTS. set(__qt_dependency_pkgs_to_install "") foreach(pkg IN LISTS __qt_dependency_arg_COMPONENTS) find_package(Qt${__qt_dependency_qt_major_version}${pkg} PATHS ${CMAKE_PREFIX_PATH} ${CMAKE_MODULE_PATH} NO_DEFAULT_PATH BYPASS_PROVIDER QUIET) if (NOT Qt${__qt_dependency_qt_major_version}${pkg}_FOUND) list(APPEND __qt_dependency_pkgs_to_install ${pkg}) endif() endforeach() if (__qt_dependency_pkgs_to_install) qt_maintenance_tool_install("${__qt_dependency_qt_major_version}" "${__qt_dependency_pkgs_to_install}") endif() elseif(__qt_dependency_arg_REQUIRED AND NOT __qt_dependency_qt_package_name) # Install the Desktop package if Qt::Core is missing find_package(Qt${__qt_dependency_qt_major_version}Core PATHS ${CMAKE_PREFIX_PATH} ${CMAKE_MODULE_PATH} NO_DEFAULT_PATH BYPASS_PROVIDER QUIET) if (NOT Qt${__qt_dependency_qt_major_version}$Core_FOUND) qt_maintenance_tool_install("${__qt_dependency_qt_major_version}" Core) endif() endif() find_package(${package_name} ${ARGN} PATHS ${CMAKE_PREFIX_PATH} ${CMAKE_MODULE_PATH} NO_DEFAULT_PATH BYPASS_PROVIDER QUIET) if (NOT ${package_name}_FOUND AND __qt_dependency_arg_REQUIRED) qt_maintenance_tool_install("${__qt_dependency_qt_major_version}" "${__qt_dependency_qt_package_name}") find_package(${package_name} ${ARGN} BYPASS_PROVIDER) endif() else() find_package(${package_name} ${ARGN} BYPASS_PROVIDER) endif() endmacro() cmake_language( SET_DEPENDENCY_PROVIDER qt_maintenance_tool_dependency SUPPORTED_METHODS FIND_PACKAGE )