From 082a7c4655acce06baf4e2bce43b281875ef3f68 Mon Sep 17 00:00:00 2001 From: Kevin Funk Date: Mon, 11 Feb 2019 17:09:03 +0100 Subject: [PATCH] cmake: Parse SYNCQT.INJECTIONS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows to install headers such as QtCore/qtconfig.h, QtGui/qvulkanfunctions.h, etc. Change-Id: I93f384cdc8bbee07fab316d7e232aae1d209f33e Reviewed-by: Jean-Michaƫl Celerier Reviewed-by: Simon Hausmann --- cmake/QtBuild.cmake | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index ec14ad652dc..398d58b13f8 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -321,6 +321,30 @@ function(qt_internal_library_deprecation_level result) endfunction() +function(qt_install_injections module) + set(injections ${ARGN}) + # examples: + # SYNCQT.INJECTIONS = src/corelib/global/qconfig.h:qconfig.h:QtConfig src/corelib/global/qconfig_p.h:5.12.0/QtCore/private/qconfig_p.h + # SYNCQT.INJECTIONS = src/gui/vulkan/qvulkanfunctions.h:^qvulkanfunctions.h:QVulkanFunctions:QVulkanDeviceFunctions src/gui/vulkan/qvulkanfunctions_p.h:^5.12.0/QtGui/private/qvulkanfunctions_p.h + separate_arguments(injections UNIX_COMMAND "${injections}") + foreach(injection ${injections}) + string(REPLACE ":" ";" injection ${injection}) + list(GET injection 0 file) + list(GET injection 1 destination) + string(REGEX REPLACE "^\\^" "" destination "${destination}") + list(REMOVE_AT injection 0 1) + set(fwd_hdrs ${injection}) + get_filename_component(destinationdir ${destination} DIRECTORY) + get_filename_component(destinationname ${destination} NAME) + install(FILES ${PROJECT_BINARY_DIR}/${file} DESTINATION ${INSTALL_INCLUDEDIR}/${module}/${destinationdir} RENAME ${destinationname}) + foreach(fwd_hdr ${fwd_hdrs}) + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${fwd_hdr}" CONTENT "#include \"${destinationname}\"\n") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${fwd_hdr}" DESTINATION ${INSTALL_INCLUDEDIR}/${module}/${destinationdir}) + endforeach() + endforeach() +endfunction() + + function(qt_read_headers_pri target resultVarPrefix) qt_internal_module_info(module "${target}") file(STRINGS "${module_include_dir}/headers.pri" headers_pri_contents) @@ -337,7 +361,8 @@ function(qt_read_headers_pri target resultVarPrefix) foreach(generated_header ${generated_module_headers}) list(APPEND public_module_headers "${module_include_dir}/${generated_header}") endforeach() - # Ignore INJECTIONS! + elseif("${line}" MATCHES "SYNCQT.INJECTIONS = (.*)") + set(injections "${CMAKE_MATCH_1}") elseif("${line}" MATCHES "SYNCQT.([A-Z_]+)_HEADER_FILES = (.+)") set(prefix "${CMAKE_MATCH_1}") string(TOLOWER "${prefix}" prefix) @@ -348,6 +373,7 @@ function(qt_read_headers_pri target resultVarPrefix) endforeach() set(${resultVarPrefix}_public "${public_module_headers}" PARENT_SCOPE) set(${resultVarPrefix}_private "${private_module_headers}" PARENT_SCOPE) + set(${resultVarPrefix}_injections "${injections}" PARENT_SCOPE) endfunction() @@ -416,6 +442,7 @@ function(add_qt_module target) set_property(TARGET "${target}" APPEND PROPERTY PUBLIC_HEADER "${module_headers_public}") set_property(TARGET "${target}" APPEND PROPERTY PUBLIC_HEADER "${module_include_dir}/${module}Depends") set_property(TARGET "${target}" APPEND PROPERTY PRIVATE_HEADER "${module_headers_private}") + qt_install_injections("${module}" ${module_headers_injections}) endif() set_target_properties("${target}" PROPERTIES