From c5b5127be23e0b5aaaed19f86aea16e5bcd5f4bb Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@nokia.com> Date: Wed, 10 Mar 2010 16:13:53 +0100 Subject: [PATCH] Disable shadow building when appropriate Reviewed-by: dt --- .../qt4buildconfiguration.cpp | 16 +++++++++----- .../qt4projectmanager/qtversionmanager.cpp | 22 +++++++++++++++++++ .../qt4projectmanager/qtversionmanager.h | 3 +++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 3dc6cf025fb..a6c3083501c 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -136,11 +136,14 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) m_qtVersionId = versions.at(0)->uniqueId(); } - if (!qtVersion()->isValid() || !qtVersion()->supportedTargetIds().contains(target()->id())) { - qWarning() << "Buildconfiguration" << displayName() << ": Qt" << qtVersion()->displayName() << "not supported by target" << target()->id(); + QtVersion *version = qtVersion(); + if (!version->isValid() || !version->supportedTargetIds().contains(target()->id())) { + qWarning() << "Buildconfiguration" << displayName() << ": Qt" << version->displayName() << "not supported by target" << target()->id(); return false; } + m_shadowBuild = (m_shadowBuild && version->isValid() && version->supportsShadowBuilds()); + QList<ToolChain::ToolChainType> possibleTcs(qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes())); if (!possibleTcs.contains(toolChainType())) setToolChainType(qt4Target()->preferredToolChainType(possibleTcs)); @@ -235,11 +238,14 @@ QString Qt4BuildConfiguration::shadowBuildDirectory() const void Qt4BuildConfiguration::setShadowBuildAndDirectory(bool shadowBuild, const QString &buildDirectory) { - if (m_shadowBuild == shadowBuild && m_buildDirectory == buildDirectory) + QtVersion *version = qtVersion(); + QString directoryToSet = QDir::fromNativeSeparators(buildDirectory); + bool toSet = (shadowBuild && version->isValid() && version->supportsShadowBuilds()); + if (m_shadowBuild == toSet && m_buildDirectory == directoryToSet) return; - m_shadowBuild = shadowBuild; - m_buildDirectory = buildDirectory; + m_shadowBuild = toSet; + m_buildDirectory = directoryToSet; emit buildDirectoryChanged(); emit proFileEvaluateNeeded(this); } diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index 1c21a56b788..003809aea44 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -613,6 +613,28 @@ QString QtVersion::toHtml() const return rc; } +bool QtVersion::supportsShadowBuilds() const +{ + QSet<QString> targets = supportedTargetIds(); + // Symbian does not support shadow building + if (targets.contains(Constants::S60_DEVICE_TARGET_ID) || + targets.contains(Constants::S60_EMULATOR_TARGET_ID)) { + // We can not support shadow building with the ABLD system + return false; + } + if (targets.contains(Constants::MAEMO_DEVICE_TARGET_ID)) { +#if defined(Q_OS_WIN) + // qmake -unix fails with shadow building on windows + return false; +#else + // ... but works fine anywhere else + return true; +#endif + } + + return true; +} + QString QtVersion::displayName() const { return m_displayName; diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index 0c71d1649a8..02d2d5bcea5 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -136,6 +136,9 @@ public: QmakeBuildConfigs defaultBuildConfig() const; QString toHtml() const; + + bool supportsShadowBuilds() const; + private: QList<QSharedPointer<ProjectExplorer::ToolChain> > toolChains() const; static int getUniqueId(); -- GitLab