aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/clangsupport
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-01-10 09:47:11 +0100
committerEike Ziller <eike.ziller@qt.io>2022-01-10 09:47:11 +0100
commit501b6eff9cfddc8d81d64a9ccc1542829815df1e (patch)
treec66353de4f583bcbd1c886ad34a415eb1b5f4749 /src/libs/clangsupport
parentdfacdbefa833468df1deb92e8e3adaca9fa5b49d (diff)
parenta3d5e27edc7d1f2b91907c1fb1bf6c21ed9cfbe1 (diff)
Merge remote-tracking branch 'origin/6.0'
Diffstat (limited to 'src/libs/clangsupport')
-rw-r--r--src/libs/clangsupport/connectionclient.cpp22
-rw-r--r--src/libs/clangsupport/connectionclient.h19
-rw-r--r--src/libs/clangsupport/processcreator.cpp36
-rw-r--r--src/libs/clangsupport/processcreator.h12
-rw-r--r--src/libs/clangsupport/processhandle.h6
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