summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/buildconfiguration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/buildconfiguration.cpp')
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp74
1 files changed, 47 insertions, 27 deletions
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 43fdefdfb0..608e7b7ad7 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -32,6 +32,7 @@
#include "buildconfiguration.h"
+#include "toolchain.h"
#include "buildmanager.h"
#include "buildsteplist.h"
#include "projectexplorer.h"
@@ -42,25 +43,47 @@
#include <coreplugin/variablemanager.h>
+#include <utils/stringutils.h>
+
#include <QtCore/QProcess>
-using namespace ProjectExplorer;
+static const char BUILD_STEP_LIST_COUNT[] = "ProjectExplorer.BuildConfiguration.BuildStepListCount";
+static const char BUILD_STEP_LIST_PREFIX[] = "ProjectExplorer.BuildConfiguration.BuildStepList.";
+static const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "ProjectExplorer.BuildConfiguration.ClearSystemEnvironment";
+static const char USER_ENVIRONMENT_CHANGES_KEY[] = "ProjectExplorer.BuildConfiguration.UserEnvironmentChanges";
+static const char TOOLCHAIN_KEY[] = "ProjectExplorer.BuildCOnfiguration.ToolChain";
-namespace {
+namespace ProjectExplorer {
+namespace Internal {
-const char * const BUILD_STEP_LIST_COUNT("ProjectExplorer.BuildConfiguration.BuildStepListCount");
-const char * const BUILD_STEP_LIST_PREFIX("ProjectExplorer.BuildConfiguration.BuildStepList.");
-const char * const CLEAR_SYSTEM_ENVIRONMENT_KEY("ProjectExplorer.BuildConfiguration.ClearSystemEnvironment");
-const char * const USER_ENVIRONMENT_CHANGES_KEY("ProjectExplorer.BuildConfiguration.UserEnvironmentChanges");
-const char * const TOOLCHAIN_KEY("ProjectExplorer.BuildCOnfiguration.ToolChain");
+class BuildConfigMacroExpander : public Utils::AbstractQtcMacroExpander {
+public:
+ explicit BuildConfigMacroExpander(const BuildConfiguration *bc) : m_bc(bc) {}
+ virtual bool resolveMacro(const QString &name, QString *ret);
+private:
+ const BuildConfiguration *m_bc;
+};
-} // namespace
+bool BuildConfigMacroExpander::resolveMacro(const QString &name, QString *ret)
+{
+ if (name == QLatin1String("sourceDir")) {
+ *ret = QDir::toNativeSeparators(m_bc->target()->project()->projectDirectory());
+ return true;
+ }
+ if (name == QLatin1String("buildDir")) {
+ *ret = QDir::toNativeSeparators(m_bc->buildDirectory());
+ return true;
+ }
+ *ret = Core::VariableManager::instance()->value(name);
+ return !ret->isEmpty();
+}
+} // namespace Internal
BuildConfiguration::BuildConfiguration(Target *target, const QString &id) :
ProjectConfiguration(target, id),
m_clearSystemEnvironment(false),
- m_macroExpander(this),
- m_toolChain(0)
+ m_toolChain(0),
+ m_macroExpander(0)
{
Q_ASSERT(target);
BuildStepList *bsl = new BuildStepList(this, QLatin1String(Constants::BUILDSTEPS_BUILD));
@@ -84,8 +107,8 @@ BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *sourc
ProjectConfiguration(target, source),
m_clearSystemEnvironment(source->m_clearSystemEnvironment),
m_userEnvironmentChanges(source->m_userEnvironmentChanges),
- m_macroExpander(this),
- m_toolChain(source->m_toolChain)
+ m_toolChain(source->m_toolChain),
+ m_macroExpander(0)
{
Q_ASSERT(target);
// Do not clone stepLists here, do that in the derived constructor instead
@@ -101,7 +124,16 @@ BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *sourc
}
BuildConfiguration::~BuildConfiguration()
-{ }
+{
+ delete m_macroExpander;
+}
+
+Utils::AbstractMacroExpander *BuildConfiguration::macroExpander()
+{
+ if (!m_macroExpander)
+ m_macroExpander = new Internal::BuildConfigMacroExpander(this);
+ return m_macroExpander;
+}
QStringList BuildConfiguration::knownStepLists() const
{
@@ -284,20 +316,6 @@ QString BuildConfiguration::disabledReason() const
return QString();
}
-bool BuildConfigMacroExpander::resolveMacro(const QString &name, QString *ret)
-{
- if (name == QLatin1String("sourceDir")) {
- *ret = QDir::toNativeSeparators(m_bc->target()->project()->projectDirectory());
- return true;
- }
- if (name == QLatin1String("buildDir")) {
- *ret = QDir::toNativeSeparators(m_bc->buildDirectory());
- return true;
- }
- *ret = Core::VariableManager::instance()->value(name);
- return !ret->isEmpty();
-}
-
///
// IBuildConfigurationFactory
///
@@ -308,3 +326,5 @@ IBuildConfigurationFactory::IBuildConfigurationFactory(QObject *parent) :
IBuildConfigurationFactory::~IBuildConfigurationFactory()
{ }
+
+} // namespace ProjectExplorer