diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2021-04-13 18:57:07 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2021-04-19 20:30:45 +0200 |
commit | b25eb6e0bd1e3b91c44dc4892d529b95c8677889 (patch) | |
tree | bcaf82a236d8b17494c8c2d2c35cbf799161bb0b /configure.cmake | |
parent | ed721471494aa5bffbe0a5944f8efbe62884b9b5 (diff) |
CMake: Introduce zlib find script to work around hardcoded iOS SDK
Xcode allows building a project targeting either the device or
simulator sysroot in one single build dir, but for the sysroot
switching to work there should be no linker or compiler flags
referencing absolute paths of a specific sysroot.
During CMake configuration of a project targeting iOS, all found
system libraries will be within one single sysroot, either the device
one or the simulator one, whichever one was passed to
CMAKE_OSX_SYSROOT. CMake will then generate the Xcode project
and pass those absolute paths, which makes sysroot switching within
Xcode not work.
To avoid that, the CMake documentation recommends passing linker and
framework flags of the form '-lfoo' and '-framework bar' instead of
absolute paths. Xcode then takes care of setting the correct framework
search path.
Zlib is one of the libraries found in the iOS sysroot and thus passed
as absolute path.
To avoid that, create a new FindWrapZLIB find script. The target it
creates will pass the absolute path to the library on non Apple
platforms and an -lz linker flag on Apple platforms (macOS and iOS).
To avoid issues with target global promotion when system PNG package
is found, ensure that a found ZLIB::ZLIB target is promoted to global
manually in src/gui/configure.cmake.
Pick-to: 6.1
Change-Id: I8bd8649be4f680a331ad51925f27cb9d13ac5e5f
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'configure.cmake')
-rw-r--r-- | configure.cmake | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/configure.cmake b/configure.cmake index cfd355dcfe..3412703333 100644 --- a/configure.cmake +++ b/configure.cmake @@ -4,7 +4,19 @@ #### Libraries -qt_find_package(ZLIB 1.0.8 PROVIDED_TARGETS ZLIB::ZLIB MODULE_NAME global QMAKE_LIB zlib) +qt_find_package(WrapZLIB 1.0.8 PROVIDED_TARGETS WrapZLIB::WrapZLIB MODULE_NAME global QMAKE_LIB zlib) +# special case begin +# Work around global target promotion failure when WrapZLIB is used on APPLE platforms. +# What ends up happening is that the ZLIB::ZLIB target is not promoted to global by qt_find_package, +# then qt_find_package(WrapSystemPNG) tries to find its dependency ZLIB::ZLIB, sees it's not global +# and tries to promote it to global, but fails because the directory scope of the PNG package is +# different (src/gui) from where ZLIB was originally found (qtbase root). +# To avoid that, just manually promote the target to global here. +if(TARGET ZLIB::ZLIB) + set_property(TARGET ZLIB::ZLIB PROPERTY IMPORTED_GLOBAL TRUE) +endif() + +# special case end qt_find_package(ZSTD 1.3 PROVIDED_TARGETS ZSTD::ZSTD MODULE_NAME global QMAKE_LIB zstd) qt_find_package(WrapDBus1 1.2 PROVIDED_TARGETS dbus-1 MODULE_NAME global QMAKE_LIB dbus) qt_find_package(Libudev PROVIDED_TARGETS PkgConfig::Libudev MODULE_NAME global QMAKE_LIB libudev) @@ -824,7 +836,7 @@ qt_feature("stack-protector-strong" PRIVATE ) qt_feature("system-zlib" PRIVATE LABEL "Using system zlib" - CONDITION ZLIB_FOUND + CONDITION WrapZLIB_FOUND ) qt_feature("zstd" PRIVATE LABEL "Zstandard support" |