Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package entangle for openSUSE:Factory checked in at 2026-05-27 16:14:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/entangle (Old) and /work/SRC/openSUSE:Factory/.entangle.new.1937 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "entangle" Wed May 27 16:14:17 2026 rev:17 rq:1355205 version:3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/entangle/entangle.changes 2022-03-01 17:04:57.488355560 +0100 +++ /work/SRC/openSUSE:Factory/.entangle.new.1937/entangle.changes 2026-05-27 16:14:34.791054897 +0200 @@ -1,0 +2,6 @@ +Tue May 26 14:11:32 UTC 2026 - Marcus Meissner <[email protected]> + +- fix build against current gtk3. patch extracted froom upstream + entangle-fix-new-gtk.patch + +------------------------------------------------------------------- New: ---- entangle-fix-new-gtk.patch ----------(New B)---------- New:- fix build against current gtk3. patch extracted froom upstream entangle-fix-new-gtk.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ entangle.spec ++++++ --- /var/tmp/diff_new_pack.DDsTS4/_old 2026-05-27 16:14:36.287116531 +0200 +++ /var/tmp/diff_new_pack.DDsTS4/_new 2026-05-27 16:14:36.287116531 +0200 @@ -1,7 +1,7 @@ # # spec file for package entangle # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -28,6 +28,8 @@ Source2: %{name}.keyring # from upstream git Patch0: fix-new-meson.patch +# extract from upstream git +Patch1: entangle-fix-new-gtk.patch BuildRequires: gtk-doc BuildRequires: hicolor-icon-theme BuildRequires: intltool ++++++ entangle-fix-new-gtk.patch ++++++ diff --git a/src/backend/meson.build b/src/backend/meson.build index c4c28e6..547c570 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, @@ -133,10 +134,13 @@ entangle_backend_deps = [ libraw_dep, ] +entangle_backend_cflags = warning_cflags + entangle_backend = shared_library( 'entangle_backend', sources: entangle_backend_sources, dependencies: entangle_backend_deps, + c_args: entangle_backend_cflags, version: '0.0.0', install: true, install_dir: entangle_libdir, 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..efd817d 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,15 @@ 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 +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + app->giRepository = gi_repository_dup_default(); +#pragma GCC diagnostic pop + 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 1ed9d75..9b938ef 100644 --- a/src/frontend/meson.build +++ b/src/frontend/meson.build @@ -90,6 +90,7 @@ entangle_frontend_sources += entangle_frontend_enum_sources entangle_frontend_deps = [ gthread_dep, gmodule_dep, + gio_unix_dep, gtk_dep, gst_dep, pango_dep, @@ -107,7 +108,7 @@ entangle_frontend_cflags = [ '-DPKGDATADIR="' + entangle_pkgdatadir + '"', '-DLIBDIR="' + entangle_libdir + '"', '-DVERSION="' + meson.project_version() + '"', -] +] + girepository_cflags + warning_cflags entangle_frontend = shared_library( 'entangle_frontend', diff --git a/src/meson.build b/src/meson.build index b82bd3a..c9e3312 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 + warning_cflags entangle = executable( 'entangle', diff --git a/meson.build b/meson.build index 6fc628a..19e4fff 100644 --- a/meson.build +++ b/meson.build @@ -7,7 +7,7 @@ project( 'c_std=gnu99', 'warning_level=1', ], - meson_version: '>= 0.49.0' + meson_version: '>= 0.56.0' ) pod2man = find_program('pod2man') @@ -21,9 +21,11 @@ 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' +gexiv2_016_min_version = '>= 0.16' xext_min_version = '>= 1.3.0' libraw_min_version = '>= 0.9.0' gst_min_version = '>= 1.0.0' @@ -33,6 +35,7 @@ add_global_arguments('-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38', language : glib_dep = dependency('glib-2.0', version: glib_min_version) gio_dep = dependency('gio-2.0', version: glib_min_version) +gio_unix_dep = dependency('gio-unix-2.0', version: glib_min_version) gthread_dep = dependency('gthread-2.0', version: glib_min_version) gmodule_dep = dependency('gmodule-2.0', version: glib_min_version) gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_min_version) @@ -41,11 +44,15 @@ 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) -gexiv2_dep = dependency('gexiv2', version: gexiv2_min_version) +gexiv2_dep = dependency('gexiv2-0.16', version: gexiv2_016_min_version, required: false) +gexiv2_gi_name = 'GExiv2-0.16' +if not gexiv2_dep.found() + gexiv2_dep = dependency('gexiv2', version: gexiv2_min_version) + gexiv2_gi_name = 'GExiv2-0.10' +endif xext_dep = dependency('xext', version: xext_min_version) # Cannot use pkg-config file as it includes a bogus '-fopenmp' arg in Libs # which in turn confuses g-ir-scanner @@ -54,6 +61,41 @@ 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) +# libpeas1 switched to girepository-2.0. This is an API break as the +# girepository.h header uses different function prefix. We can thus +# detect 'g_irepository_get_type' (from gobject-introspection) vs +# 'gi_repository_get_type' (from glib) + +with_girepository2 = false +gi1_test_code = ''' + #include <libpeas/peas.h> + + int main(void) { + g_irepository_get_type(); + return 0; + } +''' +gi2_test_code = ''' + #include <libpeas/peas.h> + + int main(void) { + gi_repository_get_type(); + return 0; + } +''' + +if cc.compiles(gi2_test_code, dependencies: [libpeas_dep], args: ['-Werror', '-O2']) + girepository_dep = dependency('girepository-2.0', version: girepository2_min_version) + girepository_cflags = ['-DGIREPOSITORY_MAJOR_VERSION=2'] +else + if cc.compiles(gi1_test_code, dependencies: [libpeas_dep], args: ['-Werror', '-O2']) + girepository_dep = dependency('gobject-introspection-1.0', version: gobject_introspection_min_version) + girepository_cflags = ['-DGIREPOSITORY_MAJOR_VERSION=1'] + else + error('Cannot determine if libpeas1 uses girepository-1.0 or girepository-2.0') + endif +endif + gnome = import('gnome') i18n = import('i18n') @@ -149,7 +191,7 @@ check_cflags = [ '-Wunused-function', '-Wunused-label', '-Wunused-local-typedefs', - '-Wunused-macros', + '-Wno-unused-macros', '-Wunused-parameter', '-Wunused-result', '-Wunused-value', @@ -169,7 +211,7 @@ check_cflags = [ '-Wjump-misses-init', '-Wframe-larger-than=40096', '-O2', - '-Wp,-D_FORTIFY_SOURCE=2', + '-D_FORTIFY_SOURCE=2', '-fstack-protector-all', '--param=ssp-buffer-size=4', '-fexceptions', @@ -181,23 +223,21 @@ check_cflags = [ '-Wno-suggest-attribute=const', ] -cflags = [] +warning_cflags = [] foreach cflag: check_cflags if cc.has_argument(cflag) - cflags += [cflag] + warning_cflags += [cflag] endif endforeach werror_option = get_option('enable-werror') if werror_option if cc.has_argument('-Werror') - cflags += ['-Werror'] + warning_cflags += ['-Werror'] endif endif -add_project_arguments(cflags, language: 'c') - entangle_prefix = get_option('prefix') entangle_bindir = join_paths(entangle_prefix, get_option('bindir')) entangle_libdir = join_paths(entangle_prefix, get_option('libdir')) @@ -209,7 +249,7 @@ entangle_schemadir = join_paths(entangle_datadir, 'glib-2.0', 'schemas') entangle_pluginlibdir = join_paths(entangle_libdir, 'entangle', 'plugins') entangle_plugindatadir = join_paths(entangle_datadir, 'entangle', 'plugins') -po_dir = join_paths(meson.source_root(), 'po') +po_dir = join_paths(meson.project_source_root(), 'po') subdir('src') subdir('po') @@ -218,13 +258,13 @@ subdir('docs') test( 'syntax-check', - find_program('@0@/build-aux/syntax-check'.format(meson.source_root())), + find_program('@0@/build-aux/syntax-check'.format(meson.project_source_root())), suite: 'style', env: [ - 'MESON_SOURCE_ROOT=@0@'.format(meson.source_root()), + 'MESON_SOURCE_ROOT=@0@'.format(meson.project_source_root()), ], ) meson.add_install_script('meson_post_install.py') -meson.add_dist_script('build-aux/extra-dist', meson.source_root(), meson.build_root()) +meson.add_dist_script('build-aux/extra-dist', meson.project_source_root(), meson.project_build_root())
