From e5f780c7ada5a8dfa448ba743371fe07289bae0c Mon Sep 17 00:00:00 2001 From: madomado Date: Thu, 25 May 2023 19:29:57 +0800 Subject: [PATCH] add: gtk4 (#463) --- ...on-Simplify-pkgconfig-file-generator.patch | 119 +++++++++ anda/lib/gtk4/anda.hcl | 5 + anda/lib/gtk4/settings.ini | 2 + anda/lib/gtk4/terra-gtk4.spec | 245 ++++++++++++++++++ anda/lib/gtk4/update.rhai | 3 + 5 files changed, 374 insertions(+) create mode 100644 anda/lib/gtk4/0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch create mode 100644 anda/lib/gtk4/anda.hcl create mode 100644 anda/lib/gtk4/settings.ini create mode 100644 anda/lib/gtk4/terra-gtk4.spec create mode 100644 anda/lib/gtk4/update.rhai diff --git a/anda/lib/gtk4/0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch b/anda/lib/gtk4/0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch new file mode 100644 index 0000000000..b5b0a7e23d --- /dev/null +++ b/anda/lib/gtk4/0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch @@ -0,0 +1,119 @@ +From 5f5fd77f096174c45f8335afe6efd6745796d9a5 Mon Sep 17 00:00:00 2001 +From: Kalev Lember +Date: Mon, 25 Jul 2022 16:21:50 +0200 +Subject: [PATCH] Revert "Meson: Simplify pkgconfig file generator" + +Temporarily revert this until we figure out how to best restore +private requires that are needed for rpm automatic dep extraction. + +https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4756 + +This reverts commit 802bf4199911c811938b0454a876089bafa97dba. +--- + meson.build | 47 +++++++++++++++++++++++++++++++++-------------- + 1 file changed, 33 insertions(+), 14 deletions(-) + +diff --git a/meson.build b/meson.build +index 1b8f2d0248..4fc808dbd4 100644 +--- a/meson.build ++++ b/meson.build +@@ -471,6 +471,9 @@ if not os_win32 + endif + endif + ++ ++pc_gdk_extra_libs = [] ++ + cairo_backends = [] + foreach backend: [ ['cairo-xlib', cairo_req, x11_enabled], + ['cairo-win32', cairo_req, win32_enabled], +@@ -601,14 +604,26 @@ if x11_enabled + cdata.set('HAVE_RANDR15', xrandr15_dep.found()) + endif + ++if broadway_enabled ++ pc_gdk_extra_libs += ['-lz'] ++endif ++ ++if macos_enabled ++ pc_gdk_extra_libs += ['-framework Cocoa', '-framework Carbon'] ++endif ++ + extra_demo_ldflags = [] + if win32_enabled ++ pc_gdk_extra_libs += ['-lgdi32', '-limm32', '-lshell32', '-lole32'] + if cc.get_id() == 'msvc' + # Since the demo programs are now built as pure GUI programs, we + # need to pass in /entry:mainCRTStartup so that they will properly + # link on Visual Studio builds + extra_demo_ldflags = ['/entry:mainCRTStartup'] ++ else ++ pc_gdk_extra_libs += ['-Wl,-luuid'] + endif ++ pc_gdk_extra_libs += ['-lwinmm', '-ldwmapi', '-lsetupapi', '-lcfgmgr32', '-lhid'] + + # Check whether libepoxy is built with EGL support on Windows + endif +@@ -826,7 +841,16 @@ gsk_private_packages = [] # all already in gdk_private_packages + pangoft2_pkgs = (wayland_enabled or x11_enabled) ? ['pangoft2'] : [] + gtk_private_packages = pangoft2_pkgs + +-pkgs = [] ++gdk_extra_libs = pc_gdk_extra_libs ++gsk_extra_libs = [] ++gtk_extra_libs = [] ++ ++gdk_extra_cflags = [] ++gsk_extra_cflags = [] ++gtk_extra_cflags = [] ++ ++pkgs = [ 'gtk4' ] ++ + pkg_targets = [] + display_backends = [] + foreach backend: [ 'broadway', 'macos', 'wayland', 'win32', 'x11', ] +@@ -843,23 +867,18 @@ common_pc_variables = [ + 'gtk_host=@0@-@1@'.format(host_machine.cpu_family(), host_machine.system()), # FIXME + ] + +-pkg_config.generate(libgtk, +- filebase: 'gtk4', +- unescaped_variables: common_pc_variables, +- name: 'GTK', +- description: 'GTK Graphical UI Library', +- requires: gdk_packages + gsk_packages + gtk_packages, +- subdirs: ['gtk-@0@'.format(gtk_api_version)], +-) +-meson.override_dependency('gtk4', libgtk_dep) +- + foreach pkg: pkgs + pkg_config.generate( + filebase: pkg, + unescaped_variables: common_pc_variables, + name: 'GTK', + description: 'GTK Graphical UI Library', +- requires: 'gtk4', ++ requires: gdk_packages + gsk_packages + gtk_packages, ++ requires_private: gdk_private_packages + gsk_private_packages + gtk_private_packages, ++ libraries: ['-L${libdir}', '-lgtk-4'], ++ libraries_private: gdk_extra_libs + gsk_extra_libs + gtk_extra_libs, ++ subdirs: ['gtk-@0@'.format(gtk_api_version)], ++ extra_cflags: gdk_extra_cflags + gsk_extra_cflags + gtk_extra_cflags, + ) + meson.override_dependency(pkg, libgtk_dep) + endforeach +@@ -870,10 +889,10 @@ if os_unix + unescaped_variables: common_pc_variables, + name: 'GTK', + description: 'GTK Unix print support', +- requires: 'gtk4', ++ requires: ['gtk4'] + gtk_packages, ++ libraries: [], + subdirs: ['gtk-@0@/unix-print'.format(gtk_api_version)], + ) +- meson.override_dependency('gtk4-unix-print', libgtk_dep) + endif + + subdir('po') +-- +2.37.1 diff --git a/anda/lib/gtk4/anda.hcl b/anda/lib/gtk4/anda.hcl new file mode 100644 index 0000000000..50cd82899d --- /dev/null +++ b/anda/lib/gtk4/anda.hcl @@ -0,0 +1,5 @@ +project pkg { + rpm { + spec = "terra-gtk4.spec" + } +} diff --git a/anda/lib/gtk4/settings.ini b/anda/lib/gtk4/settings.ini new file mode 100644 index 0000000000..462e32ccd6 --- /dev/null +++ b/anda/lib/gtk4/settings.ini @@ -0,0 +1,2 @@ +[Settings] +gtk-hint-font-metrics=1 diff --git a/anda/lib/gtk4/terra-gtk4.spec b/anda/lib/gtk4/terra-gtk4.spec new file mode 100644 index 0000000000..505d52eda7 --- /dev/null +++ b/anda/lib/gtk4/terra-gtk4.spec @@ -0,0 +1,245 @@ +# mado: ref https://src.fedoraproject.org/rpms/gtk4/c/016dd18e8025372e85ffd732ff58f46d9b3bf642?branch=rawhide +%if 0%{?fedora} +%global with_broadway 1 +%endif + +%global glib2_version 2.72.0 +%global pango_version 1.50.0 +%global cairo_version 1.14.0 +%global gdk_pixbuf_version 2.30.0 +%global wayland_protocols_version 1.31 +%global wayland_version 1.21.0 +%global epoxy_version 1.4 + +%global bin_version 4.0.0 + +# Filter provides for private modules +%global __provides_exclude_from ^%{_libdir}/gtk-4.0 + +Name: terra-gtk4 +Version: 4.11.2 +Release: %autorelease +Summary: GTK graphical user interface library + +License: LGPL-2.0-or-later +URL: https://www.gtk.org +Source0: https://gitlab.gnome.org/GNOME/gtk/-/archive/%version/gtk-%version.tar.gz +Source1: settings.ini +# Temporarily revert this until we figure out how to best restore +# private requires that are needed for rpm automatic dep extraction. +# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4756 +Patch0: 0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch + +BuildRequires: cups-devel +BuildRequires: desktop-file-utils +BuildRequires: docbook-style-xsl +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: gettext +BuildRequires: gi-docgen +BuildRequires: meson +BuildRequires: python3-gobject +BuildRequires: pkgconfig(avahi-gobject) +BuildRequires: pkgconfig(cairo) >= %{cairo_version} +BuildRequires: pkgconfig(cairo-gobject) >= %{cairo_version} +BuildRequires: pkgconfig(colord) +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(gdk-pixbuf-2.0) >= %{gdk_pixbuf_version} +BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(graphene-gobject-1.0) +BuildRequires: pkgconfig(gstreamer-player-1.0) +BuildRequires: pkgconfig(json-glib-1.0) +BuildRequires: pkgconfig(libjpeg) +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libtiff-4) +BuildRequires: pkgconfig(pango) >= %{pango_version} +BuildRequires: pkgconfig(sysprof-4) +BuildRequires: pkgconfig(sysprof-capture-4) +BuildRequires: pkgconfig(tracker-sparql-3.0) +BuildRequires: pkgconfig(wayland-client) >= %{wayland_version} +BuildRequires: pkgconfig(wayland-cursor) >= %{wayland_version} +BuildRequires: pkgconfig(wayland-egl) >= %{wayland_version} +BuildRequires: pkgconfig(wayland-protocols) >= %{wayland_protocols_version} +BuildRequires: pkgconfig(xcomposite) +BuildRequires: pkgconfig(xcursor) +BuildRequires: pkgconfig(xdamage) +BuildRequires: pkgconfig(xfixes) +BuildRequires: pkgconfig(xi) +BuildRequires: pkgconfig(xinerama) +BuildRequires: pkgconfig(xkbcommon) +BuildRequires: pkgconfig(xrandr) +BuildRequires: pkgconfig(xrender) +BuildRequires: /usr/bin/rst2man +BuildRequires: sassc + +# standard icons +Requires: adwaita-icon-theme +# required for icon theme apis to work +Requires: hicolor-icon-theme +# split out in a subpackage +Requires: gtk-update-icon-cache + +Requires: cairo%{?_isa} >= %{cairo_version} +Requires: cairo-gobject%{?_isa} >= %{cairo_version} +Requires: glib2%{?_isa} >= %{glib2_version} +Requires: libepoxy%{?_isa} >= %{epoxy_version} +Requires: libwayland-client%{?_isa} >= %{wayland_version} +Requires: libwayland-cursor%{?_isa} >= %{wayland_version} +Requires: pango%{?_isa} >= %{pango_version} + +# required to support all the different image formats +Requires: gdk-pixbuf2-modules%{?_isa} + +# make sure we have a reasonable gsettings backend +Recommends: dconf%{?_isa} + +Provides: gtk4%?_isa = %version-%release +Conflicts: gtk4 + +%description +GTK is a multi-platform toolkit for creating graphical user +interfaces. Offering a complete set of widgets, GTK is suitable for +projects ranging from small one-off tools to complete application +suites. + +This package contains latest version 4 of GTK as tracked in Terra. + +%package devel +Summary: Development files for GTK +Requires: terra-gtk4%{?_isa} = %{version}-%{release} + +%description devel +This package contains the libraries and header files that are needed +for writing applications with version 4 of the GTK widget toolkit. + +%package devel-docs +Summary: Developer documentation for GTK +BuildArch: noarch +Requires: terra-gtk4 = %{version}-%{release} + +%description devel-docs +This package contains developer documentation for version 4 of the GTK +widget toolkit. + +%package devel-tools +Summary: Developer tools for GTK +Requires: terra-gtk4%{?_isa} = %{version}-%{release} + +%description devel-tools +This package contains helpful applications for developers using GTK. + +%prep +%autosetup -p1 -n gtk-%{version} + +%build +export CFLAGS='-fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT %optflags' +%meson \ +%if 0%{?with_broadway} + -Dbroadway-backend=true \ +%endif + -Dsysprof=enabled \ + -Dtracker=enabled \ + -Dcolord=enabled \ + -Dgtk_doc=true \ + -Dman-pages=true + +%meson_build + +%install +%meson_install + +%find_lang gtk40 + +%if !0%{?with_broadway} +rm $RPM_BUILD_ROOT%{_mandir}/man1/gtk4-broadwayd.1* +%endif + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gtk-4.0 +mkdir -p $RPM_BUILD_ROOT%{_libdir}/gtk-4.0/modules + +install -p %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/gtk-4.0/ + +%check +desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop + +%files -f gtk40.lang +%license COPYING +%doc AUTHORS NEWS README.md +%{_bindir}/gtk4-launch +%{_bindir}/gtk4-update-icon-cache +%{_libdir}/libgtk-4.so.1* +%dir %{_libdir}/gtk-4.0 +%dir %{_libdir}/gtk-4.0/%{bin_version} +%{_libdir}/gtk-4.0/%{bin_version}/media/ +%{_libdir}/gtk-4.0/%{bin_version}/printbackends/ +%{_libdir}/gtk-4.0/modules +%{_libdir}/girepository-1.0 +%{_mandir}/man1/gtk4-launch.1* +%{_mandir}/man1/gtk4-update-icon-cache.1* +%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.ColorChooser.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.Debug.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.EmojiChooser.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.FileChooser.gschema.xml +%dir %{_datadir}/gtk-4.0 +%{_datadir}/gtk-4.0/emoji/ +%{_datadir}/gtk-4.0/settings.ini +%if 0%{?with_broadway} +%{_bindir}/gtk4-broadwayd +%{_mandir}/man1/gtk4-broadwayd.1* +%endif + +%files devel +%{_libdir}/libgtk-4.so +%{_includedir}/* +%{_libdir}/pkgconfig/* +%{_bindir}/gtk4-builder-tool +%{_bindir}/gtk4-encode-symbolic-svg +%{_bindir}/gtk4-query-settings +%{_datadir}/gettext/ +%{_datadir}/gir-1.0 +%{_datadir}/gtk-4.0/gtk4builder.rng +%{_datadir}/gtk-4.0/valgrind/ +%{_mandir}/man1/gtk4-builder-tool.1* +%{_mandir}/man1/gtk4-encode-symbolic-svg.1* +%{_mandir}/man1/gtk4-query-settings.1* + +%files devel-docs +%{_datadir}/doc/gdk4/ +%{_datadir}/doc/gdk4-wayland/ +%{_datadir}/doc/gdk4-x11/ +%{_datadir}/doc/gsk4/ +%{_datadir}/doc/gtk4/ + +%files devel-tools +%{_bindir}/gtk4-demo +%{_bindir}/gtk4-demo-application +%{_bindir}/gtk4-icon-browser +%{_bindir}/gtk4-node-editor +%{_bindir}/gtk4-print-editor +%{_bindir}/gtk4-widget-factory +%{_datadir}/applications/org.gtk.gtk4.NodeEditor.desktop +%{_datadir}/applications/org.gtk.Demo4.desktop +%{_datadir}/applications/org.gtk.IconBrowser4.desktop +%{_datadir}/applications/org.gtk.PrintEditor4.desktop +%{_datadir}/applications/org.gtk.WidgetFactory4.desktop +%{_datadir}/icons/hicolor/*/apps/org.gtk.gtk4.NodeEditor*.svg +%{_datadir}/icons/hicolor/*/apps/org.gtk.Demo4*.svg +%{_datadir}/icons/hicolor/*/apps/org.gtk.IconBrowser4*.svg +%{_datadir}/icons/hicolor/*/apps/org.gtk.PrintEditor4*.svg +%{_datadir}/icons/hicolor/*/apps/org.gtk.WidgetFactory4*.svg +%{_datadir}/glib-2.0/schemas/org.gtk.Demo4.gschema.xml +%{_metainfodir}/org.gtk.gtk4.NodeEditor.appdata.xml +%{_metainfodir}/org.gtk.Demo4.appdata.xml +%{_metainfodir}/org.gtk.IconBrowser4.appdata.xml +%{_metainfodir}/org.gtk.PrintEditor4.appdata.xml +%{_metainfodir}/org.gtk.WidgetFactory4.appdata.xml +%{_mandir}/man1/gtk4-demo.1* +%{_mandir}/man1/gtk4-demo-application.1* +%{_mandir}/man1/gtk4-icon-browser.1* +%{_mandir}/man1/gtk4-node-editor.1* +%{_mandir}/man1/gtk4-widget-factory.1* + +%changelog +%autochangelog diff --git a/anda/lib/gtk4/update.rhai b/anda/lib/gtk4/update.rhai new file mode 100644 index 0000000000..c115928c49 --- /dev/null +++ b/anda/lib/gtk4/update.rhai @@ -0,0 +1,3 @@ +let txt = get("https://gitlab.gnome.org/api/v4/projects/665/releases/"); +let ver = txt.json_arr()[0].tag_name; +rpm.version(ver);