diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-06-16 10:39:01 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-06-16 17:56:35 +0200 |
commit | 4ab54320817ebbb465af343514d21139a654aed3 (patch) | |
tree | abcbe92ab74281363c563d90f8e25b3a66a30d5f /cmake | |
parent | bd2a14ff9897b8bda0e9bd21f8472b1a5a7dd6f6 (diff) |
CMake: Write object libs of Qt resources to .prl files
Since commit e343affd634 we're creating object libraries for Qt
resources in static libraries. Those must be reflected in the
generated .prl files for static builds of Qt.
In qt_add_resource, we now calculate the install locations of the
object files of rcc-generated C++ files and save them in the target
property QT_RCC_OBJECTS. This property is then passed to
QtFinishPrlFile to write the object file paths to the .prl file.
Change-Id: Ic383892d723d02fc91f712bc2dbcbc90babad074
Reviewed-by: Simon Hausmann <hausmann@gmail.com>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtBuild.cmake | 30 | ||||
-rw-r--r-- | cmake/QtFinishPrlFile.cmake | 7 |
2 files changed, 35 insertions, 2 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 3ab3e80e0d..036a291725 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -2918,6 +2918,15 @@ function(qt_generate_prl_file target install_dir) return() endif() + get_target_property(rcc_objects ${target} QT_RCC_OBJECTS) + if(rcc_objects) + if(QT_WILL_INSTALL) + list(TRANSFORM rcc_objects PREPEND "$$[QT_INSTALL_LIBS]/") + endif() + else() + unset(rcc_objects) + endif() + unset(prl_libs) qt_collect_libs(${target} prl_libs) @@ -2940,7 +2949,8 @@ function(qt_generate_prl_file target install_dir) file(GENERATE OUTPUT "${prl_file_name}" CONTENT - "QMAKE_PRL_BUILD_DIR = ${CMAKE_CURRENT_BINARY_DIR} + "RCC_OBJECTS = ${rcc_objects} +QMAKE_PRL_BUILD_DIR = ${CMAKE_CURRENT_BINARY_DIR} QMAKE_PRL_TARGET = $<TARGET_FILE_NAME:${target}> QMAKE_PRL_CONFIG = ${prl_config} QMAKE_PRL_VERSION = ${PROJECT_VERSION} @@ -3483,6 +3493,24 @@ function(qt_add_resource target resourceName) EXPORT "${INSTALL_CMAKE_NAMESPACE}${target}Targets" DESTINATION ${INSTALL_LIBDIR} ) + foreach(out_target ${out_targets}) + get_target_property(resource_name ${out_target} QT_RESOURCE_NAME) + if(NOT resource_name) + continue() + endif() + if(QT_WILL_INSTALL) + # Compute the install location of the rcc object file. + # This is the relative path below the install destination (install_prefix/lib). + # See CMake's computeInstallObjectDir function. + set(object_file_name "qrc_${resource_name}.cpp${CMAKE_CXX_OUTPUT_EXTENSION}") + qt_path_join(rcc_object_file_path + "objects-$<CONFIG>" ${out_target} .rcc "${object_file_name}") + else() + # In a non-prefix build we use the object file paths right away. + set(rcc_object_file_path $<TARGET_OBJECTS:$<TARGET_NAME:${out_target}>>) + endif() + set_property(TARGET ${target} APPEND PROPERTY QT_RCC_OBJECTS "${rcc_object_file_path}") + endforeach() endif() endfunction() diff --git a/cmake/QtFinishPrlFile.cmake b/cmake/QtFinishPrlFile.cmake index c7c913d4ae..4927761674 100644 --- a/cmake/QtFinishPrlFile.cmake +++ b/cmake/QtFinishPrlFile.cmake @@ -26,7 +26,9 @@ endfunction() file(STRINGS "${IN_FILE}" lines) set(content "") foreach(line ${lines}) - if(line MATCHES "^QMAKE_PRL_LIBS_FOR_CMAKE = (.*)") + if(line MATCHES "^RCC_OBJECTS = (.*)") + set(rcc_objects ${CMAKE_MATCH_1}) + elseif(line MATCHES "^QMAKE_PRL_LIBS_FOR_CMAKE = (.*)") unset(adjusted_libs) foreach(lib ${CMAKE_MATCH_1}) if("${lib}" STREQUAL "") @@ -47,6 +49,9 @@ foreach(line ${lines}) list(APPEND adjusted_libs "${lib}") endif() endforeach() + if(rcc_objects) + list(APPEND adjusted_libs ${rcc_objects}) + endif() list(JOIN adjusted_libs " " adjusted_libs_for_qmake) string(APPEND content "QMAKE_PRL_LIBS = ${adjusted_libs_for_qmake}\n") string(APPEND content "QMAKE_PRL_LIBS_FOR_CMAKE = ${adjusted_libs}\n") |