forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user