From 0eea35eb107acadc8f624740bed8a58647780959 Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 1 Jun 2023 12:47:43 +0200 Subject: [PATCH] Update static-compat-glib2 to 2.76.3 --- ...emas-Remove-noisy-deprecation-warnin.patch | 11 +- ...pparent-size-only-for-files-and-syml.patch | 68 ++++++++ ...le-Do-not-rely-on-du-bytes-behaviour.patch | 160 ++++++++++++++++++ glib2/static-compat/PKGBUILD | 30 ++-- 4 files changed, 256 insertions(+), 13 deletions(-) create mode 100644 glib2/static-compat/0002-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch create mode 100644 glib2/static-compat/0003-tests-file-Do-not-rely-on-du-bytes-behaviour.patch diff --git a/glib2/static-compat/0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch b/glib2/static-compat/0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch index c2d7b698..010c9b58 100644 --- a/glib2/static-compat/0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch +++ b/glib2/static-compat/0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch @@ -3,15 +3,22 @@ From: "Jan Alexander Steffens (heftig)" Date: Fri, 7 Jan 2022 18:59:10 +0000 Subject: [PATCH] glib-compile-schemas: Remove noisy deprecation warnings +While the warnings are useful for developers, Arch Linux users also see +them when glib-compile-schemas gets run after upgrades, where they just +add noise. + +The alternative to this patch would be redirecting the compiler's stderr +to /dev/null, but that might also suppress more useful errors or +warnings we want users to see. --- gio/glib-compile-schemas.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c -index 326658a88b35..f61d45b9a364 100644 +index efe6f8e77eb2..c3e5664e4f2f 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c -@@ -1234,19 +1234,6 @@ parse_state_start_schema (ParseState *state, +@@ -1231,19 +1231,6 @@ parse_state_start_schema (ParseState *state, return; } diff --git a/glib2/static-compat/0002-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch b/glib2/static-compat/0002-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch new file mode 100644 index 00000000..8e96aaf3 --- /dev/null +++ b/glib2/static-compat/0002-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch @@ -0,0 +1,68 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Joan Bruguera +Date: Thu, 23 Mar 2023 02:24:30 +0000 +Subject: [PATCH] glocalfile: Sum apparent size only for files and symlinks + +Since GNU Coreutils 9.2 (commit 110bcd28386b1f47a4cd876098acb708fdcbbb25), +`du --apparent-size` (including `du --bytes`) no longer counts all kinds of +files (directories, FIFOs, etc.), but only those for which `st_size` in +`struct stat` is defined by POSIX, namely regular files and symlinks +(and also rarely supported memory objects). + +This aligns the behaviour of GLib's `G_FILE_MEASURE_APPARENT_SIZE` flag +with the new GNU Coreutils `du` and correct POSIX use. + +Note that this may be a breaking change for some uses. + +Link: https://lists.gnu.org/archive/html/bug-coreutils/2023-03/msg00007.html +Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2965 +--- + gio/glocalfile.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/gio/glocalfile.c b/gio/glocalfile.c +index 67d4b99fb741..e53216962faf 100644 +--- a/gio/glocalfile.c ++++ b/gio/glocalfile.c +@@ -86,6 +86,9 @@ + #define FILE_READ_ONLY_VOLUME 0x00080000 + #endif + ++#ifndef S_ISREG ++#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG) ++#endif + #ifndef S_ISDIR + #define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) + #endif +@@ -2777,6 +2780,23 @@ g_local_file_measure_size_of_contents (gint fd, + MeasureState *state, + GError **error); + ++inline static gboolean _g_stat_is_size_usable (const GLocalFileStat *buf) ++{ ++#ifndef HAVE_STATX ++ // Memory objects are defined by POSIX, but are not supported by statx nor Windows ++#ifdef S_TYPEISSHM ++ if (S_TYPEISSHM (buf)) ++ return TRUE; ++#endif ++#ifdef S_TYPEISTMO ++ if (S_TYPEISTMO (buf)) ++ return TRUE; ++#endif ++#endif ++ ++ return S_ISREG (_g_stat_mode (buf)) || S_ISLNK (_g_stat_mode (buf)); ++} ++ + static gboolean + g_local_file_measure_size_of_file (gint parent_fd, + GSList *name, +@@ -2836,6 +2856,7 @@ g_local_file_measure_size_of_file (gint parent_fd, + state->disk_usage += _g_stat_blocks (&buf) * G_GUINT64_CONSTANT (512); + else + #endif ++ if (_g_stat_is_size_usable (&buf)) + state->disk_usage += _g_stat_size (&buf); + + if (S_ISDIR (_g_stat_mode (&buf))) diff --git a/glib2/static-compat/0003-tests-file-Do-not-rely-on-du-bytes-behaviour.patch b/glib2/static-compat/0003-tests-file-Do-not-rely-on-du-bytes-behaviour.patch new file mode 100644 index 00000000..5c9c53da --- /dev/null +++ b/glib2/static-compat/0003-tests-file-Do-not-rely-on-du-bytes-behaviour.patch @@ -0,0 +1,160 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Joan Bruguera +Date: Thu, 23 Mar 2023 02:19:03 +0000 +Subject: [PATCH] tests/file: Do not rely on du --bytes behaviour + +As explained in the previous commit, GNU Coreutils 9.2 changes the behaviour +of `du --bytes` to only count regular files and symlinks. + +The previous commit makes the test pass with GNU Coreutils >=9.2, but the +machine running the tests may have an older version, or perhaps even a +reimplementation such as uutils. So we can't rely on the size returned by `du` +to be the consistent across systems any more. + +However, the plus side of the new behaviour is that the size reported by `du` +/ `G_FILE_MEASURE_APPARENT_SIZE` is now well-defined across filesystems +(as the sum of the sizes of regular files & symlinks), so we can hardcode it. + +Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2965 +--- + gio/tests/file.c | 85 ++---------------------------------------------- + 1 file changed, 3 insertions(+), 82 deletions(-) + +diff --git a/gio/tests/file.c b/gio/tests/file.c +index d16eda5c0b8c..ad2f945f9397 100644 +--- a/gio/tests/file.c ++++ b/gio/tests/file.c +@@ -2515,105 +2515,33 @@ test_copy_preserve_mode (void) + #endif + } + +-static gchar * +-splice_to_string (GInputStream *stream, +- GError **error) +-{ +- GMemoryOutputStream *buffer = NULL; +- char *ret = NULL; +- +- buffer = (GMemoryOutputStream*)g_memory_output_stream_new (NULL, 0, g_realloc, g_free); +- if (g_output_stream_splice ((GOutputStream*)buffer, stream, 0, NULL, error) < 0) +- goto out; +- +- if (!g_output_stream_write ((GOutputStream*)buffer, "\0", 1, NULL, error)) +- goto out; +- +- if (!g_output_stream_close ((GOutputStream*)buffer, NULL, error)) +- goto out; +- +- ret = g_memory_output_stream_steal_data (buffer); +- out: +- g_clear_object (&buffer); +- return ret; +-} +- +-static gboolean +-get_size_from_du (const gchar *path, guint64 *size) +-{ +- GSubprocess *du; +- gboolean ok; +- gchar *result; +- gchar *endptr; +- GError *error = NULL; +- gchar *du_path = NULL; +- +-#ifndef __APPLE__ +- du_path = g_find_program_in_path ("du"); +-#endif +- +- /* If we can’t find du, don’t try and run the test. */ +- if (du_path == NULL) +- return FALSE; +- +- g_free (du_path); +- +- du = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE, +- &error, +- "du", "--bytes", "-s", path, NULL); +- g_assert_no_error (error); +- +- result = splice_to_string (g_subprocess_get_stdout_pipe (du), &error); +- g_assert_no_error (error); +- +- *size = g_ascii_strtoll (result, &endptr, 10); +- +- g_subprocess_wait (du, NULL, &error); +- g_assert_no_error (error); +- +- ok = g_subprocess_get_successful (du); +- +- g_object_unref (du); +- g_free (result); +- +- return ok; +-} +- + static void + test_measure (void) + { + GFile *file; +- guint64 size; + guint64 num_bytes; + guint64 num_dirs; + guint64 num_files; + GError *error = NULL; + gboolean ok; + gchar *path; + + path = g_test_build_filename (G_TEST_DIST, "desktop-files", NULL); + file = g_file_new_for_path (path); + +- if (!get_size_from_du (path, &size)) +- { +- g_test_message ("du not found or fail to run, skipping byte measurement"); +- size = 0; +- } +- + ok = g_file_measure_disk_usage (file, + G_FILE_MEASURE_APPARENT_SIZE, + NULL, + NULL, + NULL, + &num_bytes, + &num_dirs, + &num_files, + &error); + g_assert_true (ok); + g_assert_no_error (error); + +- if (size > 0) +- g_assert_cmpuint (num_bytes, ==, size); ++ g_assert_cmpuint (num_bytes, ==, 74478); + g_assert_cmpuint (num_dirs, ==, 6); + g_assert_cmpuint (num_files, ==, 32); + +@@ -2665,8 +2593,7 @@ measure_done (GObject *source, + g_assert_true (ok); + g_assert_no_error (error); + +- if (data->expected_bytes > 0) +- g_assert_cmpuint (data->expected_bytes, ==, num_bytes); ++ g_assert_cmpuint (data->expected_bytes, ==, num_bytes); + g_assert_cmpuint (data->expected_dirs, ==, num_dirs); + g_assert_cmpuint (data->expected_files, ==, num_files); + +@@ -2695,15 +2622,9 @@ test_measure_async (void) + + path = g_test_build_filename (G_TEST_DIST, "desktop-files", NULL); + file = g_file_new_for_path (path); +- +- if (!get_size_from_du (path, &data->expected_bytes)) +- { +- g_test_message ("du not found or fail to run, skipping byte measurement"); +- data->expected_bytes = 0; +- } +- + g_free (path); + ++ data->expected_bytes = 74478; + data->expected_dirs = 6; + data->expected_files = 32; + diff --git a/glib2/static-compat/PKGBUILD b/glib2/static-compat/PKGBUILD index 77b87e5c..827e27d6 100644 --- a/glib2/static-compat/PKGBUILD +++ b/glib2/static-compat/PKGBUILD @@ -3,7 +3,7 @@ _pkgname=glib2 pkgname=static-compat-$_pkgname -pkgver=2.74.5 +pkgver=2.76.3 pkgrel=1 pkgdesc="Low level core library" url="https://wiki.gnome.org/Projects/GLib" @@ -13,28 +13,36 @@ depends=(static-compat-pcre2 static-compat-libffi static-compat-util-linux stati makedepends=(gettext shared-mime-info python libelf git static-compat-meson) checkdepends=(desktop-file-utils) options=(!strip !emptydirs staticlibs) -_commit=39a71aff372ed491a24ca84409d9f93bc7c5d6d4 # tags/2.74.5^0 -source=("git+https://gitlab.gnome.org/GNOME/glib.git#commit=$_commit" - "git+https://gitlab.gnome.org/GNOME/gvdb.git" - 0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch) +_commit=69e209764bcfef599a21b32f82f88f1906bf197c # tags/2.76.3^0 +source=( + "git+https://gitlab.gnome.org/GNOME/glib.git#commit=$_commit" + "git+https://gitlab.gnome.org/GNOME/gvdb.git" + 0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch + 0002-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch + 0003-tests-file-Do-not-rely-on-du-bytes-behaviour.patch +) b2sums=('SKIP' 'SKIP' - '4d5cb5ad1222a5e8d06e79736170cd694a6277e0da71ffd55560d74cf5c3273551d302a35bd2ff43f09070d61c1de147bb312428fce98347d232ac3d44406511') + 'bd7f881ae6054c363783bf45b1add5eef5e8347554e23b9fece526701469d07cdcb9871fa73dee473796a219e8aa513796a96da769949097ea207db038578d07' + '6bcbcba60208162f7221701d6a642eabfc92c2fc6a476bcb42da5967577f8f0c75b688d149be01c9c48cd644aafa7fbdd63d9086385b8f7607fc981756d71a68' + '257bf37d304cc161dedcde0a2c4d01e297f8263cde48b49d3ee47ca95a8fb9ad44bbb9bf99da51ec766ffb6f9d502e0a8fdc6b86346e6755373ee515e23b9419') pkgver() { cd glib - git describe --tags | sed 's/-/+/g' + git describe --tags | sed 's/[^-]*-g/r&/;s/-/+/g' } prepare() { cd glib - # Fix build (missing include) - git cherry-pick -n 03cb4261e00cf505790f4fd4e69f97b2ef4fcccd - # Suppress noise from glib-compile-schemas.hook git apply -3 ../0001-glib-compile-schemas-Remove-noisy-deprecation-warnin.patch + # fix test suite issues with coreutils >=9.2 + # https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3358 + git apply -3 ../0002-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch + git apply -3 ../0003-tests-file-Do-not-rely-on-du-bytes-behaviour.patch + git submodule init git submodule set-url subprojects/gvdb "$srcdir/gvdb" git -c protocol.file.allow=always submodule update @@ -54,7 +62,7 @@ build() { check() { source static-compat-environment - meson test -C build --no-suite flaky --print-errorlogs || true + meson test -C build --no-suite flaky --no-suite slow --print-errorlogs || true } package() {