gnu: qt: Fix install paths in submodules.

Before this, the paths in pkg-config (.pc) and libtool (.la) files of
submodules are all pointing to qtbase.

* gnu/packages/qt.scm (qtbase)[native-inputs]: Move 'which' to
'propagated-inputs'.
[arguments]: Rename 'patch-qt_config.prf' phase to 'patch-mkspecs' and
patch more qmake spec files there.
(qtsvg)[arguments]: Add 'configure-qmake' phase.
This commit is contained in:
宋文武 2017-09-03 17:38:57 +08:00 committed by Hartmut Goebel
parent 6fc0e157ee
commit 8075b62378
No known key found for this signature in database
GPG Key ID: 634A8DFFD3F631DF
1 changed files with 63 additions and 23 deletions

View File

@ -389,7 +389,8 @@ developers using C++ or QML, a CSS & JavaScript like language.")
#t)))) #t))))
(build-system gnu-build-system) (build-system gnu-build-system)
(propagated-inputs (propagated-inputs
`(("mesa" ,mesa))) `(("mesa" ,mesa)
("which" ,(@ (gnu packages base) which))))
(inputs (inputs
`(("alsa-lib" ,alsa-lib) `(("alsa-lib" ,alsa-lib)
("cups" ,cups) ("cups" ,cups)
@ -440,8 +441,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
("perl" ,perl) ("perl" ,perl)
("pkg-config" ,pkg-config) ("pkg-config" ,pkg-config)
("python" ,python-2) ("python" ,python-2)
("ruby" ,ruby) ("ruby" ,ruby)))
("which" ,(@ (gnu packages base) which))))
(arguments (arguments
`(#:phases `(#:phases
(modify-phases %standard-phases (modify-phases %standard-phases
@ -505,10 +505,11 @@ developers using C++ or QML, a CSS & JavaScript like language.")
'("-no-sse2")) '("-no-sse2"))
"-no-mips_dsp" "-no-mips_dsp"
"-no-mips_dspr2"))))) "-no-mips_dspr2")))))
(add-after 'install 'patch-qt_config.prf (add-after 'install 'patch-mkspecs
(lambda* (#:key outputs #:allow-other-keys) (lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")) (let* ((out (assoc-ref outputs "out"))
(mkspecs (string-append out "/lib/qt5/mkspecs")) (archdata (string-append out "/lib/qt5"))
(mkspecs (string-append archdata "/mkspecs"))
(qt_config.prf (string-append (qt_config.prf (string-append
mkspecs "/features/qt_config.prf"))) mkspecs "/features/qt_config.prf")))
;; For each Qt module, let `qmake' uses search paths in the ;; For each Qt module, let `qmake' uses search paths in the
@ -522,6 +523,20 @@ developers using C++ or QML, a CSS & JavaScript like language.")
"$$clean_path($$replace(dir, mkspecs/modules, ../../lib))") "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))")
(("\\$\\$\\[QT_INSTALL_BINS\\]") (("\\$\\$\\[QT_INSTALL_BINS\\]")
"$$clean_path($$replace(dir, mkspecs/modules, ../../bin))")) "$$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)))))) #t))))))
(native-search-paths (native-search-paths
(list (search-path-specification (list (search-path-specification
@ -567,26 +582,51 @@ developers using C++ or QML, a CSS & JavaScript like language.")
(arguments (arguments
`(#:phases `(#:phases
(modify-phases %standard-phases (modify-phases %standard-phases
(replace 'configure (add-before 'configure 'configure-qmake
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
;; Valid QT_BUILD_PARTS variables are:
;; libs tools tests examples demos docs translations
(zero? (system* "qmake" "QT_BUILD_PARTS = libs tools tests"
(string-append "PREFIX=" out))))))
(add-before 'install 'fix-Makefiles
(lambda* (#:key inputs outputs #:allow-other-keys) (lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")) (let* ((out (assoc-ref outputs "out"))
(qtbase (assoc-ref inputs "qtbase"))) (qtbase (assoc-ref inputs "qtbase"))
(substitute* (find-files "." "Makefile") (tmpdir (string-append (getenv "TMPDIR")))
(((string-append "INSTALL_ROOT)" qtbase)) (qmake (string-append tmpdir "/qmake"))
(string-append "INSTALL_ROOT)" out))) (qt.conf (string-append tmpdir "/qt.conf")))
;; Use qmake with a customized qt.conf to override install
;; paths to $out.
(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
" out out)))
#t))) #t)))
(add-before 'check 'set-display (replace 'configure
(lambda _ (lambda* (#:key inputs outputs #:allow-other-keys)
;; make Qt render "offscreen", required for tests ;; Valid QT_BUILD_PARTS variables are:
(setenv "QT_QPA_PLATFORM" "offscreen") ;; libs tools tests examples demos docs translations
#t))))) (zero? (system* "qmake" "QT_BUILD_PARTS = libs tools tests"))))
(add-before 'check 'set-display
(lambda _
;; make Qt render "offscreen", required for tests
(setenv "QT_QPA_PLATFORM" "offscreen")
#t)))))
(synopsis "Qt module for displaying SVGs") (synopsis "Qt module for displaying SVGs")
(description "The QtSvg module provides classes for displaying the (description "The QtSvg module provides classes for displaying the
contents of SVG files."))) contents of SVG files.")))