From de6f155426b7f1c8b38b8a1f92073eff3a04ecdc Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Mon, 25 Jul 2022 15:51:56 -0400 Subject: [PATCH] gnu: qtbase: Enable test suite. * gnu/packages/qt.scm (qtbase)[tests?]: Delete argument. [configure-flags]: Add "-DQT_BUILD_TESTS=ON". [phases]{check}: Move after the patch-prl-files phase and override. [native-inputs]: Add xvfb-run. --- gnu/packages/qt.scm | 112 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 106 insertions(+), 6 deletions(-) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index c2e509fcdf..001e6286fe 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -570,14 +570,10 @@ (define-public qtbase (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) ((#:configure-flags _ ''()) `(let ((out (assoc-ref %outputs "out"))) (list "-GNinja" ;the build fails otherwise + "-DQT_BUILD_TESTS=ON" (string-append "-DINSTALL_ARCHDATADIR=" out "/lib/qt6") (string-append "-DINSTALL_DATADIR=" out "/share/qt6") (string-append "-DINSTALL_DOCDIR=" out "/share/doc/qt6") @@ -664,6 +660,108 @@ (define-public qtbase (if parallel-build? `("--parallel" ,(number->string (parallel-job-count))) '())))) + (delete 'check) ;move after patch-prl-files + (add-after 'patch-prl-files 'check + (lambda* (#:key tests? parallel-tests? #:allow-other-keys) + (when tests? + ;; The tests expect to find the modules provided by this + ;; package; extend the environment variables needed to do so. + (setenv "CMAKE_PREFIX_PATH" + (string-append #$output + ":" (getenv "CMAKE_PREFIX_PATH"))) + (setenv "QMAKEPATH" (string-append #$output "/lib/qt6")) + (setenv "QML2_IMPORT_PATH" + (string-append #$output "/lib/qt6/qml")) + (setenv "QT_PLUGIN_PATH" + (string-append #$output "/lib/qt6/plugins")) + (setenv "QT_QPA_PLATFORM" "offscreen") + ;; Skip tests known to fail on GNU/Linux, in a CI context or + ;; due to bitness (see: https://code.qt.io/cgit/qt/qtbase.git + ;; /tree/src/testlib/qtestblacklist.cpp). + (setenv "QTEST_ENVIRONMENT" "linux ci 32bit") + (setenv "HOME" "/tmp") ;some tests require a writable HOME + (invoke + "xvfb-run" "ctest" "--output-on-failure" + "-j" (if parallel-tests? + (number->string (parallel-job-count)) + "1") + "-E" ;disable problematic tests + (string-append + "(" + (string-join + (list + ;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE". + "tst_moc" + ;; The 'test_rcc' test fails on a comparison: + ;; <<<<<< actual + ;; 0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xe8, + ;; ====== + ;; 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + ;; >>>>>> expected + "tst_rcc" + ;; The 'tst_qtemporarydir' and 'tst_qtemporaryfile' + ;; tests depend on '/home' not being writable. + "tst_qtemporarydir" + "tst_qtemporaryfile" + ;; The 'tst_qdir' compares two directories which are + ;; unexpectedly different when inside the build + ;; container. + "tst_qdir" + ;; This checks the last modified time of '/', and fails + ;; because Epoch 0 is considered to be invalid. + "tst_qresourceengine" + ;; The 'tst_qfilesystemwatcher' installs a watcher on + ;; '/home', which doesn't exist in the build container. + "tst_qfilesystemwatcher" + ;; The 'mockplugins' test fail following error: "Unknown + ;; platform linux-g++", and the other plugin tests + ;; depend on it. + "mockplugins" + "test_plugin_flavor.*" + ;; The 'test_import_plugins' fails with "Could NOT find + ;; Qt6MockPlugins1". + "test_import_plugins" + ;; The 'tst_QTimeZone::systemZone' validates the + ;; currently set timezone and fails. + "tst_qtimezone" + ;; The 'tst_qdatetime' fails with: + ;; FAIL! : tst_QDateTime::offsetFromUtc() Compared values are not the same + ;; Actual (dt5.offsetFromUtc()): 0 + ;; Expected (46800) : 46800 + "tst_qdatetime" + ;; The 'tst_QSettings::fromFile' assumes the data + ;; location to be relative to the root directory and + ;; fails. + "tst_qsettings" + ;; The 'tst_qaddpreroutine', + ;; 'test_generating_cpp_exports' and + ;; 'test_static_resources' tests fail with: "Unknown + ;; platform linux-g++. + "tst_qaddpreroutine" + "test_generating_cpp_exports" + "test_static_resources" + ;; The 'tst_qfile' fails since there is no /home in the + ;; build container. + "tst_qfile" + ;; The 'tst_QGlyphRun::mixedScripts' test fails with: + ;; Actual (glyphRuns.size()): 1 + ;; Expected (2) : 2 + "tst_qglyphrun" + ;; The 'tst_qx11info' test fails with "Internal error: + ;; QPA plugin doesn't implement generatePeekerId", + ;; likely requires a real display. + "tst_qx11info" + ;; The 'tst_qgraphicswidget' test fails because "This + ;; plugin does not support propagateSizeHints". + "tst_qgraphicswidget" + ;; The 'tst_qdnslookup' test requires networking. + "tst_qdnslookup" + ;; The 'tst_qcompleter' and 'tst_QFiledialog::completer' + ;; attempt to complete paths they assume exist, such as + ;; "/home", "/etc" or "/root" and fail. + "tst_qcompleter" + "tst_qfiledialog") "|") + ")"))))) (replace 'install (lambda _ (invoke "cmake" "--install" "."))) @@ -708,7 +806,9 @@ (define-public qtbase (native-inputs (modify-inputs (package-native-inputs qtbase-5) (prepend gtk ;for GTK theme support - ninja wayland-protocols))) + ninja + wayland-protocols + xvfb-run))) (inputs (modify-inputs (package-inputs qtbase-5) (prepend bash-minimal coreutils-minimal libxcb md4c)