Merge remote-tracking branch 'origin/4.13' into master

Conflicts:
	cmake/QtCreatorIDEBranding.cmake
	qbs/modules/qtc/qtc.qbs
	qtcreator_ide_branding.pri
	src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
	src/plugins/cmakeprojectmanager/cmakebuildstep.h
	tests/auto/debugger/tst_namedemangler.cpp
	tests/auto/qml/codemodel/check/tst_check.cpp

Change-Id: Iefd5f71c03c0078513b76a92af764a4fb22ee4c2
This commit is contained in:
Eike Ziller
2020-08-10 14:23:50 +02:00
205 changed files with 6161 additions and 10173 deletions

View File

@@ -154,10 +154,11 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Utils::Id id)
auto androidAbis = bs->data(Android::Constants::AndroidABIs).toStringList();
QString preferredAbi;
if (androidAbis.contains("armeabi-v7a")) {
preferredAbi = "armeabi-v7a";
} else if (androidAbis.isEmpty() || androidAbis.contains("arm64-v8a")) {
preferredAbi = "arm64-v8a";
if (androidAbis.contains(ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A)) {
preferredAbi = ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A;
} else if (androidAbis.isEmpty()
|| androidAbis.contains(ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A)) {
preferredAbi = ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A;
} else {
preferredAbi = androidAbis.first();
}

View File

@@ -47,6 +47,7 @@
#include <QFormLayout>
#include <QLineEdit>
#include <QListWidget>
#include <QRegularExpression>
using namespace ProjectExplorer;
@@ -59,6 +60,53 @@ const char TOOL_ARGUMENTS_KEY[] = "CMakeProjectManager.MakeStep.AdditionalArgume
const char ADD_RUNCONFIGURATION_ARGUMENT_KEY[] = "CMakeProjectManager.MakeStep.AddRunConfigurationArgument";
const char ADD_RUNCONFIGURATION_TEXT[] = "Current executable";
class CmakeProgressParser : public Utils::OutputLineParser
{
Q_OBJECT
signals:
void progress(int percentage);
private:
Result handleLine(const QString &line, Utils::OutputFormat format) override
{
if (format != Utils::StdOutFormat)
return Status::NotHandled;
static const QRegularExpression percentProgress("^\\[\\s*(\\d*)%\\]");
static const QRegularExpression ninjaProgress("^\\[\\s*(\\d*)/\\s*(\\d*)");
QRegularExpressionMatch match = percentProgress.match(line);
if (match.hasMatch()) {
bool ok = false;
const int percent = match.captured(1).toInt(&ok);
if (ok)
emit progress(percent);
return Status::Done;
}
match = ninjaProgress.match(line);
if (match.hasMatch()) {
m_useNinja = true;
bool ok = false;
const int done = match.captured(1).toInt(&ok);
if (ok) {
const int all = match.captured(2).toInt(&ok);
if (ok && all != 0) {
const int percent = static_cast<int>(100.0 * done / all);
emit progress(percent);
}
}
return Status::Done;
}
return Status::NotHandled;
}
bool hasDetectedRedirection() const override { return m_useNinja; }
// TODO: Shouldn't we know the backend in advance? Then we could merge this class
// with CmakeParser.
bool m_useNinja = false;
};
class CMakeBuildStepConfigWidget : public BuildStepConfigWidget
{
Q_DECLARE_TR_FUNCTIONS(CMakeProjectManager::Internal::CMakeBuildStepConfigWidget)
@@ -88,8 +136,6 @@ static bool isCurrentExecutableTarget(const QString &target)
CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Utils::Id id) :
AbstractProcessStep(bsl, id)
{
m_percentProgress = QRegularExpression("^\\[\\s*(\\d*)%\\]");
m_ninjaProgress = QRegularExpression("^\\[\\s*(\\d*)/\\s*(\\d*)");
m_ninjaProgressString = "[%f/%t "; // ninja: [33/100
//: Default display name for the cmake make step.
setDefaultDisplayName(tr("CMake Build"));
@@ -211,9 +257,18 @@ bool CMakeBuildStep::init()
void CMakeBuildStep::setupOutputFormatter(Utils::OutputFormatter *formatter)
{
CMakeParser *cmakeParser = new CMakeParser;
CmakeProgressParser * const progressParser = new CmakeProgressParser;
connect(progressParser, &CmakeProgressParser::progress, this, [this](int percent) {
emit progress(percent, {});
});
formatter->addLineParser(progressParser);
cmakeParser->setSourceDirectory(project()->projectDirectory().toString());
formatter->addLineParsers({cmakeParser, new GnuMakeParser});
formatter->addLineParsers(target()->kit()->createOutputParsers());
const QList<Utils::OutputLineParser *> additionalParsers
= target()->kit()->createOutputParsers();
for (Utils::OutputLineParser * const p : additionalParsers)
p->setRedirectionDetector(progressParser);
formatter->addLineParsers(additionalParsers);
formatter->addSearchDir(processParameters()->effectiveWorkingDirectory());
AbstractProcessStep::setupOutputFormatter(formatter);
}
@@ -276,51 +331,6 @@ QString CMakeBuildStep::defaultBuildTarget() const
return allTarget();
}
void CMakeBuildStep::stdOutput(const QString &output)
{
int offset = 0;
while (offset != -1) {
const int newlinePos = output.indexOf('\n', offset);
QString line;
if (newlinePos == -1) {
line = output.mid(offset);
offset = -1;
} else {
line = output.mid(offset, newlinePos - offset + 1);
offset = newlinePos + 1;
}
QRegularExpressionMatch match = m_percentProgress.match(line);
if (match.hasMatch()) {
AbstractProcessStep::stdOutput(line);
bool ok = false;
int percent = match.captured(1).toInt(&ok);
if (ok)
emit progress(percent, QString());
continue;
} else {
match = m_ninjaProgress.match(line);
if (match.hasMatch()) {
AbstractProcessStep::stdOutput(line);
m_useNinja = true;
bool ok = false;
int done = match.captured(1).toInt(&ok);
if (ok) {
int all = match.captured(2).toInt(&ok);
if (ok && all != 0) {
const int percent = static_cast<int>(100.0 * done/all);
emit progress(percent, QString());
}
}
continue;
}
}
if (m_useNinja)
AbstractProcessStep::stdError(line);
else
AbstractProcessStep::stdOutput(line);
}
}
QStringList CMakeBuildStep::buildTargets() const
{
return m_buildTargets;
@@ -577,12 +587,6 @@ CMakeBuildStepFactory::CMakeBuildStepFactory()
setSupportedProjectType(Constants::CMAKE_PROJECT_ID);
}
void CMakeBuildStep::processStarted()
{
m_useNinja = false;
AbstractProcessStep::processStarted();
}
void CMakeBuildStep::processFinished(int exitCode, QProcess::ExitStatus status)
{
AbstractProcessStep::processFinished(exitCode, status);
@@ -591,3 +595,5 @@ void CMakeBuildStep::processFinished(int exitCode, QProcess::ExitStatus status)
} // Internal
} // CMakeProjectManager
#include <cmakebuildstep.moc>

View File

@@ -75,14 +75,10 @@ signals:
void buildTargetsChanged();
protected:
void processStarted() override;
void processFinished(int exitCode, QProcess::ExitStatus status) override;
bool fromMap(const QVariantMap &map) override;
// For parsing [ 76%]
void stdOutput(const QString &output) override;
private:
void ctor(ProjectExplorer::BuildStepList *bsl);
@@ -100,13 +96,10 @@ private:
QMetaObject::Connection m_runTrigger;
QRegularExpression m_percentProgress;
QRegularExpression m_ninjaProgress;
QString m_ninjaProgressString;
QStringList m_buildTargets;
QString m_cmakeArguments;
QString m_toolArguments;
bool m_useNinja = false;
bool m_waiting = false;
};