diff options
Diffstat (limited to 'gnu/packages/qt.scm')
-rw-r--r-- | gnu/packages/qt.scm | 1003 |
1 files changed, 792 insertions, 211 deletions
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 541e1e6c06..7a1d60a2e5 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -11,7 +11,7 @@ ;;; Copyright © 2018, 2020, 2022 Nicolas Goaziou <[email protected]> ;;; Copyright © 2018 Hartmut Goebel <[email protected]> ;;; Copyright © 2018 Eric Bavier <[email protected]> -;;; Copyright © 2019, 2020 Marius Bakke <[email protected]> +;;; Copyright © 2019, 2020, 2022 Marius Bakke <[email protected]> ;;; Copyright © 2018 John Soo <[email protected]> ;;; Copyright © 2020 Mike Rosset <[email protected]> ;;; Copyright © 2020 Jakub Kądziołka <[email protected]> @@ -25,6 +25,8 @@ ;;; Copyright © 2021 Nicolò Balzarotti <[email protected]> ;;; Copyright © 2022 Foo Chuan Wei <[email protected]> ;;; Copyright © 2022 Zhu Zihao <[email protected]> +;;; Copyright © 2022 Petr Hodina <[email protected]> +;;; Copyright © 2022 Yash Tiwari <[email protected]> ;;; ;;; This file is part of GNU Guix. ;;; @@ -48,6 +50,7 @@ #:use-module (guix git-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) + #:use-module (guix build-system meson) #:use-module (guix build-system trivial) #:use-module (guix build-system python) #:use-module (guix build-system qt) @@ -59,17 +62,21 @@ #:use-module (gnu packages bash) #:use-module (gnu packages base) #:use-module (gnu packages bison) + #:use-module (gnu packages check) #:use-module (gnu packages cmake) #:use-module (gnu packages compression) + #:use-module (gnu packages cpp) #:use-module (gnu packages cups) #:use-module (gnu packages curl) #:use-module (gnu packages databases) #:use-module (gnu packages documentation) + #:use-module (gnu packages elf) #:use-module (gnu packages enchant) #:use-module (gnu packages fontutils) #:use-module (gnu packages flex) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gcc) + #:use-module (gnu packages gdb) #:use-module (gnu packages ghostscript) #:use-module (gnu packages gl) #:use-module (gnu packages glib) @@ -140,8 +147,7 @@ (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ - (chdir "libqite") - #t))))) + (chdir "libqite")))))) (inputs (list qtbase-5 qtmultimedia-5)) (home-page "https://github.com/Ri0n/qite/") @@ -183,6 +189,49 @@ window managers, that don't provide Qt integration by themselves.") (home-page "https://qt5ct.sourceforge.io/") (license license:bsd-2))) +(define-public kvantum + (package + (name "kvantum") + (version "1.0.7") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/tsujan/Kvantum/releases/download/V" + version "/Kvantum-" version ".tar.xz")) + (sha256 + (base32 + "0zwxswbgd3wc7al3fhrl5qc0fmmb6mkygywjh1spbqpl7s8jw5s3")))) + (build-system qt-build-system) + (arguments + (list + #:tests? #f ;no tests + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ + (chdir "Kvantum"))) + (add-after 'chdir 'patch-style-dir + (lambda _ + (substitute* "style/CMakeLists.txt" + (("\\$\\{KVANTUM_STYLE_DIR\\}") + (string-append #$output + "/lib/qt5/plugins/styles")))))))) + (native-inputs (list qttools-5)) + (inputs (list + kwindowsystem + libx11 + libxext + qtbase-5 + qtsvg-5 + qtx11extras)) + (synopsis "SVG-based theme engine for Qt") + (description + "Kvantum is an SVG-based theme engine for Qt, +tuned to KDE and LXQt, with an emphasis on elegance, usability and +practicality.") + (home-page "https://github.com/tsujan/Kvantum") + (license license:gpl3+))) + (define-public materialdecoration (let ((commit "6a5de23f2e5162fbee39d16f938473ff970a2ec0") (revision "9")) @@ -219,10 +268,10 @@ window managers, that don't provide Qt integration by themselves.") (native-inputs (list cmake-shared extra-cmake-modules pkg-config)) (inputs - `(("qtbase" ,qtbase-5) - ("qtwayland" ,qtwayland) - ("wayland" ,wayland) - ("xkbcommon" ,libxkbcommon))) + (list qtbase-5 + qtwayland-5 + wayland + libxkbcommon)) (synopsis "Material Decoration for Qt") (description "MaterialDecoration is a client-side decoration for Qt applications on Wayland.") @@ -254,8 +303,7 @@ applications on Wayland.") (add-before 'check 'check-setup (lambda _ ;; make Qt render "offscreen", required for tests - (setenv "QT_QPA_PLATFORM" "offscreen") - #t))))) + (setenv "QT_QPA_PLATFORM" "offscreen")))))) (home-page "https://github.com/steveire/grantlee") (synopsis "Libraries for text templating with Qt") (description "Grantlee Templates can be used for theming and generation of @@ -820,6 +868,69 @@ developers using C++ or QML, a CSS & JavaScript like language.") (variable "XDG_CONFIG_DIRS") (files '("etc/xdg"))))))) +(define-public qt3d-5 + (package + (inherit qtbase-5) + (name "qt3d") + (version "5.15.5") + (source (origin + (method url-fetch) + (uri (qt-urls name version)) + (sha256 + (base32 + "1m3y7d58crn0qgfwkimxcggssn2pbs8nj5b9diwns6rwqg4aqk20")))) + (propagated-inputs `()) + (native-inputs (list perl)) + (inputs (list mesa qtbase-5 vulkan-headers zlib)) + (arguments + (list #:phases #~(modify-phases %standard-phases + (add-before 'configure 'configure-qmake + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((tmpdir (string-append (getenv "TMPDIR"))) + (qmake (string-append tmpdir "/qmake")) + (qt.conf (string-append tmpdir "/qt.conf"))) + (symlink (which "qmake") qmake) + (setenv "PATH" + (string-append tmpdir ":" + (getenv "PATH"))) + (with-output-to-file qt.conf + (lambda () + (format #t "[Paths] +Prefix=~a +ArchData=lib/qt5 +Data=share/qt5 +Documentation=share/doc/qt5 +Headers=include/qt5 +Libraries=lib +LibraryExecutables=lib/qt5/libexec +Binaries=bin +Tests=tests +Plugins=lib/qt5/plugins +Imports=lib/qt5/imports +Qml2Imports=lib/qt5/qml +Translations=share/qt5/translations +Settings=etc/xdg +Examples=share/doc/qt5/examples +HostPrefix=~a +HostData=lib/qt5 +HostBinaries=bin +HostLibraries=lib + +[EffectiveSourcePaths] +HostPrefix=~a +HostData=lib/qt5" + #$output #$output #$(this-package-input + "qtbase"))))))) + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (invoke "qmake" + "QT_BUILD_PARTS = libs tools tests"))) + (add-before 'check 'set-display + (lambda _ + (setenv "QT_QPA_PLATFORM" "offscreen")))))) + (synopsis "Qt module for 3D") + (description "The Qt3d module provides classes for displaying 3D."))) + (define-public qt5compat (package (name "qt5compat") @@ -1448,14 +1559,16 @@ record media, and manage a collection of media content. It also contains a set of plugins for interacting with pulseaudio and GStreamer.") (license (package-license qtbase)))) -(define-public qtwayland +(define-public qtwayland-5 (package (inherit qtsvg-5) (name "qtwayland") (version "5.15.5") (source (origin (method url-fetch) (uri (qt-urls name version)) - (patches (search-patches "qtwayland-gcc-11.patch")) + (patches (search-patches "qtwayland-gcc-11.patch" + "qtwayland-dont-recreate-callbacks.patch" + "qtwayland-cleanup-callbacks.patch")) (sha256 (base32 "0yy8qf9kn15iqsxi2r7jbcsc0vsdyfz7bbxmfn4i9qmz1yvg0jgr")))) @@ -1496,6 +1609,56 @@ set of plugins for interacting with pulseaudio and GStreamer.") (description "The Qt Wayland module provides the QtWayland client and compositor libraries."))) +(define-public qtwayland + (package + (name "qtwayland") + (version "6.3.1") + (source + (origin + (method url-fetch) + (uri (qt-urls name version)) + (sha256 + (base32 "1w60p1did7awdlzq5k8vnq2ncpskb07cpvz31cbv99bjs6igw53g")))) + (build-system cmake-build-system) + (arguments + (list #:configure-flags #~(list "-DQT_BUILD_TESTS=ON") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'disable-failing-tests + (lambda _ + ;; FIXME: tst_seatv4::animatedCursor() fails here. + ;; See also: <https://bugreports.qt.io/browse/QTBUG-78317> + (substitute* "tests/auto/client/seatv4/tst_seatv4.cpp" + (((string-append + "QVERIFY\\(!cursorSurface\\(\\)->" + "m_waitingFrameCallbacks\\.empty\\(\\)\\);")) "") + (("QTRY_COMPARE\\(bufferSpy\\.count\\(\\), 1\\);") "")))) + (add-before 'check 'set-test-environment + (lambda _ + ;; Do not fail just because /etc/machine-id is missing. + (setenv "DBUS_FATAL_WARNINGS" "0") + ;; Make Qt render "offscreen", required for tests. + (setenv "QT_QPA_PLATFORM" "offscreen")))))) + (native-inputs (list glib perl pkg-config qtdeclarative)) + (inputs + (list fontconfig + freetype + libx11 + libxcomposite + libxext + libxkbcommon + libxrender + mesa + mtdev + qtbase + vulkan-headers + wayland)) + (synopsis "Qt Wayland module") + (description "The Qt Wayland module provides the QtWayland client and +compositor libraries.") + (home-page (package-home-page qtbase)) + (license (package-license qtbase)))) + (define-public qtserialport (package (inherit qtsvg-5) (name "qtserialport") @@ -1630,7 +1793,7 @@ application).") (native-inputs '()) (inputs (list mesa qtbase-5 qtdeclarative-5 qtwebsockets-5 zlib)) - (synopsis "QPA plugin for running an application via a browser using + (synopsis "QPA plugin for running applications via a browser using streamed WebGL commands") (description "Qt back end that uses WebGL for rendering. It allows Qt applications (with some limitations) to run in a web browser that supports @@ -1752,9 +1915,22 @@ that helps in Qt development."))) (list ;; The build system attempts to fetch online resources and fails when ;; building the test suite. - #:configure-flags #~(list "-DQT_BUILD_TESTS=OFF"))) + #:configure-flags #~(list "-DQT_BUILD_TESTS=OFF") + #:phases #~(modify-phases %standard-phases + (add-after 'install 'sanity-check + (lambda* (#:key outputs #:allow-other-keys) + ;; This validation exists to validate that the dynamic + ;; library for Clang works as intended; there was + ;; originally problems due to left-overs patching the + ;; value of BUILD_SHARED_LIBS in CLANG-FROM-LLVM that + ;; would cause the following error: "CommandLine Error: + ;; Option 'filter' registered more than once!" + (invoke/quiet (search-input-file outputs "bin/qdoc") + "--help")))))) (native-inputs (list perl qtdeclarative vulkan-headers)) - (inputs (list libxkbcommon mesa qtbase)) + ;; Use clang-15, which is built using as a single shared library, which is + ;; what the build system of qttools expects. + (inputs (list clang-15 libxkbcommon mesa qtbase)) (home-page (package-home-page qtbase)) (synopsis "Qt Tools and Designer modules") (description "The Qt Tools module provides a set of applications to browse @@ -1764,6 +1940,27 @@ that helps in Qt development.") ;; LICENSES/Qt-GPL-exception-1.0.txt). (license (list license:gpl3)))) +(define-public qttranslations + (package + (name "qttranslations") + (version "6.3.1") + (source (origin + (method url-fetch) + (uri (qt-urls name version)) + (sha256 + (base32 + "15yvvxw1vngnjlly6cady05ljamg01qiaqn2vh0xkph855gdbgfp")))) + (build-system cmake-build-system) + (arguments (list #:tests? #f)) + (native-inputs (list qtbase qttools)) + (home-page (package-home-page qtbase)) + (synopsis "Qt translation catalogs") + (description "This package contains the translations for Qt contributed by +the Qt community.") + ;; GPL 3 only with Qt GPL exception 1.0 (see: + ;; LICENSES/Qt-GPL-exception-1.0.txt). + (license (list license:gpl3)))) + (define-public qtscript (package (inherit qtsvg-5) (name "qtscript") @@ -1867,12 +2064,12 @@ coloring, and many more."))) (native-inputs (list perl pkg-config)) (inputs - `(("fontconfig" ,fontconfig) - ("freetype" ,freetype) - ("libxrender" ,libxrender) - ("sdl2" ,sdl2) - ("qtbase" ,qtbase-5) - ("qtdeclarative-5" ,qtdeclarative-5))) + (list fontconfig + freetype + libxrender + sdl2 + qtbase-5 + qtdeclarative-5)) (synopsis "Qt Gamepad module") (description "The Qt Gamepad module is an add-on library that enables Qt applications to support the use of gamepad hardware and in some cases remote @@ -2129,6 +2326,61 @@ using the Enchant spell-checking library.") ;; COPYING file specify GPL3, but source code files all refer to GPL2+. (license license:gpl2+))) +(define remove-third-party-files + #~(begin + (define preserved-club + ;; Prefix exceptions with ./ for comparison with ftw. + (map (cut string-append "./" <>) + preserved-third-party-files)) + (define protected (make-regexp "\\.(gn|gyp)i?$")) + (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 loop ((parent (dirname child)) + (parents '())) + (if (string=? "third_party" (basename parent)) + (cons parent parents) + (loop (dirname parent) + (cons parent parents))))) + (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))) + + (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))) + (define-public qtwebengine-5 (package (inherit qtsvg-5) @@ -2147,7 +2399,7 @@ using the Enchant spell-checking library.") (srfi srfi-26) (guix build utils))) (snippet - '(begin + #~(begin (let ((preserved-third-party-files '("base/third_party/double_conversion" "base/third_party/cityhash" @@ -2283,54 +2535,7 @@ using the Enchant spell-checking library.") "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)) - #t) - ('directory-processed - (when (empty? child) - (rmdir child)) - #t) - (_ #t))) + "v8/third_party/inspector_protocol"))) (with-directory-excursion "src/3rdparty" ;; TODO: Try removing "gn" too for future versions of qtwebengine-5. @@ -2339,13 +2544,7 @@ using the Enchant spell-checking library.") (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) + #$remove-third-party-files ;; Use relative header locations instead of hard coded ones. (substitute* @@ -2393,7 +2592,7 @@ using the Enchant spell-checking library.") cups-minimal curl dbus - ffmpeg + ffmpeg-4 fontconfig harfbuzz icu4c @@ -2428,16 +2627,16 @@ using the Enchant spell-checking library.") pciutils protobuf pulseaudio - qtbase-5 - qtdeclarative-5 qtmultimedia-5 - qtwebchannel-5 re2 snappy eudev valgrind vulkan-headers xcb-util)) + (propagated-inputs + ;; Required by Qt5WebEngineCoreConfig.cmake. + (list qtbase-5 qtdeclarative-5 qtwebchannel-5)) (arguments (substitute-keyword-arguments (package-arguments qtsvg-5) ((#:modules modules '()) @@ -2525,7 +2724,7 @@ and binaries removed, and adds modular support for using system libraries.") (srfi srfi-26) (guix build utils))) (snippet - '(begin + #~(begin (let ((preserved-third-party-files '("base/third_party/double_conversion" "base/third_party/cityhash" @@ -2547,12 +2746,25 @@ and binaries removed, and adds modular support for using system libraries.") "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/angle/src/third_party/trace_event" + "third_party/angle/src/third_party/volk" "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/catapult" + "third_party/catapult/common/py_vulcanize/third_party/rcssmin" + "third_party/catapult/common/py_vulcanize/third_party/rjsmin" + "third_party/catapult/third_party/polymer" + "third_party/catapult/tracing/third_party/d3/d3.min.js" + "third_party/catapult/tracing/third_party/gl-matrix/dist/gl-matrix-min.js" + "third_party/catapult/tracing/third_party/jpeg-js/jpeg-js-decoder.js" + "third_party/catapult/tracing/third_party/jszip/jszip.min.js" + "third_party/catapult/tracing/third_party/mannwhitneyu/mannwhitneyu.js" + "third_party/catapult/tracing/third_party/oboe/dist" + "third_party/catapult/tracing/third_party/pako/pako.min.js" "third_party/ced" "third_party/cld_3" "third_party/closure_compiler" @@ -2562,16 +2774,39 @@ and binaries removed, and adds modular support for using system libraries.") "third_party/crc32c" "third_party/dav1d" "third_party/dawn" + "third_party/dawn/third_party/tint" "third_party/devtools-frontend" + "third_party/devtools-frontend/src/front_end/third_party/i18n" + "third_party/devtools-frontend/src/front_end/third_party/acorn" + "third_party/devtools-frontend/src/front_end/third_party/acorn-loose" + "third_party/devtools-frontend/src/front_end/third_party/axe-core" + "third_party/devtools-frontend/src/front_end/third_party/chromium" + "third_party/devtools-frontend/src/front_end/third_party/codemirror" + "third_party/devtools-frontend/src/front_end/third_party/diff" + "third_party/devtools-frontend/src/front_end/third_party/intl-messageformat" "third_party/devtools-frontend/src/front_end/third_party/lighthouse" + "third_party/devtools-frontend/src/front_end/third_party/lit-html" + "third_party/devtools-frontend/src/front_end/third_party/marked" "third_party/devtools-frontend/src/front_end/third_party/wasmparser" + "third_party/devtools-frontend/src/third_party/typescript" "third_party/emoji-segmenter" - "third_party/ffmpeg" + "third_party/fdlibm" + "third_party/ffmpeg/libavcodec/avcodec.h" + "third_party/ffmpeg/libavcodec/packet.h" + "third_party/ffmpeg/libavformat/avformat.h" + "third_party/ffmpeg/libavformat/avio.h" + "third_party/ffmpeg/libavutil/avutil.h" + "third_party/ffmpeg/libavutil/imgutils.h" + "third_party/ffmpeg/libavutil/log.h" + "third_party/ffmpeg/libavutil/mathematics.h" + "third_party/ffmpeg/libavutil/opt.h" + "third_party/freetype" "third_party/googletest" - "third_party/harfbuzz-ng/utils" + "third_party/harfbuzz-ng" + "third_party/highway" "third_party/hunspell" "third_party/iccjpeg" - "third_party/icu" + "third_party/icu" ;TODO: make pdfium use system version "third_party/inspector_protocol" "third_party/jinja2" "third_party/jsoncpp" @@ -2579,19 +2814,35 @@ and binaries removed, and adds modular support for using system libraries.") "third_party/khronos" "third_party/leveldatabase" "third_party/libaddressinput" + "third_party/libaom" + "third_party/libaom/source/libaom/third_party/fastfeat" + "third_party/libaom/source/libaom/third_party/vector" + "third_party/libaom/source/libaom/third_party/x86inc" + "third_party/libavif" + "third_party/libgav1" "third_party/libgifcodec" "third_party/libjingle_xmpp" "third_party/libjpeg_turbo" - "third_party/libpng" + "third_party/libjxl" + "third_party/libpng" ;TODO: make pdfium use system version "third_party/libsrtp" "third_party/libsync" "third_party/libudev" + "third_party/liburlpattern" "third_party/libvpx" "third_party/libwebm" - "third_party/libwebp" - "third_party/libxml" - "third_party/libxslt" + "third_party/libwebp/src/webp/decode.h" + "third_party/libwebp/src/webp/demux.h" + "third_party/libwebp/src/webp/encode.h" + "third_party/libwebp/src/webp/format_constants.h" + "third_party/libwebp/src/webp/mux.h" + "third_party/libwebp/src/webp/mux_types.h" + "third_party/libwebp/src/webp/types.h" + "third_party/libx11" + "third_party/libxcb-keysyms" + "third_party/libxml/chromium" "third_party/libyuv" + "third_party/lottie" "third_party/lss" "third_party/mako" "third_party/markupsafe" @@ -2599,18 +2850,27 @@ and binaries removed, and adds modular support for using system libraries.") "third_party/metrics_proto" "third_party/modp_b64" "third_party/nasm" + "third_party/node" "third_party/one_euro_filter" - "third_party/openh264/src/codec/api/svc" - "third_party/opus" + "third_party/openh264" + "third_party/opus/src/include/opus.h" + "third_party/opus/src/include/opus_custom.h" + "third_party/opus/src/include/opus_defines.h" + "third_party/opus/src/include/opus_multistream.h" + "third_party/opus/src/include/opus_types.h" "third_party/ots" "third_party/pdfium" "third_party/pdfium/third_party/agg23" "third_party/pdfium/third_party/base" + "third_party/pdfium/third_party/bigint" "third_party/pdfium/third_party/freetype" "third_party/pdfium/third_party/lcms" "third_party/pdfium/third_party/libopenjpeg20" + "third_party/pdfium/third_party/libpng16" + "third_party/pdfium/third_party/libtiff" "third_party/pdfium/third_party/skia_shared" "third_party/perfetto" + "third_party/perfetto/protos/third_party/chromium" "third_party/pffft" "third_party/ply" "third_party/polymer" @@ -2626,9 +2886,18 @@ and binaries removed, and adds modular support for using system libraries.") "third_party/skia/third_party/vulkanmemoryallocator" "third_party/smhasher" "third_party/snappy" + "third_party/speech-dispatcher" "third_party/sqlite" "third_party/usb_ids" "third_party/usrsctp" + "third_party/vulkan-deps/glslang" + "third_party/vulkan-deps/spirv-headers" + "third_party/vulkan-deps/spirv-tools" + "third_party/vulkan-deps/vulkan-headers" + "third_party/vulkan-deps/vulkan-loader" + "third_party/vulkan-deps/vulkan-tools" + "third_party/vulkan-deps/vulkan-validation-layers" + "third_party/vulkan_memory_allocator" "third_party/web-animations-js" "third_party/webrtc" "third_party/webrtc/common_audio/third_party/ooura" @@ -2642,58 +2911,15 @@ and binaries removed, and adds modular support for using system libraries.") "third_party/widevine/cdm/widevine_cdm_common.h" "third_party/widevine/cdm/widevine_cdm_version.h" "third_party/woff2" - "third_party/zlib" + "third_party/wuffs" + "third_party/x11proto" + "third_party/zlib" ;TODO: make pdfium use system version "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))) + "v8/third_party/inspector_protocol"))) (with-directory-excursion "src/3rdparty" (delete-file-recursively "ninja") @@ -2701,15 +2927,7 @@ and binaries removed, and adds modular support for using system libraries.") (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) + #$remove-third-party-files ;; Use relative header locations instead of hard coded ones. (substitute* @@ -2744,7 +2962,7 @@ linux/libcurl_wrapper.h" #:configure-flags ;; Use the CMake ninja generator, otherwise the build fails (see: ;; https://bugreports.qt.io/browse/QTBUG-96897). - #~(list "-GNinja" ; + #~(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). @@ -2759,15 +2977,29 @@ linux/libcurl_wrapper.h" "-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" + + ;; Use system libraries where possible (see src/core/CMakeLists.txt). "-DQT_FEATURE_webengine_system_alsa=ON" + "-DQT_FEATURE_webengine_system_ffmpeg=ON" + "-DQT_FEATURE_webengine_system_freetype=ON" + "-DQT_FEATURE_webengine_system_harfbuzz=ON" "-DQT_FEATURE_webengine_system_icu=ON" - "-DQT_FEATURE_webengine_system_libxml=ON" + "-DQT_FEATURE_webengine_system_lcms2=ON" + "-DQT_FEATURE_webengine_system_libevent=ON" + "-DQT_FEATURE_webengine_system_libjpeg=ON" "-DQT_FEATURE_webengine_system_libpci=ON" "-DQT_FEATURE_webengine_system_libpng=ON" + "-DQT_FEATURE_webengine_system_libwebp=ON" + "-DQT_FEATURE_webengine_system_libxml=ON" + "-DQT_FEATURE_webengine_system_libxslt=ON" + "-DQT_FEATURE_webengine_system_minizip=ON" + "-DQT_FEATURE_webengine_system_opus=ON" "-DQT_FEATURE_webengine_system_pulseaudio=ON" + "-DQT_FEATURE_webengine_system_re2=ON" "-DQT_FEATURE_webengine_system_zlib=ON") #:phases #~(modify-phases %standard-phases @@ -2825,18 +3057,22 @@ linux/libcurl_wrapper.h" (native-inputs (modify-inputs (package-native-inputs qtwebengine-5) (delete "python2" "python2-six") + (replace "node" node-lts) (append clang-14 lld-as-ld-wrapper - node-lts python-wrapper + python-beautifulsoup4 python-html5lib))) (inputs (modify-inputs (package-inputs qtwebengine-5) - (replace "qtbase" qtbase) - (replace "qtdeclarative" qtdeclarative) (replace "qtmultimedia" qtmultimedia) - (replace "qtwebchannel" qtwebchannel) + (replace "harfbuzz" harfbuzz-5) (append libxkbfile xkeyboard-config))) + (propagated-inputs + (modify-inputs (package-propagated-inputs qtwebengine-5) + (replace "qtbase" qtbase) + (replace "qtdeclarative" qtdeclarative) + (replace "qtwebchannel" qtwebchannel))) (native-search-paths (list (search-path-specification (file-type 'regular) @@ -2891,8 +3127,7 @@ system libraries.") (string-append source "/" file) (string-append out "/include"))) '("SingleApplication" - "singleapplication.h" "singleapplication_p.h")) - #t)))))) + "singleapplication.h" "singleapplication_p.h")))))))) (inputs (list qtbase-5)) (home-page "https://github.com/itay-grudev/SingleApplication") @@ -3038,9 +3273,7 @@ module provides support functions to the automatically generated code.") (let* ((qtbase (assoc-ref inputs "qtbase")) (qtprinter.h (string-append "\"" qtbase "/include/qt5/QtPrintSupport/qprinter.h\""))) (substitute* "sip/QtPrintSupport/qprinter.sip" - (("<qprinter.h>") - qtprinter.h)) - #t))) + (("<qprinter.h>") qtprinter.h))))) (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -3165,8 +3398,7 @@ contain over 620 classes.") (lambda _ (display " from pkgutil import extend_path __path__ = extend_path(__path__, __name__) -"))) - #t)))))) +"))))))))) (home-page "https://www.riverbankcomputing.com/software/pyqtwebengine/intro") (synopsis "Python bindings for QtWebEngine") (description @@ -3234,6 +3466,25 @@ top of the PyQt bindings for Qt. PyQt-builder is used to build PyQt itself.") (PyQt5, PyQt4 and PySide) and additional custom QWidgets.") (license license:expat))) +(define-public python-qt.py + (package + (name "python-qt.py") + (version "1.3.7") + (source + (origin + (method url-fetch) + (uri (pypi-uri "Qt.py" version)) + (sha256 + (base32 "07rvfwzjl378j75j2va0c6xylwx16icxa6dycsjgjc329pgpng40")))) + (build-system python-build-system) + (native-inputs (list python-pyqt)) + (home-page "https://github.com/mottosso/Qt.py") + (synopsis "Abstraction layer for Python Qt bindings") + (description + "This package provides an abstraction layer on top of the various Qt +bindings (PySide, PySide2, PyQt4 and PyQt5).") + (license license:expat))) + (define-public qscintilla (package (name "qscintilla") @@ -3307,8 +3558,7 @@ indicators, code completion and call tips.") (string-append out "/lib"))) ;; And fix the installed.txt file (substitute* "installed.txt" - (("/gnu/store/[^/]+") out))) - #t))))) + (("/gnu/store/[^/]+") out)))))))) (inputs `(("qscintilla" ,qscintilla) ("python" ,python) @@ -3336,8 +3586,7 @@ This package provides the Python bindings."))) (match %build-inputs (((names . directories) ...) (union-build (assoc-ref %outputs "out") - directories) - #t))))) + directories)))))) (inputs `(("python-pyqt" ,python-pyqt) ("python-qscintilla" ,python-qscintilla))) @@ -3415,8 +3664,7 @@ securely. It will not store any data unencrypted unless explicitly requested.") (("#include \"qtlockedfile.*\\.cpp\"") "") ;; Unwrap namespace added in the vendoring process. (("QtLP_Private::QtLockedFile") - "QtLockedFile"))) - #t)))) + "QtLockedFile"))))))) (build-system gnu-build-system) (arguments `(#:tests? #f ; No target @@ -3440,8 +3688,7 @@ securely. It will not store any data unencrypted unless explicitly requested.") (("SUBDIRS\\+=examples") "")) ;; Fix deprecated functions. (substitute* "qtsoap/src/qtsoap.cpp" - (("toAscii") "toUtf8")) - #t)) + (("toAscii") "toUtf8")))) (replace 'configure (lambda _ (for-each (lambda (solution) @@ -3449,16 +3696,14 @@ securely. It will not store any data unencrypted unless explicitly requested.") (invoke "./configure" "-library") (invoke "qmake"))) '("qtlockedfile" "qtpropertybrowser" "qtservice" - "qtsingleapplication" "qtsoap")) - #t)) + "qtsingleapplication" "qtsoap")))) (replace 'build (lambda _ (for-each (lambda (solution) (with-directory-excursion solution (invoke "make"))) '("qtlockedfile" "qtpropertybrowser" "qtservice" - "qtsingleapplication" "qtsoap")) - #t)) + "qtsingleapplication" "qtsoap")))) (replace 'install (lambda args (for-each (lambda (solution) @@ -3538,8 +3783,7 @@ that can be only started once per user. ;; Remove some incomplete manual pages. (for-each delete-file (find-files "doc/man/man3" "^_tmp.*")) (mkdir-p man) - (copy-recursively "doc/man" man) - #t)))))) + (copy-recursively "doc/man" man))))))) (home-page "http://qwt.sourceforge.net") (synopsis "Qt widgets for plots, scales, dials and other technical software GUI components") @@ -3672,35 +3916,32 @@ a binding language: @end itemize\n") (license license:lgpl3))) ;version 3 only (+ exception) -;; There have been no public releases yet. (define-public qtcolorwidgets - (let ((commit "a95f72e935fe9e046061a1d1c3930cbfbcb533e0") - (revision "1")) - (package - (name "qtcolorwidgets") - (version (git-version "0" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://gitlab.com/mattia.basaglia/Qt-Color-Widgets") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "0dkiwlqh2gwhlp78c1fmchj3shl4p9inspcl96ya5aa8mn6kydy8")))) - (build-system cmake-build-system) - (arguments `(#:tests? #f)) ; There are no tests - (native-inputs - (list qttools-5)) - (inputs - (list qtbase-5)) - (home-page "https://gitlab.com/mattia.basaglia/Qt-Color-Widgets") - (synopsis "Color management widgets") - (description "QtColorWidgets provides a Qt color dialog that is more + (package + (name "qtcolorwidgets") + (version "2.2.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/mattia.basaglia/Qt-Color-Widgets") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1fp7sr5a56bjp2abc6ng331q0bwvk6mf2nxdga81aj6cd9afs22q")))) + (build-system cmake-build-system) + (arguments '(#:tests? #f)) ;there are no tests + (native-inputs + (list qttools-5)) + (inputs + (list qtbase-5)) + (home-page "https://gitlab.com/mattia.basaglia/Qt-Color-Widgets") + (synopsis "Color management widgets") + (description "QtColorWidgets provides a Qt color dialog that is more user-friendly than the default @code{QColorDialog} and several other color-related widgets.") - ;; Includes a license exception for combining with GPL2 code. - (license license:lgpl3+)))) + ;; Includes a license exception for combining with GPL2 code. + (license license:lgpl3+))) (define-public qcustomplot (package @@ -3784,7 +4025,7 @@ color-related widgets.") #:phases #~(modify-phases %standard-phases (add-after 'unpack 'use-shiboken-dir-only - (lambda _ (chdir "sources/shiboken2") #t)) + (lambda _ (chdir "sources/shiboken2"))) (add-before 'configure 'make-files-writable-and-update-timestamps (lambda _ ;; The build scripts need to modify some files in @@ -3795,13 +4036,11 @@ color-related widgets.") (for-each (lambda (file) (make-file-writable file) (utime file circa-1980 circa-1980)) - (find-files "."))) - #t)) + (find-files "."))))) (add-before 'configure 'set-build-env (lambda _ (let ((llvm #$(this-package-input "clang-toolchain"))) - (setenv "CLANG_INSTALL_DIR" llvm) - #t)))))) + (setenv "CLANG_INSTALL_DIR" llvm))))))) (home-page "https://wiki.qt.io/Qt_for_Python") (synopsis "Shiboken generates bindings for C++ libraries using CPython source code") @@ -3839,7 +4078,7 @@ color-related widgets.") ((#:phases p) #~(modify-phases #$p (replace 'use-shiboken-dir-only - (lambda _ (chdir "sources/shiboken6") #t)))) + (lambda _ (chdir "sources/shiboken6"))))) ((#:configure-flags flags) #~(cons* ;; The RUNPATH of shibokenmodule contains the entry in build @@ -3893,7 +4132,7 @@ color-related widgets.") #:phases #~(modify-phases %standard-phases (add-after 'unpack 'go-to-source-dir - (lambda _ (chdir "sources/pyside2") #t)) + (lambda _ (chdir "sources/pyside2"))) (add-after 'go-to-source-dir 'fix-qt-module-detection (lambda _ ;; Activate qt module support even if it not in the same @@ -3988,7 +4227,7 @@ generate Python bindings for your C or C++ code.") #:phases #~(modify-phases %standard-phases (add-after 'unpack 'go-to-source-dir - (lambda _ (chdir "sources/pyside6") #t)) + (lambda _ (chdir "sources/pyside6"))) (add-after 'go-to-source-dir 'fix-qt-module-detection (lambda _ (substitute* "cmake/PySideHelpers.cmake" @@ -4048,7 +4287,7 @@ generate Python bindings for your C or C++ code."))) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'go-to-source-dir - (lambda _ (chdir "sources/pyside2-tools") #t))))) + (lambda _ (chdir "sources/pyside2-tools")))))) (home-page "https://wiki.qt.io/Qt_for_Python") (synopsis "Command line tools for PySide2") @@ -4165,7 +4404,7 @@ data.") (native-inputs (list pkg-config cmake)) (inputs - (list qtbase-5 coin3D-4)) + (list qtbase-5 coin3D)) (home-page "https://github.com/coin3d/soqt") (synopsis "Qt GUI component toolkit library for Coin") (description "SoQt is a Qt GUI component toolkit library for Coin. It is @@ -4225,8 +4464,7 @@ and import their menus over DBus.") (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke "ctest" "-E" ;; These tests try connect to the internet. - "(kdsoap-webcalls|kdsoap-webcalls_wsdl|kdsoap-test_calc)")) - #t))))) + "(kdsoap-webcalls|kdsoap-webcalls_wsdl|kdsoap-test_calc)"))))))) (home-page "https://www.kdab.com/development-resources/qt-tools/kd-soap/") (synopsis "Qt SOAP component") (description "KD SOAP is a tool for creating client applications for web @@ -4234,6 +4472,349 @@ services using the XML based SOAP protocol and without the need for a dedicated web server.") (license (list license:gpl2 license:gpl3)))) +(define-public libaccounts-qt + (package + (name "libaccounts-qt") + (version "1.16") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/accounts-sso/libaccounts-qt") + (commit (string-append "VERSION_" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1vmpjvysm0ld8dqnx8msa15hlhrkny02cqycsh4k2azrnijg0xjz")))) + (build-system gnu-build-system) + (arguments + (list #:tests? #f ;TODO + #:phases + #~(modify-phases %standard-phases + (replace 'configure + (lambda _ + (substitute* "tests/tst_libaccounts.pro" + (("QMAKE_RPATHDIR = \\$\\$\\{QMAKE_LIBDIR\\}") + (string-append "QMAKE_RPATHDIR =" + #$output "/lib"))) + (invoke "qmake" + (string-append "PREFIX=" #$output) + (string-append "LIBDIR=" #$output "/lib"))))))) + ;; * SignOnQt5 (required version >= 8.55), D-Bus service which performs + ;; user authentication on behalf of its clients, + ;; <https://gitlab.com/accounts-sso/signond> + (native-inputs (list doxygen pkg-config qtbase-5 qttools-5)) + (inputs (list glib signond libaccounts-glib)) + (home-page "https://accounts-sso.gitlab.io/") + (synopsis "Qt5 bindings for libaccounts-glib") + (description + "Accounts SSO is a framework for application developers who +wish to acquire, use and store web account details and credentials. It +handles the authentication process of an account and securely stores the +credentials and service-specific settings.") + (license license:lgpl2.1+))) + +(define-public libsignon-glib + (package + (name "libsignon-glib") + (version "2.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/accounts-sso/libsignon-glib") + (commit (string-append "VERSION_" version)) + (recursive? #t))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0gnx9gqsh0hcfm1lk7w60g64mkn1iicga5f5xcy1j9a9byacsfd0")))) + (build-system meson-build-system) + (arguments + (list #:tests? #f ;TODO: ninja: no work to do. + #:imported-modules `((guix build python-build-system) + ,@%meson-build-system-modules) + #:modules '(((guix build python-build-system) + #:select (python-version)) + (guix build meson-build-system) + (guix build utils)) + #:configure-flags + #~(list "-Dtests=true" + (string-append "-Dpy-overrides-dir=" + #$output "/lib/python" + (python-version #$(this-package-input + "python")) + "/site-packages/gi/overrides")))) + (native-inputs (list dbus + dbus-test-runner + `(,glib "bin") + gobject-introspection + gtk-doc + pkg-config + vala)) + (inputs (list check signond python python-pygobject)) + (propagated-inputs (list glib)) + (home-page "https://accounts-sso.gitlab.io/libsignon-glib/") + (synopsis "Single signon authentication library for GLib applications") + (description + "This package provides single signon authentication library for +GLib applications.") + (license license:lgpl2.1+))) + +(define-public packagekit-qt5 + (package + (name "packagekit-qt5") + (version "1.0.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hughsie/PackageKit-Qt") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1d20r503msw1vix3nb6a8bmdqld7fj8k9jk33bkqsc610a2zsms6")))) + (build-system cmake-build-system) + (arguments '(#:tests? #f)) ;no test suite + (native-inputs (list pkg-config)) + (inputs (list packagekit qtbase-5)) + (home-page "https://www.freedesktop.org/software/PackageKit/pk-intro.html") + (synopsis "Qt5 bindings for PackageKit") + (description "Provides Qt5 bindings to PackageKit which is a DBUS +abstraction layer that allows the session user to manage packages in +a secure way.") + (license license:lgpl2.1+))) + +(define-public signond + (package + (name "signond") + (version "8.61") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/accounts-sso/signond") + (commit (string-append "VERSION_" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0k6saz5spys4a4p6ws0ayrjks2gqdqvz7zfmlhdpz5axha0gbqq4")))) + (build-system qt-build-system) + (native-inputs (list doxygen pkg-config qtbase-5 qttools-5)) + (inputs (list dbus glib libaccounts-glib)) + (arguments + (list #:tests? #f ; Figure out how to run tests + #:phases + #~(modify-phases %standard-phases + (delete 'validate-runpath) + (replace 'configure + (lambda _ + (substitute* "src/signond/signond.pro" + (("/etc/") + (string-append #$output "/etc/"))) + (substitute* + '("tests/extensions/extensions.pri" + "tests/signond-tests/mock-ac-plugin/plugin.pro" + "tests/signond-tests/identity-tool.pro" + "tests/signond-tests/mock-ac-plugin/identity-ac-helper.pro" + "tests/libsignon-qt-tests/libsignon-qt-tests.pro" + "tests/signond-tests/signond-tests.pri") + (("QMAKE_RPATHDIR = \\$\\$\\{QMAKE_LIBDIR\\}") + (string-append "QMAKE_RPATHDIR = " + #$output "/lib:" + #$output "/lib/signon"))) + (invoke "qmake" + (string-append "PREFIX=" #$output) + (string-append "LIBDIR=" #$output "/lib"))))))) + (home-page "http://accounts-sso.gitlab.io/signond/index.html") + (synopsis "Perform user authentication over D-Bus") + (description "This package provides a D-Bus service which performs user +authentication on behalf of its clients.") + (license license:lgpl2.1+))) + +(define-public signon-plugin-oauth2 + (package + (name "signon-plugin-oauth2") + (version "0.25") + (home-page "https://gitlab.com/accounts-sso/signon-plugin-oauth2") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (string-append "VERSION_" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "16aslnyk8jdg03zcg97rp6qzd0gmclj14hyhliksz8jgfz1l0w7c")))) + (build-system qt-build-system) + (native-inputs (list doxygen pkg-config)) + (inputs (list signond)) + (arguments + (list #:tests? #f ;no tests + #:make-flags #~(list (string-append "INSTALL_ROOT=" #$output)) + #:phases + #~(modify-phases %standard-phases + (replace 'configure + (lambda _ + (substitute* "common-project-config.pri" + (("-Werror") + "")) + (invoke "qmake" + (string-append "PREFIX=" #$output) + (string-append "LIBDIR=" #$output "/lib"))))))) + (synopsis "OAuth 2 plugin for signon") + (description + "This plugin for the Accounts-SSO SignOn daemon handles the OAuth +1.0 and 2.0 authentication protocols.") + (license license:lgpl2.1+))) + +(define-public clazy + (package + (name "clazy") + (version "1.11") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/KDE/clazy") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1y0n1jknq566z1rifkgdm1yqb0mw564lp51jidfz7q9w91spijci")))) + (build-system cmake-build-system) + (native-inputs (list python)) + (inputs (list clang llvm)) + (home-page "https://github.com/KDE/clazy/") + (synopsis "Qt-oriented static code analyzer") + (description "clazy is a compiler plugin which allows @command{clang} to +understand Qt semantics. It can emit more than fifty (50) Qt-related compiler +warnings, ranging from unneeded memory allocations to misuses of the API, +including @i{fix-its} for automatic refactoring.") + (license license:lgpl2.0+))) + +(define-public qt-creator + (package + (name "qt-creator") + (version "9.0.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://download.qt.io/official_releases/qtcreator/" + (version-major+minor version) "/" version + "/qt-creator-opensource-src-" version ".tar.gz")) + (modules '((guix build utils))) + (snippet '(begin + (for-each + delete-file-recursively + ;; Remove bundled libraries, where supported. + ;; TODO: package and unbundle litehtml + '("src/libs/3rdparty/yaml-cpp" + "src/shared/qbs/src/shared/qtscript/src/3rdparty" + "tests/unit/unittest/3rdparty" + ;; Marketplace recommends nonfree extensions; + ;; remove it. + "src/plugins/marketplace")) + (substitute* "src/plugins/CMakeLists.txt" + (("add_subdirectory\\(marketplace).*") "")) + (substitute* "src/plugins/plugins.qbs" + ((".*marketplace/marketplace.qbs.*") "")))) + (sha256 + (base32 + "1adyxs0cnqx14gwzkvh909c52449ia6y87n1r4qf6wwydhch43cs")))) + (build-system qt-build-system) + (arguments + (list + #:qtbase qtbase + #:configure-flags + #~(list "-DWITH_DOCS=ON" + "-DBUILD_DEVELOPER_DOCS=ON" + "-DCMAKE_VERBOSE_MAKEFILE=ON" + "-DWITH_TESTS=ON" + ;; Extend the RUNPATH with lib/qtcreator, which contains + ;; multiple shared objects. + (string-append "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath=" + #$output "/lib/qtcreator")) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-tests-build + (lambda _ + ;; Add a missing link directive (see: + ;; https://bugreports.qt.io/browse/QTCREATORBUG-28434). + (substitute* "src/libs/tracing/CMakeLists.txt" + (("DEPENDS Utils Qt5::Qml Qt5::Quick") + "DEPENDS Utils Qt5::Quick") + (("PUBLIC_DEPENDS Qt5::Widgets") + "PUBLIC_DEPENDS Qt5::Widgets Qt5::Qml")))) + (add-after 'unpack 'patch-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* '("src/libs/utils/commandline.cpp" + "src/libs/utils/deviceshell.cpp") + (("/bin/sh") + (search-input-file inputs "bin/sh"))) + (substitute* "src/libs/utils/qtcprocess.cpp" + (("/usr/bin/env") + (search-input-file inputs "bin/env"))) + (substitute* "tests/auto/utils/qtcprocess/tst_qtcprocess.cpp" + (("/bin/sh") + (which "sh"))))) + (add-before 'build 'build-doc + (lambda _ + (invoke "cmake" "--build" "." "--target=docs" "-v"))) + (add-after 'build-doc 'install-doc + (lambda _ + (invoke "cmake" "--install" "." "--prefix" #$output + "--component=qch_docs") + (invoke "cmake" "--install" "." "--prefix" #$output + "--component=html_docs"))) + (replace 'check + ;; Loosely based on .github/workflows/build_cmake.yml. + (lambda* (#:key tests? parallel-tests? #:allow-other-keys) + (when tests? + (invoke "xvfb-run" ;for the 'renderpass' tests + "ctest" "-j" (if parallel-tests? + (number->string (parallel-job-count)) + "1") + "--label-exclude" "exclude_from_precheck" + "--exclude-regex" "tst_perfdata")))) + (add-after 'qt-wrap 'wrap-bin + ;; Make a few well-integrated tools readily available. + (lambda* (#:key inputs outputs #:allow-other-keys) + (wrap-program (search-input-file outputs "bin/qtcreator") + `("PATH" suffix ,(map (lambda (c) + (dirname (search-input-file inputs c))) + '("bin/clang-tidy" + "bin/clazy-standalone" + "bin/gdb" + "bin/valgrind"))))))))) + (native-inputs + (list googletest + pkg-config + python + qttools + qttranslations + vulkan-headers + xvfb-run)) + (inputs + (list bash-minimal + coreutils-minimal + clang + clazy + elfutils + gdb + libxkbcommon + llvm + qt5compat + qtdeclarative + qtshadertools + qtsvg + yaml-cpp + valgrind + vulkan-loader + `(,zstd "lib"))) + (home-page "https://www.qt.io/") + (synopsis "Integrated development environment (IDE) for Qt") + (description "Qt Creator is an IDE tailored to the needs of Qt developers. +It includes features such as an advanced code editor, a visual debugger and a +@acronym{GUI, Graphical User Interface} designer.") + (license license:gpl3+))) ;with the Qt Company GPL Exception 1.0 + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar |