Make QtVersion's toolchain variable.

QtVersion provides possible toolchains that can be used by the
Qt version, e.g. winscw, gcce and armv5 for symbian-abld.
This commit is contained in:
con
2009-06-09 18:02:23 +02:00
parent 7bec2253c9
commit a3a7c27d5d
8 changed files with 70 additions and 47 deletions

View File

@@ -885,33 +885,33 @@ void QtVersion::updateQMakeCXX() const
m_qmakeCXXUpToDate = true;
}
ProjectExplorer::ToolChain *QtVersion::toolChain() const
ProjectExplorer::ToolChain *QtVersion::toolChain(ProjectExplorer::ToolChain::ToolChainType type) const
{
updateToolChain();
updateToolChain(type);
return m_toolChain.data();
}
void QtVersion::updateToolChain() const
void QtVersion::updateToolChain(ProjectExplorer::ToolChain::ToolChainType type) const
{
if (m_toolChainUpToDate)
if (m_toolChainUpToDate && m_toolChain
&& m_toolChain.data() && m_toolChain->type() == type)
return;
ProjectExplorer::ToolChain *m_test= 0;
ProjectExplorer::ToolChain::ToolChainType t = toolchainType();
if (t == ProjectExplorer::ToolChain::MinGW) {
ProjectExplorer::ToolChain *tempToolchain= 0;
if (type == ProjectExplorer::ToolChain::MinGW) {
QString qmake_cxx = qmakeCXX();
ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
//addToEnvironment(env);
env.prependOrSetPath(mingwDirectory()+"/bin");
qmake_cxx = env.searchInPath(qmake_cxx);
m_test = ProjectExplorer::ToolChain::createMinGWToolChain(qmake_cxx, mingwDirectory());
tempToolchain = ProjectExplorer::ToolChain::createMinGWToolChain(qmake_cxx, mingwDirectory());
//qDebug()<<"Mingw ToolChain";
} else if(t == ProjectExplorer::ToolChain::MSVC) {
m_test = ProjectExplorer::ToolChain::createMSVCToolChain(msvcVersion(), isMSVC64Bit());
} else if(type == ProjectExplorer::ToolChain::MSVC) {
tempToolchain = ProjectExplorer::ToolChain::createMSVCToolChain(msvcVersion(), isMSVC64Bit());
//qDebug()<<"MSVC ToolChain ("<<version->msvcVersion()<<")";
} else if(t == ProjectExplorer::ToolChain::WINCE) {
m_test = ProjectExplorer::ToolChain::createWinCEToolChain(msvcVersion(), wincePlatform());
} else if(type == ProjectExplorer::ToolChain::WINCE) {
tempToolchain = ProjectExplorer::ToolChain::createWinCEToolChain(msvcVersion(), wincePlatform());
//qDebug()<<"WinCE ToolChain ("<<version->msvcVersion()<<","<<version->wincePlatform()<<")";
} else if(t == ProjectExplorer::ToolChain::GCC || t == ProjectExplorer::ToolChain::LinuxICC) {
} else if(type == ProjectExplorer::ToolChain::GCC || type == ProjectExplorer::ToolChain::LinuxICC) {
QString qmake_cxx = qmakeCXX();
ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
//addToEnvironment(env);
@@ -921,21 +921,23 @@ void QtVersion::updateToolChain() const
// Unfortunately, we need a valid QMAKE_CXX to configure the parser.
qmake_cxx = QLatin1String("cc");
}
m_test = ProjectExplorer::ToolChain::createGccToolChain(qmake_cxx);
tempToolchain = ProjectExplorer::ToolChain::createGccToolChain(qmake_cxx);
//qDebug()<<"GCC ToolChain ("<<qmake_cxx<<")";
#ifdef QTCREATOR_WITH_S60
} else if (t == ProjectExplorer::ToolChain::WINSCW) {
m_test = S60Manager::instance()->createGCCEToolChain(this);
} else if (type == ProjectExplorer::ToolChain::WINSCW) {
tempToolchain = S60Manager::instance()->createWINSCWToolChain(this);
} else if (type == ProjectExplorer::ToolChain::GCCE) {
tempToolchain = S60Manager::instance()->createGCCEToolChain(this);
#endif
} else {
qDebug()<<"Could not detect ToolChain for"<<mkspec();
qDebug()<<"Could not create ToolChain for"<<mkspec();
qDebug()<<"Qt Creator doesn't know about the system includes, nor the systems defines.";
}
if (ProjectExplorer::ToolChain::equals(m_test, m_toolChain.data())) {
delete m_test;
if (ProjectExplorer::ToolChain::equals(tempToolchain, m_toolChain.data())) {
delete tempToolchain;
} else {
m_toolChain = QSharedPointer<ProjectExplorer::ToolChain>(m_test);
m_toolChain = QSharedPointer<ProjectExplorer::ToolChain>(tempToolchain);
}
m_toolChainUpToDate = true;
@@ -1005,26 +1007,34 @@ QString QtVersion::linguistCommand() const
return m_linguistCommand;
}
ProjectExplorer::ToolChain::ToolChainType QtVersion::toolchainType() const
QList<ProjectExplorer::ToolChain::ToolChainType> QtVersion::possibleToolChainTypes() const
{
QList<ProjectExplorer::ToolChain::ToolChainType> toolChains;
if (!isValid())
return ProjectExplorer::ToolChain::INVALID;
return toolChains << ProjectExplorer::ToolChain::INVALID;
const QString &spec = mkspec();
// qDebug()<<"spec="<<spec;
if (spec.contains("win32-msvc") || spec.contains(QLatin1String("win32-icc")))
return ProjectExplorer::ToolChain::MSVC;
toolChains << ProjectExplorer::ToolChain::MSVC;
else if (spec.contains("win32-g++"))
return ProjectExplorer::ToolChain::MinGW;
toolChains << ProjectExplorer::ToolChain::MinGW;
else if (spec == QString::null)
return ProjectExplorer::ToolChain::INVALID;
toolChains << ProjectExplorer::ToolChain::INVALID;
else if (spec.contains("wince"))
return ProjectExplorer::ToolChain::WINCE;
toolChains << ProjectExplorer::ToolChain::WINCE;
else if (spec.contains("linux-icc"))
return ProjectExplorer::ToolChain::LinuxICC;
else if (spec.contains("abld"))
return ProjectExplorer::ToolChain::WINSCW;
toolChains << ProjectExplorer::ToolChain::LinuxICC;
#ifdef QTCREATOR_WITH_S60
else if (spec.contains("symbian-abld"))
toolChains << ProjectExplorer::ToolChain::GCCE << ProjectExplorer::ToolChain::WINSCW;
#endif
else
return ProjectExplorer::ToolChain::GCC;
toolChains << ProjectExplorer::ToolChain::GCC;
return toolChains;
}
ProjectExplorer::ToolChain::ToolChainType QtVersion::defaultToolchainType() const
{
return possibleToolChainTypes().at(0);
}
#ifdef QTCREATOR_WITH_S60
@@ -1076,7 +1086,7 @@ void QtVersion::addToEnvironment(ProjectExplorer::Environment &env) const
// add libdir, includedir and bindir
// or add Mingw dirs
// or do nothing on other
ProjectExplorer::ToolChain *tc = toolChain();
ProjectExplorer::ToolChain *tc = toolChain(defaultToolchainType());
if (tc)
tc->addToEnvironment(env);
}
@@ -1185,7 +1195,7 @@ QString QtVersion::buildDebuggingHelperLibrary()
ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
addToEnvironment(env);
ProjectExplorer::ToolChain *tc = toolChain();
ProjectExplorer::ToolChain *tc = toolChain(defaultToolchainType());
QString directory = DebuggingHelperLibrary::copyDebuggingHelperLibrary(qtInstallData, path());
QString output = DebuggingHelperLibrary::buildDebuggingHelperLibrary(directory, tc->makeCommand(), qmakeCommand(), mkspec(), env);
m_hasDebuggingHelper = !debuggingHelperLibrary().isEmpty();