~ruther/guix-local

4a2281923ab608b5aa120499d8c13bd39c245d46 — Efraim Flashner 4 months ago 4a1ba85
gnu: qtbase: Always find libvulkan.

Fixes: guix/guix#3330

* gnu/packages/qt.scm (qtbase)[source]: Add patch.
[arguments]: Adjust a phase to substitute the location for libvulkan.so.
* gnu/packages/patches/qtbase-patch-libvulkan.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.

Co-authored-by: kestrelwx <kestrel.w@proton.me>
Change-Id: I39f1be5a30c5c17a4e4ea6c853b475f20ba8272c
Signed-off-by: Andreas Enge <andreas@enge.fr>
3 files changed, 37 insertions(+), 1 deletions(-)

M gnu/local.mk
A gnu/packages/patches/qtbase-patch-libvulkan.patch
M gnu/packages/qt.scm
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2212,6 2212,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/qtbase-qmake-fix-includedir.patch 	\
  %D%/packages/patches/qtbase-qmlimportscanner-qml-import-path.patch 	\
  %D%/packages/patches/qtbase-moc-ignore-gcc-macro.patch	\
  %D%/packages/patches/qtbase-patch-libvulkan.patch		\
  %D%/packages/patches/qtbase-qmake-use-libname.patch		\
  %D%/packages/patches/qtbase-5-use-TZDIR.patch			\
  %D%/packages/patches/qtscript-disable-tests.patch		\

A gnu/packages/patches/qtbase-patch-libvulkan.patch => gnu/packages/patches/qtbase-patch-libvulkan.patch +28 -0
@@ 0,0 1,28 @@
Add the full name for libvulkan.so.1 so that we can patch it in the 'build phase.
Not sent upstream.

diff --git a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
index 47d9a7e9..80c929e5 100644
--- a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
+++ b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
@@ -45,7 +45,7 @@ QBasicPlatformVulkanInstance::~QBasicPlatformVulkanInstance()
 
 void QBasicPlatformVulkanInstance::loadVulkanLibrary(const QString &defaultLibraryName, int defaultLibraryVersion)
 {
-    QVarLengthArray<std::pair<QString, int>, 3> loadList;
+    QVarLengthArray<std::pair<QString, int>, 4> loadList;
 
     // First in the list of libraries to try is the manual override, relevant on
     // embedded systems without a Vulkan loader and possibly with custom vendor
@@ -63,6 +63,11 @@ void QBasicPlatformVulkanInstance::loadVulkanLibrary(const QString &defaultLibra
     if (defaultLibraryVersion >= 0)
         loadList.append({ defaultLibraryName, -1 });
 
+#ifdef __linux__
+    // As a fallback we append to the list the full default name of libvulkan.
+    loadList.append({ QString::fromUtf8("libvulkan.so.1"), -1 });
+#endif
+
     bool ok = false;
     for (const auto &lib : loadList) {
         m_vulkanLib.reset(new QLibrary);

M gnu/packages/qt.scm => gnu/packages/qt.scm +8 -1
@@ 786,7 786,8 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                "qtbase-absolute-runpath.patch"
                "qtbase-qmake-use-libname.patch"
                "qtbase-qmlimportscanner-qml-import-path.patch"
                "qtbase-qmake-fix-includedir.patch"))))
                "qtbase-qmake-fix-includedir.patch"
                "qtbase-patch-libvulkan.patch"))))
    (build-system cmake-build-system)
    (arguments
     (substitute-keyword-arguments (package-arguments qtbase-5)


@@ 897,6 898,11 @@ tst_qt_cmake_create.cpp"
                  (("/bin/ls")
                   (search-input-file inputs "bin/ls")))

                ;; Patch the added reference for libvulkan.so
                (substitute* "src/gui/vulkan/qbasicvulkanplatforminstance.cpp"
                  (("libvulkan\\.so\\.1")
                   (search-input-file inputs "lib/libvulkan.so.1")))

                ;; Use shared-mime-info as the default MIME type database.
                (substitute* "src/corelib/mimetypes/qmimedatabase.cpp"
                  (("return dirs;" all)


@@ 1213,6 1219,7 @@ tst_qt_cmake_create.cpp"
                libxcb
                libxext
                shared-mime-info
                vulkan-loader
                xcb-util-cursor
                `(,zstd "lib"))))
    (native-search-paths