diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index da5b8d0afb1..5a323264e91 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -156,6 +156,37 @@ macro(assert) endmacro() +function(qt_create_nolink_target target) + if(NOT TARGET "${target}") + message(FATAL_ERROR "${target} does not exist when trying to build a nolink target.") + endif() + get_target_property(type "${target}" TYPE) + if(type STREQUAL EXECUTABLE) + message(FATAL_ERROR "${target} must be a library of some kind.") + endif() + if(type STREQUAL OBJECT_LIBRARY) + message(FATAL_ERROR "${target} must not be an object library.") + endif() + + set(nolink_target "${target}_nolink") + if(NOT TARGET "${nolink_target}") + string(REPLACE ":" "_" base_target "__${nolink_target}") + add_library("${base_target}" INTERFACE) + target_include_directories("${base_target}" INTERFACE + $) + target_include_directories("${base_target}" INTERFACE SYSTEM + $) + target_compile_definitions("${base_target}" INTERFACE + $) + target_compile_options("${base_target}" INTERFACE + $) + target_compile_features("${base_target}" INTERFACE + $) + + add_library("${nolink_target}" ALIAS "${base_target}") + endif() +endfunction() + function(qt_ensure_perl) if(DEFINED HOST_PERL) return() @@ -357,6 +388,13 @@ function(extend_target target) list(APPEND dbus_sources "${sources}") endforeach() + foreach(lib ${arg_PUBLIC_LIBRARIES} ${arg_LIBRARIES}) + string(REGEX REPLACE "_nolink$" "" base_lib "${lib}") + if(NOT base_lib STREQUAL lib) + qt_create_nolink_target("${base_lib}") + endif() + endforeach() + target_sources("${target}" PRIVATE ${arg_SOURCES} ${dbus_sources}) if (arg_COMPILE_FLAGS) set_source_files_properties(${arg_SOURCES} PROPERTIES COMPILE_FLAGS "${arg_COMPILE_FLAGS}") diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index b5a3088018b..180afb7cc52 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -1,5 +1,3 @@ -# Generated from network.pro. - ##################################################################### ## Network Module: ##################################################################### @@ -55,16 +53,17 @@ add_qt_module(Network kernel LIBRARIES Qt::CorePrivate - ZLIB::ZLIB # special case - PUBLIC_LIBRARIES # special case + ZLIB::ZLIB # special case + PUBLIC_LIBRARIES Qt::Core - # MODULE_PLUGIN_TYPES = "bearer" - # MODULE_WINRT_CAPABILITIES = "internetClient" "internetClientServer" "privateNetworkClientServer" - # PRECOMPILED_HEADER = "../corelib/global/qt_pch.h" - # QMAKE_LIBS = "$$QMAKE_LIBS_NETWORK" - # _LOADED = "qt_module" ) +#### Keys ignored in scope 1:.:.:network.pro:: +# MODULE_PLUGIN_TYPES = "bearer" +# MODULE_WINRT_CAPABILITIES = "internetClient" "internetClientServer" "privateNetworkClientServer" +# QMAKE_LIBS = "$$QMAKE_LIBS_NETWORK" +# _LOADED = "qt_module" + ## Scopes: ##################################################################### @@ -72,13 +71,12 @@ extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386" LINK_OPTIONS "/BASE:0x64000000" ) -# -#extend_target(Network CONDITION QT_FEATURE_bearermanagement -# # ANDROID_BUNDLED_JAR_DEPENDENCIES = "jar/QtAndroidBearer.jar" -# # ANDROID_LIB_DEPENDENCIES = "plugins/bearer/libqandroidbearer.so" -# # ANDROID_PERMISSIONS = "android.permission.ACCESS_NETWORK_STATE" -# # MODULE_PLUGIN_TYPES = "bearer" -#) + +#### Keys ignored in scope 3:.:.:network.pro:QT_FEATURE_bearermanagement: +# ANDROID_BUNDLED_JAR_DEPENDENCIES = "jar/QtAndroidBearer.jar" +# ANDROID_LIB_DEPENDENCIES = "plugins/bearer/libqandroidbearer.so" +# ANDROID_PERMISSIONS = "android.permission.ACCESS_NETWORK_STATE" +# MODULE_PLUGIN_TYPES = "bearer" extend_target(Network CONDITION QT_FEATURE_ftp SOURCES @@ -101,8 +99,8 @@ extend_target(Network CONDITION APPLE_OSX SOURCES kernel/qnetworkproxy_mac.cpp LIBRARIES - ${FWSecurity} ${FWCoreFoundation} + ${FWSecurity} ) extend_target(Network CONDITION WASM @@ -168,6 +166,7 @@ extend_target(Network CONDITION UNIX AND NOT QT_FEATURE_linux_netlink extend_target(Network CONDITION ANDROID AND QT_FEATURE_dnslookup SOURCES + # kernel/qdnslookup_unix.cpp # special case: No more need to remove this kernel/qdnslookup_android.cpp ) @@ -182,9 +181,9 @@ extend_target(Network CONDITION WIN32 AND NOT WINRT kernel/qnetworkproxy_win.cpp socket/qnativesocketengine_win.cpp LIBRARIES + advapi32 dnsapi iphlpapi - advapi32 ) extend_target(Network CONDITION QT_FEATURE_dnslookup AND WIN32 AND NOT WINRT @@ -218,8 +217,8 @@ extend_target(Network CONDITION QT_FEATURE_libproxy AND NOT APPLE_OSX AND (UNIX SOURCES kernel/qnetworkproxy_libproxy.cpp LIBRARIES - LibProxy::LibProxy ${CMAKE_DL_LIBS} + LibProxy::LibProxy ) extend_target(Network CONDITION NOT APPLE_OSX AND NOT QT_FEATURE_libproxy AND (UNIX OR WINRT) @@ -343,8 +342,8 @@ extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_opensslv11 AND ssl/qsslcontext_openssl11.cpp ssl/qsslsocket_openssl11.cpp ssl/qsslsocket_openssl11_symbols_p.h - DEFINES # special case - "OPENSSL_API_COMPAT=0x10100000L" + DEFINES + OPENSSL_API_COMPAT=0x10100000L ) extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_opensslv11 @@ -363,14 +362,16 @@ extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_ss SOURCES ssl/qsslsocket_openssl_android.cpp ) -# -#extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl -# # QMAKE_USE_FOR_PRIVATE = "openssl" -#) -# -#extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked -# # QMAKE_USE_FOR_PRIVATE = "openssl/nolink" -#) + +extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl + LIBRARIES + OpenSSL::SSL +) + +extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked + LIBRARIES + OpenSSL::SSL_nolink +) extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32 SOURCES @@ -379,10 +380,8 @@ 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 -) +extend_target(Network CONDITION WIN32 LIBRARIES ws2_32) # special case: mkspecs/common/msvc-desktop.conf -add_qt_docs(./doc/qtnetwork.qdocconf) +add_qt_docs( + ./doc/qtnetwork.qdocconf +) diff --git a/util/cmake/helper.py b/util/cmake/helper.py index f5573c3facc..9de01df32f0 100644 --- a/util/cmake/helper.py +++ b/util/cmake/helper.py @@ -232,6 +232,7 @@ libray_mapping = { 'libudev': 'PkgConfig::Libudev', 'mtdev': 'PkgConfig::Mtdev', 'odbc': 'ODBC::ODBC', + 'openssl': 'OpenSSL::SSL', 'pcre2': 'PCRE2', 'psql': 'PostgreSQL::PostgreSQL', 'sqlite': 'SQLite::SQLite3', @@ -263,4 +264,8 @@ libray_mapping = { def substitute_libs(lib: str) -> str: - return libray_mapping.get(lib, lib) + libpostfix = '' + if lib.endswith('/nolink'): + lib = lib[:-7] + libpostfix = '_nolink' + return libray_mapping.get(lib, lib) + libpostfix diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index 9399be5f336..7f4af835ffc 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -1012,7 +1012,7 @@ def write_sources_section(cm_fh: typing.IO[str], scope: Scope, *, write_library_section(cm_fh, scope, ['QMAKE_USE', 'LIBS'], - ['QT_FOR_PRIVATE', 'QMAKE_USE_PRIVATE', 'LIBS_PRIVATE'], + ['QT_FOR_PRIVATE', 'QMAKE_USE_PRIVATE', 'QMAKE_USE_FOR_PRIVATE', 'LIBS_PRIVATE'], ['QT',], indent=indent, known_libraries=known_libraries)