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

View File

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