Qt4 Maemo: Fix crash

Toolchains can't hold a pointer to the qtversion for which they were
created. Copying QtVersions does not clone toolchains instead they are
held via a shared pointer. Thus the original qtversion for which the
toolchain was created might not exist anymore.

Reviewed-By: ck
This commit is contained in:
dt
2011-01-12 14:50:41 +01:00
parent 81b37f0215
commit 6f600450c4
2 changed files with 10 additions and 7 deletions

View File

@@ -35,6 +35,7 @@
#include "maemoconstants.h" #include "maemoconstants.h"
#include "maemoglobal.h" #include "maemoglobal.h"
#include "qtversionmanager.h"
#include <QtCore/QDir> #include <QtCore/QDir>
#include <QtCore/QStringBuilder> #include <QtCore/QStringBuilder>
@@ -48,7 +49,7 @@ namespace Internal {
MaemoToolChain::MaemoToolChain(const QtVersion *qtVersion) MaemoToolChain::MaemoToolChain(const QtVersion *qtVersion)
: GccToolChain(MaemoGlobal::targetRoot(qtVersion) % QLatin1String("/bin/gcc")) : GccToolChain(MaemoGlobal::targetRoot(qtVersion) % QLatin1String("/bin/gcc"))
, m_sysrootInitialized(false) , m_sysrootInitialized(false)
, m_qtVersion(qtVersion) , m_qtVersionId(qtVersion->uniqueId())
{ {
} }
@@ -63,11 +64,12 @@ ProjectExplorer::ToolChainType MaemoToolChain::type() const
void MaemoToolChain::addToEnvironment(Utils::Environment &env) void MaemoToolChain::addToEnvironment(Utils::Environment &env)
{ {
const QString maddeRoot = MaemoGlobal::maddeRoot(m_qtVersion); QtVersion *version = QtVersionManager::instance()->version(m_qtVersionId);
const QString maddeRoot = MaemoGlobal::maddeRoot(version);
env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin") env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin")
.arg(maddeRoot))); .arg(maddeRoot)));
env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin") env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin")
.arg(MaemoGlobal::targetRoot(m_qtVersion)))); .arg(MaemoGlobal::targetRoot(version))));
// put this into environment to make pkg-config stuff work // put this into environment to make pkg-config stuff work
env.prependOrSet(QLatin1String("SYSROOT_DIR"), sysroot()); env.prependOrSet(QLatin1String("SYSROOT_DIR"), sysroot());
@@ -87,7 +89,7 @@ QString MaemoToolChain::makeCommand() const
bool MaemoToolChain::equals(const ToolChain *other) const bool MaemoToolChain::equals(const ToolChain *other) const
{ {
const MaemoToolChain *toolChain = static_cast<const MaemoToolChain*> (other); const MaemoToolChain *toolChain = static_cast<const MaemoToolChain*> (other);
return other->type() == type() && toolChain->m_qtVersion == m_qtVersion; return other->type() == type() && toolChain->m_qtVersionId == m_qtVersionId;
} }
QString MaemoToolChain::sysroot() const QString MaemoToolChain::sysroot() const
@@ -99,7 +101,8 @@ QString MaemoToolChain::sysroot() const
void MaemoToolChain::setSysroot() const void MaemoToolChain::setSysroot() const
{ {
QFile file(QDir::cleanPath(MaemoGlobal::targetRoot(m_qtVersion)) QtVersion *version = QtVersionManager::instance()->version(m_qtVersionId);
QFile file(QDir::cleanPath(MaemoGlobal::targetRoot(version))
+ QLatin1String("/information")); + QLatin1String("/information"));
if (file.exists() && file.open(QIODevice::ReadOnly | QIODevice::Text)) { if (file.exists() && file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QTextStream stream(&file); QTextStream stream(&file);
@@ -109,7 +112,7 @@ void MaemoToolChain::setSysroot() const
if (list.count() <= 1) if (list.count() <= 1)
continue; continue;
if (list.at(0) == QLatin1String("sysroot")) { if (list.at(0) == QLatin1String("sysroot")) {
m_sysrootRoot = MaemoGlobal::maddeRoot(m_qtVersion) m_sysrootRoot = MaemoGlobal::maddeRoot(version)
+ QLatin1String("/sysroots/") + list.at(1); + QLatin1String("/sysroots/") + list.at(1);
} }
} }

View File

@@ -60,7 +60,7 @@ private:
private: private:
mutable QString m_sysrootRoot; mutable QString m_sysrootRoot;
mutable bool m_sysrootInitialized; mutable bool m_sysrootInitialized;
const QtVersion * const m_qtVersion; int m_qtVersionId;
}; };
} // namespace Internal } // namespace Internal