Merge remote-tracking branch 'origin/13.0' into 14.0

Conflicts:
	tests/auto/debugger/tst_dumpers.cpp

Change-Id: I71bfee426a3e25ab7c7cd276ffe1e7d8fe550ffe
This commit is contained in:
Eike Ziller
2024-06-03 12:23:06 +02:00
3 changed files with 19 additions and 30 deletions

View File

@@ -7,6 +7,7 @@ import sys
import cdbext import cdbext
import re import re
import threading import threading
import time
from utils import TypeCode from utils import TypeCode
sys.path.insert(1, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) sys.path.insert(1, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
@@ -421,6 +422,7 @@ class Dumper(DumperBase):
return ptr return ptr
def fetchVariables(self, args): def fetchVariables(self, args):
start_time = time.perf_counter()
self.resetStats() self.resetStats()
(ok, res) = self.tryFetchInterpreterVariables(args) (ok, res) = self.tryFetchInterpreterVariables(args)
if ok: if ok:
@@ -458,6 +460,8 @@ class Dumper(DumperBase):
self.put(',qtnamespace="%s"' % self.qtNamespaceToReport) self.put(',qtnamespace="%s"' % self.qtNamespaceToReport)
self.qtNamespaceToReport = None self.qtNamespaceToReport = None
runtime = time.perf_counter() - start_time
self.put(',runtime="%s"' % runtime)
self.reportResult(''.join(self.output), args) self.reportResult(''.join(self.output), args)
self.output = [] self.output = []

View File

@@ -210,9 +210,11 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
const FilePath &sourceDirectory, const FilePath &sourceDirectory,
const FilePath &buildDirectory, const FilePath &buildDirectory,
bool relativeLibs, bool relativeLibs,
const QSet<FilePath> &artifacts) const QSet<FilePath> &sharedLibraryArtifacts)
{ {
const FilePath currentBuildDir = buildDirectory.resolvePath(t.buildDir); const FilePath currentBuildDir = buildDirectory.resolvePath(t.buildDir);
const QSet<FilePath> sharedLibraryArtifactsPaths
= transform(sharedLibraryArtifacts, &FilePath::parentDir);
CMakeBuildTarget ct; CMakeBuildTarget ct;
ct.title = t.name; ct.title = t.name;
@@ -306,7 +308,6 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
if (f.role == "libraries") if (f.role == "libraries")
tmp = tmp.parentDir(); tmp = tmp.parentDir();
std::optional<QString> dllName;
if (buildDir.osType() == OsTypeWindows && (f.role == "libraries")) { if (buildDir.osType() == OsTypeWindows && (f.role == "libraries")) {
const auto partAsFilePath = FilePath::fromUserInput(part); const auto partAsFilePath = FilePath::fromUserInput(part);
part = partAsFilePath.fileName(); part = partAsFilePath.fileName();
@@ -314,24 +315,6 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
// Skip object libraries on Windows. This case can happen with static qml plugins // Skip object libraries on Windows. This case can happen with static qml plugins
if (part.endsWith(".obj") || part.endsWith(".o")) if (part.endsWith(".obj") || part.endsWith(".o"))
continue; continue;
// Only consider dlls, not static libraries
for (const QString &suffix :
{QString(".lib"), QString(".dll.a"), QString(".a")}) {
if (part.endsWith(suffix) && !dllName)
dllName = part.chopped(suffix.length()).append(".dll");
}
// MinGW has libQt6Core.a -> Qt6Core.dll
// but libFoo.dll.a was already handled above
const QString mingwPrefix("lib");
const QString mingwSuffix("a");
const QString completeSuffix = partAsFilePath.completeSuffix();
if (part.startsWith(mingwPrefix) && completeSuffix == mingwSuffix) {
dllName = part.chopped(mingwSuffix.length() + 1/*the '.'*/)
.sliced(mingwPrefix.length())
.append(".dll");
}
} }
if (!tmp.isEmpty() && tmp.isDir()) { if (!tmp.isEmpty() && tmp.isDir()) {
@@ -345,18 +328,15 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
{"/lib", "/lib64", "/usr/lib", "/usr/lib64", "/usr/local/lib"})) {"/lib", "/lib64", "/usr/lib", "/usr/lib64", "/usr/local/lib"}))
librarySeachPaths.append(tmp); librarySeachPaths.append(tmp);
if (buildDir.osType() == OsTypeWindows && dllName) { if (buildDir.osType() == OsTypeWindows) {
const auto validPath = [&artifacts](const FilePath& path) { if (sharedLibraryArtifactsPaths.contains(tmp))
return path.exists() || artifacts.contains(path);
};
if (validPath(tmp.pathAppended(*dllName)))
librarySeachPaths.append(tmp); librarySeachPaths.append(tmp);
// Libraries often have their import libs in ../lib and the // Libraries often have their import libs in ../lib and the
// actual dll files in ../bin on windows. Qt is one example of that. // actual dll files in ../bin on windows. Qt is one example of that.
if (tmp.fileName() == "lib") { if (tmp.fileName() == "lib") {
const FilePath path = tmp.parentDir().pathAppended("bin"); const FilePath path = tmp.parentDir().pathAppended("bin");
if (path.isDir() && validPath(path.pathAppended(*dllName))) if (path.isDir())
librarySeachPaths.append(path); librarySeachPaths.append(path);
} }
} }
@@ -375,17 +355,19 @@ static QList<CMakeBuildTarget> generateBuildTargets(const QFuture<void> &cancelF
const FilePath &buildDirectory, const FilePath &buildDirectory,
bool relativeLibs) bool relativeLibs)
{ {
QSet<FilePath> artifacts; QSet<FilePath> sharedLibraryArtifacts;
for (const TargetDetails &t : input.targetDetails) for (const TargetDetails &t : input.targetDetails)
if (t.type == "MODULE_LIBRARY" || t.type == "SHARED_LIBRARY")
for (const FilePath &p : t.artifacts) for (const FilePath &p : t.artifacts)
artifacts.insert(buildDirectory.resolvePath(p)); sharedLibraryArtifacts.insert(buildDirectory.resolvePath(p));
QList<CMakeBuildTarget> result; QList<CMakeBuildTarget> result;
result.reserve(input.targetDetails.size()); result.reserve(input.targetDetails.size());
for (const TargetDetails &t : input.targetDetails) { for (const TargetDetails &t : input.targetDetails) {
if (cancelFuture.isCanceled()) if (cancelFuture.isCanceled())
return {}; return {};
result.append(toBuildTarget(t, sourceDirectory, buildDirectory, relativeLibs, artifacts)); result.append(
toBuildTarget(t, sourceDirectory, buildDirectory, relativeLibs, sharedLibraryArtifacts));
} }
return result; return result;
} }

View File

@@ -1949,6 +1949,9 @@ void tst_Dumpers::dumper()
} while (localsBeginPos != -1); } while (localsBeginPos != -1);
actual.fromString(QString::fromLocal8Bit(contents)); actual.fromString(QString::fromLocal8Bit(contents));
context.nameSpace = actual["result"]["qtnamespace"].data(); context.nameSpace = actual["result"]["qtnamespace"].data();
int runtime = actual["result"]["runtime"].data().toFloat() * 1000;
qCDebug(lcDumpers, "CaseInner: %5d", runtime);
m_totalInnerTime += runtime;
actual = actual["result"]["data"]; actual = actual["result"]["data"];
} }