diff options
Diffstat (limited to 'cmake/QtSyncQtHelpers.cmake')
-rw-r--r-- | cmake/QtSyncQtHelpers.cmake | 71 |
1 files changed, 59 insertions, 12 deletions
diff --git a/cmake/QtSyncQtHelpers.cmake b/cmake/QtSyncQtHelpers.cmake index cbab85b19a..0188b87c6a 100644 --- a/cmake/QtSyncQtHelpers.cmake +++ b/cmake/QtSyncQtHelpers.cmake @@ -61,13 +61,6 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge set(is_framework FALSE) if(NOT is_interface_lib) get_target_property(is_framework ${target} FRAMEWORK) - if(is_framework) - qt_internal_get_framework_info(fw ${target}) - get_target_property(fw_output_base_dir ${target} LIBRARY_OUTPUT_DIRECTORY) - set(framework_args "-framework" - "-frameworkIncludeDir" "${fw_output_base_dir}/${fw_versioned_header_dir}" - ) - endif() endif() qt_internal_get_qt_all_known_modules(known_modules) @@ -79,6 +72,8 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge endif() get_target_property(qpa_filter_regex ${target} _qt_module_qpa_headers_filter_regex) + get_target_property(rhi_filter_regex ${target} _qt_module_rhi_headers_filter_regex) + get_target_property(ssg_filter_regex ${target} _qt_module_ssg_headers_filter_regex) get_target_property(private_filter_regex ${target} _qt_module_private_headers_filter_regex) # We need to use the real paths since otherwise it may lead to the invalid work of the @@ -96,6 +91,18 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge ) endif() + if(rhi_filter_regex) + set(rhi_filter_argument + -rhiHeadersFilter "${rhi_filter_regex}" + ) + endif() + + if(ssg_filter_regex) + set(ssg_filter_argument + -ssgHeadersFilter "${ssg_filter_regex}" + ) + endif() + set(common_syncqt_arguments -module "${module}" -sourceDir "${source_dir_real}" @@ -104,7 +111,12 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge -includeDir "${module_build_interface_include_dir}" -privateIncludeDir "${module_build_interface_private_include_dir}" -qpaIncludeDir "${module_build_interface_qpa_include_dir}" + -rhiIncludeDir "${module_build_interface_rhi_include_dir}" + -ssgIncludeDir "${module_build_interface_ssg_include_dir}" + -generatedHeaders ${module_headers_generated} ${qpa_filter_argument} + ${rhi_filter_argument} + ${ssg_filter_argument} ${public_namespaces_filter} ${non_qt_module_argument} ${internal_module_argument} @@ -138,18 +150,30 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge set(syncqt_args "${common_syncqt_arguments}") list(APPEND syncqt_args - ${common_syncqt_arguments} -headers ${module_headers} - -generatedHeaders ${module_headers_generated} -stagingDir "${syncqt_staging_dir}" -knownModules ${known_modules} - ${framework_args} ${version_script_args} ) list(JOIN syncqt_args "\n" syncqt_args_string) 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} @@ -157,22 +181,36 @@ 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 ${syncqt_args_rsp} ${module_headers} ${QT_CMAKE_EXPORT_NAMESPACE}::syncqt + "$<GENEX_EVAL:$<TARGET_PROPERTY:${target},_qt_internal_sync_headers_deps>>" COMMENT "Running syncqt.cpp for module: ${module}" VERBATIM ) + + set(add_sync_headers_to_all "") + if(is_interface_lib) + set(add_sync_headers_to_all ALL) + endif() + add_custom_target(${target}_sync_headers + ${add_sync_headers_to_all} DEPENDS ${syncqt_outputs} ) add_dependencies(sync_headers ${target}_sync_headers) + 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 @@ -185,6 +223,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} @@ -198,7 +237,7 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge endif() add_dependencies(sync_all_public_headers ${target}_sync_all_public_headers) - if(NOT is_3rd_party_library AND NOT is_framework) + if(NOT is_3rd_party_library AND NOT is_framework AND module_headers) # Install all the CaMeL style aliases of header files from the staging directory in one rule qt_install(DIRECTORY "${syncqt_staging_dir}/" DESTINATION "${module_install_interface_include_dir}" @@ -220,7 +259,7 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge # Run sync Qt first time at configure step to make all header files available for the code model # of IDEs. get_property(synced_modules GLOBAL PROPERTY _qt_synced_modules) - if(NOT "${module}" IN_LIST synced_modules) + if(NOT "${module}" IN_LIST synced_modules AND QT_SYNC_HEADERS_AT_CONFIGURE_TIME) message(STATUS "Running syncqt.cpp for module: ${module}") get_target_property(syncqt_location ${QT_CMAKE_EXPORT_NAMESPACE}::syncqt LOCATION) execute_process( @@ -232,6 +271,14 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge ERROR_VARIABLE syncqt_output ) if(NOT syncqt_result EQUAL 0) + if(syncqt_output STREQUAL "") + string(JOIN "" syncqt_output "The syncqt process exited with code ${syncqt_result}" + " and without any useful output. This can happen if syncqt crashes due to the" + " incompatibilities with the standard C++ library located by either PATH or" + " LD_LIBRARY_PATH environment variables. Please make sure that PATH or" + " LD_LIBRARY_PATH don't point to the standard libraries different from the one you" + " use for building Qt.") + endif() message(FATAL_ERROR "syncqt.cpp failed for module ${module}:\n${syncqt_output}") endif() |