From 3f03917b54ace1041f7a640dc65b452b0275fafc Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Mon, 11 Mar 2019 12:34:52 +0100 Subject: Fix Windows build - Fix qmake build - Fix QtNetwork moc-ing, by including the moc files inside the cpp files - Fix sql odbc plugin by including QT_PLUGIN define - Fix Boostrap to link against the Platform target, to get the correct Unicode and WIN64 defines. - Fix vulkan headers to be found - Fix freetype bzip and png unresolved symbols / linker issues when building minimal platform plugin (also need to make sure to use the vcpkg toolchain instead of CMAKE_PREFIX_PATH because then find_package is overridden, which does magic to properly propagate static library dependencies). - Fix qfilesystementry test not to be built without private tests feature (it led to undefined symbols issues). - Make sure to remove QT_NO_CAST_TO_ASCII define when building QtCore, so that the qstringbuilder3 test builds successfully. Task-number: QTBUG-74140 Change-Id: I353d08392b604d55f8e62cdd8696d1e19a3c084a Reviewed-by: Simon Hausmann --- cmake/QtBuild.cmake | 5 + qmake/CMakeLists.txt | 15 +++ src/corelib/CMakeLists.txt | 10 +- src/network/CMakeLists.txt | 6 ++ src/network/socket/qhttpsocketengine.cpp | 2 + src/network/socket/qnativesocketengine.cpp | 2 + src/network/socket/qsocks5socketengine.cpp | 2 + src/platformsupport/fontdatabases/CMakeLists.txt | 119 ++++++++++++----------- src/platformsupport/vkconvenience/CMakeLists.txt | 4 + src/plugins/sqldrivers/odbc/qsql_odbc.cpp | 2 + src/tools/bootstrap/CMakeLists.txt | 1 + tests/auto/corelib/io/CMakeLists.txt | 4 +- 12 files changed, 111 insertions(+), 61 deletions(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index f08415d88e..e7ae97e503 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -707,6 +707,7 @@ function(add_qt_plugin target) QT_BUILDING_QT QT_BUILD_${module_upper}_LIB ### FIXME: use QT_BUILD_ADDON for Add-ons or remove if we don't have add-ons anymore "${deprecation_define}" + QT_PLUGIN PUBLIC_DEFINES QT_${module_upper}_LIB ${arg_PUBLIC_DEFINES} @@ -722,6 +723,10 @@ function(add_qt_plugin target) MOC_OPTIONS ${arg_MOC_OPTIONS} ) + if(NOT ${QT_BUILD_SHARED_LIBS}) + extend_target("${target}" DEFINES QT_STATICPLUGIN) + endif() + install(TARGETS "${target}" EXPORT "${target}Targets" LIBRARY DESTINATION ${INSTALL_PLUGINSDIR}/${arg_TYPE} ARCHIVE DESTINATION ${INSTALL_LIBDIR}/${arg_TYPE} diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt index 14211480dd..dc4c88f2a5 100644 --- a/qmake/CMakeLists.txt +++ b/qmake/CMakeLists.txt @@ -134,6 +134,21 @@ extend_target(qmake CONDITION APPLE_OSX ${FWApplicationServices} ${FWCoreServices} ${FWFoundation} ) # TODO: Windows support, cf. qmake.pro +extend_target(qmake CONDITION WIN32 + SOURCES + ${PROJECT_SOURCE_DIR}/src/corelib/io/qfilesystemengine_win.cpp + ${PROJECT_SOURCE_DIR}/src/corelib/io/qfilesystemiterator_win.cpp + ${PROJECT_SOURCE_DIR}/src/corelib/io/qfsfileengine_win.cpp + ${PROJECT_SOURCE_DIR}/src/corelib/tools/qlocale_win.cpp + ${PROJECT_SOURCE_DIR}/src/corelib/global/qoperatingsystemversion_win.cpp + ${PROJECT_SOURCE_DIR}/src/corelib/io/qsettings_win.cpp + ${PROJECT_SOURCE_DIR}/src/corelib/plugin/qsystemlibrary.cpp + generators/win32/registry.cpp + DEFINES + UNICODE _ENABLE_EXTENDED_ALIGNED_STORAGE _CRT_SECURE_NO_WARNINGS _SCL_SECURE_NO_WARNINGS + LIBRARIES + ole32 advapi32 kernel32 netapi32 +) set_target_properties(qmake PROPERTIES AUTOMOC OFF diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index 64c43ba377..ca6893b75f 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -560,8 +560,6 @@ extend_target(Core CONDITION UNIX kernel/qpoll_p.h kernel/qtimerinfo_unix.cpp kernel/qtimerinfo_unix_p.h thread/qthread_unix.cpp - DEFINES - QT_NO_CAST_TO_ASCII # special case: Add that here instead of removing it in WIN32! ) extend_target(Core CONDITION QT_FEATURE_thread @@ -1000,6 +998,14 @@ set_source_files_properties( thread/qmutex_win.cpp PROPERTIES HEADER_FILE_ONLY ON) # special case: These files are included by qmutex.cpp! +# special case +# Remove QT_NO_CAST_TO_ASCII to ensure that the symbols are included in the library. +if(WIN32) + get_target_property(defines Core COMPILE_DEFINITIONS) + list(REMOVE_ITEM defines QT_NO_CAST_TO_ASCII) + set_target_properties(Core PROPERTIES COMPILE_DEFINITIONS "${defines}") +endif() + qt_internal_add_link_flags_gc_sections(Core PRIVATE) # special case qt_create_tracepoints(Core ./qtcore.tracepoints) diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 187800b1c2..bfcf89bad2 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -379,4 +379,10 @@ extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32 crypt32 ) +# Special case, from mkspecs/common/msvc-desktop.conf +extend_target(Network CONDITION WIN32 + LIBRARIES + ws2_32 +) + add_qt_docs(./doc/qtnetwork.qdocconf) diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 9427c3b00d..1dd99112c2 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -866,3 +866,5 @@ QAbstractSocketEngine *QHttpSocketEngineHandler::createSocketEngine(qintptr, QOb QT_END_NAMESPACE #endif // !QT_NO_NETWORKPROXY + +#include "moc_qhttpsocketengine_p.cpp" diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 8947a7ee8a..f78f874f40 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -1382,3 +1382,5 @@ void QNativeSocketEngine::setExceptionNotificationEnabled(bool enable) } QT_END_NAMESPACE + +#include "moc_qnativesocketengine_p.cpp" diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index a07ea65046..30bc8ae7d5 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1937,3 +1937,5 @@ QAbstractSocketEngine *QSocks5SocketEngineHandler::createSocketEngine(qintptr so } QT_END_NAMESPACE + +#include "moc_qsocks5socketengine_p.cpp" diff --git a/src/platformsupport/fontdatabases/CMakeLists.txt b/src/platformsupport/fontdatabases/CMakeLists.txt index 7033af1737..4a410e0c01 100644 --- a/src/platformsupport/fontdatabases/CMakeLists.txt +++ b/src/platformsupport/fontdatabases/CMakeLists.txt @@ -1,30 +1,26 @@ # Generated from fontdatabases.pro. ##################################################################### -## QtFontDatabaseSupport Module: +## FontDatabaseSupport Module: ##################################################################### -find_package(Freetype) -find_library(FWCoreGraphics CoreGraphics) -find_library(FWCoreFoundation CoreFoundation) -find_library(FWCoreText CoreText) -find_library(FWFoundation Foundation) -find_library(FWAppKit AppKit) +find_package(Freetype) # Special case add_qt_module(FontDatabaseSupport STATIC - SOURCES fake.cpp DEFINES QT_NO_CAST_FROM_ASCII LIBRARIES Qt::CorePrivate Qt::GuiPrivate + # CONFIG = "static" "internal_module" + # MODULE = "fontdatabase_support" + # PRECOMPILED_HEADER = "../../corelib/global/qt_pch.h" + # _LOADED = "qt_module" ) -set_source_files_properties(fake.cpp PROPERTIES - SKIP_AUTOMOC ON - SKIP_AUTOUIC ON - SKIP_AUTORCC ON -) + +## Scopes: +##################################################################### extend_target(FontDatabaseSupport CONDITION APPLE SOURCES @@ -35,7 +31,9 @@ extend_target(FontDatabaseSupport CONDITION APPLE ${FWCoreGraphics} ${FWCoreText} ${FWFoundation} - ${FWAppKit} + ${FWAppKit} # Special case + + # CONFIG = "watchos_coretext" ) extend_target(FontDatabaseSupport CONDITION APPLE AND QT_FEATURE_freetype @@ -58,7 +56,7 @@ extend_target(FontDatabaseSupport CONDITION UNIX genericunix/qgenericunixfontdatabase_p.h ) -extend_target(FontDatabaseSupport CONDITION UNIX AND QT_FEATURE_fontconfig +extend_target(FontDatabaseSupport CONDITION QT_FEATURE_fontconfig AND UNIX SOURCES fontconfig/qfontconfigdatabase.cpp fontconfig/qfontconfigdatabase_p.h fontconfig/qfontenginemultifontconfig.cpp fontconfig/qfontenginemultifontconfig_p.h @@ -66,46 +64,51 @@ extend_target(FontDatabaseSupport CONDITION UNIX AND QT_FEATURE_fontconfig fontconfig ) -#extend_target(FontDatabaseSupport CONDITION WIN32 -#) - -#extend_target(FontDatabaseSupport CONDITION (WIN32) AND (NOT WINRT) -# SOURCES -# qwindowsfontdatabase.cpp qwindowsfontdatabase_p.h -# qwindowsfontengine.cpp qwindowsfontengine_p.h -# qwindowsnativeimage.cpp qwindowsnativeimage_p.h -# LIBRARIES -# Qt::GuiPrivate -#) - -#extend_target(FontDatabaseSupport CONDITION ((WIN32) AND (NOT WINRT)) AND (QT_FEATURE_freetype) -# SOURCES -# qwindowsfontdatabase_ft.cpp qwindowsfontdatabase_ft_p.h -#) - -#extend_target(FontDatabaseSupport CONDITION ((WIN32) AND (NOT WINRT)) AND (QT_FEATURE_directwrite) -# SOURCES -# qwindowsfontenginedirectwrite.cpp qwindowsfontenginedirectwrite_p.h -#) - -#extend_target(FontDatabaseSupport CONDITION (((WIN32) AND (NOT WINRT)) AND (QT_FEATURE_directwrite)) AND (QT_FEATURE_directwrite2) -# DEFINES -# QT_USE_DIRECTWRITE2 -#) - -#extend_target(FontDatabaseSupport CONDITION ((WIN32) AND (NOT WINRT)) AND (NOT QT_FEATURE_directwrite) -# DEFINES -# QT_NO_DIRECTWRITE -#) -## -##extend_target(FontDatabaseSupport CONDITION ((WIN32) AND (NOT WINRT)) AND (mingw) -##) - -#extend_target(FontDatabaseSupport CONDITION WINRT -# SOURCES -# qwinrtfontdatabase.cpp qwinrtfontdatabase_p.h -# DEFINES -# __WRL_NO_DEFAULT_LIB__ -# LIBRARIES -# Qt::GuiPrivate -#) +extend_target(FontDatabaseSupport CONDITION WIN32 AND NOT WINRT + SOURCES + windows/qwindowsfontdatabase.cpp windows/qwindowsfontdatabase_p.h + windows/qwindowsfontengine.cpp windows/qwindowsfontengine_p.h + windows/qwindowsnativeimage.cpp windows/qwindowsnativeimage_p.h + LIBRARIES + Qt::GuiPrivate + ole32 + gdi32 + user32 + advapi32 +) + +extend_target(FontDatabaseSupport CONDITION QT_FEATURE_freetype AND WIN32 AND NOT WINRT + SOURCES + windows/qwindowsfontdatabase_ft.cpp windows/qwindowsfontdatabase_ft_p.h +) + +extend_target(FontDatabaseSupport CONDITION QT_FEATURE_directwrite AND WIN32 AND NOT WINRT + SOURCES + windows/qwindowsfontenginedirectwrite.cpp windows/qwindowsfontenginedirectwrite_p.h +) + +extend_target(FontDatabaseSupport CONDITION QT_FEATURE_directwrite AND QT_FEATURE_directwrite2 AND WIN32 AND NOT WINRT + DEFINES + QT_USE_DIRECTWRITE2 +) + +extend_target(FontDatabaseSupport CONDITION WIN32 AND NOT QT_FEATURE_directwrite AND NOT WINRT + DEFINES + QT_NO_DIRECTWRITE +) + +extend_target(FontDatabaseSupport CONDITION WIN32 AND mingw AND NOT WINRT + LIBRARIES + uuid +) + +extend_target(FontDatabaseSupport CONDITION WINRT + SOURCES + winrt/qwinrtfontdatabase.cpp winrt/qwinrtfontdatabase_p.h + DEFINES + __WRL_NO_DEFAULT_LIB__ + LIBRARIES + Qt::GuiPrivate + ws2_32 + dwrite +) diff --git a/src/platformsupport/vkconvenience/CMakeLists.txt b/src/platformsupport/vkconvenience/CMakeLists.txt index b9504f2b94..ced2db5e20 100644 --- a/src/platformsupport/vkconvenience/CMakeLists.txt +++ b/src/platformsupport/vkconvenience/CMakeLists.txt @@ -4,6 +4,9 @@ ## VulkanSupport Module: ##################################################################### +# Special case. +find_package(Vulkan) + add_qt_module(VulkanSupport STATIC SOURCES @@ -13,4 +16,5 @@ add_qt_module(VulkanSupport LIBRARIES Qt::CorePrivate Qt::GuiPrivate + Vulkan::Vulkan ) diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp index 1fbbcd0ef1..74abed56a9 100644 --- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp +++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp @@ -2649,3 +2649,5 @@ bool QODBCDriver::isIdentifierEscaped(const QString &identifier, IdentifierType) } QT_END_NAMESPACE + +#include "moc_qsql_odbc_p.cpp" diff --git a/src/tools/bootstrap/CMakeLists.txt b/src/tools/bootstrap/CMakeLists.txt index 4bbbe08ea5..69e334c492 100644 --- a/src/tools/bootstrap/CMakeLists.txt +++ b/src/tools/bootstrap/CMakeLists.txt @@ -97,6 +97,7 @@ extend_target(Bootstrap $ PUBLIC_LIBRARIES # special case ZLIB::ZLIB + Qt::Platform # CONFIG = "minimal_syncqt" "internal_module" "force_bootstrap" "gc_binaries" # INSTALLS = "lib" # MODULE_CONFIG = "gc_binaries" diff --git a/tests/auto/corelib/io/CMakeLists.txt b/tests/auto/corelib/io/CMakeLists.txt index 3cebec6d9d..e1b4f931cd 100644 --- a/tests/auto/corelib/io/CMakeLists.txt +++ b/tests/auto/corelib/io/CMakeLists.txt @@ -1,7 +1,9 @@ add_subdirectory(largefile) add_subdirectory(qbuffer) add_subdirectory(qdataurl) -add_subdirectory(qfilesystementry) +if(QT_FEATURE_private_tests) + add_subdirectory(qfilesystementry) +endif() add_subdirectory(qfilesystemwatcher) add_subdirectory(qipaddress) # add_subdirectory(qloggingcategory) -- cgit v1.2.3