summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/Qt6CoreMacros.cmake68
-rw-r--r--tests/auto/cmake/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt32
-rw-r--r--tests/auto/cmake/test_add_resources_binary_generated/main.cpp41
-rw-r--r--tests/auto/cmake/test_add_resources_binary_generated/resource1.txt1
-rw-r--r--tests/auto/cmake/test_add_resources_binary_generated/resource2.txt1
6 files changed, 126 insertions, 20 deletions
diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake
index 926c63736d..c70fdbef32 100644
--- a/src/corelib/Qt6CoreMacros.cmake
+++ b/src/corelib/Qt6CoreMacros.cmake
@@ -1108,7 +1108,11 @@ endfunction()
#
function(_qt_internal_process_resource target resourceName)
- cmake_parse_arguments(rcc "" "PREFIX;LANG;BASE;OUTPUT_TARGETS" "FILES;OPTIONS" ${ARGN})
+ cmake_parse_arguments(rcc "" "PREFIX;LANG;BASE;OUTPUT_TARGETS;DESTINATION" "FILES;OPTIONS" ${ARGN})
+
+ if("${rcc_OPTIONS}" MATCHES "-binary")
+ set(isBinary TRUE)
+ endif()
string(REPLACE "/" "_" resourceName ${resourceName})
string(REPLACE "." "_" resourceName ${resourceName})
@@ -1162,8 +1166,8 @@ function(_qt_internal_process_resource target resourceName)
return()
endif()
list(APPEND output_targets ${output_target_quick})
- set(generatedResourceFile "${CMAKE_CURRENT_BINARY_DIR}/.rcc/generated_${newResourceName}.qrc")
- set(generatedSourceCode "${CMAKE_CURRENT_BINARY_DIR}/.rcc/qrc_${newResourceName}.cpp")
+ set(generatedBaseName "generated_${newResourceName}")
+ set(generatedResourceFile "${CMAKE_CURRENT_BINARY_DIR}/.rcc/${generatedBaseName}.qrc")
# Generate .qrc file:
@@ -1210,10 +1214,8 @@ function(_qt_internal_process_resource target resourceName)
set(qt_core_configure_file_contents "${qrcContents}")
configure_file("${template_file}" "${generatedResourceFile}")
- set_property(TARGET ${target} APPEND PROPERTY _qt_generated_qrc_files "${generatedResourceFile}")
+ set(rccArgs --name "${newResourceName}" "${generatedResourceFile}")
- set(rccArgs --name "${newResourceName}"
- --output "${generatedSourceCode}" "${generatedResourceFile}")
if(rcc_OPTIONS)
list(APPEND rccArgs ${rcc_OPTIONS})
endif()
@@ -1228,10 +1230,29 @@ function(_qt_internal_process_resource target resourceName)
list(APPEND rccArgs "--no-zstd")
endif()
+ set_property(SOURCE "${generatedResourceFile}" PROPERTY SKIP_AUTOGEN ON)
+
+ # Set output file name for rcc command
+ if(isBinary)
+ set(generatedOutfile "${CMAKE_CURRENT_BINARY_DIR}/${generatedBaseName}.rcc")
+ if(rcc_DESTINATION)
+ # Add .rcc suffix if it's not specified by user
+ get_filename_component(destinationRccExt "${rcc_DESTINATION}" LAST_EXT)
+ if("${destinationRccExt}" STREQUAL ".rcc")
+ set(generatedOutfile "${rcc_DESTINATION}")
+ else()
+ set(generatedOutfile "${rcc_DESTINATION}.rcc")
+ endif()
+ endif()
+ else()
+ set(generatedOutfile "${CMAKE_CURRENT_BINARY_DIR}/.rcc/qrc_${newResourceName}.cpp")
+ endif()
+
+ list(PREPEND rccArgs --output "${generatedOutfile}")
+
# Process .qrc file:
- add_custom_command(OUTPUT "${generatedSourceCode}"
- COMMAND "${QT_CMAKE_EXPORT_NAMESPACE}::rcc"
- ARGS ${rccArgs}
+ add_custom_command(OUTPUT "${generatedOutfile}"
+ COMMAND "${QT_CMAKE_EXPORT_NAMESPACE}::rcc" ${rccArgs}
DEPENDS
${resource_dependencies}
${generatedResourceFile}
@@ -1239,18 +1260,25 @@ function(_qt_internal_process_resource target resourceName)
COMMENT "RCC ${newResourceName}"
VERBATIM)
- get_target_property(type "${target}" TYPE)
- # Only do this if newResourceName is the same as resourceName, since
- # the resource will be chainloaded by the qt quickcompiler
- # qml cache loader
- if(newResourceName STREQUAL resourceName)
- __qt_propagate_generated_resource(${target} ${resourceName} "${generatedSourceCode}" output_target)
- list(APPEND output_targets ${output_target})
+ if(isBinary)
+ # Add generated .rcc target to 'all' set
+ add_custom_target(binary_resource_${generatedBaseName} ALL DEPENDS "${generatedOutfile}")
else()
- target_sources(${target} PRIVATE "${generatedSourceCode}")
- endif()
- if (rcc_OUTPUT_TARGETS)
- set(${rcc_OUTPUT_TARGETS} "${output_targets}" PARENT_SCOPE)
+ set_property(SOURCE "${generatedOutfile}" PROPERTY SKIP_AUTOGEN ON)
+ set_property(TARGET ${target} APPEND PROPERTY _qt_generated_qrc_files "${generatedResourceFile}")
+
+ # Only do this if newResourceName is the same as resourceName, since
+ # the resource will be chainloaded by the qt quickcompiler
+ # qml cache loader
+ if(newResourceName STREQUAL resourceName)
+ __qt_propagate_generated_resource(${target} ${resourceName} "${generatedOutfile}" output_target)
+ list(APPEND output_targets ${output_target})
+ else()
+ target_sources(${target} PRIVATE "${generatedOutfile}")
+ endif()
+ if (rcc_OUTPUT_TARGETS)
+ set(${rcc_OUTPUT_TARGETS} "${output_targets}" PARENT_SCOPE)
+ endif()
endif()
endfunction()
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index 27ceae74fb..e8a60840a6 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -221,3 +221,6 @@ endif()
# FIXME: Needs porting of the qmake .pro files to create the modules and plugins in Qt6 CMake land.
# _qt_internal_test_expect_pass(test_import_plugins BINARY ${CMAKE_CTEST_COMMAND})
_qt_internal_test_expect_pass(test_versionless_targets)
+
+_qt_internal_test_expect_pass(test_add_resources_binary_generated
+ BINARY test_add_resources_binary_generated)
diff --git a/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt b/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt
new file mode 100644
index 0000000000..c7839348a7
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt
@@ -0,0 +1,32 @@
+cmake_minimum_required(VERSION 3.14)
+
+project(test_add_resources_binary_generated)
+
+if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
+ include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
+endif()
+
+find_package(Qt6Core REQUIRED HINTS ${Qt6Tests_PREFIX_PATH})
+
+qt6_add_executable(test_add_resources_binary_generated main.cpp)
+
+qt6_add_resources(test_add_resources_binary_generated resources1 FILES resource1.txt PREFIX "/"
+ OPTIONS "--binary")
+qt6_add_resources(test_add_resources_binary_generated resources2 FILES resource2.txt PREFIX "/"
+ OPTIONS "--binary"
+ DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/resources2_custom.rcc")
+
+target_compile_definitions(test_add_resources_binary_generated
+ PRIVATE
+ RESOURCE1_FULL_PATH="${CMAKE_CURRENT_BINARY_DIR}/generated_resources1.rcc")
+target_compile_definitions(test_add_resources_binary_generated
+ PRIVATE
+ RESOURCE2_FULL_PATH="${CMAKE_CURRENT_BINARY_DIR}/resources2_custom.rcc")
+
+if(NOT TARGET binary_resource_generated_resources1)
+ message(FATAL_ERROR "Generated resources binary target was not created")
+endif()
+
+if(NOT TARGET binary_resource_generated_resources2)
+ message(FATAL_ERROR "Generated resources binary target was not created")
+endif()
diff --git a/tests/auto/cmake/test_add_resources_binary_generated/main.cpp b/tests/auto/cmake/test_add_resources_binary_generated/main.cpp
new file mode 100644
index 0000000000..bee714bcf9
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_binary_generated/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QFile>
+#include <QResource>
+
+int main(int, char **)
+{
+ if (!QResource::registerResource(RESOURCE1_FULL_PATH)
+ || !QFile::exists(":/resource1.txt")
+ || !QResource::registerResource(RESOURCE2_FULL_PATH)
+ || !QFile::exists(":/resource2.txt")) {
+ return -1;
+ }
+ return 0;
+}
diff --git a/tests/auto/cmake/test_add_resources_binary_generated/resource1.txt b/tests/auto/cmake/test_add_resources_binary_generated/resource1.txt
new file mode 100644
index 0000000000..bc06a6d721
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_binary_generated/resource1.txt
@@ -0,0 +1 @@
+Test resource1
diff --git a/tests/auto/cmake/test_add_resources_binary_generated/resource2.txt b/tests/auto/cmake/test_add_resources_binary_generated/resource2.txt
new file mode 100644
index 0000000000..b8f9e67458
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_binary_generated/resource2.txt
@@ -0,0 +1 @@
+Test resource2