From 918dd2392d21ee7bbbaecd5adf5b40f8dd8f2fb7 Mon Sep 17 00:00:00 2001
From: outfoxxed <outfoxxed@outfoxxed.me>
Date: Sat, 11 Jan 2025 23:59:19 -0800
Subject: [PATCH] build/wayland: do not link to a target in wl_proto

---
 src/wayland/CMakeLists.txt                    | 29 +++++++++----------
 .../hyprland/focus_grab/CMakeLists.txt        |  6 ++--
 .../hyprland/global_shortcuts/CMakeLists.txt  |  6 ++--
 src/wayland/hyprland/surface/CMakeLists.txt   |  6 ++--
 src/wayland/session_lock/CMakeLists.txt       |  3 +-
 .../toplevel_management/CMakeLists.txt        |  6 ++--
 src/wayland/wlr_layershell/CMakeLists.txt     |  5 ++--
 7 files changed, 27 insertions(+), 34 deletions(-)

diff --git a/src/wayland/CMakeLists.txt b/src/wayland/CMakeLists.txt
index db03cf16..54bb59bc 100644
--- a/src/wayland/CMakeLists.txt
+++ b/src/wayland/CMakeLists.txt
@@ -28,7 +28,7 @@ qs_add_pchset(wayland-protocol
 		<qstring.h>
 )
 
-function (wl_proto target name path)
+function (wl_proto target name dir)
 	set(PROTO_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/wl-proto/${name})
 	make_directory(${PROTO_BUILD_PATH})
 
@@ -36,39 +36,38 @@ function (wl_proto target name path)
 	set(WS_CLIENT_CODE "${PROTO_BUILD_PATH}/wayland-${name}.c")
 	set(QWS_CLIENT_HEADER "${PROTO_BUILD_PATH}/qwayland-${name}.h")
 	set(QWS_CLIENT_CODE "${PROTO_BUILD_PATH}/qwayland-${name}.cpp")
+	set(PATH "${dir}/${name}.xml")
 
 	add_custom_command(
 		OUTPUT "${WS_CLIENT_HEADER}"
-		COMMAND Wayland::Scanner client-header "${path}" "${WS_CLIENT_HEADER}"
-		DEPENDS Wayland::Scanner "${path}"
+		COMMAND Wayland::Scanner client-header "${PATH}" "${WS_CLIENT_HEADER}"
+		DEPENDS Wayland::Scanner "${PATH}"
 	)
 
 	add_custom_command(
 		OUTPUT "${WS_CLIENT_CODE}"
-		COMMAND Wayland::Scanner private-code "${path}" "${WS_CLIENT_CODE}"
-		DEPENDS Wayland::Scanner "${path}"
+		COMMAND Wayland::Scanner private-code "${PATH}" "${WS_CLIENT_CODE}"
+		DEPENDS Wayland::Scanner "${PATH}"
 	)
 
 	add_custom_command(
 		OUTPUT "${QWS_CLIENT_HEADER}"
-		COMMAND Qt6::qtwaylandscanner client-header "${path}" > "${QWS_CLIENT_HEADER}"
-		DEPENDS Qt6::qtwaylandscanner "${path}"
+		COMMAND Qt6::qtwaylandscanner client-header "${PATH}" > "${QWS_CLIENT_HEADER}"
+		DEPENDS Qt6::qtwaylandscanner "${PATH}"
 	)
 
 	add_custom_command(
 		OUTPUT "${QWS_CLIENT_CODE}"
-		COMMAND Qt6::qtwaylandscanner client-code "${path}" > "${QWS_CLIENT_CODE}"
-		DEPENDS Qt6::qtwaylandscanner "${path}"
+		COMMAND Qt6::qtwaylandscanner client-code "${PATH}" > "${QWS_CLIENT_CODE}"
+		DEPENDS Qt6::qtwaylandscanner "${PATH}"
 	)
 
 	add_library(wl-proto-${name}-wl STATIC ${WS_CLIENT_HEADER} ${WS_CLIENT_CODE})
-	add_library(wl-proto-${name} STATIC ${QWS_CLIENT_HEADER} ${QWS_CLIENT_CODE})
+	add_library(${target} STATIC ${QWS_CLIENT_HEADER} ${QWS_CLIENT_CODE})
 
-	target_include_directories(wl-proto-${name} INTERFACE ${PROTO_BUILD_PATH})
-	target_link_libraries(wl-proto-${name} wl-proto-${name}-wl Qt6::WaylandClient Qt6::WaylandClientPrivate)
-	qs_pch(wl-proto-${name} SET wayland-protocol)
-
-	target_link_libraries(${target} PRIVATE wl-proto-${name})
+	target_include_directories(${target} INTERFACE ${PROTO_BUILD_PATH})
+	target_link_libraries(${target} wl-proto-${name}-wl Qt6::WaylandClient Qt6::WaylandClientPrivate)
+	qs_pch(${target} SET wayland-protocol)
 endfunction()
 
 # -----
diff --git a/src/wayland/hyprland/focus_grab/CMakeLists.txt b/src/wayland/hyprland/focus_grab/CMakeLists.txt
index 04b6e0a9..95825628 100644
--- a/src/wayland/hyprland/focus_grab/CMakeLists.txt
+++ b/src/wayland/hyprland/focus_grab/CMakeLists.txt
@@ -14,13 +14,11 @@ qs_add_module_deps_light(quickshell-hyprland-focus-grab Quickshell)
 
 install_qml_module(quickshell-hyprland-focus-grab)
 
-wl_proto(quickshell-hyprland-focus-grab
-	hyprland-focus-grab-v1
-	"${CMAKE_CURRENT_SOURCE_DIR}/hyprland-focus-grab-v1.xml"
-)
+wl_proto(wlp-hyprland-focus-grab hyprland-focus-grab-v1 "${CMAKE_CURRENT_SOURCE_DIR}")
 
 target_link_libraries(quickshell-hyprland-focus-grab PRIVATE
 	Qt::Quick Qt::WaylandClient Qt::WaylandClientPrivate wayland-client
+	wlp-hyprland-focus-grab
 )
 
 qs_module_pch(quickshell-hyprland-focus-grab SET large)
diff --git a/src/wayland/hyprland/global_shortcuts/CMakeLists.txt b/src/wayland/hyprland/global_shortcuts/CMakeLists.txt
index 986f2d8e..ece0037e 100644
--- a/src/wayland/hyprland/global_shortcuts/CMakeLists.txt
+++ b/src/wayland/hyprland/global_shortcuts/CMakeLists.txt
@@ -12,14 +12,12 @@ qt_add_qml_module(quickshell-hyprland-global-shortcuts
 
 install_qml_module(quickshell-hyprland-global-shortcuts)
 
-wl_proto(quickshell-hyprland-global-shortcuts
-	hyprland-global-shortcuts-v1
-	"${CMAKE_CURRENT_SOURCE_DIR}/hyprland-global-shortcuts-v1.xml"
-)
+wl_proto(wlp-hyprland-shortcuts hyprland-global-shortcuts-v1 "${CMAKE_CURRENT_SOURCE_DIR}")
 
 target_link_libraries(quickshell-hyprland-global-shortcuts PRIVATE
 	Qt::Qml Qt::WaylandClient Qt::WaylandClientPrivate wayland-client
 	Qt::Quick # pch
+	wlp-hyprland-shortcuts
 )
 
 qs_module_pch(quickshell-hyprland-global-shortcuts)
diff --git a/src/wayland/hyprland/surface/CMakeLists.txt b/src/wayland/hyprland/surface/CMakeLists.txt
index 04fa5c58..7f889c96 100644
--- a/src/wayland/hyprland/surface/CMakeLists.txt
+++ b/src/wayland/hyprland/surface/CMakeLists.txt
@@ -12,13 +12,11 @@ qt_add_qml_module(quickshell-hyprland-surface-extensions
 
 install_qml_module(quickshell-hyprland-surface-extensions)
 
-wl_proto(quickshell-hyprland-surface-extensions
-	hyprland-surface-v1
-	"${CMAKE_CURRENT_SOURCE_DIR}/hyprland-surface-v1.xml"
-)
+wl_proto(wlp-hyprland-surface hyprland-surface-v1 "${CMAKE_CURRENT_SOURCE_DIR}")
 
 target_link_libraries(quickshell-hyprland-surface-extensions PRIVATE
 	Qt::Quick Qt::WaylandClient Qt::WaylandClientPrivate wayland-client
+	wlp-hyprland-surface
 )
 
 qs_module_pch(quickshell-hyprland-surface-extensions)
diff --git a/src/wayland/session_lock/CMakeLists.txt b/src/wayland/session_lock/CMakeLists.txt
index 245d1f25..d157fc13 100644
--- a/src/wayland/session_lock/CMakeLists.txt
+++ b/src/wayland/session_lock/CMakeLists.txt
@@ -6,10 +6,11 @@ qt_add_library(quickshell-wayland-sessionlock STATIC
 	session_lock.cpp
 )
 
-wl_proto(quickshell-wayland-sessionlock ext-session-lock-v1 "${WAYLAND_PROTOCOLS}/staging/ext-session-lock/ext-session-lock-v1.xml")
+wl_proto(wlp-session-lock ext-session-lock-v1 "${WAYLAND_PROTOCOLS}/staging/ext-session-lock")
 
 target_link_libraries(quickshell-wayland-sessionlock PRIVATE
 	Qt::Quick Qt::WaylandClient Qt::WaylandClientPrivate wayland-client
+	wlp-session-lock
 )
 
 qs_pch(quickshell-wayland-sessionlock SET large)
diff --git a/src/wayland/toplevel_management/CMakeLists.txt b/src/wayland/toplevel_management/CMakeLists.txt
index 0db82aae..97f8c7a4 100644
--- a/src/wayland/toplevel_management/CMakeLists.txt
+++ b/src/wayland/toplevel_management/CMakeLists.txt
@@ -16,13 +16,11 @@ qs_add_module_deps_light(quickshell-wayland-toplevel-management
 
 install_qml_module(quickshell-wayland-toplevel-management)
 
-wl_proto(quickshell-wayland-toplevel-management
-	wlr-foreign-toplevel-management-unstable-v1
-	"${CMAKE_CURRENT_SOURCE_DIR}/wlr-foreign-toplevel-management-unstable-v1.xml"
-)
+wl_proto(wlp-foreign-toplevel wlr-foreign-toplevel-management-unstable-v1 "${CMAKE_CURRENT_SOURCE_DIR}")
 
 target_link_libraries(quickshell-wayland-toplevel-management PRIVATE
 	Qt::Quick Qt::WaylandClient Qt::WaylandClientPrivate wayland-client
+	wlp-foreign-toplevel
 )
 
 qs_module_pch(quickshell-wayland-toplevel-management SET large)
diff --git a/src/wayland/wlr_layershell/CMakeLists.txt b/src/wayland/wlr_layershell/CMakeLists.txt
index f22ee0ba..69b24e92 100644
--- a/src/wayland/wlr_layershell/CMakeLists.txt
+++ b/src/wayland/wlr_layershell/CMakeLists.txt
@@ -14,13 +14,14 @@ qs_add_module_deps_light(quickshell-wayland-layershell Quickshell Quickshell.Way
 
 install_qml_module(quickshell-wayland-layershell)
 
-wl_proto(quickshell-wayland-layershell wlr-layer-shell-unstable-v1 "${CMAKE_CURRENT_SOURCE_DIR}/wlr-layer-shell-unstable-v1.xml")
+wl_proto(wlp-layer-shell wlr-layer-shell-unstable-v1 "${CMAKE_CURRENT_SOURCE_DIR}")
 
 # link dependency of wlr-layer-shell's codegen
-wl_proto(quickshell-wayland-layershell xdg-shell "${WAYLAND_PROTOCOLS}/stable/xdg-shell/xdg-shell.xml")
+wl_proto(wlp-xdg-shell xdg-shell "${WAYLAND_PROTOCOLS}/stable/xdg-shell")
 
 target_link_libraries(quickshell-wayland-layershell PRIVATE
 	Qt::Quick Qt::WaylandClient Qt::WaylandClientPrivate wayland-client
+	wlp-layer-shell wlp-xdg-shell
 )
 
 qs_module_pch(quickshell-wayland-layershell SET large)