gnu: Add qtwebengine, version 6.3.1.

* gnu/packages/qt.scm (qtwebengine): New variable.
This commit is contained in:
Maxim Cournoyer 2022-07-18 23:13:46 -04:00
parent a0beb297a3
commit f1e126c03b
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -88,6 +88,7 @@ (define-module (gnu packages qt)
#:use-module (gnu packages markup)
#:use-module (gnu packages networking)
#:use-module (gnu packages ninja)
#:use-module (gnu packages node)
#:use-module (gnu packages nss)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages pcre)
@ -98,6 +99,7 @@ (define-module (gnu packages qt)
#:use-module (gnu packages python)
#:use-module (gnu packages python-build)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages python-web)
#:use-module (gnu packages regex)
#:use-module (gnu packages ruby)
#:use-module (gnu packages sdl)
@ -2376,6 +2378,349 @@ (define (delete-unwanted-files child stat flag base level)
and binaries removed, and adds modular support for using system libraries.")
(license license:lgpl2.1+)))
(define-public qtwebengine
(package
(name "qtwebengine")
(version "6.3.1")
(source
(origin
(method url-fetch)
(uri (qt5-urls name version))
(sha256
(base32
"0ivfsqd5c0cxsnssj6z37901cf6a47w50zaqgjiysvcm3ar36ymd"))
(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/double_conversion"
"base/third_party/cityhash"
"base/third_party/cityhash_v103"
"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/mozilla_security_manager"
"net/third_party/nss"
"net/third_party/quiche"
"net/third_party/uri_template"
"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/common/third_party/xxhash"
"third_party/axe-core"
"third_party/blink"
"third_party/boringssl"
"third_party/boringssl/src/third_party/fiat"
"third_party/breakpad"
"third_party/brotli"
"third_party/ced"
"third_party/cld_3"
"third_party/closure_compiler"
"third_party/crashpad"
"third_party/crashpad/crashpad/third_party/lss"
"third_party/crashpad/crashpad/third_party/zlib"
"third_party/crc32c"
"third_party/dav1d"
"third_party/dawn"
"third_party/devtools-frontend"
"third_party/devtools-frontend/src/front_end/third_party/lighthouse"
"third_party/devtools-frontend/src/front_end/third_party/wasmparser"
"third_party/emoji-segmenter"
"third_party/ffmpeg"
"third_party/googletest"
"third_party/harfbuzz-ng/utils"
"third_party/hunspell"
"third_party/iccjpeg"
"third_party/icu"
"third_party/inspector_protocol"
"third_party/jinja2"
"third_party/jsoncpp"
"third_party/jstemplate"
"third_party/khronos"
"third_party/leveldatabase"
"third_party/libaddressinput"
"third_party/libgifcodec"
"third_party/libjingle_xmpp"
"third_party/libjpeg_turbo"
"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/mako"
"third_party/markupsafe"
"third_party/mesa_headers"
"third_party/metrics_proto"
"third_party/modp_b64"
"third_party/nasm"
"third_party/one_euro_filter"
"third_party/openh264/src/codec/api/svc"
"third_party/opus"
"third_party/ots"
"third_party/pdfium"
"third_party/pdfium/third_party/agg23"
"third_party/pdfium/third_party/base"
"third_party/pdfium/third_party/freetype"
"third_party/pdfium/third_party/lcms"
"third_party/pdfium/third_party/libopenjpeg20"
"third_party/pdfium/third_party/skia_shared"
"third_party/perfetto"
"third_party/pffft"
"third_party/ply"
"third_party/polymer"
"third_party/protobuf"
"third_party/protobuf/third_party/six"
"third_party/pyjson5"
"third_party/re2"
"third_party/rnnoise"
"third_party/skia"
"third_party/skia/include/third_party/skcms/skcms.h"
"third_party/skia/include/third_party/vulkan"
"third_party/skia/third_party/skcms"
"third_party/skia/third_party/vulkanmemoryallocator"
"third_party/smhasher"
"third_party/snappy"
"third_party/sqlite"
"third_party/usb_ids"
"third_party/usrsctp"
"third_party/web-animations-js"
"third_party/webrtc"
"third_party/webrtc/common_audio/third_party/ooura"
"third_party/webrtc/common_audio/third_party/spl_sqrt_floor"
"third_party/webrtc/modules/third_party/fft"
"third_party/webrtc/modules/third_party/g711"
"third_party/webrtc/modules/third_party/g722"
"third_party/webrtc/rtc_base/third_party/base64"
"third_party/webrtc/rtc_base/third_party/sigslot"
"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/zlib"
"url/third_party/mozilla"
"v8/src/third_party/utf8-decoder"
"v8/src/third_party/valgrind"
"v8/src/third_party/siphash"
"v8/third_party/v8/builtins"
"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)))
('directory-processed
(when (empty? child)
(rmdir child)))
(_ #t)))
(with-directory-excursion "src/3rdparty"
(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"))
(substitute*
'("components/viz/common/gpu/vulkan_context_provider.h"
"gpu/config/gpu_util.cc")
(("third_party/vulkan/include/")
""))
;; 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/CMakeLists.txt"
(("enable_widevine=true")
"enable_widevine=false")))))))
(build-system cmake-build-system)
(arguments
(list
;; XXX: The test suite is not built by default; leave it off to save
;; some build time and resources.
#:tests? #f
#:configure-flags
;; Use the CMake ninja generator, otherwise the build fails (see:
;; https://bugreports.qt.io/browse/QTBUG-96897).
#~(list "-GNinja" ;
;; Manually add the NSS library prefix to the linker
;; search path, otherwise it fails to be linked (see:
;; https://bugreports.qt.io/browse/QTBUG-105053).
(string-append "-DCMAKE_SHARED_LINKER_FLAGS=-L"
(search-input-directory %build-inputs "lib/nss"))
;; The PDF renderer plugin fails to build with errors such as
;; "src/3rdparty/chromium/components/pdf
;; /renderer/pdf_accessibility_tree.cc:1373:39:
;; error: use of undeclared identifier 'IDS_PDF_PAGE_INDEX'";
;; disable it.
"-DQT_FEATURE_webengine_printing_and_pdf=OFF"
"-DQT_FEATURE_webengine_pepper_plugins=OFF" ;widevine
"-DQT_FEATURE_system_ffmpeg=ON"
;; Do not artificially limit codec support; video decoding is
;; done by ffmpeg.
"-DQT_FEATURE_webengine_proprietary_codecs=ON"
"-DQT_FEATURE_webengine_system_alsa=ON"
"-DQT_FEATURE_webengine_system_icu=ON"
"-DQT_FEATURE_webengine_system_libxml=ON"
"-DQT_FEATURE_webengine_system_libpci=ON"
"-DQT_FEATURE_webengine_system_libpng=ON"
"-DQT_FEATURE_webengine_system_pulseaudio=ON"
"-DQT_FEATURE_webengine_system_zlib=ON")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-paths
(lambda* (#:key inputs #:allow-other-keys)
;; 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::path\\(QLibraryInfo::TranslationsPath)")
(string-append "QLatin1String(\"" #$output
"/share/qt6/translations\")"))
(("QLibraryInfo::path\\(QLibraryInfo::DataPath)")
(string-append "QLatin1String(\"" #$output
"/share/qt6\")")))
;; Substitute full dynamic library path for nss.
(substitute* "src/3rdparty/chromium/crypto/nss_util.cc"
(("libnssckbi.so")
(search-input-file inputs "lib/nss/libnssckbi.so")))
;; Substitute full dynamic library path for udev.
(substitute* "src/3rdparty/chromium/device/udev_linux/udev1_loader.cc"
(("libudev.so.1")
(search-input-file inputs "lib/libudev.so.1")))
;; Patch the location of the X11 keywoard layouts, otherwise
;; webengine *crashes* at run time when the default directory,
;; '/usr/share/X11/xkb' is empty (see:
;; https://bugreports.qt.io/browse/QTBUG-105124).
(substitute* "src/3rdparty/chromium/ui/events/ozone/layout/xkb\
/xkb_keyboard_layout_engine.cc"
(("/usr/share/X11/xkb")
(search-input-directory inputs "share/X11/xkb")))))
(add-before 'configure 'prepare-build-environment
(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))))
;; Use Clang/LDD to help tame the memory requirements and hasten
;; the build.
(setenv "AR" "llvm-ar") (setenv "NM" "llvm-nm")
(setenv "CC" "clang") (setenv "CXX" "clang++")))
(replace 'build
(lambda* (#:key parallel-build? #:allow-other-keys)
(apply invoke "cmake" "--build" "."
(if parallel-build?
`("--parallel" ,(number->string (parallel-job-count)))
'()))))
(replace 'install
(lambda _
(invoke "cmake" "--install" "."))))))
(native-inputs
(modify-inputs (package-native-inputs qtwebengine-5)
(delete "python2" "python2-six")
(append clang-14
lld-as-ld-wrapper
node-lts
python-wrapper
python-html5lib)))
(inputs
(modify-inputs (package-inputs qtwebengine-5)
(replace "qtbase" qtbase)
(replace "qtdeclarative" qtdeclarative)
(replace "qtmultimedia" qtmultimedia)
(replace "qtwebchannel" qtwebchannel)
(append libxkbfile xkeyboard-config)))
(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 Qt WebEngine 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 single-application-qt5
;; Change in function signature, nheko requires at least this commit
(let ((commit "dc8042b5db58f36e06ba54f16f38b16c5eea9053"))