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