summaryrefslogtreecommitdiffstats
path: root/src/corelib/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/CMakeLists.txt')
-rw-r--r--src/corelib/CMakeLists.txt73
1 files changed, 25 insertions, 48 deletions
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index a942617cd7..89dcedb6dd 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -27,7 +27,6 @@ endif()
#####################################################################
qt_internal_add_module(Core
- GENERATE_METATYPES
QMAKE_MODULE_CONFIG moc resources
EXCEPTIONS
SOURCES
@@ -44,7 +43,7 @@ qt_internal_add_module(Core
global/qlibraryinfo.cpp global/qlibraryinfo.h
global/qlogging.cpp global/qlogging.h
global/qmalloc.cpp
- # global/qnamespace.h # special case
+ global/qnamespace.h # this header is specified on purpose so AUTOMOC processes it
global/qnumeric.cpp global/qnumeric.h global/qnumeric_p.h
global/qoperatingsystemversion.cpp global/qoperatingsystemversion.h global/qoperatingsystemversion_p.h
global/qprocessordetection.h
@@ -109,7 +108,7 @@ qt_internal_add_module(Core
kernel/qmetaobjectbuilder.cpp kernel/qmetaobjectbuilder_p.h
kernel/qmetatype.cpp kernel/qmetatype.h kernel/qmetatype_p.h
kernel/qmimedata.cpp kernel/qmimedata.h
- # kernel/qobject.cpp kernel/qobject.h kernel/qobject_p.h # special case
+ kernel/qobject.cpp kernel/qobject.h kernel/qobject_p.h
kernel/qobject_impl.h
kernel/qobjectcleanuphandler.cpp kernel/qobjectcleanuphandler.h
kernel/qobjectdefs.h
@@ -244,6 +243,7 @@ qt_internal_add_module(Core
QT_NO_USING_NAMESPACE
INCLUDE_DIRECTORIES
"${CMAKE_CURRENT_BINARY_DIR}/global" # special case
+ "${CMAKE_CURRENT_BINARY_DIR}/kernel" # for moc_qobject.cpp to be found by qobject.cpp
# ../3rdparty/md4 # special case remove
# ../3rdparty/md5 # special case remove
# ../3rdparty/sha3 # special case remove
@@ -287,49 +287,31 @@ if(QT_FEATURE_thread)
target_link_libraries(Platform INTERFACE Threads::Threads)
endif()
-# Handle QObject: Automoc does not work for this as it would
-# require to spill internals into users:
-qt_internal_add_module(Core_qobject STATIC
- NO_SYNC_QT
- NO_CONFIG_HEADER_FILE
- NO_MODULE_HEADERS
- INTERNAL_MODULE
- SKIP_DEPENDS_INCLUDE
-)
-set_target_properties(Core_qobject PROPERTIES AUTOMOC OFF)
-qt_manual_moc(qobject_moc_files OUTPUT_MOC_JSON_FILES core_qobject_metatypes_json_list kernel/qobject.h global/qnamespace.h)
+# Skip AUTOMOC processing of qobject.cpp and its headers.
+# We do this on purpose, because qobject.cpp contains a bunch of Q_GADGET, Q_NAMESPACE, etc
+# keywords and AUTOMOC gets confused about wanting to compile a qobject.moc file as well.
+# Instead use manual moc.
+set_source_files_properties(kernel/qobject.cpp kernel/qobject.h kernel/qobject_p.h
+ PROPERTIES SKIP_AUTOMOC TRUE)
+
+qt_manual_moc(qobject_moc_files
+ OUTPUT_MOC_JSON_FILES core_qobject_metatypes_json_list
+ kernel/qobject.h)
+# The moc file is included directly by qobject.cpp
set_source_files_properties(${qobject_moc_files} PROPERTIES HEADER_FILE_ONLY ON)
-target_sources(Core_qobject PRIVATE
- global/qnamespace.h
- kernel/qobject.cpp kernel/qproperty.cpp kernel/qproperty.h kernel/qproperty_p.h kernel/qobject.h kernel/qobject_p.h ${qobject_moc_files})
-set_target_properties(Core_qobject PROPERTIES
- COMPILE_OPTIONS $<TARGET_PROPERTY:Core,COMPILE_OPTIONS>
- COMPILE_DEFINITIONS $<TARGET_PROPERTY:Core,COMPILE_DEFINITIONS>
- INCLUDE_DIRECTORIES $<TARGET_PROPERTY:Core,INCLUDE_DIRECTORIES>
-)
-target_include_directories(Core_qobject PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/kernel") # for moc_qobject.cpp
-target_link_libraries(Core_qobject PRIVATE Qt::Platform Qt::GlobalConfig)
-qt_internal_extend_target(Core LIBRARIES Qt::Core_qobject)
-add_dependencies(Core_qobject ${QT_CMAKE_EXPORT_NAMESPACE}::moc)
-
-set(core_qobject_metatypes_json_args)
-if (NOT QT_WILL_INSTALL)
- set(core_qobject_metatypes_json_args INSTALL_DIR "${QT_BUILD_DIR}/${INSTALL_LIBDIR}/metatypes")
-endif()
-qt6_extract_metatypes(Core_qobject
- MANUAL_MOC_JSON_FILES ${core_qobject_metatypes_json_list}
- ${core_qobject_metatypes_json_args}
-)
+set(core_metatype_args MANUAL_MOC_JSON_FILES ${core_qobject_metatypes_json_list})
-# Core_qobject is never exported so we need to duplicate the metatypes file
-# interface on Core
-get_target_property(core_qobject_metatypes_file_genex_build Core_qobject QT_MODULE_META_TYPES_FILE_GENEX_BUILD)
-get_target_property(core_qobject_metatypes_file_genex_install Core_qobject QT_MODULE_META_TYPES_FILE_GENEX_INSTALL)
-target_sources(Core INTERFACE
- ${core_qobject_metatypes_file_genex_build}
- ${core_qobject_metatypes_file_genex_install}
-)
+set(metatypes_install_dir ${INSTALL_LIBDIR}/metatypes)
+if (NOT QT_WILL_INSTALL)
+ list(APPEND core_metatype_args
+ COPY_OVER_INSTALL INSTALL_DIR "${QT_BUILD_DIR}/${metatypes_install_dir}")
+else()
+ list(APPEND core_metatype_args INSTALL_DIR "${metatypes_install_dir}")
+endif()
+# Use qt6_extract_metatypes instead of GENERATE_METATYPES so that we can manually pass the
+# additional json files.
+qt6_extract_metatypes(Core ${core_metatype_args})
set_property(TARGET Core APPEND PROPERTY
PUBLIC_HEADER "${CMAKE_CURRENT_BINARY_DIR}/global/qconfig.h")
@@ -1334,11 +1316,6 @@ endif()
# special case end
qt_internal_create_tracepoints(Core qtcore.tracepoints)
-# special case begin
-if(TARGET Core_tracepoints_header)
- add_dependencies(Core_qobject Core_tracepoints_header)
-endif()
-# special case end
qt_internal_add_docs(Core
doc/qtcore.qdocconf
)