diff --git a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake index 14dc4c6955a..e07c77c85a2 100644 --- a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake +++ b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake @@ -454,6 +454,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 e4dccd7f320..2cf6d824220 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -469,6 +469,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 de78edbbc4d..b8eead1a9a9 100644 --- a/cmake/QtSyncQtHelpers.cmake +++ b/cmake/QtSyncQtHelpers.cmake @@ -158,6 +158,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} @@ -165,6 +180,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 @@ -184,6 +200,9 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge set_target_properties(${target} PROPERTIES _qt_internal_sync_headers_target ${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 @@ -196,6 +215,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}