CMake: Support /nolink libraries
Add a helper function to QtBuild that generates Foo_nolink versions of Foo library targets. Map 'Foo/nolink' libs found in qmake to Foo_nolink. Automatically run helper function to create _nolink targets as part of extend_target. Change-Id: I4c23ea68b3037d23c9a31d4ac272a6bd0565f7c0 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
be0cf9f8d7
commit
92b0d7b911
@ -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_PROPERTY:${target},INTERFACE_INCLUDE_DIRECTORIES>)
|
||||
target_include_directories("${base_target}" INTERFACE SYSTEM
|
||||
$<TARGET_PROPERTY:${target},INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>)
|
||||
target_compile_definitions("${base_target}" INTERFACE
|
||||
$<TARGET_PROPERTY:${target},INTERFACE_COMPILE_DEFINITIONS>)
|
||||
target_compile_options("${base_target}" INTERFACE
|
||||
$<TARGET_PROPERTY:${target},INTERFACE_COMPILE_OPTIONS>)
|
||||
target_compile_features("${base_target}" INTERFACE
|
||||
$<TARGET_PROPERTY:${target},INTERFACE_COMPILE_FEATURES>)
|
||||
|
||||
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}")
|
||||
|
@ -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:<TRUE>:
|
||||
# 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
|
||||
)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user