123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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
|