diff mbox series

[bug#48554,wip-gnome,v1] gnu: Add gtk.

Message ID 20210521040824.10938-1-rg@raghavgururajan.name
State Accepted
Headers show
Series [bug#48554,wip-gnome,v1] gnu: Add gtk. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Raghav Gururajan May 21, 2021, 4:08 a.m. UTC
* gnu/packages/gtk.scm (gtk): New variable.
* gnu/packages/patches/gtk4-honor-GUIX_GTK4_PATH.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                  |   1 +
 gnu/packages/gtk.scm                          | 133 ++++++++++++++++++
 .../patches/gtk4-honor-GUIX_GTK4_PATH.patch   |  51 +++++++
 3 files changed, 185 insertions(+)
 create mode 100644 gnu/packages/patches/gtk4-honor-GUIX_GTK4_PATH.patch
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 49bdd12d58..353a931cef 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1179,6 +1179,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/gtk2-theme-paths.patch			\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
+  %D%/packages/patches/gtk4-honor-GUIX_GTK4_PATH.patch    \
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
   %D%/packages/patches/gtksourceview-2-add-default-directory.patch \
   %D%/packages/patches/gvfs-add-support-for-libplist-2.2.patch	\
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index f52294b6e2..526c2ac50d 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -90,11 +90,13 @@ 
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages profiling)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages vulkan)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -832,6 +834,137 @@  is part of the GNOME accessibility project.")
     (license license:lgpl2.1+)
     (home-page "https://wiki.gnome.org/Accessibility/")))
 
+(define-public gtk
+  (package
+    (name "gtk")
+    (version "4.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1rh9fd5axf79pmd93hb2fmmflic5swcvqvq6vqghlgz4bmvnjc82"))
+       (patches
+        (search-patches "gtk4-honor-GUIX_GTK4_PATH.patch"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:meson ,meson-0.55
+       #:tests? #f                      ; FIXME
+       #:configure-flags
+       (list
+        "-Dbroadway-backend=true"       ; for broadway display-backend
+        "-Dcloudproviders=enabled"      ; for cloud-providers support
+        ;;"-Dsysprof=enabled"           ; for tracing support
+        "-Dtracker=enabled"           ; for filechooser search support
+        "-Dcolord=enabled"            ; for color printing support
+        "-Dgtk_doc=true"
+        "-Dman-pages=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4.3/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share/doc"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc")))
+             #t)))))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection) ; for building introspection data
+       ("gtk-doc" ,gtk-doc)             ; for building documentation
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)
+       ;;; These python modules are required for building documentation.
+       ("python-jinja2" ,python-jinja2)
+       ("python-markdown" ,python-markdown)
+       ("python-markupsafe" ,python-markupsafe)
+       ("python-pygments" ,python-pygments)
+       ("python-toml" ,python-toml)
+       ("python-typogrify" ,python-typogrify)
+       ("sassc" ,sassc)                 ; for building themes
+       ("vapigen" ,vala)
+       ("xsltproc" ,libxslt)            ; for building man-pages
+       ("xorg-server" ,xorg-server-for-tests)))
+    (inputs
+     `(("cloudproviders" ,libcloudproviders) ; for clould-providers support
+       ("colord" ,colord)               ; for color printing support
+       ("cups" ,cups)                   ; for CUPS print-backend
+       ;;("ffmpeg" ,ffmpeg)               ; for ffmpeg media-backend
+       ("fribidi" ,fribidi)
+       ;;("gstreamer" ,gstreamer)         ; for gstreamer media-backend
+       ("harfbuzz" ,harfbuzz)
+       ("iso-codes" ,iso-codes)
+       ("json-glib" ,json-glib)
+       ("librsvg" ,librsvg)
+       ("python" ,python)
+       ("rest" ,rest)
+       ;;("sysprof" ,sysprof)           ; for tracing support
+       ("tracker" ,tracker)))         ; for filechooser search support
+    (propagated-inputs
+     ;;; Following dependencies are referenced in .pc files.
+     `(("cairo" ,cairo)
+       ("epoxy" ,libepoxy)
+       ("fontconfig" ,fontconfig)
+       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("glib" ,glib)
+       ("graphene" ,graphene)
+       ("pango" ,pango)
+       ("vulkan" ,vulkan-loader)     ; for vulkan graphics API support
+       ("vulkan-headers" ,vulkan-headers)
+       ("wayland" ,wayland)             ; for wayland display-backend
+       ("wayland-protocols" ,wayland-protocols)
+       ("x11" ,libx11)                  ; for x11 display-backend
+       ("xcomposite" ,libxcomposite)
+       ("xcursor" ,libxcursor)
+       ("xdamage" ,libxdamage)
+       ("xext" ,libxext)
+       ("xfixes" ,libxfixes)
+       ("xi" ,libxi)
+       ("xinerama" ,libxinerama)        ; for xinerama support
+       ("xkbcommon" ,libxkbcommon)
+       ("xrandr" ,libxrandr)
+       ("xrender" ,libxrender)))
+    (native-search-paths
+     (list
+      (search-path-specification
+       (variable "GUIX_GTK4_PATH")
+       (files '("lib/gtk-4.0")))))
+    (search-paths native-search-paths)
+    (home-page "https://www.gtk.org/")
+    (synopsis "Cross-platform widget toolkit")
+    (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.")
+    (license license:lgpl2.1+)))
+
 (define-public gtk+-2
   (package
     (name "gtk+")
diff --git a/gnu/packages/patches/gtk4-honor-GUIX_GTK4_PATH.patch b/gnu/packages/patches/gtk4-honor-GUIX_GTK4_PATH.patch
new file mode 100644
index 0000000000..4a60023bf7
--- /dev/null
+++ b/gnu/packages/patches/gtk4-honor-GUIX_GTK4_PATH.patch
@@ -0,0 +1,51 @@ 
+From 889294a93fc6464c2c2919bc47f6fd85ec823363 Mon Sep 17 00:00:00 2001
+From: Raghav Gururajan <rg@raghavgururajan.name>
+Date: Tue, 18 May 2021 19:57:00 -0400
+Subject: [PATCH] [PATCH]: Honor GUIX_GTK4_PATH.
+
+This patch makes GTK look for additional modules in a list of directories
+specified by the environment variable "GUIX_GTK4_PATH". This can be used
+instead of "GTK_PATH" to make GTK find modules that are incompatible with
+other major versions of GTK.
+---
+ gtk/gtkmodules.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/gtk/gtkmodules.c b/gtk/gtkmodules.c
+index aace5dcbc9..193b6a02e9 100644
+--- a/gtk/gtkmodules.c
++++ b/gtk/gtkmodules.c
+@@ -105,6 +105,7 @@ static char **
+ get_module_path (void)
+ {
+   const char *module_path_env;
++  const gchar *module_guix_gtk4_path_env;
+   const char *exe_prefix;
+   char *module_path;
+   char *default_dir;
+@@ -114,6 +115,7 @@ get_module_path (void)
+     return result;
+ 
+   module_path_env = g_getenv ("GTK_PATH");
++  module_guix_gtk4_path_env = g_getenv ("GUIX_GTK4_PATH");
+   exe_prefix = g_getenv ("GTK_EXE_PREFIX");
+ 
+   if (exe_prefix)
+@@ -121,7 +123,13 @@ get_module_path (void)
+   else
+     default_dir = g_build_filename (_gtk_get_libdir (), "gtk-4.0", NULL);
+ 
+-  if (module_path_env)
++  if (module_guix_gtk4_path_env && module_path_env)
++    module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
++				module_guix_gtk4_path_env, module_path_env, default_dir, NULL);
++  else if (module_guix_gtk4_path_env)
++    module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
++				module_guix_gtk4_path_env, default_dir, NULL);
++  else if (module_path_env)
+     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
+ 				module_path_env, default_dir, NULL);
+   else
+-- 
+2.31.1
+