From cdc54c3be7b906b36fd9ee19cea11ddcba4e688d Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Wed, 10 Jun 2009 18:45:32 +0200 Subject: [PATCH] System includes and defines for gcce tool chain. --- .../qt-s60/gccetoolchain.cpp | 78 ++++++++++++++++++- .../qt4projectmanager/qt-s60/qt-s60-todo.txt | 5 +- 2 files changed, 77 insertions(+), 6 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp index 15cf53637c6..dd2704ef8b2 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp @@ -9,6 +9,10 @@ using namespace ProjectExplorer; using namespace Qt4ProjectManager::Internal; +namespace { + const char *GCCE_COMMAND = "arm-none-symbianelf-gcc.exe"; +} + GCCEToolChain::GCCEToolChain(S60Devices::Device device) : m_deviceId(device.id), m_deviceName(device.name), @@ -24,18 +28,88 @@ ToolChain::ToolChainType GCCEToolChain::type() const QByteArray GCCEToolChain::predefinedMacros() { - // TODO + if (m_predefinedMacros.isEmpty()) { + QStringList arguments; + arguments << QLatin1String("-xc++") + << QLatin1String("-E") + << QLatin1String("-dM") + << QLatin1String("-"); + + QProcess cpp; + ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); + addToEnvironment(env); + cpp.setEnvironment(env.toStringList()); + cpp.start(QLatin1String(GCCE_COMMAND), arguments); + cpp.closeWriteChannel(); + cpp.waitForFinished(); + m_predefinedMacros = cpp.readAllStandardOutput(); + } return m_predefinedMacros; } QList<HeaderPath> GCCEToolChain::systemHeaderPaths() { - // TODO + if (m_systemHeaderPaths.isEmpty()) { + QStringList arguments; + arguments << QLatin1String("-xc++") + << QLatin1String("-E") + << QLatin1String("-v") + << QLatin1String("-"); + + QProcess cpp; + ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); + addToEnvironment(env); + cpp.setEnvironment(env.toStringList()); + cpp.setReadChannelMode(QProcess::MergedChannels); + cpp.start(QLatin1String(GCCE_COMMAND), arguments); + cpp.closeWriteChannel(); + cpp.waitForFinished(); + + QByteArray line; + while (cpp.canReadLine()) { + line = cpp.readLine(); + if (line.startsWith("#include")) + break; + } + + if (! line.isEmpty() && line.startsWith("#include")) { + HeaderPath::Kind kind = HeaderPath::UserHeaderPath; + while (cpp.canReadLine()) { + line = cpp.readLine(); + if (line.startsWith("#include")) { + kind = HeaderPath::GlobalHeaderPath; + } else if (! line.isEmpty() && QChar(line.at(0)).isSpace()) { + HeaderPath::Kind thisHeaderKind = kind; + + line = line.trimmed(); + if (line.endsWith('\n')) + line.chop(1); + + int index = line.indexOf(" (framework directory)"); + if (index != -1) { + line = line.left(index); + thisHeaderKind = HeaderPath::FrameworkHeaderPath; + } + + m_systemHeaderPaths.append(HeaderPath(QFile::decodeName(line), thisHeaderKind)); + } else if (line.startsWith("End of search list.")) { + break; + } else { + qWarning() << "ignore line:" << line; + } + } + } + } + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis\\sys").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\variant").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); return m_systemHeaderPaths; } void GCCEToolChain::addToEnvironment(ProjectExplorer::Environment &env) { + // TODO: do we need to set path to gcce? env.prependOrSetPath(QString("%1\\epoc32\\tools").arg(m_deviceRoot)); // e.g. make.exe env.prependOrSetPath(QString("%1\\epoc32\\gcc\\bin").arg(m_deviceRoot)); // e.g. gcc.exe env.set("EPOCDEVICE", QString("%1:%2").arg(m_deviceId, m_deviceName)); diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt index c643da4a4f9..60bb6244e7d 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt +++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt @@ -19,9 +19,6 @@ * predefined macros * system includes -* GCCE tool chain: - * predefined macros - * system includes - * Run WINSCW executables * Deploy gcce executables + -- GitLab