summaryrefslogtreecommitdiff
path: root/gnu/packages/qt.scm
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2020-01-11 22:38:24 +0100
committerMarius Bakke <mbakke@fastmail.com>2020-01-11 22:38:24 +0100
commitb7bf02a418e946b610ef68e8c5131f2350835956 (patch)
tree6d84387279b9870dc0b151bb9d3dce7f9d9de73d /gnu/packages/qt.scm
parent233c1be0a30846f6646b1f4edc6257037d0835fc (diff)
parent13efb24850bc40fab2448771c87c77c9a69fc231 (diff)
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu/packages/qt.scm')
-rw-r--r--gnu/packages/qt.scm332
1 files changed, 328 insertions, 4 deletions
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 4036b27b4a..d35dfb6a0b 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -11,8 +11,9 @@
;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2018 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018 John Soo <jsoo1@asu.edu>
+;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -46,36 +47,48 @@
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
#:use-module (gnu packages cups)
+ #:use-module (gnu packages curl)
#:use-module (gnu packages databases)
#:use-module (gnu packages documentation)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages flex)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages ghostscript)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
+ #:use-module (gnu packages gnupg)
#:use-module (gnu packages gperf)
#:use-module (gnu packages gstreamer)
#:use-module (gnu packages gtk)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages image)
+ #:use-module (gnu packages libevent)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
#:use-module (gnu packages maths)
+ #:use-module (gnu packages ninja)
#:use-module (gnu packages nss)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages protobuf)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages regex)
#:use-module (gnu packages ruby)
#:use-module (gnu packages sdl)
+ #:use-module (gnu packages serialization)
#:use-module (gnu packages sqlite)
+ #:use-module (gnu packages telephony)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages valgrind)
+ #:use-module (gnu packages video)
#:use-module (gnu packages vulkan)
#:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xiph)
#:use-module (gnu packages xorg)
#:use-module (gnu packages xml)
#:use-module (srfi srfi-1))
@@ -723,6 +736,7 @@ from within Qt 5.")))
"1l44476ibb8rv4rf80vbjdc3712lmrl1xcxswa513ip66k47p5vn"))))
(arguments
(substitute-keyword-arguments (package-arguments qtsvg)
+ ((#:tests? _ #f) #f) ; TODO: Enable the tests
((#:phases phases)
`(modify-phases ,phases
(add-after 'unpack 'disable-network-tests
@@ -730,7 +744,8 @@ from within Qt 5.")))
(("qxmlquery") "# qxmlquery")
(("xmlpatterns ") "# xmlpatterns"))
#t))))))
- (native-inputs `(("perl" ,perl)))
+ (native-inputs `(("perl" ,perl)
+ ("qtdeclarative" ,qtdeclarative)))
(inputs `(("qtbase" ,qtbase)))
(synopsis "Qt XML patterns module")
(description "The QtXmlPatterns module is a XQuery and XPath engine for
@@ -758,8 +773,7 @@ xmlpatternsvalidator.")))
("pkg-config" ,pkg-config)
("python" ,python)
("python-wrapper" ,python-wrapper)
- ("qtsvg" ,qtsvg)
- ("qtxmlpatterns" ,qtxmlpatterns)))
+ ("qtsvg" ,qtsvg)))
(inputs
`(("mesa" ,mesa)
("qtbase" ,qtbase)))
@@ -1501,6 +1515,7 @@ processes or computers.")))
(sha256
(base32
"12l7rycjfa6d9gnnjd6i097pf1qqzjnz9c1jgxhpldvkf0n7pbi7"))))
+
(arguments
(substitute-keyword-arguments (package-arguments qtsvg)
((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -1520,6 +1535,315 @@ the end-user is driving and cannot attend the incoming messages on the phone.
In such a scenario, the messaging application can read out the incoming
message.")))
+(define-public qtwebengine
+ (package
+ (inherit qtsvg)
+ (name "qtwebengine")
+ (version (package-version qtbase))
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://download.qt.io/official_releases/qt/"
+ (version-major+minor version) "/" version
+ "/submodules/" name "-everywhere-src-"
+ version ".tar.xz"))
+ (sha256
+ (base32 "08c60nh95m98mcqk444axs76xi6m9x0wvdxrzk9c2cxwqdbz59fa"))
+ (modules '((ice-9 ftw)
+ (ice-9 match)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (guix build utils)))
+ (snippet
+ '(begin
+ (let ((preserved-third-party-files
+ '("base/third_party/dmg_fp"
+ "base/third_party/dynamic_annotations"
+ "base/third_party/icu"
+ "base/third_party/libevent"
+ "base/third_party/nspr"
+ "base/third_party/superfasthash"
+ "base/third_party/symbolize"
+ "base/third_party/xdg_mime"
+ "base/third_party/xdg_user_dirs"
+ "net/third_party/http2"
+ "net/third_party/mozilla_security_manager"
+ "net/third_party/nss"
+ "net/third_party/spdy"
+ "net/third_party/quic"
+ "third_party/abseil-cpp"
+ "third_party/angle"
+ "third_party/angle/src/common/third_party/base"
+ "third_party/angle/src/common/third_party/smhasher"
+ "third_party/angle/src/third_party/compiler"
+ "third_party/blink"
+ "third_party/boringssl"
+ "third_party/boringssl/src/third_party/fiat"
+ "third_party/breakpad"
+ "third_party/brotli"
+ "third_party/ced"
+ "third_party/crc32c"
+ "third_party/ffmpeg"
+ "third_party/googletest"
+ "third_party/hunspell"
+ "third_party/iccjpeg"
+ "third_party/icu"
+ "third_party/inspector_protocol"
+ "third_party/jinja2"
+ "third_party/jstemplate"
+ "third_party/khronos"
+ "third_party/leveldatabase"
+ "third_party/libaddressinput"
+ "third_party/libjingle_xmpp"
+ "third_party/libpng"
+ "third_party/libsrtp"
+ "third_party/libsync"
+ "third_party/libudev"
+ "third_party/libvpx"
+ "third_party/libwebm"
+ "third_party/libwebp"
+ "third_party/libxml"
+ "third_party/libxslt"
+ "third_party/libyuv"
+ "third_party/lss"
+ "third_party/markupsafe"
+ "third_party/mesa"
+ "third_party/metrics_proto"
+ "third_party/modp_b64"
+ "third_party/opus"
+ "third_party/ots"
+ "third_party/ply"
+ "third_party/polymer"
+ "third_party/protobuf"
+ "third_party/pyjson5"
+ "third_party/re2"
+ "third_party/rnnoise"
+ "third_party/skia"
+ "third_party/skia/third_party/gif"
+ "third_party/skia/third_party/skcms"
+ "third_party/smhasher"
+ "third_party/snappy"
+ "third_party/sqlite"
+ "third_party/usrsctp"
+ "third_party/web-animations-js"
+ "third_party/webrtc"
+ "third_party/webrtc_overrides"
+ "third_party/widevine/cdm/widevine_cdm_common.h"
+ "third_party/widevine/cdm/widevine_cdm_version.h"
+ "third_party/woff2"
+ "third_party/yasm"
+ "third_party/zlib"
+ "url/third_party/mozilla"
+ "v8/src/third_party/utf8-decoder"
+ "v8/src/third_party/valgrind"
+ "v8/third_party/antlr4"
+ "v8/third_party/inspector_protocol"))
+ (protected (make-regexp "\\.(gn|gyp)i?$")))
+ (define preserved-club
+ (map (lambda (member)
+ (string-append "./" member))
+ preserved-third-party-files))
+ (define (empty? dir)
+ (equal? (scandir dir) '("." "..")))
+ (define (third-party? file)
+ (string-contains file "third_party/"))
+ (define (useless? file)
+ (any (cute string-suffix? <> file)
+ '(".zip" ".so" ".dll" ".exe" ".jar")))
+ (define (parents child)
+ ;; Return all parent directories of CHILD up to and including
+ ;; the closest "third_party".
+ (let* ((dirs (match (string-split child #\/)
+ ((dirs ... last) dirs)))
+ (closest (list-index (lambda (dir)
+ (string=? "third_party" dir))
+ (reverse dirs)))
+ (delim (- (length dirs) closest)))
+ (fold (lambda (dir prev)
+ (cons (string-append (car prev) "/" dir)
+ prev))
+ (list (string-join (list-head dirs delim) "/"))
+ (list-tail dirs delim))))
+ (define (remove-loudly file)
+ (format #t "deleting ~a...~%" file)
+ (force-output)
+ (delete-file file))
+ (define (delete-unwanted-files child stat flag base level)
+ (match flag
+ ((or 'regular 'symlink 'stale-symlink)
+ (when (third-party? child)
+ (unless (or (member child preserved-club)
+ (any (cute member <> preserved-club)
+ (parents child))
+ (regexp-exec protected child))
+ (remove-loudly child)))
+ (when (and (useless? child) (file-exists? child))
+ (remove-loudly child))
+ #t)
+ ('directory-processed
+ (when (empty? child)
+ (rmdir child))
+ #t)
+ (_ #t)))
+
+ (with-directory-excursion "src/3rdparty"
+ ;; TODO: Try removing "gn" too for future versions of qtwebengine.
+ (delete-file-recursively "ninja")
+
+ (with-directory-excursion "chromium"
+ ;; Delete bundled software and binaries that were not explicitly
+ ;; preserved above.
+ (nftw "." delete-unwanted-files 'depth 'physical)
+
+ ;; Assert that each preserved item is present to catch removals.
+ (for-each (lambda (third-party)
+ (unless (file-exists? third-party)
+ (error (format #f "~s does not exist!~%" third-party))))
+ preserved-club)
+
+ ;; Use relative header locations instead of hard coded ones.
+ (substitute*
+ "base/third_party/dynamic_annotations/dynamic_annotations.c"
+ (("base/third_party/valgrind") "valgrind"))
+ (substitute*
+ "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
+ (("third_party/curl") "curl"))
+
+ ;; Replace Google Analytics bundle with an empty file and hope
+ ;; no one notices.
+ (mkdir-p "third_party/analytics")
+ (call-with-output-file
+ "third_party/analytics/google-analytics-bundle.js"
+ (lambda (port)
+ (const #t)))))
+
+ ;; Do not enable support for loading the Widevine DRM plugin.
+ (substitute* "src/core/config/common.pri"
+ (("enable_widevine=true")
+ "enable_widevine=false"))
+ #t)))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("bison" ,bison)
+ ("flex" ,flex)
+ ("gperf" ,gperf)
+ ("ninja" ,ninja)
+ ("perl" ,perl)
+ ("pkg-config" ,pkg-config)
+ ("python-2" ,python-2)
+ ("ruby" ,ruby)))
+ (inputs
+ `(("alsa-lib" ,alsa-lib)
+ ("atk" ,atk)
+ ("cups-minimal" ,cups-minimal)
+ ("curl" ,curl)
+ ("dbus" ,dbus)
+ ("ffmpeg" ,ffmpeg)
+ ("fontconfig" ,fontconfig)
+ ("harbuzz" ,harfbuzz)
+ ("icu4c" ,icu4c)
+ ("jsoncpp" ,jsoncpp)
+ ("lcms" ,lcms)
+ ("libcap" ,libcap)
+ ("libevent" ,libevent)
+ ("libgcrypt" ,libgcrypt)
+ ("libjpeg" ,libjpeg-turbo)
+ ("libvpx" ,libvpx)
+ ;; FIXME: configure does not find system lcms
+ ;; ("lcms" ,lcms)
+ ("libwebp" ,libwebp)
+ ("libx11" ,libx11)
+ ("libxcb" ,libxcb)
+ ("libxcomposite" ,libxcomposite)
+ ("libxcursor" ,libxcursor)
+ ("libxi" ,libxi)
+ ("libxkbcommon" ,libxkbcommon)
+ ;; FIXME: libxml2 needs to built with icu support though it links to
+ ;; libxml2 configure summary still states "Checking for compatible
+ ;; system libxml2... no"
+ ("libxml2" ,libxml2)
+ ("libxrandr" ,libxrandr)
+ ("libxrender" ,libxrender)
+ ("libxslt" ,libxslt)
+ ("libxtst" ,libxtst)
+ ("mesa" ,mesa)
+ ("minizip" ,minizip)
+ ("nss" ,nss)
+ ("opus" ,opus)
+ ("pciutils" ,pciutils)
+ ("protobuf" ,protobuf)
+ ("pulseaudio" ,pulseaudio)
+ ("qtbase" ,qtbase)
+ ("qtdeclarative" ,qtdeclarative)
+ ("qtmultimedia" ,qtmultimedia)
+ ("qtwebchannel" ,qtwebchannel)
+ ("re2" ,re2)
+ ("snappy" ,snappy)
+ ("udev" ,eudev)
+ ("valgrind" ,valgrind)
+ ("xcb-util" ,xcb-util)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments qtsvg)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-before 'configure 'substitute-source
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (nss (assoc-ref inputs "nss"))
+ (udev (assoc-ref inputs "udev")))
+ ;; Qtwebengine is not installed into the same prefix as
+ ;; qtbase. Some qtbase QTLibraryInfo constants will not
+ ;; work. Replace with the full path to the qtwebengine
+ ;; translations and locales in the store.
+ (substitute* "src/core/web_engine_library_info.cpp"
+ (("QLibraryInfo::location\\(QLibraryInfo::TranslationsPath\\)")
+ (string-append "QLatin1String(\"" out "/share/qt5/translations\")"))
+ (("QLibraryInfo::location\\(QLibraryInfo::DataPath\\)")
+ (string-append "QLatin1String(\"" out "/share/qt5\")")))
+ ;; Substitute full dynamic library path for nss.
+ (substitute* "src/3rdparty/chromium/crypto/nss_util.cc"
+ (("libnssckbi.so")
+ (string-append nss "/lib/nss/libnssckbi.so")))
+ ;; Substitute full dynamic library path for udev.
+ (substitute* "src/3rdparty/chromium/device/udev_linux/udev1_loader.cc"
+ (("libudev.so.1")
+ (string-append udev "/lib/libudev.so.1")))
+ #t)))
+ (add-before 'configure 'set-env
+ (lambda _
+ ;; Avoids potential race conditions.
+ (setenv "PYTHONDONTWRITEBYTECODE" "1")
+ (setenv "NINJAFLAGS"
+ (string-append "-k1" ;less verbose build output
+ ;; Respect the '--cores' option of 'guix build'.
+ " -j" (number->string (parallel-job-count))))
+ #t))
+ (replace 'configure
+ (lambda _
+ ;; Valid QT_BUILD_PARTS variables are:
+ ;; libs tools tests examples demos docs translations
+ (invoke "qmake" "QT_BUILD_PARTS = libs tools" "--"
+ "--webengine-printing-and-pdf=no"
+ "--webengine-ffmpeg=system"
+ "--webengine-icu=system"
+ "--webengine-pepper-plugins=no")))))
+ ;; Tests are disabled due to "Could not find QtWebEngineProcess error"
+ ;; It's possible this can be fixed by setting QTWEBENGINEPROCESS_PATH
+ ;; before running tests.
+ ((#:tests? _ #f) #f)))
+ (native-search-paths
+ (list (search-path-specification
+ (file-type 'regular)
+ (separator #f)
+ (variable "QTWEBENGINEPROCESS_PATH")
+ (files '("lib/qt5/libexec/QtWebEngineProcess")))))
+ (home-page "https://wiki.qt.io/QtWebEngine")
+ (synopsis "Qt WebEngine module")
+ (description "The Qt5WebEngine module provides support for web applications
+using the Chromium browser project. The Chromium source code has Google services
+and binaries removed, and adds modular support for using system libraries.")
+ (license license:lgpl2.1+)))
+
(define-public python-sip
(package
(name "python-sip")