forked from qt-creator/qt-creator
Allow for variable replacement in build directory and build arguments
of a generic project. This way one can use variables like
${CURRENT_DOCUMENT:path} or ${CURRENT_DOCUMENT:baseName}.
Amend: Fix coding style according to apoenitz's comment.
Amend2: Some more coding style issues.
Merge-request: 820
Reviewed-by: con <qtc-committer@nokia.com>
This commit is contained in:
@@ -49,6 +49,7 @@
|
|||||||
#include <coreplugin/baseview.h>
|
#include <coreplugin/baseview.h>
|
||||||
#include <coreplugin/imode.h>
|
#include <coreplugin/imode.h>
|
||||||
#include <coreplugin/settingsdatabase.h>
|
#include <coreplugin/settingsdatabase.h>
|
||||||
|
#include <coreplugin/variablemanager.h>
|
||||||
|
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
|
|
||||||
@@ -396,6 +397,11 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
|
|||||||
advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
|
advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
|
||||||
connect(m_d->m_openInExternalEditorAction, SIGNAL(triggered()), this, SLOT(openInExternalEditor()));
|
connect(m_d->m_openInExternalEditorAction, SIGNAL(triggered()), this, SLOT(openInExternalEditor()));
|
||||||
|
|
||||||
|
// Connect to VariableManager for CURRENT_DOCUMENT variable setting
|
||||||
|
VariableManager *vm = VariableManager::instance();
|
||||||
|
connect(this, SIGNAL(currentEditorChanged(Core::IEditor *)),
|
||||||
|
vm, SLOT(updateCurrentDocument(Core::IEditor *)));
|
||||||
|
|
||||||
|
|
||||||
// other setup
|
// other setup
|
||||||
m_d->m_splitter = new SplitterOrView(m_d->m_editorModel);
|
m_d->m_splitter = new SplitterOrView(m_d->m_editorModel);
|
||||||
|
|||||||
@@ -48,6 +48,46 @@ void VariableManager::insert(const QString &variable, const QString &value)
|
|||||||
m_map.insert(variable, value);
|
m_map.insert(variable, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VariableManager::insertFileInfo(const QString &tag, const QFileInfo &file)
|
||||||
|
{
|
||||||
|
insert(tag, file.filePath());
|
||||||
|
insert(tag+":absoluteFilePath", file.absoluteFilePath());
|
||||||
|
insert(tag+":absolutePath", file.absolutePath());
|
||||||
|
insert(tag+":baseName", file.baseName());
|
||||||
|
insert(tag+":canonicalPath", file.canonicalPath());
|
||||||
|
insert(tag+":canonicalFilePath", file.canonicalFilePath());
|
||||||
|
insert(tag+":completeBaseName", file.completeBaseName());
|
||||||
|
insert(tag+":completeSuffix", file.completeSuffix());
|
||||||
|
insert(tag+":fileName", file.fileName());
|
||||||
|
insert(tag+":filePath", file.filePath());
|
||||||
|
insert(tag+":path", file.path());
|
||||||
|
insert(tag+":suffix", file.suffix());
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableManager::removeFileInfo(const QString &tag)
|
||||||
|
{
|
||||||
|
remove(tag);
|
||||||
|
remove(tag+":absoluteFilePath");
|
||||||
|
remove(tag+":absolutePath");
|
||||||
|
remove(tag+":baseName");
|
||||||
|
remove(tag+":canonicalPath");
|
||||||
|
remove(tag+":canonicalFilePath");
|
||||||
|
remove(tag+":completeBaseName");
|
||||||
|
remove(tag+":completeSuffix");
|
||||||
|
remove(tag+":fileName");
|
||||||
|
remove(tag+":filePath");
|
||||||
|
remove(tag+":path");
|
||||||
|
remove(tag+":suffix");
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableManager::updateCurrentDocument(Core::IEditor *editor)
|
||||||
|
{
|
||||||
|
removeFileInfo("CURRENT_DOCUMENT");
|
||||||
|
if (editor==NULL || editor->file()==NULL)
|
||||||
|
return;
|
||||||
|
insertFileInfo("CURRENT_DOCUMENT", editor->file()->fileName());
|
||||||
|
}
|
||||||
|
|
||||||
QString VariableManager::value(const QString &variable)
|
QString VariableManager::value(const QString &variable)
|
||||||
{
|
{
|
||||||
return m_map.value(variable);
|
return m_map.value(variable);
|
||||||
|
|||||||
@@ -31,10 +31,12 @@
|
|||||||
#define VARIABLEMANAGER_H
|
#define VARIABLEMANAGER_H
|
||||||
|
|
||||||
#include "core_global.h"
|
#include "core_global.h"
|
||||||
|
#include <coreplugin/editormanager/ieditor.h>
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QMap>
|
#include <QtCore/QMap>
|
||||||
#include <QtCore/QString>
|
#include <QtCore/QString>
|
||||||
|
#include <QtCore/QFileInfo>
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
@@ -49,11 +51,16 @@ public:
|
|||||||
static VariableManager* instance() { return m_instance; }
|
static VariableManager* instance() { return m_instance; }
|
||||||
|
|
||||||
void insert(const QString &variable, const QString &value);
|
void insert(const QString &variable, const QString &value);
|
||||||
|
void insertFileInfo(const QString &tag, const QFileInfo &file);
|
||||||
|
void removeFileInfo(const QString &tag);
|
||||||
QString value(const QString &variable);
|
QString value(const QString &variable);
|
||||||
QString value(const QString &variable, const QString &defaultValue);
|
QString value(const QString &variable, const QString &defaultValue);
|
||||||
void remove(const QString &variable);
|
void remove(const QString &variable);
|
||||||
QString resolve(const QString &stringWithVariables);
|
QString resolve(const QString &stringWithVariables);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void updateCurrentDocument(Core::IEditor *editor);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMap<QString, QString> m_map;
|
QMap<QString, QString> m_map;
|
||||||
static VariableManager *m_instance;
|
static VariableManager *m_instance;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <projectexplorer/toolchain.h>
|
#include <projectexplorer/toolchain.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <coreplugin/variablemanager.h>
|
||||||
|
|
||||||
#include <QtGui/QFormLayout>
|
#include <QtGui/QFormLayout>
|
||||||
#include <QtGui/QGroupBox>
|
#include <QtGui/QGroupBox>
|
||||||
@@ -61,7 +62,10 @@ bool GenericMakeStep::init(const QString &buildConfiguration)
|
|||||||
qDebug() << "*** build parser:" << buildParser;
|
qDebug() << "*** build parser:" << buildParser;
|
||||||
|
|
||||||
setEnabled(buildConfiguration, true);
|
setEnabled(buildConfiguration, true);
|
||||||
setWorkingDirectory(buildConfiguration, m_pro->buildDirectory(buildConfiguration));
|
Core::VariableManager *vm = Core::VariableManager::instance();
|
||||||
|
const QString rawBuildDir = m_pro->buildDirectory(buildConfiguration);
|
||||||
|
const QString buildDir = vm->resolve(rawBuildDir);
|
||||||
|
setWorkingDirectory(buildConfiguration, buildDir);
|
||||||
|
|
||||||
QString command = value(buildConfiguration, "makeCommand").toString();
|
QString command = value(buildConfiguration, "makeCommand").toString();
|
||||||
if (command.isEmpty()) {
|
if (command.isEmpty()) {
|
||||||
@@ -74,8 +78,14 @@ bool GenericMakeStep::init(const QString &buildConfiguration)
|
|||||||
|
|
||||||
const QStringList targets = value(buildConfiguration, "buildTargets").toStringList();
|
const QStringList targets = value(buildConfiguration, "buildTargets").toStringList();
|
||||||
QStringList arguments = value(buildConfiguration, "makeArguments").toStringList();
|
QStringList arguments = value(buildConfiguration, "makeArguments").toStringList();
|
||||||
arguments.append(targets);
|
QStringList replacedArguments;
|
||||||
setArguments(buildConfiguration, arguments);
|
foreach (const QString &arg, arguments) {
|
||||||
|
replacedArguments.append(vm->resolve(arg));
|
||||||
|
}
|
||||||
|
foreach (const QString &arg, targets) {
|
||||||
|
replacedArguments.append(vm->resolve(arg));
|
||||||
|
}
|
||||||
|
setArguments(buildConfiguration, replacedArguments);
|
||||||
|
|
||||||
setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration));
|
setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration));
|
||||||
return AbstractMakeStep::init(buildConfiguration);
|
return AbstractMakeStep::init(buildConfiguration);
|
||||||
|
|||||||
Reference in New Issue
Block a user