aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2024-03-12 19:48:48 +0100
committerCristian Adam <cristian.adam@qt.io>2024-03-12 21:37:48 +0000
commit8713919f31f2aecc7e7c15f1fc9ce7906b8fefa0 (patch)
tree070ef46110c9248a65ce9fc765419d5b7cc4e4e8
parent1cf925bc176bbd6fb97991487cb08c322c68163f (diff)
CMakePM: Fix dll path addition for MinGW
Amends 0d8a542b4f7d8a7b4d27f42ff16d309fba6cbf22 Fixes: QTCREATORBUG-30529 Change-Id: Ic786f1e7075ef68cf9d590d27ef90b9d1e8631b0 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r--src/plugins/cmakeprojectmanager/fileapidataextractor.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
index ad1e600124..99d37e6c83 100644
--- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
+++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
@@ -301,9 +301,14 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
continue;
const FilePath buildDir = relativeLibs ? buildDirectory : currentBuildDir;
- std::optional<QString> dllName;
+ FilePath tmp = buildDir.resolvePath(part);
+ if (f.role == "libraries")
+ tmp = tmp.parentDir();
+ std::optional<QString> dllName;
if (buildDir.osType() == OsTypeWindows && (f.role == "libraries")) {
+ part = FilePath::fromUserInput(part).fileName();
+
// Skip object libraries on Windows. This case can happen with static qml plugins
if (part.endsWith(".obj") || part.endsWith(".o"))
continue;
@@ -312,15 +317,17 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
for (const QString &suffix :
{QString(".lib"), QString(".dll.a"), QString(".a")}) {
if (part.endsWith(suffix) && !dllName)
- dllName = FilePath::fromUserInput(
- part.chopped(suffix.length()).append(".dll"))
- .fileName();
+ dllName = part.chopped(suffix.length()).append(".dll");
}
- }
- FilePath tmp = buildDir.resolvePath(part);
- if (f.role == "libraries")
- tmp = tmp.parentDir();
+ // MinGW has libQt6Core.a -> Qt6Core.dll
+ const QString mingwPrefix("lib");
+ const QString mingwSuffix(".a");
+ if (part.startsWith(mingwPrefix) && part.endsWith(mingwSuffix))
+ dllName = part.chopped(mingwSuffix.length())
+ .sliced(mingwPrefix.length())
+ .append(".dll");
+ }
if (!tmp.isEmpty() && tmp.isDir()) {
// f.role is libraryPath or frameworkPath
@@ -349,6 +356,7 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
}
}
ct.libraryDirectories = filteredUnique(librarySeachPaths);
+ qCInfo(cmakeLogger) << "libraryDirectories for target" << ct.title << ":" << ct.libraryDirectories;
}
return ct;
}