From 7b47888eed75523217ca0122872a5dfe70b8117f Mon Sep 17 00:00:00 2001 From: benaryorg Date: Mon, 25 May 2026 00:33:03 +0000 Subject: [PATCH] luaPackages.lgi: Backport fix for GLib 2.88 This replaces the earlier 2.86 patch. One may consider bumping the source to something newer than the 8 year old release, but that's out of scope for this fix. Signed-off-by: benaryorg (cherry picked from commit 79f6dec101e0ed82160022dde77b88c52c0ff892) --- .../lua-modules/lgi/glib-2.88.patch | 146 ++++++++++++++++++ pkgs/development/lua-modules/overrides.nix | 11 +- 2 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 pkgs/development/lua-modules/lgi/glib-2.88.patch diff --git a/pkgs/development/lua-modules/lgi/glib-2.88.patch b/pkgs/development/lua-modules/lgi/glib-2.88.patch new file mode 100644 index 000000000000..2fe3b1946170 --- /dev/null +++ b/pkgs/development/lua-modules/lgi/glib-2.88.patch @@ -0,0 +1,146 @@ +At time of writing this is equivalent to https://github.com/lgi-devs/lgi/pull/361.patch?full_index=1 +The only difference is that this diff does not include the *tests/progress.lua* changes since that file does not exist in the source used by *nixpkgs*. + +--- a/lgi/ffi.lua ++++ b/lgi/ffi.lua +@@ -74,19 +74,39 @@ + end + + -- Creates new enum/flags table with all values from specified gtype. ++-- ++-- Fixes https://github.com/lgi-devs/lgi/issues/358 ++-- ++-- Implementation for the fix was mirrored from the LGI fork: ++-- https://github.com/vtrlx/LuaGObject/blob/0.10.5/LuaGObject/ffi.lua#L74-L104 + function ffi.load_enum(gtype, name) +- local GObject = core.repo.GObject ++ local GLib, GObject = core.repo.GLib, core.repo.GObject + local is_flags = GObject.Type.is_a(gtype, GObject.Type.FLAGS) + local enum_component = component.create( + gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) +- local type_class = GObject.TypeClass.ref(gtype) ++ local type_class ++ -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() ++ if GLib.check_version(2, 86, 0) then ++ type_class = GObject.TypeClass.ref(gtype) ++ else ++ type_class = GObject.TypeClass.get(gtype) ++ end + local enum_class = core.record.cast( + type_class, is_flags and GObject.FlagsClass or GObject.EnumClass) +- for i = 0, enum_class.n_values - 1 do +- local val = core.record.fromarray(enum_class.values, i) +- enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value ++ if GLib.check_version(2, 87, 0) then ++ for i = 0, enum_class.n_values - 1 do ++ local val = core.record.fromarray(enum_class.values, i) ++ enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value ++ end ++ else ++ for _, val in ipairs(enum_class.values) do ++ enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value ++ end ++ end ++ -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd ++ if GLib.check_version(2, 86, 0) then ++ type_class:unref() + end +- type_class:unref() + return enum_component + end + +--- a/lgi/ffi.lua ++++ b/lgi/ffi.lua +@@ -74,18 +74,12 @@ + end + + -- Creates new enum/flags table with all values from specified gtype. +--- +--- Fixes https://github.com/lgi-devs/lgi/issues/358 +--- +--- Implementation for the fix was mirrored from the LGI fork: +--- https://github.com/vtrlx/LuaGObject/blob/0.10.5/LuaGObject/ffi.lua#L74-L104 + function ffi.load_enum(gtype, name) + local GLib, GObject = core.repo.GLib, core.repo.GObject + local is_flags = GObject.Type.is_a(gtype, GObject.Type.FLAGS) + local enum_component = component.create( + gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) + local type_class +- -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() + if GLib.check_version(2, 86, 0) then + type_class = GObject.TypeClass.ref(gtype) + else +@@ -103,7 +97,6 @@ + enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + end + end +- -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd + if GLib.check_version(2, 86, 0) then + type_class:unref() + end +--- a/lgi/ffi.lua ++++ b/lgi/ffi.lua +@@ -80,6 +80,7 @@ + local enum_component = component.create( + gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) + local type_class ++ -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() + if GLib.check_version(2, 86, 0) then + type_class = GObject.TypeClass.ref(gtype) + else +@@ -97,6 +98,7 @@ + enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + end + end ++ -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd + if GLib.check_version(2, 86, 0) then + type_class:unref() + end +--- a/tests/pango.lua ++++ b/tests/pango.lua +@@ -35,8 +35,24 @@ + local offset = items[i].offset + local length = items[i].length + local analysis = items[i].analysis +- local pgs = Pango.GlyphString() +- Pango.shape(string.sub(s,1+offset), length, analysis, pgs) ++ -- ++ -- Fixes https://github.com/lgi-devs/lgi/issues/336 ++ -- ++ -- Implementation for the fix was a combination ++ -- of ideas from: ++ -- ++ -- 1) my own investigation plus trial-error ++ -- 2) the comment: https://github.com/lgi-devs/lgi/issues/336#issuecomment-2888361271 ++ -- 3) the LGI fork: https://github.com/vtrlx/LuaGObject/blob/0.10.5/tests/pango.lua#L38-L39 ++ -- ++ local pgs ++ if Pango.version_check(1, 56, 2) then ++ pgs = Pango.GlyphString() ++ Pango.shape(string.sub(s,1+offset), length, analysis, pgs) ++ else ++ pgs = Pango.shape(string.sub(s,1+offset), length, analysis) ++ end ++ + -- Pull out individual glyphs with pgs.glyphs + local glyphs = pgs.glyphs + check(type(glyphs) == 'table') +--- a/tests/pango.lua ++++ b/tests/pango.lua +@@ -35,16 +35,6 @@ + local offset = items[i].offset + local length = items[i].length + local analysis = items[i].analysis +- -- +- -- Fixes https://github.com/lgi-devs/lgi/issues/336 +- -- +- -- Implementation for the fix was a combination +- -- of ideas from: +- -- +- -- 1) my own investigation plus trial-error +- -- 2) the comment: https://github.com/lgi-devs/lgi/issues/336#issuecomment-2888361271 +- -- 3) the LGI fork: https://github.com/vtrlx/LuaGObject/blob/0.10.5/tests/pango.lua#L38-L39 +- -- + local pgs + if Pango.version_check(1, 56, 2) then + pgs = Pango.GlyphString() diff --git a/pkgs/development/lua-modules/overrides.nix b/pkgs/development/lua-modules/overrides.nix index 75d7668c6a7c..4ae9c0eb5dc6 100644 --- a/pkgs/development/lua-modules/overrides.nix +++ b/pkgs/development/lua-modules/overrides.nix @@ -303,13 +303,10 @@ in sha256 = "0gfvvbri9kyzhvq3bvdbj2l6mwvlz040dk4mrd5m9gz79f7w109c"; }) - # https://github.com/lgi-devs/lgi/issues/346 - # https://gitlab.archlinux.org/archlinux/packaging/packages/lgi/-/issues/1 - (fetchpatch { - name = "glib-2.86.0.patch"; - url = "https://gitlab.archlinux.org/archlinux/packaging/packages/lgi/-/raw/05a0c9df75883da235bacd4379b769e7d7713fb9/0001-Use-TypeClass.get-instead-of-.ref.patch"; - hash = "sha256-Z1rNv0VzVrK41rV73KiPXq9yLaNxbTOFiSd6eLZyrbY="; - }) + # https://github.com/lgi-devs/lgi/issues/362 + # https://github.com/lgi-devs/lgi/pull/361 + # https://github.com/NixOS/nixpkgs/issues/523345 + ./lgi/glib-2.88.patch ]; # https://github.com/lgi-devs/lgi/pull/300