From 865d8c074d35cd8b7ef68299f7a0d7b7640149fe Mon Sep 17 00:00:00 2001 From: oreo639 Date: Thu, 21 Mar 2024 12:27:39 -0700 Subject: [PATCH 1/5] New package: glib-bootstrap-2.80.0 --- srcpkgs/glib-bootstrap/patches | 1 + srcpkgs/glib-bootstrap/template | 46 +++++++++++++++++++++++++++++++++ srcpkgs/glib-bootstrap/update | 2 ++ 3 files changed, 49 insertions(+) create mode 120000 srcpkgs/glib-bootstrap/patches create mode 100644 srcpkgs/glib-bootstrap/template create mode 100644 srcpkgs/glib-bootstrap/update diff --git a/srcpkgs/glib-bootstrap/patches b/srcpkgs/glib-bootstrap/patches new file mode 120000 index 00000000000000..4beb39573cad4a --- /dev/null +++ b/srcpkgs/glib-bootstrap/patches @@ -0,0 +1 @@ +../glib/patches \ No newline at end of file diff --git a/srcpkgs/glib-bootstrap/template b/srcpkgs/glib-bootstrap/template new file mode 100644 index 00000000000000..8839d8b24c893b --- /dev/null +++ b/srcpkgs/glib-bootstrap/template @@ -0,0 +1,46 @@ +# Template file for 'glib-bootstrap' +# keep in sync with glib +# +# This aloing with gobject-introspection-bootstrap is unfortunately necessary as a part of the +# libgirepository-1.0 to libgirepository-2.0 migration. +pkgname=glib-bootstrap +version=2.80.0 +revision=1 +build_style=meson +# static version is necessary for qemu-user-static; +# also disable LTO, otherwise there are multiple failures when linking qemu +configure_args="-Dman=true -Dselinux=disabled + --default-library=both -Db_lto=false -Dintrospection=disabled" +hostmakedepends="gettext pkg-config libxslt docbook-xsl python3-packaging python3-docutils" +makedepends="zlib-devel pcre2-devel libffi-devel dbus-devel elfutils-devel libmount-devel" +depends="${makedepends}" +checkdepends="desktop-file-utils shared-mime-info dbus python3-pytest" +short_desc="GNU library of C routines" +maintainer="Orphaned " +license="LGPL-2.1-or-later" +homepage="https://wiki.gnome.org/Projects/GLib" +#changelog="https://gitlab.gnome.org/GNOME/glib/raw/glib-2-78/NEWS" +changelog="https://gitlab.gnome.org/GNOME/glib/raw/main/NEWS" +distfiles="${GNOME_SITE}/glib/${version%.*}/glib-${version}.tar.xz" +checksum=8228a92f92a412160b139ae68b6345bd28f24434a7b5af150ebe21ff587a561d +make_check_pre="dbus-run-session" + +repository=bootstrap +conflicts="glib libglib-devel glib-devel" +provides="glib-${version}_${revision}" + +post_patch() { + # Timer test is flaky on 32 bit (does float comparisons) + if [ "${XBPS_TARGET_WORDSIZE}" = "32" ]; then + vsed -e "s/'timer' : {},//" -i glib/tests/meson.build + fi +} + +pre_check() { + # machine-id is a random, non-zero value + echo 'dcb30309cd6c8b7cc20383d85a5c7012' > /etc/machine-id +} + +post_check() { + rm /etc/machine-id +} diff --git a/srcpkgs/glib-bootstrap/update b/srcpkgs/glib-bootstrap/update new file mode 100644 index 00000000000000..4d29b9118be20b --- /dev/null +++ b/srcpkgs/glib-bootstrap/update @@ -0,0 +1,2 @@ +pattern="glib-[0-9]+\.[0-9]*[02468]\.[0-9]+" +pkgname="glib" From 3889730fef2f4f4fe0cc9673c57b0f86250818f5 Mon Sep 17 00:00:00 2001 From: oreo639 Date: Thu, 21 Mar 2024 12:33:00 -0700 Subject: [PATCH 2/5] New package: gobject-introspection-bootstrap-1.80.0 --- srcpkgs/gobject-introspection-bootstrap/files | 1 + .../gobject-introspection-bootstrap/patches | 1 + .../gobject-introspection-bootstrap/template | 80 +++++++++++++++++++ .../gobject-introspection-bootstrap/update | 1 + 4 files changed, 83 insertions(+) create mode 120000 srcpkgs/gobject-introspection-bootstrap/files create mode 120000 srcpkgs/gobject-introspection-bootstrap/patches create mode 100644 srcpkgs/gobject-introspection-bootstrap/template create mode 100644 srcpkgs/gobject-introspection-bootstrap/update diff --git a/srcpkgs/gobject-introspection-bootstrap/files b/srcpkgs/gobject-introspection-bootstrap/files new file mode 120000 index 00000000000000..4602177e31f6a7 --- /dev/null +++ b/srcpkgs/gobject-introspection-bootstrap/files @@ -0,0 +1 @@ +../gobject-introspection/files \ No newline at end of file diff --git a/srcpkgs/gobject-introspection-bootstrap/patches b/srcpkgs/gobject-introspection-bootstrap/patches new file mode 120000 index 00000000000000..cc2ee1c4a0e3b9 --- /dev/null +++ b/srcpkgs/gobject-introspection-bootstrap/patches @@ -0,0 +1 @@ +../gobject-introspection/patches \ No newline at end of file diff --git a/srcpkgs/gobject-introspection-bootstrap/template b/srcpkgs/gobject-introspection-bootstrap/template new file mode 100644 index 00000000000000..ca3b4c5987ecb9 --- /dev/null +++ b/srcpkgs/gobject-introspection-bootstrap/template @@ -0,0 +1,80 @@ +# Template file for 'gobject-introspection-bootstrap' +# keep in sync with gobject-introspection +# +# This aloing with glib-bootstrap is unfortunately necessary as a part of the +# libgirepository-1.0 to libgirepository-2.0 migration. +pkgname=gobject-introspection-bootstrap +version=1.80.1 +revision=1 +build_style=meson +configure_args="-Dbuild_introspection_data=false" +pycompile_dirs="usr/lib/gobject-introspection/giscanner" +hostmakedepends="flex pkg-config" +# We won't run tests with cairo to avoid cyclical deps. +makedepends="libffi-devel glib-bootstrap python3-devel python3-Mako + python3-Markdown" +depends="${makedepends}" +short_desc="Introspection system for GObject-based libraries" +maintainer="oreo639 " +license="GPL-2.0-or-later, LGPL-2.1-or-later" +homepage="https://wiki.gnome.org/Projects/GObjectIntrospection" +distfiles="${GNOME_SITE}/gobject-introspection/${version%.*}/gobject-introspection-${version}.tar.xz" +checksum=a1df7c424e15bda1ab639c00e9051b9adf5cea1a9e512f8a603b53cd199bc6d8 +python_version=3 + +repository=bootstrap +conflicts="libgirepository libgirepository-devel gobject-introspection" +noverifyrdeps=yes + +if [ "$CROSS_BUILD" ]; then + hostmakedepends+=" gobject-introspection-bootstrap qemu-user-static prelink-cross" + configure_args+=" -Dgi_cross_use_prebuilt_gi=true + -Dgi_cross_binary_wrapper=/usr/bin/g-ir-scanner-qemuwrapper + -Dgi_cross_ldd_wrapper=/usr/bin/g-ir-scanner-lddwrapper + -Dgi_cross_pkgconfig_sysroot_path=${XBPS_CROSS_BASE}" +fi + +post_install() { + rm ${DESTDIR}/usr/lib/gobject-introspection/giscanner/doctemplates/*/meson.build + + # Install our wrappers system-wide, they are required for building all other + # gobject-based packages. + vbin ${FILESDIR}/g-ir-scanner-qemuwrapper + vbin ${FILESDIR}/g-ir-scanner-lddwrapper + + # Install g-ir-scanner-wrapper as g-ir-scanner, we need it with that name since + # we can't expect people to just not hardcode /usr/bin/g-ir-scanner, some packages + # like gtk+3 just like **really** much to use /usr/bin/g-ir-scanner and meson with + # find_program is also to blame. + mv ${DESTDIR}/usr/bin/g-ir-scanner{,.wrapped} + vbin ${FILESDIR}/g-ir-scanner-wrapper g-ir-scanner + + # Same logic of g-ir-scanner applies here + mv ${DESTDIR}/usr/bin/g-ir-compiler{,.wrapped} + vbin ${FILESDIR}/g-ir-compiler-wrapper g-ir-compiler + + # For cross builds copy the not installed tests subdirectory + if [ "$CROSS_BUILD" ]; then + vmkdir usr/share/gobject-introspection-1.0/tests + for f in scanner/annotation.? scanner/drawable.? scanner/foo.? \ + scanner/regress.? scanner/utility.? scanner/warnlib.? \ + gimarshallingtests.? gitestmacros.h; do + vcopy tests/$f usr/share/gobject-introspection-1.0/tests + done + fi + + # modify the pkg-config files to respect ${pc_sysrootdir} for variables that are + # meant to be called with 'pkg-config --variable' + vsed -e 's|^g_ir_scanner=.*|g_ir_scanner=${pc_sysrootdir}/${bindir}/g-ir-scanner|g' \ + -e 's|^g_ir_compiler=.*|g_ir_compiler=${pc_sysrootdir}/${bindir}/g-ir-compiler|g' \ + -e 's|^g_ir_generate=.*|g_ir_generate=${pc_sysrootdir}/${bindir}/g-ir-generate|g' \ + -e 's|^gidatadir.*|gidatadir=${pc_sysrootdir}/${datadir}/gobject-introspection-1.0|g' \ + -e 's|^girdir.*|girdir=${pc_sysrootdir}/${datadir}/gir-1.0|g' \ + -e 's|^typelibdir.*|typelibdir=${pc_sysrootdir}/${libdir}/girepository-1.0|g' \ + -i ${DESTDIR}/usr/lib/pkgconfig/gobject-introspection-1.0.pc \ + -i ${DESTDIR}/usr/lib/pkgconfig/gobject-introspection-no-export-1.0.pc + + # Fix the name of the python3 c bindings + mv ${DESTDIR}/usr/lib/gobject-introspection/giscanner/_giscanner*.so \ + ${DESTDIR}/usr/lib/gobject-introspection/giscanner/_giscanner.so +} diff --git a/srcpkgs/gobject-introspection-bootstrap/update b/srcpkgs/gobject-introspection-bootstrap/update new file mode 100644 index 00000000000000..8f89bb085398ec --- /dev/null +++ b/srcpkgs/gobject-introspection-bootstrap/update @@ -0,0 +1 @@ +pattern="(?<=${pkgname}-)[0-9]+\.[0-9]*[02468]\.[0-9]+" From 6103a5e76c43b1edc591ef5e3e6da7b7aa77b3ce Mon Sep 17 00:00:00 2001 From: oreo639 Date: Thu, 21 Mar 2024 12:53:54 -0700 Subject: [PATCH 3/5] glib: update to 2.80.0. This merges part of gobject-introspection tools, but not all of it. Unfortunately this creates a cyclic dependency between glib and gi. This is supposed to be temporary. https://discourse.gnome.org/t/dealing-with-glib-and-gobject-introspection-circular-dependency/18701 https://gitlab.gnome.org/GNOME/glib/-/issues/2616 https://docs.gtk.org/girepository/migrating-gi.html --- common/shlibs | 1 + srcpkgs/glib/files/gi-tool-emulator-wrapper | 20 +++ srcpkgs/glib/files/gi-xbps-qemuwrapper | 10 ++ ...pository-directory-for-native-builds.patch | 34 ++++ ...12bb095382770f000055f63f82e2903f6b33.patch | 47 ++++++ ...c379e85bacc89a7a8468f7e8447c8df15785.patch | 33 ++++ .../glib/patches/disable-broken-tests.patch | 67 -------- ...ea2ac9ca2e85321c5d34f8f40f7f9b614db1.patch | 91 ++++++++++ srcpkgs/glib/patches/fix-test-cxxcpp.patch | 26 --- ...er-Fix-race-between-source-callbacks.patch | 158 ------------------ srcpkgs/glib/template | 47 ++++-- 11 files changed, 269 insertions(+), 265 deletions(-) create mode 100755 srcpkgs/glib/files/gi-tool-emulator-wrapper create mode 100755 srcpkgs/glib/files/gi-xbps-qemuwrapper create mode 100644 srcpkgs/glib/patches/0001-Relocate-the-repository-directory-for-native-builds.patch create mode 100644 srcpkgs/glib/patches/014f12bb095382770f000055f63f82e2903f6b33.patch create mode 100644 srcpkgs/glib/patches/d2a6c379e85bacc89a7a8468f7e8447c8df15785.patch delete mode 100644 srcpkgs/glib/patches/disable-broken-tests.patch create mode 100644 srcpkgs/glib/patches/fa45ea2ac9ca2e85321c5d34f8f40f7f9b614db1.patch delete mode 100644 srcpkgs/glib/patches/fix-test-cxxcpp.patch delete mode 100644 srcpkgs/glib/patches/gthreadedresolver-Fix-race-between-source-callbacks.patch diff --git a/common/shlibs b/common/shlibs index 60179b1306b770..6313a4ed2795c9 100644 --- a/common/shlibs +++ b/common/shlibs @@ -102,6 +102,7 @@ libglib-2.0.so.0 glib-2.76.0_1 libgmodule-2.0.so.0 glib-2.76.0_1 libgio-2.0.so.0 glib-2.76.0_1 libgobject-2.0.so.0 glib-2.76.0_1 +libgrepository-2.0.so.0 glib-2.80.0_1 libwt.so.4.10.4 wt-4.10.4_1 libwtdbo.so.4.10.4 wt-4.10.4_1 libwtdbosqlite3.so.4.10.4 wt-4.10.4_1 diff --git a/srcpkgs/glib/files/gi-tool-emulator-wrapper b/srcpkgs/glib/files/gi-tool-emulator-wrapper new file mode 100755 index 00000000000000..73f0cb0950506e --- /dev/null +++ b/srcpkgs/glib/files/gi-tool-emulator-wrapper @@ -0,0 +1,20 @@ +#!/bin/sh +# +# Check if we are running in an xbps-src environment and run the wrapper if that +# is the case. +if [ -n "$XBPS_CROSS_BASE" -a -n "$XBPS_TARGET_MACHINE" -a -n "$XBPS_VERSION" ]; then + # wrapper for g-ir-compiler, which runs the target version of it through qemu. + # g-ir-compiler writes out the raw content of a C struct to disk, and therefore + # is architecture dependent. + if [ -x build/tools/@TOOL@ ]; then + # We are compiling gobject-introspection. + # lets used the one we just compiled. + gir_bin=build/tools/@TOOL@ + elif [ -x ${XBPS_CROSS_BASE}/usr/bin/@TOOL@.wrapped ]; then + # Lets use the g-ir-compiler from the target + gir_bin=${XBPS_CROSS_BASE}/usr/bin/@TOOL@.wrapped + fi + exec /usr/bin/gi-xbps-qemuwrapper ${gir_bin} "$@" +fi + +exec /usr/bin/@TOOL@.wrapped "$@" diff --git a/srcpkgs/glib/files/gi-xbps-qemuwrapper b/srcpkgs/glib/files/gi-xbps-qemuwrapper new file mode 100755 index 00000000000000..665eae0e9360cd --- /dev/null +++ b/srcpkgs/glib/files/gi-xbps-qemuwrapper @@ -0,0 +1,10 @@ +#!/bin/sh + +# Ensure GIO_MODULE_DIR is not set so we don't load random things +# which may then get deleted (or their dependencies) and potentially segfault +/usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static ${GIR_EXTRA_OPTIONS} \ + -L ${XBPS_CROSS_BASE} \ + -E LD_LIBRARY_PATH="${XBPS_CROSS_BASE}/usr/lib:.libs:${GIR_EXTRA_LIBS_PATH}" \ + -E GI_TYPELIB_SYSROOT="${XBPS_CROSS_BASE}" \ + -U GIO_MODULE_DIR \ + "$@" diff --git a/srcpkgs/glib/patches/0001-Relocate-the-repository-directory-for-native-builds.patch b/srcpkgs/glib/patches/0001-Relocate-the-repository-directory-for-native-builds.patch new file mode 100644 index 00000000000000..66bf4240e7c64a --- /dev/null +++ b/srcpkgs/glib/patches/0001-Relocate-the-repository-directory-for-native-builds.patch @@ -0,0 +1,34 @@ +Allow us to specify the typelib sysroot in wrapper scripts for cross compiling. + +--- a/girepository/girepository.c ++++ b/girepository/girepository.c +@@ -154,6 +154,7 @@ gi_repository_init (GIRepository *reposi + const char *libdir; + char *typelib_dir; + const char *type_lib_path_env; ++ const char *type_lib_sysroot_env; + + /* This variable is intended to take precedence over both: + * - the default search path; +@@ -161,6 +162,9 @@ gi_repository_init (GIRepository *reposi + */ + type_lib_path_env = g_getenv ("GI_TYPELIB_PATH"); + ++ /* Void Linux addition for cross compiling, since we use cross sysroots */ ++ type_lib_sysroot_env = g_getenv ("GI_TYPELIB_SYSROOT"); ++ + if (type_lib_path_env) + { + char **custom_dirs; +@@ -176,7 +180,10 @@ gi_repository_init (GIRepository *reposi + + libdir = GOBJECT_INTROSPECTION_LIBDIR; + +- typelib_dir = g_build_filename (libdir, "girepository-1.0", NULL); ++ if (type_lib_sysroot_env) ++ typelib_dir = g_build_filename (type_lib_sysroot_env, libdir, "girepository-1.0", NULL); ++ else ++ typelib_dir = g_build_filename (libdir, "girepository-1.0", NULL); + + g_ptr_array_add (repository->typelib_search_path, g_steal_pointer (&typelib_dir)); + } diff --git a/srcpkgs/glib/patches/014f12bb095382770f000055f63f82e2903f6b33.patch b/srcpkgs/glib/patches/014f12bb095382770f000055f63f82e2903f6b33.patch new file mode 100644 index 00000000000000..615f9681e428fb --- /dev/null +++ b/srcpkgs/glib/patches/014f12bb095382770f000055f63f82e2903f6b33.patch @@ -0,0 +1,47 @@ +From 014f12bb095382770f000055f63f82e2903f6b33 Mon Sep 17 00:00:00 2001 +From: q66 +Date: Sat, 23 Mar 2024 20:51:52 +0100 +Subject: [PATCH] Use CPU_COUNT to get the number of set CPUs + +This fixes an issue with the number getting very big due to +CPU_ISSET not returning exactly 0 or 1. + +This also fixes scenarios where there are holes in the CPU +set. E.g. for a simple run like `taskset --cpu-list 1,2,4 ...` +the old code would return 2 instead of 3, due to iterating +until `ncores` (which is 3) and therefore not accounting for +CPUs further in the set. + +Ref https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3784 + + +(cherry picked from commit cc25486b233ada380ac8452f47f5fb35536888f4) +--- + glib/gthread.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/glib/gthread.c b/glib/gthread.c +index b39acc475c..a264353ecb 100644 +--- a/glib/gthread.c ++++ b/glib/gthread.c +@@ -1092,7 +1092,6 @@ g_get_num_processors (void) + return count; + #elif defined(_SC_NPROCESSORS_ONLN) && defined(THREADS_POSIX) && defined(HAVE_PTHREAD_GETAFFINITY_NP) + { +- int idx; + int ncores = MIN (sysconf (_SC_NPROCESSORS_ONLN), CPU_SETSIZE); + cpu_set_t cpu_mask; + CPU_ZERO (&cpu_mask); +@@ -1100,8 +1099,7 @@ g_get_num_processors (void) + int af_count = 0; + int err = pthread_getaffinity_np (pthread_self (), sizeof (cpu_mask), &cpu_mask); + if (!err) +- for (idx = 0; idx < ncores && idx < CPU_SETSIZE; ++idx) +- af_count += CPU_ISSET (idx, &cpu_mask); ++ af_count = CPU_COUNT (&cpu_mask); + + int count = (af_count > 0) ? af_count : ncores; + return count; +-- +GitLab + diff --git a/srcpkgs/glib/patches/d2a6c379e85bacc89a7a8468f7e8447c8df15785.patch b/srcpkgs/glib/patches/d2a6c379e85bacc89a7a8468f7e8447c8df15785.patch new file mode 100644 index 00000000000000..1de85c881c57c0 --- /dev/null +++ b/srcpkgs/glib/patches/d2a6c379e85bacc89a7a8468f7e8447c8df15785.patch @@ -0,0 +1,33 @@ +From d2a6c379e85bacc89a7a8468f7e8447c8df15785 Mon Sep 17 00:00:00 2001 +From: Simon McVittie +Date: Fri, 15 Mar 2024 13:49:47 +0000 +Subject: [PATCH] girparser: Don't assume sizeof(size_t) == sizeof(void *) + +We don't actually need to use the results of configure-time checks here: +sizeof is a perfectly reasonable integer constant expression, so we can +use that directly. + +Helps: https://gitlab.gnome.org/GNOME/glib/-/issues/2842 +Signed-off-by: Simon McVittie +--- + girepository/girparser.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/girepository/girparser.c b/girepository/girparser.c +index 647cf2498d..b5d8fc7108 100644 +--- a/girepository/girparser.c ++++ b/girepository/girparser.c +@@ -459,8 +459,8 @@ static IntegerAliasInfo integer_aliases[] = { + { "gulong", SIZEOF_LONG, 0 }, + { "gssize", GLIB_SIZEOF_SIZE_T, 1 }, + { "gsize", GLIB_SIZEOF_SIZE_T, 0 }, +- { "gintptr", GLIB_SIZEOF_SIZE_T, 1 }, +- { "guintptr", GLIB_SIZEOF_SIZE_T, 0 }, ++ { "gintptr", sizeof (gintptr), 1 }, ++ { "guintptr", sizeof (guintptr), 0 }, + }; + + typedef struct { +-- +GitLab + diff --git a/srcpkgs/glib/patches/disable-broken-tests.patch b/srcpkgs/glib/patches/disable-broken-tests.patch deleted file mode 100644 index f6e0328b214e76..00000000000000 --- a/srcpkgs/glib/patches/disable-broken-tests.patch +++ /dev/null @@ -1,67 +0,0 @@ ---- a/gio/tests/meson.build -+++ b/gio/tests/meson.build -@@ -63,7 +63,6 @@ gio_tests = { - # FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1392 / https://gitlab.gnome.org/GNOME/glib/-/issues/1251 - 'can_fail' : host_system == 'darwin', - }, -- 'converter-stream' : {}, - 'credentials' : {}, - 'data-input-stream' : {}, - 'data-output-stream' : {}, -@@ -227,7 +226,6 @@ endif - # Test programs buildable on UNIX only - if host_machine.system() != 'windows' - gio_tests += { -- 'file' : {}, - 'gdbus-peer-object-manager' : {}, - 'gdbus-sasl' : {}, - 'live-g-file' : {}, -@@ -951,13 +949,6 @@ if not meson.is_cross_build() - test_resources_binary2, - ] - endif -- -- gio_tests += { -- 'resources' : { -- 'extra_sources' : resources_extra_sources, -- 'depends' : resource_plugin, -- }, -- } - endif - - test_extra_programs_targets = {} -diff --git a/glib/tests/meson.build b/glib/tests/meson.build -index d74617823..1de81a825 100644 ---- a/glib/tests/meson.build -+++ b/glib/tests/meson.build -@@ -12,22 +12,14 @@ glib_tests = { - 'cache' : {}, - 'charset' : {}, - 'checksum' : {}, -- 'collate' : {}, - 'completion' : {}, - 'cond' : {}, -- 'convert' : {}, - 'dataset' : {}, -- 'date' : { -- # FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1392 -- 'can_fail' : host_system == 'darwin', -- }, - 'dir' : {}, - 'environment' : { - # FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1392 - 'can_fail' : host_system == 'darwin', - }, -- 'error' : {}, -- 'fileutils' : {}, - 'gdatetime' : { - 'suite' : ['slow'], - 'can_fail' : host_system == 'windows', -@@ -70,7 +62,6 @@ glib_tests = { - 'node' : {}, - 'once' : {}, - 'onceinit' : {}, -- 'option-context' : {}, - 'option-argv0' : {}, - 'overflow' : {}, - 'overflow-fallback' : { diff --git a/srcpkgs/glib/patches/fa45ea2ac9ca2e85321c5d34f8f40f7f9b614db1.patch b/srcpkgs/glib/patches/fa45ea2ac9ca2e85321c5d34f8f40f7f9b614db1.patch new file mode 100644 index 00000000000000..59e3904ed27520 --- /dev/null +++ b/srcpkgs/glib/patches/fa45ea2ac9ca2e85321c5d34f8f40f7f9b614db1.patch @@ -0,0 +1,91 @@ +From fa45ea2ac9ca2e85321c5d34f8f40f7f9b614db1 Mon Sep 17 00:00:00 2001 +From: Simon McVittie +Date: Fri, 15 Mar 2024 13:56:20 +0000 +Subject: [PATCH] girparser: Allow time_t, off_t, etc. to appear in GIR XML + +g-ir-scanner currently maps these to lower-level types at scan time by +assuming that time_t is an alias for long, off_t is an alias for size_t +and so on. This is not always accurate: some ILP32 architectures have +64-bit time_t (for Y2038 compatibility) and 64-bit off_t (for large file +support), and that mismatch is tracked as GNOME/gobject-introspection#494. + +One option for resolving this g-ir-scanner bug is to have it pass these +types through to the GIR XML, and teach g-ir-compiler and its replacement +gi-compile-repository to convert them to the corresponding concrete +type tag, as they already do for abstract types such as `long long` and +`size_t`. + +Loosely based on GNOME/gobject-introspection!451 by Shuyu Liu. + +Co-authored-by: Shuyu Liu +Signed-off-by: Simon McVittie +--- + girepository/girparser.c | 36 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 36 insertions(+) + +diff --git a/girepository/girparser.c b/girepository/girparser.c +index b5d8fc7108..9667900826 100644 +--- a/girepository/girparser.c ++++ b/girepository/girparser.c +@@ -32,6 +32,12 @@ + #include + #include + #include ++#include /* For time_t */ ++#include /* For off_t on both Unix and Windows */ ++ ++#ifdef G_OS_UNIX ++#include /* For socklen_t */ ++#endif + + /* This is a "major" version in the sense that it's only bumped + * for incompatible changes. +@@ -448,6 +454,19 @@ typedef struct { + unsigned int is_signed : 1; + } IntegerAliasInfo; + ++/* Ignore warnings from use of signedness() */ ++#if G_GNUC_CHECK_VERSION(4, 6) ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wtype-limits" ++#elif defined(__clang__) ++#pragma clang diagnostic push ++#pragma clang diagnostic ignored "-Wtype-limits" ++#endif ++ ++#define signedness(T) (((T) -1) < 0) ++G_STATIC_ASSERT (signedness (int) == 1); ++G_STATIC_ASSERT (signedness (unsigned int) == 0); ++ + static IntegerAliasInfo integer_aliases[] = { + { "gchar", SIZEOF_CHAR, 1 }, + { "guchar", SIZEOF_CHAR, 0 }, +@@ -461,8 +480,25 @@ static IntegerAliasInfo integer_aliases[] = { + { "gsize", GLIB_SIZEOF_SIZE_T, 0 }, + { "gintptr", sizeof (gintptr), 1 }, + { "guintptr", sizeof (guintptr), 0 }, ++#define INTEGER_ALIAS(T) { #T, sizeof (T), signedness (T) } ++ INTEGER_ALIAS (off_t), ++ INTEGER_ALIAS (time_t), ++#ifdef G_OS_UNIX ++ INTEGER_ALIAS (dev_t), ++ INTEGER_ALIAS (gid_t), ++ INTEGER_ALIAS (pid_t), ++ INTEGER_ALIAS (socklen_t), ++ INTEGER_ALIAS (uid_t), ++#endif ++#undef INTEGER_ALIAS + }; + ++#if G_GNUC_CHECK_VERSION(4, 6) ++#pragma GCC diagnostic pop ++#elif defined(__clang__) ++#pragma clang diagnostic pop ++#endif ++ + typedef struct { + const char *str; + int tag; +-- +GitLab + diff --git a/srcpkgs/glib/patches/fix-test-cxxcpp.patch b/srcpkgs/glib/patches/fix-test-cxxcpp.patch deleted file mode 100644 index 2b1ad5b4e6adc7..00000000000000 --- a/srcpkgs/glib/patches/fix-test-cxxcpp.patch +++ /dev/null @@ -1,26 +0,0 @@ -Fails to build on musl. -../glib/tests/cxx.cpp:509:15: error: missing sentinel in function call [-Werror=format=] -g_test_init (&argc, &argv, NULL); - ---- a/glib/tests/cxx.cpp -+++ a/glib/tests/cxx.cpp -@@ -505,7 +505,7 @@ test_string_free (void) - int - main (int argc, char *argv[]) - { - #if G_CXX_STD_CHECK_VERSION (11) -- g_test_init (&argc, &argv, NULL); -+ g_test_init (&argc, &argv, nullptr); - #else - g_test_init (&argc, &argv, static_cast(NULL)); ---- a/gio/tests/cxx.cpp -+++ a/gio/tests/cxx.cpp -@@ -59,7 +59,7 @@ int - main (int argc, char **argv) - { - #if G_CXX_STD_CHECK_VERSION (11) -- g_test_init (&argc, &argv, NULL); -+ g_test_init (&argc, &argv, nullptr); - #else - g_test_init (&argc, &argv, static_cast(NULL)); - #endif diff --git a/srcpkgs/glib/patches/gthreadedresolver-Fix-race-between-source-callbacks.patch b/srcpkgs/glib/patches/gthreadedresolver-Fix-race-between-source-callbacks.patch deleted file mode 100644 index 17de85b15bdbbe..00000000000000 --- a/srcpkgs/glib/patches/gthreadedresolver-Fix-race-between-source-callbacks.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Philip Withnall -Date: Mon, 11 Sep 2023 16:02:15 +0100 -Subject: [PATCH] gthreadedresolver: Fix race between source callbacks and - finalize -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -I had thought that because `g_source_destroy()` was called for the two -sources (cancel and timeout) in the `GTask` finalize function for a -threaded resolver operation, that it would be fine to use a plain -pointer in the source callbacks to point to the `GTask`. - -That turns out to not be true: because the source callbacks are executed -in the GLib worker thread, and the `GTask` can be finalized in another -thread, it’s possible for a source callback (e.g. `cancelled_cb()`) to -be scheduled in the worker thread, then for the `GTask` to be finalized, -and then the source callback to continue execution and find itself -doing a use-after-free. - -Fix that by using a weak ref to the `GTask` in the source callbacks, -rather than a plain pointer. - -Signed-off-by: Philip Withnall - -Fixes: #3105 ---- - gio/gthreadedresolver.c | 43 +++++++++++++++++++++++++++++++++++------ - 1 file changed, 37 insertions(+), 6 deletions(-) - -diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c -index 2d94531bfda3..c7a567549f28 100644 ---- a/gio/gthreadedresolver.c -+++ b/gio/gthreadedresolver.c -@@ -1422,85 +1422,116 @@ lookup_records_finish (GResolver *resolver, - static gboolean - timeout_cb (gpointer user_data) - { -- GTask *task = G_TASK (user_data); -- LookupData *data = g_task_get_task_data (task); -+ GWeakRef *weak_task = user_data; -+ GTask *task = NULL; /* (owned) */ -+ LookupData *data; - gboolean should_return; - -+ task = g_weak_ref_get (weak_task); -+ if (task == NULL) -+ return G_SOURCE_REMOVE; -+ -+ data = g_task_get_task_data (task); -+ - g_mutex_lock (&data->lock); - - should_return = g_atomic_int_compare_and_exchange (&data->will_return, NOT_YET, TIMED_OUT); - g_clear_pointer (&data->timeout_source, g_source_unref); - - g_mutex_unlock (&data->lock); - - if (should_return) - g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_TIMED_OUT, - _("Socket I/O timed out")); - - /* Signal completion of the task. */ - g_mutex_lock (&data->lock); - data->has_returned = TRUE; - g_cond_broadcast (&data->cond); - g_mutex_unlock (&data->lock); - -+ g_object_unref (task); -+ - return G_SOURCE_REMOVE; - } - - /* Will be called in the GLib worker thread, so must lock all accesses to shared - * data. */ - static gboolean - cancelled_cb (GCancellable *cancellable, - gpointer user_data) - { -- GTask *task = G_TASK (user_data); -- LookupData *data = g_task_get_task_data (task); -+ GWeakRef *weak_task = user_data; -+ GTask *task = NULL; /* (owned) */ -+ LookupData *data; - gboolean should_return; - -+ task = g_weak_ref_get (weak_task); -+ if (task == NULL) -+ return G_SOURCE_REMOVE; -+ -+ data = g_task_get_task_data (task); -+ - g_mutex_lock (&data->lock); - - g_assert (g_cancellable_is_cancelled (cancellable)); - should_return = g_atomic_int_compare_and_exchange (&data->will_return, NOT_YET, CANCELLED); - g_clear_pointer (&data->cancellable_source, g_source_unref); - - g_mutex_unlock (&data->lock); - - if (should_return) - g_task_return_error_if_cancelled (task); - - /* Signal completion of the task. */ - g_mutex_lock (&data->lock); - data->has_returned = TRUE; - g_cond_broadcast (&data->cond); - g_mutex_unlock (&data->lock); - -+ g_object_unref (task); -+ - return G_SOURCE_REMOVE; - } - -+static void -+weak_ref_clear_and_free (GWeakRef *weak_ref) -+{ -+ g_weak_ref_clear (weak_ref); -+ g_free (weak_ref); -+} -+ - static void - run_task_in_thread_pool_async (GThreadedResolver *self, - GTask *task) - { - LookupData *data = g_task_get_task_data (task); - guint timeout_ms = g_resolver_get_timeout (G_RESOLVER (self)); - GCancellable *cancellable = g_task_get_cancellable (task); - - g_mutex_lock (&data->lock); - - g_thread_pool_push (self->thread_pool, g_object_ref (task), NULL); - - if (timeout_ms != 0) - { -+ GWeakRef *weak_task = g_new0 (GWeakRef, 1); -+ g_weak_ref_set (weak_task, task); -+ - data->timeout_source = g_timeout_source_new (timeout_ms); - g_source_set_static_name (data->timeout_source, "[gio] threaded resolver timeout"); -- g_source_set_callback (data->timeout_source, G_SOURCE_FUNC (timeout_cb), task, NULL); -+ g_source_set_callback (data->timeout_source, G_SOURCE_FUNC (timeout_cb), g_steal_pointer (&weak_task), (GDestroyNotify) weak_ref_clear_and_free); - g_source_attach (data->timeout_source, GLIB_PRIVATE_CALL (g_get_worker_context) ()); - } - - if (cancellable != NULL) - { -+ GWeakRef *weak_task = g_new0 (GWeakRef, 1); -+ g_weak_ref_set (weak_task, task); -+ - data->cancellable_source = g_cancellable_source_new (cancellable); - g_source_set_static_name (data->cancellable_source, "[gio] threaded resolver cancellable"); -- g_source_set_callback (data->cancellable_source, G_SOURCE_FUNC (cancelled_cb), task, NULL); -+ g_source_set_callback (data->cancellable_source, G_SOURCE_FUNC (cancelled_cb), g_steal_pointer (&weak_task), (GDestroyNotify) weak_ref_clear_and_free); - g_source_attach (data->cancellable_source, GLIB_PRIVATE_CALL (g_get_worker_context) ()); - } - diff --git a/srcpkgs/glib/template b/srcpkgs/glib/template index 8cbde21cc6019b..a9723c23b568c2 100644 --- a/srcpkgs/glib/template +++ b/srcpkgs/glib/template @@ -1,30 +1,35 @@ # Template file for 'glib' +# keep in sync with glib-bootstrap pkgname=glib -version=2.78.0 -revision=3 +version=2.80.0 +revision=1 build_style=meson +build_helper=qemu # static version is necessary for qemu-user-static; # also disable LTO, otherwise there are multiple failures when linking qemu -configure_args="-Dman=true -Dselinux=disabled - $(vopt_bool gtk_doc gtk_doc) --default-library=both -Db_lto=false" -hostmakedepends="gettext pkg-config libxslt docbook-xsl $(vopt_if gtk_doc gtk-doc)" +configure_args="-Dman=true -Dselinux=disabled -Dintrospection=enabled + $(vopt_bool gtk_doc documentation) --default-library=both -Db_lto=false" +hostmakedepends="gettext pkg-config gobject-introspection-bootstrap + libxslt docbook-xsl $(vopt_if gtk_doc gi-docgen) python3-packaging python3-docutils" makedepends="zlib-devel pcre2-devel libffi-devel dbus-devel elfutils-devel libmount-devel" checkdepends="desktop-file-utils shared-mime-info dbus python3-pytest" short_desc="GNU library of C routines" maintainer="Orphaned " license="LGPL-2.1-or-later" homepage="https://wiki.gnome.org/Projects/GLib" -#changelog="https://gitlab.gnome.org/GNOME/glib/raw/glib-2-78/NEWS" +#changelog="https://gitlab.gnome.org/GNOME/glib/raw/glib-2-80/NEWS" changelog="https://gitlab.gnome.org/GNOME/glib/raw/main/NEWS" distfiles="${GNOME_SITE}/glib/${version%.*}/glib-${version}.tar.xz" -checksum=44eaab8b720877ce303c5540b657b126f12dc94972d9880b52959f43fb537b30 +checksum=8228a92f92a412160b139ae68b6345bd28f24434a7b5af150ebe21ff587a561d make_check_pre="dbus-run-session" build_options="gtk_doc" -desc_option_gtk_doc="Build GTK API docs" +build_options_default="gtk_doc" +desc_option_gtk_doc="Build Glib API docs" -if [ -z "$CROSS_BUILD" ]; then - build_options_default+=" gtk_doc" +if [ "$CROSS_BUILD" ]; then + hostmakedepends+=" prelink-cross" + makedepends+=" gobject-introspection-bootstrap" fi post_patch() { @@ -34,6 +39,18 @@ post_patch() { fi } +post_install() { + # Install introspection wrappers for cross compiling + vbin ${FILESDIR}/gi-xbps-qemuwrapper + + # Install emulator wrappers for tools that require it + for tool in gi-compile-repository gi-decompile-typelib gi-inspect-typelib; do + mv ${DESTDIR}/usr/bin/${tool}{,.wrapped} + sed -e "s|@TOOL@|${tool}|" ${FILESDIR}/gi-tool-emulator-wrapper > gi-tool-emulator-wrapper + vbin gi-tool-emulator-wrapper ${tool} + done +} + pre_check() { # machine-id is a random, non-zero value echo 'dcb30309cd6c8b7cc20383d85a5c7012' > /etc/machine-id @@ -44,11 +61,12 @@ post_check() { } libglib-devel_package() { - depends="${makedepends} ${sourcepkg}>=${version}_${revision}" + depends="${makedepends/gobject-introspection-bootstrap/} ${sourcepkg}>=${version}_${revision}" short_desc+=" - development files" lib32files="/usr/lib/glib-2.0/include/glibconfig.h" pkg_install() { vmove usr/include + vmove usr/share/gir-1.0 vmove usr/lib/glib-2.0 vmove usr/lib/pkgconfig vmove "usr/lib/*.so" @@ -57,7 +75,7 @@ libglib-devel_package() { } glib-devel_package() { - depends="python3-setuptools libglib-devel>=${version}_${revision}" + depends="python3-packaging libglib-devel>=${version}_${revision}" short_desc+=" - development files" python_version=3 pycompile_dirs="usr/share/glib-2.0/codegen usr/share/glib-2.0/gdb" @@ -69,6 +87,7 @@ glib-devel_package() { vmove usr/bin/gdbus-codegen vmove usr/bin/gtester vmove usr/bin/glib-gettextize + vmove "usr/bin/gi-*" vmove usr/share/man/man1/glib-compile-resources.1 vmove usr/share/man/man1/glib-gettextize.1 vmove usr/share/man/man1/gtester.1 @@ -79,8 +98,8 @@ glib-devel_package() { for f in aclocal glib-2.0 gdb; do vmove usr/share/${f} done - if [ -d $DESTDIR/usr/share/gtk-doc ]; then - vmove usr/share/gtk-doc + if [ "$build_option_gtk_doc" ]; then + vmove usr/share/doc fi } } From 61b372041fb9444a22d172c9bd68a18f4abe1cbf Mon Sep 17 00:00:00 2001 From: oreo639 Date: Thu, 21 Mar 2024 12:54:17 -0700 Subject: [PATCH 4/5] gobject-introspection: update to 1.80.0. --- .../patches/fix-leaks.patch | 46 ------------------- srcpkgs/gobject-introspection/template | 14 +++--- 2 files changed, 8 insertions(+), 52 deletions(-) delete mode 100644 srcpkgs/gobject-introspection/patches/fix-leaks.patch diff --git a/srcpkgs/gobject-introspection/patches/fix-leaks.patch b/srcpkgs/gobject-introspection/patches/fix-leaks.patch deleted file mode 100644 index fa23ee74578897..00000000000000 --- a/srcpkgs/gobject-introspection/patches/fix-leaks.patch +++ /dev/null @@ -1,46 +0,0 @@ -From bf96a92ef263820d40e233814a46932cae00db41 Mon Sep 17 00:00:00 2001 -From: Xavier Claessens -Date: Tue, 18 Jul 2023 11:07:59 -0400 -Subject: [PATCH] gdump: Fix leaked io streams - -This makes Meson unit test fail: -https://github.com/mesonbuild/meson/issues/11754 ---- - -MR: https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/411 - - girepository/gdump.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/girepository/gdump.c b/girepository/gdump.c -index 055a8b8c1..449b260a4 100644 ---- a/girepository/gdump.c -+++ b/girepository/gdump.c -@@ -594,6 +594,7 @@ g_irepository_dump (const char *arg, GError **error) - if (output == NULL) - { - g_input_stream_close (G_INPUT_STREAM (input), NULL, NULL); -+ g_object_unref (input); - return FALSE; - } - -@@ -674,11 +675,12 @@ g_irepository_dump (const char *arg, GError **error) - ioerror = NULL; - else - ioerror = error; -- if (!g_input_stream_close (G_INPUT_STREAM (in), NULL, ioerror)) -- return FALSE; -- if (!g_output_stream_close (G_OUTPUT_STREAM (output), NULL, ioerror)) -- return FALSE; -+ caught_error |= !g_input_stream_close (G_INPUT_STREAM (in), NULL, ioerror); -+ caught_error |= !g_output_stream_close (G_OUTPUT_STREAM (output), NULL, ioerror); - } - -+ g_object_unref (in); -+ g_object_unref (output); -+ - return !caught_error; - } --- -GitLab - diff --git a/srcpkgs/gobject-introspection/template b/srcpkgs/gobject-introspection/template index 356646ced3117f..a34e7b84d91d59 100644 --- a/srcpkgs/gobject-introspection/template +++ b/srcpkgs/gobject-introspection/template @@ -1,11 +1,12 @@ # Template file for 'gobject-introspection' +# keep in sync with gobject-introspection-bootstrap pkgname=gobject-introspection -version=1.76.1 -revision=3 +version=1.80.1 +revision=1 build_style=meson -pycompile_dirs="usr/lib/${pkgname}/giscanner" +pycompile_dirs="usr/lib/gobject-introspection/giscanner" hostmakedepends="flex pkg-config" -# won't run tests with cairo to avoid cyclical deps +# won't run tests with cairo to avoid cyclical deps. makedepends="libffi-devel libglib-devel python3-devel python3-Mako python3-Markdown" depends="libgirepository-devel python3-Mako python3-Markdown python3-setuptools" @@ -13,8 +14,9 @@ short_desc="Introspection system for GObject-based libraries" maintainer="Enno Boland " license="GPL-2.0-or-later, LGPL-2.1-or-later" homepage="https://wiki.gnome.org/Projects/GObjectIntrospection" -distfiles="${GNOME_SITE}/${pkgname}/${version%.*}/${pkgname}-${version}.tar.xz" -checksum=196178bf64345501dcdc4d8469b36aa6fe80489354efe71cb7cb8ab82a3738bf +changelog="https://gitlab.gnome.org/GNOME/gobject-introspection/-/raw/main/NEWS" +distfiles="${GNOME_SITE}/gobject-introspection/${version%.*}/gobject-introspection-${version}.tar.xz" +checksum=a1df7c424e15bda1ab639c00e9051b9adf5cea1a9e512f8a603b53cd199bc6d8 python_version=3 if [ "$CROSS_BUILD" ]; then From 5cf54e6df82eb55014cdf2cfb73c95c8c562b83b Mon Sep 17 00:00:00 2001 From: oreo639 Date: Thu, 21 Mar 2024 12:59:31 -0700 Subject: [PATCH 5/5] glib-networking: update to 2.80.0. --- srcpkgs/glib-networking/template | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/srcpkgs/glib-networking/template b/srcpkgs/glib-networking/template index 680a064ffec5a9..7e9bcf0c9f267b 100644 --- a/srcpkgs/glib-networking/template +++ b/srcpkgs/glib-networking/template @@ -1,6 +1,6 @@ # Template file for 'glib-networking' pkgname=glib-networking -version=2.76.0 +version=2.80.0 revision=1 build_style=meson configure_args="-Dinstalled_tests=false -Dgnutls=enabled -Dlibproxy=enabled @@ -14,7 +14,7 @@ maintainer="Enno Boland " license="LGPL-2.1-or-later" homepage="https://gitlab.gnome.org/GNOME/glib-networking/" changelog="https://gitlab.gnome.org/GNOME/glib-networking/-/raw/master/NEWS" -#changelog="https://gitlab.gnome.org/GNOME/glib-networking/-/raw/glib-2-76/NEWS" +#changelog="https://gitlab.gnome.org/GNOME/glib-networking/-/raw/glib-2-80/NEWS" distfiles="${GNOME_SITE}/${pkgname}/${version%.*}/${pkgname}-${version}.tar.xz" -checksum=149a05a179e629a538be25662aa324b499d7c4549c5151db5373e780a1bf1b9a +checksum=d8f4f1aab213179ae3351617b59dab5de6bcc9e785021eee178998ebd4bb3acf lib32disabled=yes