summaryrefslogtreecommitdiffstats
path: root/cmake/QtModuleHelpers.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtModuleHelpers.cmake')
-rw-r--r--cmake/QtModuleHelpers.cmake156
1 files changed, 88 insertions, 68 deletions
diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake
index cf64e485e8..a5ff37d530 100644
--- a/cmake/QtModuleHelpers.cmake
+++ b/cmake/QtModuleHelpers.cmake
@@ -29,6 +29,7 @@ macro(qt_internal_get_internal_add_module_keywords option_args single_args multi
EXTERNAL_HEADERS_DIR
PRIVATE_HEADER_FILTERS
QPA_HEADER_FILTERS
+ HEADER_SYNC_SOURCE_DIRECTORY
${__default_target_info_args}
)
set(${multi_args}
@@ -111,6 +112,12 @@ endfunction()
# QPA_HEADER_FILTERS
# The regular expressions that filter QPA header files out of target sources.
# The value must use the following format 'regex1|regex2|regex3'.
+#
+# HEADER_SYNC_SOURCE_DIRECTORY
+# The source directory for header sync procedure. Header files outside this directory will be
+# ignored by syncqt. The specifying this directory allows to skip the parsing of the whole
+# CMAKE_CURRENT_SOURCE_DIR for the header files that needs to be synced and only parse the
+# single subdirectory, that meanwhile can be outside the CMAKE_CURRENT_SOURCE_DIR tree.
function(qt_internal_add_module target)
qt_internal_get_internal_add_module_keywords(
module_option_args
@@ -382,13 +389,18 @@ function(qt_internal_add_module target)
else()
set_property(TARGET ${target} APPEND PROPERTY EXPORT_PROPERTIES _qt_module_include_name)
set_target_properties("${target}" PROPERTIES
- _qt_module_include_name "${module_include_name}")
+ _qt_module_include_name "${module_include_name}"
+ _qt_module_has_headers ON
+ )
- # Use QT_BUILD_DIR for the syncqt call.
- # So we either write the generated files into the qtbase non-prefix build root, or the
- # module specific build root.
+ # Need to call qt_ensure_sync_qt to install syncqt.pl script.
qt_ensure_sync_qt()
- set(syncqt_full_command "${HOST_PERL}" -w "${QT_SYNCQT}"
+ # Repo uses old perl script to sync files.
+ if(NOT QT_USE_SYNCQT_CPP)
+ # Use QT_BUILD_DIR for the syncqt call.
+ # So we either write the generated files into the qtbase non-prefix build root, or the
+ # module specific build root.
+ set(syncqt_full_command "${HOST_PERL}" -w "${QT_SYNCQT}"
-quiet
-check-includes
-module "${module_include_name}"
@@ -396,18 +408,24 @@ function(qt_internal_add_module target)
-outdir "${QT_BUILD_DIR}"
-builddir "${PROJECT_BINARY_DIR}"
"${PROJECT_SOURCE_DIR}")
- message(STATUS "Running syncqt for module: '${module_include_name}' ")
- execute_process(COMMAND ${syncqt_full_command} RESULT_VARIABLE syncqt_ret)
- if(NOT syncqt_ret EQUAL 0)
- message(FATAL_ERROR "Failed to run syncqt, return code: ${syncqt_ret}")
- endif()
-
- set_target_properties("${target}" PROPERTIES
- _qt_module_has_headers ON)
-
- ### FIXME: Can we replace headers.pri?
- qt_read_headers_pri("${module_build_interface_include_dir}" "module_headers")
+ message(STATUS "Running syncqt for module: '${module_include_name}' ")
+ execute_process(COMMAND ${syncqt_full_command} RESULT_VARIABLE syncqt_ret)
+ if(NOT syncqt_ret EQUAL 0)
+ message(FATAL_ERROR "Failed to run syncqt, return code: ${syncqt_ret}")
+ endif()
+ ### FIXME: Can we replace headers.pri?
+ qt_read_headers_pri("${module_build_interface_include_dir}" "module_headers")
+ set_property(TARGET ${target} APPEND PROPERTY
+ _qt_module_timestamp_dependencies "${module_headers_generated}")
+ else()
+ set(sync_source_directory "${CMAKE_CURRENT_SOURCE_DIR}")
+ if(arg_HEADER_SYNC_SOURCE_DIRECTORY)
+ set(sync_source_directory "${arg_HEADER_SYNC_SOURCE_DIRECTORY}")
+ endif()
+ set_target_properties(${target} PROPERTIES
+ _qt_sync_source_directory "${sync_source_directory}")
+ endif()
# We should not generate export headers if module is defined as pure STATIC.
# Static libraries don't need to export their symbols, and corner cases when sources are
# also used in shared libraries, should be handled manually.
@@ -428,6 +446,9 @@ function(qt_internal_add_module target)
set(module_depends_header
"${module_build_interface_include_dir}/${module_include_name}Depends")
+ set_source_files_properties("${module_depends_header}" PROPERTIES GENERATED TRUE)
+ set_target_properties(${target} PROPERTIES _qt_module_depends_header
+ "${module_depends_header}")
if(NOT ${arg_HEADER_MODULE})
set(module_header "${module_build_interface_include_dir}/${module_include_name}")
set_property(TARGET "${target}" PROPERTY MODULE_HEADER
@@ -455,15 +476,17 @@ function(qt_internal_add_module target)
DESTINATION "${module_install_interface_include_dir}"
)
else()
- if(arg_EXTERNAL_HEADERS)
- set(module_headers_public "${arg_EXTERNAL_HEADERS}")
+ if(NOT QT_USE_SYNCQT_CPP)
+ if(arg_EXTERNAL_HEADERS)
+ set(module_headers_public "${arg_EXTERNAL_HEADERS}")
+ endif()
+ qt_internal_install_module_headers(${target}
+ PUBLIC
+ ${module_headers_public}
+ "${module_depends_header}"
+ "${module_header}"
+ )
endif()
- qt_internal_install_module_headers(${target}
- PUBLIC
- ${module_headers_public}
- "${module_depends_header}"
- "${module_header}"
- )
endif()
endif()
@@ -650,7 +673,7 @@ function(qt_internal_add_module target)
)
endif()
- if(NOT arg_HEADER_MODULE)
+ if(NOT arg_HEADER_MODULE AND NOT QT_USE_SYNCQT_CPP)
if(DEFINED module_headers_private)
qt_internal_add_linker_version_script("${target}" PRIVATE_HEADERS ${module_headers_private} ${module_headers_qpa})
else()
@@ -671,7 +694,7 @@ function(qt_internal_add_module target)
string(APPEND final_injections "${extra_library_injections} ")
endif()
- if(final_injections)
+ if(final_injections AND NOT QT_USE_SYNCQT_CPP)
qt_install_injections(${target} "${QT_BUILD_DIR}" "${QT_INSTALL_DIR}" ${final_injections})
endif()
@@ -853,10 +876,9 @@ set(QT_LIBINFIX \"${QT_LIBINFIX}\")")
endif()
endif()
- if(QT_FEATURE_headersclean AND NOT arg_NO_MODULE_HEADERS)
+ if(QT_FEATURE_headersclean AND NOT arg_NO_MODULE_HEADERS AND NOT QT_USE_SYNCQT_CPP)
qt_internal_add_headersclean_target(
${target}
- "${module_include_name}"
"${module_headers_clean}")
endif()
@@ -890,16 +912,29 @@ endfunction()
function(qt_finalize_module target)
qt_internal_collect_module_headers(module_headers ${target})
- set_property(TARGET ${target} APPEND PROPERTY
- _qt_module_timestamp_dependencies "${module_headers_public}")
# qt_internal_install_module_headers needs to be called before
# qt_finalize_framework_headers_copy, because the last uses the QT_COPIED_FRAMEWORK_HEADERS
- # property which supposed to be updated inside every qt_internal_install_module_headers call.
- qt_internal_install_module_headers(${target}
- PRIVATE ${module_headers_private}
- QPA ${module_headers_qpa}
- )
+ # property which supposed to be updated inside every qt_internal_install_module_headers
+ # call.
+ if(QT_USE_SYNCQT_CPP)
+ if(QT_FEATURE_headersclean)
+ qt_internal_add_headersclean_target(${target} "${module_headers_public}")
+ endif()
+ qt_internal_target_sync_headers(${target} "${module_headers_all}"
+ "${module_headers_generated}")
+ get_target_property(module_depends_header ${target} _qt_module_depends_header)
+ qt_internal_install_module_headers(${target}
+ PUBLIC ${module_headers_public} "${module_depends_header}"
+ PRIVATE ${module_headers_private}
+ QPA ${module_headers_qpa}
+ )
+ else()
+ qt_internal_install_module_headers(${target}
+ PRIVATE ${module_headers_private}
+ QPA ${module_headers_qpa}
+ )
+ endif()
qt_finalize_framework_headers_copy(${target})
qt_generate_prl_file(${target} "${INSTALL_LIBDIR}")
@@ -1098,6 +1133,13 @@ function(qt_internal_generate_cpp_global_exports target module_define_infix)
set(${out_public_header} "${generated_header_path}" PARENT_SCOPE)
target_sources(${target} PRIVATE "${generated_header_path}")
+ set_source_files_properties("${generated_header_path}" PROPERTIES GENERATED TRUE)
+ if(NOT QT_USE_SYNCQT_CPP)
+ qt_internal_install_module_headers(${target}
+ PUBLIC
+ "${generated_header_path}"
+ )
+ endif()
if(arg_GENERATE_PRIVATE_CPP_EXPORTS)
set(generated_private_header_path
@@ -1110,35 +1152,7 @@ function(qt_internal_generate_cpp_global_exports target module_define_infix)
set(${out_private_header} "${generated_private_header_path}" PARENT_SCOPE)
target_sources(${target} PRIVATE "${generated_private_header_path}")
- endif()
-
- get_target_property(is_framework ${target} FRAMEWORK)
-
- get_target_property(target_type ${target} TYPE)
- set(is_interface_lib 0)
- if(target_type STREQUAL "INTERFACE_LIBRARY")
- set(is_interface_lib 1)
- endif()
-
- set_property(TARGET ${target} APPEND PROPERTY
- _qt_module_timestamp_dependencies "${generated_header_path}")
-
- if(is_framework)
- if(NOT is_interface_lib)
- qt_copy_framework_headers(${target} PUBLIC "${generated_header_path}")
-
- if(arg_GENERATE_PRIVATE_CPP_EXPORTS)
- qt_copy_framework_headers(${target} PRIVATE "${generated_private_header_path}")
- endif()
- endif()
- else()
- qt_install(FILES "${generated_header_path}"
- DESTINATION "${module_install_interface_include_dir}")
-
- if(arg_GENERATE_PRIVATE_CPP_EXPORTS)
- qt_install(FILES "${generated_private_header_path}"
- DESTINATION "${module_install_interface_private_include_dir}")
- endif()
+ set_source_files_properties("${generated_private_header_path}" PROPERTIES GENERATED TRUE)
endif()
endfunction()
@@ -1180,10 +1194,9 @@ function(qt_internal_install_module_headers target)
qt_install(FILES ${arg_PRIVATE}
DESTINATION "${module_install_interface_private_include_dir}")
endif()
- endif()
-
- if(arg_QPA)
- qt_install(FILES ${arg_QPA} DESTINATION "${module_install_interface_qpa_include_dir}")
+ if(arg_QPA)
+ qt_install(FILES ${arg_QPA} DESTINATION "${module_install_interface_qpa_include_dir}")
+ endif()
endif()
endfunction()
@@ -1191,6 +1204,7 @@ function(qt_internal_collect_module_headers out_var target)
set(${out_var}_public "")
set(${out_var}_private "")
set(${out_var}_qpa "")
+ set(${out_var}_all "")
qt_internal_get_target_sources(sources ${target})
@@ -1203,6 +1217,7 @@ function(qt_internal_collect_module_headers out_var target)
if(NOT file_name MATCHES ".+\\.h$")
continue()
endif()
+ get_source_file_property(is_generated "${file_path}" GENERATED)
get_filename_component(file_path "${file_path}" ABSOLUTE)
get_filename_component(file_path "${file_path}" REALPATH)
list(APPEND ${out_var}_all "${file_path}")
@@ -1213,6 +1228,9 @@ function(qt_internal_collect_module_headers out_var target)
elseif(NOT public_filter OR file_name MATCHES "${public_filter}")
list(APPEND ${out_var}_public "${file_path}")
endif()
+ if(is_generated)
+ list(APPEND ${out_var}_generated "${file_path}")
+ endif()
endforeach()
set(header_types public private qpa)
@@ -1226,6 +1244,8 @@ function(qt_internal_collect_module_headers out_var target)
set(${out_var}_${header_type} "${${out_var}_${header_type}}" PARENT_SCOPE)
endforeach()
+ set(${out_var}_all "${${out_var}_all}" PARENT_SCOPE)
+ set(${out_var}_generated "${${out_var}_generated}" PARENT_SCOPE)
if(has_header_types_properties)
set_target_properties(${target} PROPERTIES ${has_header_types_properties})