diff options
Diffstat (limited to 'src/plugins')
36 files changed, 619 insertions, 305 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index 26bdc479b6..c0ba3d7ac3 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -38,6 +38,9 @@ #include "autoreconfstep.h" #include "configurestep.h" +#include <coreplugin/icore.h> +#include <coreplugin/mimedatabase.h> +#include <projectexplorer/buildinfo.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/kitinformation.h> #include <projectexplorer/projectexplorerconstants.h> @@ -46,6 +49,7 @@ #include <qtsupport/customexecutablerunconfiguration.h> #include <utils/qtcassert.h> +#include <QFileInfo> #include <QInputDialog> using namespace AutotoolsProjectManager; @@ -85,59 +89,38 @@ AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory(QObject * { } -QList<Core::Id> AutotoolsBuildConfigurationFactory::availableCreationIds(const Target *parent) const +bool AutotoolsBuildConfigurationFactory::canCreate(const Target *parent) const { - if (!canHandle(parent)) - return QList<Core::Id>(); - return QList<Core::Id>() << Core::Id(AUTOTOOLS_BC_ID); + return canHandle(parent); } -QString AutotoolsBuildConfigurationFactory::displayNameForId(const Core::Id id) const +QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const { - if (id == AUTOTOOLS_BC_ID) - return tr("Build"); - return QString(); -} + QList<BuildInfo *> result; + QTC_ASSERT(canCreate(parent), return result); -bool AutotoolsBuildConfigurationFactory::canCreate(const Target *parent, const Core::Id id) const -{ - if (!canHandle(parent)) - return false; - if (id == AUTOTOOLS_BC_ID) - return true; - return false; + result << createBuildInfo(parent->kit(), + Utils::FileName::fromString(parent->project()->projectDirectory())); + return result; } -AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::create(Target *parent, const Core::Id id, const QString &name) +BuildConfiguration *AutotoolsBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const { - if (!canCreate(parent, id)) - return 0; + QTC_ASSERT(parent, return 0); + QTC_ASSERT(info->factory() == this, return 0); + QTC_ASSERT(info->kitId == parent->kit()->id(), return 0); + QTC_ASSERT(!info->displayName.isEmpty(), return 0); - bool ok = true; - QString buildConfigurationName = name; - if (buildConfigurationName.isNull()) - buildConfigurationName = QInputDialog::getText(0, - tr("New Configuration"), - tr("New configuration name:"), - QLineEdit::Normal, - QString(), &ok); - buildConfigurationName = buildConfigurationName.trimmed(); - if (!ok || buildConfigurationName.isEmpty()) - return 0; - - AutotoolsBuildConfiguration *bc = createDefaultConfiguration(parent); - bc->setDisplayName(buildConfigurationName); - return bc; -} + AutotoolsBuildConfiguration *bc = new AutotoolsBuildConfiguration(parent); + bc->setDisplayName(info->displayName); + bc->setDefaultDisplayName(info->displayName); + bc->setBuildDirectory(info->buildDirectory); -AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::createDefaultConfiguration(ProjectExplorer::Target *target) -{ - AutotoolsBuildConfiguration *bc = new AutotoolsBuildConfiguration(target); BuildStepList *buildSteps = bc->stepList(Core::Id(BUILDSTEPS_BUILD)); // ### Build Steps Build ### // autogen.sh or autoreconf - QFile autogenFile(target->project()->projectDirectory() + QLatin1String("/autogen.sh")); + QFile autogenFile(parent->project()->projectDirectory() + QLatin1String("/autogen.sh")); if (autogenFile.exists()) { AutogenStep *autogenStep = new AutogenStep(buildSteps); buildSteps->insertStep(0, autogenStep); @@ -168,14 +151,29 @@ AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::createDefaultCo bool AutotoolsBuildConfigurationFactory::canHandle(const Target *t) const { + QTC_ASSERT(t, return false); + if (!t->project()->supportsKit(t->kit())) return false; return t->project()->id() == Constants::AUTOTOOLS_PROJECT_ID; } +BuildInfo *AutotoolsBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k, + const Utils::FileName &buildDir) const +{ + BuildInfo *info = new BuildInfo(this); + info->typeName = tr("Build"); + info->buildDirectory = buildDir; + info->kitId = k->id(); + + return info; +} + bool AutotoolsBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *source) const { - return canCreate(parent, source->id()); + if (!canHandle(parent)) + return false; + return source->id() == AUTOTOOLS_BC_ID; } AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source) @@ -189,7 +187,9 @@ AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::clone(Target *p bool AutotoolsBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const { - return canCreate(parent, idFromMap(map)); + if (!canHandle(parent)) + return false; + return idFromMap(map) == AUTOTOOLS_BC_ID; } AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h index 7fb3a04792..15a535ff68 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h @@ -34,6 +34,8 @@ #include <projectexplorer/buildconfiguration.h> +namespace Utils { class FileName; } + namespace AutotoolsProjectManager { namespace Internal { @@ -67,20 +69,19 @@ class AutotoolsBuildConfigurationFactory : public ProjectExplorer::IBuildConfigu public: explicit AutotoolsBuildConfigurationFactory(QObject *parent = 0); - QList<Core::Id> availableCreationIds(const ProjectExplorer::Target *parent) const; - QString displayNameForId(const Core::Id id) const; + bool canCreate(const ProjectExplorer::Target *parent) const; + QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const; + ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, + const ProjectExplorer::BuildInfo *info) const; - bool canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const; - AutotoolsBuildConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name = QString()); bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const; AutotoolsBuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source); bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const; AutotoolsBuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map); - static AutotoolsBuildConfiguration *createDefaultConfiguration(ProjectExplorer::Target *target); - private: bool canHandle(const ProjectExplorer::Target *t) const; + ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const; }; } // namespace Internal diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.h b/src/plugins/autotoolsprojectmanager/autotoolsproject.h index a39de5522b..f5304358c5 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.h @@ -34,6 +34,8 @@ #include <projectexplorer/project.h> +#include <utils/fileutils.h> + QT_FORWARD_DECLARE_CLASS(QDir) namespace Utils { diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 3af1ccf901..825d3e4d20 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -29,15 +29,20 @@ #include "cmakebuildconfiguration.h" +#include "cmakebuildinfo.h" #include "cmakeopenprojectwizard.h" #include "cmakeproject.h" #include "cmakeprojectconstants.h" +#include <coreplugin/icore.h> +#include <coreplugin/mimedatabase.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/kit.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> +#include <utils/qtcassert.h> + #include <QInputDialog> using namespace CMakeProjectManager; @@ -117,64 +122,45 @@ CMakeBuildConfigurationFactory::~CMakeBuildConfigurationFactory() { } -QList<Core::Id> CMakeBuildConfigurationFactory::availableCreationIds(const ProjectExplorer::Target *parent) const +bool CMakeBuildConfigurationFactory::canCreate(const ProjectExplorer::Target *parent) const { - if (!canHandle(parent)) - return QList<Core::Id>(); - return QList<Core::Id>() << Core::Id(Constants::CMAKE_BC_ID); + return canHandle(parent); } -QString CMakeBuildConfigurationFactory::displayNameForId(const Core::Id id) const +QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableBuilds(const ProjectExplorer::Target *parent) const { - if (id == Constants::CMAKE_BC_ID) - return tr("Build"); - return QString(); -} + QList<ProjectExplorer::BuildInfo *> result; + QTC_ASSERT(canCreate(parent), return result); -bool CMakeBuildConfigurationFactory::canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const -{ - if (!canHandle(parent)) - return false; - if (id == Constants::CMAKE_BC_ID) - return true; - return false; + CMakeBuildInfo *info = createBuildInfo(parent->kit(), parent->project()->projectDirectory()); + result << info; + return result; } -CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name) +ProjectExplorer::BuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent, + const ProjectExplorer::BuildInfo *info) const { - if (!canCreate(parent, id)) - return 0; + QTC_ASSERT(canCreate(parent), return 0); + QTC_ASSERT(info->factory() == this, return 0); + QTC_ASSERT(info->kitId == parent->kit()->id(), return 0); + QTC_ASSERT(!info->displayName.isEmpty(), return 0); + CMakeBuildInfo copy(*static_cast<const CMakeBuildInfo *>(info)); CMakeProject *project = static_cast<CMakeProject *>(parent->project()); - bool ok = true; - QString buildConfigurationName = name; - if (buildConfigurationName.isNull()) - buildConfigurationName = QInputDialog::getText(0, - tr("New Configuration"), - tr("New configuration name:"), - QLineEdit::Normal, - QString(), &ok); - buildConfigurationName = buildConfigurationName.trimmed(); - if (!ok || buildConfigurationName.isEmpty()) - return 0; + if (copy.buildDirectory.isEmpty()) + copy.buildDirectory + = Utils::FileName::fromString(project->shadowBuildDirectory(project->projectFilePath(), + parent->kit(), + copy.displayName)); - CMakeOpenProjectWizard::BuildInfo info; - info.sourceDirectory = project->projectDirectory(); - info.environment = Utils::Environment::systemEnvironment(); - parent->kit()->addToEnvironment(info.environment); - info.buildDirectory = project->shadowBuildDirectory(project->projectFilePath(), - parent->kit(), - buildConfigurationName); - info.kit = parent->kit(); - info.useNinja = false; // This is ignored anyway - - CMakeOpenProjectWizard copw(project->projectManager(), CMakeOpenProjectWizard::ChangeDirectory, info); + CMakeOpenProjectWizard copw(project->projectManager(), CMakeOpenProjectWizard::ChangeDirectory, ©); if (copw.exec() != QDialog::Accepted) return 0; CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(parent); - bc->setDisplayName(buildConfigurationName); + bc->setDisplayName(copy.displayName); + bc->setDefaultDisplayName(copy.displayName); ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN); @@ -199,7 +185,9 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer: bool CMakeBuildConfigurationFactory::canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const { - return canCreate(parent, source->id()); + if (!canHandle(parent)) + return false; + return source->id() == Constants::CMAKE_BC_ID; } CMakeBuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) @@ -212,7 +200,9 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer:: bool CMakeBuildConfigurationFactory::canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const { - return canCreate(parent, ProjectExplorer::idFromMap(map)); + if (!canHandle(parent)) + return false; + return ProjectExplorer::idFromMap(map) == Constants::CMAKE_BC_ID; } CMakeBuildConfiguration *CMakeBuildConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map) @@ -228,11 +218,26 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::restore(ProjectExplorer bool CMakeBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t) const { + QTC_ASSERT(t, return false); if (!t->project()->supportsKit(t->kit())) return false; return qobject_cast<CMakeProject *>(t->project()); } +CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k, + const QString &sourceDir) const +{ + CMakeBuildInfo *info = new CMakeBuildInfo(this); + info->typeName = tr("Build"); + info->kitId = k->id(); + info->environment = Utils::Environment::systemEnvironment(); + k->addToEnvironment(info->environment); + info->useNinja = false; + info->sourceDirectory = sourceDir; + + return info; +} + ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildType() const { QString cmakeBuildType; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index d4d7286988..2b02f3063e 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -38,6 +38,8 @@ class ToolChain; } namespace CMakeProjectManager { +class CMakeBuildInfo; + namespace Internal { class CMakeProject; @@ -83,11 +85,11 @@ public: CMakeBuildConfigurationFactory(QObject *parent = 0); ~CMakeBuildConfigurationFactory(); - QList<Core::Id> availableCreationIds(const ProjectExplorer::Target *parent) const; - QString displayNameForId(const Core::Id id) const; + bool canCreate(const ProjectExplorer::Target *parent) const; + QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const; + ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, + const ProjectExplorer::BuildInfo *info) const; - bool canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const; - CMakeBuildConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name = QString()); bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const; CMakeBuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source); bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const; @@ -95,6 +97,7 @@ public: private: bool canHandle(const ProjectExplorer::Target *t) const; + CMakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const QString &sourceDir) const; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h b/src/plugins/cmakeprojectmanager/cmakebuildinfo.h new file mode 100644 index 0000000000..b352f95de9 --- /dev/null +++ b/src/plugins/cmakeprojectmanager/cmakebuildinfo.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef CMAKEBUILDINFO_H +#define CMAKEBUILDINFO_H + +#include "cmakebuildconfiguration.h" + +#include <projectexplorer/buildinfo.h> +#include <projectexplorer/kit.h> +#include <projectexplorer/target.h> +#include <utils/environment.h> + +namespace CMakeProjectManager { + +class CMakeBuildInfo : public ProjectExplorer::BuildInfo +{ +public: + CMakeBuildInfo(const ProjectExplorer::IBuildConfigurationFactory *f) : + ProjectExplorer::BuildInfo(f) { } + + CMakeBuildInfo(const Internal::CMakeBuildConfiguration *bc) : + ProjectExplorer::BuildInfo(ProjectExplorer::IBuildConfigurationFactory::find(bc->target())) + { + displayName = bc->displayName(); + buildDirectory = bc->buildDirectory(); + kitId = bc->target()->kit()->id(); + environment = bc->environment(); + useNinja = bc->useNinja(); + } + + Utils::Environment environment; + QString sourceDirectory; + bool useNinja; +}; + +} // namespace CMakeProjectManager + +#endif // CMAKEBUILDINFO_H diff --git a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp index 790ba14cb4..477a180224 100644 --- a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp @@ -30,6 +30,7 @@ #include "cmakeopenprojectwizard.h" #include "cmakeprojectmanager.h" #include "cmakebuildconfiguration.h" +#include "cmakebuildinfo.h" #include <coreplugin/icore.h> #include <utils/hostosinfo.h> @@ -240,13 +241,15 @@ CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const } CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, CMakeOpenProjectWizard::Mode mode, - const BuildInfo &info) + const CMakeBuildInfo *info) : m_cmakeManager(cmakeManager), - m_sourceDirectory(info.sourceDirectory), - m_environment(info.environment), - m_useNinja(info.useNinja), - m_kit(info.kit) + m_sourceDirectory(info->sourceDirectory), + m_environment(info->environment), + m_useNinja(info->useNinja), + m_kit(0) { + m_kit = ProjectExplorer::KitManager::find(info->kitId); + CMakeRunPage::Mode rmode; if (mode == CMakeOpenProjectWizard::NeedToCreate) rmode = CMakeRunPage::Recreate; @@ -258,13 +261,13 @@ CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, CMake rmode = CMakeRunPage::ChangeDirectory; if (mode == CMakeOpenProjectWizard::ChangeDirectory) { - m_buildDirectory = info.buildDirectory; + m_buildDirectory = info->buildDirectory.toString(); addPage(new ShadowBuildPage(this, true)); } if (!m_cmakeManager->isCMakeExecutableValid()) addPage(new ChooseCMakePage(this)); - addPage(new CMakeRunPage(this, rmode, info.buildDirectory)); + addPage(new CMakeRunPage(this, rmode, info->buildDirectory.toString())); init(); } diff --git a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h index 5b1a7f6841..793d635ab2 100644 --- a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h +++ b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h @@ -31,6 +31,7 @@ #define CMAKEOPENPROJECTWIZARD_H #include "cmakebuildconfiguration.h" +#include "cmakebuildinfo.h" #include <utils/environment.h> #include <utils/wizard.h> @@ -70,34 +71,13 @@ public: ChangeDirectory }; - class BuildInfo - { - public: - BuildInfo() - {} - - BuildInfo(CMakeBuildConfiguration *bc) - : sourceDirectory(bc->target()->project()->projectDirectory()) - , buildDirectory(bc->buildDirectory().toString()) - , environment(bc->environment()) - , useNinja(bc->useNinja()) - , kit(bc->target()->kit()) - {} - - QString sourceDirectory; - QString buildDirectory; - Utils::Environment environment; - bool useNinja; - ProjectExplorer::Kit *kit; - }; - /// used at importing a project without a .user file CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory, Utils::Environment env); /// used to update if we have already a .user file /// recreates or updates the cbp file /// Also used to change the build directory of one buildconfiguration or create a new buildconfiguration - CMakeOpenProjectWizard(CMakeManager *cmakeManager, Mode mode, const BuildInfo &info); + CMakeOpenProjectWizard(CMakeManager *cmakeManager, Mode mode, const CMakeBuildInfo *info); QString buildDirectory() const; QString sourceDirectory() const; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index ea5cf7b9ff..18fd8422e7 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -141,8 +141,8 @@ void CMakeProject::changeActiveBuildConfiguration(ProjectExplorer::BuildConfigur } if (mode != CMakeOpenProjectWizard::Nothing) { - CMakeOpenProjectWizard copw(m_manager, mode, - CMakeOpenProjectWizard::BuildInfo(cmakebc)); + CMakeBuildInfo info(cmakebc); + CMakeOpenProjectWizard copw(m_manager, mode, &info); if (copw.exec() == QDialog::Accepted) cmakebc->setUseNinja(copw.useNinja()); // NeedToCreate can change the Ninja setting } @@ -585,8 +585,8 @@ bool CMakeProject::fromMap(const QVariantMap &map) mode = CMakeOpenProjectWizard::NeedToUpdate; if (mode != CMakeOpenProjectWizard::Nothing) { - CMakeOpenProjectWizard copw(m_manager, mode, - CMakeOpenProjectWizard::BuildInfo(activeBC)); + CMakeBuildInfo info(activeBC); + CMakeOpenProjectWizard copw(m_manager, mode, &info); if (copw.exec() != QDialog::Accepted) return false; else @@ -867,8 +867,9 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog() { CMakeProject *project = static_cast<CMakeProject *>(m_buildConfiguration->target()->project()); + CMakeBuildInfo info(m_buildConfiguration); CMakeOpenProjectWizard copw(project->projectManager(), CMakeOpenProjectWizard::ChangeDirectory, - CMakeOpenProjectWizard::BuildInfo(m_buildConfiguration)); + &info); if (copw.exec() == QDialog::Accepted) { project->changeBuildDirectory(m_buildConfiguration, copw.buildDirectory()); m_buildConfiguration->setUseNinja(copw.useNinja()); @@ -881,9 +882,9 @@ void CMakeBuildSettingsWidget::runCMake() if (!ProjectExplorer::ProjectExplorerPlugin::instance()->saveModifiedFiles()) return; CMakeProject *project = static_cast<CMakeProject *>(m_buildConfiguration->target()->project()); + CMakeBuildInfo info(m_buildConfiguration); CMakeOpenProjectWizard copw(project->projectManager(), - CMakeOpenProjectWizard::WantToUpdate, - CMakeOpenProjectWizard::BuildInfo(m_buildConfiguration)); + CMakeOpenProjectWizard::WantToUpdate, &info); if (copw.exec() == QDialog::Accepted) project->parseCMakeLists(); } diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index 910d027ab8..b480c9b5db 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -121,8 +121,9 @@ void CMakeManager::runCMake(ProjectExplorer::Project *project) CMakeBuildConfiguration *bc = static_cast<CMakeBuildConfiguration *>(cmakeProject->activeTarget()->activeBuildConfiguration()); - CMakeOpenProjectWizard copw(this, CMakeOpenProjectWizard::WantToUpdate, - CMakeOpenProjectWizard::BuildInfo(bc)); + CMakeBuildInfo info(bc); + + CMakeOpenProjectWizard copw(this, CMakeOpenProjectWizard::WantToUpdate, &info); if (copw.exec() == QDialog::Accepted) cmakeProject->parseCMakeLists(); } diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro index 49e87adffa..e0e8c8ce97 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro @@ -1,6 +1,7 @@ include(../../qtcreatorplugin.pri) -HEADERS = cmakeproject.h \ +HEADERS = cmakebuildinfo.h \ + cmakeproject.h \ cmakeprojectplugin.h \ cmakeprojectmanager.h \ cmakeprojectconstants.h \ diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs index 335ff10862..1734c6cc94 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs @@ -22,6 +22,7 @@ QtcPlugin { "CMakeProjectManager.mimetypes.xml", "cmakebuildconfiguration.cpp", "cmakebuildconfiguration.h", + "cmakebuildinfo.h", "cmakeeditor.cpp", "cmakeeditor.h", "cmakeeditorfactory.cpp", diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 3d451c6692..4b1795344c 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -31,7 +31,11 @@ #include "genericmakestep.h" #include "genericproject.h" +#include "genericprojectconstants.h" +#include <coreplugin/icore.h> +#include <coreplugin/mimedatabase.h> +#include <projectexplorer/buildinfo.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/kitinformation.h> #include <projectexplorer/projectexplorerconstants.h> @@ -83,53 +87,35 @@ GenericBuildConfigurationFactory::~GenericBuildConfigurationFactory() { } -QList<Core::Id> GenericBuildConfigurationFactory::availableCreationIds(const Target *parent) const +bool GenericBuildConfigurationFactory::canCreate(const Target *parent) const { - if (!canHandle(parent)) - return QList<Core::Id>(); - return QList<Core::Id>() << Core::Id(GENERIC_BC_ID); + return canHandle(parent); } -QString GenericBuildConfigurationFactory::displayNameForId(const Core::Id id) const +QList<BuildInfo *> GenericBuildConfigurationFactory::availableBuilds(const Target *parent) const { - if (id == GENERIC_BC_ID) - return tr("Build"); - return QString(); -} + QList<ProjectExplorer::BuildInfo *> result; + QTC_ASSERT(canCreate(parent), return result); -bool GenericBuildConfigurationFactory::canCreate(const Target *parent, const Core::Id id) const -{ - if (!canHandle(parent)) - return false; - if (id == GENERIC_BC_ID) - return true; - return false; + BuildInfo *info = createBuildInfo(parent->kit(), Utils::FileName::fromString(parent->project()->projectDirectory())); + result << info; + return result; } -BuildConfiguration *GenericBuildConfigurationFactory::create(Target *parent, const Core::Id id, const QString &name) +BuildConfiguration *GenericBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const { - if (!canCreate(parent, id)) - return 0; - - //TODO asking for name is duplicated everywhere, but maybe more - // wizards will show up, that incorporate choosing the nam - bool ok = true; - QString buildConfigurationName = name; - if (buildConfigurationName.isNull()) - buildConfigurationName = QInputDialog::getText(0, - tr("New Configuration"), - tr("New configuration name:"), - QLineEdit::Normal, - QString(), &ok); - buildConfigurationName = buildConfigurationName.trimmed(); - if (!ok || buildConfigurationName.isEmpty()) - return 0; + QTC_ASSERT(canCreate(parent), return 0); + QTC_ASSERT(info->factory() == this, return 0); + QTC_ASSERT(info->kitId == parent->kit()->id(), return 0); + QTC_ASSERT(!info->displayName.isEmpty(), return 0); GenericBuildConfiguration *bc = new GenericBuildConfiguration(parent); - bc->setDisplayName(buildConfigurationName); + bc->setDisplayName(info->displayName); + bc->setDefaultDisplayName(info->displayName); + bc->setBuildDirectory(info->buildDirectory); - BuildStepList *buildSteps = bc->stepList(Constants::BUILDSTEPS_BUILD); - BuildStepList *cleanSteps = bc->stepList(Constants::BUILDSTEPS_CLEAN); + BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); + BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN); Q_ASSERT(buildSteps); GenericMakeStep *makeStep = new GenericMakeStep(buildSteps); @@ -147,7 +133,9 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(Target *parent, con bool GenericBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *source) const { - return canCreate(parent, source->id()); + if (!canHandle(parent)) + return false; + return source->id() == GENERIC_BC_ID; } BuildConfiguration *GenericBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source) @@ -159,7 +147,9 @@ BuildConfiguration *GenericBuildConfigurationFactory::clone(Target *parent, Buil bool GenericBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const { - return canCreate(parent, ProjectExplorer::idFromMap(map)); + if (!canHandle(parent)) + return false; + return ProjectExplorer::idFromMap(map) == GENERIC_BC_ID; } BuildConfiguration *GenericBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map) @@ -180,6 +170,16 @@ bool GenericBuildConfigurationFactory::canHandle(const Target *t) const return qobject_cast<GenericProject *>(t->project()); } +BuildInfo *GenericBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k, + const Utils::FileName &buildDir) const +{ + BuildInfo *info = new BuildInfo(this); + info->typeName = tr("Build"); + info->buildDirectory = buildDir; + info->kitId = k->id(); + return info; +} + BuildConfiguration::BuildType GenericBuildConfiguration::buildType() const { return Unknown; diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 38624547ab..449b6d017a 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -33,7 +33,10 @@ #include <projectexplorer/buildconfiguration.h> #include <projectexplorer/namedwidget.h> -namespace Utils { class PathChooser; } +namespace Utils { +class FileName; +class PathChooser; +} // namespace Utils namespace GenericProjectManager { namespace Internal { @@ -69,11 +72,11 @@ public: explicit GenericBuildConfigurationFactory(QObject *parent = 0); ~GenericBuildConfigurationFactory(); - QList<Core::Id> availableCreationIds(const ProjectExplorer::Target *parent) const; - QString displayNameForId(const Core::Id id) const; + bool canCreate(const ProjectExplorer::Target *parent) const; + QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const; + ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, + const ProjectExplorer::BuildInfo *info) const; - bool canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const; - ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name = QString()); bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const; ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source); bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const; @@ -81,6 +84,7 @@ public: private: bool canHandle(const ProjectExplorer::Target *t) const; + ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const; }; class GenericBuildSettingsWidget : public ProjectExplorer::NamedWidget diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 72e52a69aa..84cb07b285 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -347,7 +347,7 @@ IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent) QList<IBuildConfigurationFactory *> factories = ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(); foreach (IBuildConfigurationFactory *factory, factories) { - if (!factory->availableCreationIds(parent).isEmpty()) + if (factory->canCreate(parent)) return factory; } return 0; diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 3f2cf3759d..69842fba64 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -41,6 +41,7 @@ namespace Utils { class AbstractMacroExpander; } namespace ProjectExplorer { class BuildConfiguration; +class BuildInfo; class NamedWidget; class BuildStepList; class Kit; @@ -127,13 +128,13 @@ public: explicit IBuildConfigurationFactory(QObject *parent = 0); virtual ~IBuildConfigurationFactory(); - // used to show the list of possible additons to a target, returns a list of types - virtual QList<Core::Id> availableCreationIds(const Target *parent) const = 0; - // used to translate the types to names to display to the user - virtual QString displayNameForId(const Core::Id id) const = 0; + // Used to see whether any BuildInfo is available on this factory for a given target. + virtual bool canCreate(const Target *parent) const = 0; + // List of build information that can be used to create a new build configuration via + // "Add Build Configuration" button. + virtual QList<BuildInfo *> availableBuilds(const Target *parent) const = 0; + virtual BuildConfiguration *create(Target *parent, const BuildInfo *info) const = 0; - virtual bool canCreate(const Target *parent, const Core::Id id) const = 0; - virtual BuildConfiguration *create(Target *parent, const Core::Id id, const QString &name = QString()) = 0; // used to recreate the runConfigurations when restoring settings virtual bool canRestore(const Target *parent, const QVariantMap &map) const = 0; virtual BuildConfiguration *restore(Target *parent, const QVariantMap &map) = 0; @@ -141,6 +142,7 @@ public: virtual BuildConfiguration *clone(Target *parent, BuildConfiguration *product) = 0; static IBuildConfigurationFactory *find(Target *parent, const QVariantMap &map); + static IBuildConfigurationFactory *find(Kit *k, const QString &projectPath); static IBuildConfigurationFactory *find(Target *parent); static IBuildConfigurationFactory *find(Target *parent, BuildConfiguration *bc); diff --git a/src/plugins/projectexplorer/buildinfo.h b/src/plugins/projectexplorer/buildinfo.h new file mode 100644 index 0000000000..43fe6bc52b --- /dev/null +++ b/src/plugins/projectexplorer/buildinfo.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef BUILDINFO_H +#define BUILDINFO_H + +#include "projectexplorer_export.h" + +#include "task.h" + +#include <coreplugin/id.h> +#include <utils/fileutils.h> + +namespace ProjectExplorer { + +class IBuildConfigurationFactory; + +class PROJECTEXPLORER_EXPORT BuildInfo +{ +public: + BuildInfo(const IBuildConfigurationFactory *f) : supportsShadowBuild(false), m_factory(f) { } + virtual ~BuildInfo() { } + + const IBuildConfigurationFactory *factory() const { return m_factory; } + + QString displayName; + QString typeName; + Utils::FileName buildDirectory; + Core::Id kitId; + bool supportsShadowBuild; + + virtual QList<Task> reportIssues(const QString &projectPath, + const QString &buildDir) const + { + Q_UNUSED(projectPath); + Q_UNUSED(buildDir); + return QList<Task>(); + } + +private: + const IBuildConfigurationFactory *m_factory; + + friend class IBuildConfigurationFactory; +}; + +} // namespace ProjectExplorer + +#endif // BUILDINFO_H diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 67129ce94c..15a661d828 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -28,6 +28,7 @@ ****************************************************************************/ #include "buildsettingspropertiespage.h" +#include "buildinfo.h" #include "buildstepspage.h" #include "project.h" #include "target.h" @@ -35,6 +36,7 @@ #include "buildconfigurationmodel.h" #include <utils/qtcassert.h> +#include <coreplugin/icore.h> #include <projectexplorer/projectexplorer.h> #include <projectexplorer/buildmanager.h> @@ -97,6 +99,7 @@ PropertiesPanel *BuildSettingsPanelFactory::createPanel(Target *target) BuildSettingsWidget::~BuildSettingsWidget() { clear(); + qDeleteAll(m_buildInfoList); } BuildSettingsWidget::BuildSettingsWidget(Target *target) : @@ -208,17 +211,21 @@ QList<NamedWidget *> BuildSettingsWidget::subWidgets() const void BuildSettingsWidget::updateAddButtonMenu() { m_addButtonMenu->clear(); + qDeleteAll(m_buildInfoList); + m_buildInfoList.clear(); + if (m_target) { if (m_target->activeBuildConfiguration()) { m_addButtonMenu->addAction(tr("&Clone Selected"), this, SLOT(cloneConfiguration())); } - IBuildConfigurationFactory * factory = IBuildConfigurationFactory::find(m_target); + IBuildConfigurationFactory *factory = IBuildConfigurationFactory::find(m_target); if (!factory) return; - foreach (Core::Id id, factory->availableCreationIds(m_target)) { - QAction *action = m_addButtonMenu->addAction(factory->displayNameForId(id), this, SLOT(createConfiguration())); - action->setData(QVariant::fromValue(id)); + m_buildInfoList = factory->availableBuilds(m_target); + foreach (BuildInfo *info, m_buildInfoList) { + QAction *action = m_addButtonMenu->addAction(info->typeName, this, SLOT(createConfiguration())); + action->setData(QVariant::fromValue(static_cast<void *>(info))); } } } @@ -269,19 +276,24 @@ void BuildSettingsWidget::updateActiveConfiguration() void BuildSettingsWidget::createConfiguration() { QAction *action = qobject_cast<QAction *>(sender()); - Core::Id id = action->data().value<Core::Id>(); - - IBuildConfigurationFactory *factory = IBuildConfigurationFactory::find(m_target); - if (!factory) - return; + BuildInfo *info = static_cast<BuildInfo *>(action->data().value<void*>()); + + if (info->displayName.isEmpty()) { + bool ok = false; + info->displayName = QInputDialog::getText(Core::ICore::mainWindow(), + tr("New Configuration"), + tr("New configuration name:"), + QLineEdit::Normal, + QString(), &ok).trimmed(); + if (!ok || info->displayName.isEmpty()) + return; + } - BuildConfiguration *bc = factory->create(m_target, id); + BuildConfiguration *bc = info->factory()->create(m_target, info); if (!bc) return; m_target->addBuildConfiguration(bc); - - QTC_CHECK(bc->id() == id); m_target->setActiveBuildConfiguration(bc); } diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 42fd178bc3..d75b701d94 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -44,6 +44,7 @@ QT_END_NAMESPACE namespace ProjectExplorer { class BuildConfiguration; +class BuildInfo; class IBuildStepFactory; class NamedWidget; @@ -104,6 +105,7 @@ private: QList<NamedWidget *> m_subWidgets; QList<QLabel *> m_labels; + QList<BuildInfo *> m_buildInfoList; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 04b4867898..de4aabf4c1 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -29,6 +29,7 @@ #include "project.h" +#include "buildinfo.h" #include "buildconfiguration.h" #include "editorconfiguration.h" #include "projectexplorer.h" @@ -476,6 +477,36 @@ bool Project::needsSpecialDeployment() const return false; } +void Project::setup(QList<const BuildInfo *> infoList) +{ + QList<Target *> toRegister; + foreach (const BuildInfo *info, infoList) { + Kit *k = KitManager::find(info->kitId); + if (!k) + continue; + Target *t = target(k); + if (!t) { + foreach (Target *i, toRegister) { + if (i->kit() == k) { + t = i; + break; + } + } + } + if (!t) { + t = new Target(this, k); + toRegister << t; + } + + BuildConfiguration *bc = info->factory()->create(t, info); + if (!bc) + continue; + t->addBuildConfiguration(bc); + } + foreach (Target *t, toRegister) + addTarget(t); +} + void Project::onBuildDirectoryChanged() { Target *target = qobject_cast<Target *>(sender()); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index baa9e7f344..84be549966 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -44,6 +44,7 @@ class Context; namespace ProjectExplorer { +class BuildInfo; class IProjectManager; class EditorConfiguration; class ProjectNode; @@ -127,6 +128,8 @@ public: virtual bool needsSpecialDeployment() const; + void setup(QList<const BuildInfo *> infoList); + signals: void displayNameChanged(); void fileListChanged(); diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 0c0eae361d..ea124bcf4c 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -6,6 +6,7 @@ HEADERS += projectexplorer.h \ abi.h \ abiwidget.h \ ansifilterparser.h \ + buildinfo.h \ clangparser.h \ environmentaspect.h \ environmentaspectwidget.h \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index 410a0f1085..a1504711d0 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -33,6 +33,7 @@ QtcPlugin { "buildconfiguration.cpp", "buildconfiguration.h", "buildconfigurationmodel.cpp", "buildconfigurationmodel.h", "buildenvironmentwidget.cpp", "buildenvironmentwidget.h", + "buildinfo.h", "buildmanager.cpp", "buildmanager.h", "buildprogress.cpp", "buildprogress.h", "buildsettingspropertiespage.cpp", "buildsettingspropertiespage.h", diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index c6fd834cde..58149141fe 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -29,6 +29,7 @@ #include "target.h" +#include "buildinfo.h" #include "buildtargetinfo.h" #include "deploymentdata.h" #include "kit.h" @@ -527,16 +528,14 @@ void Target::updateDefaultBuildConfigurations() qWarning("No build configuration factory found for target id '%s'.", qPrintable(id().toString())); return; } - QList<Core::Id> bcIds = bcFactory->availableCreationIds(this); - foreach (Core::Id id, bcIds) { - if (!bcFactory->canCreate(this, id)) - continue; - BuildConfiguration *bc = bcFactory->create(this, id, tr("Default build")); + QList<BuildInfo *> infoList = bcFactory->availableBuilds(this); + foreach (BuildInfo *info, infoList) { + BuildConfiguration *bc = bcFactory->create(this, info); if (!bc) continue; - QTC_CHECK(bc->id() == id); addBuildConfiguration(bc); } + qDeleteAll(infoList); } void Target::updateDefaultDeployConfigurations() diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index e08a616bd8..3350bb6a7b 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -30,11 +30,14 @@ #include "qbsbuildconfiguration.h" #include "qbsbuildconfigurationwidget.h" +#include "qbsbuildinfo.h" #include "qbsbuildstep.h" #include "qbscleanstep.h" #include "qbsproject.h" #include "qbsprojectmanagerconstants.h" +#include <coreplugin/icore.h> +#include <coreplugin/mimedatabase.h> #include <utils/qtcassert.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/kit.h> @@ -238,66 +241,57 @@ bool QbsBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t) c return qobject_cast<Internal::QbsProject *>(t->project()); } -QList<Core::Id> QbsBuildConfigurationFactory::availableCreationIds(const ProjectExplorer::Target *parent) const +ProjectExplorer::BuildInfo *QbsBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k, + const Utils::FileName &buildDirectory, + ProjectExplorer::BuildConfiguration::BuildType type) const { - if (!canHandle(parent)) - return QList<Core::Id>(); - return QList<Core::Id>() << Core::Id(QBS_BC_ID); + QbsBuildInfo *info = new QbsBuildInfo(this); + info->typeName = tr("Build"); + info->buildDirectory = buildDirectory; + info->kitId = k->id(); + info->type = type; + return info; } -QString QbsBuildConfigurationFactory::displayNameForId(const Core::Id id) const +bool QbsBuildConfigurationFactory::canCreate(const ProjectExplorer::Target *parent) const { - if (id == QBS_BC_ID) - return tr("Qbs based build"); - return QString(); + return canHandle(parent); } -bool QbsBuildConfigurationFactory::canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const +QList<ProjectExplorer::BuildInfo *> QbsBuildConfigurationFactory::availableBuilds(const ProjectExplorer::Target *parent) const { - if (!canHandle(parent)) - return false; - return id == QBS_BC_ID; + QList<ProjectExplorer::BuildInfo *> result; + QTC_ASSERT(canCreate(parent), return result); + + const Utils::FileName buildDirectory = QbsProject::defaultBuildDirectory(parent->project()->projectFilePath()); + + ProjectExplorer::BuildInfo *info = createBuildInfo(parent->kit(), buildDirectory, + ProjectExplorer::BuildConfiguration::Debug); + result << info; + + return result; } ProjectExplorer::BuildConfiguration *QbsBuildConfigurationFactory::create(ProjectExplorer::Target *parent, - const Core::Id id, - const QString &name) + const ProjectExplorer::BuildInfo *info) const { - if (!canCreate(parent, id)) - return 0; - - Internal::QbsProject *project = static_cast<Internal::QbsProject *>(parent->project()); - - bool ok = true; - QString buildConfigurationName = name; - if (buildConfigurationName.isNull()) - buildConfigurationName = QInputDialog::getText(0, - tr("New Configuration"), - tr("New configuration name:"), - QLineEdit::Normal, - QString(), &ok); - buildConfigurationName = buildConfigurationName.trimmed(); - if (!ok || buildConfigurationName.isEmpty()) - return 0; + QTC_ASSERT(canCreate(parent), return 0); + QTC_ASSERT(info->factory() == this, return 0); + QTC_ASSERT(info->kitId == parent->kit()->id(), return 0); + QTC_ASSERT(!info->displayName.isEmpty(), return 0); - //: Debug build configuration. We recommend not translating it. - QString firstName = tr("%1 Debug").arg(buildConfigurationName).trimmed(); - - //: Release build configuration. We recommend not translating it. - QString secondName = tr("%1 Release").arg(buildConfigurationName).trimmed(); + const QbsBuildInfo *qbsInfo = static_cast<const QbsBuildInfo *>(info); QVariantMap configData; configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY), - QLatin1String(Constants::QBS_VARIANT_DEBUG)); + (qbsInfo->type == ProjectExplorer::BuildConfiguration::Release) + ? QLatin1String(Constants::QBS_VARIANT_RELEASE) + : QLatin1String(Constants::QBS_VARIANT_DEBUG)); ProjectExplorer::BuildConfiguration *bc - = QbsBuildConfiguration::setup(parent, firstName, firstName, - configData, project->defaultBuildDirectory()); - configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY), - QLatin1String(Constants::QBS_VARIANT_RELEASE)); - parent->addBuildConfiguration( - QbsBuildConfiguration::setup(parent, secondName, secondName, - configData, project->defaultBuildDirectory())); + = QbsBuildConfiguration::setup(parent, info->displayName, info->displayName, + configData, info->buildDirectory); + return bc; } diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h index 7959137f8f..9c50c35f41 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h @@ -112,11 +112,11 @@ public: explicit QbsBuildConfigurationFactory(QObject *parent = 0); ~QbsBuildConfigurationFactory(); - QList<Core::Id> availableCreationIds(const ProjectExplorer::Target *parent) const; - QString displayNameForId(const Core::Id id) const; + bool canCreate(const ProjectExplorer::Target *parent) const; + QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const; + ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, + const ProjectExplorer::BuildInfo *info) const; - bool canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const; - ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name = QString()); bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const; ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source); bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const; @@ -124,6 +124,9 @@ public: private: bool canHandle(const ProjectExplorer::Target *t) const; + ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, + const Utils::FileName &buildDirectory, + ProjectExplorer::BuildConfiguration::BuildType type) const; }; } // namespace Internal diff --git a/src/plugins/qbsprojectmanager/qbsbuildinfo.h b/src/plugins/qbsprojectmanager/qbsbuildinfo.h new file mode 100644 index 0000000000..913c24bfb1 --- /dev/null +++ b/src/plugins/qbsprojectmanager/qbsbuildinfo.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef QBSBUILDINFO_H +#define QBSBUILDINFO_H + +#include "qbsbuildconfiguration.h" + +#include <projectexplorer/buildinfo.h> +#include <qtsupport/baseqtversion.h> + +namespace QbsProjectManager { +namespace Internal { + +class QbsBuildInfo : public ProjectExplorer::BuildInfo +{ +public: + QbsBuildInfo(const QbsBuildConfigurationFactory *f) : ProjectExplorer::BuildInfo(f) { } + + ProjectExplorer::BuildConfiguration::BuildType type; +}; + +} // namespace Internal +} // namespace QbsProjectManager + +#endif // QBSBUILDINFO_H diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 035e9e3c6a..6e0342eeb8 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -235,7 +235,12 @@ bool QbsProject::hasParseResult() const FileName QbsProject::defaultBuildDirectory() const { - QFileInfo fi(m_fileName); + return defaultBuildDirectory(m_fileName); +} + +Utils::FileName QbsProject::defaultBuildDirectory(const QString &path) +{ + QFileInfo fi(path); const QString buildDir = QDir(fi.canonicalPath()).absoluteFilePath(QString::fromLatin1("../%1-build").arg(fi.baseName())); return FileName::fromString(buildDir); } diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index dc894c5072..1a8d9232d8 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -93,6 +93,7 @@ public: bool hasParseResult() const; Utils::FileName defaultBuildDirectory() const; + static Utils::FileName defaultBuildDirectory(const QString &path); qbs::Project qbsProject() const; const qbs::ProjectData qbsProjectData() const; diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro index e1d9c9c526..8f8319e037 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro @@ -20,6 +20,7 @@ HEADERS = \ propertyprovider.h \ qbsbuildconfiguration.h \ qbsbuildconfigurationwidget.h \ + qbsbuildinfo.h \ qbsbuildstep.h \ qbscleanstep.h \ qbsdeployconfigurationfactory.h \ diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs index 4292d6cdd6..ded8f4b687 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs @@ -61,6 +61,7 @@ QtcPlugin { "qbsbuildconfiguration.h", "qbsbuildconfigurationwidget.cpp", "qbsbuildconfigurationwidget.h", + "qbsbuildinfo.h", "qbsbuildstep.cpp", "qbsbuildstep.h", "qbsbuildstepconfigwidget.ui", diff --git a/src/plugins/qt4projectmanager/qmakebuildinfo.h b/src/plugins/qt4projectmanager/qmakebuildinfo.h new file mode 100644 index 0000000000..8ceb78f7d4 --- /dev/null +++ b/src/plugins/qt4projectmanager/qmakebuildinfo.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef QMAKEBUILDINFO_H +#define QMAKEBUILDINFO_H + +#include "qt4buildconfiguration.h" + +#include <projectexplorer/buildinfo.h> +#include <qtsupport/baseqtversion.h> + +namespace Qt4ProjectManager { + +class QmakeBuildInfo : public ProjectExplorer::BuildInfo +{ +public: + QmakeBuildInfo(const Qt4BuildConfigurationFactory *f) : ProjectExplorer::BuildInfo(f) { } + + ProjectExplorer::BuildConfiguration::BuildType type; + QString additionalArguments; + QString makefile; +}; + +} // namespace Qt4ProjectManager + +#endif // QMAKEBUILDINFO_H diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index f84d8e5b4d..4e18dbb75b 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -29,17 +29,20 @@ #include "qt4buildconfiguration.h" +#include "buildconfigurationinfo.h" +#include "qmakebuildinfo.h" #include "qt4project.h" #include "qt4projectconfigwidget.h" #include "qt4projectmanagerconstants.h" #include "qt4nodes.h" #include "qmakestep.h" #include "makestep.h" -#include "buildconfigurationinfo.h" #include <utils/qtcprocess.h> #include <utils/qtcassert.h> #include <limits> +#include <coreplugin/icore.h> +#include <coreplugin/mimedatabase.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> @@ -48,6 +51,7 @@ #include <qtsupport/qtkitinformation.h> #include <qtsupport/qtversionmanager.h> #include <qt4projectmanager/qmakekitinformation.h> +#include <utils/qtcassert.h> #include <QDebug> #include <QInputDialog> @@ -532,69 +536,71 @@ bool Qt4BuildConfigurationFactory::canHandle(const Target *t) const return qobject_cast<Qt4Project *>(t->project()); } -QList<Core::Id> Qt4BuildConfigurationFactory::availableCreationIds(const Target *parent) const +QmakeBuildInfo *Qt4BuildConfigurationFactory::createBuildInfo(const Kit *k, + const QString &projectPath, + BuildConfiguration::BuildType type) const { - if (!canHandle(parent)) - return QList<Core::Id>(); - return QList<Core::Id>() << Core::Id(QT4_BC_ID); + QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); + QmakeBuildInfo *info = new QmakeBuildInfo(this); + if (type == BuildConfiguration::Release) + //: The name of the release build configuration created by default for a qmake project. + info->displayName = tr("Release"); + else + //: The name of the debug build configuration created by default for a qmake project. + info->displayName = tr("Debug"); + info->typeName = tr("Build"); + // Leave info->buildDirectory unset; + info->kitId = k->id(); + info->supportsShadowBuild = (version && version->supportsShadowBuilds()); + if (info->supportsShadowBuild) + info->buildDirectory = Utils::FileName::fromString(Qt4Project::shadowBuildDirectory(projectPath, k, info->displayName)); + else + info->buildDirectory = Utils::FileName::fromString(ProjectExplorer::Project::projectDirectory(projectPath)); + info->type = type; + return info; } -QString Qt4BuildConfigurationFactory::displayNameForId(const Core::Id id) const +bool Qt4BuildConfigurationFactory::canCreate(const Target *parent) const { - if (id == QT4_BC_ID) - return tr("Qmake based build"); - return QString(); + return canHandle(parent); } -bool Qt4BuildConfigurationFactory::canCreate(const Target *parent, const Core::Id id) const +QList<BuildInfo *> Qt4BuildConfigurationFactory::availableBuilds(const Target *parent) const { - if (!canHandle(parent)) - return false; - return id == QT4_BC_ID; + QList<ProjectExplorer::BuildInfo *> result; + QTC_ASSERT(canCreate(parent), return result); + + QmakeBuildInfo *info = createBuildInfo(parent->kit(), parent->project()->projectFilePath(), + BuildConfiguration::Debug); + info->displayName.clear(); // ask for a name + result << info; + + return result; } -BuildConfiguration *Qt4BuildConfigurationFactory::create(Target *parent, const Core::Id id, const QString &name) +BuildConfiguration *Qt4BuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const { - if (!canCreate(parent, id)) - return 0; + QTC_ASSERT(canCreate(parent), return 0); + QTC_ASSERT(info->factory() == this, return 0); + QTC_ASSERT(info->kitId == parent->kit()->id(), return 0); + QTC_ASSERT(!info->displayName.isEmpty(), return 0); - BaseQtVersion *version = QtKitInformation::qtVersion(parent->kit()); - Q_ASSERT(version); - - bool ok = true; - QString buildConfigurationName = name; - if (buildConfigurationName.isNull()) - buildConfigurationName = QInputDialog::getText(0, - tr("New Configuration"), - tr("New configuration name:"), - QLineEdit::Normal, - version->displayName(), &ok); - buildConfigurationName = buildConfigurationName.trimmed(); - if (!ok || buildConfigurationName.isEmpty()) - return 0; + const QmakeBuildInfo *qmakeInfo = static_cast<const QmakeBuildInfo *>(info); - //: Debug build configuration. We recommend not translating it. - QString defaultFirstName = tr("%1 Debug").arg(version->displayName()).trimmed(); - QString customFirstName; - if (buildConfigurationName != version->displayName()) - customFirstName = tr("%1 Debug").arg(buildConfigurationName).trimmed(); + BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit()); + QTC_ASSERT(version, return 0); - //: Release build configuration. We recommend not translating it. - QString defaultSecondName = tr("%1 Release").arg(version->displayName()).trimmed(); - QString customSecondName; - if (buildConfigurationName != version->displayName()) - customSecondName = tr("%1 Release").arg(buildConfigurationName).trimmed(); + BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); + if (qmakeInfo->type == BuildConfiguration::Release) + config &= ~QtSupport::BaseQtVersion::DebugBuild; + else + config |= QtSupport::BaseQtVersion::DebugBuild; - BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig() | QtSupport::BaseQtVersion::DebugBuild; BuildConfiguration *bc - = Qt4BuildConfiguration::setup(parent, defaultFirstName, customFirstName, - config, QString(), QString(), false); - - config = config ^ BaseQtVersion::DebugBuild; - parent->addBuildConfiguration( - Qt4BuildConfiguration::setup(parent, defaultSecondName, customSecondName, - config, - QString(), QString(), false)); + = Qt4BuildConfiguration::setup(parent, info->displayName, info->displayName, + config, qmakeInfo->additionalArguments, + info->buildDirectory.toString(), false); + return bc; } @@ -672,6 +678,8 @@ Qt4BuildConfiguration *Qt4BuildConfiguration::setup(Target *t, QString defaultDi QString additionalArguments, QString directory, bool importing) { + Q_UNUSED(importing); + // Add the build configuration. Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(t); bc->setDefaultDisplayName(defaultDisplayName); @@ -695,10 +703,10 @@ Qt4BuildConfiguration *Qt4BuildConfiguration::setup(Target *t, QString defaultDi bool enableQmlDebugger = Qt4BuildConfiguration::removeQMLInspectorFromArguments(&additionalArguments); + if (!additionalArguments.isEmpty()) qmakeStep->setUserArguments(additionalArguments); - if (importing) - qmakeStep->setLinkQmlDebuggingLibrary(enableQmlDebugger); + qmakeStep->setLinkQmlDebuggingLibrary(enableQmlDebugger); bc->setQMakeBuildConfiguration(qmakeBuildConfiguration); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index b6256df57b..d789fe3b52 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -39,6 +39,7 @@ namespace ProjectExplorer { class FileNode; } namespace Qt4ProjectManager { +class QmakeBuildInfo; class QMakeStep; class MakeStep; class Qt4BuildConfigurationFactory; @@ -171,11 +172,11 @@ public: explicit Qt4BuildConfigurationFactory(QObject *parent = 0); ~Qt4BuildConfigurationFactory(); - QList<Core::Id> availableCreationIds(const ProjectExplorer::Target *parent) const; - QString displayNameForId(const Core::Id id) const; + bool canCreate(const ProjectExplorer::Target *parent) const; + QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const; + ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, + const ProjectExplorer::BuildInfo *info) const; - bool canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const; - ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name = QString()); bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const; ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source); bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const; @@ -189,6 +190,8 @@ private slots: private: bool canHandle(const ProjectExplorer::Target *t) const; + QmakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const QString &projectPath, + ProjectExplorer::BuildConfiguration::BuildType type) const; }; } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index ad19843ece..9a0bb33d45 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -5,6 +5,7 @@ DEFINES += \ QT4PROJECTMANAGER_LIBRARY HEADERS += \ + qmakebuildinfo.h \ qmakekitinformation.h \ qmakekitconfigwidget.h \ qmakerunconfigurationfactory.h \ diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.qbs b/src/plugins/qt4projectmanager/qt4projectmanager.qbs index ecbdeb3a54..7ab0110307 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.qbs +++ b/src/plugins/qt4projectmanager/qt4projectmanager.qbs @@ -36,6 +36,7 @@ QtcPlugin { "profilehighlighter.cpp", "profilehighlighter.h", "profilehighlighterfactory.cpp", "profilehighlighterfactory.h", "profilehoverhandler.cpp", "profilehoverhandler.h", + "qmakebuildinfo.h", "qmakeparser.cpp", "qmakeparser.h", "qmakekitconfigwidget.cpp", "qmakekitconfigwidget.h", "qmakekitinformation.cpp", "qmakekitinformation.h", |