← recipes

Commit e899650e

2
files
+62
added
-1
deleted
@@ -1,6 +1,6 @@
1 1 pkgname: glib
2 2 pkgver: '2.88.3'
3 -pkgrel: '3'
3 +pkgrel: '4'
4 4 pkgdesc: The GLib package contains a low-level libraries useful for providing data structure handling
5 5 url: 'https://gitlab.gnome.org/GNOME/glib/'
6 6 arch: x86_64
@@ -36,13 +36,16 @@ source:
36 36 - 'https://download.gnome.org/sources/gobject-introspection/1.86/gobject-introspection-1.86.0.tar.xz'
37 37 - 'https://download.gnome.org/sources/glib/2.88/${pkgname}-${pkgver}.tar.xz'
38 38 - glib-skip_warnings-1.patch
39 +- glib-ffi-custom-pointer-1.patch
39 40 sha256sums:
40 41 - 920d1a3fcedeadc32acff95c2e203b319039dd4b4a08dd1a2dfd283d19c0b9ae
41 42 - ab24d24e698dfa1e408b7bcdb508f4aafc906185a8b8ce72fdf79bbbdc9b383b
42 43 - 8f9ee9f4a6a08c49c9c912241c63d55b969950c49f4d40337c6fd9557b9daa1b
44 +- 6ef3595de604a18dc660768334c88e0419614f72cb5db0476d365633f42e7657
43 45 build: |
44 46 # 1. Nałożenie patcha na glib
45 47 patch -d ${pkgname}-${pkgver} -Np1 -i ../glib-skip_warnings-1.patch
48 + patch -d ${pkgname}-${pkgver} -Np1 -i ../glib-ffi-custom-pointer-1.patch
46 49
47 50 # 2. Pierwsze przejście GLib (bez introspection)
48 51 meson setup ${pkgname}-${pkgver} build-glib-1 \
49 52 new file mode 100644
@@ -0,0 +1,58 @@
1 +--- a/gobject/gclosure.c 2026-10-11 12:20:45.279155594 +0200
2 +@@ -1276,6 +1276,39 @@
3 + }
4 +
5 + #include <ffi.h>
6 ++/* Typy z wlasnym fundamentalem (nie GObject/boxed), ktore trzymaja wartosc jako
7 ++ * wskaznik w gvalue->data[0].v_pointer (np. DexObject z libdex). GLib nie ma dla
8 ++ * nich galezi w value_to_ffi_type i podawal NULL do libffi, co konczylo sie SEGV.
9 ++ * Rozpoznajemy "pointer-compatible" typy i przekazujemy realny wskaznik.
10 ++ * Backport z GLib main (value_type_is_custom_pointer_compatible). */
11 ++static gboolean
12 ++value_type_is_custom_pointer_compatible (GType type)
13 ++{
14 ++ GTypeValueTable *value_table;
15 ++
16 ++ switch (g_type_fundamental (type))
17 ++ {
18 ++ case G_TYPE_STRING:
19 ++ case G_TYPE_OBJECT:
20 ++ case G_TYPE_BOXED:
21 ++ case G_TYPE_PARAM:
22 ++ case G_TYPE_POINTER:
23 ++ case G_TYPE_INTERFACE:
24 ++ case G_TYPE_VARIANT:
25 ++ return FALSE;
26 ++ default:
27 ++ break;
28 ++ }
29 ++
30 ++ value_table = g_type_value_table_peek (type);
31 ++
32 ++ return G_TYPE_IS_INSTANTIATABLE (type) &&
33 ++ value_table != NULL &&
34 ++ value_table->value_peek_pointer != NULL &&
35 ++ value_table->collect_format != NULL &&
36 ++ strcmp (value_table->collect_format, "p") == 0;
37 ++}
38 ++
39 + static ffi_type *
40 + value_to_ffi_type (const GValue *gvalue,
41 + gpointer *value,
42 +@@ -1361,8 +1394,13 @@
43 + break;
44 + default:
45 + rettype = &ffi_type_pointer;
46 +- *value = NULL;
47 +- g_critical ("value_to_ffi_type: Unsupported fundamental type: %s", g_type_name (type));
48 ++ if (value_type_is_custom_pointer_compatible (G_VALUE_TYPE (gvalue)))
49 ++ *value = (gpointer)&(gvalue->data[0].v_pointer);
50 ++ else
51 ++ {
52 ++ *value = NULL;
53 ++ g_critical ("value_to_ffi_type: Unsupported fundamental type: %s", g_type_name (type));
54 ++ }
55 + break;
56 + }
57 + return rettype;