aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/qt.scm110
1 files changed, 103 insertions, 7 deletions
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 20543fe837..c5ae067bdf 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -249,9 +249,24 @@ system, and the core design of Django is reused in Grantlee.")
"./configure"
"-verbose"
"-prefix" out
- "-examplesdir" examples ; 89MiB
+ "-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"
@@ -259,6 +274,7 @@ system, and the core design of Django is reused in Grantlee.")
;; 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
@@ -273,12 +289,92 @@ system, and the core design of Django is reused in Grantlee.")
'()
'("-no-sse2"))
"-no-mips_dsp"
- "-no-mips_dspr2"))))))))
- (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 license:lgpl2.1)
+ "-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 <http://hydra.gnu.org/build/112828>.