CMake: Explicitly search for X11 with proper dependency tracking

Replace the hardcoded find_package(X11) with qt_find_package in both the
compositor and client projects.
This should ensure proper dependency tracking.

Calling qt_find_package(X11) is now necessary, because QtGui doesn't
publically link against X11 anymore, which means we have to do it
explicitly for qtwayland. The relevant qtbase change is
69004cb2900dcfc530e1e2efb783f559661a8a50

The calls need to be protected by an if(NOT TARGET) to prevent
configuration issues in static builds, where the dependency does get
propagated.

This amends commit dfaf374a3d8d34b9aa90bfc4c5e074f9fd8b9981.

Change-Id: Ia39e1e78cd0af386d7b48cd1922887289823c1fa
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
Alexandru Croitor 2020-09-14 15:13:35 +02:00
parent 42d9e19e40
commit 5e927fb8d6

View File

@ -17,7 +17,14 @@ if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(Wayland PROVIDED_TARGETS Wayland::Egl MODULE_NAME waylandclient QMAKE_LIB wayland-egl)
endif()
qt_find_package(XComposite PROVIDED_TARGETS PkgConfig::XComposite MODULE_NAME waylandclient QMAKE_LIB xcomposite)
# special case begin
# X11 is not a public dependency of QtGui anymore, so we need to find it manually in a shared build.
# In a static build the dependency is still propagated, so check for the target existence to prevent
# the 'Attempt to promote imported target "X11::X11" to global scope' issue.
if(NOT TARGET X11::X11)
qt_find_package(X11 PROVIDED_TARGETS X11::X11 MODULE_NAME gui QMAKE_LIB xlib)
endif()
# special case end
#### Tests