aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2022-10-24 12:48:49 +0200
committerCristian Adam <cristian.adam@qt.io>2022-10-25 20:56:24 +0000
commit4fdbfe164131f16af00a1082cbf45273d074c8a2 (patch)
tree35f928189fbdeb56de31ccf2890fc99d215a7109
parentfb94873765f2db623d83f9fd660d7f6fa479ed5d (diff)
CMakePM: Proper handling of relative toolchain files in CMakePresets
Previously it was only tested with absolute paths. Change-Id: I3871da60f3f1b17ae4d2d4cfb69d1be60da1435b Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r--src/plugins/cmakeprojectmanager/presetsmacros.cpp8
-rw-r--r--tests/manual/cmakepresets/CMakePresets.json5
-rw-r--r--tests/manual/cmakepresets/msvc-toolchain.cmake1
3 files changed, 9 insertions, 5 deletions
diff --git a/src/plugins/cmakeprojectmanager/presetsmacros.cpp b/src/plugins/cmakeprojectmanager/presetsmacros.cpp
index 3ac9651238..74e5279ba3 100644
--- a/src/plugins/cmakeprojectmanager/presetsmacros.cpp
+++ b/src/plugins/cmakeprojectmanager/presetsmacros.cpp
@@ -220,7 +220,7 @@ void updateToolchainFile(
Utils::FilePath toolchainFile = Utils::FilePath::fromString(toolchainFileName);
if (toolchainFile.isRelativePath()) {
for (const auto &path : {sourceDirectory, buildDirectory}) {
- Utils::FilePath probePath = toolchainFile.resolvePath(path);
+ Utils::FilePath probePath = path.resolvePath(toolchainFile);
if (probePath.exists() && probePath != path) {
toolchainFile = probePath;
break;
@@ -231,6 +231,8 @@ void updateToolchainFile(
if (!toolchainFile.exists())
return;
+ const QString toolchainFileString = toolchainFile.cleanPath().toString();
+
// toolchainFile takes precedence to CMAKE_TOOLCHAIN_FILE
CMakeConfig cache = configurePreset.cacheVariables ? configurePreset.cacheVariables.value()
: CMakeConfig();
@@ -239,11 +241,11 @@ void updateToolchainFile(
return item.key == "CMAKE_TOOLCHAIN_FILE";
});
if (it != cache.end())
- it->value = toolchainFile.toString().toUtf8();
+ it->value = toolchainFileString.toUtf8();
else
cache << CMakeConfigItem("CMAKE_TOOLCHAIN_FILE",
CMakeConfigItem::FILEPATH,
- toolchainFile.toString().toUtf8());
+ toolchainFileString.toUtf8());
configurePreset.cacheVariables = cache;
}
diff --git a/tests/manual/cmakepresets/CMakePresets.json b/tests/manual/cmakepresets/CMakePresets.json
index 1b16383064..90e2df5836 100644
--- a/tests/manual/cmakepresets/CMakePresets.json
+++ b/tests/manual/cmakepresets/CMakePresets.json
@@ -45,7 +45,7 @@
"architecture" : {
"value": "x64"
},
- "toolchainFile" : "c:/Qt/6.3.2/msvc2019_64/lib/cmake/Qt6/qt.toolchain.cmake",
+ "toolchainFile" : "../cmakepresets/msvc-toolchain.cmake",
"condition" : {
"type": "not",
"condition": {
@@ -55,7 +55,8 @@
}
},
"environment" : {
- "HOST_SYSTEM_NAME": "Windows"
+ "HOST_SYSTEM_NAME": "Windows",
+ "QT_VERSION": "6.3.2"
}
},
{
diff --git a/tests/manual/cmakepresets/msvc-toolchain.cmake b/tests/manual/cmakepresets/msvc-toolchain.cmake
new file mode 100644
index 0000000000..ae5b6fc928
--- /dev/null
+++ b/tests/manual/cmakepresets/msvc-toolchain.cmake
@@ -0,0 +1 @@
+include($ENV{SYSTEMDRIVE}/Qt/$ENV{QT_VERSION}/msvc2019_64/lib/cmake/Qt6/qt.toolchain.cmake)