Upstream-status: https://github.com/desktop-app/cmake_helpers/pull/305

From fa47432aeccb2cf657a79f8e1a3af1ef0663b4c6 Mon Sep 17 00:00:00 2001
From: dan <i@dan.games>
Date: Sun, 12 Oct 2025 18:45:40 +0800
Subject: [PATCH] Look for system-wide cppgir before fallback to the bundled
 copy.

---
 external/glib/CMakeLists.txt        |  7 ++++---
 external/glib/generate_cppgir.cmake | 16 +++++++++++-----
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/external/glib/CMakeLists.txt b/external/glib/CMakeLists.txt
index 9b80f23..1a2e9b7 100644
--- a/external/glib/CMakeLists.txt
+++ b/external/glib/CMakeLists.txt
@@ -21,14 +21,15 @@ INTERFACE
     GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_56
 )
 
-block()
+include(generate_cppgir.cmake)
+
+if (NOT CppGir_FOUND)
     set(BUILD_TESTING OFF)
     set(BUILD_DOC OFF)
     set(BUILD_EXAMPLES OFF)
     add_subdirectory(cppgir EXCLUDE_FROM_ALL)
-endblock()
+endif()
 
-include(generate_cppgir.cmake)
 
 if (DESKTOP_APP_GLIB2_gio-unix-2.0_VERSION VERSION_GREATER_EQUAL 2.86)
     generate_cppgir(external_glib GioUnix-2.0)
diff --git a/external/glib/generate_cppgir.cmake b/external/glib/generate_cppgir.cmake
index c4475c6..012fd52 100644
--- a/external/glib/generate_cppgir.cmake
+++ b/external/glib/generate_cppgir.cmake
@@ -4,6 +4,8 @@
 # For license and copyright information please follow this link:
 # https://github.com/desktop-app/legal/blob/master/LEGAL
 
+find_package(CppGir 2.0)
+
 function(generate_cppgir target_name gir)
     set(cppgir_loc ${cmake_helpers_loc}/external/glib/cppgir)
 
@@ -13,10 +15,14 @@ function(generate_cppgir target_name gir)
 
     set(gen_timestamp ${gen_dst}/${target_name}_cppgir.timestamp)
 
-    set(ignore_files
-        ${cppgir_loc}/data/cppgir.ignore
-        ${cppgir_loc}/data/cppgir_unix.ignore
-    )
+    if (NOT CppGir_FOUND)
+        set(ignore_files
+            ${cppgir_loc}/data/cppgir.ignore
+            ${cppgir_loc}/data/cppgir_unix.ignore
+        )
+    else()
+        set(ignare_files) # rely on default ignore list
+    endif()
 
     add_custom_command(
     OUTPUT
@@ -28,7 +34,7 @@ function(generate_cppgir target_name gir)
         --class
         --class-full
         --expected
-        --ignore
+        "$<$<BOOL:${ignore_files}>:--ignore>"
         "$<JOIN:${ignore_files},:>"
         --output
         ${gen_dst}

base-commit: c7e0493dea2b870fb1b8e26604201fdb9e8c1ee5
-- 
2.49.0

