summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt26
-rw-r--r--src/client/CMakeLists.txt2
-rw-r--r--src/client/configure.cmake200
-rw-r--r--src/client/qtwaylandclientglobal_p.h2
-rw-r--r--src/compositor/CMakeLists.txt2
-rw-r--r--src/compositor/configure.cmake160
-rw-r--r--src/compositor/global/qtwaylandcompositorglobal_p.h1
-rw-r--r--src/configure.cmake249
-rw-r--r--src/global/README9
-rw-r--r--sync.profile1
10 files changed, 267 insertions, 385 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d970fcf5..6787e9cb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -11,30 +11,8 @@ configure the module on targets that are missing dependencies.")
return()
endif()
-# We conditionally add_subdirectory(client) based on a feature that is defined
-# in client/configure.cmake, so we need this hack to make sure the feature is
-# defined on this level as well.
-# TODO: when we remove configure.json support and stop generating
-# configure.cmake, we should move the features up one level and deduplicate the
-# features shared with the compositor.
-qt_feature_module_begin(
- NO_MODULE
- PUBLIC_FILE "qtwayland-client-config.h"
- PRIVATE_FILE "qtwayland-client-config_p.h"
-)
-include("${CMAKE_CURRENT_SOURCE_DIR}/client/configure.cmake")
-qt_feature_module_end(NO_MODULE)
-
-# Similar hack as above, but for the compositor
-qt_feature_module_begin(
- NO_MODULE
- PUBLIC_FILE "qtwayland-compositor-config.h"
- PRIVATE_FILE "qtwayland-compositor-config_p.h"
-)
-include("${CMAKE_CURRENT_SOURCE_DIR}/compositor/configure.cmake")
-qt_feature_module_end(NO_MODULE)
-# special case end
-
+# See global/README for a description of the following module.
+qt_internal_add_module(WaylandGlobalPrivate INTERNAL_MODULE HEADER_MODULE)
add_subdirectory(qtwaylandscanner)
# special case begin
diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt
index 1e1b8389..c4656286 100644
--- a/src/client/CMakeLists.txt
+++ b/src/client/CMakeLists.txt
@@ -58,6 +58,7 @@ qt_internal_add_module(WaylandClient
LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
+ Qt::WaylandGlobalPrivate
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui
@@ -65,6 +66,7 @@ qt_internal_add_module(WaylandClient
PRIVATE_MODULE_INTERFACE
Qt::CorePrivate
Qt::GuiPrivate
+ Qt::WaylandGlobalPrivate
)
qt6_generate_wayland_protocol_client_sources(WaylandClient
diff --git a/src/client/configure.cmake b/src/client/configure.cmake
index 11612d11..c90204d0 100644
--- a/src/client/configure.cmake
+++ b/src/client/configure.cmake
@@ -1,167 +1,15 @@
-
-
#### Inputs
#### Libraries
-if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
- qt_find_package(Wayland PROVIDED_TARGETS Wayland::Client MODULE_NAME waylandclient QMAKE_LIB wayland-client)
-endif()
-if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
- qt_find_package(Wayland PROVIDED_TARGETS Wayland::Cursor MODULE_NAME waylandclient QMAKE_LIB wayland-cursor)
-endif()
-qt_add_qmake_lib_dependency(wayland-cursor wayland-client)
-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()
-# Same for XKB.
-if(NOT TARGET XKB::XKB)
- qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL)
-endif()
-# special case end
#### Tests
-# drm-egl-server
-qt_config_compile_test(drm_egl_server
- LABEL "DRM EGL Server"
- LIBRARIES
- EGL::EGL
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-#ifdef EGL_MESA_drm_image
-return 0;
-#else
-#error Requires EGL_MESA_drm_image to be defined
-return 1;
-#endif
- /* END TEST: */
- return 0;
-}
-")
-
-# libhybris-egl-server
-qt_config_compile_test(libhybris_egl_server
- LABEL "libhybris EGL Server"
- LIBRARIES
- EGL::EGL
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <hybris/eglplatformcommon/hybris_nativebufferext.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-#ifdef EGL_HYBRIS_native_buffer
-return 0;
-#else
-#error Requires EGL_HYBRIS_native_buffer to be defined
-return 1;
-#endif
- /* END TEST: */
- return 0;
-}
-")
-
-# dmabuf-server-buffer
-qt_config_compile_test(dmabuf_server_buffer
- LABEL "Linux dma-buf Buffer Sharing"
- LIBRARIES
- EGL::EGL
- Libdrm::Libdrm
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <drm_fourcc.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-#ifdef EGL_LINUX_DMA_BUF_EXT
-return 0;
-#else
-#error Requires EGL_LINUX_DMA_BUF_EXT
-return 1;
-#endif
- /* END TEST: */
- return 0;
-}
-")
-
-# vulkan-server-buffer
-qt_config_compile_test(vulkan_server_buffer
- LABEL "Vulkan Buffer Sharing"
- CODE
-"#define VK_USE_PLATFORM_WAYLAND_KHR 1
-#include <vulkan/vulkan.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-VkExportMemoryAllocateInfoKHR exportAllocInfo = {};
-exportAllocInfo.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR;
-exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;
-return 0;
- /* END TEST: */
- return 0;
-}
-")
-
-# egl_1_5-wayland
-qt_config_compile_test(egl_1_5_wayland
- LABEL "EGL 1.5 with Wayland Platform"
- LIBRARIES
- EGL::EGL
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <wayland-client.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);
- /* END TEST: */
- return 0;
-}
-")
-
-
#### Features
-qt_feature("wayland-client" PRIVATE
- LABEL "Qt Wayland Client"
- CONDITION NOT WIN32 AND Wayland_FOUND AND Wayland_FOUND AND WaylandScanner_FOUND
-)
-qt_feature("wayland-datadevice" PRIVATE
- CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard
-)
qt_feature("wayland-client-primary-selection" PRIVATE
LABEL "primary-selection clipboard"
CONDITION QT_FEATURE_clipboard
@@ -186,53 +34,6 @@ qt_feature("egl-extension-platform-wayland" PRIVATE
LABEL "EGL wayland platform extension"
CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_egl_1_5_wayland
)
-qt_feature("wayland-egl" PRIVATE
- LABEL "EGL"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND Wayland_FOUND AND ( NOT QNX OR QT_FEATURE_egl_extension_platform_wayland )
-)
-qt_feature("wayland-brcm" PRIVATE
- LABEL "Raspberry Pi"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_eglfs_brcm
-)
-qt_feature("xcomposite-egl" PRIVATE
- LABEL "XComposite EGL"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND QT_FEATURE_xlib AND XComposite_FOUND AND QT_FEATURE_egl_x11
-)
-qt_feature("xcomposite-glx" PRIVATE
- LABEL "XComposite GLX"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 AND QT_FEATURE_xlib AND XComposite_FOUND
-)
-qt_feature("wayland-drm-egl-server-buffer" PRIVATE
- LABEL "DRM EGL"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_drm_egl_server AND ( NOT QNX OR QT_FEATURE_egl_extension_platform_wayland )
-)
-qt_feature("wayland-libhybris-egl-server-buffer" PRIVATE
- LABEL "libhybris EGL"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_libhybris_egl_server
-)
-qt_feature("wayland-dmabuf-server-buffer" PRIVATE
- LABEL "Linux dma-buf server buffer integration"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_dmabuf_server_buffer
-)
-qt_feature("wayland-vulkan-server-buffer" PRIVATE
- LABEL "Vulkan-based server buffer integration"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_vulkan AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_vulkan_server_buffer
-)
-qt_feature("wayland-shm-emulation-server-buffer" PRIVATE
- LABEL "Shm emulation server buffer integration"
- CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl
-)
-qt_configure_add_summary_section(NAME "Qt Wayland Drivers")
-qt_configure_add_summary_entry(ARGS "wayland-egl")
-qt_configure_add_summary_entry(ARGS "wayland-brcm")
-qt_configure_add_summary_entry(ARGS "xcomposite-egl")
-qt_configure_add_summary_entry(ARGS "xcomposite-glx")
-qt_configure_add_summary_entry(ARGS "wayland-drm-egl-server-buffer")
-qt_configure_add_summary_entry(ARGS "wayland-libhybris-egl-server-buffer")
-qt_configure_add_summary_entry(ARGS "wayland-dmabuf-server-buffer")
-qt_configure_add_summary_entry(ARGS "wayland-vulkan-server-buffer")
-qt_configure_add_summary_entry(ARGS "wayland-shm-emulation-server-buffer")
-qt_configure_end_summary_section() # end of "Qt Wayland Drivers" section
qt_configure_add_summary_section(NAME "Qt Wayland Client Shell Integrations")
qt_configure_add_summary_entry(ARGS "wayland-client-xdg-shell")
qt_configure_add_summary_entry(ARGS "wayland-client-xdg-shell-v5")
@@ -240,4 +41,3 @@ qt_configure_add_summary_entry(ARGS "wayland-client-xdg-shell-v6")
qt_configure_add_summary_entry(ARGS "wayland-client-ivi-shell")
qt_configure_add_summary_entry(ARGS "wayland-client-wl-shell")
qt_configure_end_summary_section() # end of "Qt Wayland Client Shell Integrations" section
-qt_configure_add_summary_entry(ARGS "wayland-client")
diff --git a/src/client/qtwaylandclientglobal_p.h b/src/client/qtwaylandclientglobal_p.h
index f2106d0b..1a0840b6 100644
--- a/src/client/qtwaylandclientglobal_p.h
+++ b/src/client/qtwaylandclientglobal_p.h
@@ -51,9 +51,9 @@
// We mean it.
//
+#include <QtWaylandGlobal/private/qtwaylandglobal-config_p.h>
#include <QtWaylandClient/qtwaylandclientglobal.h>
#include <QtGui/private/qtguiglobal_p.h>
#include <QtWaylandClient/private/qtwaylandclient-config_p.h>
#endif //QWAYLANDCLIENTGLOBAL_P_H
-
diff --git a/src/compositor/CMakeLists.txt b/src/compositor/CMakeLists.txt
index e956c3b6..7bc1d070 100644
--- a/src/compositor/CMakeLists.txt
+++ b/src/compositor/CMakeLists.txt
@@ -60,6 +60,7 @@ qt_internal_add_module(WaylandCompositor
LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
+ Qt::WaylandGlobalPrivate
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui
@@ -67,6 +68,7 @@ qt_internal_add_module(WaylandCompositor
PRIVATE_MODULE_INTERFACE
Qt::CorePrivate
Qt::GuiPrivate
+ Qt::WaylandGlobalPrivate
)
# Resources:
diff --git a/src/compositor/configure.cmake b/src/compositor/configure.cmake
index 9c5864e3..3f33ed38 100644
--- a/src/compositor/configure.cmake
+++ b/src/compositor/configure.cmake
@@ -1,5 +1,3 @@
-
-
#### Inputs
@@ -7,106 +5,13 @@
#### Libraries
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
- qt_find_package(Wayland PROVIDED_TARGETS Wayland::Server MODULE_NAME waylandcompositor QMAKE_LIB wayland-server)
-endif()
-if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
- qt_find_package(Wayland PROVIDED_TARGETS Wayland::Egl MODULE_NAME waylandcompositor QMAKE_LIB wayland-egl)
-endif()
-if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(Waylandkms PROVIDED_TARGETS PkgConfig::Waylandkms MODULE_NAME waylandcompositor QMAKE_LIB wayland-kms)
endif()
-qt_find_package(XComposite PROVIDED_TARGETS PkgConfig::XComposite MODULE_NAME waylandcompositor 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()
-# Same for XKB.
-if(NOT TARGET XKB::XKB)
- qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL)
-endif()
#### Tests
-# drm-egl-server
-qt_config_compile_test(drm_egl_server
- LIBRARIES
- EGL::EGL
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-#ifdef EGL_MESA_drm_image
-return 0;
-#else
-#error Requires EGL_MESA_drm_image to be defined
-return 1;
-#endif
- /* END TEST: */
- return 0;
-}
-")
-
-# libhybris-egl-server
-qt_config_compile_test(libhybris_egl_server
- LIBRARIES
- EGL::EGL
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <hybris/eglplatformcommon/hybris_nativebufferext.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-#ifdef EGL_HYBRIS_native_buffer
-return 0;
-#else
-#error Requires EGL_HYBRIS_native_buffer to be defined
-return 1;
-#endif
- /* END TEST: */
- return 0;
-}
-")
-
-# dmabuf-server-buffer
-qt_config_compile_test(dmabuf_server_buffer
- LABEL "Linux dma-buf Buffer Sharing"
- LIBRARIES
- EGL::EGL
- Libdrm::Libdrm
- CODE
-"
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <drm_fourcc.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-#ifdef EGL_LINUX_DMA_BUF_EXT
-return 0;
-#else
-#error Requires EGL_LINUX_DMA_BUF_EXT
-return 1;
-#endif
- /* END TEST: */
- return 0;
-}
-")
-
# dmabuf-client-buffer
qt_config_compile_test(dmabuf_client_buffer
LABEL "Linux Client dma-buf Buffer Sharing"
@@ -138,77 +43,13 @@ return 0;
}
")
-# vulkan-server-buffer
-qt_config_compile_test(vulkan_server_buffer
- LABEL "Vulkan Buffer Sharing"
- CODE
-"#define VK_USE_PLATFORM_WAYLAND_KHR 1
-#include <vulkan/vulkan.h>
-
-int main(int argc, char **argv)
-{
- (void)argc; (void)argv;
- /* BEGIN TEST: */
-VkExportMemoryAllocateInfoKHR exportAllocInfo = {};
-exportAllocInfo.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR;
-exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;
-return 0;
- /* END TEST: */
- return 0;
-}
-")
-
-
#### Features
-qt_feature("wayland-server" PRIVATE
- LABEL "Qt Wayland Compositor"
- CONDITION NOT WIN32 AND Wayland_FOUND AND WaylandScanner_FOUND
-)
-qt_feature("wayland-datadevice" PRIVATE
- CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard
-)
-qt_feature("wayland-egl" PRIVATE
- LABEL "EGL"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND Wayland_FOUND
-)
-qt_feature("wayland-brcm" PRIVATE
- LABEL "Raspberry Pi"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_eglfs_brcm
-)
-qt_feature("xcomposite-egl" PRIVATE
- LABEL "XComposite EGL"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_egl AND QT_FEATURE_opengl AND XComposite_FOUND
-)
-qt_feature("xcomposite-glx" PRIVATE
- LABEL "XComposite EGL"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 AND QT_FEATURE_xlib AND XComposite_FOUND
-)
-qt_feature("wayland-drm-egl-server-buffer" PRIVATE
- LABEL "DRM EGL"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_drm_egl_server
-)
-qt_feature("wayland-libhybris-egl-server-buffer" PRIVATE
- LABEL "libhybris EGL"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_libhybris_egl_server
-)
-qt_feature("wayland-dmabuf-server-buffer" PRIVATE
- LABEL "Linux dma-buf server buffer integration"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_dmabuf_server_buffer
-)
qt_feature("wayland-dmabuf-client-buffer" PRIVATE
LABEL "Linux dma-buf client buffer integration"
CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_dmabuf_client_buffer
)
-qt_feature("wayland-vulkan-server-buffer" PRIVATE
- LABEL "Vulkan-based server buffer integration"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_vulkan AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_vulkan_server_buffer
-)
-qt_feature("wayland-shm-emulation-server-buffer" PRIVATE
- LABEL "Shm emulation server buffer"
- CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl
-)
qt_feature("wayland-layer-integration-vsp2" PRIVATE
LABEL "VSP2 hardware layer integration"
CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_eglfs_vsp2 AND Waylandkms_FOUND
@@ -218,7 +59,6 @@ qt_feature("wayland-compositor-quick" PUBLIC
PURPOSE "Allows QtWayland compositor types to be used with QtQuick"
CONDITION QT_FEATURE_wayland_server AND TARGET Qt::Quick
)
-qt_configure_add_summary_entry(ARGS "wayland-server")
qt_configure_add_summary_section(NAME "Qt Wayland Compositor Layer Plugins")
qt_configure_add_summary_entry(ARGS "wayland-layer-integration-vsp2")
qt_configure_end_summary_section() # end of "Qt Wayland Compositor Layer Plugins" section
diff --git a/src/compositor/global/qtwaylandcompositorglobal_p.h b/src/compositor/global/qtwaylandcompositorglobal_p.h
index 11a4a3d7..102e738e 100644
--- a/src/compositor/global/qtwaylandcompositorglobal_p.h
+++ b/src/compositor/global/qtwaylandcompositorglobal_p.h
@@ -41,6 +41,7 @@
// We mean it.
//
+#include <QtWaylandGlobal/private/qtwaylandglobal-config_p.h>
#include <QtWaylandCompositor/qtwaylandcompositorglobal.h>
#include <QtGui/private/qtguiglobal_p.h>
#include <QtWaylandCompositor/private/qtwaylandcompositor-config_p.h>
diff --git a/src/configure.cmake b/src/configure.cmake
new file mode 100644
index 00000000..6939fbe9
--- /dev/null
+++ b/src/configure.cmake
@@ -0,0 +1,249 @@
+# configure.cmake for the QtWaylandGlobalPrivate module
+
+#### Inputs
+
+
+
+#### Libraries
+
+if(LINUX OR QT_FIND_ALL_PACKAGES_ALWAYS)
+ # waylandclient libraries
+ qt_find_package(Wayland
+ PROVIDED_TARGETS Wayland::Client
+ MODULE_NAME waylandclient
+ QMAKE_LIB wayland-client)
+ qt_find_package(Wayland
+ PROVIDED_TARGETS Wayland::Cursor
+ MODULE_NAME waylandclient
+ QMAKE_LIB wayland-cursor)
+ qt_add_qmake_lib_dependency(wayland-cursor wayland-client)
+ qt_find_package(Wayland
+ PROVIDED_TARGETS Wayland::Egl
+ MODULE_NAME waylandclient
+ QMAKE_LIB wayland-egl)
+ qt_find_package(XComposite
+ PROVIDED_TARGETS PkgConfig::XComposite
+ MODULE_NAME waylandclient QMAKE_LIB xcomposite)
+
+ # waylandcompositor libraries
+ qt_find_package(Wayland
+ PROVIDED_TARGETS Wayland::Server
+ MODULE_NAME waylandcompositor
+ QMAKE_LIB wayland-server)
+ qt_find_package(Wayland
+ PROVIDED_TARGETS Wayland::Egl
+ MODULE_NAME waylandcompositor
+ QMAKE_LIB wayland-egl)
+ qt_find_package(XComposite
+ PROVIDED_TARGETS PkgConfig::XComposite
+ MODULE_NAME waylandcompositor QMAKE_LIB xcomposite)
+
+ # 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()
+ # Same for XKB.
+ if(NOT TARGET XKB::XKB)
+ qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL)
+ endif()
+endif()
+
+
+#### Tests
+
+# drm-egl-server
+qt_config_compile_test(drm_egl_server
+ LABEL "DRM EGL Server"
+ LIBRARIES
+ EGL::EGL
+ CODE
+ "
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+#ifdef EGL_MESA_drm_image
+return 0;
+#else
+#error Requires EGL_MESA_drm_image to be defined
+return 1;
+#endif
+ /* END TEST: */
+ return 0;
+}
+")
+
+# libhybris-egl-server
+qt_config_compile_test(libhybris_egl_server
+ LABEL "libhybris EGL Server"
+ LIBRARIES
+ EGL::EGL
+ CODE
+ "
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <hybris/eglplatformcommon/hybris_nativebufferext.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+#ifdef EGL_HYBRIS_native_buffer
+return 0;
+#else
+#error Requires EGL_HYBRIS_native_buffer to be defined
+return 1;
+#endif
+ /* END TEST: */
+ return 0;
+}
+")
+
+# dmabuf-server-buffer
+qt_config_compile_test(dmabuf_server_buffer
+ LABEL "Linux dma-buf Buffer Sharing"
+ LIBRARIES
+ EGL::EGL
+ Libdrm::Libdrm
+ CODE
+ "
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <drm_fourcc.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+#ifdef EGL_LINUX_DMA_BUF_EXT
+return 0;
+#else
+#error Requires EGL_LINUX_DMA_BUF_EXT
+return 1;
+#endif
+ /* END TEST: */
+ return 0;
+}
+")
+
+# vulkan-server-buffer
+qt_config_compile_test(vulkan_server_buffer
+ LABEL "Vulkan Buffer Sharing"
+ CODE
+ "#define VK_USE_PLATFORM_WAYLAND_KHR 1
+#include <vulkan/vulkan.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+VkExportMemoryAllocateInfoKHR exportAllocInfo = {};
+exportAllocInfo.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR;
+exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;
+return 0;
+ /* END TEST: */
+ return 0;
+}
+")
+
+# egl_1_5-wayland
+qt_config_compile_test(egl_1_5_wayland
+ LABEL "EGL 1.5 with Wayland Platform"
+ LIBRARIES
+ EGL::EGL
+ CODE
+ "
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <wayland-client.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);
+ /* END TEST: */
+ return 0;
+}
+")
+
+
+#### Features
+
+qt_feature("wayland-client" PRIVATE
+ LABEL "Qt Wayland Client"
+ CONDITION NOT WIN32 AND Wayland_FOUND AND WaylandScanner_FOUND
+)
+qt_feature("wayland-server" PRIVATE
+ LABEL "Qt Wayland Compositor"
+ CONDITION NOT WIN32 AND Wayland_FOUND AND WaylandScanner_FOUND
+)
+qt_feature("wayland-egl" PRIVATE
+ LABEL "EGL"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server)
+ AND QT_FEATURE_opengl AND QT_FEATURE_egl
+ AND (NOT QNX OR QT_FEATURE_egl_extension_platform_wayland)
+)
+qt_feature("wayland-brcm" PRIVATE
+ LABEL "Raspberry Pi"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_eglfs_brcm
+)
+qt_feature("wayland-drm-egl-server-buffer" PRIVATE
+ LABEL "DRM EGL"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl
+ AND QT_FEATURE_egl AND TEST_drm_egl_server
+ AND (NOT QNX OR QT_FEATURE_egl_extension_platform_wayland)
+)
+qt_feature("wayland-libhybris-egl-server-buffer" PRIVATE
+ LABEL "libhybris EGL"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl
+ AND QT_FEATURE_egl AND TEST_libhybris_egl_server
+)
+qt_feature("wayland-dmabuf-server-buffer" PRIVATE
+ LABEL "Linux dma-buf server buffer integration"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl
+ AND QT_FEATURE_egl AND TEST_dmabuf_server_buffer
+)
+qt_feature("wayland-shm-emulation-server-buffer" PRIVATE
+ LABEL "Shm emulation server buffer integration"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl
+)
+qt_feature("wayland-vulkan-server-buffer" PRIVATE
+ LABEL "Vulkan-based server buffer integration"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_vulkan
+ AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_vulkan_server_buffer
+)
+qt_feature("wayland-datadevice" PRIVATE
+ CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard
+)
+qt_feature("xcomposite-egl" PRIVATE
+ LABEL "XComposite EGL"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server)
+ AND QT_FEATURE_opengl AND QT_FEATURE_egl AND QT_FEATURE_xlib
+ AND XComposite_FOUND AND QT_FEATURE_egl_x11
+)
+qt_feature("xcomposite-glx" PRIVATE
+ LABEL "XComposite GLX"
+ CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server)
+ AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2
+ AND QT_FEATURE_xlib AND XComposite_FOUND
+)
+
+qt_configure_add_summary_entry(ARGS "wayland-client")
+qt_configure_add_summary_entry(ARGS "wayland-server")
+qt_configure_add_summary_section(NAME "Qt Wayland Drivers")
+qt_configure_add_summary_entry(ARGS "wayland-egl")
+qt_configure_add_summary_entry(ARGS "wayland-brcm")
+qt_configure_add_summary_entry(ARGS "wayland-drm-egl-server-buffer")
+qt_configure_add_summary_entry(ARGS "wayland-libhybris-egl-server-buffer")
+qt_configure_add_summary_entry(ARGS "wayland-dmabuf-server-buffer")
+qt_configure_add_summary_entry(ARGS "wayland-shm-emulation-server-buffer")
+qt_configure_add_summary_entry(ARGS "wayland-vulkan-server-buffer")
+qt_configure_add_summary_entry(ARGS "xcomposite-egl")
+qt_configure_add_summary_entry(ARGS "xcomposite-glx")
+qt_configure_end_summary_section() # end of "Qt Wayland Drivers" section
diff --git a/src/global/README b/src/global/README
new file mode 100644
index 00000000..9b045d4d
--- /dev/null
+++ b/src/global/README
@@ -0,0 +1,9 @@
+The WaylandGlobalPrivate module is a module that contains configure
+features, shared by the modules of the qtwayland repository.
+
+The actual definition of this module is in src/CMakeLists.txt,
+because we need to have the qt_find_package calls in a directory scope
+above src/client and src/compositor.
+
+This file here mostly exists to make the otherwise empty src/global
+directory known to git.
diff --git a/sync.profile b/sync.profile
index 1a88e443..67026fa7 100644
--- a/sync.profile
+++ b/sync.profile
@@ -1,4 +1,5 @@
%modules = ( # path to module name map
+ "QtWaylandGlobal" => "$basedir/src/global",
"QtWaylandCompositor" => "$basedir/src/compositor",
"QtWaylandClient" => "$basedir/src/client",
"QtWaylandEglClientHwIntegration" => "$basedir/src/hardwareintegration/client/wayland-egl",