diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp index 0a07d7b351656057dba868b69544860069f85cec..8b57aa68117a3f2b7d8e477d5a2d2c3191e48f1d 100644 --- a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp +++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp @@ -84,6 +84,13 @@ QString Qt4DesktopTargetFactory::displayNameForId(const QString &id) const return QString(); } +QString Qt4DesktopTargetFactory::buildNameForId(const QString &id) const +{ + if (id == QLatin1String(Constants::DESKTOP_TARGET_ID)) + return QLatin1String("desktop"); + return QString(); +} + QIcon Qt4DesktopTargetFactory::iconForId(const QString &id) const { if (id == QLatin1String(Constants::DESKTOP_TARGET_ID)) @@ -117,37 +124,7 @@ ProjectExplorer::Target *Qt4DesktopTargetFactory::restore(ProjectExplorer::Proj return 0; } -QString Qt4DesktopTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id) -{ - if (id != QLatin1String(Constants::DESKTOP_TARGET_ID)) - return QString(); - - // currently we can't have the build directory to be deeper than the source directory - // since that is broken in qmake - // Once qmake is fixed we can change that to have a top directory and - // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') ) - return projectLocation + QLatin1String("-desktop"); -} - -QList<BuildConfigurationInfo> Qt4DesktopTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) -{ - Q_ASSERT(id == Constants::DESKTOP_TARGET_ID); - QList<BuildConfigurationInfo> infoList; - QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id, minimumQtVersion); - - foreach (QtVersion *version, knownVersions) { - if (!version->isValid() || !version->toolChainAvailable()) - continue; - QtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); - - QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), id); - infoList.append(BuildConfigurationInfo(version, config, QString(), dir)); - infoList.append(BuildConfigurationInfo(version, config ^ QtVersion::DebugBuild, QString(), dir)); - } - return infoList; -} - - Qt4TargetSetupWidget *Qt4DesktopTargetFactory::createTargetSetupWidget(const QString &id, const QString &proFilePath, const QtVersionNumber &number, bool importEnabled, QList<BuildConfigurationInfo> importInfos) +Qt4TargetSetupWidget *Qt4DesktopTargetFactory::createTargetSetupWidget(const QString &id, const QString &proFilePath, const QtVersionNumber &number, bool importEnabled, QList<BuildConfigurationInfo> importInfos) { Qt4DefaultTargetSetupWidget *widget = static_cast<Qt4DefaultTargetSetupWidget *>( diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h index 4cd939c60d0c68d9b443ead60c6cc55a6c5268c8..4063dfd5fb6f1b9334bed60ffc76534eeb851c48 100644 --- a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h +++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h @@ -52,13 +52,12 @@ public: bool canCreate(ProjectExplorer::Project *parent, const QString &id) const; bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const; ProjectExplorer::Target *restore(ProjectExplorer::Project *parent, const QVariantMap &map); - QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id); virtual bool supportsTargetId(const QString &id) const; Qt4TargetSetupWidget *createTargetSetupWidget(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion, bool importEnabled, QList<BuildConfigurationInfo> importInfos); + QString buildNameForId(const QString &id) const; bool isMobileTarget(const QString &id); - QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion); ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id); ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id, const QList<BuildConfigurationInfo> &infos); diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp index 9d7e3bb4c9b6c0c43560b3a73d369ae9460efdd8..aad081e3da4dd7a83dee22f2491dc6578f399142 100644 --- a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp +++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp @@ -92,6 +92,13 @@ QIcon Qt4SimulatorTargetFactory::iconForId(const QString &id) const return QIcon(); } +QString Qt4SimulatorTargetFactory::buildNameForId(const QString &id) const +{ + if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID)) + return QLatin1String("simulator"); + return QString(); +} + bool Qt4SimulatorTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const { if (!qobject_cast<Qt4Project *>(parent)) @@ -117,35 +124,6 @@ ProjectExplorer::Target *Qt4SimulatorTargetFactory::restore(ProjectExplorer::Pro return 0; } -QString Qt4SimulatorTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id) -{ - if (id != QLatin1String(Constants::QT_SIMULATOR_TARGET_ID)) - return QString(); - - // currently we can't have the build directory to be deeper than the source directory - // since that is broken in qmake - // Once qmake is fixed we can change that to have a top directory and - // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') ) - return projectLocation + QLatin1String("-simulator"); -} - -QList<BuildConfigurationInfo> Qt4SimulatorTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) -{ - Q_ASSERT(id == Constants::QT_SIMULATOR_TARGET_ID); - QList<BuildConfigurationInfo> infos; - QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id, minimumQtVersion); - - foreach (QtVersion *version, knownVersions) { - if (!version->isValid() || !version->toolChainAvailable()) - continue; - QtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); - QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), id); - infos.append(BuildConfigurationInfo(version, config, QString(), dir)); - infos.append(BuildConfigurationInfo(version, config ^ QtVersion::DebugBuild, QString(), dir)); - } - return infos; -} - bool Qt4SimulatorTargetFactory::isMobileTarget(const QString &id) { Q_UNUSED(id) diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h index 096f03039b9285c479e8f7cd5a2a97371a23e322..836ac56a9df15b8b0650d8c935e7603a06b35312 100644 --- a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h +++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h @@ -55,12 +55,11 @@ public: bool canCreate(ProjectExplorer::Project *parent, const QString &id) const; bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const; ProjectExplorer::Target *restore(ProjectExplorer::Project *parent, const QVariantMap &map); - QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id); bool supportsTargetId(const QString &id) const; - QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion); bool isMobileTarget(const QString &id); + QString buildNameForId(const QString &id) const; ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id); ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id, const QList<BuildConfigurationInfo> &infos); }; diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp index 68f9b94fc4821089a2637ba0ff7cb3406e950f17..b9cb5921d677a8b3f77a740d5a97ba505c4485c0 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp @@ -163,15 +163,6 @@ Qt4BuildConfigurationFactory *AbstractQt4MaemoTarget::buildConfigurationFactory( return m_buildConfigurationFactory; } -QString AbstractQt4MaemoTarget::defaultBuildDirectory() const -{ - //TODO why? -#if defined(Q_OS_WIN) - return project()->projectDirectory(); -#endif - return Qt4BaseTarget::defaultBuildDirectory(); -} - void AbstractQt4MaemoTarget::createApplicationProFiles() { removeUnconfiguredCustomExectutableRunConfigurations(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h index fdcfcdedf1b6f4c4a3c18f6daaf88707712380ec..b2163934f6aecb4fa3cece8e1b6b4712b48f64b2 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h @@ -57,7 +57,6 @@ public: virtual ~AbstractQt4MaemoTarget(); Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const; - QString defaultBuildDirectory() const; void createApplicationProFiles(); QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Node *n); diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp index 2836340359d7a75560695d902f8a5782070d8ec2..638727e53b036e745c8362687914c55ec919c305 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp @@ -131,39 +131,25 @@ ProjectExplorer::Target *Qt4MaemoTargetFactory::restore(ProjectExplorer::Project return 0; } -QString Qt4MaemoTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id) +QString Qt4MaemoTargetFactory::buildNameForId(const QString &id) const { - QString suffix; if (id == QLatin1String(Constants::MAEMO5_DEVICE_TARGET_ID)) - suffix = QLatin1String("maemo"); + return QLatin1String("maemo"); else if (id == QLatin1String(Constants::HARMATTAN_DEVICE_TARGET_ID)) - suffix = QLatin1String("harmattan"); + return QLatin1String("harmattan"); else if (id == QLatin1String(Constants::MEEGO_DEVICE_TARGET_ID)) - suffix = QLatin1String("meego"); + return QLatin1String("meego"); else return QString(); - - // currently we can't have the build directory to be deeper than the source directory - // since that is broken in qmake - // Once qmake is fixed we can change that to have a top directory and - // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') ) - return projectLocation + QLatin1Char('-') + suffix; } -QList<BuildConfigurationInfo> Qt4MaemoTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) +QString Qt4MaemoTargetFactory::shadowBuildDirectory(const QString &profilePath, const QString &id, const QString &suffix) { - QList<BuildConfigurationInfo> infos; - QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id, minimumQtVersion); - - foreach (QtVersion *version, knownVersions) { - if (!version->isValid() || !version->toolChainAvailable()) - continue; - QtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); - QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), id); - infos.append(BuildConfigurationInfo(version, config, QString(), dir)); - infos.append(BuildConfigurationInfo(version, config ^ QtVersion::DebugBuild, QString(), dir)); - } - return infos; + //TODO why? +#if defined(Q_OS_WIN) + return projectDirectory; +#endif + return Qt4BaseTargetFactory::shadowBuildDirectory(profilePath, id, suffix); } bool Qt4MaemoTargetFactory::isMobileTarget(const QString &id) diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h index 010eb34faa37f0d968b3f9ba2688cc9779048e65..822ad7c89af084252fb5f347420386c743f43042 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h +++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h @@ -53,14 +53,15 @@ public: bool canCreate(ProjectExplorer::Project *parent, const QString &id) const; bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const; ProjectExplorer::Target *restore(ProjectExplorer::Project *parent, const QVariantMap &map); - QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id); + + QString shadowBuildDirectory(const QString &profilePath, const QString &id, const QString &suffix); + QString buildNameForId(const QString &id) const; bool supportsTargetId(const QString &id) const; ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id); ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id, const QList<BuildConfigurationInfo> &infos); - QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion); bool isMobileTarget(const QString &id); }; diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp index 05006beef5b672e23f7b1387542a1a27c36eb6c8..0e7132e3a18fa947a9e87ec1fffc23ef2480161e 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp @@ -112,11 +112,6 @@ QList<ProjectExplorer::ToolChain *> Qt4SymbianTarget::possibleToolChains(Project return tmp; } -QString Qt4SymbianTarget::defaultBuildDirectory() const -{ - return project()->projectDirectory(); -} - void Qt4SymbianTarget::createApplicationProFiles() { removeUnconfiguredCustomExectutableRunConfigurations(); diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h index 0c864bd66f375e7ef9928a0aa3bfa17d16c7c8e3..722eadb911385b9a9bfd9f17471f6a40ffcf8922 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h +++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h @@ -55,8 +55,6 @@ public: QList<ProjectExplorer::ToolChain *> possibleToolChains(ProjectExplorer::BuildConfiguration *bc) const; - QString defaultBuildDirectory() const; - void createApplicationProFiles(); virtual QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Node *n); diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp index 3d4bc634e4663c0a0e7910fd928bb5fd0a30e2f9..0ed35db69beeffbd27320866d6b323a4a8e86292 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp @@ -127,12 +127,12 @@ ProjectExplorer::Target *Qt4SymbianTargetFactory::restore(ProjectExplorer::Proje return 0; } -QString Qt4SymbianTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id) +QString Qt4SymbianTargetFactory::shadowBuildDirectory(const QString &projectDirectory, const QString &id, const QString &suffix) { - Q_UNUSED(projectLocation); + Q_UNUSED(projectDirectory); Q_UNUSED(id); - // should not be called from anywhere, since we override Qt4BaseTarget::defaultBuldDirectory() - return QString(); + Q_UNUSED(suffix); + return projectDirectory; } QList<ProjectExplorer::Task> Qt4SymbianTargetFactory::reportIssues(const QString &proFile) @@ -165,25 +165,15 @@ QList<ProjectExplorer::Task> Qt4SymbianTargetFactory::reportIssues(const QString QList<BuildConfigurationInfo> Qt4SymbianTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) { - QList<BuildConfigurationInfo> infos; - QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id, minimumQtVersion); - - foreach (QtVersion *version, knownVersions) { - if (!version->isValid() || !version->toolChainAvailable()) - continue; - - bool buildAll = version->defaultBuildConfig() & QtVersion::BuildAll; - QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0); - QString dir = QFileInfo(proFilePath).absolutePath(), id; - if (id == Constants::S60_EMULATOR_TARGET_ID) { - infos.append(BuildConfigurationInfo(version, config | QtVersion::DebugBuild, QString(), dir)); - } else { - infos.append(BuildConfigurationInfo(version, config, QString(), dir)); - infos.append(BuildConfigurationInfo(version, config ^ QtVersion::DebugBuild, QString(), dir)); - } - } - - return infos; + QList<BuildConfigurationInfo> infos = Qt4BaseTargetFactory::availableBuildConfigurations(id, proFilePath, minimumQtVersion); + if (id != Constants::S60_EMULATOR_TARGET_ID) + return infos; + // For emulator filter out all non debug builds + QList<BuildConfigurationInfo> tmp; + foreach (const BuildConfigurationInfo &info, infos) + if (info.buildConfig & QtVersion::DebugBuild) + tmp << info; + return tmp; } bool Qt4SymbianTargetFactory::isMobileTarget(const QString &id) diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h index 0cf1920557fe6e44821419c8d4b228927aab15d9..16729111629b11dab3e28715c4e3688ab20278d0 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h +++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h @@ -58,7 +58,7 @@ public: virtual ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id, const QList<BuildConfigurationInfo> &infos); virtual ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id, Qt4TargetSetupWidget *widget); - QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id); + QString shadowBuildDirectory(const QString &profilePath, const QString &id, const QString &suffix); QList<ProjectExplorer::Task> reportIssues(const QString &proFile); QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion); bool isMobileTarget(const QString &id); diff --git a/src/plugins/qt4projectmanager/qt4basetargetfactory.h b/src/plugins/qt4projectmanager/qt4basetargetfactory.h index 2be2ebc5bcae87519fdf676672f2f76d84d4b0ff..d4fffa8a20d5a0a523d2108728287030fff8c8c4 100644 --- a/src/plugins/qt4projectmanager/qt4basetargetfactory.h +++ b/src/plugins/qt4projectmanager/qt4basetargetfactory.h @@ -44,6 +44,7 @@ namespace Qt4ProjectManager { class Qt4TargetSetupWidget; class QtVersionNumber; +class QtVersion; struct BuildConfigurationInfo; class QT4PROJECTMANAGER_EXPORT Qt4BaseTargetFactory : public ProjectExplorer::ITargetFactory @@ -59,10 +60,15 @@ public: bool importEnabled, QList<BuildConfigurationInfo> importInfos); - virtual QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id) =0; + /// suffix should be unique + virtual QString shadowBuildDirectory(const QString &profilePath, const QString &id, const QString &suffix); + /// used by the default implementation of shadowBuildDirectory + virtual QString buildNameForId(const QString &id) const; + /// used by the default implementation of createTargetSetupWidget /// not needed otherwise - virtual QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) = 0; + /// by default creates one debug + one release buildconfiguration per qtversion + virtual QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion); virtual QList<ProjectExplorer::Task> reportIssues(const QString &proFile); /// only used in the TargetSetupPage diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 1770571751c4c9f28648e4bd40f69dbfec0d5778..d8ce66225aea86149d1b52424d69cdca4e708c46 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -125,17 +125,21 @@ static inline QString msgBuildConfigNotApplicable(const QString &d, const QtVers arg(d, qtVersion->displayName(), qtVersion->qmakeCommand(), target->id()); } +#include "qt4basetargetfactory.h" + bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) { if (!BuildConfiguration::fromMap(map)) return false; m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), true).toBool(); - m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), qt4Target()->defaultBuildDirectory()).toString(); m_qtVersionId = map.value(QLatin1String(QT_VERSION_ID_KEY)).toInt(); ProjectExplorer::ToolChain *tc = 0; tc = ProjectExplorer::ToolChainManager::instance()->findToolChain(map.value(QLatin1String(TOOLCHAIN_KEY)).toString()); m_qmakeBuildConfiguration = QtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt()); + m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), defaultShadowBuildDirectory()).toString(); + + m_lastEmmitedBuildDirectory = buildDirectory(); // Pick a Qt version if the default version is used: // We assume that the default Qt version was used in earlier versions of Qt creator. @@ -190,12 +194,6 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) void Qt4BuildConfiguration::ctor() { - m_buildDirectory = qt4Target()->defaultBuildDirectory(); - if (m_buildDirectory == target()->project()->projectDirectory()) - m_shadowBuild = false; - - m_lastEmmitedBuildDirectory = buildDirectory(); - connect(this, SIGNAL(environmentChanged()), this, SLOT(emitBuildDirectoryChanged())); @@ -237,6 +235,13 @@ Utils::Environment Qt4BuildConfiguration::baseEnvironment() const return env; } +QString Qt4BuildConfiguration::defaultShadowBuildDirectory() const +{ + Qt4BaseTargetFactory *factory = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(qt4Target()->id()); + // todo displayName isn't ideal + return factory->shadowBuildDirectory(qt4Target()->qt4Project()->file()->fileName(), qt4Target()->id(), displayName()); +} + /// returns the unexpanded build directory QString Qt4BuildConfiguration::rawBuildDirectory() const { @@ -245,7 +250,7 @@ QString Qt4BuildConfiguration::rawBuildDirectory() const if (!m_buildDirectory.isEmpty()) workingDirectory = m_buildDirectory; else - workingDirectory = qt4Target()->defaultBuildDirectory(); + workingDirectory = defaultShadowBuildDirectory(); } if (workingDirectory.isEmpty()) workingDirectory = target()->project()->projectDirectory(); @@ -291,7 +296,7 @@ bool Qt4BuildConfiguration::shadowBuild() const QString Qt4BuildConfiguration::shadowBuildDirectory() const { if (m_buildDirectory.isEmpty()) - return qt4Target()->defaultBuildDirectory(); + return defaultShadowBuildDirectory(); return m_buildDirectory; } @@ -393,6 +398,7 @@ void Qt4BuildConfiguration::setQMakeBuildConfiguration(QtVersion::QmakeBuildConf emit proFileEvaluateNeeded(this); emit qmakeBuildConfigurationChanged(); + emitBuildDirectoryChanged(); } void Qt4BuildConfiguration::emitProFileEvaluteNeeded() diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index e645253e724f3a4dd5b7bd80ecd391337a7b2ea5..ba61ecd8dc7ff542a00a247bcb8354bd6a464ae7 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -158,6 +158,7 @@ private: void ctor(); void pickValidQtVersion(); QString rawBuildDirectory() const; + QString defaultShadowBuildDirectory() const; bool m_shadowBuild; bool m_isEnabled; diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index f61ca97fa10a8615fdbb53420bee8a9895d7976e..a11dde4902b82980afc38671b18c2aca4b7fd3c6 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -747,19 +747,6 @@ bool Qt4Project::wasEvaluateCanceled() return m_cancelEvaluate; } -QString Qt4Project::defaultTopLevelBuildDirectory() const -{ - return defaultTopLevelBuildDirectory(file()->fileName()); -} - -QString Qt4Project::defaultTopLevelBuildDirectory(const QString &profilePath) -{ - if (profilePath.isEmpty()) - return QString(); - QFileInfo info(profilePath); - return QDir::cleanPath(projectDirectory(profilePath) + QLatin1String("/../") + info.baseName() + QLatin1String("-build")); -} - void Qt4Project::asyncUpdate() { if (debug) diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 4895eb0a9c408297c22caf765b2c5595d4ecadb2..82786a09561f426860c303d0dfa34af8a4dc7a12 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -179,9 +179,6 @@ public: /// \internal bool wasEvaluateCanceled(); - QString defaultTopLevelBuildDirectory() const; - static QString defaultTopLevelBuildDirectory(const QString &profilePath); - Internal::CentralizedFolderWatcher *centralizedFolderWatcher(); // For Qt4ProFileNode after a on disk change diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp index fdf83cb92e9c763df60b0f9e3fdfd8168a6114d9..b21bc70191f5673ff6981feb00b7347b959226a4 100644 --- a/src/plugins/qt4projectmanager/qt4target.cpp +++ b/src/plugins/qt4projectmanager/qt4target.cpp @@ -97,6 +97,67 @@ ProjectExplorer::Target *Qt4BaseTargetFactory::create(ProjectExplorer::Project * return create(parent, id, w->buildConfigurationInfos()); } +QList<BuildConfigurationInfo> Qt4BaseTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) +{ + QList<BuildConfigurationInfo> infoList; + QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id, minimumQtVersion); + + foreach (QtVersion *version, knownVersions) { + if (!version->isValid() || !version->toolChainAvailable()) + continue; + QtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); + BuildConfigurationInfo info = BuildConfigurationInfo(version, config, QString(), QString()); + info.directory = shadowBuildDirectory(proFilePath, id, msgBuildConfigurationName(info)); + infoList.append(info); + + info.buildConfig = config ^ QtVersion::DebugBuild; + info.directory = shadowBuildDirectory(proFilePath, id, msgBuildConfigurationName(info)); + infoList.append(info); + } + return infoList; +} + +QString sanitize(const QString &input) +{ + QString result; + result.reserve(input.size()); + foreach (const QChar &c, input) { + if ((c >= 'a' && c <='z') + || (c >= 'A' && c <= 'Z') + || (c >= '0' && c <= '9') + || c == '-' + || c == '_') + result.append(c); + else + result.append('_'); + } + return result; +} + +QString projectDirectory(const QString &proFile) +{ + if (proFile.isEmpty()) + return QString(); + QFileInfo info(proFile); + return info.absoluteDir().path(); +} + +QString Qt4BaseTargetFactory::shadowBuildDirectory(const QString &profilePath, const QString &id, const QString &suffix) +{ + if (profilePath.isEmpty()) + return QString(); + QFileInfo info(profilePath); + + QString base = QDir::cleanPath(projectDirectory(profilePath) + QLatin1String("/../") + info.baseName() + QLatin1String("-build-")); + return base + buildNameForId(id) + QLatin1String("-") + sanitize(suffix); +} + +QString Qt4BaseTargetFactory::buildNameForId(const QString &id) const +{ + Q_UNUSED(id); + return QString(); +} + Qt4BaseTargetFactory *Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(const QString &id) { QList<Qt4BaseTargetFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>(); @@ -158,12 +219,6 @@ Qt4Project *Qt4BaseTarget::qt4Project() const return static_cast<Qt4Project *>(project()); } -QString Qt4BaseTarget::defaultBuildDirectory() const -{ - Qt4BaseTargetFactory *fac = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(id()); - return fac->defaultShadowBuildDirectory(qt4Project()->defaultTopLevelBuildDirectory(), id()); -} - QList<ProjectExplorer::ToolChain *> Qt4BaseTarget::possibleToolChains(ProjectExplorer::BuildConfiguration *bc) const { QList<ProjectExplorer::ToolChain *> tmp; @@ -977,13 +1032,17 @@ QList<BuildConfigurationInfo> BuildConfigurationInfo::importBuildConfigurations( // Check for builds in build directoy QList<Qt4BaseTargetFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>(); - QString defaultTopLevelBuildDirectory = Qt4Project::defaultTopLevelBuildDirectory(proFilePath); foreach (Qt4BaseTargetFactory *factory, factories) { foreach (const QString &id, factory->supportedTargetIds(0)) { - QString expectedBuild = factory->defaultShadowBuildDirectory(defaultTopLevelBuildDirectory, id); - BuildConfigurationInfo info = checkForBuild(expectedBuild, proFilePath); - if (info.isValid()) - result.append(info); + QString expectedBuildprefix = factory->shadowBuildDirectory(proFilePath, id, ""); + QString baseDir = QFileInfo(expectedBuildprefix).absolutePath(); + foreach (const QString &dir, QDir(baseDir).entryList()) { + if (dir.startsWith(expectedBuildprefix)) { + BuildConfigurationInfo info = checkForBuild(dir, proFilePath); + if (info.isValid()) + result.append(info); + } + } } } return result; diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h index 18db20e3dcbfc1f45d86152905c11a5b8a3d9d3d..949cf4ad4481fec5bcb117fc8ca95dfd4be51518 100644 --- a/src/plugins/qt4projectmanager/qt4target.h +++ b/src/plugins/qt4projectmanager/qt4target.h @@ -85,7 +85,6 @@ public: QString directory); virtual void createApplicationProFiles() = 0; - virtual QString defaultBuildDirectory() const; virtual QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Node *n) = 0;