gnu: docker: Replace tini by tini-static.
[jackhill/guix/guix.git] / gnu / packages / gtk.scm
index 95812d2..138fa7c 100644 (file)
@@ -1,21 +1,21 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2017, 2018, 2019 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2018, 2019, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
-;;; Coypright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016 Patrick Hetu <patrick.hetu@auf.org>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
@@ -25,6 +25,8 @@
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,6 +49,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
@@ -88,6 +91,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match))
@@ -127,6 +131,8 @@ tools have full access to view and control running applications.")
             (method url-fetch)
             (uri (string-append "https://cairographics.org/releases/cairo-"
                                 version ".tar.xz"))
+            (patches (search-patches "cairo-CVE-2018-19876.patch"
+                                     "cairo-CVE-2020-35492.patch"))
             (sha256
              (base32
               "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))))
@@ -180,8 +186,7 @@ affine transformation (scale, rotation, shear, etc.).")
     (properties `((hidden? . #t)))))
 
 (define-public cairo-xcb
-  (package
-    (inherit cairo)
+  (package/inherit cairo
     (name "cairo-xcb")
     (inputs
      `(("mesa" ,mesa)
@@ -235,7 +240,7 @@ affine transformation (scale, rotation, shear, etc.).")
 (define-public libdatrie
   (package
     (name "libdatrie")
-    (version "0.2.12")
+    (version "0.2.13")
     (source
      (origin
        (method url-fetch)
@@ -243,7 +248,7 @@ affine transformation (scale, rotation, shear, etc.).")
         (string-append "https://linux.thai.net/pub/ThaiLinux/software/"
                        "libthai/libdatrie-" version ".tar.xz"))
        (sha256
-        (base32 "0jdi01pcxv0b24zbjy7zahawsqqqw4mv94f2yy01zh4n796wqba5"))))
+        (base32 "1gplcx9ddglpxmqm10qn38kjmvdh4hnhj14rzgqag095psr1n8qj"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -561,6 +566,7 @@ highlighting and other features typical of a source code editor.")
             (uri (string-append "mirror://gnome/sources/" name "/"
                                 (version-major+minor version)  "/"
                                 name "-" version ".tar.xz"))
+            (patches (search-patches "gdk-pixbuf-CVE-2020-29385.patch"))
             (sha256
              (base32
               "1rnlx9yfw970maxi2x6niaxmih5la11q1ilr7gzshz2kk585k0hm"))))
@@ -616,7 +622,7 @@ in the GNOME project.")
 ;; on gdk-pixbuf, so this new varibale.  Also, librsvg adds 90MiB to the
 ;; closure size.
 (define-public gdk-pixbuf+svg
-  (package (inherit gdk-pixbuf)
+  (package/inherit gdk-pixbuf
     (name "gdk-pixbuf+svg")
     (inputs
      `(("librsvg" ,librsvg)
@@ -702,7 +708,7 @@ in the GNOME project.")
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc)
+      ("gtk-doc" ,gtk-doc/stable)
       ("glib" ,glib "bin")
       ("pkg-config" ,pkg-config)))
    (synopsis "Assistive Technology Service Provider Interface, core components")
@@ -933,14 +939,14 @@ application suites.")
 (define-public guile-cairo
   (package
     (name "guile-cairo")
-    (version "1.11.1")
+    (version "1.11.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/guile-cairo/guile-cairo-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1gc642r9ndsjhhmh9bl5cbd3dwvy4dpxwhr0zpsw43y9nmz37xpl"))
+                "0yx0844p61ljd4d3d63qrawiygiw6ks02fwv2cqx7nav5kfd8ck2"))
               (modules '((guix build utils)))
               (snippet
                (begin
@@ -951,19 +957,40 @@ application suites.")
                        (string-append name "dir = " prefix
                                       "/guile/site/@GUILE_EFFECTIVE_VERSION@"
                                       suffix)))
-
-                    ;; Guile 2.x <libguile.h> used to pull in <string.h> and
-                    ;; other headers but this is no longer the case in 3.0.
-                    (substitute* (find-files "." "\\.[ch]$")
-                      (("^ *# *include.*libguile\\.h.*$")
-                       "#include <libguile.h>\n#include <string.h>\n"))
                     #t)))))
     (build-system gnu-build-system)
     (arguments
      ;; Uses of 'scm_t_uint8' & co. are deprecated; don't stop the build
      ;; because of them.
-     '(#:configure-flags '("--disable-Werror")
-       #:make-flags '("GUILE_AUTO_COMPILE=0")))     ; to prevent guild warnings
+     `(#:configure-flags '("--disable-Werror")
+       #:make-flags '("GUILE_AUTO_COMPILE=0") ; to prevent guild warnings
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 rdelim)
+                  (ice-9 popen))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-go-files
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (effective (read-line
+                                (open-pipe* OPEN_READ
+                                            "guile" "-c"
+                                            "(display (effective-version))")))
+                    (module-dir (string-append out "/share/guile/site/"
+                                               effective))
+                    (object-dir (string-append out "/lib/guile/" effective
+                                               "/site-ccache"))
+                    (prefix     (string-length module-dir)))
+               ;; compile to the destination
+               (for-each (lambda (file)
+                           (let* ((base (string-drop (string-drop-right file 4)
+                                                     prefix))
+                                  (go   (string-append object-dir base ".go")))
+                             (invoke "guild" "compile" "-L" module-dir
+                                     file "-o" go)))
+                         (find-files module-dir "\\.scm$"))
+               #t))))))
     (inputs
      `(("guile-lib" ,guile-lib)
        ("expat" ,expat)
@@ -1024,10 +1051,36 @@ exceptions, macros, and a dynamic programming environment.")
                 (file-name (string-append name "-" version ".tar.gz"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:phases (modify-phases %standard-phases
-                    (replace 'bootstrap
-                      (lambda _
-                        (invoke "autoreconf" "-vfi"))))))
+       `(#:modules ((guix build gnu-build-system)
+                    (guix build utils)
+                    (ice-9 rdelim)
+                    (ice-9 popen))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               (invoke "autoreconf" "-vfi")))
+           (add-after 'install 'install-go-files
+             (lambda* (#:key outputs inputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (effective (read-line
+                                  (open-pipe* OPEN_READ
+                                              "guile" "-c"
+                                              "(display (effective-version))")))
+                      (module-dir (string-append out "/share/guile/site/"
+                                                 effective))
+                      (object-dir (string-append out "/lib/guile/" effective
+                                                 "/site-ccache"))
+                      (prefix     (string-length module-dir)))
+                 ;; compile to the destination
+                 (for-each (lambda (file)
+                             (let* ((base (string-drop (string-drop-right file 4)
+                                                       prefix))
+                                    (go   (string-append object-dir base ".go")))
+                               (invoke "guild" "compile" "-L" module-dir
+                                       file "-o" go)))
+                           (find-files module-dir "\\.scm$"))
+                 #t))))))
       (native-inputs `(("pkg-config" ,pkg-config)
                        ("autoconf" ,autoconf)
                        ("automake" ,automake)
@@ -1520,7 +1573,7 @@ write GNOME applications.")
 (define-public perl-cairo
   (package
     (name "perl-cairo")
-    (version "1.108")
+    (version "1.109")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1528,7 +1581,7 @@ write GNOME applications.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1nh5iya63q6j2w0cdi24x2ygpi8k8wwccnbh8cisnx8nqmywnhk0"))))
+                "0zq78dv22arg35ma6kah9cwfd1zx8gg7amsibzd128qw81p766c2"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-extutils-depends" ,perl-extutils-depends)
@@ -1762,6 +1815,17 @@ typically used to document the public API of GTK+ and GNOME libraries, but it
 can also be used to document application code.")
     (license license:gpl2+)))
 
+;; This is a variant of the 'gtk-doc' package that is not updated often.  It
+;; is intended to be used as a native-input at build-time only.  This allows
+;; the main 'gtk-doc', 'dblatex' and 'imagemagick' packages to be freely
+;; updated on the 'master' branch without triggering an excessive number of
+;; rebuilds.
+(define-public gtk-doc/stable
+  (hidden-package
+   (package/inherit gtk-doc
+     (inputs (alist-replace "dblatex" `(,dblatex/stable)
+                            (package-inputs gtk-doc))))))
+
 (define-public gtk-engines
   (package
     (name "gtk-engines")
@@ -2015,6 +2079,53 @@ shell scripts.  Example of how to use @code{yad} can be consulted at
 @url{https://sourceforge.net/p/yad-dialog/wiki/browse_pages/}.")
     (license license:gpl3+)))
 
+(define-public dragon-drop
+  (package
+   (name "dragon-drop")
+   (version "1.1.1")
+   (source (origin
+             (method git-fetch)
+             (uri
+              (git-reference
+               (url "https://github.com/mwh/dragon")
+               (commit (string-append "v" version))))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra"))))
+   (build-system gnu-build-system)
+   (inputs `(("gtk+" ,gtk+)))
+   (native-inputs `(("pkg-config" ,pkg-config)))
+   (arguments
+    `(#:tests? #f                       ; no check
+      #:make-flags
+      (list (string-append "CC=" ,(cc-for-target))
+            ;; makefile uses PREFIX for the binary location
+            (string-append "PREFIX=" (assoc-ref %outputs "out")
+                           "/bin"))
+      #:phases
+      (modify-phases %standard-phases
+        (delete 'configure))))                    ; no configure script
+   (synopsis "Drag and drop source/target for X")
+   (description
+    "Dragon is a lightweight drag-and-drop source for X where you can run:
+
+@example
+dragon file.tar.gz
+@end example
+
+to get a window with just that file in it, ready to be dragged where you need it.
+What if you need to drag into something? Using:
+
+@example
+dragon --target
+@end example
+
+you get a window you can drag files and text into.  Dropped items are
+printed to standard output.")
+   (home-page "https://github.com/mwh/dragon")
+   (license license:gpl3+)))
+
 (define-public libdbusmenu
   (package
     (name "libdbusmenu")
@@ -2078,16 +2189,18 @@ displayed on the other side of the bus.")
 (define-public gtk-layer-shell
   (package
     (name "gtk-layer-shell")
-    (version "0.1.0")
+    (version "0.6.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/wmww/gtk-layer-shell/releases/download/v"
-             version "/gtk-layer-shell-" version ".tar.xz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wmww/gtk-layer-shell")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0ncklk3z0fzlz6p76jdcrr1ykyp1f4ykjjch4x2hfp9bwsnl4a3m"))))
+        (base32 "1kcp4p3s7sdh9lwniybjdarfy8z69j2j23hfrw98amhwhq39gdcc"))))
     (build-system meson-build-system)
+    (arguments `(#:configure-flags (list "-Dtests=true")))
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("gobject-introspection" ,gobject-introspection)))
     (inputs `(("wayland" ,wayland)
@@ -2119,7 +2232,7 @@ popovers.")
      `(("gettext" ,gettext-minimal)
        ("glib-bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
@@ -2151,7 +2264,7 @@ library for drawing.")
 (define-public gtksheet
   (package
     (name "gtksheet")
-    (version "4.3.4")
+    (version "4.3.5")
     (source
      (origin
        (method git-fetch)
@@ -2161,7 +2274,7 @@ library for drawing.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "10qzmdkjkkvkcadxn019cbyhwaahxcfv1apv54lc711bqvh63v8r"))))
+         "13jwr1vly4ga3f09dajwky1cdrz5bmggwga3vnnd6j6zzia7dpyr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-glade"
@@ -2175,6 +2288,11 @@ library for drawing.")
            (lambda _
              (delete-file "configure")
              #t))
+         (add-after 'unpack 'rename-type
+           (lambda _
+             (substitute* "glade/glade-gtksheet-editor.c"
+               (("GladeEditableIface") "GladeEditableInterface"))
+             #t))
          ;; Fix glade install directories.
          (add-before 'bootstrap 'configure-glade-directories
            (lambda* (#:key outputs #:allow-other-keys)
@@ -2185,15 +2303,6 @@ library for drawing.")
                 (string-append (assoc-ref outputs "out") "/lib/glade/modules"))
                (("`\\$PKG_CONFIG --variable=pixmapdir gladeui-2.0`")
                 (string-append (assoc-ref outputs "out") "/share/pixmaps")))
-             #t))
-         ;; Fix incorrect typelib version. This is a known upstream bug. See
-         ;; https://github.com/fpaquet/gtksheet/issues/23
-         (add-after 'install 'fix-typelib-version
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-directory-excursion (string-append (assoc-ref outputs "out")
-                                                      "/lib/girepository-1.0")
-               (rename-file "GtkSheet-4.0.typelib"
-                            (string-append "GtkSheet-" ,version ".typelib")))
              #t)))))
     (inputs
      `(("glade" ,glade3)
@@ -2223,3 +2332,74 @@ foreground and background colors, text justification and more.")
        (variable "GLADE_MODULE_SEARCH_PATH")
        (files '("lib/glade/modules")))))
     (license license:lgpl2.0+)))
+
+(define-public gtkdatabox
+  (package
+    (name "gtkdatabox")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/gtkdatabox/gtkdatabox-1/"
+                           "gtkdatabox-" version ".tar.gz"))
+       (sha256
+        (base32 "1qykm551bx8j8pfgxs60l2vhpi8lv4r8va69zvn2594lchh71vlb"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtk+" ,gtk+)))
+    (synopsis "Display widget for dynamic data")
+    (description "GtkDatabox is a widget for live display of large amounts of
+fluctuating numerical data.  It enables data presentation (for example, on
+linear or logarithmic scales, as dots or lines, with markers/labels) as well as
+user interaction (e.g.  measuring distances).")
+    (home-page "https://sourceforge.net/projects/gtkdatabox/")
+    (license license:lgpl2.1+)))
+
+(define-public volctl
+  (package
+    (name "volctl")
+    (version "0.8.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url "https://github.com/buzz/volctl")
+                                  (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1cx27j83pz2qffnzb85fbl1x6pp3irv1kbw7g1hri7kaw6ky4xiz"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((pulse (assoc-ref inputs "pulseaudio"))
+                   (xfixes (assoc-ref inputs "libxfixes")))
+               (substitute* "volctl/lib/xwrappers.py"
+                 (("libXfixes.so")
+                  (string-append xfixes "/lib/libXfixes.so")))
+               (substitute* "volctl/lib/pulseaudio.py"
+                 (("libpulse.so.0")
+                  (string-append pulse "/lib/libpulse.so.0")))
+               #t))))))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("libxfixes" ,libxfixes)
+       ("pulseaudio" ,pulseaudio)))
+    (propagated-inputs
+     `(("python-click" ,python-click)
+       ("python-pycairo" ,python-pycairo)
+       ("python-pygobject" ,python-pygobject)
+       ("python-pyyaml" ,python-pyyaml)))
+    (home-page "https://buzz.github.io/volctl/")
+    (synopsis "Per-application volume control and on-screen display (OSD) for graphical desktops")
+    (description "Volctl is a PulseAudio-enabled tray icon volume control and
+OSD applet for graphical desktops.  It's not meant to be an replacement for a
+full-featured mixer application.  If you're looking for that check out the
+excellent pavucontrol.")
+
+    ;; XXX: 'setup.py' says "GPLv2" but nothing says "version 2 only".  Is
+    ;; GPLv2+ intended?
+    (license license:gpl2)))