Revert "CMake: Place resources into static libraries, not object libraries"
This reverts commit ce8874fc3b
.
Reason for revert: Doesn't handle resource names that are invalid identifiers
Change-Id: Idf24bd9797284ce9de382a8e233d56c799a09099
Reviewed-by: Amir Masoud Abdol <amir.abdol@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
parent
bb11f7a9fa
commit
bc88bb34ca
@ -87,7 +87,6 @@ qt_internal_add_module(Core
|
||||
global/qtpreprocessorsupport.h
|
||||
global/qtrace_p.h
|
||||
global/qtresource.h
|
||||
global/qtsymbolmacros.h
|
||||
global/qttranslation.h
|
||||
global/qttypetraits.h
|
||||
global/qtversionchecks.h
|
||||
@ -343,12 +342,11 @@ qt_internal_add_module(Core
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Platform
|
||||
EXTRA_CMAKE_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CTestMacros.cmake"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CoreConfigureFileTemplate.in"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CoreResourceInit.in.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CoreDeploySupport.cmake"
|
||||
"${config_build_dir}/QtInstallPaths.cmake"
|
||||
${corelib_extra_cmake_files}
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CTestMacros.cmake"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CoreConfigureFileTemplate.in"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/Qt6CoreDeploySupport.cmake"
|
||||
"${config_build_dir}/QtInstallPaths.cmake"
|
||||
${corelib_extra_cmake_files}
|
||||
POLICIES
|
||||
QTP0002
|
||||
)
|
||||
|
@ -1846,24 +1846,11 @@ function(__qt_propagate_generated_resource target resource_name generated_source
|
||||
math(EXPR resource_count "${resource_count} + 1")
|
||||
set_target_properties(${target} PROPERTIES _qt_generated_resource_target_count ${resource_count})
|
||||
|
||||
__qt_internal_generate_init_resource_source_file(
|
||||
resource_init_file ${target} ${resource_name})
|
||||
|
||||
set(resource_target "${target}_resources_${resource_count}")
|
||||
add_library("${resource_target}" OBJECT "${resource_init_file}")
|
||||
# Needed so that qtsymbolmacros.h and its dependent headers are already created / syncqt'ed.
|
||||
if(TARGET Core_sync_headers)
|
||||
set(headers_available_target "Core_sync_headers")
|
||||
else()
|
||||
set(headers_available_target "${QT_CMAKE_EXPORT_NAMESPACE}::Core")
|
||||
endif()
|
||||
add_dependencies(${resource_target} ${headers_available_target})
|
||||
add_library("${resource_target}" OBJECT "${generated_source_code}")
|
||||
target_compile_definitions("${resource_target}" PRIVATE
|
||||
"$<TARGET_PROPERTY:${QT_CMAKE_EXPORT_NAMESPACE}::Core,INTERFACE_COMPILE_DEFINITIONS>"
|
||||
)
|
||||
target_include_directories("${resource_target}" PRIVATE
|
||||
"$<TARGET_PROPERTY:${QT_CMAKE_EXPORT_NAMESPACE}::Core,INTERFACE_INCLUDE_DIRECTORIES>"
|
||||
)
|
||||
_qt_internal_set_up_static_runtime_library("${resource_target}")
|
||||
|
||||
# Special handling is required for the Core library resources. The linking of the Core
|
||||
@ -1882,7 +1869,7 @@ function(__qt_propagate_generated_resource target resource_name generated_source
|
||||
# .rcc/qrc_qprintdialog.cpp
|
||||
file(RELATIVE_PATH generated_cpp_file_relative_path
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
"${resource_init_file}")
|
||||
"${generated_source_code}")
|
||||
set_property(TARGET ${resource_target} APPEND PROPERTY
|
||||
_qt_resource_generated_cpp_relative_path "${generated_cpp_file_relative_path}")
|
||||
|
||||
@ -1896,31 +1883,8 @@ function(__qt_propagate_generated_resource target resource_name generated_source
|
||||
set(${output_generated_target} "${resource_target}" PARENT_SCOPE)
|
||||
else()
|
||||
set(${output_generated_target} "" PARENT_SCOPE)
|
||||
target_sources(${target} PRIVATE ${generated_source_code})
|
||||
endif()
|
||||
|
||||
target_sources(${target} PRIVATE ${generated_source_code})
|
||||
endfunction()
|
||||
|
||||
function(__qt_internal_generate_init_resource_source_file out_var target resource_name)
|
||||
set(template_file "${__qt_core_macros_module_base_dir}/Qt6CoreResourceInit.in.cpp")
|
||||
|
||||
# Gets replaced in the template
|
||||
set(RESOURCE_NAME "${resource_name}")
|
||||
set(resource_init_path "${CMAKE_CURRENT_BINARY_DIR}/.rcc/qrc_${resource_name}_init.cpp")
|
||||
|
||||
configure_file("${template_file}" "${resource_init_path}" @ONLY)
|
||||
|
||||
set(scope_args "")
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18")
|
||||
set(scope_args TARGET_DIRECTORY ${target})
|
||||
endif()
|
||||
set_source_files_properties(${resource_init_path} ${scope_args} PROPERTIES
|
||||
SKIP_AUTOGEN TRUE
|
||||
SKIP_UNITY_BUILD_INCLUSION TRUE
|
||||
SKIP_PRECOMPILE_HEADERS TRUE
|
||||
)
|
||||
|
||||
set(${out_var} "${resource_init_path}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Make file visible in IDEs.
|
||||
|
@ -1,14 +0,0 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// This file was generated by the qt_add_resources command.
|
||||
|
||||
#include <QtCore/qtsymbolmacros.h>
|
||||
|
||||
QT_DECLARE_EXTERN_RESOURCE(@RESOURCE_NAME@);
|
||||
|
||||
namespace {
|
||||
struct resourceReferenceKeeper {
|
||||
resourceReferenceKeeper() { QT_KEEP_RESOURCE(@RESOURCE_NAME@); }
|
||||
} resourceReferenceKeeperInstance;
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
|
||||
#ifndef QTSYMBOLMACROS_H
|
||||
#define QTSYMBOLMACROS_H
|
||||
|
||||
#if 0
|
||||
# pragma qt_sync_stop_processing
|
||||
#endif
|
||||
|
||||
// For GHS symbol keeping.
|
||||
#include <QtCore/qcompilerdetection.h>
|
||||
#include <QtCore/qtpreprocessorsupport.h>
|
||||
|
||||
// For handling namespaced resources.
|
||||
#ifdef QT_NAMESPACE
|
||||
# define QT_RCC_MANGLE_NAMESPACE0(x) x
|
||||
# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b
|
||||
# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b)
|
||||
# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \
|
||||
QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE))
|
||||
#else
|
||||
# define QT_RCC_MANGLE_NAMESPACE(name) name
|
||||
#endif
|
||||
|
||||
// GHS needs special handling to keep a symbol around.
|
||||
#if defined(Q_CC_GHS)
|
||||
# define Q_GHS_KEEP_REFERENCE(S) QT_DO_PRAGMA(ghs reference S ##__Fv)
|
||||
#else
|
||||
# define Q_GHS_KEEP_REFERENCE(S)
|
||||
#endif
|
||||
|
||||
// Macros to ensure a symbol is not dropped by the linker even if it's not used.
|
||||
#define QT_DECLARE_EXTERN_SYMBOL(NAME, RETURN_TYPE) \
|
||||
extern RETURN_TYPE NAME(); \
|
||||
Q_GHS_KEEP_REFERENCE(NAME)
|
||||
|
||||
#define QT_DECLARE_EXTERN_SYMBOL_INT(NAME) \
|
||||
QT_DECLARE_EXTERN_SYMBOL(NAME, int)
|
||||
|
||||
#define QT_DECLARE_EXTERN_SYMBOL_VOID(NAME) \
|
||||
QT_DECLARE_EXTERN_SYMBOL(NAME, void)
|
||||
|
||||
#define QT_KEEP_SYMBOL_VAR_NAME(NAME) NAME ## _keep
|
||||
|
||||
#define QT_KEEP_SYMBOL_HELPER(NAME, VAR_NAME) \
|
||||
volatile auto VAR_NAME = &NAME; \
|
||||
Q_UNUSED(VAR_NAME)
|
||||
|
||||
#define QT_KEEP_SYMBOL(NAME) \
|
||||
QT_KEEP_SYMBOL_HELPER(NAME, QT_KEEP_SYMBOL_VAR_NAME(NAME))
|
||||
|
||||
|
||||
// Similar to the ones above, but for rcc resource symbols specifically.
|
||||
#define QT_GET_RESOURCE_INIT_SYMBOL(NAME) \
|
||||
QT_RCC_MANGLE_NAMESPACE(qInitResources_ ## NAME)
|
||||
|
||||
#define QT_DECLARE_EXTERN_RESOURCE(NAME) \
|
||||
QT_DECLARE_EXTERN_SYMBOL_INT(QT_GET_RESOURCE_INIT_SYMBOL(NAME))
|
||||
|
||||
#define QT_KEEP_RESOURCE(NAME) \
|
||||
QT_KEEP_SYMBOL(QT_GET_RESOURCE_INIT_SYMBOL(NAME))
|
||||
|
||||
#endif // QTSYMBOLMACROS_H
|
||||
|
@ -222,7 +222,6 @@ _qt_internal_test_expect_pass(test_multiple_find_package)
|
||||
_qt_internal_test_expect_pass(test_add_resources_delayed_file)
|
||||
_qt_internal_test_expect_pass(test_add_binary_resources_delayed_file BINARY test_add_binary_resources_delayed_file)
|
||||
_qt_internal_test_expect_pass(test_qt_add_resources_rebuild)
|
||||
_qt_internal_test_expect_pass(test_resource_without_obj_lib BINARY test_resource_without_obj_lib)
|
||||
|
||||
if(NOT NO_GUI)
|
||||
_qt_internal_test_expect_pass(test_private_includes)
|
||||
|
@ -1,33 +0,0 @@
|
||||
# Copyright (C) 2023 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(test_resource_without_obj_lib)
|
||||
|
||||
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
|
||||
endif()
|
||||
|
||||
find_package(Qt6 REQUIRED
|
||||
COMPONENTS Core Test
|
||||
HINTS ${Qt6Tests_PREFIX_PATH}
|
||||
)
|
||||
|
||||
qt6_add_library(helper_lib STATIC helper_lib.cpp)
|
||||
qt6_add_resources(helper_lib "helper_res" FILES resource.txt PREFIX "/")
|
||||
|
||||
# Link to Core, to ensure both the helper_lib and the main executable
|
||||
# inherit the QT_NAMESPACE if it is set, otherwise we get undefined
|
||||
# linker errors due to the mismatch in symbol names.
|
||||
target_link_libraries(helper_lib PRIVATE Qt6::Core)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
qt6_add_executable(test_resource_without_obj_lib main.cpp)
|
||||
target_link_libraries(test_resource_without_obj_lib PRIVATE Qt6::Core Qt6::Test)
|
||||
|
||||
# Link against the library file and not the target, so that we can confirm
|
||||
# the ability to manually initialize the resource via Q_INIT_RESOURCE.
|
||||
target_link_libraries(test_resource_without_obj_lib PRIVATE $<TARGET_FILE:helper_lib>)
|
||||
|
@ -1,4 +0,0 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
void nothing() {}
|
@ -1,28 +0,0 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include <QtCore/qtresource.h>
|
||||
#include <QtTest/QtTest>
|
||||
|
||||
class TestManualResourceInit : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
private slots:
|
||||
void initTestCase();
|
||||
void resourceExistsAfterManualInit();
|
||||
};
|
||||
|
||||
void TestManualResourceInit::initTestCase()
|
||||
{
|
||||
// Manually initialize the resource like we used to do it in qt5 + qmake times.
|
||||
Q_INIT_RESOURCE(helper_res);
|
||||
}
|
||||
|
||||
void TestManualResourceInit::resourceExistsAfterManualInit()
|
||||
{
|
||||
QVERIFY(QFile::exists(":/resource.txt"));
|
||||
}
|
||||
|
||||
QTEST_MAIN(TestManualResourceInit)
|
||||
#include "main.moc"
|
||||
|
@ -1 +0,0 @@
|
||||
Test resource
|
Loading…
Reference in New Issue
Block a user