CMake: Polish cmaketool a bit

Change-Id: I576197bec6e48decd5e2b4befd156ea985822835
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2016-09-26 16:29:58 +02:00
parent 5478be7676
commit 3f3a43a4af
2 changed files with 36 additions and 37 deletions

View File

@@ -56,15 +56,15 @@ CMakeTool::CMakeTool(Detection d, const Core::Id &id) :
CMakeTool::CMakeTool(const QVariantMap &map, bool fromSdk) : m_isAutoDetected(fromSdk)
{
m_id = Core::Id::fromSetting(map.value(QLatin1String(CMAKE_INFORMATION_ID)));
m_displayName = map.value(QLatin1String(CMAKE_INFORMATION_DISPLAYNAME)).toString();
m_isAutoRun = map.value(QLatin1String(CMAKE_INFORMATION_AUTORUN), true).toBool();
m_id = Core::Id::fromSetting(map.value(CMAKE_INFORMATION_ID));
m_displayName = map.value(CMAKE_INFORMATION_DISPLAYNAME).toString();
m_isAutoRun = map.value(CMAKE_INFORMATION_AUTORUN, true).toBool();
//loading a CMakeTool from SDK is always autodetection
if (!fromSdk)
m_isAutoDetected = map.value(QLatin1String(CMAKE_INFORMATION_AUTODETECTED), false).toBool();
m_isAutoDetected = map.value(CMAKE_INFORMATION_AUTODETECTED, false).toBool();
setCMakeExecutable(Utils::FileName::fromString(map.value(QLatin1String(CMAKE_INFORMATION_COMMAND)).toString()));
setCMakeExecutable(Utils::FileName::fromString(map.value(CMAKE_INFORMATION_COMMAND).toString()));
}
Core::Id CMakeTool::createId()
@@ -129,11 +129,11 @@ Utils::SynchronousProcessResponse CMakeTool::run(const QString &arg) const
QVariantMap CMakeTool::toMap() const
{
QVariantMap data;
data.insert(QLatin1String(CMAKE_INFORMATION_DISPLAYNAME), m_displayName);
data.insert(QLatin1String(CMAKE_INFORMATION_ID), m_id.toSetting());
data.insert(QLatin1String(CMAKE_INFORMATION_COMMAND), m_executable.toString());
data.insert(QLatin1String(CMAKE_INFORMATION_AUTORUN), m_isAutoRun);
data.insert(QLatin1String(CMAKE_INFORMATION_AUTODETECTED), m_isAutoDetected);
data.insert(CMAKE_INFORMATION_DISPLAYNAME, m_displayName);
data.insert(CMAKE_INFORMATION_ID, m_id.toSetting());
data.insert(CMAKE_INFORMATION_COMMAND, m_executable.toString());
data.insert(CMAKE_INFORMATION_AUTORUN, m_isAutoRun);
data.insert(CMAKE_INFORMATION_AUTODETECTED, m_isAutoDetected);
return data;
}
@@ -156,22 +156,22 @@ bool CMakeTool::isAutoRun() const
QStringList CMakeTool::supportedGenerators() const
{
if (m_generators.isEmpty()) {
Utils::SynchronousProcessResponse response = run(QLatin1String("--help"));
Utils::SynchronousProcessResponse response = run("--help");
if (response.result == Utils::SynchronousProcessResponse::Finished) {
bool inGeneratorSection = false;
const QStringList lines = response.stdOut().split(QLatin1Char('\n'));
const QStringList lines = response.stdOut().split('\n');
foreach (const QString &line, lines) {
if (line.isEmpty())
continue;
if (line == QLatin1String("Generators")) {
if (line == "Generators") {
inGeneratorSection = true;
continue;
}
if (!inGeneratorSection)
continue;
if (line.startsWith(QLatin1String(" ")) && line.at(3) != QLatin1Char(' ')) {
int pos = line.indexOf(QLatin1Char('='));
if (line.startsWith(" ") && line.at(3) != ' ') {
int pos = line.indexOf('=');
if (pos < 0)
pos = line.length();
if (pos >= 0) {
@@ -192,19 +192,19 @@ TextEditor::Keywords CMakeTool::keywords()
{
if (m_functions.isEmpty()) {
Utils::SynchronousProcessResponse response;
response = run(QLatin1String("--help-command-list"));
response = run("--help-command-list");
if (response.result == Utils::SynchronousProcessResponse::Finished)
m_functions = response.stdOut().split(QLatin1Char('\n'));
m_functions = response.stdOut().split('\n');
response = run(QLatin1String("--help-commands"));
response = run("--help-commands");
if (response.result == Utils::SynchronousProcessResponse::Finished)
parseFunctionDetailsOutput(response.stdOut());
response = run(QLatin1String("--help-property-list"));
response = run("--help-property-list");
if (response.result == Utils::SynchronousProcessResponse::Finished)
m_variables = parseVariableOutput(response.stdOut());
response = run(QLatin1String("--help-variable-list"));
response = run("--help-variable-list");
if (response.result == Utils::SynchronousProcessResponse::Finished) {
m_variables.append(parseVariableOutput(response.stdOut()));
m_variables = Utils::filteredUnique(m_variables);
@@ -251,18 +251,18 @@ static QStringList parseDefinition(const QString &definition)
QVector<QChar> braceStack;
foreach (const QChar &c, definition) {
if (c == QLatin1Char('[') || c == QLatin1Char('<') || c == QLatin1Char('(')) {
if (c == '[' || c == '<' || c == '(') {
braceStack.append(c);
ignoreWord = false;
} else if (c == QLatin1Char(']') || c == QLatin1Char('>') || c == QLatin1Char(')')) {
if (braceStack.isEmpty() || braceStack.takeLast() == QLatin1Char('<'))
} else if (c == ']' || c == '>' || c == ')') {
if (braceStack.isEmpty() || braceStack.takeLast() == '<')
ignoreWord = true;
}
if (c == QLatin1Char(' ') || c == QLatin1Char('[') || c == QLatin1Char('<') || c == QLatin1Char('(')
|| c == QLatin1Char(']') || c == QLatin1Char('>') || c == QLatin1Char(')')) {
if (c == ' ' || c == '[' || c == '<' || c == '('
|| c == ']' || c == '>' || c == ')') {
if (!ignoreWord && !word.isEmpty()) {
if (result.isEmpty() || Utils::allOf(word, [](const QChar &c) { return c.isUpper() || c == QLatin1Char('_'); }))
if (result.isEmpty() || Utils::allOf(word, [](const QChar &c) { return c.isUpper() || c == '_'; }))
result.append(word);
}
word.clear();
@@ -282,17 +282,17 @@ void CMakeTool::parseFunctionDetailsOutput(const QString &output)
bool expectDefinition = false;
QString currentDefinition;
const QStringList lines = output.split(QLatin1Char('\n'));
const QStringList lines = output.split('\n');
for (int i = 0; i < lines.count(); ++i) {
const QString line = lines.at(i);
if (line == QLatin1String("::")) {
if (line == "::") {
expectDefinition = true;
continue;
}
if (expectDefinition) {
if (!line.startsWith(QLatin1Char(' ')) && !line.isEmpty()) {
if (!line.startsWith(' ') && !line.isEmpty()) {
expectDefinition = false;
QStringList words = parseDefinition(currentDefinition);
if (!words.isEmpty()) {
@@ -307,7 +307,7 @@ void CMakeTool::parseFunctionDetailsOutput(const QString &output)
m_functionArgs[words.at(0)];
currentDefinition.clear();
} else {
currentDefinition.append(line.trimmed() + QLatin1Char(' '));
currentDefinition.append(line.trimmed() + ' ');
}
}
}
@@ -315,7 +315,7 @@ void CMakeTool::parseFunctionDetailsOutput(const QString &output)
QStringList CMakeTool::parseVariableOutput(const QString &output)
{
const QStringList variableList = output.split(QLatin1Char('\n'));
const QStringList variableList = output.split('\n');
QStringList result;
foreach (const QString &v, variableList) {
if (v.startsWith("CMAKE_COMPILER_IS_GNU<LANG>")) { // This key takes a compiler name :-/
@@ -327,7 +327,7 @@ QStringList CMakeTool::parseVariableOutput(const QString &output)
} else if (v.contains("<LANG>")) {
const QString tmp = QString(v).replace("<LANG>", "%1");
result << tmp.arg("C") << tmp.arg("CXX");
} else if (!v.contains(QLatin1Char('<')) && !v.contains(QLatin1Char('['))) {
} else if (!v.contains('<') && !v.contains('[')) {
result << v;
}
}

View File

@@ -89,12 +89,11 @@ private:
QString m_displayName;
Utils::FileName m_executable;
bool m_isAutoRun;
bool m_isAutoRun = true;
bool m_isAutoDetected = false;
bool m_isAutoDetected;
mutable bool m_didAttemptToRun;
mutable bool m_didRun;
mutable bool m_didAttemptToRun = false;
mutable bool m_didRun = false;
mutable QStringList m_generators;
mutable QMap<QString, QStringList> m_functionArgs;