diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 898bce02ca189671e5188a82fccf0c4aea4a3670..a64f50170333c9fb2af59a51928923b4bd1f51f1 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -149,6 +149,9 @@ QByteArray GccToolChain::predefinedMacros() << QLatin1String("-"); QProcess cpp; + ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); + addToEnvironment(env); + cpp.setEnvironment(env.toStringList()); cpp.start(m_gcc, arguments); cpp.closeWriteChannel(); cpp.waitForFinished(); @@ -167,6 +170,9 @@ QList<HeaderPath> GccToolChain::systemHeaderPaths() << QLatin1String("-"); QProcess cpp; + ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); + addToEnvironment(env); + cpp.setEnvironment(env.toStringList()); cpp.setReadChannelMode(QProcess::MergedChannels); cpp.start(m_gcc, arguments); cpp.closeWriteChannel(); diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 72e310951d9a3ceadab1afcd100550b81dfa9069..7c6033b5dcedfb7e01396b9d78f024787b91e7f8 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -108,8 +108,7 @@ protected: virtual bool equals(ToolChain *other) const = 0; }; -namespace Internal { -class GccToolChain : public ToolChain +class PROJECTEXPLORER_EXPORT GccToolChain : public ToolChain { public: GccToolChain(const QString &gcc); @@ -122,14 +121,14 @@ public: protected: virtual bool equals(ToolChain *other) const; -private: - QString m_gcc; QByteArray m_predefinedMacros; QList<HeaderPath> m_systemHeaderPaths; +private: + QString m_gcc; }; // TODO this class needs to fleshed out more -class MinGWToolChain : public GccToolChain +class PROJECTEXPLORER_EXPORT MinGWToolChain : public GccToolChain { public: MinGWToolChain(const QString &gcc, const QString &mingwPath); @@ -143,7 +142,7 @@ private: }; // TODO some stuff needs to be moved into this -class MSVCToolChain : public ToolChain +class PROJECTEXPLORER_EXPORT MSVCToolChain : public ToolChain { public: MSVCToolChain(const QString &name, bool amd64 = false); @@ -164,7 +163,7 @@ private: }; // TODO some stuff needs to be moved into here -class WinCEToolChain : public MSVCToolChain +class PROJECTEXPLORER_EXPORT WinCEToolChain : public MSVCToolChain { public: WinCEToolChain(const QString &name, const QString &platform); @@ -178,7 +177,6 @@ private: QString m_platform; }; -} } Q_DECLARE_METATYPE(ProjectExplorer::ToolChain::ToolChainType); diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp index d72bfcced7fcbc5992b90806d617f4e44067ed36..b95c06ad7467eb6760493e208e72d1ef74efc27f 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp @@ -14,7 +14,8 @@ namespace { } GCCEToolChain::GCCEToolChain(S60Devices::Device device) - : m_deviceId(device.id), + : GccToolChain(QLatin1String(GCCE_COMMAND)), + m_deviceId(device.id), m_deviceName(device.name), m_deviceRoot(device.epocRoot) { @@ -26,80 +27,9 @@ ToolChain::ToolChainType GCCEToolChain::type() const return ToolChain::GCCE; } -QByteArray GCCEToolChain::predefinedMacros() -{ - 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() { - 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; - } - } - } - } + GccToolChain::systemHeaderPaths(); 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)); diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h index 63c38b1defc57bbcb838d4cba91b36cb5702c2ac..b86255618c934276d465d0f65c61288ab735eca5 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h @@ -9,11 +9,10 @@ namespace Qt4ProjectManager { namespace Internal { -class GCCEToolChain : public ProjectExplorer::ToolChain +class GCCEToolChain : public ProjectExplorer::GccToolChain { public: GCCEToolChain(S60Devices::Device device); - QByteArray predefinedMacros(); QList<ProjectExplorer::HeaderPath> systemHeaderPaths(); void addToEnvironment(ProjectExplorer::Environment &env); ProjectExplorer::ToolChain::ToolChainType type() const; @@ -29,8 +28,6 @@ private: QString m_deviceId; QString m_deviceName; QString m_deviceRoot; - QByteArray m_predefinedMacros; - QList<ProjectExplorer::HeaderPath> m_systemHeaderPaths; const ProjectExplorer::Project *m_project; }; diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt index c399e28437f0a0f06582392b2dd0bd42c5003f42..d7ecd0b2544ecb86417472ca3d4e90c00f88d9c1 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt +++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt @@ -13,8 +13,6 @@ * must probably be compiled for different toolchains * Tool chains - * derive GCCE tool chain from GCC toolchain to get the includes/defines - implementation * delete toolchain in more intelligent way (create a new one and check if it's the same as the old one, has the advantage that cached data doesn't need to be retrieved again)