diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp index 42beff4b932..348b1de7627 100644 --- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -64,6 +65,8 @@ CMakeToolManager::CMakeToolManager() QTC_ASSERT(!m_instance, return); m_instance = this; + qRegisterMetaType(); + d = new CMakeToolManagerPrivate; connect(ICore::instance(), &ICore::saveSettingsRequested, this, &CMakeToolManager::saveCMakeTools); @@ -177,6 +180,25 @@ void CMakeToolManager::updateDocumentation() Core::HelpManager::registerDocumentation(docs); } +void CMakeToolManager::autoDetectCMakeForDevice(const FilePath &deviceRoot, + const QString &detectionSource, + QString *logMessage) +{ + QStringList messages; + const FilePaths candidates = {FilePath::fromString("cmake").onDevice(deviceRoot)}; + const Environment env = deviceRoot.deviceEnvironment(); + for (const FilePath &candidate : candidates) { + const FilePath cmake = candidate.searchOnDevice(env.path()); + if (!cmake.isEmpty()) { + registerCMakeByPath(cmake, detectionSource); + messages.append(tr("Found CMake binary: %1").arg(cmake.toUserOutput())); + } + } + if (logMessage) + *logMessage = messages.join('\n'); +} + + void CMakeToolManager::registerCMakeByPath(const FilePath &cmakePath, const QString &detectionSource) { const Id id = Id::fromString(cmakePath.toUserOutput()); diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.h b/src/plugins/cmakeprojectmanager/cmaketoolmanager.h index 2f71ddf34c4..9497192873d 100644 --- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.h +++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.h @@ -63,7 +63,11 @@ public: static void updateDocumentation(); public slots: - void registerCMakeByPath(const Utils::FilePath &cmakePath, const QString &detectionSource); + void autoDetectCMakeForDevice(const Utils::FilePath &deviceRoot, + const QString &detectionSource, + QString *logMessage); + void registerCMakeByPath(const Utils::FilePath &cmakePath, + const QString &detectionSource); signals: void cmakeAdded (const Utils::Id &id); @@ -81,3 +85,5 @@ private: }; } // namespace CMakeProjectManager + +Q_DECLARE_METATYPE(QString *) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 91f359d9a76..00353cd96c7 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -545,19 +545,15 @@ void KitDetectorPrivate::autoDetectCMake() return; emit q->logOutput('\n' + tr("Searching CMake binary...")); + const FilePath deviceRoot = m_device->mapToGlobalPath({}); QString error; - const QStringList candidates = {"cmake"}; - for (const QString &candidate : candidates) { - const FilePath cmake = m_device->searchExecutableInPath(candidate); - if (!cmake.isEmpty()) { - emit q->logOutput(tr("Found CMake binary: %1").arg(cmake.toUserOutput())); - const bool res = QMetaObject::invokeMethod(cmakeManager, - "registerCMakeByPath", - Q_ARG(Utils::FilePath, cmake), - Q_ARG(QString, m_sharedId)); - QTC_CHECK(res); - } - } + const bool res = QMetaObject::invokeMethod(cmakeManager, + "autoDetectCMakeForDevice", + Q_ARG(Utils::FilePath, deviceRoot), + Q_ARG(QString, m_sharedId), + Q_ARG(QString *, &error)); + QTC_CHECK(res); + emit q->logOutput(error); } void KitDetectorPrivate::autoDetectDebugger()