forked from qt-creator/qt-creator
CMakePM: Fix build library search path with CMake 3.20+
CMake 3.20 has changed the relative path to dependent libraries from current binary directory to main binary directory. See https://gitlab.kitware.com/cmake/cmake/-/issues/22556 Fixes: QTCREATORBUG-26110 Change-Id: I39c1d6b2998ebb079e7017e8d349881752d80354 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -191,12 +191,14 @@ static bool isChildOf(const FilePath &path, const QStringList &prefixes)
|
|||||||
|
|
||||||
QList<CMakeBuildTarget> generateBuildTargets(const PreprocessedData &input,
|
QList<CMakeBuildTarget> generateBuildTargets(const PreprocessedData &input,
|
||||||
const FilePath &sourceDirectory,
|
const FilePath &sourceDirectory,
|
||||||
const FilePath &buildDirectory)
|
const FilePath &buildDirectory,
|
||||||
|
bool haveLibrariesRelativeToBuildDirectory)
|
||||||
{
|
{
|
||||||
QDir sourceDir(sourceDirectory.toString());
|
QDir sourceDir(sourceDirectory.toString());
|
||||||
|
|
||||||
const QList<CMakeBuildTarget> result = transform<QList>(input.targetDetails,
|
const QList<CMakeBuildTarget> result = transform<QList>(input.targetDetails,
|
||||||
[&sourceDir, &sourceDirectory, &buildDirectory](const TargetDetails &t) {
|
[&sourceDir, &sourceDirectory, &buildDirectory,
|
||||||
|
&haveLibrariesRelativeToBuildDirectory](const TargetDetails &t) {
|
||||||
const FilePath currentBuildDir = buildDirectory.absoluteFilePath(t.buildDir);
|
const FilePath currentBuildDir = buildDirectory.absoluteFilePath(t.buildDir);
|
||||||
|
|
||||||
CMakeBuildTarget ct;
|
CMakeBuildTarget ct;
|
||||||
@@ -271,7 +273,8 @@ QList<CMakeBuildTarget> generateBuildTargets(const PreprocessedData &input,
|
|||||||
if (part.startsWith("-"))
|
if (part.startsWith("-"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
FilePath tmp = currentBuildDir.absoluteFilePath(FilePath::fromUserInput(part));
|
const FilePath buildDir = haveLibrariesRelativeToBuildDirectory ? buildDirectory : currentBuildDir;
|
||||||
|
FilePath tmp = buildDir.absoluteFilePath(FilePath::fromUserInput(part));
|
||||||
|
|
||||||
if (f.role == "libraries")
|
if (f.role == "libraries")
|
||||||
tmp = tmp.parentDir();
|
tmp = tmp.parentDir();
|
||||||
@@ -707,7 +710,12 @@ FileApiQtcData extractData(FileApiData &input,
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
result.buildTargets = generateBuildTargets(data, sourceDirectory, buildDirectory);
|
// Ninja generator from CMake version 3.20.5 has libraries relative to build directory
|
||||||
|
const bool haveLibrariesRelativeToBuildDirectory =
|
||||||
|
input.replyFile.generator.startsWith("Ninja")
|
||||||
|
&& input.replyFile.cmakeVersion >= QVersionNumber(3, 20, 5);
|
||||||
|
|
||||||
|
result.buildTargets = generateBuildTargets(data, sourceDirectory, buildDirectory, haveLibrariesRelativeToBuildDirectory);
|
||||||
result.cmakeFiles = std::move(data.cmakeFiles);
|
result.cmakeFiles = std::move(data.cmakeFiles);
|
||||||
result.projectParts = generateRawProjectParts(data, sourceDirectory);
|
result.projectParts = generateRawProjectParts(data, sourceDirectory);
|
||||||
|
|
||||||
|
|||||||
@@ -147,6 +147,13 @@ static ReplyFileContents readReplyFile(const FilePath &filePath, QString &errorM
|
|||||||
result.generator = generator.value("name").toString();
|
result.generator = generator.value("name").toString();
|
||||||
result.isMultiConfig = generator.value("multiConfig").toBool();
|
result.isMultiConfig = generator.value("multiConfig").toBool();
|
||||||
}
|
}
|
||||||
|
const QJsonObject version = cmakeObject.value("version").toObject();
|
||||||
|
{
|
||||||
|
int major = version.value("major").toInt();
|
||||||
|
int minor = version.value("minor").toInt();
|
||||||
|
int patch = version.value("patch").toInt();
|
||||||
|
result.cmakeVersion = QVersionNumber(major, minor, patch);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
#include <QFutureInterface>
|
#include <QFutureInterface>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
#include <QVersionNumber>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -65,6 +66,7 @@ public:
|
|||||||
QString cmakeRoot;
|
QString cmakeRoot;
|
||||||
|
|
||||||
QVector<ReplyObject> replies;
|
QVector<ReplyObject> replies;
|
||||||
|
QVersionNumber cmakeVersion;
|
||||||
|
|
||||||
Utils::FilePath jsonFile(const QString &kind, const Utils::FilePath &replyDir) const;
|
Utils::FilePath jsonFile(const QString &kind, const Utils::FilePath &replyDir) const;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user