Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / gtk.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2014, 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
5 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
6 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
7 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
8 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
9 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
10 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
11 ;;; Coypright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
12 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
13 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
14 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
15 ;;; Copyright © 2016 Patrick Hetu <patrick.hetu@auf.org>
16 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
17 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
18 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
19 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
20 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
21 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
22 ;;;
23 ;;; This file is part of GNU Guix.
24 ;;;
25 ;;; GNU Guix is free software; you can redistribute it and/or modify it
26 ;;; under the terms of the GNU General Public License as published by
27 ;;; the Free Software Foundation; either version 3 of the License, or (at
28 ;;; your option) any later version.
29 ;;;
30 ;;; GNU Guix is distributed in the hope that it will be useful, but
31 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
32 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 ;;; GNU General Public License for more details.
34 ;;;
35 ;;; You should have received a copy of the GNU General Public License
36 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
37
38 (define-module (gnu packages gtk)
39 #:use-module ((guix licenses) #:prefix license:)
40 #:use-module (guix utils)
41 #:use-module (guix packages)
42 #:use-module (guix download)
43 #:use-module (guix git-download)
44 #:use-module (guix build-system gnu)
45 #:use-module (guix build-system meson)
46 #:use-module (guix build-system perl)
47 #:use-module (guix build-system python)
48 #:use-module (guix build-system waf)
49 #:use-module (gnu packages)
50 #:use-module (gnu packages algebra)
51 #:use-module (gnu packages autotools)
52 #:use-module (gnu packages base)
53 #:use-module (gnu packages texinfo)
54 #:use-module (gnu packages check)
55 #:use-module (gnu packages compression)
56 #:use-module (gnu packages docbook)
57 #:use-module (gnu packages enchant)
58 #:use-module (gnu packages fontutils)
59 #:use-module (gnu packages freedesktop)
60 #:use-module (gnu packages fribidi)
61 #:use-module (gnu packages gettext)
62 #:use-module (gnu packages ghostscript)
63 #:use-module (gnu packages gl)
64 #:use-module (gnu packages glib)
65 #:use-module (gnu packages gnome)
66 #:use-module (gnu packages icu4c)
67 #:use-module (gnu packages image)
68 #:use-module (gnu packages libffi)
69 #:use-module (gnu packages pdf)
70 #:use-module (gnu packages perl)
71 #:use-module (gnu packages pkg-config)
72 #:use-module (gnu packages pretty-print)
73 #:use-module (gnu packages python)
74 #:use-module (gnu packages guile)
75 #:use-module (gnu packages cups)
76 #:use-module (gnu packages xml)
77 #:use-module (gnu packages xorg)
78 #:use-module (gnu packages xdisorg))
79
80 (define-public atk
81 (package
82 (name "atk")
83 (version "2.28.1")
84 (source (origin
85 (method url-fetch)
86 (uri (string-append "mirror://gnome/sources/" name "/"
87 (version-major+minor version) "/"
88 name "-" version ".tar.xz"))
89 (sha256
90 (base32
91 "1z7laf6qwv5zsqcnj222dm5f43c6f3liil0cgx4s4s62xjk1wfnd"))))
92 (build-system gnu-build-system)
93 (outputs '("out" "doc"))
94 (arguments
95 `(#:configure-flags
96 (list (string-append "--with-html-dir="
97 (assoc-ref %outputs "doc")
98 "/share/gtk-doc/html"))))
99 (propagated-inputs `(("glib" ,glib))) ; required by atk.pc
100 (native-inputs
101 `(("pkg-config" ,pkg-config)
102 ("glib" ,glib "bin") ; glib-mkenums, etc.
103 ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
104 (synopsis "GNOME accessibility toolkit")
105 (description
106 "ATK provides the set of accessibility interfaces that are implemented
107 by other toolkits and applications. Using the ATK interfaces, accessibility
108 tools have full access to view and control running applications.")
109 (license license:lgpl2.0+)
110 (home-page "https://developer.gnome.org/atk/")))
111
112 (define-public cairo
113 (package
114 (name "cairo")
115 (version "1.14.12")
116 (source (origin
117 (method url-fetch)
118 (uri (string-append "https://cairographics.org/releases/cairo-"
119 version ".tar.xz"))
120 (sha256
121 (base32
122 "05mzyxkvsfc1annjw2dja8vka01ampp9pp93lg09j8hba06g144c"))
123 (patches (search-patches "cairo-CVE-2016-9082.patch"
124 "cairo-setjmp-wrapper.patch"))))
125 (build-system gnu-build-system)
126 (propagated-inputs
127 `(("fontconfig" ,fontconfig)
128 ("freetype" ,freetype)
129 ("glib" ,glib)
130 ("libpng" ,libpng)
131 ("libx11" ,libx11)
132 ("libxext" ,libxext)
133 ("libxrender" ,libxrender)
134 ("pixman" ,pixman)))
135 (inputs
136 `(("ghostscript" ,ghostscript)
137 ("libspectre" ,libspectre)
138 ("poppler" ,poppler)
139 ("xorgproto" ,xorgproto)
140 ("zlib" ,zlib)))
141 (native-inputs
142 `(("pkg-config" ,pkg-config)
143 ("python" ,python-wrapper)))
144 (arguments
145 `(#:tests? #f ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
146 #:configure-flags '("--enable-tee"))) ; needed for GNU Icecat
147 (synopsis "2D graphics library")
148 (description
149 "Cairo is a 2D graphics library with support for multiple output devices.
150 Currently supported output targets include the X Window System (via both
151 Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
152 output. Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.
153
154 Cairo is designed to produce consistent output on all output media while
155 taking advantage of display hardware acceleration when available
156 eg. through the X Render Extension).
157
158 The cairo API provides operations similar to the drawing operators of
159 PostScript and PDF. Operations in cairo including stroking and filling cubic
160 Bézier splines, transforming and compositing translucent images, and
161 antialiased text rendering. All drawing operations can be transformed by any
162 affine transformation (scale, rotation, shear, etc.).")
163 (license license:lgpl2.1) ; or Mozilla Public License 1.1
164 (home-page "https://cairographics.org/")))
165
166 (define-public cairo-xcb
167 (package
168 (inherit cairo)
169 (name "cairo-xcb")
170 (inputs
171 `(("mesa" ,mesa)
172 ,@(package-inputs cairo)))
173 (arguments
174 `(#:tests? #f
175 #:configure-flags
176 '("--enable-xlib-xcb" "--enable-gl" "--enable-egl")))
177 (synopsis "2D graphics library (with X11 support)")))
178
179 (define-public harfbuzz
180 (package
181 (name "harfbuzz")
182 (version "1.8.8")
183 (source (origin
184 (method url-fetch)
185 (uri (string-append "https://www.freedesktop.org/software/"
186 "harfbuzz/release/harfbuzz-"
187 version ".tar.bz2"))
188 (sha256
189 (base32
190 "1ag3scnm1fcviqgx2p4858y433mr0ndqw6zccnccrqcr9mpcird8"))))
191 (build-system gnu-build-system)
192 (outputs '("out"
193 "bin")) ; 160K, only hb-view depend on cairo
194 (inputs
195 `(("cairo" ,cairo)))
196 (propagated-inputs
197 ;; There are all in the Requires or Requires.private field of '.pc'.
198 `(("glib" ,glib)
199 ("graphite2" ,graphite2)
200 ("icu4c" ,icu4c)))
201 (native-inputs
202 `(("gobject-introspection" ,gobject-introspection)
203 ("pkg-config" ,pkg-config)
204 ("python" ,python-wrapper)
205 ("which" ,which)))
206 (arguments
207 `(#:configure-flags `("--with-graphite2"
208 "--with-gobject"
209 ,(string-append
210 "--bindir=" (assoc-ref %outputs "bin") "/bin"))))
211 (synopsis "OpenType text shaping engine")
212 (description
213 "HarfBuzz is an OpenType text shaping engine.")
214 (license (license:x11-style "file://COPYING"
215 "See 'COPYING' in the distribution."))
216 (home-page "https://www.freedesktop.org/wiki/Software/HarfBuzz/")))
217
218 (define-public pango
219 (package
220 (name "pango")
221 (version "1.42.4")
222 (source (origin
223 (method url-fetch)
224 (uri (string-append "mirror://gnome/sources/pango/"
225 (version-major+minor version) "/"
226 name "-" version ".tar.xz"))
227 (sha256
228 (base32
229 "17bwb7dgbncrfsmchlib03k9n3xaalirb39g3yb43gg8cg6p8aqx"))))
230 (build-system gnu-build-system)
231 (propagated-inputs
232 ;; These are all in Requires or Requires.private of the '.pc' files.
233 `(("cairo" ,cairo)
234 ("fribidi" ,fribidi)
235 ("fontconfig" ,fontconfig)
236 ("freetype" ,freetype)
237 ("glib" ,glib)
238 ("harfbuzz" ,harfbuzz)))
239 (inputs
240 `(("zlib" ,zlib)
241
242 ;; Some packages, such as Openbox, expect Pango to be built with the
243 ;; optional libxft support.
244 ("libxft" ,libxft)))
245 (native-inputs
246 `(("pkg-config" ,pkg-config)
247 ("glib" ,glib "bin") ; glib-mkenums, etc.
248 ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
249 (synopsis "GNOME text and font handling library")
250 (description
251 "Pango is the core text and font handling library used in GNOME
252 applications. It has extensive support for the different writing systems
253 used throughout the world.")
254 (license license:lgpl2.0+)
255 (home-page "https://developer.gnome.org/pango/")))
256
257 (define-public pangox-compat
258 (package
259 (name "pangox-compat")
260 (version "0.0.2")
261 (source (origin
262 (method url-fetch)
263 (uri (string-append "mirror://gnome/sources/" name "/"
264 (version-major+minor version) "/"
265 name "-" version ".tar.xz"))
266 (sha256
267 (base32
268 "0ip0ziys6mrqqmz4n71ays0kf5cs1xflj1gfpvs4fgy2nsrr482m"))))
269 (build-system gnu-build-system)
270 (inputs
271 `(("glib" ,glib)
272 ("pango" ,pango)))
273 (native-inputs
274 `(("intltool" ,intltool)
275 ("pkg-config" ,pkg-config)))
276 (home-page "https://developer.gnome.org/pango")
277 (synopsis "Obsolete pango functions")
278 (description "Pangox was a X backend to pango. It is now obsolete and no
279 longer provided by recent pango releases. pangox-compat provides the
280 functions which were removed.")
281 (license license:lgpl2.0+)))
282
283 (define-public ganv
284 (package
285 (name "ganv")
286 (version "1.4.2")
287 (source (origin
288 (method url-fetch)
289 (uri (string-append "https://download.drobilla.net/ganv-"
290 version ".tar.bz2"))
291 (sha256
292 (base32
293 "0g7s5mp14qgbfjdql0k1s8464r21g47ssn5dws6jazsnw6njhl0l"))))
294 (build-system waf-build-system)
295 (arguments
296 `(#:phases
297 (modify-phases %standard-phases
298 (add-before 'configure 'set-flags
299 (lambda* (#:key outputs #:allow-other-keys)
300 ;; Compile with C++11, required by gtkmm.
301 (setenv "CXXFLAGS" "-std=c++11")
302 ;; Allow 'bin/ganv_bench' to find libganv-1.so.
303 (setenv "LDFLAGS"
304 (string-append "-Wl,-rpath="
305 (assoc-ref outputs "out") "/lib"))
306 #t)))
307 #:tests? #f)) ; no check target
308 (inputs
309 `(("gtk" ,gtk+-2)
310 ("gtkmm" ,gtkmm-2)))
311 (native-inputs
312 `(("glib" ,glib "bin") ; for glib-genmarshal, etc.
313 ("pkg-config" ,pkg-config)))
314 (home-page "https://drobilla.net/software/ganv/")
315 (synopsis "GTK+ widget for interactive graph-like environments")
316 (description
317 "Ganv is an interactive GTK+ widget for interactive “boxes and lines” or
318 graph-like environments, e.g. modular synths or finite state machine
319 diagrams.")
320 (license license:gpl3+)))
321
322 (define-public ganv-devel
323 (let ((commit "12f7d6b0438c94dd87f773a92eee3453d971846e")
324 (revision "1"))
325 (package
326 (inherit ganv)
327 (name "ganv")
328 (version (string-append "1.5.4-" revision "."
329 (string-take commit 9)))
330 (source (origin
331 (method git-fetch)
332 (uri (git-reference
333 (url "https://git.drobilla.net/ganv.git")
334 (commit commit)))
335 (file-name (git-file-name name version))
336 (sha256
337 (base32
338 "1cr8w02lr6bk9mkxa12j3imq721b2an2yn4bj5wnwmpm91ddn2gi")))))))
339
340 (define-public gtksourceview-2
341 (package
342 (name "gtksourceview")
343 (version "2.10.5") ; This is the last version which builds against gtk+2
344 (source (origin
345 (method url-fetch)
346 (uri (string-append "mirror://gnome/sources/" name "/"
347 (version-major+minor version) "/"
348 name "-" version ".tar.bz2"))
349 (sha256
350 (base32
351 "07hrabhpl6n8ajz10s0d960jdwndxs87szxyn428mpxi8cvpg1f5"))))
352 (build-system gnu-build-system)
353 (native-inputs
354 `(("intltool" ,intltool)
355 ("glib" ,glib "bin") ; for glib-genmarshal, etc.
356 ("pkg-config" ,pkg-config)
357 ;; For testing.
358 ("xorg-server" ,xorg-server)
359 ("shared-mime-info" ,shared-mime-info)))
360 (propagated-inputs
361 ;; As per the pkg-config file.
362 `(("gtk" ,gtk+-2)
363 ("libxml2" ,libxml2)))
364 (arguments
365 `(#:phases
366 ;; Unfortunately, some of the tests in "make check" are highly dependent
367 ;; on the environment therefore, some black magic is required.
368 (modify-phases %standard-phases
369 (add-before 'check 'start-xserver
370 (lambda* (#:key inputs #:allow-other-keys)
371 (let ((xorg-server (assoc-ref inputs "xorg-server"))
372 (mime (assoc-ref inputs "shared-mime-info")))
373
374 ;; There must be a running X server and make check doesn't start one.
375 ;; Therefore we must do it.
376 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
377 (setenv "DISPLAY" ":1")
378
379 ;; The .lang files must be found in $XDG_DATA_HOME/gtksourceview-2.0
380 (system "ln -s gtksourceview gtksourceview-2.0")
381 (setenv "XDG_DATA_HOME" (getcwd))
382
383 ;; Finally, the mimetypes must be available.
384 (setenv "XDG_DATA_DIRS" (string-append mime "/share/")))
385 #t)))))
386 (synopsis "Widget that extends the standard GTK+ 2.x 'GtkTextView' widget")
387 (description
388 "GtkSourceView is a portable C library that extends the standard GTK+
389 framework for multiline text editing with support for configurable syntax
390 highlighting, unlimited undo/redo, search and replace, a completion framework,
391 printing and other features typical of a source code editor.")
392 (license license:lgpl2.0+)
393 (home-page "https://developer.gnome.org/gtksourceview/")))
394
395 (define-public gtksourceview
396 (package
397 (name "gtksourceview")
398 (version "3.24.8")
399 (source (origin
400 (method url-fetch)
401 (uri (string-append "mirror://gnome/sources/" name "/"
402 (version-major+minor version) "/"
403 name "-" version ".tar.xz"))
404 (sha256
405 (base32
406 "1zinqid62zjcsq7vy1y4mq1qh3hzd3zj7p8np7g0bdqd37zvi6qy"))))
407 (build-system gnu-build-system)
408 (arguments
409 '(#:phases
410 (modify-phases %standard-phases
411 (add-before
412 'check 'pre-check
413 (lambda* (#:key inputs #:allow-other-keys)
414 (let ((xorg-server (assoc-ref inputs "xorg-server")))
415 ;; Tests require a running X server.
416 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
417 (setenv "DISPLAY" ":1")
418 ;; For the missing /etc/machine-id.
419 (setenv "DBUS_FATAL_WARNINGS" "0")
420 #t))))))
421 (native-inputs
422 `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
423 ("intltool" ,intltool)
424 ("itstool" ,itstool)
425 ("gobject-introspection" ,gobject-introspection)
426 ("pkg-config" ,pkg-config)
427 ("vala" ,vala)
428 ;; For testing.
429 ("xorg-server" ,xorg-server)
430 ("shared-mime-info" ,shared-mime-info)))
431 (propagated-inputs
432 ;; gtksourceview-3.0.pc refers to all these.
433 `(("glib" ,glib)
434 ("gtk+" ,gtk+)
435 ("libxml2" ,libxml2)))
436 (home-page "https://wiki.gnome.org/Projects/GtkSourceView")
437 (synopsis "GNOME source code widget")
438 (description "GtkSourceView is a text widget that extends the standard
439 GTK+ text widget GtkTextView. It improves GtkTextView by implementing syntax
440 highlighting and other features typical of a source code editor.")
441 (license license:lgpl2.1+)))
442
443 (define-public gdk-pixbuf
444 (package
445 (name "gdk-pixbuf")
446 (version "2.38.0")
447 (source (origin
448 (method url-fetch)
449 (uri (string-append "mirror://gnome/sources/" name "/"
450 (version-major+minor version) "/"
451 name "-" version ".tar.xz"))
452 (sha256
453 (base32
454 "0ixfmnxjylx06mjaw116apymwi1a8rnkmkbbvqaxxg2pfwy9fl6x"))))
455 (build-system meson-build-system)
456 (arguments
457 '(#:configure-flags '("-Dinstalled-tests=false")
458 #:phases
459 (modify-phases %standard-phases
460 (add-after
461 'unpack 'disable-failing-tests
462 (lambda _
463 (substitute* "tests/meson.build"
464 ;; XXX FIXME: This test fails on armhf machines with:
465 ;; SKIP Not enough memory to load bitmap image
466 ;; ERROR: cve-2015-4491 - too few tests run (expected 4, got 2)
467 ((".*'cve-2015-4491'.*") "")
468 ;; XXX FIXME: This test fails with:
469 ;; ERROR:pixbuf-jpeg.c:74:test_type9_rotation_exif_tag:
470 ;; assertion failed (error == NULL): Data differ
471 ;; (gdk-pixbuf-error-quark, 0)
472 ((".*'pixbuf-jpeg'.*") "")
473 ;; Extend the timeout of the test suite.
474 ;; TODO: Check upstreaming effort:
475 ;; https://gitlab.gnome.org/GNOME/gdk-pixbuf/merge_requests/21
476 (("300") "1800"))
477 #t))
478 (add-before 'configure 'aid-install-script
479 (lambda* (#:key outputs #:allow-other-keys)
480 ;; "build-aux/post-install.sh" invokes `gdk-pixbuf-query-loaders`
481 ;; for updating loader.cache, but it's not on PATH. Make it use
482 ;; the one we're installing. XXX: Won't work when cross-compiling.
483 (substitute* "build-aux/post-install.sh"
484 (("gdk-pixbuf-query-loaders" match)
485 (string-append (assoc-ref outputs "out") "/bin/" match)))
486 #t)))))
487 (propagated-inputs
488 `(;; Required by gdk-pixbuf-2.0.pc
489 ("glib" ,glib)
490 ("libpng" ,libpng)
491 ;; Used for testing and required at runtime.
492 ("shared-mime-info" ,shared-mime-info)))
493 (inputs
494 `(("libjpeg" ,libjpeg)
495 ("libtiff" ,libtiff)
496 ("libx11" ,libx11)))
497 (native-inputs
498 `(("pkg-config" ,pkg-config)
499 ("gettext" ,gettext-minimal)
500 ("glib" ,glib "bin") ; glib-mkenums, etc.
501 ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
502 (synopsis "GNOME image loading and manipulation library")
503 (description
504 "GdkPixbuf is a library for image loading and manipulation developed
505 in the GNOME project.")
506 (license license:lgpl2.0+)
507 (home-page "https://developer.gnome.org/gdk-pixbuf/")))
508
509 ;; To build gdk-pixbuf with SVG support, we need librsvg, and librsvg depends
510 ;; on gdk-pixbuf, so this new varibale. Also, librsvg adds 90MiB to the
511 ;; closure size.
512 (define-public gdk-pixbuf+svg
513 (package (inherit gdk-pixbuf)
514 (name "gdk-pixbuf+svg")
515 (inputs
516 `(("librsvg" ,librsvg)
517 ,@(package-inputs gdk-pixbuf)))
518 (arguments
519 '(#:configure-flags '("-Dinstalled-tests=false")
520 #:tests? #f ; tested by the gdk-pixbuf package already
521 #:phases
522 (modify-phases %standard-phases
523 (add-after 'install 'register-svg-loader
524 (lambda* (#:key inputs outputs #:allow-other-keys)
525 (let* ((out (assoc-ref outputs "out"))
526 (librsvg (assoc-ref inputs "librsvg"))
527 (loaders
528 (append
529 (find-files out "^libpixbufloader-.*\\.so$")
530 (find-files librsvg "^libpixbufloader-.*\\.so$")))
531 (gdk-pixbuf-query-loaders
532 (string-append out "/bin/gdk-pixbuf-query-loaders")))
533 (apply invoke
534 gdk-pixbuf-query-loaders
535 "--update-cache"
536 loaders)))))))
537 (synopsis
538 "GNOME image loading and manipulation library, with SVG support")))
539
540 (define-public at-spi2-core
541 (package
542 (name "at-spi2-core")
543 (version "2.26.2")
544 (source (origin
545 (method url-fetch)
546 (uri (string-append "mirror://gnome/sources/" name "/"
547 (version-major+minor version) "/"
548 name "-" version ".tar.xz"))
549 (sha256
550 (base32
551 "0596ghkamkxgv08r4a1pdhm06qd5zzgcfqsv64038w9xbvghq3n8"))))
552 (build-system gnu-build-system)
553 (outputs '("out" "doc"))
554 (arguments
555 '(#:configure-flags
556 (list (string-append "--with-html-dir="
557 (assoc-ref %outputs "doc")
558 "/share/gtk-doc/html"))
559 #:phases
560 (modify-phases %standard-phases
561 (replace 'check
562 ;; Run test-suite under a dbus session.
563 (lambda _
564 ;; Don't fail on missing '/etc/machine-id'.
565 (setenv "DBUS_FATAL_WARNINGS" "0")
566 (invoke "dbus-launch" "make" "check"))))))
567 (propagated-inputs
568 ;; atspi-2.pc refers to all these.
569 `(("dbus" ,dbus)
570 ("glib" ,glib)))
571 (inputs
572 `(("libxi" ,libxi)
573 ("libxtst" ,libxtst)))
574 (native-inputs
575 `(("gobject-introspection" ,gobject-introspection)
576 ("intltool" ,intltool)
577 ("pkg-config" ,pkg-config)))
578 (synopsis "Assistive Technology Service Provider Interface, core components")
579 (description
580 "The Assistive Technology Service Provider Interface, core components,
581 is part of the GNOME accessibility project.")
582 (license license:lgpl2.0+)
583 (home-page "https://projects.gnome.org/accessibility/")))
584
585 (define-public at-spi2-atk
586 (package
587 (name "at-spi2-atk")
588 (version "2.26.2")
589 (source (origin
590 (method url-fetch)
591 (uri (string-append "mirror://gnome/sources/" name "/"
592 (version-major+minor version) "/"
593 name "-" version ".tar.xz"))
594 (sha256
595 (base32
596 "0vkan52ab9vrkknnv8y4f1cspk8x7xd10qx92xk9ys71p851z2b1"))))
597 (build-system gnu-build-system)
598 (arguments
599 '(#:phases
600 (modify-phases %standard-phases
601 (replace 'check
602 ;; Run test-suite under a dbus session.
603 (lambda _
604 (setenv "DBUS_FATAL_WARNINGS" "0")
605 (invoke "dbus-launch" "make" "check"))))))
606 (propagated-inputs
607 `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
608 (inputs
609 `(("atk" ,atk)))
610 (native-inputs
611 `(("dbus" ,dbus) ; for testing
612 ("pkg-config" ,pkg-config)))
613 (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
614 (description
615 "The Assistive Technology Service Provider Interface
616 is part of the GNOME accessibility project.")
617 (license license:lgpl2.0+)
618 (home-page "https://projects.gnome.org/accessibility/")))
619
620 (define-public gtk+-2
621 (package
622 (name "gtk+")
623 (version "2.24.32")
624 (source (origin
625 (method url-fetch)
626 (uri (string-append "mirror://gnome/sources/" name "/"
627 (version-major+minor version) "/"
628 name "-" version ".tar.xz"))
629 (sha256
630 (base32
631 "0bjq7ja9gwcv6n5q4qkvdjjx40wsdiikksz1zqxvxsm5vlyskj5n"))
632 (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
633 "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
634 "gtk2-theme-paths.patch"))))
635 (build-system gnu-build-system)
636 (outputs '("out" "doc"))
637 (propagated-inputs
638 `(("atk" ,atk)
639 ("gdk-pixbuf" ,gdk-pixbuf+svg)
640 ("pango" ,pango)))
641 (inputs
642 `(("cups" ,cups)
643 ("libxcomposite" ,libxcomposite)
644 ("libxcursor" ,libxcursor)
645 ("libxdamage" ,libxdamage)
646 ("libxi" ,libxi)
647 ("libxinerama" ,libxinerama)
648 ("libxrandr" ,libxrandr)))
649 (native-inputs
650 `(("perl" ,perl)
651 ("gettext" ,gettext-minimal)
652 ("glib" ,glib "bin")
653 ("gobject-introspection" ,gobject-introspection)
654 ("pkg-config" ,pkg-config)
655 ("python-wrapper" ,python-wrapper)))
656 (arguments
657 `(#:configure-flags
658 (list "--with-xinput=yes"
659 (string-append "--with-html-dir="
660 (assoc-ref %outputs "doc")
661 "/share/gtk-doc/html"))
662 #:phases
663 (alist-cons-before
664 'configure 'disable-tests
665 (lambda _
666 ;; FIXME: re-enable tests requiring an X server
667 (substitute* "gtk/Makefile.in"
668 (("SUBDIRS = theme-bits . tests") "SUBDIRS = theme-bits ."))
669 #t)
670 %standard-phases)))
671 (native-search-paths
672 (list (search-path-specification
673 (variable "GUIX_GTK2_PATH")
674 (files '("lib/gtk-2.0")))))
675 (synopsis "Cross-platform toolkit for creating graphical user interfaces")
676 (description
677 "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
678 graphical user interfaces. Offering a complete set of widgets, GTK+ is
679 suitable for projects ranging from small one-off tools to complete
680 application suites.")
681 (license license:lgpl2.0+)
682 (home-page "https://www.gtk.org/")))
683
684 (define-public gtk+
685 (package (inherit gtk+-2)
686 (name "gtk+")
687 ;; NOTE: When updating the version of 'gtk+', the hash of 'mate-themes' in
688 ;; mate.scm will also need to be updated.
689 (version "3.24.0")
690 (source (origin
691 (method url-fetch)
692 (uri (string-append "mirror://gnome/sources/" name "/"
693 (version-major+minor version) "/"
694 name "-" version ".tar.xz"))
695 (sha256
696 (base32
697 "1a1jbsh9fg5ykmwrcl3svy7xfvx0b87d314qsx9n483pj8w93s82"))
698 (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
699 "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
700 (outputs '("out" "bin" "doc"))
701 (propagated-inputs
702 `(("at-spi2-atk" ,at-spi2-atk)
703 ("atk" ,atk)
704 ("gdk-pixbuf" ,gdk-pixbuf+svg)
705 ("libepoxy" ,libepoxy)
706 ("libxcursor" ,libxcursor)
707 ("libxi" ,libxi)
708 ("libxinerama" ,libxinerama)
709 ("libxkbcommon" ,libxkbcommon)
710 ("libxdamage" ,libxdamage)
711 ("mesa" ,mesa)
712 ("pango" ,pango)
713 ("wayland" ,wayland)
714 ("wayland-protocols" ,wayland-protocols)))
715 (inputs
716 `(("libxml2" ,libxml2)
717 ;; XXX: colord depends on mozjs (through polkit), which fails on
718 ;; on non-intel systems now.
719 ;;("colord" ,colord)
720 ("cups" ,cups) ;for printing support
721 ;; XXX: rest depends on p11-kit, which fails on mips64el now.
722 ;;("rest" ,rest)
723 ("json-glib" ,json-glib)))
724 (native-inputs
725 `(("perl" ,perl)
726 ("glib" ,glib "bin")
727 ("gettext" ,gettext-minimal)
728 ("pkg-config" ,pkg-config)
729 ("gobject-introspection" ,gobject-introspection)
730 ("python-wrapper" ,python-wrapper)
731 ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
732 ;; of updating xorg-server directly on the master branch.
733 ("xorg-server" ,xorg-server-for-tests)))
734 (arguments
735 `(#:disallowed-references (,xorg-server-for-tests)
736 ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
737 ;; to "doc".
738 #:configure-flags (list (string-append "--with-html-dir="
739 (assoc-ref %outputs "doc")
740 "/share/gtk-doc/html")
741 ;; The header file <gdk/gdkwayland.h> is required
742 ;; by gnome-control-center
743 "--enable-wayland-backend"
744 ;; This is necessary to build both backends.
745 "--enable-x11-backend"
746 ;; This enables the HTML5 websocket backend.
747 "--enable-broadway-backend")
748 #:phases (modify-phases %standard-phases
749 (add-before 'configure 'pre-configure
750 (lambda _
751 ;; Disable most tests, failing in the chroot with the message:
752 ;; D-Bus library appears to be incorrectly set up; failed to read
753 ;; machine uuid: Failed to open "/etc/machine-id": No such file or
754 ;; directory.
755 ;; See the manual page for dbus-uuidgen to correct this issue.
756 (substitute* "testsuite/Makefile.in"
757 (("SUBDIRS = gdk gtk a11y css reftests")
758 "SUBDIRS = gdk"))
759 #t))
760 (add-after 'install 'move-desktop-files
761 ;; Move desktop files into 'bin' to avoid cycle references.
762 (lambda* (#:key outputs #:allow-other-keys)
763 (let ((out (assoc-ref outputs "out"))
764 (bin (assoc-ref outputs "bin")))
765 (mkdir-p (string-append bin "/share"))
766 (rename-file (string-append out "/share/applications")
767 (string-append bin "/share/applications"))
768 #t))))))
769 (native-search-paths
770 (list (search-path-specification
771 (variable "GUIX_GTK3_PATH")
772 (files '("lib/gtk-3.0")))))))
773
774 ;;;
775 ;;; Guile bindings.
776 ;;;
777
778 (define-public guile-cairo
779 (package
780 (name "guile-cairo")
781 (version "1.10.0")
782 (source (origin
783 (method url-fetch)
784 (uri (string-append "mirror://savannah/guile-cairo/guile-cairo-"
785 version ".tar.gz"))
786 (sha256
787 (base32
788 "0p6xrhf2k6n5dybn88050za7h90gnd7534n62l53vsca187pwgdf"))
789 (modules '((guix build utils)))
790 (snippet
791 (begin
792 '(begin
793 ;; Install Scheme files in …/guile/site/X.Y.
794 (substitute* (find-files "." "^Makefile\\.in$")
795 (("^(.*)dir = (.*)/guile/site(.*)" _ name prefix suffix)
796 (string-append name "dir = " prefix
797 "/guile/site/@GUILE_EFFECTIVE_VERSION@"
798 suffix)))
799 #t)))))
800 (build-system gnu-build-system)
801 (inputs
802 `(("guile-lib" ,guile-lib)
803 ("expat" ,expat)
804 ("guile" ,guile-2.2)))
805 (propagated-inputs
806 ;; The .pc file refers to 'cairo'.
807 `(("cairo" ,cairo)))
808 (native-inputs
809 `(("pkg-config" ,pkg-config)))
810 (home-page "https://www.nongnu.org/guile-cairo/")
811 (synopsis "Cairo bindings for GNU Guile")
812 (description
813 "Guile-Cairo wraps the Cairo graphics library for Guile Scheme.
814 Guile-Cairo is complete, wrapping almost all of the Cairo API. It is API
815 stable, providing a firm base on which to do graphics work. Finally, and
816 importantly, it is pleasant to use. You get a powerful and well-maintained
817 graphics library with all of the benefits of Scheme: memory management,
818 exceptions, macros, and a dynamic programming environment.")
819 (license license:lgpl3+)))
820
821 (define-public guile-rsvg
822 ;; Use a recent snapshot that supports Guile 2.2 and beyond.
823 (let ((commit "05c6a2fd67e4fea1a7c3ff776729dc931bae6678")
824 (revision "0"))
825 (package
826 (name "guile-rsvg")
827 (version (string-append "2.18.1-" revision "."
828 (string-take commit 7)))
829 (source (origin
830 (method url-fetch)
831 (uri (string-append "https://gitlab.com/wingo/guile-rsvg/"
832 "repository/archive.tar.gz?ref="
833 commit))
834 (sha256
835 (base32
836 "0vdzjx8l5nc4y2xjqs0g1rqn1zrwfsm30brh5gz00r1x41a2pvv2"))
837 (patches (search-patches "guile-rsvg-pkgconfig.patch"))
838 (modules '((guix build utils)))
839 (snippet
840 '(begin
841 (substitute* (find-files "." "Makefile\\.am")
842 (("/share/guile/site")
843 "/share/guile/site/@GUILE_EFFECTIVE_VERSION@"))
844 #t))
845 (file-name (string-append name "-" version ".tar.gz"))))
846 (build-system gnu-build-system)
847 (arguments
848 `(#:phases (modify-phases %standard-phases
849 (replace 'bootstrap
850 (lambda _
851 (invoke "autoreconf" "-vfi"))))))
852 (native-inputs `(("pkg-config" ,pkg-config)
853 ("autoconf" ,autoconf)
854 ("automake" ,automake)
855 ("libtool" ,libtool)
856 ("texinfo" ,texinfo)))
857 (inputs `(("guile" ,guile-2.2)
858 ("librsvg" ,librsvg)
859 ("guile-lib" ,guile-lib))) ;for (unit-test)
860 (propagated-inputs `(("guile-cairo" ,guile-cairo)))
861 (synopsis "Render SVG images using Cairo from Guile")
862 (description
863 "Guile-RSVG wraps the RSVG library for Guile, allowing you to render SVG
864 images onto Cairo surfaces.")
865 (home-page "http://wingolog.org/projects/guile-rsvg/")
866 (license license:lgpl2.1+))))
867
868 (define-public guile-present
869 (package
870 (name "guile-present")
871 (version "0.3.0")
872 (source (origin
873 (method url-fetch)
874 (uri (string-append "http://wingolog.org/pub/guile-present/"
875 "guile-present-" version ".tar.gz"))
876 (sha256
877 (base32
878 "1qam447m05sxxv6x8dlzg7qnyfc4dh8apjw1idpfhpns671gfr6m"))
879 (patches (search-patches "guile-present-coding.patch"))))
880 (build-system gnu-build-system)
881 (arguments
882 '(#:phases
883 (modify-phases %standard-phases
884 (add-after 'install 'post-install
885 (lambda* (#:key inputs outputs #:allow-other-keys)
886 (let* ((out (assoc-ref outputs "out"))
887 (bin (string-append out "/bin"))
888 (guile (assoc-ref inputs "guile")))
889 (substitute* (find-files bin ".*")
890 (("guile")
891 (string-append guile "/bin/guile -L "
892 out "/share/guile/site/2.0 -C "
893 out "/share/guile/site/2.0 "))))
894 #t)))))
895 (native-inputs `(("pkg-config" ,pkg-config)))
896 (inputs `(("guile" ,guile-2.2)))
897 (propagated-inputs
898 ;; These are used by the (present …) modules.
899 `(("guile-lib" ,guile-lib)
900 ("guile-cairo" ,guile-cairo)
901 ("guile-rsvg" ,guile-rsvg)))
902 (home-page "http://wingolog.org/software/guile-present/")
903 (synopsis "Create SVG or PDF presentations in Guile")
904 (description
905 "Guile-Present defines a declarative vocabulary for presentations,
906 together with tools to render presentation documents as SVG or PDF.
907 Guile-Present can be used to make presentations programmatically, but also
908 includes a tools to generate PDF presentations out of Org mode and Texinfo
909 documents.")
910 (license license:lgpl3+)))
911
912 (define-public guile-gnome
913 (package
914 (name "guile-gnome")
915 (version "2.16.5")
916 (source (origin
917 (method url-fetch)
918 (uri
919 (string-append "mirror://gnu/" name
920 "/guile-gnome-platform/guile-gnome-platform-"
921 version ".tar.gz"))
922 (sha256
923 (base32
924 "1gnf3j96nip5kl99a268i0dy1hj7s1cfs66sps3zwysnkd7qr399"))))
925 (build-system gnu-build-system)
926 (native-inputs
927 `(("pkg-config" ,pkg-config)
928 ("atk" ,atk)
929 ;;("corba" ,corba) ; not packaged yet
930 ("gconf" ,gconf)
931 ("gobject-introspection" ,gobject-introspection)
932 ;;("gthread" ,gthread) ; not packaged yet
933 ("gnome-vfs" ,gnome-vfs)
934 ("gdk-pixbuf" ,gdk-pixbuf)
935 ("gtk+" ,gtk+-2)
936 ("libglade" ,libglade)
937 ("libgnome" ,libgnome)
938 ("libgnomecanvas" ,libgnomecanvas)
939 ("libgnomeui" ,libgnomeui)
940 ("pango" ,pango)
941 ("libffi" ,libffi)
942 ("glib" ,glib)))
943 (inputs `(("guile" ,guile-2.2)))
944 (propagated-inputs
945 `(("guile-cairo" ,guile-cairo)
946 ("g-wrap" ,g-wrap)
947 ("guile-lib" ,guile-lib)))
948 (arguments
949 `(#:tests? #f ;FIXME
950 #:phases (modify-phases %standard-phases
951 (add-before 'configure 'pre-configure
952 (lambda* (#:key outputs #:allow-other-keys)
953 (let ((out (assoc-ref outputs "out")))
954 (substitute* (find-files "." "^Makefile.in$")
955 (("guilesite :=.*guile/site" all)
956 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
957 #t))))))
958 (outputs '("out" "debug"))
959 (synopsis "Guile interface for GTK+ programming for GNOME")
960 (description
961 "Includes guile-clutter, guile-gnome-gstreamer,
962 guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
963 (home-page "https://www.gnu.org/software/guile-gnome/")
964 (license license:gpl2+)
965 (properties '((upstream-name . "guile-gnome-platform")
966 (ftp-directory . "/gnu/guile-gnome/guile-gnome-platform")))))
967
968 ;;;
969 ;;; C++ bindings.
970 ;;;
971
972 (define-public cairomm
973 (package
974 (name "cairomm")
975 (version "1.12.2")
976 (source (origin
977 (method url-fetch)
978 (uri (string-append "https://www.cairographics.org/releases/"
979 name "-" version ".tar.gz"))
980 (sha256
981 (base32
982 "16fmigxsaz85c3lgcls7biwyz8zy8c8h3jndfm54cxxas3a7zi25"))))
983 (build-system gnu-build-system)
984 (arguments
985 ;; The examples lack -lcairo.
986 '(#:make-flags '("LDFLAGS=-lcairo")))
987 (native-inputs `(("pkg-config" ,pkg-config)))
988 (propagated-inputs
989 `(("libsigc++" ,libsigc++)
990 ("freetype" ,freetype)
991 ("fontconfig" ,fontconfig)
992 ("cairo" ,cairo)))
993 (home-page "https://cairographics.org/")
994 (synopsis "C++ bindings to the Cairo 2D graphics library")
995 (description
996 "Cairomm provides a C++ programming interface to the Cairo 2D graphics
997 library.")
998 (license license:lgpl2.0+)))
999
1000 (define-public pangomm
1001 (package
1002 (name "pangomm")
1003 (version "2.40.1")
1004 (source (origin
1005 (method url-fetch)
1006 (uri (string-append "mirror://gnome/sources/" name "/"
1007 (version-major+minor version) "/"
1008 name "-" version ".tar.xz"))
1009 (sha256
1010 (base32
1011 "1bz3gciff23bpw9bqc4v2l3lkq9w7394v3a4jxkvx0ap5lmfwqlp"))))
1012 (build-system gnu-build-system)
1013 (native-inputs `(("pkg-config" ,pkg-config)))
1014 (propagated-inputs
1015 `(("cairo" ,cairo)
1016 ("cairomm" ,cairomm)
1017 ("glibmm" ,glibmm)
1018 ("pango" ,pango)))
1019 (home-page "http://www.pango.org/")
1020 (synopsis "C++ interface to the Pango text rendering library")
1021 (description
1022 "Pangomm provides a C++ programming interface to the Pango text rendering
1023 library.")
1024 (license license:lgpl2.1+)))
1025
1026 (define-public atkmm
1027 (package
1028 (name "atkmm")
1029 (version "2.24.2")
1030 (source (origin
1031 (method url-fetch)
1032 (uri (string-append "mirror://gnome/sources/" name "/"
1033 (version-major+minor version) "/"
1034 name "-" version ".tar.xz"))
1035 (sha256
1036 (base32
1037 "1gaqwhviadsmy0fsr47686yglv1p4mpkamj0in127bz2b5bki5gz"))))
1038 (build-system gnu-build-system)
1039 (native-inputs `(("pkg-config" ,pkg-config)))
1040 (propagated-inputs
1041 `(("glibmm" ,glibmm) ("atk" ,atk)))
1042 (home-page "https://www.gtkmm.org")
1043 (synopsis "C++ interface to the ATK accessibility library")
1044 (description
1045 "ATKmm provides a C++ programming interface to the ATK accessibility
1046 toolkit.")
1047 (license license:lgpl2.1+)))
1048
1049 (define-public gtkmm
1050 (package
1051 (name "gtkmm")
1052 (version "3.22.2")
1053 (source (origin
1054 (method url-fetch)
1055 (uri (string-append "mirror://gnome/sources/" name "/"
1056 (version-major+minor version) "/"
1057 name "-" version ".tar.xz"))
1058 (sha256
1059 (base32
1060 "1400535lhyya462pfx8bp11k3mg3jsbdghlpygskd5ai665dkbwi"))))
1061 (build-system gnu-build-system)
1062 (native-inputs `(("pkg-config" ,pkg-config)
1063 ("glib" ,glib "bin") ;for 'glib-compile-resources'
1064 ("xorg-server" ,xorg-server-for-tests)))
1065 (propagated-inputs
1066 `(("pangomm" ,pangomm)
1067 ("cairomm" ,cairomm)
1068 ("atkmm" ,atkmm)
1069 ("gtk+" ,gtk+)
1070 ("glibmm" ,glibmm)))
1071 (arguments
1072 `(;; XXX: Tests require C++14 or later. Remove this when the default
1073 ;; compiler is >= GCC6.
1074 #:configure-flags '("CXXFLAGS=-std=gnu++14")
1075 #:disallowed-references (,xorg-server-for-tests)
1076 #:phases (modify-phases %standard-phases
1077 (add-before 'check 'run-xvfb
1078 (lambda* (#:key inputs #:allow-other-keys)
1079 (let ((xorg-server (assoc-ref inputs "xorg-server")))
1080 ;; Tests such as 'object_move/test' require a running
1081 ;; X server.
1082 (system (string-append xorg-server "/bin/Xvfb :1 &"))
1083 (setenv "DISPLAY" ":1")
1084 ;; Don't fail because of the missing /etc/machine-id.
1085 (setenv "DBUS_FATAL_WARNINGS" "0")
1086 #t))))))
1087 (home-page "https://gtkmm.org/")
1088 (synopsis
1089 "C++ interface to the GTK+ graphical user interface library")
1090 (description
1091 "gtkmm is the official C++ interface for the popular GUI library GTK+.
1092 Highlights include typesafe callbacks, and a comprehensive set of widgets that
1093 are easily extensible via inheritance. You can create user interfaces either
1094 in code or with the Glade User Interface designer, using libglademm. There's
1095 extensive documentation, including API reference and a tutorial.")
1096 (license license:lgpl2.1+)))
1097
1098
1099 (define-public gtkmm-2
1100 (package (inherit gtkmm)
1101 (name "gtkmm")
1102 (version "2.24.5")
1103 (source (origin
1104 (method url-fetch)
1105 (uri (string-append "mirror://gnome/sources/" name "/"
1106 (version-major+minor version) "/"
1107 name "-" version ".tar.xz"))
1108 (sha256
1109 (base32
1110 "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
1111 (arguments
1112 '(#:configure-flags '("CPPFLAGS=-std=c++11"))) ; required by libsigc++
1113 (native-inputs `(("pkg-config" ,pkg-config)))
1114 (propagated-inputs
1115 `(("pangomm" ,pangomm)
1116 ("cairomm" ,cairomm)
1117 ("atkmm" ,atkmm)
1118 ("gtk+" ,gtk+-2)
1119 ("glibmm" ,glibmm)))))
1120
1121 (define-public gtksourceviewmm
1122 (package
1123 (name "gtksourceviewmm")
1124 (version "3.18.0")
1125 (source (origin
1126 (method url-fetch)
1127 (uri (string-append "mirror://gnome/sources/" name "/"
1128 (version-major+minor version) "/"
1129 name "-" version ".tar.xz"))
1130 (sha256
1131 (base32 "0fgvmhm4h4qmxig87qvangs6ijw53mi40siz7pixlxbrsgiil22i"))))
1132 (build-system gnu-build-system)
1133 (native-inputs
1134 `(("pkg-config" ,pkg-config)))
1135 (propagated-inputs
1136 ;; In 'Requires' of gtksourceviewmm-3.0.pc.
1137 `(("glibmm" ,glibmm)
1138 ("gtkmm" ,gtkmm)
1139 ("gtksourceview" ,gtksourceview)))
1140 (synopsis "C++ interface to the GTK+ 'GtkTextView' widget")
1141 (description
1142 "gtksourceviewmm is a portable C++ library that extends the standard GTK+
1143 framework for multiline text editing with support for configurable syntax
1144 highlighting, unlimited undo/redo, search and replace, a completion framework,
1145 printing and other features typical of a source code editor.")
1146 (license license:lgpl2.1+)
1147 (home-page "https://developer.gnome.org/gtksourceview/")))
1148
1149 ;;;
1150 ;;; Python bindings.
1151 ;;;
1152
1153 (define-public python-pycairo
1154 (package
1155 (name "python-pycairo")
1156 (version "1.17.1")
1157 (source
1158 (origin
1159 (method url-fetch)
1160 (uri (string-append "https://github.com/pygobject/pycairo/releases/download/v"
1161 version "/pycairo-" version ".tar.gz"))
1162 (sha256
1163 (base32
1164 "165n0g7gp2a0qi8558snvfans17x83jv2lv7bx4vr1rxjbn3a2hg"))))
1165 (build-system python-build-system)
1166 (native-inputs
1167 `(("pkg-config" ,pkg-config)
1168 ("python-pytest" ,python-pytest)))
1169 (propagated-inputs ;pycairo.pc references cairo
1170 `(("cairo" ,cairo)))
1171 (home-page "https://cairographics.org/pycairo/")
1172 (synopsis "Python bindings for cairo")
1173 (description
1174 "Pycairo is a set of Python bindings for the Cairo graphics library.")
1175 (license license:lgpl3+)
1176 (properties `((python2-variant . ,(delay python2-pycairo))))))
1177
1178 (define-public python2-pycairo
1179 (let ((pycairo (package-with-python2
1180 (strip-python2-variant python-pycairo))))
1181 (package
1182 (inherit pycairo)
1183 (propagated-inputs
1184 `(("python2-funcsigs" ,python2-funcsigs)
1185 ,@(package-propagated-inputs pycairo)))
1186 ;; Dual-licensed under LGPL 2.1 or Mozilla Public License 1.1
1187 (license (list license:lgpl2.1 license:mpl1.1)))))
1188
1189 (define-public python2-pygtk
1190 (package
1191 (name "python2-pygtk")
1192 (version "2.24.0")
1193 (source
1194 (origin
1195 (method url-fetch)
1196 (uri (string-append "mirror://gnome/sources"
1197 "/pygtk/" (version-major+minor version)
1198 "/pygtk-" version ".tar.bz2"))
1199 (sha256
1200 (base32
1201 "04k942gn8vl95kwf0qskkv6npclfm31d78ljkrkgyqxxcni1w76d"))))
1202 (build-system gnu-build-system)
1203 (outputs '("out"
1204 "doc")) ;13 MiB of gtk-doc HTML
1205 (native-inputs
1206 `(("pkg-config" ,pkg-config)))
1207 (inputs
1208 `(("python" ,python-2)
1209 ("libglade" ,libglade)
1210 ("glib" ,glib)))
1211 (propagated-inputs
1212 `(("python-pycairo" ,python2-pycairo) ;loaded at runtime
1213 ("python-pygobject" ,python2-pygobject-2) ;referenced in pc file
1214 ("gtk+" ,gtk+-2)))
1215 (arguments
1216 `(#:tests? #f
1217 #:phases (modify-phases %standard-phases
1218 (add-before 'configure 'set-gtk-doc-directory
1219 (lambda* (#:key outputs #:allow-other-keys)
1220 ;; Install documentation to "doc".
1221 (let ((doc (assoc-ref outputs "doc")))
1222 (substitute* "docs/Makefile.in"
1223 (("TARGET_DIR = \\$\\(datadir\\)")
1224 (string-append "TARGET_DIR = " doc))))))
1225 (add-after 'configure 'fix-codegen
1226 (lambda* (#:key inputs #:allow-other-keys)
1227 (substitute* "pygtk-codegen-2.0"
1228 (("^prefix=.*$")
1229 (string-append
1230 "prefix="
1231 (assoc-ref inputs "python-pygobject") "\n")))))
1232 (add-after 'install 'install-pth
1233 (lambda* (#:key inputs outputs #:allow-other-keys)
1234 ;; pygtk's modules are stored in a subdirectory of
1235 ;; python's site-packages directory. Add a .pth file so
1236 ;; that python will add that subdirectory to its module
1237 ;; search path.
1238 (let* ((out (assoc-ref outputs "out"))
1239 (site (string-append out "/lib/python"
1240 ,(version-major+minor
1241 (package-version python-2))
1242 "/site-packages")))
1243 (call-with-output-file (string-append site "/pygtk.pth")
1244 (lambda (port)
1245 (format port "gtk-2.0~%")))))))))
1246 (home-page "http://www.pygtk.org/")
1247 (synopsis "Python bindings for GTK+")
1248 (description
1249 "PyGTK allows you to write full featured GTK programs in Python. It is
1250 targeted at GTK 2.x, and can be used in conjunction with gnome-python to
1251 write GNOME applications.")
1252 (license license:lgpl2.1+)))
1253
1254 (define-public perl-cairo
1255 (package
1256 (name "perl-cairo")
1257 (version "1.106")
1258 (source (origin
1259 (method url-fetch)
1260 (uri (string-append
1261 "mirror://cpan/authors/id/X/XA/XAOC/Cairo-"
1262 version ".tar.gz"))
1263 (sha256
1264 (base32
1265 "1i25kks408c54k2zxskvg54l5k3qadzm8n72ffga9jy7ic0h6j76"))))
1266 (build-system perl-build-system)
1267 (native-inputs
1268 `(("perl-extutils-depends" ,perl-extutils-depends)
1269 ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
1270 (inputs
1271 `(("cairo" ,cairo)))
1272 (home-page "https://metacpan.org/release/Cairo")
1273 (synopsis "Perl interface to the cairo 2d vector graphics library")
1274 (description "Cairo provides Perl bindings for the vector graphics library
1275 cairo. It supports multiple output targets, including PNG, PDF and SVG. Cairo
1276 produces identical output on all those targets.")
1277 (license license:lgpl2.1+)))
1278
1279 (define-public perl-gtk2
1280 (package
1281 (name "perl-gtk2")
1282 (version "1.24992")
1283 (source (origin
1284 (method url-fetch)
1285 (uri (string-append "mirror://cpan/authors/id/X/XA/XAOC/Gtk2-"
1286 version ".tar.gz"))
1287 (sha256
1288 (base32
1289 "1044rj3wbfmgaif2jb0k28m2aczli6ai2n5yvn6pr7zjyw16kvd2"))))
1290 (build-system perl-build-system)
1291 (native-inputs
1292 `(("perl-extutils-depends" ,perl-extutils-depends)
1293 ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
1294 (inputs
1295 `(("gtk+" ,gtk+-2)))
1296 (propagated-inputs
1297 `(("perl-pango" ,perl-pango)))
1298 (home-page "https://metacpan.org/release/Gtk2")
1299 (synopsis "Perl interface to the 2.x series of the Gimp Toolkit library")
1300 (description "Perl bindings to the 2.x series of the Gtk+ widget set.
1301 This module allows you to write graphical user interfaces in a Perlish and
1302 object-oriented way, freeing you from the casting and memory management in C,
1303 yet remaining very close in spirit to original API.")
1304 (license license:lgpl2.1+)))
1305
1306 (define-public perl-pango
1307 (package
1308 (name "perl-pango")
1309 (version "1.227")
1310 (source (origin
1311 (method url-fetch)
1312 (uri (string-append "mirror://cpan/authors/id/X/XA/XAOC/Pango-"
1313 version ".tar.gz"))
1314 (sha256
1315 (base32
1316 "0wdcidnfnb6nm79fzfs39ivawj3x8m98a147fmcxgv1zvwia9c1l"))))
1317 (build-system perl-build-system)
1318 (native-inputs
1319 `(("perl-extutils-depends" ,perl-extutils-depends)
1320 ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
1321 (inputs
1322 `(("pango" ,pango)))
1323 (propagated-inputs
1324 `(("perl-cairo" ,perl-cairo)
1325 ("perl-glib" ,perl-glib)))
1326 (home-page "https://metacpan.org/release/Pango")
1327 (synopsis "Layout and render international text")
1328 (description "Pango is a library for laying out and rendering text, with an
1329 emphasis on internationalization. Pango can be used anywhere that text layout
1330 is needed, but using Pango in conjunction with Cairo and/or Gtk2 provides a
1331 complete solution with high quality text handling and graphics rendering.
1332
1333 Dynamically loaded modules handle text layout for particular combinations of
1334 script and font backend. Pango provides a wide selection of modules, including
1335 modules for Hebrew, Arabic, Hangul, Thai, and a number of Indic scripts.
1336 Virtually all of the world's major scripts are supported.
1337
1338 In addition to the low level layout rendering routines, Pango includes
1339 @code{Pango::Layout}, a high level driver for laying out entire blocks of text,
1340 and routines to assist in editing internationalized text.")
1341 (license license:lgpl2.1+)))
1342
1343 (define-public girara
1344 (package
1345 (name "girara")
1346 (version "0.2.9")
1347 (source (origin
1348 (method url-fetch)
1349 (uri
1350 (string-append "https://pwmt.org/projects/girara/download/girara-"
1351 version ".tar.xz"))
1352 (sha256
1353 (base32
1354 "0lkxrfna818wkkr2f6mdzf15y5z8xl1b9592ylmzjbqsqya3w7x8"))))
1355 (native-inputs `(("pkg-config" ,pkg-config)
1356 ("check" ,check)
1357 ("gettext" ,gettext-minimal)
1358 ("glib:bin" ,glib "bin")
1359 ("xorg-server" ,xorg-server-for-tests)))
1360 ;; Listed in 'Requires.private' of 'girara.pc'.
1361 (propagated-inputs `(("gtk+" ,gtk+)))
1362 (arguments
1363 `(#:phases (modify-phases %standard-phases
1364 (add-before 'check 'start-xserver
1365 ;; Tests require a running X server.
1366 (lambda* (#:key inputs #:allow-other-keys)
1367 (let ((xorg-server (assoc-ref inputs "xorg-server"))
1368 (display ":1"))
1369 (setenv "DISPLAY" display)
1370
1371 ;; On busy machines, tests may take longer than
1372 ;; the default of four seconds.
1373 (setenv "CK_DEFAULT_TIMEOUT" "20")
1374
1375 ;; Don't fail due to missing '/etc/machine-id'.
1376 (setenv "DBUS_FATAL_WARNINGS" "0")
1377 (zero? (system (string-append xorg-server "/bin/Xvfb "
1378 display " &")))))))))
1379 (build-system meson-build-system)
1380 (home-page "https://pwmt.org/projects/girara/")
1381 (synopsis "Library for minimalistic gtk+3 user interfaces")
1382 (description "Girara is a library that implements a user interface that
1383 focuses on simplicity and minimalism. Currently based on GTK+, a
1384 cross-platform widget toolkit, it provides an interface that focuses on three
1385 main components: a so-called view widget that represents the actual
1386 application, an input bar that is used to execute commands of the
1387 application and the status bar which provides the user with current
1388 information.")
1389 (license license:zlib)))
1390
1391 (define-public gtk-doc
1392 (package
1393 (name "gtk-doc")
1394 (version "1.27")
1395 (source (origin
1396 (method url-fetch)
1397 (uri (string-append "mirror://gnome/sources/" name "/"
1398 (version-major+minor version) "/"
1399 name "-" version ".tar.xz"))
1400 (sha256
1401 (base32
1402 "0vwsdl61nvnmqswlz5j9m4hg7qirhazwcikcnqf9nx0c13vx6sz2"))))
1403 (build-system gnu-build-system)
1404 (arguments
1405 `(#:parallel-tests? #f
1406 #:phases
1407 (modify-phases %standard-phases
1408 (add-after 'unpack 'patch-gtk-doc-scan
1409 (lambda* (#:key inputs #:allow-other-keys)
1410 (substitute* "gtk-doc.xsl"
1411 (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
1412 (string-append (assoc-ref inputs "docbook-xsl")
1413 "/xml/xsl/docbook-xsl-"
1414 ,(package-version docbook-xsl)
1415 "/html/chunk.xsl")))
1416 #t))
1417 (add-after 'patch-gtk-doc-scan 'patch-test-out
1418 (lambda _
1419 ;; sanity.sh counts the number of status lines. Since our
1420 ;; texlive regenerates the fonts every time and the font
1421 ;; generator metafont outputs a lot of extra lines, this
1422 ;; test would always fail. Disable it for now.
1423 (substitute* "tests/Makefile.in"
1424 (("empty.sh sanity.sh") "empty.sh"))
1425 #t))
1426 (add-before 'build 'set-HOME
1427 (lambda _
1428 ;; FIXME: dblatex with texlive-union does not find the built
1429 ;; metafonts, so it tries to generate them in HOME.
1430 (setenv "HOME" "/tmp")
1431 #t))
1432 (add-before 'configure 'fix-docbook
1433 (lambda* (#:key inputs #:allow-other-keys)
1434 (substitute* "configure"
1435 ;; The configure check is overzealous about making sure that
1436 ;; things are in place -- it uses the xmlcatalog tool to make
1437 ;; sure that docbook-xsl is available, but this tool can only
1438 ;; look in one catalog file, unlike the $XML_CATALOG_FILES
1439 ;; variable that Guix defines. Fool the test by using the
1440 ;; docbook-xsl catalog explicitly and get on with life.
1441 (("\"\\$XML_CATALOG_FILE\" \
1442 \"http://docbook.sourceforge.net/release/xsl/")
1443 (string-append (car (find-files (assoc-ref inputs "docbook-xsl")
1444 "^catalog.xml$"))
1445 " \"http://docbook.sourceforge.net/release/xsl/")))
1446 #t))
1447 (add-after 'install 'wrap-executables
1448 (lambda* (#:key outputs #:allow-other-keys)
1449 (let ((out (assoc-ref outputs "out")))
1450 (for-each (lambda (prog)
1451 (wrap-program prog
1452 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
1453 (find-files (string-append out "/bin")))
1454 #t))))
1455 #:configure-flags
1456 (list (string-append "--with-xml-catalog="
1457 (assoc-ref %build-inputs "docbook-xml")
1458 "/xml/dtd/docbook/catalog.xml"))))
1459 (native-inputs
1460 `(("pkg-config" ,pkg-config)
1461 ("itstool" ,itstool)
1462 ("libxml" ,libxml2)
1463 ("gettext" ,gettext-minimal)
1464 ("bc" ,bc)))
1465 (inputs
1466 `(("perl" ,perl)
1467 ("python" ,python)
1468 ("xsltproc" ,libxslt)
1469 ("dblatex" ,dblatex)
1470 ("docbook-xml" ,docbook-xml-4.3)
1471 ("docbook-xsl" ,docbook-xsl)
1472 ("source-highlight" ,source-highlight)
1473 ("glib" ,glib)
1474 ("python-six" ,python-six)))
1475 (home-page "https://www.gtk.org/gtk-doc/")
1476 (synopsis "Documentation generator from C source code")
1477 (description
1478 "GTK-Doc generates API documentation from comments added to C code. It is
1479 typically used to document the public API of GTK+ and GNOME libraries, but it
1480 can also be used to document application code.")
1481 (license license:gpl2+)))
1482
1483 (define-public gtk-engines
1484 (package
1485 (name "gtk-engines")
1486 (version "2.20.2")
1487 (source (origin
1488 (method url-fetch)
1489 (uri (string-append "mirror://gnome/sources/" name "/"
1490 (version-major+minor version) "/"
1491 name "-" version ".tar.bz2"))
1492 (sha256
1493 (base32
1494 "1db65pb0j0mijmswrvpgkdabilqd23x22d95hp5kwxvcramq1dhm"))))
1495 (build-system gnu-build-system)
1496 (arguments
1497 `(#:configure-flags
1498 `("--enable-animation")))
1499 (native-inputs
1500 `(("pkg-config" ,pkg-config)
1501 ("intltool" ,intltool)))
1502 (inputs
1503 ;; Don't propagate GTK+ to reduce "profile pollution".
1504 `(("gtk+" ,gtk+-2))) ; required by gtk-engines-2.pc
1505 (home-page "https://live.gnome.org/GnomeArt")
1506 (synopsis "Theming engines for GTK+ 2.x")
1507 (description
1508 "This package contains the standard GTK+ 2.x theming engines including
1509 Clearlooks, Crux, High Contrast, Industrial, LighthouseBlue, Metal, Mist,
1510 Redmond95 and ThinIce.")
1511 (license (list license:gpl2+ license:lgpl2.1+))))
1512
1513 (define-public murrine
1514 (package
1515 (name "murrine")
1516 (version "0.98.2")
1517 (source (origin
1518 (method url-fetch)
1519 (uri (string-append "mirror://gnome/sources/" name "/"
1520 (version-major+minor version) "/"
1521 name "-" version ".tar.xz"))
1522 (sha256
1523 (base32
1524 "129cs5bqw23i76h3nmc29c9mqkm9460iwc8vkl7hs4xr07h8mip9"))))
1525 (build-system gnu-build-system)
1526 (arguments
1527 `(#:configure-flags
1528 `("--enable-animation"
1529 "--enable-animationrtl")))
1530 (native-inputs
1531 `(("pkg-config" ,pkg-config)
1532 ("intltool" ,intltool)))
1533 (propagated-inputs
1534 `(("gtk+" ,gtk+-2)))
1535 (home-page "https://live.gnome.org/GnomeArt")
1536 (synopsis "Cairo-based theming engine for GTK+ 2.x")
1537 (description
1538 "Murrine is a cairo-based GTK+ theming engine. It is named after the
1539 glass artworks done by Venicians glass blowers.")
1540 (license license:gpl2+)))
1541
1542 (define-public gtkspell3
1543 (package
1544 (name "gtkspell3")
1545 (version "3.0.9")
1546 (source (origin
1547 (method url-fetch)
1548 (uri (string-append "mirror://sourceforge/gtkspell/"
1549 version "/" name "-" version ".tar.xz"))
1550 (sha256
1551 (base32
1552 "09jdicmpipmj4v84gnkqwbmj4lh8v0i6pn967rb9jx4zg2ia9x54"))))
1553 (build-system gnu-build-system)
1554 (native-inputs
1555 `(("intltool" ,intltool)
1556 ("pkg-config" ,pkg-config)))
1557 (inputs
1558 `(("gobject-introspection" ,gobject-introspection)
1559 ("gtk+" ,gtk+)
1560 ("pango" ,pango)))
1561 (propagated-inputs
1562 `(("enchant" ,enchant-1.6))) ;gtkspell3-3.0.pc refers to it
1563 (home-page "http://gtkspell.sourceforge.net")
1564 (synopsis "Spell-checking addon for GTK's TextView widget")
1565 (description
1566 "GtkSpell provides word-processor-style highlighting and replacement of
1567 misspelled words in a GtkTextView widget.")
1568 (license license:gpl2+)))
1569
1570 (define-public clipit
1571 (package
1572 (name "clipit")
1573 (version "1.4.2")
1574 (source (origin
1575 (method url-fetch)
1576 (uri (string-append
1577 "https://github.com/downloads/ClipIt/clipit-"
1578 version ".tar.gz"))
1579 (sha256
1580 (base32
1581 "0jrwn8qfgb15rwspdp1p8hb1nc0ngmpvgr87d4k3lhlvqg2cfqva"))))
1582 (build-system gnu-build-system)
1583 (native-inputs
1584 `(("intltool" ,intltool)
1585 ("pkg-config" ,pkg-config)))
1586 (inputs
1587 `(("gtk+" ,gtk+-2)))
1588 (home-page "https://github.com/CristianHenzel/ClipIt")
1589 (synopsis "Lightweight GTK+ clipboard manager")
1590 (description
1591 "ClipIt is a clipboard manager with features such as a history, search
1592 thereof, global hotkeys and clipboard item actions. It was forked from
1593 Parcellite and adds bugfixes and features.")
1594 (license license:gpl2+)))
1595
1596 (define-public graphene
1597 (package
1598 (name "graphene")
1599 (version "1.6.0")
1600 (source (origin
1601 (method url-fetch)
1602 (uri (string-append
1603 "https://github.com/ebassi/graphene/archive/"
1604 version ".tar.gz"))
1605 (file-name (string-append name "-" version ".tar.gz"))
1606 (sha256
1607 (base32 "1zd2daj7y590wnzn4jw0niyc4fnzgxrcl9i7nwhy8b25ks2hz5wq"))))
1608 (build-system gnu-build-system)
1609 (arguments
1610 `(#:configure-flags '("--enable-introspection=yes")
1611 #:phases
1612 (modify-phases %standard-phases
1613 (add-before 'configure 'autogen
1614 (lambda _
1615 (zero? (system* "./autogen.sh")))))))
1616 (native-inputs
1617 `(("autoconf" ,autoconf)
1618 ("which" ,which)
1619 ("pkg-config" ,pkg-config)
1620 ("automake" ,automake)
1621 ("libtool" ,libtool)))
1622 (inputs
1623 `(("python" ,python)
1624 ("python-2" ,python-2)
1625 ("glib" ,glib)
1626 ("gobject-introspection" ,gobject-introspection)))
1627 (home-page "http://ebassi.github.io/graphene")
1628 (synopsis "Thin layer of graphic data types")
1629 (description "This library provides graphic types and their relative API;
1630 it does not deal with windowing system surfaces, drawing, scene graphs, or
1631 input.")
1632 (license license:expat)))
1633
1634 (define-public yad
1635 (package
1636 (name "yad")
1637 (version "0.40.3")
1638 (source
1639 (origin
1640 (method git-fetch)
1641 (uri (git-reference
1642 (url "https://github.com/v1cont/yad.git")
1643 (commit (string-append "v" version))))
1644 (file-name (git-file-name name version))
1645 (sha256
1646 (base32 "1vpgbjbkkbk5plicyklzpf65j1vlig4n4bi3qpvrz5bb09ic5alw"))))
1647 (build-system gnu-build-system)
1648 (arguments
1649 `(#:configure-flags
1650 '("--with-gtk=gtk3"
1651 "--enable-html"
1652 "--enable-gio"
1653 "--enable-spell"
1654 "--enable-icon-browser")
1655 #:phases
1656 (modify-phases %standard-phases
1657 (replace 'bootstrap
1658 (lambda _
1659 (invoke "autoreconf" "-vif")
1660 (invoke "intltoolize" "--force" "--automake")
1661 #t)))))
1662 (inputs
1663 `(("gtk+" ,gtk+)))
1664 (native-inputs
1665 `(("autoconf" ,autoconf)
1666 ("automake" ,automake)
1667 ("intltool" ,intltool)
1668 ("pkg-config" ,pkg-config)))
1669 (home-page "https://sourceforge.net/projects/yad-dialog/")
1670 (synopsis "GTK+ dialog boxes for shell scripts")
1671 (description
1672 "This program allows you to display GTK+ dialog boxes from command line or
1673 shell scripts. Example of how to use @code{yad} can be consulted at
1674 @url{https://sourceforge.net/p/yad-dialog/wiki/browse_pages/}.")
1675 (license license:gpl3+)))