package/qt5base: fix libtool la file dependency_libs entries

Fixes [1]:

  libtool: error: cannot find the library '' or unhandled argument '/.../host/riscv64-buildroot-linux-gnu/sysroot/usr/lib/libQt5Widgets.so'

Add upstream suggested patch ([2]) to change la file dependency_libs entries
to -L<path> -l<library> version.

[1] http://autobuild.buildroot.net/results/79c1e1b7a1bc53c1e9b2ae0c9acb443e6d2e2994
[2] https://codereview.qt-project.org/c/qt/qtbase/+/269146

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
Tested-by: Bernd Kuhls <bernd.kuhls@t-online.de>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This commit is contained in:
Peter Seiderer 2019-08-01 23:48:23 +02:00 committed by Arnout Vandecappelle (Essensium/Mind)
parent b3424c8fc9
commit 4ad73bf5e6

View File

@ -0,0 +1,75 @@
From 23e437bb5cba5b13ee327c36d8199a49aad9a8da Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@qt.io>
Date: Wed, 31 Jul 2019 10:55:14 +0200
Subject: [PATCH] Fix dependency_libs entry of .la files
Libtool cannot cope with absolute paths in the dependency_libs entry.
We split absolute paths into -L and -l here.
Change-Id: I30bf11e490d1993d2a4d88c114e07bbae12def6d
Fixes: QTBUG-76625
Upstream: https://codereview.qt-project.org/c/qt/qtbase/+/269146
Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
qmake/generators/unix/unixmake2.cpp | 36 +++++++++++++++++++++++++----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index d9bcccf2e2..ddc3b063d4 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -1450,6 +1450,33 @@ UnixMakefileGenerator::libtoolFileName(bool fixify)
void
UnixMakefileGenerator::writeLibtoolFile()
{
+ auto fixAbsolutePaths
+ = [this](const ProStringList &libs)
+ {
+ ProStringList result;
+ for (auto lib : libs) {
+ auto fi = fileInfo(lib.toQString());
+ if (fi.isAbsolute()) {
+ const QString libDirArg = "-L" + fi.path();
+ if (!result.contains(libDirArg))
+ result += libDirArg;
+ QString namespec = fi.fileName();
+ int dotPos = namespec.lastIndexOf('.');
+ if (dotPos != -1 && namespec.startsWith("lib")) {
+ namespec.truncate(dotPos);
+ namespec.remove(0, 3);
+ } else {
+ namespec.prepend(':');
+ }
+ result += "-l" + namespec;
+ } else {
+
+ result += lib;
+ }
+ }
+ return result;
+ };
+
QString fname = libtoolFileName(), lname = fname;
mkdir(fileInfo(fname).path());
int slsh = lname.lastIndexOf(Option::dir_sep);
@@ -1488,12 +1515,11 @@ UnixMakefileGenerator::writeLibtoolFile()
<< ".a'\n\n";
t << "# Libraries that this one depends upon.\n";
+ static const ProKey libVars[] = { "LIBS", "QMAKE_LIBS" };
ProStringList libs;
- libs << "LIBS" << "QMAKE_LIBS";
- t << "dependency_libs='";
- for (ProStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it)
- t << fixLibFlags((*it).toKey()).join(' ') << ' ';
- t << "'\n\n";
+ for (auto var : libVars)
+ libs += fixLibFlags(var);
+ t << "dependency_libs='" << fixAbsolutePaths(libs).join(' ') << "'\n\n";
t << "# Version information for " << lname << "\n";
int maj = project->first("VER_MAJ").toInt();
--
2.22.0