summary refs log tree commit diff
path: root/gnu/packages/gtk.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/gtk.scm')
-rw-r--r--gnu/packages/gtk.scm172
1 files changed, 172 insertions, 0 deletions
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index ada006b671..d5d9551fbe 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -91,11 +91,15 @@
   #: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 gstreamer)
   #: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 video)
+  #:use-module (gnu packages vulkan)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -833,6 +837,174 @@ 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-respect-GUIX_GTK4_PATH.patch"))))
+    (build-system meson-build-system)
+    (outputs '("out" "bin" "doc"))
+    (arguments
+     `(#:meson ,meson-0.55     ;project requires meson v0.55 or higher
+       #:configure-flags
+       (list
+        "-Dbroadway-backend=true"      ;for broadway display-backend
+        "-Dcloudproviders=enabled"     ;for cloud-providers support
+        "-Dtracker=enabled"            ;for filechooser search support
+        "-Dcolord=enabled"             ;for color printing support
+        ,@(if (%current-target-system)
+              ;; If true, gtkdoc-scangobj will try to execute a
+              ;; cross-compiled binary.
+              '("-Dgtk_doc=false")
+              '("-Dgtk_doc=true"))
+        "-Dman-pages=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
+             ;; Correct DTD resources of docbook.
+             (substitute* (find-files "docs" "\\.xml$")
+               (("http://www.oasis-open.org/docbook/xml/4.3/")
+                (string-append
+                 (assoc-ref (or native-inputs inputs) "docbook-xml-4.3")
+                 "/xml/dtd/docbook/")))
+             ;; Disable building of icon cache.
+             (substitute* "meson.build"
+               (("gtk_update_icon_cache: true")
+                "gtk_update_icon_cache: false"))
+             ;; Disable failing tests.
+             ;; https://paste.sr.ht/blob/0af160f1172a58dff88a5cf6354ecba613cccdef
+             (substitute* (find-files "testsuite" "meson.build")
+               (("[ \t]*'empty-text.node',") "")
+               (("[ \t]*'testswitch.node',") "")
+               (("[ \t]*'widgetfactory.node',") ""))))
+         (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")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Run tests using the x11 setup,
+               ;; instead of the default wayland.
+               (invoke "meson" "test" "--setup=x11"))))
+         (add-after 'install 'move-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (assoc-ref outputs "bin"))
+                    (doc (assoc-ref outputs "doc")))
+               (for-each mkdir-p
+                         (list
+                          (string-append bin "/bin")
+                          (string-append bin "/share/applications")
+                          (string-append bin "/share/icons")
+                          (string-append bin "/share/man")
+                          (string-append bin "/share/metainfo")
+                          (string-append doc "/share/doc")))
+               ;; Move programs and related files to output 'bin'.
+               (for-each (lambda (dir)
+                           (rename-file
+                            (string-append out dir)
+                            (string-append bin dir)))
+                         (list
+                          "/bin"
+                          "/share/applications"
+                          "/share/icons"
+                          "/share/man"
+                          "/share/metainfo"))
+               ;; Move HTML documentation to output 'doc'.
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     `(("docbook-xml-4.3" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gettext-minimal" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection) ;for building introspection data
+       ("gtk-doc" ,gtk-doc)             ;for building documentation
+       ("intltool" ,intltool)
+       ("libxslt" ,libxslt)             ;for building man-pages
+       ("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
+       ("vala" ,vala)
+       ("xorg-server-for-tests" ,xorg-server-for-tests)))
+    (inputs
+     `(("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
+       ("gst-plugins-bad" ,gst-plugins-bad) ;provides gstreamer-player
+       ("gst-plugins-base" ,gst-plugins-base) ;provides gstreamer-gl
+       ("harfbuzz" ,harfbuzz)
+       ("iso-codes" ,iso-codes)
+       ("json-glib" ,json-glib)
+       ("libcloudproviders" ,libcloudproviders) ;for cloud-providers support
+       ("librsvg" ,librsvg)
+       ("python" ,python)
+       ("rest" ,rest)
+       ("tracker" ,tracker)))          ;for filechooser search support
+    (propagated-inputs
+     ;; Following dependencies are referenced in .pc files.
+     `(("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
+       ("glib" ,glib)
+       ("graphene" ,graphene)
+       ("libepoxy" ,libepoxy)
+       ("libx11" ,libx11)               ;for x11 display-backend
+       ("libxcomposite" ,libxcomposite)
+       ("libxcursor" ,libxcursor)
+       ("libxdamage" ,libxdamage)
+       ("libxext" ,libxext)
+       ("libxfixes" ,libxfixes)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)     ;for xinerama support
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("pango" ,pango)
+       ("vulkan-headers" ,vulkan-headers)
+       ("vulkan-loader" ,vulkan-loader) ;for vulkan graphics API support
+       ("wayland" ,wayland)             ;for wayland display-backend
+       ("wayland-protocols" ,wayland-protocols)))
+    (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+")