diff options
author | Eike Ziller <eike.ziller@qt.io> | 2022-01-10 09:47:11 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2022-01-10 09:47:11 +0100 |
commit | 501b6eff9cfddc8d81d64a9ccc1542829815df1e (patch) | |
tree | c66353de4f583bcbd1c886ad34a415eb1b5f4749 /src/libs/clangsupport | |
parent | dfacdbefa833468df1deb92e8e3adaca9fa5b49d (diff) | |
parent | a3d5e27edc7d1f2b91907c1fb1bf6c21ed9cfbe1 (diff) |
Merge remote-tracking branch 'origin/6.0'
Change-Id: Id84183d2ba73dbe98700af43074cc2d05b26f06d
Diffstat (limited to 'src/libs/clangsupport')
-rw-r--r-- | src/libs/clangsupport/connectionclient.cpp | 22 | ||||
-rw-r--r-- | src/libs/clangsupport/connectionclient.h | 19 | ||||
-rw-r--r-- | src/libs/clangsupport/processcreator.cpp | 36 | ||||
-rw-r--r-- | src/libs/clangsupport/processcreator.h | 12 | ||||
-rw-r--r-- | src/libs/clangsupport/processhandle.h | 6 |
5 files changed, 53 insertions, 42 deletions
diff --git a/src/libs/clangsupport/connectionclient.cpp b/src/libs/clangsupport/connectionclient.cpp index 07754a9490..ff841f33d0 100644 --- a/src/libs/clangsupport/connectionclient.cpp +++ b/src/libs/clangsupport/connectionclient.cpp @@ -36,6 +36,8 @@ #include <QProcess> #include <QThread> +using namespace Utils; + namespace ClangBackEnd { ConnectionClient::ConnectionClient(const QString &connectionName) @@ -159,7 +161,7 @@ void ConnectionClient::restartProcessIfTimerIsNotResettedAndSocketIsEmpty() restartProcessAsynchronously(); } -void ConnectionClient::endProcess(QProcess *process) +void ConnectionClient::endProcess(QtcProcess *process) { if (isProcessRunning(process) && isConnected()) { sendEndMessage(); @@ -167,15 +169,15 @@ void ConnectionClient::endProcess(QProcess *process) } } -void ConnectionClient::terminateProcess(QProcess *process) +void ConnectionClient::terminateProcess(QtcProcess *process) { - if (!Utils::HostOsInfo::isWindowsHost() && isProcessRunning()) { + if (!HostOsInfo::isWindowsHost() && isProcessRunning()) { process->terminate(); process->waitForFinished(1000); } } -void ConnectionClient::killProcess(QProcess *process) +void ConnectionClient::killProcess(QtcProcess *process) { if (isProcessRunning(process)) { process->kill(); @@ -213,7 +215,7 @@ void ConnectionClient::resetTemporaryDirectory() m_processCreator.resetTemporaryDirectory(); } -void ConnectionClient::initializeProcess(QProcess *process) +void ConnectionClient::initializeProcess(QtcProcess *process) { connectStandardOutputAndError(process); @@ -299,7 +301,7 @@ bool ConnectionClient::waitForConnected() } -QProcess *ConnectionClient::processForTestOnly() +QtcProcess *ConnectionClient::processForTestOnly() { getProcessFromFuture(); @@ -311,15 +313,15 @@ QIODevice *ConnectionClient::ioDevice() return m_localSocket; } -bool ConnectionClient::isProcessRunning(QProcess *process) +bool ConnectionClient::isProcessRunning(QtcProcess *process) { return process && process->state() == QProcess::Running; } -void ConnectionClient::connectStandardOutputAndError(QProcess *process) const +void ConnectionClient::connectStandardOutputAndError(QtcProcess *process) const { - connect(process, &QProcess::readyReadStandardOutput, this, &ConnectionClient::printStandardOutput); - connect(process, &QProcess::readyReadStandardError, this, &ConnectionClient::printStandardError); + connect(process, &QtcProcess::readyReadStandardOutput, this, &ConnectionClient::printStandardOutput); + connect(process, &QtcProcess::readyReadStandardError, this, &ConnectionClient::printStandardError); } void ConnectionClient::connectLocalSocketError() const diff --git a/src/libs/clangsupport/connectionclient.h b/src/libs/clangsupport/connectionclient.h index 258bb323d1..aae1864ff5 100644 --- a/src/libs/clangsupport/connectionclient.h +++ b/src/libs/clangsupport/connectionclient.h @@ -28,6 +28,7 @@ #include "clangcodemodelserverproxy.h" #include "lineprefixer.h" #include "processcreator.h" +#include "processhandle.h" #include <QLocalServer> #include <QLocalSocket> @@ -37,9 +38,7 @@ #include <future> #include <memory> -QT_BEGIN_NAMESPACE -class QProcess; -QT_END_NAMESPACE +namespace Utils { class QtcProcess; } class Utf8String; class Utf8StringVector; @@ -77,7 +76,7 @@ public: bool waitForEcho(); bool waitForConnected(); - QProcess *processForTestOnly(); + Utils::QtcProcess *processForTestOnly(); signals: void connectedToLocalSocket(); @@ -103,22 +102,22 @@ protected: virtual void newConnectedServer(QLocalSocket *localSocket) = 0; private: - static bool isProcessRunning(QProcess *process); + static bool isProcessRunning(Utils::QtcProcess *process); void finishProcess(QProcessUniquePointer &&process); - void endProcess(QProcess *process); - void terminateProcess(QProcess *process); - void killProcess(QProcess *process); + void endProcess(Utils::QtcProcess *process); + void terminateProcess(Utils::QtcProcess *process); + void killProcess(Utils::QtcProcess *process); void finishConnection(); void printLocalSocketError(QLocalSocket::LocalSocketError socketError); void printStandardOutput(); void printStandardError(); - void initializeProcess(QProcess *process); + void initializeProcess(Utils::QtcProcess *process); void resetTemporaryDirectory(); void connectLocalSocketDisconnected(); void disconnectLocalSocketDisconnected(); - void connectStandardOutputAndError(QProcess *process) const; + void connectStandardOutputAndError(Utils::QtcProcess *process) const; void connectLocalSocketError() const; void connectAliveTimer(); void connectNewConnection(); diff --git a/src/libs/clangsupport/processcreator.cpp b/src/libs/clangsupport/processcreator.cpp index ad0d4b7884..0394aea1f1 100644 --- a/src/libs/clangsupport/processcreator.cpp +++ b/src/libs/clangsupport/processcreator.cpp @@ -28,10 +28,15 @@ #include "processexception.h" #include "processstartedevent.h" +#include <utils/commandline.h> +#include <utils/qtcprocess.h> + #include <QCoreApplication> #include <QFileInfo> #include <QTemporaryDir> +using namespace Utils; + namespace ClangBackEnd { using namespace std::chrono_literals; @@ -56,7 +61,7 @@ void ProcessCreator::setArguments(const QStringList &arguments) m_arguments = arguments; } -void ProcessCreator::setEnvironment(const Utils::Environment &environment) +void ProcessCreator::setEnvironment(const Environment &environment) { m_environment = environment; } @@ -65,10 +70,11 @@ std::future<QProcessUniquePointer> ProcessCreator::createProcess() const { return std::async(std::launch::async, [&] { checkIfProcessPathExists(); - auto process = QProcessUniquePointer(new QProcess); - process->setProcessChannelMode(QProcess::QProcess::ForwardedChannels); - process->setProcessEnvironment(processEnvironment()); - process->start(m_processPath, m_arguments); + auto process = QProcessUniquePointer(new QtcProcess(ProcessMode::Writer)); + process->setProcessChannelMode(QProcess::ForwardedChannels); + process->setEnvironment(processEnvironment()); + process->setCommand(CommandLine(FilePath::fromString(m_processPath), m_arguments)); + process->start(); process->waitForStarted(5000); checkIfProcessWasStartingSuccessful(process.get()); @@ -95,13 +101,13 @@ void ProcessCreator::checkIfProcessPathExists() const } } -void ProcessCreator::checkIfProcessWasStartingSuccessful(QProcess *process) const +void ProcessCreator::checkIfProcessWasStartingSuccessful(QtcProcess *process) const { if (process->exitStatus() == QProcess::CrashExit || process->exitCode() != 0) dispatchProcessError(process); } -void ProcessCreator::dispatchProcessError(QProcess *process) const +void ProcessCreator::dispatchProcessError(QtcProcess *process) const { switch (process->error()) { case QProcess::UnknownError: { @@ -158,24 +164,24 @@ const QTemporaryDir &ProcessCreator::temporaryDirectory() const void ProcessCreator::resetTemporaryDirectory() { - m_temporaryDirectory = std::make_unique<Utils::TemporaryDirectory>(m_temporaryDirectoryPattern); + m_temporaryDirectory = std::make_unique<TemporaryDirectory>(m_temporaryDirectoryPattern); } -QProcessEnvironment ProcessCreator::processEnvironment() const +Environment ProcessCreator::processEnvironment() const { - auto processEnvironment = QProcessEnvironment::systemEnvironment(); + auto processEnvironment = Environment::systemEnvironment(); if (temporaryDirectory().isValid()) { const QString temporaryDirectoryPath = temporaryDirectory().path(); - processEnvironment.insert("TMPDIR", temporaryDirectoryPath); - processEnvironment.insert("TMP", temporaryDirectoryPath); - processEnvironment.insert("TEMP", temporaryDirectoryPath); + processEnvironment.set("TMPDIR", temporaryDirectoryPath); + processEnvironment.set("TMP", temporaryDirectoryPath); + processEnvironment.set("TEMP", temporaryDirectoryPath); } - const Utils::Environment &env = m_environment; + const Environment &env = m_environment; for (auto it = env.constBegin(); it != env.constEnd(); ++it) { if (env.isEnabled(it)) - processEnvironment.insert(env.key(it), env.expandedValueForKey(env.key(it))); + processEnvironment.set(env.key(it), env.expandedValueForKey(env.key(it))); } return processEnvironment; diff --git a/src/libs/clangsupport/processcreator.h b/src/libs/clangsupport/processcreator.h index 928857319b..5fdb797e30 100644 --- a/src/libs/clangsupport/processcreator.h +++ b/src/libs/clangsupport/processcreator.h @@ -39,9 +39,13 @@ QT_BEGIN_NAMESPACE class QTemporaryDir; -class QProcessEnvironment; QT_END_NAMESPACE +namespace Utils { +class Environment; +class QtcProcess; +} + namespace ClangBackEnd { class CLANGSUPPORT_EXPORT ProcessCreator @@ -62,12 +66,12 @@ public: private: void checkIfProcessPathExists() const; - void checkIfProcessWasStartingSuccessful(QProcess *process) const; - [[noreturn]] void dispatchProcessError(QProcess *process) const; + void checkIfProcessWasStartingSuccessful(Utils::QtcProcess *process) const; + [[noreturn]] void dispatchProcessError(Utils::QtcProcess *process) const; void postProcessStartedEvent() const; [[noreturn]] void throwProcessException(const QString &message) const; - QProcessEnvironment processEnvironment() const; + Utils::Environment processEnvironment() const; private: std::unique_ptr<Utils::TemporaryDirectory> m_temporaryDirectory; diff --git a/src/libs/clangsupport/processhandle.h b/src/libs/clangsupport/processhandle.h index c19b7ee007..3f7444499b 100644 --- a/src/libs/clangsupport/processhandle.h +++ b/src/libs/clangsupport/processhandle.h @@ -25,7 +25,7 @@ #pragma once -#include <QProcess> +#include <utils/qtcprocess.h> #include <memory> @@ -34,7 +34,7 @@ namespace ClangBackEnd { class QProcessUniquePointerDeleter { public: - void operator()(QProcess* process) + void operator()(Utils::QtcProcess* process) { process->kill(); process->waitForFinished(); @@ -42,6 +42,6 @@ public: } }; -using QProcessUniquePointer = std::unique_ptr<QProcess, QProcessUniquePointerDeleter>; +using QProcessUniquePointer = std::unique_ptr<Utils::QtcProcess, QProcessUniquePointerDeleter>; } // namespace ClangBackEnd |