diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2023-06-08 16:20:47 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-06-09 13:42:18 +0000 |
commit | 7ee240baa8353f56b9b8de790b95d35cfe489c35 (patch) | |
tree | 276bd5ed0d35bbbfe87baa805b406d27e6b8cd4a /cmake | |
parent | 9eb6d09a32a774c0eb20131b623a305524e3d741 (diff) |
Fix external header support in qtsync
We should sync external headers for 3rdpary projects
like freetype and harfbuzz-ng and keep the directory
structure.
Fixes: QTBUG-113416
Change-Id: Ie66edb9a21cff37ca6c8c68b6d225de6d8bbad81
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
(cherry picked from commit 65b0bc0eed10307cb2ab0a0c45eb6787bed96614)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtBuildInternals/QtBuildInternalsConfig.cmake | 6 | ||||
-rw-r--r-- | cmake/QtModuleHelpers.cmake | 2 | ||||
-rw-r--r-- | cmake/QtSyncQtHelpers.cmake | 20 |
3 files changed, 28 insertions, 0 deletions
diff --git a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake index 1ff5a29705..1c61c5fb01 100644 --- a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake +++ b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake @@ -434,6 +434,12 @@ macro(qt_build_repo_begin) add_custom_target(sync_headers) endif() + # The special target that we use to sync 3rd-party headers before the gn run when building + # qtwebengine in top-level builds. + if(NOT TARGET thirdparty_sync_headers) + add_custom_target(thirdparty_sync_headers) + endif() + # Add global qt_plugins, qpa_plugins and qpa_default_plugins convenience custom targets. # Internal executables will add a dependency on the qpa_default_plugins target, # so that building and running a test ensures it won't fail at runtime due to a missing qpa diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake index 41e0680e67..bd41a3dd06 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -447,6 +447,8 @@ function(qt_internal_add_module target) # If EXTERNAL_HEADERS_DIR is set we install the specified directory and keep the structure # without taking into the account the CMake source tree and syncqt outputs. if(arg_EXTERNAL_HEADERS_DIR) + set_property(TARGET ${target} + PROPERTY _qt_external_headers_dir "${arg_EXTERNAL_HEADERS_DIR}") qt_install(DIRECTORY "${arg_EXTERNAL_HEADERS_DIR}/" DESTINATION "${module_install_interface_include_dir}" ) diff --git a/cmake/QtSyncQtHelpers.cmake b/cmake/QtSyncQtHelpers.cmake index 9fe18a2d50..56cfab13c1 100644 --- a/cmake/QtSyncQtHelpers.cmake +++ b/cmake/QtSyncQtHelpers.cmake @@ -149,6 +149,21 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge set(syncqt_args_rsp "${binary_dir_real}/${target}_syncqt_args") qt_configure_file(OUTPUT "${syncqt_args_rsp}" CONTENT "${syncqt_args_string}") + get_target_property(external_headers_dir ${target} _qt_external_headers_dir) + if(external_headers_dir) + if(NOT IS_ABSOLUTE "${external_headers_dir}") + get_filename_component(external_headers_dir "${external_headers_dir}" ABSOLUTE) + endif() + if(EXISTS "${external_headers_dir}") + set(external_headers_dir_copy_cmd + COMMAND + ${CMAKE_COMMAND} + -E copy_directory + "${external_headers_dir}" + "${module_build_interface_include_dir}" + ) + endif() + endif() add_custom_command( OUTPUT ${syncqt_outputs} @@ -156,6 +171,7 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge ${QT_CMAKE_EXPORT_NAMESPACE}::syncqt "@${syncqt_args_rsp}" ${build_time_syncqt_arguments} + ${external_headers_dir_copy_cmd} COMMAND ${CMAKE_COMMAND} -E touch "${syncqt_timestamp}" DEPENDS @@ -172,6 +188,9 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge ) add_dependencies(sync_headers ${target}_sync_headers) + if(is_3rd_party_library) + add_dependencies(thirdparty_sync_headers ${target}_sync_headers) + endif() # This target is required when building docs, to make all header files and their aliases # available for qdoc. # ${target}_sync_headers is added as dependency to make sure that @@ -184,6 +203,7 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::syncqt "@${syncqt_all_args_rsp}" + ${external_headers_dir_copy_cmd} DEPENDS ${module_headers} ${syncqt_all_args_rsp} |