From 02511196d99ebc5e385e9dc7f733ffbe848e25ca Mon Sep 17 00:00:00 2001 From: Hartmut Goebel Date: Thu, 24 Oct 2019 20:28:26 +0200 Subject: gnu: Deprecate monolithic Qt 5.x package. The monolithic package was not used except as a base for qt-4. Disband this relation and make qt-4 a complete independent package definition. Thus the monolithic package qt5 and be removed resp. deprecated. * gnu/packages/qt.scm (qt-4): Copy all relevant package definition parts from 'qt' and not longer inherit from 'qt'. (qt): Define as a deprecated alias for 'qtbase`. --- gnu/packages/qt.scm | 304 ++++++++++------------------------------------------ 1 file changed, 54 insertions(+), 250 deletions(-) (limited to 'gnu/packages') diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index e9dc406328..7b0bccd0c9 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -38,6 +38,7 @@ #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module (guix packages) + #:use-module (guix deprecation) #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages base) @@ -126,65 +127,26 @@ other text such as code. The syntax uses the syntax of the Django template system, and the core design of Django is reused in Grantlee.") (license license:lgpl2.0+))) -(define-public qt +(define-public qt-4 (package (name "qt") - (version "5.11.3") - (outputs '("out" "examples")) + (version "4.8.7") (source (origin (method url-fetch) - (uri - (string-append - "http://download.qt.io/official_releases/qt/" - (version-major+minor version) - "/" version - "/single/qt-everywhere-src-" - version ".tar.xz")) + (uri (string-append "http://download.qt-project.org/official_releases/qt/" + (string-copy version 0 (string-rindex version #\.)) + "/" version + "/qt-everywhere-opensource-src-" + version ".tar.gz")) (sha256 (base32 - "0kgzy32s1fr22fxxfhcyncfryb3qxrznlr737r4y5khk4xj1g545")) + "183fca7n7439nlhxyg1z7aky0izgbyll3iwakw4gwivy16aj5272")) + (patches (search-patches "qt4-ldflags.patch")) (modules '((guix build utils))) (snippet - '(begin - ;; Remove qtwebengine, which relies on a bundled copy of - ;; chromium. Not only does it fail compilation in qt 5.5: - ;; 3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc:362:10: - ;; error: cannot convert ‘bool’ to ‘boolean’ in return - ;; it might also pose security problems. - ;; Alternatively, we could use the "-skip qtwebengine" - ;; configuration option. - (delete-file-recursively "qtwebengine") - ;; The following snippets are copied from their mondular-qt counterparts. - (for-each - (lambda (dir) - (delete-file-recursively (string-append "qtbase/src/3rdparty/" dir))) - (list "double-conversion" "freetype" "harfbuzz-ng" - "libpng" "libjpeg" "pcre2" "sqlite" "xcb" - "xkbcommon" "zlib")) - (for-each - (lambda (dir) - (delete-file-recursively dir)) - (list "qtimageformats/src/3rdparty" - "qtmultimedia/examples/multimedia/spectrum/3rdparty" - "qtwayland/examples" - "qtscxml/tests/3rdparty" - "qtcanvas3d/examples/canvas3d/3rdparty")) - ;; Tests depend on this example, which depends on the 3rd party code. - (substitute* "qtmultimedia/examples/multimedia/multimedia.pro" - (("spectrum") "#")) - (substitute* "qtxmlpatterns/tests/auto/auto.pro" - (("qxmlquery") "# qxmlquery") - (("xmlpatterns ") "# xmlpatterns")) - (substitute* "qtwebglplugin/tests/plugins/platforms/platforms.pro" - (("webgl") "# webgl")) - (substitute* "qtscxml/tests/auto/auto.pro" - (("scion") "#")) - (substitute* "qtnetworkauth/tests/auto/auto.pro" - (("oauth1 ") "# oauth1 ")) - (substitute* "qtremoteobjects/tests/auto/qml/qml.pro" - (("integration") "# integration") - (("usertypes") "# usertypes")) - #t)))) + ;; Remove webkit module, which is not built. + '(begin (delete-file-recursively "src/3rdparty/webkit") + #t)))) (build-system gnu-build-system) (propagated-inputs `(("mesa" ,mesa))) @@ -200,11 +162,9 @@ system, and the core design of Django is reused in Grantlee.") ("glib" ,glib) ("gstreamer" ,gstreamer) ("gst-plugins-base" ,gst-plugins-base) - ("harfbuzz" ,harfbuzz) ("icu4c" ,icu4c) ("jasper" ,jasper) ("libinput" ,libinput-minimal) - ("libjpeg" ,libjpeg) ("libmng" ,libmng) ("libpci" ,pciutils) ("libpng" ,libpng) @@ -226,7 +186,6 @@ system, and the core design of Django is reused in Grantlee.") ("mtdev" ,mtdev) ("mariadb" ,mariadb) ("nss" ,nss) - ("openssl" ,openssl) ("postgresql" ,postgresql) ("pulseaudio" ,pulseaudio) ("pcre2" ,pcre2) @@ -239,197 +198,7 @@ system, and the core design of Django is reused in Grantlee.") ("xcb-util-keysyms" ,xcb-util-keysyms) ("xcb-util-renderutil" ,xcb-util-renderutil) ("xcb-util-wm" ,xcb-util-wm) - ("zlib" ,zlib))) - (native-inputs - `(("bison" ,bison) - ("flex" ,flex) - ("gperf" ,gperf) - ("perl" ,perl) - ("pkg-config" ,pkg-config) - ("python" ,python-2) - ("ruby" ,ruby) - ("vulkan-headers" ,vulkan-headers) - ("which" ,(@ (gnu packages base) which)))) - (arguments - `(#:parallel-build? #f ; Triggers race condition in qtbase module on Hydra. - #:phases - (modify-phases %standard-phases - (add-after 'configure 'patch-bin-sh - (lambda _ - (substitute* '("qtbase/configure" - "qtbase/mkspecs/features/qt_functions.prf" - "qtbase/qmake/library/qmakebuiltins.cpp") - (("/bin/sh") (which "sh"))) - #t)) - (replace 'configure - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (examples (assoc-ref outputs "examples"))) - (substitute* '("configure" "qtbase/configure") - (("/bin/pwd") (which "pwd"))) - (substitute* "qtbase/src/corelib/global/global.pri" - (("/bin/ls") (which "ls"))) - ;; do not pass "--enable-fast-install", which makes the - ;; configure process fail - (invoke - "./configure" - "-verbose" - "-prefix" out - "-docdir" (string-append out "/share/doc/qt5") - "-headerdir" (string-append out "/include/qt5") - "-archdatadir" (string-append out "/lib/qt5") - "-datadir" (string-append out "/share/qt5") - "-examplesdir" (string-append - examples "/share/doc/qt5/examples") ; 151MiB - "-opensource" - "-confirm-license" - - ;; 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 Qt5 applications can be used on the oldest - ;; kernels that the glibc supports, including the RHEL6 - ;; (2.6.32) and RHEL7 (3.10) kernels. - "-no-feature-getentropy" ; requires Linux 3.17 - "-no-feature-renameat2" ; requires Linux 3.16 - - ;; Do not build examples; for the time being, we - ;; prefer to save the space and build time. - "-no-compile-examples" - ;; Most "-system-..." are automatic, but some use - ;; the bundled copy by default. - "-system-sqlite" - "-system-harfbuzz" - "-system-pcre" - ;; explicitly link with openssl instead of dlopening it - "-openssl-linked" - ;; explicitly link with dbus instead of dlopening it - "-dbus-linked" - ;; don't use the precompiled headers - "-no-pch" - ;; drop special machine instructions not supported - ;; on all instances of the target - ,@(if (string-prefix? "x86_64" - (or (%current-target-system) - (%current-system))) - '() - '("-no-sse2")) - "-no-mips_dsp" - "-no-mips_dspr2")))) - (add-after 'install 'patch-mkspecs - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (archdata (string-append out "/lib/qt5")) - (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/qt5))") - (("\\$\\$\\[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" "winrt/package_manifest.prf")) - (("\\$\\$\\[QT_HOST_DATA/get\\]") archdata) - (("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)) - #t))) - (add-after 'unpack 'patch-paths - ;; Use the absolute paths for dynamically loaded libs, otherwise - ;; the lib will be searched in LD_LIBRARY_PATH which typically is - ;; not set in guix. - (lambda* (#:key inputs #:allow-other-keys) - ;; libresolve - (let ((glibc (assoc-ref inputs ,(if (%current-target-system) - "cross-libc" "libc")))) - (substitute* '("qtbase/src/network/kernel/qdnslookup_unix.cpp" - "qtbase/src/network/kernel/qhostinfo_unix.cpp") - (("^\\s*(lib.setFileName\\(QLatin1String\\(\")(resolv\"\\)\\);)" _ a b) - (string-append a glibc "/lib/lib" b)))) - ;; X11/locale (compose path) - (substitute* "qtbase/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp" - ;; Don't search in /usr/…/X11/locale, … - (("^\\s*m_possibleLocations.append\\(QStringLiteral\\(\"/usr/.*/X11/locale\"\\)\\);" line) - (string-append "// " line)) - ;; … but use libx11's path - (("^\\s*(m_possibleLocations.append\\(QStringLiteral\\()X11_PREFIX \"(/.*/X11/locale\"\\)\\);)" _ a b) - (string-append a "\"" (assoc-ref inputs "libx11") b))) - ;; libGL - (substitute* "qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp" - (("^\\s*(QLibrary lib\\(QLatin1String\\(\")(GL\"\\)\\);)" _ a b) - (string-append a (assoc-ref inputs "mesa") "/lib/lib" b))) - ;; libXcursor - (substitute* "qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp" - (("^\\s*(QLibrary xcursorLib\\(QLatin1String\\(\")(Xcursor\"\\), 1\\);)" _ a b) - (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b)) - (("^\\s*(xcursorLib.setFileName\\(QLatin1String\\(\")(Xcursor\"\\)\\);)" _ a b) - (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))) - #t))))) - (native-search-paths - (list (search-path-specification - (variable "QMAKEPATH") - (files '("lib/qt5"))) - (search-path-specification - (variable "QML2_IMPORT_PATH") - (files '("lib/qt5/qml"))) - (search-path-specification - (variable "QT_PLUGIN_PATH") - (files '("lib/qt5/plugins"))) - (search-path-specification - (variable "XDG_DATA_DIRS") - (files '("share"))) - (search-path-specification - (variable "XDG_CONFIG_DIRS") - (files '("etc/xdg"))))) - (home-page "https://www.qt.io/") - (synopsis "Cross-platform GUI library") - (description "Qt is a cross-platform application and UI framework for - developers using C++ or QML, a CSS & JavaScript like language.") - (license (list license:lgpl2.1 license:lgpl3)) - - ;; Qt 4: 'QBasicAtomicPointer' leads to build failures on MIPS; - ;; see . - ;; Qt 5: assembler error; see . - (supported-systems (delete "mips64el-linux" %supported-systems)))) - -(define-public qt-4 - (package (inherit qt) - (version "4.8.7") - (source (origin - (method url-fetch) - (uri (string-append "http://download.qt-project.org/official_releases/qt/" - (string-copy version 0 (string-rindex version #\.)) - "/" version - "/qt-everywhere-opensource-src-" - version ".tar.gz")) - (sha256 - (base32 - "183fca7n7439nlhxyg1z7aky0izgbyll3iwakw4gwivy16aj5272")) - (patches (search-patches "qt4-ldflags.patch")) - (modules '((guix build utils))) - (snippet - ;; Remove webkit module, which is not built. - '(begin (delete-file-recursively "src/3rdparty/webkit") - #t)))) - (inputs - `(,@(fold alist-delete - (package-inputs qt) - '("harfbuzz" "libjpeg" "openssl")) + ("zlib" ,zlib) ("libjpeg" ,libjpeg-8) ("libsm" ,libsm) ("openssl" ,openssl-1.0))) @@ -438,10 +207,14 @@ system, and the core design of Django is reused in Grantlee.") ;; We could build it with -std=gnu++98, but then we'll get in trouble with ;; ICU later. Just keep using GCC 5 for now. ("gcc" ,gcc-5) - ,@(fold alist-delete - (package-native-inputs qt) - '("vulkan-headers")))) - + ("bison" ,bison) + ("flex" ,flex) + ("gperf" ,gperf) + ("perl" ,perl) + ("pkg-config" ,pkg-config) + ("python" ,python-2) + ("ruby" ,ruby) + ("which" ,(@ (gnu packages base) which)))) ;; Note: there are 37 MiB of examples and a '-exampledir' configure flags, ;; but we can't make them a separate output because "out" and "examples" ;; would refer to each other. @@ -519,7 +292,33 @@ system, and the core design of Django is reused in Grantlee.") ;; different "devices" due to bind-mounts. (copy-recursively olddoc docdir) (delete-file-recursively olddoc) - #t)))))))) + #t)))))) + (native-search-paths + (list (search-path-specification + (variable "QMAKEPATH") + (files '("lib/qt5"))) + (search-path-specification + (variable "QML2_IMPORT_PATH") + (files '("lib/qt5/qml"))) + (search-path-specification + (variable "QT_PLUGIN_PATH") + (files '("lib/qt5/plugins"))) + (search-path-specification + (variable "XDG_DATA_DIRS") + (files '("share"))) + (search-path-specification + (variable "XDG_CONFIG_DIRS") + (files '("etc/xdg"))))) + (home-page "https://www.qt.io/") + (synopsis "Cross-platform GUI library") + (description "Qt is a cross-platform application and UI framework for +developers using C++ or QML, a CSS & JavaScript like language.") + (license (list license:lgpl2.1 license:lgpl3)) + + ;; Qt 4: 'QBasicAtomicPointer' leads to build failures on MIPS; + ;; see . + ;; Qt 5: assembler error; see . + (supported-systems (delete "mips64el-linux" %supported-systems)))) (define-public qtbase (package @@ -761,6 +560,11 @@ 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 qtbase) + + (define-public qtsvg (package (inherit qtbase) (name "qtsvg") -- cgit 1.4.1