From ea4c74ccaf1ccd7ba0a6aa2c291f6096e32dab52 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 7 Oct 2024 13:21:05 -0700 Subject: [PATCH] QFileInfoGatherer: Fix internal build (with Q_AUTOTEST_EXPORT) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I'm surprised that this passed the CI on Windows, because Q_AUTOTEST_EXPORT is Q_DECL_EXPORT, which is __declspec(dllexport) and all dllexport'ed functions must be defined in the current DLL, not imported from elsewhere. This is similar on Unix systems with the no_direct_extern_access mode, because then Q_DECL_EXPORT behaves like on Windows. That means Qt modules can't call a Q_AUTOTEST_EXPORT function from another module (only tests can). Solve this by providing a function that is properly exported with Q_CORE_EXPORT. Amends commit 3d08816f4c4245f08a53307775fe3c4ed31a7a32. Task-number: QTBUG-28246 Task-number: QTBUG-31103 Change-Id: I2ba317ab34bda8c18954fffd28395f7354cb54f2 Reviewed-by: Tor Arne Vestbø (cherry picked from commit fbe61def33a2708e35e5e6a796e88976b04941f7) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/io/qfilesystemengine.cpp | 6 ++++++ src/corelib/io/qfilesystemengine_p.h | 5 ++--- src/gui/itemmodels/qfileinfogatherer_p.h | 2 +- .../itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp index d8b215816c3..e7f87971712 100644 --- a/src/corelib/io/qfilesystemengine.cpp +++ b/src/corelib/io/qfilesystemengine.cpp @@ -143,6 +143,12 @@ static bool _q_createLegacyEngine_recursive(QFileSystemEntry &entry, QFileSystem return _q_checkEntry(entry, data, resolvingEntry); } +Q_CORE_EXPORT bool qt_isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data) +{ + // called from QtGui (QFileSystemModel, QFileInfoGatherer) + return QFileSystemEngine::isCaseSensitive(entry, data); +} + /*! \internal diff --git a/src/corelib/io/qfilesystemengine_p.h b/src/corelib/io/qfilesystemengine_p.h index 48d4519d688..fa090fe6e1e 100644 --- a/src/corelib/io/qfilesystemengine_p.h +++ b/src/corelib/io/qfilesystemengine_p.h @@ -55,12 +55,11 @@ inline bool qIsFilenameBroken(const QFileSystemEntry &entry) Q_RETURN_ON_INVALID_FILENAME("Broken filename passed to function", (result)); \ } while (false) +Q_CORE_EXPORT bool qt_isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data); + class Q_AUTOTEST_EXPORT QFileSystemEngine { public: -#ifndef QT_BUILD_INTERNAL - Q_CORE_EXPORT -#endif static bool isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data); static QFileSystemEntry getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data); diff --git a/src/gui/itemmodels/qfileinfogatherer_p.h b/src/gui/itemmodels/qfileinfogatherer_p.h index 6ff54664a81..5dbda50d94a 100644 --- a/src/gui/itemmodels/qfileinfogatherer_p.h +++ b/src/gui/itemmodels/qfileinfogatherer_p.h @@ -59,7 +59,7 @@ public: #ifndef QT_NO_FSFILEENGINE bool isCaseSensitive() const { auto *fiPriv = QFileInfoPrivate::get(const_cast(&mFileInfo)); - return QFileSystemEngine::isCaseSensitive(fiPriv->fileEntry, fiPriv->metaData); + return qt_isCaseSensitive(fiPriv->fileEntry, fiPriv->metaData); } #endif diff --git a/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp index d1e2e4393eb..f75ff57b010 100644 --- a/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -1055,7 +1055,7 @@ void tst_QFileSystemModel::caseSensitivity() QFileInfo tmpInfo(tmp); auto *tmpInfoPriv = QFileInfoPrivate::get(&tmpInfo); - if (!QFileSystemEngine::isCaseSensitive(tmpInfoPriv->fileEntry, tmpInfoPriv->metaData)) { + if (!qt_isCaseSensitive(tmpInfoPriv->fileEntry, tmpInfoPriv->metaData)) { // Verify that files can be accessed by paths with fLipPeD case. for (int i = 0; i < paths.size(); ++i) { const QModelIndex normalCaseIndex = indexes.at(i);