From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38837) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e0RLQ-0000co-OW for guix-patches@gnu.org; Fri, 06 Oct 2017 08:03:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e0RLM-0006NQ-Dy for guix-patches@gnu.org; Fri, 06 Oct 2017 08:03:08 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:43591) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1e0RLM-0006NB-8r for guix-patches@gnu.org; Fri, 06 Oct 2017 08:03:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1e0RLK-0006e5-Ah for guix-patches@gnu.org; Fri, 06 Oct 2017 08:03:03 -0400 Subject: [bug#28719] [PATCH 2/6] gnu: qt: Fix install paths in submodules. Resent-Message-ID: From: Hartmut Goebel Date: Fri, 6 Oct 2017 14:02:10 +0200 Message-Id: <20171006120214.29511-2-h.goebel@crazy-compilers.com> In-Reply-To: <20171006120214.29511-1-h.goebel@crazy-compilers.com> References: <20171006120214.29511-1-h.goebel@crazy-compilers.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 28719@debbugs.gnu.org From: 宋文武 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-mkspecs' phase to 'patch-mkspecs' and patch more qmake spec files there. (qtsvg)[arguments]: Add 'configure-qmake' phase. --- gnu/packages/qt.scm | 86 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 63 insertions(+), 23 deletions(-) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index e276eb05b..88e0011b1 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -376,7 +376,8 @@ developers using C++ or QML, a CSS & JavaScript like language.") #t)))) (build-system gnu-build-system) (propagated-inputs - `(("mesa" ,mesa))) + `(("mesa" ,mesa) + ("which" ,(@ (gnu packages base) which)))) (inputs `(("alsa-lib" ,alsa-lib) ("cups" ,cups) @@ -427,8 +428,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") ("perl" ,perl) ("pkg-config" ,pkg-config) ("python" ,python-2) - ("ruby" ,ruby) - ("which" ,(@ (gnu packages base) which)))) + ("ruby" ,ruby))) (arguments `(#:phases (modify-phases %standard-phases @@ -492,10 +492,11 @@ developers using C++ or QML, a CSS & JavaScript like language.") '("-no-sse2")) "-no-mips_dsp" "-no-mips_dspr2"))))) - (add-after 'install 'patch-qt_config.prf + (add-after 'install 'patch-mkspecs (lambda* (#:key outputs #:allow-other-keys) (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 mkspecs "/features/qt_config.prf"))) ;; For each Qt module, let `qmake' uses search paths in the @@ -509,6 +510,20 @@ developers using C++ or QML, a CSS & JavaScript like language.") "$$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)))))) (native-search-paths (list (search-path-specification @@ -554,26 +569,51 @@ developers using C++ or QML, a CSS & JavaScript like language.") (arguments `(#:phases (modify-phases %standard-phases - (replace 'configure - (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 + (add-before 'configure 'configure-qmake (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (qtbase (assoc-ref inputs "qtbase"))) - (substitute* (find-files "." "Makefile") - (((string-append "INSTALL_ROOT)" qtbase)) - (string-append "INSTALL_ROOT)" out))) + (let* ((out (assoc-ref outputs "out")) + (qtbase (assoc-ref inputs "qtbase")) + (tmpdir (string-append (getenv "TMPDIR"))) + (qmake (string-append tmpdir "/qmake")) + (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))) - (add-before 'check 'set-display - (lambda _ - ;; make Qt render "offscreen", required for tests - (setenv "QT_QPA_PLATFORM" "offscreen") - #t))))))) + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; Valid QT_BUILD_PARTS variables are: + ;; libs tools tests examples demos docs translations + (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))))))) (define-public qtimageformats (package (inherit qtsvg) -- 2.13.5