gnu: Add cran module.
[jackhill/guix/guix.git] / gnu / packages / qt.scm
CommitLineData
bd677c2d 1;;; GNU Guix --- Functional package management for GNU
84ef83dd 2;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr>
5b490ab5 3;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
31580979 4;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
843bdfb7 5;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
f048f12b 6;;; Copyright © 2016, 2017 ng0 <ng0@libertad.pw>
fc381a33 7;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
bd677c2d
AE
8;;;
9;;; This file is part of GNU Guix.
10;;;
11;;; GNU Guix is free software; you can redistribute it and/or modify it
12;;; under the terms of the GNU General Public License as published by
13;;; the Free Software Foundation; either version 3 of the License, or (at
14;;; your option) any later version.
15;;;
16;;; GNU Guix is distributed in the hope that it will be useful, but
17;;; WITHOUT ANY WARRANTY; without even the implied warranty of
18;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;;; GNU General Public License for more details.
20;;;
21;;; You should have received a copy of the GNU General Public License
22;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
23
24(define-module (gnu packages qt)
225941b0 25 #:use-module ((guix licenses) #:prefix license:)
bd677c2d
AE
26 #:use-module (guix packages)
27 #:use-module (guix download)
f198ffd0 28 #:use-module (guix build utils)
9e81af9e 29 #:use-module (guix build-system cmake)
bd677c2d 30 #:use-module (guix build-system gnu)
84ef83dd
AE
31 #:use-module (guix packages)
32 #:use-module (guix utils)
1e9ed0e3 33 #:use-module (gnu packages)
b332e366
AE
34 #:use-module (gnu packages bison)
35 #:use-module (gnu packages compression)
2cba3d6f
SB
36 #:use-module (gnu packages cups)
37 #:use-module (gnu packages databases)
aa8c0ada 38 #:use-module (gnu packages documentation)
b332e366 39 #:use-module (gnu packages fontutils)
0009ed71 40 #:use-module (gnu packages flex)
bc8ede01 41 #:use-module (gnu packages freedesktop)
8b6a5e0f 42 #:use-module (gnu packages gl)
b332e366 43 #:use-module (gnu packages glib)
0009ed71
SB
44 #:use-module (gnu packages gnuzilla)
45 #:use-module (gnu packages gperf)
f7fb0ccb 46 #:use-module (gnu packages gtk)
b332e366 47 #:use-module (gnu packages icu4c)
e55354b8 48 #:use-module (gnu packages image)
b332e366 49 #:use-module (gnu packages linux)
04f8decf 50 #:use-module (gnu packages maths)
0009ed71
SB
51 #:use-module (gnu packages pciutils)
52 #:use-module (gnu packages pcre)
b332e366
AE
53 #:use-module (gnu packages perl)
54 #:use-module (gnu packages pkg-config)
39fa8f6c 55 #:use-module (gnu packages pulseaudio)
b332e366 56 #:use-module (gnu packages python)
8b6a5e0f 57 #:use-module (gnu packages ruby)
51519fd3 58 #:use-module (gnu packages sdl)
cc2b77df 59 #:use-module (gnu packages tls)
0009ed71
SB
60 #:use-module (gnu packages xdisorg)
61 #:use-module (gnu packages xorg)
62 #:use-module (gnu packages xml))
bd677c2d 63
aa8c0ada
TD
64(define-public grantlee
65 (package
66 (name "grantlee")
67 (version "5.1.0")
68 (source
69 (origin
70 (method url-fetch)
71 (uri (string-append "https://github.com/steveire/grantlee/archive/v"
72 version ".tar.gz"))
73 (file-name (string-append name "-" version ".tar.gz"))
74 (sha256
75 (base32 "1lf9rkv0i0kd7fvpgg5l8jb87zw8dzcwd1liv6hji7g4wlpmfdiq"))))
76 (native-inputs
77 `(("doxygen" ,doxygen)))
78 (inputs
79 `(("qtbase" ,qtbase)
80 ("qtscript" ,qtscript)))
81 (build-system cmake-build-system)
82 (arguments
83 `(#:phases
84 (modify-phases %standard-phases
85 (replace 'check
86 (lambda _
87 (zero? (system* "ctest" ;; exclude 2 tests which require a display
88 "-E" "htmlbuildertest|plainmarkupbuildertest")))))))
89 (home-page "https://github.com/steveire/grantlee")
90 (synopsis "Libraries for text templating with Qt")
91 (description "Grantlee Templates can be used for theming and generation of
92other text such as code. The syntax uses the syntax of the Django template
93system, and the core design of Django is reused in Grantlee.")
94 (license license:lgpl2.0+)))
95
b332e366
AE
96(define-public qt
97 (package
98 (name "qt")
2e36f7e6 99 (version "5.6.2")
b332e366
AE
100 (source (origin
101 (method url-fetch)
f7fb0ccb
AE
102 (uri
103 (string-append
104 "http://download.qt.io/official_releases/qt/"
105 (version-major+minor version)
106 "/" version
107 "/single/qt-everywhere-opensource-src-"
108 version ".tar.xz"))
b332e366 109 (sha256
f7fb0ccb 110 (base32
2e36f7e6 111 "1cw93mrlkqbwndfqyjpsvjzkpzi39px2is040xvk18mvg3y1prl3"))
14bcc1e1
AE
112 (modules '((guix build utils)))
113 (snippet
bc554b43
AE
114 '(begin
115 ;; Remove qtwebengine, which relies on a bundled copy of
116 ;; chromium. Not only does it fail compilation in qt 5.5:
117 ;; 3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc:362:10:
118 ;; error: cannot convert ‘bool’ to ‘boolean’ in return
119 ;; it might also pose security problems.
120 ;; Alternatively, we could use the "-skip qtwebengine"
121 ;; configuration option.
122 (delete-file-recursively "qtwebengine")
123 ;; Remove one of the two bundled harfbuzz copies in addition
124 ;; to passing "-system-harfbuzz".
9c32e1fe
AE
125 (delete-file-recursively "qtbase/src/3rdparty/harfbuzz-ng")
126 ;; Remove the bundled sqlite copy in addition to
127 ;; passing "-system-sqlite".
128 (delete-file-recursively "qtbase/src/3rdparty/sqlite")))))
b332e366 129 (build-system gnu-build-system)
ef0cf53e
AE
130 (propagated-inputs
131 `(("mesa" ,mesa)))
b332e366 132 (inputs
b332e366
AE
133 `(("alsa-lib" ,alsa-lib)
134 ("dbus" ,dbus)
2cba3d6f 135 ("cups" ,cups)
0009ed71 136 ("expat" ,expat)
b332e366
AE
137 ("fontconfig" ,fontconfig)
138 ("freetype" ,freetype)
139 ("glib" ,glib)
f7fb0ccb 140 ("harfbuzz" ,harfbuzz)
b332e366 141 ("icu4c" ,icu4c)
f198ffd0 142 ("libjpeg" ,libjpeg)
2cba3d6f 143 ("libmng" ,libmng)
0009ed71 144 ("libpci" ,pciutils)
b332e366
AE
145 ("libpng" ,libpng)
146 ("libx11" ,libx11)
0009ed71
SB
147 ("libxcomposite" ,libxcomposite)
148 ("libxcursor" ,libxcursor)
149 ("libxfixes" ,libxfixes)
b332e366 150 ("libxi" ,libxi)
0009ed71 151 ("libxinerama" ,libxinerama)
b332e366 152 ("libxkbcommon" ,libxkbcommon)
0009ed71
SB
153 ("libxml2" ,libxml2)
154 ("libxrandr" ,libxrandr)
b332e366 155 ("libxrender" ,libxrender)
0009ed71
SB
156 ("libxslt" ,libxslt)
157 ("libxtst" ,libxtst)
158 ("mtdev" ,mtdev)
b332e366 159 ("mysql" ,mysql)
0009ed71 160 ("nss" ,nss)
b332e366 161 ("openssl" ,openssl)
2cba3d6f 162 ("postgresql" ,postgresql)
39fa8f6c 163 ("pulseaudio" ,pulseaudio)
0009ed71
SB
164 ("pcre" ,pcre)
165 ("sqlite" ,sqlite)
166 ("udev" ,eudev)
2cba3d6f 167 ("unixodbc" ,unixodbc)
b332e366
AE
168 ("xcb-util" ,xcb-util)
169 ("xcb-util-image" ,xcb-util-image)
170 ("xcb-util-keysyms" ,xcb-util-keysyms)
171 ("xcb-util-renderutil" ,xcb-util-renderutil)
172 ("xcb-util-wm" ,xcb-util-wm)
173 ("zlib" ,zlib)))
c4c4cc05 174 (native-inputs
0009ed71
SB
175 `(("bison" ,bison)
176 ("flex" ,flex)
177 ("gperf" ,gperf)
0009ed71
SB
178 ("perl" ,perl)
179 ("pkg-config" ,pkg-config)
180 ("python" ,python-2)
181 ("ruby" ,ruby)
ce0614dd 182 ("which" ,(@ (gnu packages base) which))))
b332e366 183 (arguments
46854e99
AE
184 `(;; FIXME: Disabling parallel building is a quick hack to avoid the
185 ;; failure described in
186 ;; https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00837.html
187 ;; A more structural fix is needed.
188 #:parallel-build? #f
189 #:phases
cce28b0c 190 (modify-phases %standard-phases
2470d779
AE
191 (add-after 'configure 'patch-bin-sh
192 (lambda _
193 (substitute* '("qtbase/config.status"
194 "qtbase/configure"
195 "qtbase/mkspecs/features/qt_functions.prf"
196 "qtbase/qmake/library/qmakebuiltins.cpp")
197 (("/bin/sh") (which "sh")))
198 #t))
cce28b0c
AE
199 (replace 'configure
200 (lambda* (#:key outputs #:allow-other-keys)
201 (let ((out (assoc-ref outputs "out")))
202 (substitute* '("configure" "qtbase/configure")
203 (("/bin/pwd") (which "pwd")))
204 (substitute* "qtbase/src/corelib/global/global.pri"
205 (("/bin/ls") (which "ls")))
206 ;; do not pass "--enable-fast-install", which makes the
207 ;; configure process fail
208 (zero? (system*
209 "./configure"
210 "-verbose"
211 "-prefix" out
212 "-opensource"
213 "-confirm-license"
4dd0a8b6
EF
214 ;; Do not build examples; if desired, these could go
215 ;; into a separate output, but for the time being, we
216 ;; prefer to save the space and build time.
217 "-nomake" "examples"
cce28b0c
AE
218 ;; Most "-system-..." are automatic, but some use
219 ;; the bundled copy by default.
220 "-system-sqlite"
221 "-system-harfbuzz"
222 ;; explicitly link with openssl instead of dlopening it
223 "-openssl-linked"
224 ;; explicitly link with dbus instead of dlopening it
225 "-dbus-linked"
226 ;; drop special machine instructions not supported
227 ;; on all instances of the target
228 ,@(if (string-prefix? "x86_64"
229 (or (%current-target-system)
230 (%current-system)))
231 '()
232 '("-no-sse2"))
233 "-no-sse3"
234 "-no-ssse3"
235 "-no-sse4.1"
236 "-no-sse4.2"
237 "-no-avx"
238 "-no-avx2"
239 "-no-mips_dsp"
240 "-no-mips_dspr2"))))))))
2e36f7e6 241 (home-page "https://www.qt.io/")
b332e366
AE
242 (synopsis "Cross-platform GUI library")
243 (description "Qt is a cross-platform application and UI framework for
244developers using C++ or QML, a CSS & JavaScript like language.")
225941b0 245 (license license:lgpl2.1)
f47638a3
LC
246
247 ;; Qt 4: 'QBasicAtomicPointer' leads to build failures on MIPS;
248 ;; see <http://hydra.gnu.org/build/112828>.
249 ;; Qt 5: assembler error; see <http://hydra.gnu.org/build/112526>.
250 (supported-systems (delete "mips64el-linux" %supported-systems))))
1e9ed0e3
AE
251
252(define-public qt-4
253 (package (inherit qt)
d22b9397 254 (version "4.8.7")
1e9ed0e3
AE
255 (source (origin
256 (method url-fetch)
257 (uri (string-append "http://download.qt-project.org/official_releases/qt/"
258 (string-copy version 0 (string-rindex version #\.))
259 "/" version
89059aa1 260 "/qt-everywhere-opensource-src-"
1e9ed0e3
AE
261 version ".tar.gz"))
262 (sha256
263 (base32
d22b9397 264 "183fca7n7439nlhxyg1z7aky0izgbyll3iwakw4gwivy16aj5272"))
fc1adab1 265 (patches (search-patches "qt4-ldflags.patch"))
7431edea
AE
266 (modules '((guix build utils)))
267 (snippet
268 ;; Remove webkit module, which is not built.
269 '(delete-file-recursively "src/3rdparty/webkit"))))
f7fb0ccb
AE
270 (inputs `(,@(alist-delete "harfbuzz"
271 (alist-delete "libjpeg" (package-inputs qt)))
e7e5a4f8
AE
272 ("libjepg" ,libjpeg-8)
273 ("libsm" ,libsm)))
31580979
LC
274
275 ;; Note: there are 37 MiB of examples and a '-exampledir' configure flags,
276 ;; but we can't make them a separate output because "out" and "examples"
277 ;; would refer to each other.
278 (outputs '("out" ;112MiB core + 37MiB examples
279 "doc")) ;280MiB of HTML + code
1e9ed0e3
AE
280 (arguments
281 `(#:phases
cba632c4
LC
282 (modify-phases %standard-phases
283 (replace
1e9ed0e3
AE
284 'configure
285 (lambda* (#:key outputs #:allow-other-keys)
31580979
LC
286 (let ((out (assoc-ref outputs "out"))
287 (doc (assoc-ref outputs "doc")))
1e9ed0e3 288 (substitute* '("configure")
d2984346
LC
289 (("/bin/pwd") (which "pwd")))
290
206a5208
AE
291 (zero? (system*
292 "./configure"
293 "-verbose"
294 "-prefix" out
4b0f2ef7
LC
295 ;; Note: Don't pass '-docdir' since 'qmake' and
296 ;; libQtCore would record its value, thereby defeating
297 ;; the whole point of having a separate output.
ff1989a5
LC
298 "-datadir" (string-append out "/share/qt-" ,version
299 "/data")
300 "-importdir" (string-append out "/lib/qt-4"
301 "/imports")
302 "-plugindir" (string-append out "/lib/qt-4"
303 "/plugins")
304 "-translationdir" (string-append out "/share/qt-" ,version
305 "/translations")
31580979
LC
306 "-demosdir" (string-append out "/share/qt-" ,version
307 "/demos")
308 "-examplesdir" (string-append out "/share/qt-" ,version
309 "/examples")
206a5208
AE
310 "-opensource"
311 "-confirm-license"
ff0a8c59
AE
312 ;; explicitly link with dbus instead of dlopening it
313 "-dbus-linked"
7431edea
AE
314 ;; Skip the webkit module; it fails to build on armhf
315 ;; and, apart from that, may pose security risks.
316 "-no-webkit"
206a5208
AE
317 ;; drop special machine instructions not supported
318 ;; on all instances of the target
319 ,@(if (string-prefix? "x86_64"
320 (or (%current-target-system)
321 (%current-system)))
322 '()
323 '("-no-mmx"
1e9ed0e3
AE
324 "-no-3dnow"
325 "-no-sse"
206a5208
AE
326 "-no-sse2"))
327 "-no-sse3"
328 "-no-ssse3"
329 "-no-sse4.1"
330 "-no-sse4.2"
84811c22 331 "-no-avx")))))
4b0f2ef7
LC
332 (add-after
333 'install 'move-doc
334 (lambda* (#:key outputs #:allow-other-keys)
335 ;; Because of qt4-documentation-path.patch, documentation ends up
336 ;; being installed in OUT. Move it to the right place.
337 (let* ((out (assoc-ref outputs "out"))
338 (doc (assoc-ref outputs "doc"))
339 (olddoc (string-append out "/doc"))
340 (docdir (string-append doc "/share/doc/qt-" ,version)))
341 (mkdir-p (dirname docdir))
342
343 ;; Note: We can't use 'rename-file' here because OUT and DOC are
344 ;; different "devices" due to bind-mounts.
345 (copy-recursively olddoc docdir)
346 (delete-file-recursively olddoc)
347 #t))))))))
84ef83dd 348
7868000f
AE
349(define-public qtbase
350 (package
351 (name "qtbase")
fdaf6cd3 352 (version "5.9.1")
7868000f
AE
353 (source (origin
354 (method url-fetch)
355 (uri (string-append "https://download.qt.io/official_releases/qt/"
356 (version-major+minor version) "/" version
357 "/submodules/" name "-opensource-src-"
358 version ".tar.xz"))
359 (sha256
c7386f4e 360 (base32
fdaf6cd3 361 "1ikm896jzyfyjv2qv8n3fd81sxb4y24zkygx36865ygzyvlj36mw"))
7868000f
AE
362 (modules '((guix build utils)))
363 (snippet
924e6ddf 364 ;; corelib uses bundled harfbuzz, md4, md5, sha3
7868000f 365 '(begin
924e6ddf
EF
366 (for-each
367 (lambda (dir)
368 (delete-file-recursively (string-append "src/3rdparty/" dir)))
369 (list "double-conversion" "freetype" "harfbuzz-ng"
370 "libpng" "libjpeg" "pcre2" "sqlite" "xcb"
371 "xkbcommon" "zlib"))
372 #t))))
7868000f 373 (build-system gnu-build-system)
48d4ce6e
EF
374 (propagated-inputs
375 `(("mesa" ,mesa)))
7868000f
AE
376 (inputs
377 `(("alsa-lib" ,alsa-lib)
378 ("cups" ,cups)
379 ("dbus" ,dbus)
04f8decf 380 ("double-conversion" ,double-conversion)
f66970a7 381 ("eudev" ,eudev)
7868000f
AE
382 ("expat" ,expat)
383 ("fontconfig" ,fontconfig)
384 ("freetype" ,freetype)
385 ("glib" ,glib)
386 ("harfbuzz" ,harfbuzz)
387 ("icu4c" ,icu4c)
f66970a7 388 ("libinput" ,libinput)
7868000f
AE
389 ("libjpeg" ,libjpeg)
390 ("libmng" ,libmng)
391 ("libpng" ,libpng)
392 ("libx11" ,libx11)
393 ("libxcomposite" ,libxcomposite)
394 ("libxcursor" ,libxcursor)
395 ("libxfixes" ,libxfixes)
396 ("libxi" ,libxi)
397 ("libxinerama" ,libxinerama)
398 ("libxkbcommon" ,libxkbcommon)
399 ("libxml2" ,libxml2)
400 ("libxrandr" ,libxrandr)
401 ("libxrender" ,libxrender)
402 ("libxslt" ,libxslt)
403 ("libxtst" ,libxtst)
404 ("mtdev" ,mtdev)
405 ("mysql" ,mysql)
406 ("nss" ,nss)
407 ("openssl" ,openssl)
924e6ddf 408 ("pcre2" ,pcre2)
7868000f
AE
409 ("postgresql" ,postgresql)
410 ("pulseaudio" ,pulseaudio)
411 ("sqlite" ,sqlite)
412 ("unixodbc" ,unixodbc)
413 ("xcb-util" ,xcb-util)
414 ("xcb-util-image" ,xcb-util-image)
415 ("xcb-util-keysyms" ,xcb-util-keysyms)
416 ("xcb-util-renderutil" ,xcb-util-renderutil)
417 ("xcb-util-wm" ,xcb-util-wm)
418 ("zlib" ,zlib)))
419 (native-inputs
420 `(("bison" ,bison)
421 ("flex" ,flex)
422 ("gperf" ,gperf)
423 ("perl" ,perl)
424 ("pkg-config" ,pkg-config)
425 ("python" ,python-2)
426 ("ruby" ,ruby)
427 ("which" ,(@ (gnu packages base) which))))
428 (arguments
429 `(#:phases
430 (modify-phases %standard-phases
431 (add-after 'configure 'patch-bin-sh
432 (lambda _
433 (substitute* '("config.status"
434 "configure"
435 "mkspecs/features/qt_functions.prf"
436 "qmake/library/qmakebuiltins.cpp")
437 (("/bin/sh") (which "sh")))
438 #t))
439 (replace 'configure
440 (lambda* (#:key outputs #:allow-other-keys)
441 (let ((out (assoc-ref outputs "out")))
442 (substitute* "configure"
443 (("/bin/pwd") (which "pwd")))
444 (substitute* "src/corelib/global/global.pri"
445 (("/bin/ls") (which "ls")))
7972d8a2
AE
446 ;; The configuration files for other Qt5 packages are searched
447 ;; through a call to "find_package" in Qt5Config.cmake, which
448 ;; disables the use of CMAKE_PREFIX_PATH via the parameter
449 ;; "NO_DEFAULT_PATH". Re-enable it so that the different
450 ;; components can be installed in different places.
451 (substitute* (find-files "." ".*\\.cmake")
452 (("NO_DEFAULT_PATH") ""))
7868000f
AE
453 ;; do not pass "--enable-fast-install", which makes the
454 ;; configure process fail
455 (zero? (system*
456 "./configure"
457 "-verbose"
458 "-prefix" out
459 "-opensource"
460 "-confirm-license"
461 ;; Do not build examples; if desired, these could go
462 ;; into a separate output, but for the time being, we
463 ;; prefer to save the space and build time.
924e6ddf 464 "-no-compile-examples"
7868000f
AE
465 ;; Most "-system-..." are automatic, but some use
466 ;; the bundled copy by default.
467 "-system-sqlite"
468 "-system-harfbuzz"
924e6ddf 469 "-system-pcre"
7868000f
AE
470 ;; explicitly link with openssl instead of dlopening it
471 "-openssl-linked"
472 ;; explicitly link with dbus instead of dlopening it
473 "-dbus-linked"
4e825e2d
EF
474 ;; don't use the precompiled headers
475 "-no-pch"
476 ;; drop special machine instructions that do not have
477 ;; runtime detection
7868000f
AE
478 ,@(if (string-prefix? "x86_64"
479 (or (%current-target-system)
480 (%current-system)))
481 '()
482 '("-no-sse2"))
7868000f 483 "-no-mips_dsp"
5ca6ef95
SB
484 "-no-mips_dspr2")))))
485 (add-after 'install 'patch-qt_config.prf
486 (lambda* (#:key outputs #:allow-other-keys)
487 (let* ((out (assoc-ref outputs "out"))
488 (qt_config.prf (string-append
489 out "/mkspecs/features/qt_config.prf")))
490 ;; For each Qt module, let `qmake' uses search paths in the
491 ;; module directory instead of all in QT_INSTALL_PREFIX.
492 (substitute* qt_config.prf
493 (("\\$\\$\\[QT_INSTALL_HEADERS\\]")
494 "$$replace(dir, mkspecs/modules, include)")
495 (("\\$\\$\\[QT_INSTALL_LIBS\\]")
496 "$$replace(dir, mkspecs/modules, lib)")
497 (("\\$\\$\\[QT_HOST_LIBS\\]")
498 "$$replace(dir, mkspecs/modules, lib)")
499 (("\\$\\$\\[QT_INSTALL_PLUGINS\\]")
500 "$$replace(dir, mkspecs/modules, plugins)")
501 (("\\$\\$\\[QT_INSTALL_LIBEXECS\\]")
502 "$$replace(dir, mkspecs/modules, libexec)")
503 (("\\$\\$\\[QT_INSTALL_BINS\\]")
504 "$$replace(dir, mkspecs/modules, bin)")
505 (("\\$\\$\\[QT_INSTALL_IMPORTS\\]")
506 "$$replace(dir, mkspecs/modules, imports)")
507 (("\\$\\$\\[QT_INSTALL_QML\\]")
508 "$$replace(dir, mkspecs/modules, qml)"))
509 #t))))))
510 (native-search-paths
511 (list (search-path-specification
512 (variable "QMAKEPATH")
ed02e1fe
DC
513 (files '("")))
514 (search-path-specification
515 (variable "QML2_IMPORT_PATH")
516 (files '("qml")))
517 (search-path-specification
518 (variable "QT_PLUGIN_PATH")
519 (files '("plugins")))
520 (search-path-specification
521 (variable "XDG_DATA_DIRS")
522 (files '("share")))
523 (search-path-specification
524 (variable "XDG_CONFIG_DIRS")
525 (files '("etc/xdg")))))
7868000f
AE
526 (home-page "https://www.qt.io/")
527 (synopsis "Cross-platform GUI library")
528 (description "Qt is a cross-platform application and UI framework for
529developers using C++ or QML, a CSS & JavaScript like language.")
225941b0 530 (license (list license:lgpl2.1 license:lgpl3))))
7868000f 531
19c17631
EF
532(define-public qtsvg
533 (package (inherit qtbase)
534 (name "qtsvg")
fdaf6cd3 535 (version "5.9.1")
19c17631
EF
536 (source (origin
537 (method url-fetch)
538 (uri (string-append "https://download.qt.io/official_releases/qt/"
539 (version-major+minor version) "/" version
540 "/submodules/" name "-opensource-src-"
541 version ".tar.xz"))
542 (sha256
543 (base32
fdaf6cd3 544 "1rg2q4snh2g4n93zmk995swwkl0ab1jr9ka9xpj56ddifkw99wlr"))))
48d4ce6e 545 (propagated-inputs `())
19c17631
EF
546 (native-inputs `(("perl" ,perl)))
547 (inputs
548 `(("mesa" ,mesa)
549 ("qtbase" ,qtbase)
550 ("zlib" ,zlib)))
551 (arguments
552 `(#:phases
553 (modify-phases %standard-phases
554 (replace 'configure
555 (lambda* (#:key outputs #:allow-other-keys)
556 (let ((out (assoc-ref outputs "out")))
c195b5ba
EF
557 ;; Valid QT_BUILD_PARTS variables are:
558 ;; libs tools tests examples demos docs translations
559 (zero? (system* "qmake" "QT_BUILD_PARTS = libs tools tests"
560 (string-append "PREFIX=" out))))))
19c17631
EF
561 (add-before 'install 'fix-Makefiles
562 (lambda* (#:key inputs outputs #:allow-other-keys)
563 (let ((out (assoc-ref outputs "out"))
564 (qtbase (assoc-ref inputs "qtbase")))
565 (substitute* (find-files "." "Makefile")
566 (((string-append "INSTALL_ROOT)" qtbase))
c195b5ba
EF
567 (string-append "INSTALL_ROOT)" out)))
568 #t)))
569 (add-before 'check 'set-display
570 (lambda _
94e24d81 571 ;; make Qt render "offscreen", required for tests
c195b5ba
EF
572 (setenv "QT_QPA_PLATFORM" "offscreen")
573 #t)))))))
19c17631 574
9b694210
EF
575(define-public qtimageformats
576 (package (inherit qtsvg)
577 (name "qtimageformats")
fdaf6cd3 578 (version "5.9.1")
9b694210
EF
579 (source (origin
580 (method url-fetch)
581 (uri (string-append "https://download.qt.io/official_releases/qt/"
582 (version-major+minor version) "/" version
583 "/submodules/" name "-opensource-src-"
584 version ".tar.xz"))
585 (sha256
586 (base32
fdaf6cd3 587 "0iwa3dys5rv706cpxwhmgircv783pmlyl1yrsc5i0rha643y7zkr"))
c04854da
EF
588 (modules '((guix build utils)))
589 (snippet
a20e00dd 590 '(delete-file-recursively "src/3rdparty"))))
9b694210
EF
591 (native-inputs `())
592 (inputs
a532a671
EF
593 `(("jasper" ,jasper)
594 ("libmng" ,libmng)
9b694210
EF
595 ("libtiff" ,libtiff)
596 ("libwebp" ,libwebp)
597 ("mesa" ,mesa)
598 ("qtbase" ,qtbase)
599 ("zlib" ,zlib)))))
600
f6c13613
EF
601(define-public qtx11extras
602 (package (inherit qtsvg)
603 (name "qtx11extras")
fdaf6cd3 604 (version "5.9.1")
f6c13613
EF
605 (source (origin
606 (method url-fetch)
607 (uri (string-append "https://download.qt.io/official_releases/qt/"
608 (version-major+minor version) "/" version
609 "/submodules/" name "-opensource-src-"
610 version ".tar.xz"))
611 (sha256
612 (base32
fdaf6cd3 613 "00fn3bps48gjyw0pdqvvl9scknxdpmacby6hvdrdccc3jll0wgd6"))))
c195b5ba
EF
614 (arguments
615 (substitute-keyword-arguments (package-arguments qtsvg)
616 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
f6c13613
EF
617 (native-inputs `(("perl" ,perl)))
618 (inputs
619 `(("mesa" ,mesa)
620 ("qtbase" ,qtbase)))))
621
98eec712
EF
622(define-public qtxmlpatterns
623 (package (inherit qtsvg)
624 (name "qtxmlpatterns")
fdaf6cd3 625 (version "5.9.1")
98eec712
EF
626 (source (origin
627 (method url-fetch)
628 (uri (string-append "https://download.qt.io/official_releases/qt/"
629 (version-major+minor version) "/" version
630 "/submodules/" name "-opensource-src-"
631 version ".tar.xz"))
632 (sha256
633 (base32
fdaf6cd3 634 "094wwap2fsl23cys6rxh2ciw0gxbbiqbshnn4qs1n6xdjrj6i15m"))))
c195b5ba
EF
635 (arguments
636 (substitute-keyword-arguments (package-arguments qtsvg)
f66b3e15
EF
637 ((#:phases phases)
638 `(modify-phases ,phases
639 (add-after 'unpack 'disable-network-tests
640 (lambda _ (substitute* "tests/auto/auto.pro"
641 (("qxmlquery") "# qxmlquery")
a20e00dd 642 (("xmlpatterns ") "# xmlpatterns"))
f66b3e15 643 #t))))))
98eec712
EF
644 (native-inputs `(("perl" ,perl)))
645 (inputs `(("qtbase" ,qtbase)))))
646
e3a2ed81
EF
647(define-public qtdeclarative
648 (package (inherit qtsvg)
649 (name "qtdeclarative")
fdaf6cd3 650 (version "5.9.1")
e3a2ed81
EF
651 (source (origin
652 (method url-fetch)
653 (uri (string-append "https://download.qt.io/official_releases/qt/"
654 (version-major+minor version) "/" version
655 "/submodules/" name "-opensource-src-"
656 version ".tar.xz"))
657 (sha256
658 (base32
fdaf6cd3 659 "1zwlxrgraxhlsdkwsai3pjbz7f3a6rsnsg2mjrpay6cz3af6rznj"))))
c195b5ba
EF
660 (arguments
661 (substitute-keyword-arguments (package-arguments qtsvg)
662 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
e3a2ed81
EF
663 (native-inputs
664 `(("perl" ,perl)
665 ("pkg-config" ,pkg-config)
666 ("python" ,python-2)
667 ("qtsvg" ,qtsvg)
668 ("qtxmlpatterns" ,qtxmlpatterns)))
669 (inputs
670 `(("mesa" ,mesa)
671 ("qtbase" ,qtbase)))))
672
e98cb96d
EF
673(define-public qtconnectivity
674 (package (inherit qtsvg)
675 (name "qtconnectivity")
fdaf6cd3 676 (version "5.9.1")
e98cb96d
EF
677 (source (origin
678 (method url-fetch)
679 (uri (string-append "https://download.qt.io/official_releases/qt/"
680 (version-major+minor version) "/" version
681 "/submodules/" name "-opensource-src-"
682 version ".tar.xz"))
683 (sha256
684 (base32
fdaf6cd3 685 "1mbzmqix0388iq20a1ljd1pgdq259rm1xzp9kx8gigqpamqqnqs0"))))
45f5bc0e
EF
686 (arguments
687 (substitute-keyword-arguments (package-arguments qtsvg)
688 ((#:phases phases)
689 `(modify-phases ,phases
690 (add-after 'unpack 'disable-failing-tests
691 ;; this test fails on armhf and aarch64
692 (lambda _
693 (substitute* "tests/auto/qndefnfcsmartposterrecord/tst_qndefnfcsmartposterrecord.cpp"
694 (("QCOMPARE\\(record.action\\(\\), QNdefNfcSmartPosterRecord::UnspecifiedAction")
695 "//QCOMPARE(record.action(), QNdefNfcSmartPosterRecord::UnspecifiedAction"))
696 #t))))))
e98cb96d
EF
697 (native-inputs
698 `(("perl" ,perl)
699 ("pkg-config" ,pkg-config)
700 ("qtdeclarative" ,qtdeclarative)))
701 (inputs
702 `(("bluez" ,bluez)
703 ("qtbase" ,qtbase)))))
704
cac893ec
EF
705(define-public qtwebsockets
706 (package (inherit qtsvg)
707 (name "qtwebsockets")
fdaf6cd3 708 (version "5.9.1")
cac893ec
EF
709 (source (origin
710 (method url-fetch)
711 (uri (string-append "https://download.qt.io/official_releases/qt/"
712 (version-major+minor version) "/" version
713 "/submodules/" name "-opensource-src-"
714 version ".tar.xz"))
715 (sha256
716 (base32
fdaf6cd3 717 "0r1lya2jj3wfci82zfn0vk6vr8sk9k7xiphnkb0panhb8di769q1"))))
c195b5ba
EF
718 (arguments
719 (substitute-keyword-arguments (package-arguments qtsvg)
720 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
cac893ec
EF
721 (native-inputs
722 `(("perl" ,perl)
723 ("qtdeclarative" ,qtdeclarative)))
724 (inputs `(("qtbase" ,qtbase)))))
725
3474767c
EF
726(define-public qtsensors
727 (package (inherit qtsvg)
728 (name "qtsensors")
fdaf6cd3 729 (version "5.9.1")
3474767c
EF
730 (source (origin
731 (method url-fetch)
732 (uri (string-append "https://download.qt.io/official_releases/qt/"
733 (version-major+minor version) "/" version
734 "/submodules/" name "-opensource-src-"
735 version ".tar.xz"))
736 (sha256
737 (base32
fdaf6cd3 738 "1772x7r6y9xv2sv0w2dfz2yhagsq5bpa9kdpzg0qikccmabr7was"))))
202afee2
EF
739 (arguments
740 (substitute-keyword-arguments (package-arguments qtsvg)
741 ((#:phases phases)
742 `(modify-phases ,phases
743 (add-after 'unpack 'lengthen-test-timeout
744 (lambda _
745 (substitute* "tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp"
746 (("2000") "5000"))
747 #t))))))
3474767c
EF
748 (native-inputs
749 `(("perl" ,perl)
750 ("qtdeclarative" ,qtdeclarative)))
751 (inputs `(("qtbase" ,qtbase)))))
752
15378f93
EF
753(define-public qtmultimedia
754 (package (inherit qtsvg)
755 (name "qtmultimedia")
fdaf6cd3 756 (version "5.9.1")
15378f93
EF
757 (source (origin
758 (method url-fetch)
759 (uri (string-append "https://download.qt.io/official_releases/qt/"
760 (version-major+minor version) "/" version
761 "/submodules/" name "-opensource-src-"
762 version ".tar.xz"))
763 (sha256
764 (base32
fdaf6cd3 765 "1r76zvbv6wwb7lgw9jwlx382iyw34i1amxaypb5bg3j1niqvx3z4"))
63d8f08f
EF
766 (modules '((guix build utils)))
767 (snippet
768 '(begin
769 (delete-file-recursively
c195b5ba
EF
770 "examples/multimedia/spectrum/3rdparty")
771 ;; We also prevent the spectrum example from being built.
772 (substitute* "examples/multimedia/multimedia.pro"
773 (("spectrum") "#"))))))
774 (arguments
775 (substitute-keyword-arguments (package-arguments qtsvg)
776 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
15378f93
EF
777 (native-inputs
778 `(("perl" ,perl)
779 ("pkg-config" ,pkg-config)
780 ("python" ,python-2)
781 ("qtdeclarative" ,qtdeclarative)))
782 (inputs
783 `(("alsa-lib" ,alsa-lib)
784 ("mesa" ,mesa)
785 ("pulseaudio" ,pulseaudio)
786 ("qtbase" ,qtbase)))))
787
bc8ede01
EF
788(define-public qtwayland
789 (package (inherit qtsvg)
790 (name "qtwayland")
fdaf6cd3 791 (version "5.9.1")
bc8ede01
EF
792 (source (origin
793 (method url-fetch)
794 (uri (string-append "https://download.qt.io/official_releases/qt/"
795 (version-major+minor version) "/" version
796 "/submodules/" name "-opensource-src-"
797 version ".tar.xz"))
798 (sha256
799 (base32
fdaf6cd3 800 "1yizvbmh26mx1ffq0qaci02g2wihy68ld0y7r3z8nx3v5acb236g"))
924e6ddf
EF
801 (modules '((guix build utils)))
802 (snippet
803 ;; The examples try to build and cause the build to fail
804 '(delete-file-recursively "examples"))))
bc8ede01
EF
805 (native-inputs
806 `(("glib" ,glib)
807 ("perl" ,perl)
808 ("pkg-config" ,pkg-config)
809 ("qtdeclarative" ,qtdeclarative)))
810 (inputs
811 `(("fontconfig" ,fontconfig)
812 ("freetype" ,freetype)
813 ("libx11" ,libx11)
814 ("libxcomposite" ,libxcomposite)
815 ("libxext" ,libxext)
816 ("libxkbcommon" ,libxkbcommon)
817 ("libxrender" ,libxrender)
818 ("mesa" ,mesa)
819 ("mtdev" ,mtdev)
820 ("qtbase" ,qtbase)
821 ("wayland" ,wayland)))))
822
00806f2b
EF
823(define-public qtserialport
824 (package (inherit qtsvg)
825 (name "qtserialport")
fdaf6cd3 826 (version "5.9.1")
00806f2b
EF
827 (source (origin
828 (method url-fetch)
829 (uri (string-append "https://download.qt.io/official_releases/qt/"
830 (version-major+minor version) "/" version
831 "/submodules/" name "-opensource-src-"
832 version ".tar.xz"))
833 (sha256
834 (base32
fdaf6cd3 835 "0sbsc7n701kxl16r247a907zg2afmbx1xlml5jkc6a9956zqbzp1"))))
00806f2b 836 (native-inputs `(("perl" ,perl)))
33741e16
EF
837 (inputs
838 `(("qtbase" ,qtbase)
839 ("eudev" ,eudev)))))
00806f2b 840
a98ffab5
EF
841(define-public qtserialbus
842 (package (inherit qtsvg)
843 (name "qtserialbus")
fdaf6cd3 844 (version "5.9.1")
a98ffab5
EF
845 (source (origin
846 (method url-fetch)
847 (uri (string-append "https://download.qt.io/official_releases/qt/"
848 (version-major+minor version) "/" version
849 "/submodules/" name "-opensource-src-"
850 version ".tar.xz"))
851 (sha256
852 (base32
fdaf6cd3 853 "1hzk377c3zl4dm5hxwvpxg2w096m160448y9df6v6l8xpzpzxafa"))))
a98ffab5
EF
854 (inputs
855 `(("qtbase" ,qtbase)
856 ("qtserialport" ,qtserialport)))))
857
f5377013
EF
858(define-public qtwebchannel
859 (package (inherit qtsvg)
860 (name "qtwebchannel")
fdaf6cd3 861 (version "5.9.1")
f5377013
EF
862 (source (origin
863 (method url-fetch)
864 (uri (string-append "https://download.qt.io/official_releases/qt/"
865 (version-major+minor version) "/" version
866 "/submodules/" name "-opensource-src-"
867 version ".tar.xz"))
868 (sha256
869 (base32
fdaf6cd3 870 "003h09mla82f2znb8jjigx13ivc68ikgv7w04594yy7qdmd5yhl0"))))
f5377013
EF
871 (native-inputs
872 `(("perl" ,perl)
873 ("qtdeclarative" ,qtdeclarative)
874 ("qtwebsockets" ,qtwebsockets)))
875 (inputs `(("qtbase" ,qtbase)))))
876
d5ca54ce
EF
877(define-public qtlocation
878 (package (inherit qtsvg)
879 (name "qtlocation")
fdaf6cd3 880 (version "5.9.1")
d5ca54ce
EF
881 (source (origin
882 (method url-fetch)
883 (uri (string-append "https://download.qt.io/official_releases/qt/"
884 (version-major+minor version) "/" version
885 "/submodules/" name "-opensource-src-"
886 version ".tar.xz"))
887 (sha256
888 (base32
fdaf6cd3 889 "058mgvlaml9rkfhkpr1n3avhi12zlva131sqhbwj4lwwyqfkri2b"))))
c195b5ba
EF
890 (arguments
891 (substitute-keyword-arguments (package-arguments qtsvg)
892 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
d5ca54ce
EF
893 (native-inputs
894 `(("perl" ,perl)
895 ("qtdeclarative" ,qtdeclarative)
9a935ef2 896 ("qtquickcontrols" ,qtquickcontrols)
d5ca54ce 897 ("qtserialport" ,qtserialport)))
924e6ddf
EF
898 (inputs
899 `(("icu4c" ,icu4c)
900 ("openssl" ,openssl)
901 ("qtbase" ,qtbase)
902 ("zlib" ,zlib)))))
d5ca54ce 903
d438c968
EF
904(define-public qttools
905 (package (inherit qtsvg)
906 (name "qttools")
fdaf6cd3 907 (version "5.9.1")
d438c968
EF
908 (source (origin
909 (method url-fetch)
910 (uri (string-append "https://download.qt.io/official_releases/qt/"
911 (version-major+minor version) "/" version
912 "/submodules/" name "-opensource-src-"
913 version ".tar.xz"))
914 (sha256
915 (base32
fdaf6cd3 916 "1s50kh3sg5wc5gqhwwznnibh7jcnfginnmkv66w62mm74k7mdsy4"))))
c195b5ba
EF
917 (arguments
918 (substitute-keyword-arguments (package-arguments qtsvg)
919 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
d438c968
EF
920 (native-inputs
921 `(("perl" ,perl)
922 ("qtdeclarative" ,qtdeclarative)))
923 (inputs
924 `(("mesa" ,mesa)
925 ("qtbase" ,qtbase)))))
926
4742c4de
EF
927(define-public qtscript
928 (package (inherit qtsvg)
929 (name "qtscript")
fdaf6cd3 930 (version "5.9.1")
4742c4de
EF
931 (source (origin
932 (method url-fetch)
933 (uri (string-append "https://download.qt.io/official_releases/qt/"
934 (version-major+minor version) "/" version
935 "/submodules/" name "-opensource-src-"
936 version ".tar.xz"))
937 (sha256
938 (base32
fdaf6cd3 939 "13qq2mjfhqdcvkmzrgxg1gr5kww1ygbwb7r71xxl6rjzbn30hshp"))
7c5cf7a2 940 (patches (search-patches "qtscript-disable-tests.patch"))))
4742c4de
EF
941 (native-inputs
942 `(("perl" ,perl)
943 ("qttools" ,qttools)))
944 (inputs
945 `(("qtbase" ,qtbase)))))
946
ae0e5133
DC
947(define-public qtquickcontrols
948 (package (inherit qtsvg)
949 (name "qtquickcontrols")
fdaf6cd3 950 (version "5.9.1")
ae0e5133
DC
951 (source (origin
952 (method url-fetch)
953 (uri (string-append "https://download.qt.io/official_releases/qt/"
954 (version-major+minor version) "/" version
955 "/submodules/" name "-opensource-src-"
956 version ".tar.xz"))
957 (sha256
958 (base32
fdaf6cd3 959 "0bpc465q822phw3dcbddn70wj1fjlc2hxskkp1z9gl7r23hx03jj"))))
c195b5ba
EF
960 (arguments
961 (substitute-keyword-arguments (package-arguments qtsvg)
962 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
ae0e5133
DC
963 (inputs
964 `(("qtbase" ,qtbase)
965 ("qtdeclarative" ,qtdeclarative)))))
966
42da1492
DC
967(define-public qtquickcontrols2
968 (package (inherit qtsvg)
969 (name "qtquickcontrols2")
fdaf6cd3 970 (version "5.9.1")
42da1492
DC
971 (source (origin
972 (method url-fetch)
973 (uri (string-append "https://download.qt.io/official_releases/qt/"
974 (version-major+minor version) "/" version
975 "/submodules/" name "-opensource-src-"
976 version ".tar.xz"))
977 (sha256
978 (base32
fdaf6cd3 979 "1zq86kqz85wm3n84jcxkxw5x1mrhkqzldkigf8xm3l8j24rf0fr0"))))
c195b5ba
EF
980 (arguments
981 (substitute-keyword-arguments (package-arguments qtsvg)
982 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
42da1492
DC
983 (inputs
984 `(("qtbase" ,qtbase)
985 ("qtdeclarative" ,qtdeclarative)))))
986
4e4ed0ee
DC
987(define-public qtgraphicaleffects
988 (package (inherit qtsvg)
989 (name "qtgraphicaleffects")
fdaf6cd3 990 (version "5.9.1")
4e4ed0ee
DC
991 (source (origin
992 (method url-fetch)
993 (uri (string-append "https://download.qt.io/official_releases/qt/"
994 (version-major+minor version) "/" version
995 "/submodules/" name "-opensource-src-"
996 version ".tar.xz"))
997 (sha256
998 (base32
fdaf6cd3 999 "1zsr3a5dsmpvrb5h4m4h42wqmkvkks3d8mmyrx4k0mfr6s7c71jz"))))
c195b5ba
EF
1000 (arguments
1001 (substitute-keyword-arguments (package-arguments qtsvg)
1002 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
4e4ed0ee
DC
1003 (inputs
1004 `(("qtbase" ,qtbase)
1005 ("qtdeclarative" ,qtdeclarative)))))
1006
843bdfb7 1007(define-public qtdeclarative-render2d
a20e00dd 1008 ;; As of Qt-5.8.0 this module has been merged into qtdeclarative
843bdfb7
EF
1009 (package (inherit qtsvg)
1010 (name "qtdeclarative-render2d")
1011 (version "5.7.1")
1012 (source (origin
1013 (method url-fetch)
1014 (uri (string-append "https://download.qt.io/official_releases/qt/"
1015 (version-major+minor version) "/" version
1016 "/submodules/" name "-opensource-src-"
1017 version ".tar.xz"))
1018 (sha256
1019 (base32
1020 "0zwch9vn17f3bpy300jcfxx6cx9qymk5j7khx0x9k1xqid4166c3"))
1021 (modules '((guix build utils)))
1022 (snippet
1023 '(delete-file-recursively "tools/opengldummy/3rdparty"))))
1024 (native-inputs `())
1025 (inputs
1026 `(("qtbase" ,qtbase)
a20e00dd
EF
1027 ("qtdeclarative" ,qtdeclarative)))
1028 (properties `((superseded . ,qtdeclarative)))))
843bdfb7 1029
51519fd3
EF
1030(define-public qtgamepad
1031 (package (inherit qtsvg)
1032 (name "qtgamepad")
fdaf6cd3 1033 (version "5.9.1")
51519fd3
EF
1034 (source (origin
1035 (method url-fetch)
1036 (uri (string-append "https://download.qt.io/official_releases/qt/"
1037 (version-major+minor version) "/" version
1038 "/submodules/" name "-opensource-src-"
1039 version ".tar.xz"))
1040 (sha256
1041 (base32
fdaf6cd3 1042 "055w4649zi93q1sl32ngqwgnl2vxw1idnm040s9gjgjb67gi81zi"))))
51519fd3
EF
1043 (native-inputs
1044 `(("perl" ,perl)
1045 ("pkg-config" ,pkg-config)))
1046 (inputs
1047 `(("fontconfig" ,fontconfig)
1048 ("freetype" ,freetype)
1049 ("libxrender" ,libxrender)
1050 ("sdl2" ,sdl2)
1051 ("qtbase" ,qtbase)
1052 ("qtdeclarative" ,qtdeclarative)))))
1053
56cd88fd
EF
1054(define-public qtscxml
1055 (package (inherit qtsvg)
1056 (name "qtscxml")
fdaf6cd3 1057 (version "5.9.1")
56cd88fd
EF
1058 (source (origin
1059 (method url-fetch)
1060 (uri (string-append "https://download.qt.io/official_releases/qt/"
1061 (version-major+minor version) "/" version
1062 "/submodules/" name "-opensource-src-"
1063 version ".tar.xz"))
1064 (sha256
1065 (base32
fdaf6cd3 1066 "1m3b6wg5hqasdfc5igpj9bq3czql5kkvvn3rx1ig508kdlh5i5s0"))
56cd88fd
EF
1067 (modules '((guix build utils)))
1068 (snippet
c195b5ba
EF
1069 '(begin
1070 (delete-file-recursively "tests/3rdparty")
1071 ;; the scion test refers to the bundled 3rd party test code.
1072 (substitute* "tests/auto/auto.pro"
1073 (("scion") "#"))))))
56cd88fd
EF
1074 (inputs
1075 `(("qtbase" ,qtbase)
1076 ("qtdeclarative" ,qtdeclarative)))))
1077
de5e0180
EF
1078(define-public qtpurchasing
1079 (package (inherit qtsvg)
1080 (name "qtpurchasing")
fdaf6cd3 1081 (version "5.9.1")
de5e0180
EF
1082 (source (origin
1083 (method url-fetch)
1084 (uri (string-append "https://download.qt.io/official_releases/qt/"
1085 (version-major+minor version) "/" version
1086 "/submodules/" name "-opensource-src-"
1087 version ".tar.xz"))
1088 (sha256
1089 (base32
fdaf6cd3 1090 "0b1hlaq6rb7d6b6h8kqd26klcpzf9vcdjrv610kdj0drb00jg3ss"))))
de5e0180
EF
1091 (inputs
1092 `(("qtbase" ,qtbase)
1093 ("qtdeclarative" ,qtdeclarative)))))
1094
173b54b9
EF
1095(define-public qtcanvas3d
1096 (package (inherit qtsvg)
1097 (name "qtcanvas3d")
fdaf6cd3 1098 (version "5.9.1")
173b54b9
EF
1099 (source (origin
1100 (method url-fetch)
1101 (uri (string-append "https://download.qt.io/official_releases/qt/"
1102 (version-major+minor version) "/" version
1103 "/submodules/" name "-opensource-src-"
1104 version ".tar.xz"))
1105 (sha256
1106 (base32
fdaf6cd3 1107 "10fy8wqfw2yhha6lyky5g1a72137aj8pji7mk0wjnggh629z12sb"))
173b54b9
EF
1108 (modules '((guix build utils)))
1109 (snippet
1110 '(delete-file-recursively "examples/canvas3d/3rdparty"))))
c195b5ba
EF
1111 (arguments
1112 (substitute-keyword-arguments (package-arguments qtsvg)
1113 ;; Building the tests depends on the bundled 3rd party javascript files,
1114 ;; and the test phase fails to import QtCanvas3D, causing the phase to
1115 ;; fail, so we skip building them for now.
1116 ((#:phases phases)
1117 `(modify-phases ,phases
1118 (replace 'configure
1119 (lambda* (#:key outputs #:allow-other-keys)
1120 (let ((out (assoc-ref outputs "out")))
1121 (zero? (system* "qmake" "QT_BUILD_PARTS = libs tools"
1122 (string-append "PREFIX=" out))))))))
1123 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
173b54b9
EF
1124 (native-inputs `())
1125 (inputs
1126 `(("qtbase" ,qtbase)
1127 ("qtdeclarative" ,qtdeclarative)))))
1128
68bbe14b
EF
1129(define-public qtcharts
1130 (package (inherit qtsvg)
1131 (name "qtcharts")
fdaf6cd3 1132 (version "5.9.1")
68bbe14b
EF
1133 (source (origin
1134 (method url-fetch)
1135 (uri (string-append "https://download.qt.io/official_releases/qt/"
1136 (version-major+minor version) "/" version
1137 "/submodules/" name "-opensource-src-"
1138 version ".tar.xz"))
1139 (sha256
1140 (base32
fdaf6cd3 1141 "180df5v7i1ki8hc3lgi6jcfdyz7f19pb73dvfkw402wa2gfcna3k"))))
c195b5ba
EF
1142 (arguments
1143 (substitute-keyword-arguments (package-arguments qtsvg)
1144 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
68bbe14b
EF
1145 (inputs
1146 `(("qtbase" ,qtbase)
1147 ("qtdeclarative" ,qtdeclarative)))))
1148
a69945a7
EF
1149(define-public qtdatavis3d
1150 (package (inherit qtsvg)
1151 (name "qtdatavis3d")
fdaf6cd3 1152 (version "5.9.1")
a69945a7
EF
1153 (source (origin
1154 (method url-fetch)
1155 (uri (string-append "https://download.qt.io/official_releases/qt/"
1156 (version-major+minor version) "/" version
1157 "/submodules/" name "-opensource-src-"
1158 version ".tar.xz"))
1159 (sha256
1160 (base32
fdaf6cd3 1161 "14d1q07winh6n1bkc616dapwfnsfkcjyg5zngdqjdj9mza8ang13"))))
c195b5ba
EF
1162 (arguments
1163 (substitute-keyword-arguments (package-arguments qtsvg)
1164 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
a69945a7
EF
1165 (inputs
1166 `(("qtbase" ,qtbase)
1167 ("qtdeclarative" ,qtdeclarative)))))
1168
84ef83dd
AE
1169(define-public python-sip
1170 (package
1171 (name "python-sip")
f6da41b5 1172 (version "4.19.2")
84ef83dd
AE
1173 (source
1174 (origin
1175 (method url-fetch)
1176 (uri
1177 (string-append "mirror://sourceforge/pyqt/sip/"
8fa7f8d9 1178 "sip-" version "/sip-" version ".tar.gz"))
84ef83dd
AE
1179 (sha256
1180 (base32
f6da41b5 1181 "0cq5r21fmjyw5v7a6l4sfbaj3zgm7k5b2cryj6bnjki54nnllas3"))))
84ef83dd
AE
1182 (build-system gnu-build-system)
1183 (native-inputs
1184 `(("python" ,python-wrapper)))
1185 (arguments
1186 `(#:tests? #f ; no check target
e8bdd73a
AE
1187 #:modules ((srfi srfi-1)
1188 ,@%gnu-build-system-modules)
84ef83dd 1189 #:phases
39766868
EF
1190 (modify-phases %standard-phases
1191 (replace 'configure
1192 (lambda* (#:key inputs outputs #:allow-other-keys)
1193 (let* ((out (assoc-ref outputs "out"))
1194 (bin (string-append out "/bin"))
1195 (include (string-append out "/include"))
1196 (python (assoc-ref inputs "python"))
1197 (python-version
1198 (last (string-split python #\-)))
1199 (python-major+minor
1200 (string-join
1201 (take (string-split python-version #\.) 2)
1202 "."))
1203 (lib (string-append out "/lib/python"
1204 python-major+minor
1205 "/site-packages")))
1206 (zero?
1207 (system* "python" "configure.py"
1208 "--bindir" bin
1209 "--destdir" lib
1210 "--incdir" include))))))))
1211 (home-page "https://www.riverbankcomputing.com/software/sip/intro")
84ef83dd
AE
1212 (synopsis "Python binding creator for C and C++ libraries")
1213 (description
1214 "SIP is a tool to create Python bindings for C and C++ libraries. It
1215was originally developed to create PyQt, the Python bindings for the Qt
1216toolkit, but can be used to create bindings for any C or C++ library.
1217
1218SIP comprises a code generator and a Python module. The code generator
1219processes a set of specification files and generates C or C++ code, which
1220is then compiled to create the bindings extension module. The SIP Python
1221module provides support functions to the automatically generated code.")
1222 ;; There is a choice between a python like license, gpl2 and gpl3.
1223 ;; For compatibility with pyqt, we need gpl3.
225941b0 1224 (license license:gpl3)))
84ef83dd
AE
1225
1226(define-public python2-sip
1227 (package (inherit python-sip)
1228 (name "python2-sip")
1229 (native-inputs
1230 `(("python" ,python-2)))))
014e7dd8
AE
1231
1232(define-public python-pyqt
1233 (package
1234 (name "python-pyqt")
5ac3a671 1235 (version "5.8.2")
014e7dd8
AE
1236 (source
1237 (origin
1238 (method url-fetch)
1239 (uri
1240 (string-append "mirror://sourceforge/pyqt/PyQt5/"
2be06813 1241 "PyQt-" version "/PyQt5_gpl-"
014e7dd8
AE
1242 version ".tar.gz"))
1243 (sha256
1244 (base32
5ac3a671 1245 "1s1nalcspam9dc7f63jkqn1i2sv9lrqn57p2zsc61g8bncahbmzb"))
fc1adab1 1246 (patches (search-patches "pyqt-configure.patch"))))
014e7dd8
AE
1247 (build-system gnu-build-system)
1248 (native-inputs
499991cf
EB
1249 `(("qtbase" ,qtbase))) ; for qmake
1250 (propagated-inputs
1251 `(("python-sip" ,python-sip)))
014e7dd8 1252 (inputs
e9adcd81
EF
1253 `(("python" ,python-wrapper)
1254 ("qtbase" ,qtbase)
1255 ("qtconnectivity" ,qtconnectivity)
1256 ("qtdeclarative" ,qtdeclarative)
1257 ("qtlocation" ,qtlocation)
1258 ("qtmultimedia" ,qtmultimedia)
1259 ("qtsensors" ,qtsensors)
1260 ("qtserialport" ,qtserialport)
1261 ("qtsvg" ,qtsvg)
1262 ("qttools" ,qttools)
1263 ("qtwebchannel" ,qtwebchannel)
1264 ("qtwebkit" ,qtwebkit)
1265 ("qtwebsockets" ,qtwebsockets)
1266 ("qtx11extras" ,qtx11extras)
1267 ("qtxmlpatterns" ,qtxmlpatterns)))
014e7dd8 1268 (arguments
e8bdd73a
AE
1269 `(#:modules ((srfi srfi-1)
1270 ,@%gnu-build-system-modules)
1271 #:phases
eef988c8
EF
1272 (modify-phases %standard-phases
1273 (replace 'configure
1274 (lambda* (#:key inputs outputs #:allow-other-keys)
1275 (let* ((out (assoc-ref outputs "out"))
1276 (bin (string-append out "/bin"))
1277 (sip (string-append out "/share/sip"))
1278 (plugins (string-append out "/plugins"))
1279 (designer (string-append plugins "/designer"))
1280 (qml (string-append plugins "/PyQt5"))
1281 (python (assoc-ref inputs "python"))
1282 (python-version
1283 (last (string-split python #\-)))
1284 (python-major+minor
1285 (string-join
1286 (take (string-split python-version #\.) 2)
1287 "."))
1288 (lib (string-append out "/lib/python"
1289 python-major+minor
43e8824d
HG
1290 "/site-packages"))
1291 (stubs (string-append lib "/PyQt5")))
eef988c8
EF
1292 (zero? (system* "python" "configure.py"
1293 "--confirm-license"
1294 "--bindir" bin
1295 "--destdir" lib
1296 "--designer-plugindir" designer
1297 "--qml-plugindir" qml
43e8824d
HG
1298 ; Where to install the PEP 484 Type Hints stub
1299 ; files. Without this the stubs are tried to be
1300 ; installed into the python package's
1301 ; site-package directory, which is read-only.
1302 "--stubsdir" stubs
eef988c8
EF
1303 "--sipdir" sip))))))))
1304 (home-page "https://www.riverbankcomputing.com/software/pyqt/intro")
014e7dd8
AE
1305 (synopsis "Python bindings for Qt")
1306 (description
1307 "PyQt is a set of Python v2 and v3 bindings for the Qt application
1308framework. The bindings are implemented as a set of Python modules and
1309contain over 620 classes.")
225941b0 1310 (license license:gpl3)))
014e7dd8
AE
1311
1312(define-public python2-pyqt
1313 (package (inherit python-pyqt)
1314 (name "python2-pyqt")
1315 (native-inputs
1316 `(("python-sip" ,python2-sip)
2be06813 1317 ("qtbase" ,qtbase)))
014e7dd8 1318 (inputs
e9adcd81
EF
1319 `(("python" ,python-2)
1320 ,@(alist-delete "python" (package-inputs python-pyqt))))))
3e291958
AE
1321
1322(define-public python-pyqt-4
1323 (package (inherit python-pyqt)
1324 (name "python-pyqt")
41fa164a 1325 (version "4.12")
3e291958
AE
1326 (source
1327 (origin
1328 (method url-fetch)
1329 (uri
1330 (string-append "mirror://sourceforge/pyqt/PyQt4/"
41fa164a 1331 "PyQt-" version "/PyQt4_gpl_x11-"
3e291958
AE
1332 version ".tar.gz"))
1333 (sha256
1334 (base32
41fa164a 1335 "1nw8r88a5g2d550yvklawlvns8gd5slw53yy688kxnsa65aln79w"))))
3e291958
AE
1336 (native-inputs
1337 `(("python-sip" ,python-sip)
1338 ("qt" ,qt-4)))
e9adcd81 1339 (inputs `(("python" ,python-wrapper)))
3e291958
AE
1340 (arguments
1341 `(#:tests? #f ; no check target
e8bdd73a
AE
1342 #:modules ((srfi srfi-1)
1343 ,@%gnu-build-system-modules)
3e291958 1344 #:phases
f9513086
EF
1345 (modify-phases %standard-phases
1346 (replace 'configure
1347 (lambda* (#:key inputs outputs #:allow-other-keys)
1348 (let* ((out (assoc-ref outputs "out"))
1349 (bin (string-append out "/bin"))
1350 (sip (string-append out "/share/sip"))
1351 (python (assoc-ref inputs "python"))
1352 (python-version
1353 (last (string-split python #\-)))
1354 (python-major+minor
1355 (string-join
1356 (take (string-split python-version #\.) 2)
1357 "."))
1358 (lib (string-append out "/lib/python"
1359 python-major+minor
1360 "/site-packages")))
1361 (zero? (system* "python" "configure.py"
1362 "--confirm-license"
1363 "--bindir" bin
1364 "--destdir" lib
1365 "--sipdir" sip))))))))
225941b0 1366 (license (list license:gpl2 license:gpl3)))) ; choice of either license
3e291958 1367
6d8e14d0 1368(define-public python2-pyqt-4
1369 (package (inherit python-pyqt-4)
9fde8778 1370 (name "python2-pyqt")
6d8e14d0 1371 (native-inputs
1372 `(("python-sip" ,python2-sip)
1373 ("qt" ,qt-4)))
1374 (inputs
1375 `(("python" ,python-2)))))
1376
9e81af9e
EF
1377(define-public qtkeychain
1378 (package
1379 (name "qtkeychain")
4ad70ad8 1380 (version "0.8.0")
9e81af9e
EF
1381 (source
1382 (origin
1383 (method url-fetch)
1384 (uri (string-append "https://github.com/frankosterfeld/qtkeychain/"
1385 "archive/v" version ".tar.gz"))
1386 (file-name (string-append name "-" version ".tar.gz"))
1387 (sha256
4ad70ad8 1388 (base32 "0bxi5pfhxdvwk8yxa06lk2d7lcibmfqhahbin82bqf3m341zd4ml"))))
9e81af9e 1389 (build-system cmake-build-system)
18174d8a
DC
1390 (native-inputs
1391 `(("qttools" ,qttools)))
9e81af9e 1392 (inputs
18174d8a 1393 `(("qtbase" ,qtbase)))
9e81af9e
EF
1394 (arguments
1395 `(#:tests? #f ; No tests included
1396 #:phases
1397 (modify-phases %standard-phases
1398 (add-before
1399 'configure 'set-qt-trans-dir
1400 (lambda _
1401 (substitute* "CMakeLists.txt"
1402 (("\\$\\{qt_translations_dir\\}")
4ad70ad8
EF
1403 "${CMAKE_INSTALL_PREFIX}/share/qt/translations"))
1404 #t)))))
9e81af9e
EF
1405 (home-page "https://github.com/frankosterfeld/qtkeychain")
1406 (synopsis "Qt API to store passwords")
1407 (description
1408 "QtKeychain is a Qt library to store passwords and other secret data
1409securely. It will not store any data unencrypted unless explicitly requested.")
225941b0 1410 (license license:bsd-3)))
fc381a33
TD
1411
1412(define-public qwt
1413 (package
1414 (name "qwt")
1415 (version "6.1.3")
1416 (source
1417 (origin
1418 (method url-fetch)
1419 (uri
1420 (string-append "mirror://sourceforge/qwt/qwt/"
1421 version "/qwt-" version ".tar.bz2"))
1422 (sha256
1423 (base32 "0cwp63s03dw351xavb3pzbjlqvx7kj88wv7v4a2b18m9f97d7v7k"))))
1424 (build-system gnu-build-system)
1425 (inputs
1426 `(("qtbase" ,qtbase)
1427 ("qtsvg" ,qtsvg)
1428 ("qttools" ,qttools)))
1429 (arguments
1430 `(#:phases
1431 (modify-phases %standard-phases
1432 (replace 'configure
1433 (lambda* (#:key outputs #:allow-other-keys)
1434 (let ((out (assoc-ref outputs "out")))
1435 (substitute* '("qwtconfig.pri")
1436 (("/usr/local/qwt-\\$\\$QWT\\_VERSION") out))
1437 (zero? (system* "qmake")))))
1438 (add-after 'install 'install-documentation
1439 (lambda* (#:key outputs #:allow-other-keys)
1440 (let* ((out (assoc-ref outputs "out"))
1441 (man (string-append out "/share/man")))
1442 ;; Remove some incomplete manual pages.
1443 (for-each delete-file (find-files "doc/man/man3" "^_tmp.*"))
1444 (mkdir-p man)
1445 (copy-recursively "doc/man" man)
1446 #t))))))
1447 (home-page "http://qwt.sourceforge.net")
1448 (synopsis "Qt widgets for plots, scales, dials and other technical software
1449GUI components")
1450 (description
1451 "The Qwt library contains widgets and components which are primarily useful
1452for technical and scientific purposes. It includes a 2-D plotting widget,
1453different kinds of sliders, and much more.")
1454 (license
1455 (list
1456 ;; The Qwt license is LGPL2.1 with some exceptions.
1457 (license:non-copyleft "http://qwt.sourceforge.net/qwtlicense.html")
1458 ;; textengines/mathml/qwt_mml_document.{cpp,h} is dual LGPL2.1/GPL3 (either).
1459 license:lgpl2.1 license:gpl3))))
47e1d280
TD
1460
1461(define-public qtwebkit
1462 (package
1463 (name "qtwebkit")
fdaf6cd3 1464 (version "5.9.1")
47e1d280
TD
1465 (source
1466 (origin
1467 (method url-fetch)
fdaf6cd3
EF
1468 (uri (string-append "https://download.qt.io/official_releases/qt/"
1469 (version-major+minor version) "/" version
1470 "/submodules/" name "-opensource-src-"
a20e00dd 1471 version ".tar.xz"))
47e1d280
TD
1472 (sha256
1473 (base32
fdaf6cd3 1474 "1ksjn1vjbfhdm4y4rg08ag4krk87ahp7qcdcpwll42l0rnz61998"))))
47e1d280
TD
1475 (build-system gnu-build-system)
1476 (native-inputs
1477 `(("perl" ,perl)
1478 ("python" ,python-2.7)
1479 ("ruby" ,ruby)
1480 ("bison" ,bison)
1481 ("flex" ,flex)
1482 ("gperf" ,gperf)
1483 ("pkg-config" ,pkg-config)))
1484 (inputs
1485 `(("icu" ,icu4c)
1486 ("libjpeg" ,libjpeg)
1487 ("libpng" ,libpng)
1488 ("libwebp" ,libwebp)
1489 ("sqlite" ,sqlite)
1490 ("fontconfig" ,fontconfig)
1491 ("libxrender", libxrender)
1492 ("qtbase" ,qtbase)
1493 ("qtdeclarative" ,qtdeclarative)
1494 ("qtmultimedia" ,qtmultimedia)
1495 ("libxml2" ,libxml2)
1496 ("libxslt" ,libxslt)
1497 ("libx11" ,libx11)
1498 ("libxcomposite" ,libxcomposite)))
1499 (arguments
1500 `(#:phases
1501 (modify-phases %standard-phases
1502 (replace 'configure
1503 (lambda* (#:key outputs #:allow-other-keys)
1504 (let ((out (assoc-ref outputs "out")))
1505 (setenv "QMAKEPATH"
1506 (string-append (getcwd) "/Tools/qmake:"
1507 (getenv "QMAKEPATH")))
1508 (system* "qmake"))))
1509 ;; prevent webkit from trying to install into the qtbase store directory,
1510 ;; and replace references to the build directory in linker options:
1511 (add-before 'build 'patch-installpaths
1512 (lambda* (#:key outputs inputs #:allow-other-keys)
1513 (let* ((out (assoc-ref outputs "out"))
1514 (qtbase (assoc-ref inputs "qtbase"))
1515 (builddir (getcwd))
1516 (linkbuild (string-append "-L" builddir))
1517 (linkout (string-append "-L" out))
1518 (makefiles
1519 (map-in-order
1520 (lambda (i)
1521 (let* ((in (car i))
1522 (mf (string-append (dirname in) "/"
1523 (cdr i))))
1524 ;; by default, these Makefiles are
1525 ;; generated during install, but we need
1526 ;; to generate them now
1527 (system* "qmake" in "-o" mf)
1528 mf))
1529 '(("Source/api.pri" . "Makefile.api")
1530 ("Source/widgetsapi.pri"
1531 . "Makefile.widgetsapi")
1532 ("Source/WebKit2/WebProcess.pro"
1533 . "Makefile.WebProcess")
1534 ("Source/WebKit2/PluginProcess.pro"
1535 . "Makefile.PluginProcess")
1536 ("Source/WebKit/qt/declarative/public.pri"
1537 . "Makefile.declarative.public")
1538 ("Source/WebKit/qt/declarative/experimental/experimental.pri"
1539 . "Makefile.declarative.experimental")
1540 ("Source/WebKit/qt/examples/platformplugin/platformplugin.pro"
1541 . "Makefile")))))
1542 ;; Order of qmake calls and substitutions matters here.
1543 (system* "qmake" "-prl" "Source/widgetsapi.pri"
1544 "-o" "Source/Makefile")
1545 (substitute* (find-files "lib" "libQt5.*\\.prl")
1546 ((linkbuild) linkout))
1547 (substitute* (find-files "lib"
1548 "libQt5WebKit.*\\.la")
1549 (("libdir='.*'")
1550 (string-append "libdir='" out "/lib'"))
1551 ((linkbuild) linkout))
1552 (substitute* (find-files "lib/pkgconfig"
1553 "Qt5WebKit.*\\.pc")
1554 (((string-append "prefix=" qtbase))
1555 (string-append "prefix=" out))
1556 ((linkbuild) linkout))
1557 ;; Makefiles must be modified after .prl/.la/.pc
1558 ;; files, lest they get rebuilt:
1559 (substitute* makefiles
1560 (((string-append "\\$\\(INSTALL_ROOT\\)" qtbase))
1561 out )
1562 (((string-append "-Wl,-rpath," builddir))
1563 (string-append "-Wl,-rpath," out)))))))))
1564 (home-page "https://www.webkit.org")
1565 (synopsis "Web browser engine and classes to render and interact with web
1566content")
1567 (description "QtWebKit provides a Web browser engine that makes it easy to
1568embed content from the World Wide Web into your Qt application. At the same
1569time Web content can be enhanced with native controls.")
1570
1571 (license license:lgpl2.1+)))
f048f12b 1572
1573(define-public dotherside
1574 (package
1575 (name "dotherside")
1576 (version "0.5.2")
1577 (source
1578 (origin
1579 (method url-fetch)
1580 (uri (string-append "https://github.com/filcuc/DOtherSide/"
1581 "archive/v" version ".tar.gz"))
1582 (file-name (string-append name "-" version ".tar.gz"))
1583 (sha256
1584 (base32
1585 "0pqlrvy4ajjir80ra79ka3n0rjj0ir0f0m91cq86iz3nnw8w148z"))))
1586 (build-system cmake-build-system)
1587 (native-inputs
1588 `(("qttools" ,qttools)))
1589 (inputs
1590 `(("qtbase" ,qtbase)
1591 ("qtdeclarative" ,qtdeclarative)))
1592 (home-page "https://github.com/frankosterfeld/qtkeychain")
1593 (synopsis "C language library for creating bindings for the Qt QML language")
1594 (description
1595 "DOtherSide is a C language library for creating bindings for the
1596QT QML language. The following features are implementable from
1597a binding language:
1598@itemize
1599@item Creating custom QObject
1600@item Creating custom QAbstractListModels
1601@item Creating custom properties, signals and slots
1602@item Creating from QML QObject defined in the binded language
1603@item Creating from Singleton QML QObject defined in the binded language
1604@end itemize\n")
1605 (license license:lgpl3))) ;version 3 only (+ exception)