Changing string based api to BuildConfiguration based api.

Builds, but I'm pretty sure it doesn't *work* :)
This commit is contained in:
con
2009-09-24 16:02:02 +02:00
parent 30362e1050
commit acbd4513e3
30 changed files with 737 additions and 440 deletions

View File

@@ -55,10 +55,12 @@
#include <projectexplorer/nodesvisitor.h>
#include <projectexplorer/project.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
#include <utils/qtcassert.h>
#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtGui/QFileDialog>
#include <QtGui/QInputDialog>
using namespace Qt4ProjectManager;
using namespace Qt4ProjectManager::Internal;
@@ -223,6 +225,52 @@ void Qt4ProjectFile::modified(Core::IFile::ReloadBehavior *)
{
}
/*!
\class Qt4BuildConfigurationFactory
*/
Qt4BuildConfigurationFactory::Qt4BuildConfigurationFactory(Qt4Project *project)
: IBuildConfigurationFactory(project),
m_project(project)
{
}
Qt4BuildConfigurationFactory::~Qt4BuildConfigurationFactory()
{
}
QStringList Qt4BuildConfigurationFactory::availableCreationTypes() const
{
return QStringList() << "Create";
}
QString Qt4BuildConfigurationFactory::displayNameForType(const QString &type) const
{
return tr("Create");
}
QList<BuildConfiguration *> Qt4BuildConfigurationFactory::create(const QString &type) const
{
QTC_ASSERT(type == "Create", return QList<BuildConfiguration*>());
bool ok;
QString buildConfigurationName = QInputDialog::getText(0,
tr("New configuration"),
tr("New Configuration Name:"),
QLineEdit::Normal,
QString(),
&ok);
if (!ok || buildConfigurationName.isEmpty())
return QList<BuildConfiguration *>();
BuildConfiguration *bc = new BuildConfiguration(buildConfigurationName);
return QList<BuildConfiguration *>() << bc;
}
QList<BuildConfiguration *> Qt4BuildConfigurationFactory::createDefaultConfigurations() const
{
return QList<BuildConfiguration *>() << new BuildConfiguration;
}
/*!
\class Qt4Project
@@ -233,6 +281,7 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) :
m_manager(manager),
m_rootProjectNode(0),
m_nodesWatcher(new Internal::Qt4NodesWatcher(this)),
m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
m_fileInfo(new Qt4ProjectFile(this, fileName, this)),
m_isApplication(true),
m_projectFiles(new Qt4ProjectFiles),
@@ -261,7 +310,7 @@ void Qt4Project::defaultQtVersionChanged()
void Qt4Project::qtVersionsChanged()
{
QtVersionManager *vm = QtVersionManager::instance();
foreach (QString bc, buildConfigurations()) {
foreach (BuildConfiguration *bc, buildConfigurations()) {
if (!vm->version(qtVersionId(bc))->isValid()) {
setQtVersion(bc, 0);
if (bc == activeBuildConfiguration())
@@ -290,7 +339,7 @@ bool Qt4Project::restoreSettingsImpl(PersistentSettingsReader &settingsReader)
// Ensure that the qt version and tool chain in each build configuration is valid
// or if not, is reset to the default
foreach (const QString &bc, buildConfigurations()) {
foreach (BuildConfiguration *bc, buildConfigurations()) {
qtVersionId(bc);
toolChainType(bc);
}
@@ -357,6 +406,11 @@ void Qt4Project::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &wri
Project::saveSettingsImpl(writer);
}
ProjectExplorer::IBuildConfigurationFactory *Qt4Project::buildConfigurationFactory() const
{
return m_buildConfigurationFactory;
}
namespace {
class FindQt4ProFiles: protected ProjectExplorer::NodesVisitor {
QList<Qt4ProFileNode *> m_proFiles;
@@ -384,10 +438,10 @@ void Qt4Project::scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFile
m_proFilesForCodeModelUpdate.append(pro);
}
ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfiguration) const
ProjectExplorer::ToolChain *Qt4Project::toolChain(BuildConfiguration *configuration) const
{
ProjectExplorer::ToolChain *tempToolChain;
tempToolChain = qtVersion(buildConfiguration)->createToolChain(toolChainType(buildConfiguration));
tempToolChain = qtVersion(configuration)->createToolChain(toolChainType(configuration));
if (!ProjectExplorer::ToolChain::equals(m_toolChain, tempToolChain)) {
if (m_toolChain)
delete m_toolChain;
@@ -399,13 +453,13 @@ ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfigurat
return m_toolChain;
}
QString Qt4Project::makeCommand(const QString &buildConfiguration) const
QString Qt4Project::makeCommand(BuildConfiguration *configuration) const
{
ToolChain *tc = toolChain(buildConfiguration);
ToolChain *tc = toolChain(configuration);
return tc ? tc->makeCommand() : "make";
}
QString Qt4Project::defaultMakeTarget(const QString &buildConfiguration) const
QString Qt4Project::defaultMakeTarget(BuildConfiguration *configuration) const
{
#ifdef QTCREATOR_WITH_S60
ToolChain *tc = toolChain(buildConfiguration);
@@ -425,7 +479,7 @@ QString Qt4Project::defaultMakeTarget(const QString &buildConfiguration) const
return (buildConfig & QtVersion::DebugBuild ? "debug-" : "release-") + QLatin1String("armv6");
}
#else
Q_UNUSED(buildConfiguration);
Q_UNUSED(configuration);
#endif
return QString::null;
}
@@ -731,33 +785,27 @@ void Qt4Project::addDefaultBuild()
} else {
// Migrate settings
QMakeStep *qs = qmakeStep();
foreach (const QString &buildConfiguration, buildConfigurations()) {
QVariant v = qs ? qs->value(buildConfiguration, "buildConfiguration") : QVariant();
foreach (BuildConfiguration *bc, buildConfigurations()) {
QVariant v = qs ? qs->value(bc->name(), "buildConfiguration") : QVariant();
if (v.isValid()) {
qs->setValue(buildConfiguration, "buildConfiguration", QVariant());
setValue(buildConfiguration, "buildConfiguration", v);
} else if (!value(buildConfiguration, "buildConfiguration").isValid()) {
if (QtVersion *version = qtVersion(buildConfiguration))
setValue(buildConfiguration, "buildConfiguration", version->defaultBuildConfig());
qs->setValue(bc->name(), "buildConfiguration", QVariant());
bc->setValue("buildConfiguration", v);
} else if (!bc->value("buildConfiguration").isValid()) {
if (QtVersion *version = qtVersion(bc))
bc->setValue("buildConfiguration", version->defaultBuildConfig());
else
setValue(buildConfiguration, "buildConfiguration", int(QtVersion::BuildAll & QtVersion::DebugBuild));
bc->setValue("buildConfiguration", int(QtVersion::BuildAll & QtVersion::DebugBuild));
}
}
// Restoring configuration
foreach(const QString &bc, buildConfigurations()) {
setValue(bc, "addQDumper", QVariant());
foreach(BuildConfiguration *bc, buildConfigurations()) {
bc->setValue("addQDumper", QVariant());
}
}
}
bool Qt4Project::newBuildConfiguration(const QString &buildConfiguration)
{
Q_UNUSED(buildConfiguration)
return true;
}
void Qt4Project::proFileParseError(const QString &errorMessage)
{
Core::ICore::instance()->messageManager()->printToOutputPane(errorMessage);
@@ -768,92 +816,93 @@ Qt4ProFileNode *Qt4Project::rootProjectNode() const
return m_rootProjectNode;
}
QString Qt4Project::buildDirectory(const QString &buildConfiguration) const
QString Qt4Project::buildDirectory(BuildConfiguration *configuration) const
{
QString workingDirectory;
if (value(buildConfiguration, "useShadowBuild").toBool())
workingDirectory = value(buildConfiguration, "buildDirectory").toString();
if (configuration->value("useShadowBuild").toBool())
workingDirectory = configuration->value("buildDirectory").toString();
if (workingDirectory.isEmpty())
workingDirectory = QFileInfo(file()->fileName()).absolutePath();
return workingDirectory;
}
ProjectExplorer::Environment Qt4Project::baseEnvironment(const QString &buildConfiguration) const
ProjectExplorer::Environment Qt4Project::baseEnvironment(BuildConfiguration *configuration) const
{
Environment env = useSystemEnvironment(buildConfiguration) ? Environment::systemEnvironment() : Environment();
qtVersion(buildConfiguration)->addToEnvironment(env);
ToolChain *tc = toolChain(buildConfiguration);
Environment env = useSystemEnvironment(configuration) ? Environment::systemEnvironment() : Environment();
qtVersion(configuration)->addToEnvironment(env);
ToolChain *tc = toolChain(configuration);
if (tc)
tc->addToEnvironment(env);
return env;
}
ProjectExplorer::Environment Qt4Project::environment(const QString &buildConfiguration) const
ProjectExplorer::Environment Qt4Project::environment(BuildConfiguration *configuration) const
{
Environment env = baseEnvironment(buildConfiguration);
env.modify(userEnvironmentChanges(buildConfiguration));
Environment env = baseEnvironment(configuration);
env.modify(userEnvironmentChanges(configuration));
return env;
}
void Qt4Project::setUseSystemEnvironment(const QString &buildConfiguration, bool b)
void Qt4Project::setUseSystemEnvironment(BuildConfiguration *configuration, bool b)
{
if (useSystemEnvironment(buildConfiguration) == b)
if (useSystemEnvironment(configuration) == b)
return;
setValue(buildConfiguration, "clearSystemEnvironment", !b);
emit environmentChanged(buildConfiguration);
configuration->setValue("clearSystemEnvironment", !b);
emit environmentChanged(configuration->name());
}
bool Qt4Project::useSystemEnvironment(const QString &buildConfiguration) const
bool Qt4Project::useSystemEnvironment(BuildConfiguration *configuration) const
{
bool b = !(value(buildConfiguration, "clearSystemEnvironment").isValid() && value(buildConfiguration, "clearSystemEnvironment").toBool());
bool b = !(configuration->value("clearSystemEnvironment").isValid()
&& configuration->value("clearSystemEnvironment").toBool());
return b;
}
QList<ProjectExplorer::EnvironmentItem> Qt4Project::userEnvironmentChanges(const QString &buildConfig) const
QList<ProjectExplorer::EnvironmentItem> Qt4Project::userEnvironmentChanges(BuildConfiguration *configuration) const
{
return EnvironmentItem::fromStringList(value(buildConfig, "userEnvironmentChanges").toStringList());
return EnvironmentItem::fromStringList(configuration->value("userEnvironmentChanges").toStringList());
}
void Qt4Project::setUserEnvironmentChanges(const QString &buildConfig, const QList<ProjectExplorer::EnvironmentItem> &diff)
void Qt4Project::setUserEnvironmentChanges(BuildConfiguration *configuration, const QList<ProjectExplorer::EnvironmentItem> &diff)
{
QStringList list = EnvironmentItem::toStringList(diff);
if (list == value(buildConfig, "userEnvironmentChanges").toStringList())
if (list == configuration->value("userEnvironmentChanges").toStringList())
return;
setValue(buildConfig, "userEnvironmentChanges", list);
emit environmentChanged(buildConfig);
configuration->setValue("userEnvironmentChanges", list);
emit environmentChanged(configuration->name());
}
QString Qt4Project::qtDir(const QString &buildConfiguration) const
QString Qt4Project::qtDir(BuildConfiguration *configuration) const
{
QtVersion *version = qtVersion(buildConfiguration);
QtVersion *version = qtVersion(configuration);
if (version)
return version->versionInfo().value("QT_INSTALL_DATA");
return QString::null;
}
QtVersion *Qt4Project::qtVersion(const QString &buildConfiguration) const
QtVersion *Qt4Project::qtVersion(BuildConfiguration *configuration) const
{
return QtVersionManager::instance()->version(qtVersionId(buildConfiguration));
return QtVersionManager::instance()->version(qtVersionId(configuration));
}
int Qt4Project::qtVersionId(const QString &buildConfiguration) const
int Qt4Project::qtVersionId(BuildConfiguration *configuration) const
{
QtVersionManager *vm = QtVersionManager::instance();
if (debug)
qDebug()<<"Looking for qtVersion ID of "<<buildConfiguration;
qDebug()<<"Looking for qtVersion ID of "<<configuration->name();
int id = 0;
QVariant vid = value(buildConfiguration, "QtVersionId");
QVariant vid = configuration->value("QtVersionId");
if (vid.isValid()) {
id = vid.toInt();
if (vm->version(id)->isValid()) {
return id;
} else {
const_cast<Qt4Project *>(this)->setValue(buildConfiguration, "QtVersionId", 0);
configuration->setValue("QtVersionId", 0);
return 0;
}
} else {
// Backward compatibilty, we might have just the name:
QString vname = value(buildConfiguration, "QtVersion").toString();
QString vname = configuration->value("QtVersion").toString();
if (debug)
qDebug()<<" Backward compatibility reading QtVersion"<<vname;
if (!vname.isEmpty()) {
@@ -862,7 +911,7 @@ int Qt4Project::qtVersionId(const QString &buildConfiguration) const
if (version->name() == vname) {
if (debug)
qDebug()<<"found name in versions";
const_cast<Qt4Project *>(this)->setValue(buildConfiguration, "QtVersionId", version->uniqueId());
configuration->setValue("QtVersionId", version->uniqueId());
return version->uniqueId();
}
}
@@ -871,19 +920,19 @@ int Qt4Project::qtVersionId(const QString &buildConfiguration) const
if (debug)
qDebug()<<" using qtversion with id ="<<id;
// Nothing found, reset to default
const_cast<Qt4Project *>(this)->setValue(buildConfiguration, "QtVersionId", id);
configuration->setValue("QtVersionId", id);
return id;
}
void Qt4Project::setQtVersion(const QString &buildConfiguration, int id)
void Qt4Project::setQtVersion(BuildConfiguration *configuration, int id)
{
setValue(buildConfiguration, "QtVersionId", id);
configuration->setValue("QtVersionId", id);
updateActiveRunConfiguration();
}
void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type)
void Qt4Project::setToolChainType(BuildConfiguration *configuration, ProjectExplorer::ToolChain::ToolChainType type)
{
setValue(buildConfiguration, "ToolChain", (int)type);
configuration->setValue("ToolChain", (int)type);
updateActiveRunConfiguration();
}
@@ -902,16 +951,16 @@ void Qt4Project::updateActiveRunConfiguration()
emit invalidateCachedTargetInformation();
}
ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(const QString &buildConfiguration) const
ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(BuildConfiguration *configuration) const
{
const ProjectExplorer::ToolChain::ToolChainType originalType =
(ProjectExplorer::ToolChain::ToolChainType)value(buildConfiguration, "ToolChain").toInt();
(ProjectExplorer::ToolChain::ToolChainType)configuration->value("ToolChain").toInt();
ProjectExplorer::ToolChain::ToolChainType type = originalType;
const QtVersion *version = qtVersion(buildConfiguration);
const QtVersion *version = qtVersion(configuration);
if (!version->possibleToolChainTypes().contains(type)) // use default tool chain
type = version->defaultToolchainType();
if (type != originalType)
const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type);
const_cast<Qt4Project *>(this)->setToolChainType(configuration, type);
return type;
}
@@ -1142,22 +1191,22 @@ QString Qt4Project::extractSpecFromArgumentList(const QStringList &list)
}
// returns true if both are equal
bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfiguration, const QString &workingDirectory)
bool Qt4Project::compareBuildConfigurationToImportFrom(BuildConfiguration *configuration, const QString &workingDirectory)
{
QMakeStep *qs = qmakeStep();
if (QDir(workingDirectory).exists(QLatin1String("Makefile")) && qs) {
QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(workingDirectory);
QtVersion *version = qtVersion(buildConfiguration);
QtVersion *version = qtVersion(configuration);
if (version->qmakeCommand() == qmakePath) {
// same qtversion
QPair<QtVersion::QmakeBuildConfig, QStringList> result =
QtVersionManager::scanMakeFile(workingDirectory, version->defaultBuildConfig());
if (QtVersion::QmakeBuildConfig(value(buildConfiguration, "buildConfiguration").toInt()) == result.first) {
if (QtVersion::QmakeBuildConfig(configuration->value("buildConfiguration").toInt()) == result.first) {
// The QMake Build Configuration are the same,
// now compare arguments lists
// we have to compare without the spec/platform cmd argument
// and compare that on its own
QString actualSpec = extractSpecFromArgumentList(qs->value(buildConfiguration, "qmakeArgs").toStringList());
QString actualSpec = extractSpecFromArgumentList(qs->value(configuration->name(), "qmakeArgs").toStringList());
if (actualSpec.isEmpty())
actualSpec = version->mkspec();
@@ -1186,7 +1235,7 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfi
if (QFileInfo(parsedSpec).isRelative())
parsedSpec = QDir::cleanPath(workingDirectory + "/" + parsedSpec);
QStringList actualArgs = removeSpecFromArgumentList(qs->value(buildConfiguration, "qmakeArgs").toStringList());
QStringList actualArgs = removeSpecFromArgumentList(qs->value(configuration->name(), "qmakeArgs").toStringList());
QStringList parsedArgs = removeSpecFromArgumentList(result.second);
#ifdef Q_OS_WIN