summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-06-16 10:39:01 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2020-06-16 17:56:35 +0200
commit4ab54320817ebbb465af343514d21139a654aed3 (patch)
treeabcbe92ab74281363c563d90f8e25b3a66a30d5f /cmake
parentbd2a14ff9897b8bda0e9bd21f8472b1a5a7dd6f6 (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.cmake30
-rw-r--r--cmake/QtFinishPrlFile.cmake7
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")