diff options
author | Mart Raudsepp <leio@gentoo.org> | 2024-03-03 22:25:06 +0200 |
---|---|---|
committer | Mart Raudsepp <leio@gentoo.org> | 2024-03-03 22:54:29 +0200 |
commit | 54947c0c828f769ed8f3bc191bf10e21bd7370f4 (patch) | |
tree | fac50c3b7cac0b86e750181838c74c629a452e37 /gnome-extra/gnome-contacts | |
parent | x11-libs/pango: add 1.52.0 (diff) | |
download | gentoo-54947c0c828f769ed8f3bc191bf10e21bd7370f4.tar.gz gentoo-54947c0c828f769ed8f3bc191bf10e21bd7370f4.tar.bz2 gentoo-54947c0c828f769ed8f3bc191bf10e21bd7370f4.zip |
gnome-extra/gnome-contacts: add 45.1, fix compile with clang17/gcc14
Closes: https://bugs.gentoo.org/894794
Signed-off-by: Mart Raudsepp <leio@gentoo.org>
Diffstat (limited to 'gnome-extra/gnome-contacts')
-rw-r--r-- | gnome-extra/gnome-contacts/Manifest | 1 | ||||
-rw-r--r-- | gnome-extra/gnome-contacts/files/45.1-clang.patch | 228 | ||||
-rw-r--r-- | gnome-extra/gnome-contacts/gnome-contacts-45.1.ebuild | 77 |
3 files changed, 306 insertions, 0 deletions
diff --git a/gnome-extra/gnome-contacts/Manifest b/gnome-extra/gnome-contacts/Manifest index db20be73e298..375397dea960 100644 --- a/gnome-extra/gnome-contacts/Manifest +++ b/gnome-extra/gnome-contacts/Manifest @@ -1 +1,2 @@ DIST gnome-contacts-45.0.tar.xz 401156 BLAKE2B cce302b780717963083b4b0725d9f5e0fd2ec0eeafabdf247fb2e3a099cde84441563a70b7bdf22efa8f20358baf10be015f1e7524139beb8e6074bd12c28e6d SHA512 691cbd9fc1ff0e9e7a2549f522ea7ef5b73eee976fb48b2b250b8be9775737938d9fd0ffa66374dc20028d764e96605caae1be7c32689371a58ee5e78bd7c28b +DIST gnome-contacts-45.1.tar.xz 402748 BLAKE2B 02cb3fd3ebcfd4e33add4706b1746940a14d680697ddaf54f9e006a14c15e7a11f791af2704b40573b59c6348ba3f1e1e216b514b1bc5fed990f0e8eaf1dc45b SHA512 87fc5b235e955ca347950306d37d0d8aea71dbcdb0f8d5c45d96da3a316f5e40da6004d6c5ab3674acdf7237f81bd508486c90130d01b045ee0c0582b04ba8aa diff --git a/gnome-extra/gnome-contacts/files/45.1-clang.patch b/gnome-extra/gnome-contacts/files/45.1-clang.patch new file mode 100644 index 000000000000..a708f8f926a5 --- /dev/null +++ b/gnome-extra/gnome-contacts/files/45.1-clang.patch @@ -0,0 +1,228 @@ +From a6ad56a6151f29ceaf6fda3c547c143645e1060f Mon Sep 17 00:00:00 2001 +From: Niels De Graef <nielsdegraef@gmail.com> +Date: Sun, 18 Feb 2024 11:49:32 +0100 +Subject: [PATCH] Avoid using return*_if_fail/reached() macros in Vala + +`g_return_if_fail()`, `g_return_val_if_fail()` (and similarly +`g_return_if_reached()` are often used in GLib C to denote a +precondition or soft assertion for a specific place in the code, often +pointing to a programmer error if the condition fails. + +Vala also binds to these methods, but unfortunately, they're a bit less +useful: the error message it prints only shows the "compiled" temporary +variable (e.g. `_tmp4_ != NULL`) rather than the actual value, and more +importantly, it skips some type strictness checks when compiling to C +(for example, allowing to return nothing in a function that expects a +boolean return value). + +This commit avoids those macros in several ways: +- Throwing an error for unsupported code paths +- Using the `requires()` construct in Vala, which is a similar construct + to that of GLib, but specific to Vala (but can only be used at the + function signature level) +- For other points in the code, we fall back to `warn_if_fail()`, which + still suffers from the problem of printing temporary variables, but at + least doesn't fail any type checks. + +Fixes: https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/340 +--- + src/contacts-contact-editor.vala | 4 ++-- + src/contacts-contact-sheet.vala | 6 +++--- + src/contacts-import-operation.vala | 2 +- + src/contacts-main-window.vala | 19 +++++++++---------- + src/contacts-persona-filter.vala | 6 +++--- + src/contacts-query-filter.vala | 6 +++--- + src/core/contacts-bin-chunk.vala | 2 +- + src/core/contacts-chunk.vala | 3 +-- + src/io/contacts-io-parse-operation.vala | 2 +- + 9 files changed, 24 insertions(+), 26 deletions(-) + +diff --git a/src/contacts-contact-editor.vala b/src/contacts-contact-editor.vala +index 195eaa0e..5ac9b3d7 100644 +--- a/src/contacts-contact-editor.vala ++++ b/src/contacts-contact-editor.vala +@@ -126,7 +126,7 @@ public class Contacts.PersonaEditor : Gtk.Widget { + return ((Chunk) item).persona == this.persona; + }); + var persona_model = new Gtk.FilterListModel (this.contact, (owned) persona_filter); +- return_if_fail (persona_model.get_n_items () > 0); ++ warn_if_fail (persona_model.get_n_items () > 0); + + // Show all properties that we either ... + var filter = new Gtk.AnyFilter (); +@@ -208,7 +208,7 @@ public class Contacts.PersonaEditor : Gtk.Widget { + while (current_position < position) { + child = child.get_next_sibling (); + // If this fails, we somehow have less widgets than items in our model +- return_if_fail (child != null); ++ warn_if_fail (child != null); + current_position++; + } + +diff --git a/src/contacts-contact-sheet.vala b/src/contacts-contact-sheet.vala +index 2c49bb66..092466ab 100644 +--- a/src/contacts-contact-sheet.vala ++++ b/src/contacts-contact-sheet.vala +@@ -49,13 +49,13 @@ public class Contacts.ContactSheet : Gtk.Widget { + // Get the widget where we'll have to append the item at "position". Note + // that we need to take care of the header and the persona store titles + unowned var child = get_first_child (); +- return_if_fail (child != null); // Header is always available ++ warn_if_fail (child != null); // Header is always available + + uint current_position = 0; + while (current_position < position) { + child = child.get_next_sibling (); + // If this fails, we somehow have less widgets than items in our model +- return_if_fail (child != null); ++ warn_if_fail (child != null); + + // Ignore persona store labels + if (child is Gtk.Label) +@@ -67,7 +67,7 @@ public class Contacts.ContactSheet : Gtk.Widget { + // First, remove the ones that were removed from the model too + while (removed != 0) { + unowned var to_remove = child.get_next_sibling (); +- return_if_fail (to_remove != null); // if this happens we're out of sync ++ warn_if_fail (to_remove != null); // if this happens we're out of sync + to_remove.unparent (); + removed--; + } +diff --git a/src/contacts-import-operation.vala b/src/contacts-import-operation.vala +index bf8032da..54a29a3d 100644 +--- a/src/contacts-import-operation.vala ++++ b/src/contacts-import-operation.vala +@@ -56,6 +56,6 @@ public class Contacts.ImportOperation : Operation { + } + + public override async void _undo () throws GLib.Error { +- return_if_reached (); ++ throw new IOError.NOT_SUPPORTED ("Undoing an import operation is not supported"); + } + } +diff --git a/src/contacts-main-window.vala b/src/contacts-main-window.vala +index 42c51e65..d8ddda2b 100644 +--- a/src/contacts-main-window.vala ++++ b/src/contacts-main-window.vala +@@ -233,12 +233,11 @@ public class Contacts.MainWindow : Adw.ApplicationWindow { + this.actions_bar.reveal_child = (this.state == UiState.SELECTING); + } + +- private void edit_contact (GLib.SimpleAction action, GLib.Variant? parameter) { +- unowned var selected = get_selected_individual (); +- return_if_fail (selected != null); ++ private void edit_contact (GLib.SimpleAction action, GLib.Variant? parameter) ++ requires (get_selected_individual () != null) { + ++ unowned var selected = get_selected_individual (); + this.state = UiState.UPDATING; +- + var title = _("Editing %s").printf (selected.display_name); + this.contact_pane_page.title = title; + this.contact_pane.edit_contact (); +@@ -258,10 +257,10 @@ public class Contacts.MainWindow : Adw.ApplicationWindow { + unmark_action.set_enabled (favorite); + } + +- private void set_selection_is_favorite (bool favorite) { +- unowned var selected = get_selected_individual (); +- return_if_fail (selected != null); ++ private void set_selection_is_favorite (bool favorite) ++ requires (get_selected_individual () != null) { + ++ unowned var selected = get_selected_individual (); + selected.is_favourite = favorite; + + update_favorite_actions (favorite); +@@ -282,10 +281,10 @@ public class Contacts.MainWindow : Adw.ApplicationWindow { + this.list_pane_page.title = left_title; + } + +- private void unlink_contact (GLib.SimpleAction action, GLib.Variant? parameter) { +- unowned Individual? selected = get_selected_individual (); +- return_if_fail (selected != null); ++ private void unlink_contact (GLib.SimpleAction action, GLib.Variant? parameter) ++ requires (get_selected_individual () != null) { + ++ unowned var selected = get_selected_individual (); + this.selection_model.selected.unselect_all (); + this.state = UiState.NORMAL; + +diff --git a/src/contacts-persona-filter.vala b/src/contacts-persona-filter.vala +index 274f4179..9bf5f913 100644 +--- a/src/contacts-persona-filter.vala ++++ b/src/contacts-persona-filter.vala +@@ -24,10 +24,10 @@ public class Contacts.PersonaFilter : Gtk.Filter { + } + private string[] _ignored_store_types = { "key-file", }; + +- public override bool match (GLib.Object? item) { +- unowned var persona = item as Persona; +- return_val_if_fail (persona != null, false); ++ public override bool match (GLib.Object? item) ++ requires (item is Persona) { + ++ unowned var persona = item as Persona; + return match_persona_store_type (persona); + } + +diff --git a/src/contacts-query-filter.vala b/src/contacts-query-filter.vala +index ed46f7c5..c1846e05 100644 +--- a/src/contacts-query-filter.vala ++++ b/src/contacts-query-filter.vala +@@ -69,10 +69,10 @@ public class Contacts.QueryFilter : Gtk.Filter { + this.changed (Gtk.FilterChange.DIFFERENT); + } + +- public override bool match (GLib.Object? item) { +- unowned var individual = item as Individual; +- return_val_if_fail (individual != null, false); ++ public override bool match (GLib.Object? item) ++ requires (item is Individual) { + ++ unowned var individual = item as Individual; + return this.query.is_match (individual) > this.min_strength; + } + +diff --git a/src/core/contacts-bin-chunk.vala b/src/core/contacts-bin-chunk.vala +index 4a63072e..96bf5de3 100644 +--- a/src/core/contacts-bin-chunk.vala ++++ b/src/core/contacts-bin-chunk.vala +@@ -38,7 +38,7 @@ public abstract class Contacts.BinChunk : Chunk, GLib.ListModel { + public override bool dirty { + get { + // If we're hitting this, a subclass forgot to set the field +- return_val_if_fail (this.original_elements_set, false); ++ warn_if_fail (this.original_elements_set); + + var non_empty_count = nr_nonempty_children (); + if (this.original_elements.length != non_empty_count) +diff --git a/src/core/contacts-chunk.vala b/src/core/contacts-chunk.vala +index ba346db5..fdfa8da1 100644 +--- a/src/core/contacts-chunk.vala ++++ b/src/core/contacts-chunk.vala +@@ -58,8 +58,7 @@ public abstract class Contacts.Chunk : GLib.Object { + /** + * Calls the appropriate API to save to the persona. + */ +- public abstract async void save_to_persona () throws GLib.Error +- requires (this.persona != null); ++ public abstract async void save_to_persona () throws GLib.Error; + + /** + * Serializes this chunk into a {@link GLib.Variant} accordding to an +diff --git a/src/io/contacts-io-parse-operation.vala b/src/io/contacts-io-parse-operation.vala +index 0e74c144..cfb98a74 100644 +--- a/src/io/contacts-io-parse-operation.vala ++++ b/src/io/contacts-io-parse-operation.vala +@@ -82,6 +82,6 @@ public class Contacts.Io.ParseOperation : Operation { + } + + public override async void _undo () throws GLib.Error { +- return_if_reached (); ++ throw new IOError.NOT_SUPPORTED ("Undoing a parsing operation is not supported"); + } + } +-- +GitLab + diff --git a/gnome-extra/gnome-contacts/gnome-contacts-45.1.ebuild b/gnome-extra/gnome-contacts/gnome-contacts-45.1.ebuild new file mode 100644 index 000000000000..0d41cb7ad75b --- /dev/null +++ b/gnome-extra/gnome-contacts/gnome-contacts-45.1.ebuild @@ -0,0 +1,77 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +PYTHON_COMPAT=( python3_{10..12} ) + +inherit gnome.org gnome2-utils meson python-any-r1 vala xdg + +DESCRIPTION="GNOME contact management application" +HOMEPAGE="https://wiki.gnome.org/Design/Apps/Contacts" + +LICENSE="GPL-2+" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86" +IUSE="+gnome-online-accounts" + +VALA_DEPEND=" + $(vala_depend) + >=dev-libs/gobject-introspection-1.54 + dev-libs/folks[vala(+)] + gnome-online-accounts? ( net-libs/gnome-online-accounts[vala] ) + gnome-extra/evolution-data-server[gtk,vala] + >=dev-libs/libportal-0.6:=[vala] +" +RDEPEND=" + >=dev-libs/folks-0.14.0:=[eds] + >=dev-libs/libgee-0.10:0.8= + >=dev-libs/glib-2.64:2 + >=gui-libs/gtk-4.12:4 + >=gui-libs/libadwaita-1.4_alpha:1 + >=gnome-extra/evolution-data-server-3.42:=[gnome-online-accounts?] + >=dev-libs/libportal-0.6:= + >=media-gfx/qrencode-4.1.1:= + gnome-online-accounts? ( net-libs/gnome-online-accounts:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + ${PYTHON_DEPS} + ${VALA_DEPEND} + app-text/docbook-xml-dtd:4.2 + app-text/docbook-xsl-stylesheets + dev-libs/appstream-glib + dev-libs/libxml2:2 + dev-libs/libxslt + >=sys-devel/gettext-0.19.8 + virtual/pkgconfig +" + +PATCHES=( + "${FILESDIR}"/${PV}-clang.patch # Upstream commit a6ad56a6151f29 +) + +src_prepare() { + default + vala_setup + xdg_environment_reset +} + +src_configure() { + local emesonargs=( + -Dcamera=true # Ignored + -Dmanpage=true + -Ddocs=false + $(meson_use gnome-online-accounts goa) + ) + meson_src_configure +} + +pkg_postinst() { + xdg_pkg_postinst + gnome2_schemas_update +} + +pkg_postrm() { + xdg_pkg_postrm + gnome2_schemas_update +} |