summaryrefslogtreecommitdiff
path: root/media-gfx/entangle/files/entangle-3.0-libgirepository-detection.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-gfx/entangle/files/entangle-3.0-libgirepository-detection.patch')
-rw-r--r--media-gfx/entangle/files/entangle-3.0-libgirepository-detection.patch194
1 files changed, 194 insertions, 0 deletions
diff --git a/media-gfx/entangle/files/entangle-3.0-libgirepository-detection.patch b/media-gfx/entangle/files/entangle-3.0-libgirepository-detection.patch
new file mode 100644
index 000000000000..7383e4058dc8
--- /dev/null
+++ b/media-gfx/entangle/files/entangle-3.0-libgirepository-detection.patch
@@ -0,0 +1,194 @@
+From efe1ce41d2f8e2f6eacc37450f517e142e2c6490 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Wed, 22 Oct 2025 16:40:01 +0100
+Subject: [PATCH] build: Use either libgirepository-2.0 or libgirepository-1.0,
+ as appropriate
+
+From: Simon McVittie <smcv@debian.org>
+
+pygobject 3.52 and libpeas 1.38 have switched
+from libgirepository-1.0 to libgirepository-2.0, and the whole process
+(pygobject, libpeas and the application) must agree on a single version
+to use. Automatically detect the right one at compile-time.
+
+This checks both the pygobject version and the libpeas version.
+Conversely, pygobject is not necessarily guaranteed to be installed
+at the time that entangle is compiled, so we can't completely rely
+on being able to check its version.
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+---
+ meson.build | 18 +++++++++++++++++-
+ src/backend/meson.build | 1 +
+ src/entangle-main.c | 11 +++++++++++
+ src/frontend/entangle-application.c | 16 +++++++++++++++-
+ src/frontend/meson.build | 2 +-
+ src/meson.build | 2 +-
+ 6 files changed, 46 insertions(+), 4 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index a046541..4f24389 100644
+--- a/meson.build
++++ b/meson.build
+@@ -21,6 +21,7 @@ pango_min_version = '>= 1.40.11'
+ gphoto2_min_version = '>= 2.5.0'
+ gudev_min_version = '>= 145'
+ gobject_introspection_min_version = '>= 1.54.0'
++girepository2_min_version = '>= 2.86'
+ lcms2_min_version = '>= 2.0'
+ libpeas_min_version = '>= 1.2.0'
+ gexiv2_min_version = '>= 0.10'
+@@ -43,10 +44,10 @@ pango_dep = dependency('pango', version: pango_min_version)
+ pango_cairo_dep = dependency('pangocairo', version: pango_min_version)
+ gphoto2_dep = dependency('libgphoto2', version: gphoto2_min_version)
+ gudev_dep = dependency('gudev-1.0', version: gudev_min_version)
+-gobject_introspection_dep = dependency('gobject-introspection-1.0', version: gobject_introspection_min_version)
+ lcms2_dep = dependency('lcms2', version: lcms2_min_version)
+ libpeas_dep = dependency('libpeas-1.0', version: libpeas_min_version)
+ libpeas_gtk_dep = dependency('libpeas-gtk-1.0', version: libpeas_min_version)
++pygobject_dep = dependency('pygobject-3.0', required: false)
+ gexiv2_dep = dependency('gexiv2-0.16', version: gexiv2_016_min_version, required: false)
+ if not gexiv2_dep.found()
+ gexiv2_dep = dependency('gexiv2', version: gexiv2_min_version)
+@@ -59,6 +60,21 @@ libraw_dep = cc.find_library('raw_r')
+ gst_dep = dependency('gstreamer-1.0', version: gst_min_version)
+ gst_video_dep = dependency('gstreamer-video-1.0', version: gst_min_version)
+
++# pygobject 3.52.x switched from libgirepository-1.0 to libgirepository-2.0,
++# and libpeas 1.38 did the same.
++# pygobject -dev files might not always be installed, but libpeas
++# 1.36 might have that change backported by distros, so check both.
++if (
++ libpeas_dep.version().version_compare('>=1.38')
++ or (pygobject_dep.found() and pygobject_dep.version().version_compare('>=3.52'))
++)
++ girepository_dep = dependency('girepository-2.0', version: girepository2_min_version)
++ girepository_cflags = ['-DGIREPOSITORY_MAJOR_VERSION=2']
++else
++ girepository_dep = dependency('gobject-introspection-1.0', version: gobject_introspection_min_version)
++ girepository_cflags = ['-DGIREPOSITORY_MAJOR_VERSION=1']
++endif
++
+ gnome = import('gnome')
+ i18n = import('i18n')
+
+diff --git a/src/backend/meson.build b/src/backend/meson.build
+index c4c28e6..bcd3cf0 100644
+--- a/src/backend/meson.build
++++ b/src/backend/meson.build
+@@ -121,6 +121,7 @@ entangle_backend_sources += entangle_backend_enum_sources
+ entangle_backend_deps = [
+ glib_dep,
+ gio_dep,
++ girepository_dep,
+ gthread_dep,
+ gdk_pixbuf_dep,
+ gst_dep,
+diff --git a/src/entangle-main.c b/src/entangle-main.c
+index 970bfee..bfc0f4a 100644
+--- a/src/entangle-main.c
++++ b/src/entangle-main.c
+@@ -21,7 +21,11 @@
+ #include <locale.h>
+ #include <stdio.h>
+
++#if GIREPOSITORY_MAJOR_VERSION >= 2
++#include <girepository/girepository.h>
++#else
+ #include <girepository.h>
++#endif
+ #include <glib/gi18n.h>
+ #include <gst/gst.h>
+ #include <gtk/gtk.h>
+@@ -80,7 +84,14 @@ main(int argc, char **argv)
+ gst_init(NULL, NULL);
+
+ if (ins) {
++#if GIREPOSITORY_MAJOR_VERSION >= 2
++ GStrv args = g_strsplit(ins, ",", 2);
++
++ gi_repository_dump(args[0], args[1], NULL);
++ g_strfreev(args);
++#else
+ g_irepository_dump(ins, NULL);
++#endif
+ return 0;
+ }
+
+diff --git a/src/frontend/entangle-application.c b/src/frontend/entangle-application.c
+index 3e3e1af..c6a9f2c 100644
+--- a/src/frontend/entangle-application.c
++++ b/src/frontend/entangle-application.c
+@@ -33,6 +33,12 @@
+ #include "entangle-preferences-display.h"
+ #include "entangle-preferences.h"
+
++#if GIREPOSITORY_MAJOR_VERSION >= 2
++#include <girepository/girepository.h>
++#else
++#include <girepository.h>
++#endif
++
+ /**
+ * SECTION:entangle-application
+ * @Short_description: Global application state base class
+@@ -55,6 +61,7 @@ struct _EntangleApplication
+ EntangleHelpAbout *about;
+ EntangleCameraSupport *devices;
+
++ GIRepository *giRepository;
+ PeasEngine *pluginEngine;
+ PeasExtensionSet *pluginExt;
+ };
+@@ -149,6 +156,7 @@ entangle_application_finalize(GObject *object)
+ g_object_unref(app->pluginEngine);
+ if (app->pluginExt)
+ g_object_unref(app->pluginExt);
++ g_clear_object(&app->giRepository);
+
+ G_OBJECT_CLASS(entangle_application_parent_class)->finalize(object);
+ }
+@@ -470,7 +478,13 @@ entangle_application_init(EntangleApplication *app)
+ app->activeCameras = entangle_camera_list_new_active();
+ app->supportedCameras = entangle_camera_list_new_supported();
+
+- g_irepository_require(g_irepository_get_default(), "Peas", "1.0", 0, NULL);
++#if GIREPOSITORY_MAJOR_VERSION >= 2
++ app->giRepository = gi_repository_dup_default();
++ gi_repository_require(app->giRepository, "Peas", "1.0", 0, NULL);
++#else
++ app->giRepository = g_object_ref(g_irepository_get_default());
++ g_irepository_require(app->giRepository, "Peas", "1.0", 0, NULL);
++#endif
+
+ userdir =
+ g_build_filename(g_get_user_config_dir(), "entangle/plugins", NULL);
+diff --git a/src/frontend/meson.build b/src/frontend/meson.build
+index 81310c8..46cc364 100644
+--- a/src/frontend/meson.build
++++ b/src/frontend/meson.build
+@@ -108,7 +108,7 @@ entangle_frontend_cflags = [
+ '-DPKGDATADIR="' + entangle_pkgdatadir + '"',
+ '-DLIBDIR="' + entangle_libdir + '"',
+ '-DVERSION="' + meson.project_version() + '"',
+-]
++] + girepository_cflags
+
+ entangle_frontend = shared_library(
+ 'entangle_frontend',
+diff --git a/src/meson.build b/src/meson.build
+index d488402..e01e2e1 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -23,7 +23,7 @@ entangle_cflags = [
+ '-DDATADIR="' + entangle_datadir + '"',
+ '-DLOCALE_DIR="' + entangle_localedir + '"',
+ '-DGETTEXT_PACKAGE="entangle"',
+-]
++] + girepository_cflags
+
+ entangle = executable(
+ 'entangle',
+--
+2.53.0
+