From d674a99d19efcad866a773fe6c848a7626a61c0a Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Tue, 2 Aug 2022 10:52:59 +0200
Subject: [PATCH] Add CMake option to build WITHOUT_X11

We want to be able to build without X11 support even if some of the used
libraries may not work w/o X11 themselves yet or need to be built with
X11 support for other reverse dependencies.

HAVE_X11 already exists and is set automagically so far, but using
-DCMAKE_DISABLE_FIND_PACKAGE_X11 will break if any dependencies list X11
as required in their cmake config.

Introducing this option means there is no behavior change by default,
cmake will just skip finding X11 or adding unwanted features if the
option is enabled.

Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
 CMakeLists.txt                                | 51 ++++++++++---------
 .../core/config-x11.h.cmake                   |  1 +
 src/plasmaquick/CMakeLists.txt                |  8 +--
 src/plasmaquick/dialog.cpp                    |  1 +
 4 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3b6405725..15698543f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -88,28 +88,33 @@ set_package_properties(KF5DocTools PROPERTIES DESCRIPTION "Tools to generate doc
                        TYPE OPTIONAL
                       )
 
-#optional features
-find_package(X11 MODULE)
-set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries"
-                       URL "https://www.x.org/"
-                       TYPE OPTIONAL
-                      )
-find_package(XCB MODULE COMPONENTS XCB COMPOSITE DAMAGE SHAPE XFIXES RENDER)
-set_package_properties(XCB PROPERTIES DESCRIPTION "X protocol C-language Binding"
-                       URL "https://xcb.freedesktop.org/"
-                       TYPE OPTIONAL
-                      )
-if(X11_FOUND AND XCB_XCB_FOUND)
-  set(HAVE_X11 1)
-  if (QT_MAJOR_VERSION STREQUAL "5")
-      find_package(Qt5X11Extras ${REQUIRED_QT_VERSION} NO_MODULE)
-  elseif (QT_MAJOR_VERSION STREQUAL "6")
-      find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui) # qtx11extras_p.h
-  endif()
-  #X11_Xrender discovery is done by FindX11
-  #add_feature_info("X Rendering Extension (libXrender)" X11_Xrender_FOUND "Support for compositing, rendering operations, and alpha-blending. STRONGLY RECOMMENDED")
-else()
-  set(HAVE_X11 0)
+option(WITHOUT_X11 "Build without X11 support (skips finding X11)." OFF)
+if(NOT WITHOUT_X11)
+    #optional features
+    find_package(X11 MODULE)
+    set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries"
+                        URL "https://www.x.org/"
+                        TYPE OPTIONAL
+                        )
+    find_package(XCB MODULE COMPONENTS XCB COMPOSITE DAMAGE SHAPE XFIXES RENDER)
+    set_package_properties(XCB PROPERTIES DESCRIPTION "X protocol C-language Binding"
+                        URL "https://xcb.freedesktop.org/"
+                        TYPE OPTIONAL
+                        )
+    if(X11_FOUND AND XCB_XCB_FOUND)
+        set(HAVE_X11 1)
+        if (QT_MAJOR_VERSION STREQUAL "5")
+            find_package(Qt5X11Extras ${REQUIRED_QT_VERSION} NO_MODULE)
+        elseif (QT_MAJOR_VERSION STREQUAL "6")
+            find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui) # qtx11extras_p.h
+        endif()
+        #X11_Xrender discovery is done by FindX11
+        #add_feature_info("X Rendering Extension (libXrender)" X11_Xrender_FOUND "Support for compositing, rendering operations, and alpha-blending. STRONGLY RECOMMENDED")
+        set(HAVE_XCB_SHAPE ${XCB_SHAPE_FOUND})
+    else()
+        set(HAVE_X11 0)
+        set(HAVE_XCB_SHAPE 0)
+    endif()
 endif()
 
 find_package(OpenGL)
@@ -125,7 +130,7 @@ set_package_properties(EGL PROPERTIES
                       )
 
 get_target_property(QtGui_Enabled_Features Qt${QT_MAJOR_VERSION}::Gui QT_ENABLED_PUBLIC_FEATURES)
-if(OpenGL_GLX_FOUND AND X11_FOUND AND (QtGui_Enabled_Features MATCHES "opengl"))
+if(OpenGL_GLX_FOUND AND HAVE_X11 AND (QtGui_Enabled_Features MATCHES "opengl"))
     add_feature_info(GLX OpenGL_GLX_FOUND "OpenGL GLX libraries.")
     set(HAVE_GLX 1)
 else()
diff --git a/src/declarativeimports/core/config-x11.h.cmake b/src/declarativeimports/core/config-x11.h.cmake
index 2f543d547..ad1b45099 100644
--- a/src/declarativeimports/core/config-x11.h.cmake
+++ b/src/declarativeimports/core/config-x11.h.cmake
@@ -1,2 +1,3 @@
 #cmakedefine01 HAVE_X11
 #cmakedefine01 HAVE_XCB_COMPOSITE
+#cmakedefine01 HAVE_XCB_SHAPE
diff --git a/src/plasmaquick/CMakeLists.txt b/src/plasmaquick/CMakeLists.txt
index 37bbc5097..dd2442e70 100644
--- a/src/plasmaquick/CMakeLists.txt
+++ b/src/plasmaquick/CMakeLists.txt
@@ -1,9 +1,3 @@
-if(HAVE_X11 AND XCB_XCB_FOUND AND XCB_SHAPE_FOUND)
-    add_definitions(-DHAVE_XCB_SHAPE=1)
-else()
-    add_definitions(-DHAVE_XCB_SHAPE=0)
-endif()
-
 add_library(KF5PlasmaQuick SHARED)
 add_library(KF5::PlasmaQuick ALIAS KF5PlasmaQuick)
 
@@ -81,7 +75,7 @@ if(HAVE_X11)
         target_link_libraries(KF5PlasmaQuick PRIVATE Qt6::GuiPrivate)
     endif()
 
-    if(XCB_SHAPE_FOUND)
+    if(HAVE_XCB_SHAPE)
         target_link_libraries(KF5PlasmaQuick PRIVATE XCB::SHAPE)
     endif()
 endif()
diff --git a/src/plasmaquick/dialog.cpp b/src/plasmaquick/dialog.cpp
index 452e36523..2eabd5fb7 100644
--- a/src/plasmaquick/dialog.cpp
+++ b/src/plasmaquick/dialog.cpp
@@ -11,6 +11,7 @@
 #include "../declarativeimports/core/framesvgitem.h"
 #include "appletquickitem.h"
 #include "config-plasma.h"
+#include "../declarativeimports/core/config-x11.h"
 #include "configview.h"
 #include "dialogshadows_p.h"
 #include "view.h"
-- 
GitLab

