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()
|
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)
|
function(qt_ensure_perl)
|
||||||
if(DEFINED HOST_PERL)
|
if(DEFINED HOST_PERL)
|
||||||
return()
|
return()
|
||||||
@ -357,6 +388,13 @@ function(extend_target target)
|
|||||||
list(APPEND dbus_sources "${sources}")
|
list(APPEND dbus_sources "${sources}")
|
||||||
endforeach()
|
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})
|
target_sources("${target}" PRIVATE ${arg_SOURCES} ${dbus_sources})
|
||||||
if (arg_COMPILE_FLAGS)
|
if (arg_COMPILE_FLAGS)
|
||||||
set_source_files_properties(${arg_SOURCES} PROPERTIES COMPILE_FLAGS "${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:
|
## Network Module:
|
||||||
#####################################################################
|
#####################################################################
|
||||||
@ -56,15 +54,16 @@ add_qt_module(Network
|
|||||||
LIBRARIES
|
LIBRARIES
|
||||||
Qt::CorePrivate
|
Qt::CorePrivate
|
||||||
ZLIB::ZLIB # special case
|
ZLIB::ZLIB # special case
|
||||||
PUBLIC_LIBRARIES # special case
|
PUBLIC_LIBRARIES
|
||||||
Qt::Core
|
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:
|
## Scopes:
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
@ -72,13 +71,12 @@ extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386"
|
|||||||
LINK_OPTIONS
|
LINK_OPTIONS
|
||||||
"/BASE:0x64000000"
|
"/BASE:0x64000000"
|
||||||
)
|
)
|
||||||
#
|
|
||||||
#extend_target(Network CONDITION QT_FEATURE_bearermanagement
|
#### Keys ignored in scope 3:.:.:network.pro:QT_FEATURE_bearermanagement:
|
||||||
# # ANDROID_BUNDLED_JAR_DEPENDENCIES = "jar/QtAndroidBearer.jar"
|
# ANDROID_BUNDLED_JAR_DEPENDENCIES = "jar/QtAndroidBearer.jar"
|
||||||
# # ANDROID_LIB_DEPENDENCIES = "plugins/bearer/libqandroidbearer.so"
|
# ANDROID_LIB_DEPENDENCIES = "plugins/bearer/libqandroidbearer.so"
|
||||||
# # ANDROID_PERMISSIONS = "android.permission.ACCESS_NETWORK_STATE"
|
# ANDROID_PERMISSIONS = "android.permission.ACCESS_NETWORK_STATE"
|
||||||
# # MODULE_PLUGIN_TYPES = "bearer"
|
# MODULE_PLUGIN_TYPES = "bearer"
|
||||||
#)
|
|
||||||
|
|
||||||
extend_target(Network CONDITION QT_FEATURE_ftp
|
extend_target(Network CONDITION QT_FEATURE_ftp
|
||||||
SOURCES
|
SOURCES
|
||||||
@ -101,8 +99,8 @@ extend_target(Network CONDITION APPLE_OSX
|
|||||||
SOURCES
|
SOURCES
|
||||||
kernel/qnetworkproxy_mac.cpp
|
kernel/qnetworkproxy_mac.cpp
|
||||||
LIBRARIES
|
LIBRARIES
|
||||||
${FWSecurity}
|
|
||||||
${FWCoreFoundation}
|
${FWCoreFoundation}
|
||||||
|
${FWSecurity}
|
||||||
)
|
)
|
||||||
|
|
||||||
extend_target(Network CONDITION WASM
|
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
|
extend_target(Network CONDITION ANDROID AND QT_FEATURE_dnslookup
|
||||||
SOURCES
|
SOURCES
|
||||||
|
# kernel/qdnslookup_unix.cpp # special case: No more need to remove this
|
||||||
kernel/qdnslookup_android.cpp
|
kernel/qdnslookup_android.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -182,9 +181,9 @@ extend_target(Network CONDITION WIN32 AND NOT WINRT
|
|||||||
kernel/qnetworkproxy_win.cpp
|
kernel/qnetworkproxy_win.cpp
|
||||||
socket/qnativesocketengine_win.cpp
|
socket/qnativesocketengine_win.cpp
|
||||||
LIBRARIES
|
LIBRARIES
|
||||||
|
advapi32
|
||||||
dnsapi
|
dnsapi
|
||||||
iphlpapi
|
iphlpapi
|
||||||
advapi32
|
|
||||||
)
|
)
|
||||||
|
|
||||||
extend_target(Network CONDITION QT_FEATURE_dnslookup AND WIN32 AND NOT WINRT
|
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
|
SOURCES
|
||||||
kernel/qnetworkproxy_libproxy.cpp
|
kernel/qnetworkproxy_libproxy.cpp
|
||||||
LIBRARIES
|
LIBRARIES
|
||||||
LibProxy::LibProxy
|
|
||||||
${CMAKE_DL_LIBS}
|
${CMAKE_DL_LIBS}
|
||||||
|
LibProxy::LibProxy
|
||||||
)
|
)
|
||||||
|
|
||||||
extend_target(Network CONDITION NOT APPLE_OSX AND NOT QT_FEATURE_libproxy AND (UNIX OR WINRT)
|
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/qsslcontext_openssl11.cpp
|
||||||
ssl/qsslsocket_openssl11.cpp
|
ssl/qsslsocket_openssl11.cpp
|
||||||
ssl/qsslsocket_openssl11_symbols_p.h
|
ssl/qsslsocket_openssl11_symbols_p.h
|
||||||
DEFINES # special case
|
DEFINES
|
||||||
"OPENSSL_API_COMPAT=0x10100000L"
|
OPENSSL_API_COMPAT=0x10100000L
|
||||||
)
|
)
|
||||||
|
|
||||||
extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_opensslv11
|
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
|
SOURCES
|
||||||
ssl/qsslsocket_openssl_android.cpp
|
ssl/qsslsocket_openssl_android.cpp
|
||||||
)
|
)
|
||||||
#
|
|
||||||
#extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl
|
extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl
|
||||||
# # QMAKE_USE_FOR_PRIVATE = "openssl"
|
LIBRARIES
|
||||||
#)
|
OpenSSL::SSL
|
||||||
#
|
)
|
||||||
#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_ssl AND NOT QT_FEATURE_openssl_linked
|
||||||
#)
|
LIBRARIES
|
||||||
|
OpenSSL::SSL_nolink
|
||||||
|
)
|
||||||
|
|
||||||
extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32
|
extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32
|
||||||
SOURCES
|
SOURCES
|
||||||
@ -379,10 +380,8 @@ extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32
|
|||||||
crypt32
|
crypt32
|
||||||
)
|
)
|
||||||
|
|
||||||
# Special case, from mkspecs/common/msvc-desktop.conf
|
extend_target(Network CONDITION WIN32 LIBRARIES ws2_32) # special case: mkspecs/common/msvc-desktop.conf
|
||||||
extend_target(Network CONDITION WIN32
|
|
||||||
LIBRARIES
|
|
||||||
ws2_32
|
|
||||||
)
|
|
||||||
|
|
||||||
add_qt_docs(./doc/qtnetwork.qdocconf)
|
add_qt_docs(
|
||||||
|
./doc/qtnetwork.qdocconf
|
||||||
|
)
|
||||||
|
@ -232,6 +232,7 @@ libray_mapping = {
|
|||||||
'libudev': 'PkgConfig::Libudev',
|
'libudev': 'PkgConfig::Libudev',
|
||||||
'mtdev': 'PkgConfig::Mtdev',
|
'mtdev': 'PkgConfig::Mtdev',
|
||||||
'odbc': 'ODBC::ODBC',
|
'odbc': 'ODBC::ODBC',
|
||||||
|
'openssl': 'OpenSSL::SSL',
|
||||||
'pcre2': 'PCRE2',
|
'pcre2': 'PCRE2',
|
||||||
'psql': 'PostgreSQL::PostgreSQL',
|
'psql': 'PostgreSQL::PostgreSQL',
|
||||||
'sqlite': 'SQLite::SQLite3',
|
'sqlite': 'SQLite::SQLite3',
|
||||||
@ -263,4 +264,8 @@ libray_mapping = {
|
|||||||
|
|
||||||
|
|
||||||
def substitute_libs(lib: str) -> str:
|
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,
|
write_library_section(cm_fh, scope,
|
||||||
['QMAKE_USE', 'LIBS'],
|
['QMAKE_USE', 'LIBS'],
|
||||||
['QT_FOR_PRIVATE', 'QMAKE_USE_PRIVATE', 'LIBS_PRIVATE'],
|
['QT_FOR_PRIVATE', 'QMAKE_USE_PRIVATE', 'QMAKE_USE_FOR_PRIVATE', 'LIBS_PRIVATE'],
|
||||||
['QT',],
|
['QT',],
|
||||||
indent=indent, known_libraries=known_libraries)
|
indent=indent, known_libraries=known_libraries)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user