diff options
-rw-r--r-- | gnu/packages/qt.scm | 152 |
1 files changed, 149 insertions, 3 deletions
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index a8ccb12f51..19fcc2f37e 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -19,7 +19,7 @@ ;;; Copyright © 2020 TomZ <tomz@freedommail.ch> ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de> ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de> -;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot> ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net> ;;; @@ -553,8 +553,154 @@ system, and the core design of Django is reused in Grantlee.") developers using C++ or QML, a CSS & JavaScript like language.") (license (list license:lgpl2.1 license:lgpl3)))) -;; qt used to refer to the monolithic Qt 5.x package -(define-deprecated qt qtbase) +(define-public qtbase + (package/inherit qtbase-5 + (name "qtbase") + (version "6.1.1") + (source (origin + (inherit (package-source qtbase-5)) + (uri (qt5-urls name version)) + (sha256 + (base32 + "1wizrfiw6h8bk99brbdpdli40vsk6yqchs66f1r083hp0ygsma11")) + (modules '((guix build utils))) + (snippet + ;; corelib uses bundled harfbuzz, md4, md5, sha3 + '(with-directory-excursion "src/3rdparty" + (for-each delete-file-recursively + ;; The bundled pcre2 copy is kept, as its headers + ;; are required by some internal bootstrap target + ;; used for the tools. + (list "double-conversion" "freetype" "harfbuzz-ng" + "libpng" "libjpeg" "sqlite" "xcb" "zlib")))))) + (build-system cmake-build-system) + (arguments + (substitute-keyword-arguments (package-arguments qtbase-5) + ;; XXX: There are many test failures, because the test suite + ;; requires a real X server (a virtual one such as Xvfb is not + ;; enough) or a functional network. It's also quite expensive to + ;; build and run. + ((#:tests? _ #f) #f) + ;; ((#:cmake _) + ;; cmake) ;requires a CMake >= 3.18.4 + ((#:configure-flags _ ''()) + `(let ((out (assoc-ref %outputs "out"))) + (list "-GNinja" ;the build fails otherwise + (string-append "-DINSTALL_ARCHDATADIR=" out "/lib/qt6") + (string-append "-DINSTALL_DATADIR=" out "/share/qt6") + (string-append "-DINSTALL_DOCDIR=" out "/share/doc/qt6") + (string-append "-DINSTALL_MKSPECSDIR=" out "/lib/qt6/mkspecs") + (string-append "-DINSTALL_EXAMPLESDIR=" out + "/share/doc/qt6/examples") + (string-append "-DINSTALL_INCLUDEDIR=" out "/include/qt6") + ;; Link with DBus and OpenSSL so they don't get dlopen'ed. + "-DINPUT_dbus=linked" + "-DINPUT_openssl=linked" + ;; These features require higher versions of Linux than the + ;; minimum version of the glibc. See + ;; src/corelib/global/minimum-linux_p.h. By disabling these + ;; features Qt applications can be used on the oldest kernels + ;; that the glibc supports, including the RHEL6 (2.6.32) and + ;; RHEL7 (3.10) kernels. + "-DFEATURE_getentropy=OFF" ; requires Linux 3.17 + "-DFEATURE_renameat2=OFF" ; requires Linux 3.16 + ;; Most system libraries are used by default, except in some + ;; cases such as for those below. + "-DFEATURE_system_pcre2=ON" + "-DFEATURE_system_sqlite=ON" + ;; Don't use the precompiled headers. + "-DBUILD_WITH_PCH=OFF" + ;; Drop special machine instructions that do not have runtime + ;; detection. + ,@(if (string-prefix? "x86_64" + (or (%current-target-system) + (%current-system))) + '() ;implicitly enabled + '("-DFEATURE_sse2=OFF" + "-DFEATURE_sse3=OFF" + "-DFEATURE_ssse3=OFF" + "-DFEATURE_sse4_1=OFF" + "-DFEATURE_sse4_2=OFF")) + "-DFEATURE_mips_dsp=OFF" + "-DFEATURE_mips_dspr2=OFF"))) + ((#:phases phases) + `(modify-phases ,phases + (delete 'patch-bin-sh) + (delete 'patch-xdg-open) + (add-after 'patch-paths 'patch-more-paths + (lambda _ + (substitute* "src/gui/platform/unix/qgenericunixservices.cpp" + (("\"xdg-open\"") + (format #f "~s" (which "xdg-open")))) + (substitute* '("mkspecs/features/qt_functions.prf" + "qmake/library/qmakebuiltins.cpp") + (("/bin/sh") + (which "sh"))))) + (replace 'configure + (assoc-ref %standard-phases 'configure)) + (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" "."))) + (replace 'patch-mkspecs + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (archdata (string-append out "/lib/qt6")) + (mkspecs (string-append archdata "/mkspecs")) + (qt_config.prf (string-append + mkspecs "/features/qt_config.prf"))) + ;; For each Qt module, let `qmake' uses search paths in the + ;; module directory instead of all in QT_INSTALL_PREFIX. + (substitute* qt_config.prf + (("\\$\\$\\[QT_INSTALL_HEADERS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../include/qt6))") + (("\\$\\$\\[QT_INSTALL_LIBS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))") + (("\\$\\$\\[QT_HOST_LIBS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))") + (("\\$\\$\\[QT_INSTALL_BINS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../bin))")) + + ;; Searches Qt tools in the current PATH instead of QT_HOST_BINS. + (substitute* (string-append mkspecs "/features/qt_functions.prf") + (("cmd = \\$\\$\\[QT_HOST_BINS\\]/\\$\\$2") + "cmd = $$system(which $${2}.pl 2>/dev/null || which $${2})")) + + ;; Resolve qmake spec files within qtbase by absolute paths. + (substitute* + (map (lambda (file) + (string-append mkspecs "/features/" file)) + '("device_config.prf" "moc.prf" "qt_build_config.prf" + "qt_config.prf")) + (("\\$\\$\\[QT_HOST_DATA/get\\]") archdata) + (("\\$\\$\\[QT_HOST_DATA/src\\]") archdata))))))))) + (native-inputs + `(("gtk+" ,gtk+) ;for GTK theme support + ("ninja" ,ninja) + ("wayland-protocols" ,wayland-protocols) + ("xorg-server" ,xorg-server-for-tests) + ,@(package-native-inputs qtbase-5))) + (native-search-paths + (list (search-path-specification + (variable "QMAKEPATH") + (files '("lib/qt6"))) + (search-path-specification + (variable "QML2_IMPORT_PATH") + (files '("lib/qt6/qml"))) + (search-path-specification + (variable "QT_PLUGIN_PATH") + (files '("lib/qt6/plugins"))) + (search-path-specification + (variable "XDG_DATA_DIRS") + (files '("share"))) + (search-path-specification + (variable "XDG_CONFIG_DIRS") + (files '("etc/xdg"))))))) (define-public qtsvg (package (inherit qtbase-5) |