From 9eafe4139d6b2c0cabe3c77a903d6ae931a26975 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Thu, 24 Aug 2023 20:18:26 +0200 Subject: [PATCH] Fix build on some Vala compiler versions See https://gitlab.gnome.org/GNOME/vala/-/issues/1474 and https://gitlab.gnome.org/GNOME/vala/-/issues/1478 --- libdino/CMakeLists.txt | 7 +++++++ libdino/src/service/stream_interactor.vala | 5 +++++ main/CMakeLists.txt | 15 +++++++++++++++ main/src/ui/util/helper.vala | 6 ++++++ main/src/ui/widgets/avatar_picture.vala | 4 ++-- main/src/ui/widgets/fixed_ratio_picture.vala | 4 ++-- xmpp-vala/CMakeLists.txt | 7 +++++++ xmpp-vala/src/core/module_flag.vala | 10 ++++++++++ 8 files changed, 54 insertions(+), 4 deletions(-) diff --git a/libdino/CMakeLists.txt b/libdino/CMakeLists.txt index 3c184cfd..fc283417 100644 --- a/libdino/CMakeLists.txt +++ b/libdino/CMakeLists.txt @@ -6,6 +6,11 @@ find_packages(LIBDINO_PACKAGES REQUIRED GObject ) +set(LIBDINO_DEFINITIONS) +if(LIBDINO_VERSION VERSION_EQUAL "0.56.11") + set(LIBDINO_DEFINITIONS ${LIBDINO_DEFINITIONS} VALA_0_56_11) +endif() + vala_precompile(LIBDINO_VALA_C SOURCES src/application.vala @@ -76,6 +81,8 @@ GENERATE_VAPI dino GENERATE_HEADER dino +DEFINITIONS + ${LIBDINO_DEFINITIONS} ) add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/exports/dino_i18n.h" diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala index 192460d4..5d248327 100644 --- a/libdino/src/service/stream_interactor.vala +++ b/libdino/src/service/stream_interactor.vala @@ -89,7 +89,12 @@ public class ModuleIdentity : Object { } public T? cast(StreamInteractionModule module) { +#if VALA_0_56_11 + // We can't typecheck due to compiler bug + return (T) module; +#else return module.get_type().is_a(typeof(T)) ? (T?) module : null; +#endif } public bool matches(StreamInteractionModule module) { diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 7f85f7ae..4e408294 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -111,9 +111,24 @@ endif() if(GTK4_VERSION VERSION_GREATER_EQUAL "4.8") set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} GTK_4_8) endif() +if(GTK4_VERSION VERSION_GREATER_EQUAL "4.12") + set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} GTK_4_12) +endif() if(Adwaita_VERSION VERSION_GREATER_EQUAL "1.2") set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} Adw_1_2) endif() +if(VALA_VERSION VERSION_GREATER_EQUAL "0.56.5" AND VALA_VERSION VERSION_LESS "0.58") + set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} VALA_0_56_GREATER_5) +endif() +if(VALA_VERSION VERSION_GREATER_EQUAL "0.56.11" AND VALA_VERSION VERSION_LESS "0.58") + set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} VALA_0_56_GREATER_11) +endif() +if(VALA_VERSION VERSION_EQUAL "0.56.11") + set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} VALA_0_56_11) +endif() +if(VALA_VERSION VERSION_EQUAL "0.56.12") + set(MAIN_DEFINITIONS ${MAIN_DEFINITIONS} VALA_0_56_12) +endif() vala_precompile(MAIN_VALA_C SOURCES diff --git a/main/src/ui/util/helper.vala b/main/src/ui/util/helper.vala index d6da72dd..63288fc2 100644 --- a/main/src/ui/util/helper.vala +++ b/main/src/ui/util/helper.vala @@ -103,7 +103,13 @@ private const string force_color_css = "%s { color: %s; }"; public static Gtk.CssProvider force_css(Gtk.Widget widget, string css) { var p = new Gtk.CssProvider(); try { +#if GTK_4_12 && (VALA_0_56_GREATER_11 || VALA_0_58) + p.load_from_string(css); +#elif (VALA_0_56_11 || VALA_0_56_12) + p.load_from_data(css, css.length); +#else p.load_from_data(css.data); +#endif widget.get_style_context().add_provider(p, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } catch (GLib.Error err) { // handle err diff --git a/main/src/ui/widgets/avatar_picture.vala b/main/src/ui/widgets/avatar_picture.vala index e632413c..fb254915 100644 --- a/main/src/ui/widgets/avatar_picture.vala +++ b/main/src/ui/widgets/avatar_picture.vala @@ -454,7 +454,7 @@ public class Dino.Ui.AvatarPicture : Gtk.Widget { label.insert_after(this, null); label.attributes = new Pango.AttrList(); label.attributes.insert(Pango.attr_foreground_new(uint16.MAX, uint16.MAX, uint16.MAX)); -#if GTK_4_8 && VALA_0_58 +#if GTK_4_8 && (VALA_0_56_GREATER_5 || VALA_0_58) picture.content_fit = Gtk.ContentFit.COVER; #elif GTK_4_8 picture.@set("content-fit", 2); @@ -516,4 +516,4 @@ public class Dino.Ui.AvatarPicture : Gtk.Widget { base.snapshot(snapshot); } } -} \ No newline at end of file +} diff --git a/main/src/ui/widgets/fixed_ratio_picture.vala b/main/src/ui/widgets/fixed_ratio_picture.vala index 79c60141..3e83ec0c 100644 --- a/main/src/ui/widgets/fixed_ratio_picture.vala +++ b/main/src/ui/widgets/fixed_ratio_picture.vala @@ -8,7 +8,7 @@ class Dino.Ui.FixedRatioPicture : Gtk.Widget { public int max_height { get; set; default = int.MAX; } public File file { get { return inner.file; } set { inner.file = value; } } public Gdk.Paintable paintable { get { return inner.paintable; } set { inner.paintable = value; } } -#if GTK_4_8 && VALA_0_58 +#if GTK_4_8 && (VALA_0_56_GREATER_5 || VALA_0_58) public Gtk.ContentFit content_fit { get { return inner.content_fit; } set { inner.content_fit = value; } } #endif private Gtk.Picture inner = new Gtk.Picture(); @@ -85,4 +85,4 @@ class Dino.Ui.FixedRatioPicture : Gtk.Widget { inner.unparent(); base.dispose(); } -} \ No newline at end of file +} diff --git a/xmpp-vala/CMakeLists.txt b/xmpp-vala/CMakeLists.txt index 39c090fe..cfbc0aaf 100644 --- a/xmpp-vala/CMakeLists.txt +++ b/xmpp-vala/CMakeLists.txt @@ -9,6 +9,11 @@ find_packages(ENGINE_PACKAGES REQUIRED set(ENGINE_EXTRA_OPTIONS ${MAIN_EXTRA_OPTIONS} --vapidir=${CMAKE_CURRENT_SOURCE_DIR}/vapi) +set(ENGINE_DEFINITIONS) +if(VALA_VERSION VERSION_EQUAL "0.56.11") + set(ENGINE_DEFINITIONS ${ENGINE_DEFINITIONS} VALA_0_56_11) +endif() + vala_precompile(ENGINE_VALA_C SOURCES "src/core/direct_tls_xmpp_stream.vala" @@ -152,6 +157,8 @@ CUSTOM_VAPIS "${CMAKE_CURRENT_SOURCE_DIR}/src/glib_fixes.vapi" OPTIONS ${ENGINE_EXTRA_OPTIONS} +DEFINITIONS + ${ENGINE_DEFINITIONS} ) add_custom_target(xmpp-vala-vapi diff --git a/xmpp-vala/src/core/module_flag.vala b/xmpp-vala/src/core/module_flag.vala index 95547852..76ae4dc1 100644 --- a/xmpp-vala/src/core/module_flag.vala +++ b/xmpp-vala/src/core/module_flag.vala @@ -10,7 +10,12 @@ namespace Xmpp { } public T? cast(XmppStreamFlag flag) { +#if VALA_0_56_11 + // We can't typecheck due to compiler bug + return (T) module; +#else return flag.get_type().is_a(typeof(T)) ? (T?) flag : null; +#endif } public bool matches(XmppStreamFlag module) { @@ -34,7 +39,12 @@ namespace Xmpp { } public T? cast(XmppStreamModule module) { +#if VALA_0_56_11 + // We can't typecheck due to compiler bug + return (T) module; +#else return module.get_type().is_a(typeof(T)) ? (T?) module : null; +#endif } public bool matches(XmppStreamModule module) {