diff options
Diffstat (limited to 'src/core/api/Qt6WebEngineCoreDeploySupport.cmake')
-rw-r--r-- | src/core/api/Qt6WebEngineCoreDeploySupport.cmake | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/core/api/Qt6WebEngineCoreDeploySupport.cmake b/src/core/api/Qt6WebEngineCoreDeploySupport.cmake new file mode 100644 index 000000000..e67eb212b --- /dev/null +++ b/src/core/api/Qt6WebEngineCoreDeploySupport.cmake @@ -0,0 +1,173 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +# NOTE: This code should only ever be executed in script mode. It expects to be +# used either as part of an install(CODE) call or called by a script +# invoked via cmake -P as a POST_BUILD step. It would not normally be +# included directly, it should be pulled in automatically by the deploy +# support set up by qtbase. + +cmake_minimum_required(VERSION 3.16...3.21) + +_qt_internal_add_deployment_hook(_qt_internal_webenginecore_deploy_hook) + +if(NOT QT_DEPLOY_WEBENGINECORE_RESOURCES_DIR) + set(QT_DEPLOY_WEBENGINECORE_RESOURCES_DIR "resources") +endif() + +function(_qt_internal_webenginecore_status_message) + if(__QT_DEPLOY_VERBOSE) + message(STATUS ${ARGV}) + endif() +endfunction() + +function(_qt_internal_webenginecore_deploy_hook) + set(no_value_options "") + set(single_value_options "") + set(multi_value_options RESOLVED_DEPENDENCIES) + cmake_parse_arguments(PARSE_ARGV 0 arg + "${no_value_options}" "${single_value_options}" "${multi_value_options}" + ) + + set(webenginecore_dependency_found FALSE) + foreach(dependency IN LISTS arg_RESOLVED_DEPENDENCIES) + if(dependency MATCHES "/libQt[0-9]+WebEngineCore[^/]+") + set(webenginecore_dependency_found TRUE) + break() + endif() + endforeach() + + if(NOT webenginecore_dependency_found) + _qt_internal_webenginecore_status_message( + "No QtWebEngineCore dependency found. " + "Skipping deployment of QtWebEngine assets." + ) + return() + endif() + + _qt_internal_deploy_webenginecore() +endfunction() + +function(_qt_internal_deploy_webenginecore) + _qt_internal_deploy_webenginecore_binary() + _qt_internal_deploy_webenginecore_data() + _qt_internal_deploy_webenginecore_translations() +endfunction() + +function(_qt_internal_deploy_webenginecore_binary) + _qt_internal_webenginecore_status_message("Deploying the WebEngineCore process binary") + + set(candidates "QtWebEngineProcess") + if(__QT_DEPLOY_ACTIVE_CONFIG STREQUAL "Debug" AND __QT_DEPLOY_SYSTEM_NAME STREQUAL "Windows") + list(PREPEND candidates "QtWebEngineProcessd") + endif() + + list(TRANSFORM candidates + PREPEND "${__QT_DEPLOY_QT_INSTALL_PREFIX}/${__QT_DEPLOY_QT_INSTALL_LIBEXECS}/" + ) + + set(process_path "") + foreach(file_path IN LISTS candidates) + if(EXISTS "${file_path}") + set(process_path "${file_path}") + break() + endif() + endforeach() + + set(install_destination "${QT_DEPLOY_PREFIX}/") + if(__QT_DEPLOY_SYSTEM_NAME STREQUAL "Windows") + string(APPEND install_destination "${QT_DEPLOY_BIN_DIR}") + else() + string(APPEND install_destination "${QT_DEPLOY_LIBEXEC_DIR}") + endif() + file(INSTALL "${process_path}" DESTINATION "${install_destination}") + + get_filename_component(process_file_name "${process_path}" NAME) + if(CMAKE_VERSION GREATER_EQUAL "3.19") + file(CHMOD "${install_destination}/${process_file_name}" + PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE + GROUP_EXECUTE GROUP_READ + WORLD_EXECUTE WORLD_READ + ) + else() + execute_process( + COMMAND chmod 0755 "${install_destination}/${process_file_name}" + ) + endif() +endfunction() + +function(_qt_internal_deploy_webenginecore_data) + _qt_internal_webenginecore_status_message("Deploying the WebEngineCore data files") + set(data_files + icudtl.dat + qtwebengine_devtools_resources.pak + qtwebengine_resources.pak + qtwebengine_resources_100p.pak + qtwebengine_resources_200p.pak + ) + get_filename_component(resources_dir "resources" ABSOLUTE + BASE_DIR "${__QT_DEPLOY_QT_INSTALL_PREFIX}/${__QT_DEPLOY_QT_INSTALL_DATA}" + ) + + _qt_internal_webenginecore_find_v8_context_snapshot( + snapshot_file + RESOURCES_DIR "${resources_dir}" + ) + if(NOT snapshot_file STREQUAL "") + list(APPEND data_files "${snapshot_file}") + endif() + + get_filename_component(install_destination "${QT_DEPLOY_WEBENGINECORE_RESOURCES_DIR}" ABSOLUTE + BASE_DIR "${QT_DEPLOY_PREFIX}/${QT_DEPLOY_DATA_DIR}" + ) + foreach(data_file IN LISTS data_files) + file(INSTALL "${resources_dir}/${data_file}" DESTINATION "${install_destination}") + endforeach() +endfunction() + +# The V8 snapshot file comes as debug or release build. Multi-config builds have both, a self-built +# Qt might only have the debug one. +# +# This function returns the file name of the V8 context snapshot file in ${out_var}. +# If no snapshot could be found, ${out_var} is the empty string. +function(_qt_internal_webenginecore_find_v8_context_snapshot out_var) + set(no_value_options "") + set(single_value_options RESOURCES_DIR) + set(multi_value_options "") + cmake_parse_arguments(PARSE_ARGV 1 arg + "${no_value_options}" "${single_value_options}" "${multi_value_options}" + ) + + set(result "") + set(candidates + v8_context_snapshot.bin + v8_context_snapshot.debug.bin + ) + if(__QT_DEPLOY_QT_IS_MULTI_CONFIG_BUILD_WITH_DEBUG + AND __QT_DEPLOY_ACTIVE_CONFIG STREQUAL "Debug") + # Favor the debug version of the snapshot. + list(REVERSE candidates) + endif() + foreach(candidate IN LISTS candidates) + if(EXISTS "${arg_RESOURCES_DIR}/${candidate}") + set(result "${candidate}") + break() + endif() + endforeach() + set("${out_var}" "${result}" PARENT_SCOPE) +endfunction() + +function(_qt_internal_deploy_webenginecore_translations) + _qt_internal_webenginecore_status_message("Deploying the WebEngineCore translations") + + get_filename_component(locales_dir "qtwebengine_locales" ABSOLUTE + BASE_DIR "${__QT_DEPLOY_QT_INSTALL_PREFIX}/${__QT_DEPLOY_QT_INSTALL_TRANSLATIONS}" + ) + get_filename_component(install_destination "qtwebengine_locales" ABSOLUTE + BASE_DIR "${QT_DEPLOY_PREFIX}/${QT_DEPLOY_TRANSLATIONS_DIR}" + ) + file(GLOB locale_files "${locales_dir}/*.pak") + foreach(locale_file IN LISTS locale_files) + file(INSTALL "${locale_file}" DESTINATION "${install_destination}") + endforeach() +endfunction() |