aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2012-11-28 11:54:46 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2012-11-29 14:43:08 +0100
commitdb19dd50d435cfba1b25ebcda613df8839b9b7e3 (patch)
tree5395691ffe928f374f7491ba004ef24b8b139249
parent87e31015d671e324e699f8bfc9a9e40f126fe393 (diff)
Reduce compile dependencies.
While it seems elegant at first glance to do typedefs in class scope, it has one serious drawback: Forward declarations become impossible unless they use the non-typedef'ed type name, which defeats the purpose. As a result, dozens of headers currently include language.h and buildgraph.h, even though they technically don't have to. Fix this by introducing special forward-declaring headers and doing the typedefs there, outside the class scope. Now changes to header files included in language.h or buildgraph.h don't ripple through half the project anymore. Along the way, also remove unneeded and potentially harmful INCLUDEPATH statements from various pri files. Change-Id: Ib50db850876955216db7f39b6099c32d1239092b Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/lib/api/internaljobs.cpp16
-rw-r--r--src/lib/api/internaljobs.h16
-rw-r--r--src/lib/api/jobs.cpp6
-rw-r--r--src/lib/api/jobs.h10
-rw-r--r--src/lib/api/project.cpp46
-rw-r--r--src/lib/api/project.h5
-rw-r--r--src/lib/api/runenvironment.cpp4
-rw-r--r--src/lib/api/runenvironment.h5
-rw-r--r--src/lib/buildgraph/artifact.cpp2
-rw-r--r--src/lib/buildgraph/artifact.h9
-rw-r--r--src/lib/buildgraph/artifactcleaner.cpp12
-rw-r--r--src/lib/buildgraph/artifactcleaner.h5
-rw-r--r--src/lib/buildgraph/artifactvisitor.cpp8
-rw-r--r--src/lib/buildgraph/artifactvisitor.h7
-rw-r--r--src/lib/buildgraph/automoc.cpp5
-rw-r--r--src/lib/buildgraph/automoc.h5
-rw-r--r--src/lib/buildgraph/buildgraph.cpp131
-rw-r--r--src/lib/buildgraph/buildgraph.h76
-rw-r--r--src/lib/buildgraph/buildgraph.pri4
-rw-r--r--src/lib/buildgraph/cycledetector.cpp3
-rw-r--r--src/lib/buildgraph/cycledetector.h2
-rw-r--r--src/lib/buildgraph/executor.cpp29
-rw-r--r--src/lib/buildgraph/executor.h10
-rw-r--r--src/lib/buildgraph/executorjob.cpp1
-rw-r--r--src/lib/buildgraph/forward_decls.h54
-rw-r--r--src/lib/buildgraph/inputartifactscanner.cpp2
-rw-r--r--src/lib/buildgraph/inputartifactscanner.h4
-rw-r--r--src/lib/buildgraph/jscommandexecutor.cpp3
-rw-r--r--src/lib/buildgraph/rulegraph.cpp31
-rw-r--r--src/lib/buildgraph/rulegraph.h15
-rw-r--r--src/lib/buildgraph/scanresultcache.cpp2
-rw-r--r--src/lib/buildgraph/transformer.cpp1
-rw-r--r--src/lib/buildgraph/transformer.h9
-rw-r--r--src/lib/jsextensions/jsextensions.pri2
-rw-r--r--src/lib/language/forward_decls.h72
-rw-r--r--src/lib/language/language.cpp24
-rw-r--r--src/lib/language/language.h75
-rw-r--r--src/lib/language/language.pri5
-rw-r--r--src/lib/language/loader.cpp154
-rw-r--r--src/lib/language/loader.h4
-rw-r--r--src/lib/language/scriptengine.cpp2
-rw-r--r--src/lib/language/scriptengine.h7
-rw-r--r--src/lib/lib.pro1
-rw-r--r--src/lib/logging/logging.pri2
-rw-r--r--src/lib/tools/persistence.h10
-rw-r--r--src/lib/tools/tools.pri2
-rw-r--r--tests/auto/buildgraph/tst_buildgraph.cpp16
-rw-r--r--tests/auto/buildgraph/tst_buildgraph.h10
-rw-r--r--tests/auto/language/tst_language.cpp59
-rw-r--r--tests/auto/language/tst_language.h9
50 files changed, 558 insertions, 434 deletions
diff --git a/src/lib/api/internaljobs.cpp b/src/lib/api/internaljobs.cpp
index d74c516ab..6355b6157 100644
--- a/src/lib/api/internaljobs.cpp
+++ b/src/lib/api/internaljobs.cpp
@@ -29,6 +29,7 @@
#include "internaljobs.h"
#include <buildgraph/artifactcleaner.h>
+#include <buildgraph/buildgraph.h>
#include <buildgraph/executor.h>
#include <language/language.h>
#include <language/loader.h>
@@ -110,6 +111,11 @@ void InternalSetupProjectJob::resolve(const QString &projectFilePath, const QStr
QTimer::singleShot(0, this, SLOT(start()));
}
+BuildProjectPtr InternalSetupProjectJob::buildProject() const
+{
+ return m_buildProject;
+}
+
void InternalSetupProjectJob::start()
{
m_running = true;
@@ -145,7 +151,7 @@ void InternalSetupProjectJob::execute()
const BuildProjectLoader::LoadResult loadResult = BuildProjectLoader().load(m_projectFilePath,
buildGraph.data(), m_buildRoot, m_buildConfig, searchPaths);
- ResolvedProject::Ptr rProject;
+ ResolvedProjectPtr rProject;
if (!loadResult.discardLoadedProject)
m_buildProject = loadResult.loadedProject;
if (m_buildProject) {
@@ -169,7 +175,7 @@ void InternalSetupProjectJob::execute()
rProject->platformEnvironment = platformEnvironment;
qbsDebug("for %s:", qPrintable(rProject->id()));
- foreach (const ResolvedProduct::ConstPtr &p, rProject->products) {
+ foreach (const ResolvedProductConstPtr &p, rProject->products) {
qbsDebug(" - [%s] %s as %s"
,qPrintable(p->fileTags.join(", "))
,qPrintable(p->name)
@@ -193,7 +199,7 @@ BuildGraphTouchingJob::BuildGraphTouchingJob(QObject *parent) : InternalJob(pare
{
}
-void BuildGraphTouchingJob::setup(const QList<BuildProduct::Ptr> &products,
+void BuildGraphTouchingJob::setup(const QList<BuildProductPtr> &products,
const BuildOptions &buildOptions)
{
m_products = products;
@@ -216,7 +222,7 @@ InternalBuildJob::InternalBuildJob(QObject *parent) : BuildGraphTouchingJob(pare
{
}
-void InternalBuildJob::build(const QList<BuildProduct::Ptr> &products,
+void InternalBuildJob::build(const QList<BuildProductPtr> &products,
const BuildOptions &buildOptions)
{
setup(products, buildOptions);
@@ -246,7 +252,7 @@ InternalCleanJob::InternalCleanJob(QObject *parent) : BuildGraphTouchingJob(pare
{
}
-void InternalCleanJob::clean(const QList<BuildProduct::Ptr> &products, const BuildOptions &buildOptions,
+void InternalCleanJob::clean(const QList<BuildProductPtr> &products, const BuildOptions &buildOptions,
bool cleanAll)
{
setup(products, buildOptions);
diff --git a/src/lib/api/internaljobs.h b/src/lib/api/internaljobs.h
index ddb3dabe8..d154ad415 100644
--- a/src/lib/api/internaljobs.h
+++ b/src/lib/api/internaljobs.h
@@ -30,9 +30,9 @@
#define QBSJOB_H
#include "projectdata.h"
+#include <buildgraph/forward_decls.h>
#include <tools/buildoptions.h>
#include <tools/error.h>
-#include <buildgraph/buildgraph.h>
#include <QMutex>
#include <QObject>
@@ -80,7 +80,7 @@ public:
void resolve(const QString &projectFilePath, const QString &buildRoot,
const QVariantMap &buildConfig);
- BuildProject::Ptr buildProject() const { return m_buildProject; }
+ BuildProjectPtr buildProject() const;
private slots:
void start();
@@ -97,7 +97,7 @@ private:
QString m_projectFilePath;
QString m_buildRoot;
QVariantMap m_buildConfig;
- BuildProject::Ptr m_buildProject;
+ BuildProjectPtr m_buildProject;
};
@@ -105,17 +105,17 @@ class BuildGraphTouchingJob : public InternalJob
{
Q_OBJECT
public:
- const QList<BuildProduct::Ptr> &products() const { return m_products; }
+ const QList<BuildProductPtr> &products() const { return m_products; }
protected:
BuildGraphTouchingJob(QObject *parent = 0);
- void setup(const QList<BuildProduct::Ptr> &products, const BuildOptions &buildOptions);
+ void setup(const QList<BuildProductPtr> &products, const BuildOptions &buildOptions);
const BuildOptions &buildOptions() const { return m_buildOptions; }
void storeBuildGraph();
private:
- QList<BuildProduct::Ptr> m_products;
+ QList<BuildProductPtr> m_products;
BuildOptions m_buildOptions;
};
@@ -126,7 +126,7 @@ class InternalBuildJob : public BuildGraphTouchingJob
public:
InternalBuildJob(QObject *parent = 0);
- void build(const QList<BuildProduct::Ptr> &products, const BuildOptions &buildOptions);
+ void build(const QList<BuildProductPtr> &products, const BuildOptions &buildOptions);
private slots:
void start();
@@ -143,7 +143,7 @@ class InternalCleanJob : public BuildGraphTouchingJob
public:
InternalCleanJob(QObject *parent = 0);
- void clean(const QList<BuildProduct::Ptr> &products, const BuildOptions &buildOptions,
+ void clean(const QList<BuildProductPtr> &products, const BuildOptions &buildOptions,
bool cleanAll);
private slots:
diff --git a/src/lib/api/jobs.cpp b/src/lib/api/jobs.cpp
index 908eb4696..6ad8db5d9 100644
--- a/src/lib/api/jobs.cpp
+++ b/src/lib/api/jobs.cpp
@@ -30,6 +30,8 @@
#include "internaljobs.h"
#include "project.h"
+#include <buildgraph/buildgraph.h>
+#include <language/language.h>
#include <language/scriptengine.h>
namespace qbs {
@@ -200,7 +202,7 @@ BuildJob::BuildJob(QObject *parent) : AbstractJob(new InternalBuildJob, parent)
{
}
-void BuildJob::build(const QList<BuildProduct::Ptr> &products, const BuildOptions &options)
+void BuildJob::build(const QList<BuildProductPtr> &products, const BuildOptions &options)
{
qobject_cast<InternalBuildJob *>(internalJob())->build(products, options);
}
@@ -215,7 +217,7 @@ CleanJob::CleanJob(QObject *parent) : AbstractJob(new InternalCleanJob, parent)
{
}
-void CleanJob::clean(const QList<BuildProduct::Ptr> &products,
+void CleanJob::clean(const QList<BuildProductPtr> &products,
const BuildOptions &options, bool cleanAll)
{
qobject_cast<InternalCleanJob *>(internalJob())->clean(products, options, cleanAll);
diff --git a/src/lib/api/jobs.h b/src/lib/api/jobs.h
index a64f0a547..bd2296711 100644
--- a/src/lib/api/jobs.h
+++ b/src/lib/api/jobs.h
@@ -29,16 +29,15 @@
#ifndef JOBS_H
#define JOBS_H
+#include <buildgraph/forward_decls.h>
#include <tools/error.h>
#include <QObject>
-#include <QSharedPointer>
#include <QVariantMap>
namespace qbs {
class BuildOptions;
namespace Internal {
-class BuildProduct;
class InternalJob;
class ProjectPrivate;
} // namespace Internal
@@ -101,8 +100,7 @@ class BuildJob : public AbstractJob
private:
BuildJob(QObject *parent);
- void build(const QList<QSharedPointer<Internal::BuildProduct> > &products,
- const BuildOptions &options);
+ void build(const QList<Internal::BuildProductPtr> &products, const BuildOptions &options);
};
@@ -113,8 +111,8 @@ class CleanJob : public AbstractJob
private:
CleanJob(QObject *parent);
- void clean(const QList<QSharedPointer<Internal::BuildProduct> > &products,
- const BuildOptions &options, bool cleanAll);
+ void clean(const QList<Internal::BuildProductPtr> &products, const BuildOptions &options,
+ bool cleanAll);
};
} // namespace qbs
diff --git a/src/lib/api/project.cpp b/src/lib/api/project.cpp
index b090a51f9..74ded4afe 100644
--- a/src/lib/api/project.cpp
+++ b/src/lib/api/project.cpp
@@ -163,20 +163,20 @@ static QVariantMap expandedBuildConfiguration(const QVariantMap &userBuildConfig
class ProjectPrivate : public QSharedData
{
public:
- ProjectPrivate(const BuildProject::Ptr &internalProject)
+ ProjectPrivate(const BuildProjectPtr &internalProject)
: internalProject(internalProject), m_projectDataRetrieved(false)
{
}
ProjectData projectData();
- BuildJob *buildProducts(const QList<BuildProduct::Ptr> &products, const BuildOptions &options,
+ BuildJob *buildProducts(const QList<BuildProductPtr> &products, const BuildOptions &options,
bool needsDepencencyResolving, QObject *jobOwner);
- CleanJob *cleanProducts(const QList<BuildProduct::Ptr> &products, const BuildOptions &options,
+ CleanJob *cleanProducts(const QList<BuildProductPtr> &products, const BuildOptions &options,
Project::CleanType cleanType, QObject *jobOwner);
- QList<BuildProduct::Ptr> internalProducts(const QList<ProductData> &products) const;
- BuildProduct::Ptr internalProduct(const ProductData &product) const;
+ QList<BuildProductPtr> internalProducts(const QList<ProductData> &products) const;
+ BuildProductPtr internalProduct(const ProductData &product) const;
- const BuildProject::Ptr internalProject;
+ const BuildProjectPtr internalProject;
private:
void retrieveProjectData();
@@ -192,14 +192,14 @@ ProjectData ProjectPrivate::projectData()
return m_projectData;
}
-BuildJob *ProjectPrivate::buildProducts(const QList<BuildProduct::Ptr> &products,
+BuildJob *ProjectPrivate::buildProducts(const QList<BuildProductPtr> &products,
const BuildOptions &options, bool needsDepencencyResolving, QObject *jobOwner)
{
- QList<BuildProduct::Ptr> productsToBuild = products;
+ QList<BuildProductPtr> productsToBuild = products;
if (needsDepencencyResolving) {
for (int i = 0; i < productsToBuild.count(); ++i) {
- const BuildProduct::ConstPtr &product = productsToBuild.at(i);
- foreach (const BuildProduct::Ptr &dependency, product->dependencies) {
+ const BuildProductConstPtr &product = productsToBuild.at(i);
+ foreach (const BuildProductPtr &dependency, product->dependencies) {
if (!productsToBuild.contains(dependency))
productsToBuild << dependency;
}
@@ -211,7 +211,7 @@ BuildJob *ProjectPrivate::buildProducts(const QList<BuildProduct::Ptr> &products
return job;
}
-CleanJob *ProjectPrivate::cleanProducts(const QList<BuildProduct::Ptr> &products,
+CleanJob *ProjectPrivate::cleanProducts(const QList<BuildProductPtr> &products,
const BuildOptions &options, Project::CleanType cleanType, QObject *jobOwner)
{
CleanJob * const job = new CleanJob(jobOwner);
@@ -219,29 +219,29 @@ CleanJob *ProjectPrivate::cleanProducts(const QList<BuildProduct::Ptr> &products
return job;
}
-QList<BuildProduct::Ptr> ProjectPrivate::internalProducts(const QList<ProductData> &products) const
+QList<BuildProductPtr> ProjectPrivate::internalProducts(const QList<ProductData> &products) const
{
- QList<Internal::BuildProduct::Ptr> internalProducts;
+ QList<Internal::BuildProductPtr> internalProducts;
foreach (const ProductData &product, products)
internalProducts << internalProduct(product);
return internalProducts;
}
-BuildProduct::Ptr ProjectPrivate::internalProduct(const ProductData &product) const
+BuildProductPtr ProjectPrivate::internalProduct(const ProductData &product) const
{
- foreach (const Internal::BuildProduct::Ptr &buildProduct, internalProject->buildProducts()) {
+ foreach (const Internal::BuildProductPtr &buildProduct, internalProject->buildProducts()) {
if (product.name() == buildProduct->rProduct->name)
return buildProduct;
}
qFatal("No build product '%s'", qPrintable(product.name()));
- return BuildProduct::Ptr();
+ return BuildProductPtr();
}
void ProjectPrivate::retrieveProjectData()
{
m_projectData.m_qbsFilePath = internalProject->resolvedProject()->qbsFile;
- foreach (const BuildProduct::Ptr &buildProduct, internalProject->buildProducts()) {
- const ResolvedProduct::ConstPtr resolvedProduct = buildProduct->rProduct;
+ foreach (const BuildProductPtr &buildProduct, internalProject->buildProducts()) {
+ const ResolvedProductConstPtr resolvedProduct = buildProduct->rProduct;
ProductData product;
product.m_name = resolvedProduct->name;
product.m_qbsFilePath = resolvedProduct->qbsFile;
@@ -252,10 +252,10 @@ void ProjectPrivate::retrieveProjectData()
GroupData group;
group.m_name = resolvedGroup->name;
group.m_qbsLine = resolvedGroup->qbsLine;
- foreach (const SourceArtifact::ConstPtr &sa, resolvedGroup->files)
+ foreach (const SourceArtifactConstPtr &sa, resolvedGroup->files)
group.m_filePaths << sa->absoluteFilePath;
if (resolvedGroup->wildcards) {
- foreach (const SourceArtifact::ConstPtr &sa, resolvedGroup->wildcards->files)
+ foreach (const SourceArtifactConstPtr &sa, resolvedGroup->wildcards->files)
group.m_expandedWildcards << sa->absoluteFilePath;
}
group.m_properties = resolvedGroup->properties->value();
@@ -283,7 +283,7 @@ void ProjectPrivate::retrieveProjectData()
* \brief The \c Project class provides services related to a qbs project.
*/
-Project::Project(const Internal::BuildProject::Ptr &internalProject)
+Project::Project(const Internal::BuildProjectPtr &internalProject)
: d(new Internal::ProjectPrivate(internalProject))
{
}
@@ -341,7 +341,7 @@ ProjectData Project::projectData() const
*/
QString Project::targetExecutable(const ProductData &product) const
{
- const Internal::BuildProduct::ConstPtr buildProduct = d->internalProduct(product);
+ const Internal::BuildProductConstPtr buildProduct = d->internalProduct(product);
if (!buildProduct->rProduct->fileTags.contains(QLatin1String("application")))
return QString();
@@ -355,7 +355,7 @@ QString Project::targetExecutable(const ProductData &product) const
RunEnvironment Project::getRunEnvironment(const ProductData &product,
const QProcessEnvironment &environment) const
{
- const Internal::ResolvedProduct::Ptr resolvedProduct = d->internalProduct(product)->rProduct;
+ const Internal::ResolvedProductPtr resolvedProduct = d->internalProduct(product)->rProduct;
return RunEnvironment(resolvedProduct, environment);
}
diff --git a/src/lib/api/project.h b/src/lib/api/project.h
index 63e957673..6e9735782 100644
--- a/src/lib/api/project.h
+++ b/src/lib/api/project.h
@@ -29,9 +29,10 @@
#ifndef QBS_PROJECT_H
#define QBS_PROJECT_H
+#include <buildgraph/forward_decls.h>
+
#include <QExplicitlySharedDataPointer>
#include <QList>
-#include <QSharedPointer>
#include <QVariantMap>
QT_BEGIN_NAMESPACE
@@ -88,7 +89,7 @@ public:
private:
Project();
- Project(const QSharedPointer<Internal::BuildProject> &internalProject);
+ Project(const Internal::BuildProjectPtr &internalProject);
QExplicitlySharedDataPointer<Internal::ProjectPrivate> d;
};
diff --git a/src/lib/api/runenvironment.cpp b/src/lib/api/runenvironment.cpp
index 238a8b628..1f279f6dc 100644
--- a/src/lib/api/runenvironment.cpp
+++ b/src/lib/api/runenvironment.cpp
@@ -54,11 +54,11 @@ class RunEnvironment::RunEnvironmentPrivate
{
public:
ScriptEngine engine;
- ResolvedProduct::Ptr resolvedProduct;
+ ResolvedProductPtr resolvedProduct;
QProcessEnvironment environment;
};
-RunEnvironment::RunEnvironment(const ResolvedProduct::Ptr &product,
+RunEnvironment::RunEnvironment(const ResolvedProductPtr &product,
const QProcessEnvironment &environment)
: d(new RunEnvironmentPrivate)
{
diff --git a/src/lib/api/runenvironment.h b/src/lib/api/runenvironment.h
index 3e8bb1266..517a727f0 100644
--- a/src/lib/api/runenvironment.h
+++ b/src/lib/api/runenvironment.h
@@ -30,7 +30,8 @@
#ifndef QBS_RUNENVIRONMENT_H
#define QBS_RUNENVIRONMENT_H
-#include <QSharedPointer>
+#include <language/forward_decls.h>
+
#include <QStringList>
QT_BEGIN_NAMESPACE
@@ -54,7 +55,7 @@ public:
int runTarget(const QString &targetBin, const QStringList &arguments);
private:
- RunEnvironment(const QSharedPointer<Internal::ResolvedProduct> &product,
+ RunEnvironment(const Internal::ResolvedProductPtr &product,
const QProcessEnvironment &environment);
class RunEnvironmentPrivate;
diff --git a/src/lib/buildgraph/artifact.cpp b/src/lib/buildgraph/artifact.cpp
index b48cb0b73..6027acc89 100644
--- a/src/lib/buildgraph/artifact.cpp
+++ b/src/lib/buildgraph/artifact.cpp
@@ -31,6 +31,8 @@
#include "transformer.h"
#include "buildgraph.h"
+#include <language/language.h>
+#include <tools/fileinfo.h>
#include <tools/persistence.h>
QT_BEGIN_NAMESPACE
diff --git a/src/lib/buildgraph/artifact.h b/src/lib/buildgraph/artifact.h
index cc55f3778..5ea1ea3e2 100644
--- a/src/lib/buildgraph/artifact.h
+++ b/src/lib/buildgraph/artifact.h
@@ -31,7 +31,10 @@
#define ARTIFACT_H
#include "artifactlist.h"
-#include <language/language.h>
+#include "forward_decls.h"
+#include <language/forward_decls.h>
+#include <tools/filetime.h>
+#include <tools/persistentobject.h>
#include <QSet>
#include <QString>
@@ -63,8 +66,8 @@ public:
QSet<QString> fileTags;
BuildProject *project;
BuildProduct *product; // Note: file dependency artifacts don't belong to a product.
- QSharedPointer<Transformer> transformer;
- PropertyMap::Ptr properties;
+ TransformerPtr transformer;
+ PropertyMapPtr properties;
enum ArtifactType
{
diff --git a/src/lib/buildgraph/artifactcleaner.cpp b/src/lib/buildgraph/artifactcleaner.cpp
index 64c19d828..5a049e4ca 100644
--- a/src/lib/buildgraph/artifactcleaner.cpp
+++ b/src/lib/buildgraph/artifactcleaner.cpp
@@ -30,11 +30,13 @@
#include "artifact.h"
#include "artifactvisitor.h"
-#include "buildoptions.h"
+#include "buildgraph.h"
#include "transformer.h"
+#include <language/language.h>
#include <logging/logger.h>
#include <logging/translator.h>
+#include <tools/buildoptions.h>
#include <tools/error.h>
#include <tools/fileinfo.h>
@@ -93,7 +95,7 @@ public:
{
}
- void visitProduct(const BuildProduct::ConstPtr &product)
+ void visitProduct(const BuildProductConstPtr &product)
{
m_product = product;
ArtifactVisitor::visitProduct(product);
@@ -124,18 +126,18 @@ private:
const bool m_dryRun;
const bool m_removeAll;
bool m_hasError;
- BuildProduct::ConstPtr m_product;
+ BuildProductConstPtr m_product;
QSet<QString> m_directories;
};
-void ArtifactCleaner::cleanup(const QList<BuildProduct::Ptr> &products, bool removeAll,
+void ArtifactCleaner::cleanup(const QList<BuildProductPtr> &products, bool removeAll,
const BuildOptions &buildOptions)
{
m_hasError = false;
TimedActivityLogger logger(QLatin1String("Cleaning up"));
QSet<QString> directories;
- foreach (const BuildProduct::ConstPtr &product, products) {
+ foreach (const BuildProductConstPtr &product, products) {
CleanupVisitor visitor(!buildOptions.keepGoing, buildOptions.dryRun, removeAll);
visitor.visitProduct(product);
directories.unite(visitor.directories());
diff --git a/src/lib/buildgraph/artifactcleaner.h b/src/lib/buildgraph/artifactcleaner.h
index 9ebfeda19..8b1d87268 100644
--- a/src/lib/buildgraph/artifactcleaner.h
+++ b/src/lib/buildgraph/artifactcleaner.h
@@ -31,18 +31,17 @@
#include <QList>
-#include "buildgraph.h"
+#include "forward_decls.h"
namespace qbs {
class BuildOptions;
namespace Internal {
-class Artifact;
class ArtifactCleaner
{
public:
- void cleanup(const QList<BuildProduct::Ptr> &products, bool removeAll,
+ void cleanup(const QList<BuildProductPtr> &products, bool removeAll,
const BuildOptions &buildOptions);
private:
diff --git a/src/lib/buildgraph/artifactvisitor.cpp b/src/lib/buildgraph/artifactvisitor.cpp
index c593fe584..c1b8651ac 100644
--- a/src/lib/buildgraph/artifactvisitor.cpp
+++ b/src/lib/buildgraph/artifactvisitor.cpp
@@ -29,6 +29,8 @@
#include "artifactvisitor.h"
#include "artifact.h"
+#include "buildgraph.h"
+#include <language/language.h>
namespace qbs {
namespace Internal {
@@ -50,15 +52,15 @@ void ArtifactVisitor::visitArtifact(Artifact *artifact)
visitArtifact(child);
}
-void ArtifactVisitor::visitProduct(const BuildProduct::ConstPtr &product)
+void ArtifactVisitor::visitProduct(const BuildProductConstPtr &product)
{
foreach (Artifact * const artifact, product->targetArtifacts)
visitArtifact(artifact);
}
-void ArtifactVisitor::visitProject(const BuildProject::ConstPtr &project)
+void ArtifactVisitor::visitProject(const BuildProjectConstPtr &project)
{
- foreach (const BuildProduct::ConstPtr &product, project->buildProducts())
+ foreach (const BuildProductConstPtr &product, project->buildProducts())
visitProduct(product);
}
diff --git a/src/lib/buildgraph/artifactvisitor.h b/src/lib/buildgraph/artifactvisitor.h
index 7eb77785e..61dc21d33 100644
--- a/src/lib/buildgraph/artifactvisitor.h
+++ b/src/lib/buildgraph/artifactvisitor.h
@@ -29,14 +29,13 @@
#ifndef ARTIFACTVISITOR_H
#define ARTIFACTVISITOR_H
-#include "buildgraph.h"
+#include "forward_decls.h"
#include <QList>
#include <QSet>
namespace qbs {
namespace Internal {
-class Artifact;
class ArtifactVisitor
{
@@ -44,8 +43,8 @@ public:
ArtifactVisitor(int artifactType);
virtual void visitArtifact(Artifact *artifact);
- virtual void visitProduct(const BuildProduct::ConstPtr &product);
- virtual void visitProject(const BuildProject::ConstPtr &project);
+ virtual void visitProduct(const BuildProductConstPtr &product);
+ virtual void visitProject(const BuildProjectConstPtr &project);
private:
virtual void doVisit(Artifact *artifact) = 0;
diff --git a/src/lib/buildgraph/automoc.cpp b/src/lib/buildgraph/automoc.cpp
index 9d04697a7..9b52d4bb8 100644
--- a/src/lib/buildgraph/automoc.cpp
+++ b/src/lib/buildgraph/automoc.cpp
@@ -28,11 +28,14 @@
****************************************************************************/
#include "automoc.h"
+#include "buildgraph.h"
#include "scanresultcache.h"
#include <buildgraph/artifact.h>
#include <buildgraph/transformer.h>
+#include <language/language.h>
#include <logging/logger.h>
#include <tools/error.h>
+#include <tools/fileinfo.h>
#include <tools/scannerpluginmanager.h>
namespace qbs {
@@ -48,7 +51,7 @@ void AutoMoc::setScanResultCache(ScanResultCache *scanResultCache)
m_scanResultCache = scanResultCache;
}
-void AutoMoc::apply(BuildProduct::Ptr product)
+void AutoMoc::apply(BuildProductPtr product)
{
if (scanners().isEmpty())
throw Error("C++ scanner cannot be loaded.");
diff --git a/src/lib/buildgraph/automoc.h b/src/lib/buildgraph/automoc.h
index 8c5772211..effbaf709 100644
--- a/src/lib/buildgraph/automoc.h
+++ b/src/lib/buildgraph/automoc.h
@@ -30,13 +30,12 @@
#ifndef AUTOMOC_H
#define AUTOMOC_H
-#include "buildgraph.h"
+#include "forward_decls.h"
struct ScannerPlugin;
namespace qbs {
namespace Internal {
-
class ScanResultCache;
/**
@@ -53,7 +52,7 @@ public:
AutoMoc();
void setScanResultCache(ScanResultCache *scanResultCache);
- void apply(BuildProduct::Ptr product);
+ void apply(BuildProductPtr product);
private:
enum FileType
diff --git a/src/lib/buildgraph/buildgraph.cpp b/src/lib/buildgraph/buildgraph.cpp
index 42ec5f067..2d1702e45 100644
--- a/src/lib/buildgraph/buildgraph.cpp
+++ b/src/lib/buildgraph/buildgraph.cpp
@@ -35,6 +35,7 @@
#include "rulegraph.h"
#include "transformer.h"
+#include <language/language.h>
#include <language/loader.h>
#include <language/scriptengine.h>
#include <logging/logger.h>
@@ -97,7 +98,7 @@ void BuildProduct::dump() const
internalDump(this, artifact, QByteArray());
}
-const QList<Rule::ConstPtr> &BuildProduct::topSortedRules() const
+const QList<RuleConstPtr> &BuildProduct::topSortedRules() const
{
if (m_topSortedRules.isEmpty()) {
QStringList fileTags;
@@ -109,7 +110,7 @@ const QList<Rule::ConstPtr> &BuildProduct::topSortedRules() const
// ruleGraph.dump();
m_topSortedRules = ruleGraph.topSorted();
// int i=0;
-// foreach (Rule::Ptr r, m_topSortedRules)
+// foreach (RulePtr r, m_topSortedRules)
// qDebug() << ++i << r->toString() << (void*)r.data();
}
return m_topSortedRules;
@@ -151,7 +152,7 @@ void BuildGraph::setEngine(ScriptEngine *engine)
JavaScriptCommand::setupForJavaScript(m_prepareScriptScope);
}
-void BuildGraph::insert(BuildProduct::Ptr product, Artifact *n)
+void BuildGraph::insert(BuildProductPtr product, Artifact *n)
{
insert(product.data(), n);
}
@@ -162,12 +163,12 @@ void BuildGraph::insert(BuildProduct *product, Artifact *n)
Q_ASSERT(!n->filePath().isEmpty());
Q_ASSERT(!product->artifacts.contains(n));
#ifdef QT_DEBUG
- foreach (const BuildProduct::Ptr &otherProduct, product->project->buildProducts()) {
+ foreach (const BuildProductPtr &otherProduct, product->project->buildProducts()) {
if (otherProduct->lookupArtifact(n->filePath())) {
if (n->artifactType == Artifact::Generated) {
QString pl;
pl.append(QString(" - %1 \n").arg(product->rProduct->name));
- foreach (const BuildProduct::Ptr &p, product->project->buildProducts()) {
+ foreach (const BuildProductPtr &p, product->project->buildProducts()) {
if (p->lookupArtifact(n->filePath())) {
pl.append(QString(" - %1 \n").arg(p->rProduct->name));
}
@@ -191,8 +192,8 @@ void BuildGraph::insert(BuildProduct *product, Artifact *n)
}
void BuildGraph::setupScriptEngineForProduct(ScriptEngine *engine,
- const ResolvedProduct::ConstPtr &product,
- Rule::ConstPtr rule,
+ const ResolvedProductConstPtr &product,
+ RuleConstPtr rule,
QScriptValue targetObject)
{
const ResolvedProject *lastSetupProject = reinterpret_cast<ResolvedProject *>(engine->property("lastSetupProject").toULongLong());
@@ -281,7 +282,7 @@ static AbstractCommand *createCommandFromScriptValue(const QScriptValue &scriptV
return cmdBase;
}
-void BuildGraph::createTransformerCommands(const PrepareScript::ConstPtr &script, Transformer *transformer)
+void BuildGraph::createTransformerCommands(const PrepareScriptConstPtr &script, Transformer *transformer)
{
// QScriptProgram &scriptProgram = m_scriptProgramCache[script->script];
// if (scriptProgram.isNull())
@@ -485,9 +486,9 @@ void BuildGraph::updateNodeThatMustGetNewTransformer(Artifact *artifact)
removeGeneratedArtifactFromDisk(artifact);
- const Rule::ConstPtr rule = artifact->transformer->rule;
+ const RuleConstPtr rule = artifact->transformer->rule;
artifact->product->project->markDirty();
- artifact->transformer = QSharedPointer<Transformer>();
+ artifact->transformer = TransformerPtr();
ArtifactsPerFileTagMap artifactsPerFileTag;
foreach (Artifact *input, artifact->children)
@@ -497,8 +498,8 @@ void BuildGraph::updateNodeThatMustGetNewTransformer(Artifact *artifact)
rulesApplier.applyRule(rule);
}
-Artifact *BuildGraph::createArtifact(const BuildProduct::Ptr &product,
- const SourceArtifact::ConstPtr &sourceArtifact)
+Artifact *BuildGraph::createArtifact(const BuildProductPtr &product,
+ const SourceArtifactConstPtr &sourceArtifact)
{
Artifact *artifact = new Artifact(product->project);
artifact->artifactType = Artifact::SourceFile;
@@ -673,13 +674,13 @@ void BuildProject::load(PersistentPool &pool)
{
TimedActivityLogger logger(QLatin1String("Loading project from disk."));
m_resolvedProject = pool.idLoadS<ResolvedProject>();
- foreach (const ResolvedProduct::Ptr &product, m_resolvedProject->products)
+ foreach (const ResolvedProductPtr &product, m_resolvedProject->products)
product->project = m_resolvedProject;
int count;
pool.stream() >> count;
for (; --count >= 0;) {
- BuildProduct::Ptr product = pool.idLoadS<BuildProduct>();
+ BuildProductPtr product = pool.idLoadS<BuildProduct>();
foreach (Artifact *artifact, product->artifacts) {
artifact->project = this;
insertIntoArtifactLookupTable(artifact);
@@ -732,12 +733,12 @@ BuildGraph * BuildProject::buildGraph() const
return m_buildGraph;
}
-ResolvedProject::Ptr BuildProject::resolvedProject() const
+ResolvedProjectPtr BuildProject::resolvedProject() const
{
return m_resolvedProject;
}
-QSet<BuildProduct::Ptr> BuildProject::buildProducts() const
+QSet<BuildProductPtr> BuildProject::buildProducts() const
{
return m_buildProducts;
}
@@ -782,14 +783,14 @@ void BuildProject::insertFileDependency(Artifact *artifact)
/**
* Copies dependencies between artifacts from the other project to this project.
*/
-void BuildProject::rescueDependencies(const BuildProject::Ptr &other)
+void BuildProject::rescueDependencies(const BuildProjectPtr &other)
{
- QHash<QString, BuildProduct::Ptr> otherProductsByName;
- foreach (const BuildProduct::Ptr &product, other->m_buildProducts)
+ QHash<QString, BuildProductPtr> otherProductsByName;
+ foreach (const BuildProductPtr &product, other->m_buildProducts)
otherProductsByName.insert(product->rProduct->name, product);
- foreach (const BuildProduct::Ptr &product, m_buildProducts) {
- BuildProduct::Ptr otherProduct = otherProductsByName.value(product->rProduct->name);
+ foreach (const BuildProductPtr &product, m_buildProducts) {
+ BuildProductPtr otherProduct = otherProductsByName.value(product->rProduct->name);
if (!otherProduct)
continue;
@@ -824,12 +825,12 @@ void BuildProject::markDirty()
m_dirty = true;
}
-void BuildProject::addBuildProduct(const BuildProduct::Ptr &product)
+void BuildProject::addBuildProduct(const BuildProductPtr &product)
{
m_buildProducts.insert(product);
}
-void BuildProject::setResolvedProject(const ResolvedProject::Ptr &resolvedProject)
+void BuildProject::setResolvedProject(const ResolvedProjectPtr &resolvedProject)
{
m_resolvedProject = resolvedProject;
}
@@ -866,11 +867,11 @@ RulesApplicator::RulesApplicator(BuildProduct *product, ArtifactsPerFileTagMap &
void RulesApplicator::applyAllRules()
{
- foreach (const Rule::ConstPtr &rule, m_buildProduct->topSortedRules())
+ foreach (const RuleConstPtr &rule, m_buildProduct->topSortedRules())
applyRule(rule);
}
-void RulesApplicator::applyRule(const Rule::ConstPtr &rule)
+void RulesApplicator::applyRule(const RuleConstPtr &rule)
{
m_rule = rule;
BuildGraph::setupScriptEngineForProduct(engine(), m_buildProduct->rProduct, m_rule, scope());
@@ -907,7 +908,7 @@ void RulesApplicator::doApply(const ArtifactList &inputArtifacts)
ArtifactList usingArtifacts;
if (!m_rule->usings.isEmpty()) {
const QSet<QString> usingsFileTags = m_rule->usings.toSet();
- foreach (const BuildProduct::Ptr &dep, m_buildProduct->dependencies) {
+ foreach (const BuildProductPtr &dep, m_buildProduct->dependencies) {
ArtifactList artifactsToCheck;
foreach (Artifact *targetArtifact, dep->targetArtifacts)
artifactsToCheck.unite(targetArtifact->transformer->outputs);
@@ -922,7 +923,7 @@ void RulesApplicator::doApply(const ArtifactList &inputArtifacts)
m_transformer.clear();
// create the output artifacts from the set of input artifacts
- foreach (const RuleArtifact::ConstPtr &ruleArtifact, m_rule->artifacts) {
+ foreach (const RuleArtifactConstPtr &ruleArtifact, m_rule->artifacts) {
Artifact * const outputArtifact = createOutputArtifact(ruleArtifact, inputArtifacts);
outputArtifacts << outputArtifact;
ruleArtifactArtifactMap << qMakePair(ruleArtifact.data(), outputArtifact);
@@ -1019,7 +1020,7 @@ void RulesApplicator::setupScriptEngineForArtifact(Artifact *artifact)
"BG", "The input object is not in current scope.");
}
-Artifact *RulesApplicator::createOutputArtifact(const RuleArtifact::ConstPtr &ruleArtifact,
+Artifact *RulesApplicator::createOutputArtifact(const RuleArtifactConstPtr &ruleArtifact,
const ArtifactList &inputArtifacts)
{
QScriptValue scriptValue = engine()->evaluate(ruleArtifact->fileName);
@@ -1107,16 +1108,16 @@ QScriptValue RulesApplicator::scope() const
}
-BuildProject::Ptr BuildProjectResolver::resolveProject(const ResolvedProject::Ptr &resolvedProject,
+BuildProjectPtr BuildProjectResolver::resolveProject(const ResolvedProjectPtr &resolvedProject,
BuildGraph *buildgraph, ProgressObserver *observer)
{
m_productCache.clear();
m_observer = observer;
- m_project = BuildProject::Ptr(new BuildProject(buildgraph));
+ m_project = BuildProjectPtr(new BuildProject(buildgraph));
m_project->setResolvedProject(resolvedProject);
if (m_observer)
m_observer->initialize(Tr::tr("Resolving project"), resolvedProject->products.count());
- foreach (ResolvedProduct::Ptr rProduct, resolvedProject->products) {
+ foreach (ResolvedProductPtr rProduct, resolvedProject->products) {
resolveProduct(rProduct);
if (m_observer)
m_observer->incrementProgressValue();
@@ -1125,9 +1126,9 @@ BuildProject::Ptr BuildProjectResolver::resolveProject(const ResolvedProject::Pt
return m_project;
}
-BuildProduct::Ptr BuildProjectResolver::resolveProduct(const ResolvedProduct::Ptr &rProduct)
+BuildProductPtr BuildProjectResolver::resolveProduct(const ResolvedProductPtr &rProduct)
{
- BuildProduct::Ptr product = m_productCache.value(rProduct);
+ BuildProductPtr product = m_productCache.value(rProduct);
if (product)
return product;
@@ -1140,10 +1141,10 @@ BuildProduct::Ptr BuildProjectResolver::resolveProduct(const ResolvedProduct::Pt
product->rProduct = rProduct;
ArtifactsPerFileTagMap artifactsPerFileTag;
- foreach (ResolvedProduct::Ptr dependency, rProduct->dependencies) {
+ foreach (ResolvedProductPtr dependency, rProduct->dependencies) {
if (dependency == rProduct)
throw Error(Tr::tr("circular using"));
- BuildProduct::Ptr referencedProduct = resolveProduct(dependency);
+ BuildProductPtr referencedProduct = resolveProduct(dependency);
product->dependencies.append(referencedProduct);
}
@@ -1160,7 +1161,7 @@ BuildProduct::Ptr BuildProjectResolver::resolveProduct(const ResolvedProduct::Pt
artifactsPerFileTag["qbs"].insert(qbsFileArtifact);
// read sources
- foreach (const SourceArtifact::ConstPtr &sourceArtifact, rProduct->allFiles()) {
+ foreach (const SourceArtifactConstPtr &sourceArtifact, rProduct->allFiles()) {
QString filePath = sourceArtifact->absoluteFilePath;
if (product->lookupArtifact(filePath))
continue; // ignore duplicate artifacts
@@ -1179,16 +1180,16 @@ BuildProduct::Ptr BuildProjectResolver::resolveProduct(const ResolvedProduct::Pt
throw Error(QString("Can't find artifact '%0' in the list of source files.").arg(inputFileName));
inputArtifacts += artifact;
}
- Transformer::Ptr transformer = Transformer::create();
+ TransformerPtr transformer = Transformer::create();
transformer->inputs = inputArtifacts;
- const Rule::Ptr rule = Rule::create();
+ const RulePtr rule = Rule::create();
rule->inputs = rtrafo->inputs;
rule->jsImports = rtrafo->jsImports;
- ResolvedModule::Ptr module = ResolvedModule::create();
+ ResolvedModulePtr module = ResolvedModule::create();
module->name = rtrafo->module->name;
rule->module = module;
rule->script = rtrafo->transform;
- foreach (const SourceArtifact::ConstPtr &sourceArtifact, rtrafo->outputs) {
+ foreach (const SourceArtifactConstPtr &sourceArtifact, rtrafo->outputs) {
Artifact *outputArtifact = buildGraph()->createArtifact(product, sourceArtifact);
outputArtifact->artifactType = Artifact::Generated;
outputArtifact->transformer = transformer;
@@ -1199,7 +1200,7 @@ BuildProduct::Ptr BuildProjectResolver::resolveProduct(const ResolvedProduct::Pt
foreach (const QString &fileTag, outputArtifact->fileTags)
artifactsPerFileTag[fileTag].insert(outputArtifact);
- RuleArtifact::Ptr ruleArtifact = RuleArtifact::create();
+ RuleArtifactPtr ruleArtifact = RuleArtifact::create();
ruleArtifact->fileName = outputArtifact->filePath();
ruleArtifact->fileTags = outputArtifact->fileTags.toList();
rule->artifacts += ruleArtifact;
@@ -1257,10 +1258,10 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
return m_result;
}
- const BuildProject::Ptr project = BuildProject::Ptr(new BuildProject(bg));
+ const BuildProjectPtr project = BuildProjectPtr(new BuildProject(bg));
TimedActivityLogger loadLogger(QLatin1String("Loading build graph"), QLatin1String("[BG] "));
project->load(pool);
- foreach (const BuildProduct::Ptr &bp, project->buildProducts())
+ foreach (const BuildProductPtr &bp, project->buildProducts())
bp->project = project;
project->resolvedProject()->qbsFile = projectFilePath;
project->resolvedProject()->setBuildConfiguration(pool.headData().projectConfig);
@@ -1272,9 +1273,9 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
const bool projectFileChanged = bgfi.lastModified() < FileInfo(projectFilePath).lastModified();
bool referencedProductRemoved = false;
- QList<BuildProduct::Ptr> changedProducts;
- foreach (BuildProduct::Ptr product, project->buildProducts()) {
- const ResolvedProduct::ConstPtr &resolvedProduct = product->rProduct;
+ QList<BuildProductPtr> changedProducts;
+ foreach (BuildProductPtr product, project->buildProducts()) {
+ const ResolvedProductConstPtr &resolvedProduct = product->rProduct;
const FileInfo pfi(resolvedProduct->qbsFile);
if (!pfi.exists()) {
referencedProductRemoved = true;
@@ -1287,7 +1288,7 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
const QSet<QString> files
= group->wildcards->expandPatterns(resolvedProduct->sourceDirectory);
QSet<QString> wcFiles;
- foreach (const SourceArtifact::ConstPtr &sourceArtifact, group->wildcards->files)
+ foreach (const SourceArtifactConstPtr &sourceArtifact, group->wildcards->files)
wcFiles += sourceArtifact->absoluteFilePath;
if (files == wcFiles)
continue;
@@ -1300,16 +1301,16 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
if (projectFileChanged || referencedProductRemoved || !changedProducts.isEmpty()) {
Loader ldr(bg->engine());
ldr.setSearchPaths(loaderSearchPaths);
- const ResolvedProject::Ptr changedProject
+ const ResolvedProjectPtr changedProject
= ldr.loadProject(project->resolvedProject()->qbsFile, buildRoot, cfg);
m_result.changedResolvedProject = changedProject;
- QMap<QString, ResolvedProduct::Ptr> changedProductsMap;
- foreach (BuildProduct::Ptr product, changedProducts) {
+ QMap<QString, ResolvedProductPtr> changedProductsMap;
+ foreach (BuildProductPtr product, changedProducts) {
if (changedProductsMap.isEmpty())
- foreach (ResolvedProduct::Ptr cp, changedProject->products)
+ foreach (ResolvedProductPtr cp, changedProject->products)
changedProductsMap.insert(cp->name, cp);
- ResolvedProduct::Ptr changedProduct = changedProductsMap.value(product->rProduct->name);
+ ResolvedProductPtr changedProduct = changedProductsMap.value(product->rProduct->name);
if (!changedProduct)
continue;
onProductChanged(product, changedProduct);
@@ -1318,9 +1319,9 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
}
QSet<QString> oldProductNames, newProductNames;
- foreach (const BuildProduct::Ptr &product, project->buildProducts())
+ foreach (const BuildProductPtr &product, project->buildProducts())
oldProductNames += product->rProduct->name;
- foreach (const ResolvedProduct::ConstPtr &product, changedProject->products)
+ foreach (const ResolvedProductConstPtr &product, changedProject->products)
newProductNames += product->name;
QSet<QString> addedProductNames = newProductNames - oldProductNames;
if (!addedProductNames.isEmpty()) {
@@ -1329,7 +1330,7 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
}
QSet<QString> removedProductsNames = oldProductNames - newProductNames;
if (!removedProductsNames.isEmpty()) {
- foreach (const BuildProduct::Ptr &product, project->buildProducts()) {
+ foreach (const BuildProductPtr &product, project->buildProducts()) {
if (removedProductsNames.contains(product->rProduct->name))
onProductRemoved(product);
}
@@ -1341,7 +1342,7 @@ BuildProjectLoader::LoadResult BuildProjectLoader::load(const QString &projectFi
return m_result;
}
-void BuildProjectLoader::onProductRemoved(const BuildProduct::Ptr &product)
+void BuildProjectLoader::onProductRemoved(const BuildProductPtr &product)
{
qbsDebug() << "[BG] product '" << product->rProduct->name << "' removed.";
@@ -1355,20 +1356,20 @@ void BuildProjectLoader::onProductRemoved(const BuildProduct::Ptr &product)
}
}
-void BuildProjectLoader::onProductChanged(const BuildProduct::Ptr &product,
- const ResolvedProduct::Ptr &changedProduct)
+void BuildProjectLoader::onProductChanged(const BuildProductPtr &product,
+ const ResolvedProductPtr &changedProduct)
{
qbsDebug() << "[BG] product '" << product->rProduct->name << "' changed.";
ArtifactsPerFileTagMap artifactsPerFileTag;
- QSet<SourceArtifact::ConstPtr> addedSourceArtifacts;
+ QSet<SourceArtifactConstPtr> addedSourceArtifacts;
QList<Artifact *> addedArtifacts, artifactsToRemove;
- QHash<QString, SourceArtifact::ConstPtr> oldArtifacts, newArtifacts;
+ QHash<QString, SourceArtifactConstPtr> oldArtifacts, newArtifacts;
- const QList<SourceArtifact::Ptr> oldProductAllFiles = product->rProduct->allFiles();
- foreach (const SourceArtifact::ConstPtr &a, oldProductAllFiles)
+ const QList<SourceArtifactPtr> oldProductAllFiles = product->rProduct->allFiles();
+ foreach (const SourceArtifactConstPtr &a, oldProductAllFiles)
oldArtifacts.insert(a->absoluteFilePath, a);
- foreach (const SourceArtifact::Ptr &a, changedProduct->allFiles()) {
+ foreach (const SourceArtifactPtr &a, changedProduct->allFiles()) {
newArtifacts.insert(a->absoluteFilePath, a);
if (!oldArtifacts.contains(a->absoluteFilePath)) {
// artifact added
@@ -1378,8 +1379,8 @@ void BuildProjectLoader::onProductChanged(const BuildProduct::Ptr &product,
}
}
- foreach (const SourceArtifact::Ptr &a, oldProductAllFiles) {
- const SourceArtifact::ConstPtr changedArtifact = newArtifacts.value(a->absoluteFilePath);
+ foreach (const SourceArtifactPtr &a, oldProductAllFiles) {
+ const SourceArtifactConstPtr changedArtifact = newArtifacts.value(a->absoluteFilePath);
if (!changedArtifact) {
// artifact removed
qbsDebug() << "[BG] artifact '" << a->absoluteFilePath << "' removed from product " << product->rProduct->name;
diff --git a/src/lib/buildgraph/buildgraph.h b/src/lib/buildgraph/buildgraph.h
index f3a26ddf1..e0b912f4f 100644
--- a/src/lib/buildgraph/buildgraph.h
+++ b/src/lib/buildgraph/buildgraph.h
@@ -31,16 +31,17 @@
#define BUILDGRAPH_H
#include "artifactlist.h"
+#include "forward_decls.h"
-#include <language/language.h>
+#include <language/forward_decls.h>
#include <tools/error.h>
#include <tools/persistentobject.h>
#include <tools/weakpointer.h>
#include <QDir>
+#include <QScriptProgram>
#include <QScriptValue>
#include <QSet>
-#include <QSharedPointer>
#include <QStringList>
#include <QVariant>
#include <QVector>
@@ -48,9 +49,8 @@
namespace qbs {
namespace Internal {
-class Artifact;
-class BuildProject;
class ProgressObserver;
+class ScriptEngine;
class Transformer;
typedef QMap<QString, ArtifactList> ArtifactsPerFileTagMap;
@@ -58,22 +58,19 @@ typedef QMap<QString, ArtifactList> ArtifactsPerFileTagMap;
class BuildProduct : public PersistentObject
{
public:
- typedef QSharedPointer<BuildProduct> Ptr;
- typedef QSharedPointer<const BuildProduct> ConstPtr;
-
- static Ptr create() { return Ptr(new BuildProduct); }
+ static BuildProductPtr create() { return BuildProductPtr(new BuildProduct); }
~BuildProduct();
void dump() const;
- const QList<Rule::ConstPtr> &topSortedRules() const;
+ const QList<RuleConstPtr> &topSortedRules() const;
Artifact *lookupArtifact(const QString &dirPath, const QString &fileName) const;
Artifact *lookupArtifact(const QString &filePath) const;
WeakPointer<BuildProject> project;
- ResolvedProduct::Ptr rProduct;
+ ResolvedProductPtr rProduct;
QSet<Artifact *> targetArtifacts;
- QList<BuildProduct::Ptr> dependencies;
+ QList<BuildProductPtr> dependencies;
ArtifactList artifacts;
private:
@@ -83,7 +80,7 @@ private:
void store(PersistentPool &pool) const;
private:
- mutable QList<Rule::ConstPtr> m_topSortedRules;
+ mutable QList<RuleConstPtr> m_topSortedRules;
};
class BuildGraph;
@@ -95,9 +92,6 @@ class BuildProject : public PersistentObject
friend class BuildProjectLoader;
friend class BuildProjectResolver;
public:
- typedef QSharedPointer<BuildProject> Ptr;
- typedef QSharedPointer<const BuildProject> ConstPtr;
-
BuildProject(BuildGraph *bg);
~BuildProject();
@@ -106,8 +100,8 @@ public:
QString buildGraphFilePath() const;
BuildGraph *buildGraph() const;
- ResolvedProject::Ptr resolvedProject() const;
- QSet<BuildProduct::Ptr> buildProducts() const;
+ ResolvedProjectPtr resolvedProject() const;
+ QSet<BuildProductPtr> buildProducts() const;
bool dirty() const;
void markDirty();
void insertIntoArtifactLookupTable(Artifact *artifact);
@@ -115,18 +109,18 @@ public:
QList<Artifact *> lookupArtifacts(const QString &filePath) const;
QList<Artifact *> lookupArtifacts(const QString &dirPath, const QString &fileName) const;
void insertFileDependency(Artifact *artifact);
- void rescueDependencies(const BuildProject::Ptr &other);
+ void rescueDependencies(const BuildProjectPtr &other);
private:
void load(PersistentPool &pool);
void store(PersistentPool &pool) const;
- void addBuildProduct(const BuildProduct::Ptr &product);
- void setResolvedProject(const ResolvedProject::Ptr & resolvedProject);
+ void addBuildProduct(const BuildProductPtr &product);
+ void setResolvedProject(const ResolvedProjectPtr &resolvedProject);
private:
BuildGraph *m_buildGraph;
- ResolvedProject::Ptr m_resolvedProject;
- QSet<BuildProduct::Ptr> m_buildProducts;
+ ResolvedProjectPtr m_resolvedProject;
+ QSet<BuildProductPtr> m_buildProducts;
ArtifactList m_dependencyArtifacts;
QHash<QString, QHash<QString, QList<Artifact *> > > m_artifactLookupTable;
mutable bool m_dirty;
@@ -166,14 +160,14 @@ public:
void setProgressObserver(ProgressObserver *observer);
void checkCancelation() const;
- static Artifact *createArtifact(const BuildProduct::Ptr &product,
- const SourceArtifact::ConstPtr &sourceArtifact);
+ static Artifact *createArtifact(const BuildProductPtr &product,
+ const SourceArtifactConstPtr &sourceArtifact);
static bool findPath(Artifact *u, Artifact *v, QList<Artifact*> &path);
static void connect(Artifact *p, Artifact *c);
static void loggedConnect(Artifact *u, Artifact *v);
static bool safeConnect(Artifact *u, Artifact *v);
- static void insert(BuildProduct::Ptr target, Artifact *n);
+ static void insert(BuildProductPtr target, Artifact *n);
static void insert(BuildProduct *target, Artifact *n);
void remove(Artifact *artifact) const;
static void removeGeneratedArtifactFromDisk(Artifact *artifact);
@@ -186,11 +180,11 @@ public:
m_artifactsThatMustGetNewTransformers += a;
}
- void createTransformerCommands(const PrepareScript::ConstPtr &script, Transformer *transformer);
+ void createTransformerCommands(const PrepareScriptConstPtr &script, Transformer *transformer);
static void setupScriptEngineForProduct(ScriptEngine *scriptEngine,
- const ResolvedProduct::ConstPtr &product,
- Rule::ConstPtr rule, QScriptValue targetObject);
+ const ResolvedProductConstPtr &product,
+ RuleConstPtr rule, QScriptValue targetObject);
static void disconnect(Artifact *u, Artifact *v);
static void disconnectChildren(Artifact *u);
static void disconnectParents(Artifact *u);
@@ -218,12 +212,12 @@ public:
RulesApplicator(BuildProduct *product, ArtifactsPerFileTagMap &artifactsPerFileTag,
BuildGraph *bg);
void applyAllRules();
- void applyRule(const Rule::ConstPtr &rule);
+ void applyRule(const RuleConstPtr &rule);
private:
void doApply(const ArtifactList &inputArtifacts);
void setupScriptEngineForArtifact(Artifact *artifact);
- Artifact *createOutputArtifact(const RuleArtifact::ConstPtr &ruleArtifact,
+ Artifact *createOutputArtifact(const RuleArtifactConstPtr &ruleArtifact,
const ArtifactList &inputArtifacts);
QString resolveOutPath(const QString &path) const;
@@ -234,26 +228,26 @@ private:
ArtifactsPerFileTagMap &m_artifactsPerFileTag;
BuildGraph * const m_buildGraph;
- Rule::ConstPtr m_rule;
- QSharedPointer<Transformer> m_transformer;
+ RuleConstPtr m_rule;
+ TransformerPtr m_transformer;
};
class BuildProjectResolver
{
public:
- BuildProject::Ptr resolveProject(const ResolvedProject::Ptr &resolvedProject,
+ BuildProjectPtr resolveProject(const ResolvedProjectPtr &resolvedProject,
BuildGraph *buildgraph, ProgressObserver *observer = 0);
private:
- BuildProduct::Ptr resolveProduct(const ResolvedProduct::Ptr &rProduct);
+ BuildProductPtr resolveProduct(const ResolvedProductPtr &rProduct);
BuildGraph *buildGraph() const { return m_project->buildGraph(); }
ScriptEngine *engine() const { return buildGraph()->engine(); }
QScriptValue scope() const;
- BuildProject::Ptr m_project;
+ BuildProjectPtr m_project;
ProgressObserver *m_observer;
- QHash<ResolvedProduct::Ptr, BuildProduct::Ptr> m_productCache;
+ QHash<ResolvedProductPtr, BuildProductPtr> m_productCache;
};
class BuildProjectLoader
@@ -263,8 +257,8 @@ public:
{
LoadResult() : discardLoadedProject(false) {}
- ResolvedProject::Ptr changedResolvedProject;
- BuildProject::Ptr loadedProject;
+ ResolvedProjectPtr changedResolvedProject;
+ BuildProjectPtr loadedProject;
bool discardLoadedProject;
};
@@ -272,9 +266,9 @@ public:
const QVariantMap &cfg, const QStringList &loaderSearchPaths);
private:
- void onProductRemoved(const BuildProduct::Ptr &product);
- void onProductChanged(const BuildProduct::Ptr &product,
- const ResolvedProduct::Ptr &changedProduct);
+ void onProductRemoved(const BuildProductPtr &product);
+ void onProductChanged(const BuildProductPtr &product,
+ const ResolvedProductPtr &changedProduct);
void removeArtifactAndExclusiveDependents(Artifact *artifact,
QList<Artifact*> *removedArtifacts = 0);
diff --git a/src/lib/buildgraph/buildgraph.pri b/src/lib/buildgraph/buildgraph.pri
index 7ced8195f..2290df847 100644
--- a/src/lib/buildgraph/buildgraph.pri
+++ b/src/lib/buildgraph/buildgraph.pri
@@ -1,4 +1,3 @@
-INCLUDEPATH += $$PWD
SOURCES += \
$$PWD/automoc.cpp\
$$PWD/buildgraph.cpp\
@@ -35,4 +34,5 @@ HEADERS += \
$$PWD/inputartifactscanner.h \
$$PWD/artifactvisitor.h \
$$PWD/artifactcleaner.h \
- $$PWD/cycledetector.h
+ $$PWD/cycledetector.h \
+ $$PWD/forward_decls.h
diff --git a/src/lib/buildgraph/cycledetector.cpp b/src/lib/buildgraph/cycledetector.cpp
index da3b99242..fc9380709 100644
--- a/src/lib/buildgraph/cycledetector.cpp
+++ b/src/lib/buildgraph/cycledetector.cpp
@@ -31,6 +31,7 @@
#include "artifact.h"
#include "buildgraph.h"
+#include <language/language.h>
#include <logging/logger.h>
#include <logging/translator.h>
@@ -41,7 +42,7 @@ CycleDetector::CycleDetector() : ArtifactVisitor(0), m_parent(0)
{
}
-void CycleDetector::visitProject(const BuildProject::ConstPtr &project)
+void CycleDetector::visitProject(const BuildProjectConstPtr &project)
{
const QString description = QString::fromLocal8Bit("Cycle detection for project '%1'")
.arg(project->resolvedProject()->id());
diff --git a/src/lib/buildgraph/cycledetector.h b/src/lib/buildgraph/cycledetector.h
index ff5023fb8..0475c5917 100644
--- a/src/lib/buildgraph/cycledetector.h
+++ b/src/lib/buildgraph/cycledetector.h
@@ -41,7 +41,7 @@ class CycleDetector : public ArtifactVisitor
public:
CycleDetector();
- void visitProject(const BuildProject::ConstPtr &project);
+ void visitProject(const BuildProjectConstPtr &project);
void visitArtifact(Artifact *artifact);
private:
diff --git a/src/lib/buildgraph/executor.cpp b/src/lib/buildgraph/executor.cpp
index 9e9c778bb..8bbe56598 100644
--- a/src/lib/buildgraph/executor.cpp
+++ b/src/lib/buildgraph/executor.cpp
@@ -26,11 +26,12 @@
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
+#include "executor.h"
#include "artifactvisitor.h"
#include "automoc.h"
+#include "buildgraph.h"
#include "cycledetector.h"
-#include "executor.h"
#include "executorjob.h"
#include "inputartifactscanner.h"
@@ -119,7 +120,7 @@ static void retrieveSourceFileTimestamp(Artifact *artifact)
}
}
-void Executor::build(const QList<BuildProduct::Ptr> &productsToBuild)
+void Executor::build(const QList<BuildProductPtr> &productsToBuild)
{
try {
doBuild(productsToBuild);
@@ -129,7 +130,7 @@ void Executor::build(const QList<BuildProduct::Ptr> &productsToBuild)
}
}
-void Executor::doBuild(const QList<BuildProduct::Ptr> &productsToBuild)
+void Executor::doBuild(const QList<BuildProductPtr> &productsToBuild)
{
Q_ASSERT(m_buildOptions.maxJobCount > 0);
Q_ASSERT(m_engine);
@@ -140,7 +141,7 @@ void Executor::doBuild(const QList<BuildProduct::Ptr> &productsToBuild)
m_explicitlyCanceled = false;
QSet<BuildProject *> projects;
- foreach (const BuildProduct::ConstPtr &buildProduct, productsToBuild)
+ foreach (const BuildProductConstPtr &buildProduct, productsToBuild)
projects << buildProduct->project;
foreach (BuildProject * const project, projects) {
project->buildGraph()->setEngine(m_engine);
@@ -168,12 +169,12 @@ void Executor::doBuild(const QList<BuildProduct::Ptr> &productsToBuild)
// prepare products
const QProcessEnvironment systemEnvironment = QProcessEnvironment::systemEnvironment();
- foreach (BuildProduct::Ptr product, m_productsToBuild)
+ foreach (BuildProductPtr product, m_productsToBuild)
product->rProduct->setupBuildEnvironment(m_engine, systemEnvironment);
// find the root nodes
m_roots.clear();
- foreach (BuildProduct::Ptr product, m_productsToBuild) {
+ foreach (BuildProductPtr product, m_productsToBuild) {
foreach (Artifact *targetArtifact, product->targetArtifacts) {
m_roots += targetArtifact;
@@ -309,7 +310,7 @@ static bool isUpToDate(Artifact *artifact)
return true;
}
-static bool mustExecuteTransformer(const QSharedPointer<Transformer> &transformer)
+static bool mustExecuteTransformer(const TransformerPtr &transformer)
{
foreach (Artifact *artifact, transformer->outputs)
if (artifact->alwaysUpdated)
@@ -561,10 +562,10 @@ void Executor::setupProgressObserver(bool mocWillRun)
return;
MocEffortCalculator mocEffortCalculator;
BuildEffortCalculator buildEffortCalculator;
- foreach (const BuildProduct::ConstPtr &product, m_productsToBuild)
+ foreach (const BuildProductConstPtr &product, m_productsToBuild)
buildEffortCalculator.visitProduct(product);
if (mocWillRun) {
- foreach (const BuildProduct::ConstPtr &product, m_productsToBuild)
+ foreach (const BuildProductConstPtr &product, m_productsToBuild)
mocEffortCalculator.visitProduct(product);
}
m_mocEffort = mocEffortCalculator.effort();
@@ -600,9 +601,9 @@ void Executor::removeExecutorJobs(int jobNumber)
void Executor::runAutoMoc()
{
bool autoMocApplied = false;
- foreach (const BuildProduct::Ptr &product, m_productsToBuild) {
+ foreach (const BuildProductPtr &product, m_productsToBuild) {
// HACK call the automoc thingy here only if we have use qt/core module
- foreach (const ResolvedModule::ConstPtr &m, product->rProduct->modules) {
+ foreach (const ResolvedModuleConstPtr &m, product->rProduct->modules) {
if (m->name == "qt/core") {
autoMocApplied = true;
m_autoMoc->apply(product);
@@ -611,7 +612,7 @@ void Executor::runAutoMoc()
}
}
if (autoMocApplied) {
- foreach (const BuildProduct::ConstPtr &product, m_productsToBuild)
+ foreach (const BuildProductConstPtr &product, m_productsToBuild)
CycleDetector().visitProduct(product);
}
if (m_progressObserver)
@@ -652,7 +653,7 @@ void Executor::finish()
Q_ASSERT(m_state != ExecutorIdle);
QStringList unbuiltProductNames;
- foreach (BuildProduct::Ptr buildProduct, m_productsToBuild) {
+ foreach (BuildProductPtr buildProduct, m_productsToBuild) {
foreach (Artifact *artifact, buildProduct->targetArtifacts) {
if (artifact->buildState != Artifact::Built) {
unbuiltProductNames += buildProduct->rProduct->name;
@@ -682,7 +683,7 @@ void Executor::finish()
*/
void Executor::initializeArtifactsState()
{
- foreach (const BuildProduct::Ptr &product, m_productsToBuild) {
+ foreach (const BuildProductPtr &product, m_productsToBuild) {
foreach (Artifact *artifact, product->artifacts) {
artifact->buildState = Artifact::Untouched;
artifact->inputsScanned = false;
diff --git a/src/lib/buildgraph/executor.h b/src/lib/buildgraph/executor.h
index 1d0cd2aa1..c55a642a3 100644
--- a/src/lib/buildgraph/executor.h
+++ b/src/lib/buildgraph/executor.h
@@ -30,8 +30,7 @@
#ifndef BUILDGRAPHEXECUTOR_H
#define BUILDGRAPHEXECUTOR_H
-#include "buildgraph.h"
-
+#include "forward_decls.h"
#include <buildgraph/artifact.h>
#include <buildgraph/scanresultcache.h>
#include <tools/buildoptions.h>
@@ -48,6 +47,7 @@ class ExecutorJob;
class InputArtifactScannerContext;
class ProgressObserver;
class ScanResultCache;
+class ScriptEngine;
class Executor : public QObject
{
@@ -56,7 +56,7 @@ public:
Executor(QObject *parent = 0);
~Executor();
- void build(const QList<BuildProduct::Ptr> &productsToBuild);
+ void build(const QList<BuildProductPtr> &productsToBuild);
void setEngine(ScriptEngine *engine);
void setBuildOptions(const BuildOptions &buildOptions);
@@ -76,7 +76,7 @@ private slots:
private:
enum ExecutorState { ExecutorIdle, ExecutorRunning, ExecutorCanceling };
- void doBuild(const QList<BuildProduct::Ptr> &productsToBuild);
+ void doBuild(const QList<BuildProductPtr> &productsToBuild);
void prepareBuildGraph(const Artifact::BuildState buildState, bool *sourceFilesChanged);
void prepareBuildGraph_impl(Artifact *artifact, const Artifact::BuildState buildState, bool *sourceFilesChanged);
void updateBuildGraph(Artifact::BuildState buildState);
@@ -102,7 +102,7 @@ private:
QList<ExecutorJob*> m_availableJobs;
QHash<ExecutorJob*, Artifact *> m_processingJobs;
ExecutorState m_state;
- QList<BuildProduct::Ptr> m_productsToBuild;
+ QList<BuildProductPtr> m_productsToBuild;
QList<Artifact *> m_roots;
QList<Artifact *> m_leaves;
ScanResultCache m_scanResultCache;
diff --git a/src/lib/buildgraph/executorjob.cpp b/src/lib/buildgraph/executorjob.cpp
index 9582c9cd5..a99667d3d 100644
--- a/src/lib/buildgraph/executorjob.cpp
+++ b/src/lib/buildgraph/executorjob.cpp
@@ -34,6 +34,7 @@
#include "jscommandexecutor.h"
#include "processcommandexecutor.h"
#include "transformer.h"
+#include <language/language.h>
#include <QThread>
diff --git a/src/lib/buildgraph/forward_decls.h b/src/lib/buildgraph/forward_decls.h
new file mode 100644
index 000000000..9daa72b2e
--- /dev/null
+++ b/src/lib/buildgraph/forward_decls.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Build Suite.
+**
+** 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 QBS_BG_FORWARD_DECLS_H
+#define QBS_BG_FORWARD_DECLS_H
+
+#include <QSharedPointer>
+
+namespace qbs {
+namespace Internal {
+
+class Artifact;
+
+class BuildProject;
+typedef QSharedPointer<BuildProject> BuildProjectPtr;
+typedef QSharedPointer<const BuildProject> BuildProjectConstPtr;
+
+class BuildProduct;
+typedef QSharedPointer<BuildProduct> BuildProductPtr;
+typedef QSharedPointer<const BuildProduct> BuildProductConstPtr;
+
+class Transformer;
+typedef QSharedPointer<Transformer> TransformerPtr;
+typedef QSharedPointer<const Transformer> TransformerConstPtr;
+
+} // namespace Internal
+} // namespace qbs
+
+#endif // QBS_BG_FORWARD_DECLS_H
diff --git a/src/lib/buildgraph/inputartifactscanner.cpp b/src/lib/buildgraph/inputartifactscanner.cpp
index 899ffb5ca..2133282e1 100644
--- a/src/lib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/buildgraph/inputartifactscanner.cpp
@@ -33,7 +33,9 @@
#include "buildgraph.h"
#include "transformer.h"
+#include <language/language.h>
#include <logging/logger.h>
+#include <tools/fileinfo.h>
#include <tools/scannerpluginmanager.h>
#include <QSet>
diff --git a/src/lib/buildgraph/inputartifactscanner.h b/src/lib/buildgraph/inputartifactscanner.h
index 451e50509..add9523dd 100644
--- a/src/lib/buildgraph/inputartifactscanner.h
+++ b/src/lib/buildgraph/inputartifactscanner.h
@@ -31,10 +31,10 @@
#define INPUTARTIFACTSCANNER_H
#include "scanresultcache.h"
+#include <language/forward_decls.h>
#include <QHash>
#include <QStringList>
-#include <QSharedPointer>
struct ScannerPlugin;
@@ -88,7 +88,7 @@ private:
ResolvedDependenciesCache resolvedDependenciesCache;
};
- QHash<QSharedPointer<const PropertyMap>, CacheItem> cache;
+ QHash<PropertyMapConstPtr, CacheItem> cache;
friend class InputArtifactScanner;
};
diff --git a/src/lib/buildgraph/jscommandexecutor.cpp b/src/lib/buildgraph/jscommandexecutor.cpp
index fa94e7d9a..ca62ffb1d 100644
--- a/src/lib/buildgraph/jscommandexecutor.cpp
+++ b/src/lib/buildgraph/jscommandexecutor.cpp
@@ -37,6 +37,7 @@
#include <jsextensions/file.h>
#include <jsextensions/process.h>
#include <jsextensions/textfile.h>
+#include <language/language.h>
#include <language/scriptengine.h>
#include <logging/logger.h>
#include <tools/codelocation.h>
@@ -86,7 +87,7 @@ public:
Artifact *someOutputArtifact = *transformer->outputs.begin();
if (someOutputArtifact->product) {
- const ResolvedProduct::ConstPtr product = someOutputArtifact->product->rProduct;
+ const ResolvedProductConstPtr product = someOutputArtifact->product->rProduct;
BuildGraph::setupScriptEngineForProduct(scriptEngine, product, transformer->rule,
scriptEngine->globalObject());
}
diff --git a/src/lib/buildgraph/rulegraph.cpp b/src/lib/buildgraph/rulegraph.cpp
index da427d033..bba106c0e 100644
--- a/src/lib/buildgraph/rulegraph.cpp
+++ b/src/lib/buildgraph/rulegraph.cpp
@@ -28,6 +28,7 @@
****************************************************************************/
#include "rulegraph.h"
+#include <language/language.h>
#include <tools/error.h>
namespace qbs {
@@ -37,11 +38,11 @@ RuleGraph::RuleGraph()
{
}
-void RuleGraph::build(const QSet<Rule::Ptr> &rules, const QStringList &productFileTags)
+void RuleGraph::build(const QSet<RulePtr> &rules, const QStringList &productFileTags)
{
QMap<QString, QList<const Rule *> > inputFileTagToRule;
m_artifacts.reserve(rules.count());
- foreach (const Rule::Ptr &rule, rules) {
+ foreach (const RulePtr &rule, rules) {
foreach (const QString &fileTag, rule->outputFileTags())
m_outputFileTagToRule[fileTag].append(rule.data());
insert(rule);
@@ -50,7 +51,7 @@ void RuleGraph::build(const QSet<Rule::Ptr> &rules, const QStringList &productFi
m_parents.resize(rules.count());
m_children.resize(rules.count());
- foreach (const Rule::ConstPtr &rule, m_artifacts) {
+ foreach (const RuleConstPtr &rule, m_artifacts) {
QStringList inFileTags = rule->inputs;
inFileTags += rule->explicitlyDependsOn;
foreach (const QString &fileTag, inFileTags) {
@@ -71,12 +72,12 @@ void RuleGraph::build(const QSet<Rule::Ptr> &rules, const QStringList &productFi
m_rootRules += r->ruleGraphId;
}
-QList<Rule::ConstPtr> RuleGraph::topSorted()
+QList<RuleConstPtr> RuleGraph::topSorted()
{
QSet<int> rootRules = m_rootRules;
- QList<Rule::ConstPtr> result;
+ QList<RuleConstPtr> result;
foreach (int rootIndex, rootRules) {
- Rule::ConstPtr rule = m_artifacts.at(rootIndex);
+ RuleConstPtr rule = m_artifacts.at(rootIndex);
result.append(topSort(rule));
}
@@ -100,7 +101,7 @@ void RuleGraph::dump() const
QByteArray indent;
printf("---rule graph dump:\n");
QSet<int> rootRules;
- foreach (const Rule::ConstPtr &rule, m_artifacts)
+ foreach (const RuleConstPtr &rule, m_artifacts)
if (m_parents[rule->ruleGraphId].isEmpty())
rootRules += rule->ruleGraphId;
foreach (int idx, rootRules) {
@@ -110,7 +111,7 @@ void RuleGraph::dump() const
void RuleGraph::dump_impl(QByteArray &indent, int rootIndex) const
{
- const Rule::ConstPtr r = m_artifacts[rootIndex];
+ const RuleConstPtr r = m_artifacts[rootIndex];
printf("%s", indent.constData());
printf("%s", qPrintable(r->toString()));
printf("\n");
@@ -121,7 +122,7 @@ void RuleGraph::dump_impl(QByteArray &indent, int rootIndex) const
indent.chop(2);
}
-int RuleGraph::insert(const Rule::Ptr &rule)
+int RuleGraph::insert(const RulePtr &rule)
{
rule->ruleGraphId = m_artifacts.count();
m_artifacts.append(rule);
@@ -144,14 +145,14 @@ void RuleGraph::remove(Rule *rule)
{
m_parents[rule->ruleGraphId].clear();
m_children[rule->ruleGraphId].clear();
- m_artifacts[rule->ruleGraphId] = Rule::Ptr();
+ m_artifacts[rule->ruleGraphId] = RulePtr();
rule->ruleGraphId = -1;
}
void RuleGraph::removeParents(const Rule *rule)
{
foreach (int parentIndex, m_parents[rule->ruleGraphId]) {
- const Rule::Ptr parent = m_artifacts.at(parentIndex);
+ const RulePtr parent = m_artifacts.at(parentIndex);
removeParents(parent.data());
remove(parent.data());
}
@@ -161,10 +162,10 @@ void RuleGraph::removeParents(const Rule *rule)
void RuleGraph::removeSiblings(const Rule *rule)
{
foreach (int childIndex, m_children[rule->ruleGraphId]) {
- const Rule::ConstPtr child = m_artifacts.at(childIndex);
+ const RuleConstPtr child = m_artifacts.at(childIndex);
QList<int> toRemove;
foreach (int siblingIndex, m_parents.at(child->ruleGraphId)) {
- const Rule::Ptr sibling = m_artifacts.at(siblingIndex);
+ const RulePtr sibling = m_artifacts.at(siblingIndex);
if (sibling == rule)
continue;
toRemove.append(sibling->ruleGraphId);
@@ -180,9 +181,9 @@ void RuleGraph::removeSiblings(const Rule *rule)
}
}
-QList<Rule::ConstPtr> RuleGraph::topSort(const Rule::ConstPtr &rule)
+QList<RuleConstPtr> RuleGraph::topSort(const RuleConstPtr &rule)
{
- QList<Rule::ConstPtr> result;
+ QList<RuleConstPtr> result;
foreach (int childIndex, m_children.at(rule->ruleGraphId))
result.append(topSort(m_artifacts.at(childIndex)));
diff --git a/src/lib/buildgraph/rulegraph.h b/src/lib/buildgraph/rulegraph.h
index cbd344dc6..a23000a2c 100644
--- a/src/lib/buildgraph/rulegraph.h
+++ b/src/lib/buildgraph/rulegraph.h
@@ -30,9 +30,12 @@
#ifndef RULEGRAPH_H
#define RULEGRAPH_H
-#include <language.h>
+#include <language/forward_decls.h>
+#include <QList>
+#include <QMap>
#include <QSet>
+#include <QString>
#include <QVector>
namespace qbs {
@@ -43,23 +46,23 @@ class RuleGraph
public:
RuleGraph();
- void build(const QSet<Rule::Ptr> &rules, const QStringList &productFileTag);
- QList<Rule::ConstPtr> topSorted();
+ void build(const QSet<RulePtr> &rules, const QStringList &productFileTag);
+ QList<RuleConstPtr> topSorted();
void dump() const;
private:
void dump_impl(QByteArray &indent, int rootIndex) const;
- int insert(const Rule::Ptr &rule);
+ int insert(const RulePtr &rule);
void connect(const Rule *creatingRule, const Rule *consumingRule);
void remove(Rule *rule);
void removeParents(const Rule *rule);
void removeSiblings(const Rule *rule);
- QList<Rule::ConstPtr> topSort(const Rule::ConstPtr &rule);
+ QList<RuleConstPtr> topSort(const RuleConstPtr &rule);
private:
QMap<QString, QList<const Rule*> > m_outputFileTagToRule;
- QVector<Rule::Ptr> m_artifacts;
+ QVector<RulePtr> m_artifacts;
QVector< QVector<int> > m_parents;
QVector< QVector<int> > m_children;
QSet<int> m_rootRules;
diff --git a/src/lib/buildgraph/scanresultcache.cpp b/src/lib/buildgraph/scanresultcache.cpp
index 2ee0298d9..ea27761dc 100644
--- a/src/lib/buildgraph/scanresultcache.cpp
+++ b/src/lib/buildgraph/scanresultcache.cpp
@@ -28,7 +28,7 @@
****************************************************************************/
#include "scanresultcache.h"
-#include "fileinfo.h"
+#include <tools/fileinfo.h>
#include <QMutexLocker>
diff --git a/src/lib/buildgraph/transformer.cpp b/src/lib/buildgraph/transformer.cpp
index e3280b832..bc111fce8 100644
--- a/src/lib/buildgraph/transformer.cpp
+++ b/src/lib/buildgraph/transformer.cpp
@@ -30,6 +30,7 @@
#include "transformer.h"
#include "artifact.h"
#include "command.h"
+#include <language/language.h>
namespace qbs {
namespace Internal {
diff --git a/src/lib/buildgraph/transformer.h b/src/lib/buildgraph/transformer.h
index 8b7285ef2..3ec1c270c 100644
--- a/src/lib/buildgraph/transformer.h
+++ b/src/lib/buildgraph/transformer.h
@@ -31,9 +31,10 @@
#define TRANSFORMER_H
#include "artifactlist.h"
+#include "forward_decls.h"
+#include <language/forward_decls.h>
#include <tools/persistentobject.h>
-#include <QSharedPointer>
#include <QScriptEngine>
namespace qbs {
@@ -46,15 +47,13 @@ class Rule;
class Transformer : public PersistentObject
{
public:
- typedef QSharedPointer<Transformer> Ptr;
-
- static Ptr create() { return Ptr(new Transformer); }
+ static TransformerPtr create() { return TransformerPtr(new Transformer); }
~Transformer();
ArtifactList inputs; // can be different from "children of all outputs"
ArtifactList outputs;
- QSharedPointer<const Rule> rule;
+ RuleConstPtr rule;
QList<AbstractCommand *> commands;
static QScriptValue translateFileConfig(QScriptEngine *scriptEngine,
diff --git a/src/lib/jsextensions/jsextensions.pri b/src/lib/jsextensions/jsextensions.pri
index e16ba2e59..b77da628c 100644
--- a/src/lib/jsextensions/jsextensions.pri
+++ b/src/lib/jsextensions/jsextensions.pri
@@ -1,5 +1,3 @@
-INCLUDEPATH += $$PWD
-
HEADERS += \
$$PWD/file.h \
$$PWD/textfile.h \
diff --git a/src/lib/language/forward_decls.h b/src/lib/language/forward_decls.h
new file mode 100644
index 000000000..022da3566
--- /dev/null
+++ b/src/lib/language/forward_decls.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Build Suite.
+**
+** 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 QBS_LANG_FORWARD_DECLS_H
+#define QBS_LANG_FORWARD_DECLS_H
+
+#include <QSharedPointer>
+
+namespace qbs {
+namespace Internal {
+
+class PropertyMap;
+typedef QSharedPointer<PropertyMap> PropertyMapPtr;
+typedef QSharedPointer<const PropertyMap> PropertyMapConstPtr;
+
+class ResolvedProduct;
+typedef QSharedPointer<ResolvedProduct> ResolvedProductPtr;
+typedef QSharedPointer<const ResolvedProduct> ResolvedProductConstPtr;
+
+class ResolvedProject;
+typedef QSharedPointer<ResolvedProject> ResolvedProjectPtr;
+typedef QSharedPointer<const ResolvedProject> ResolvedProjectConstPtr;
+
+class Rule;
+typedef QSharedPointer<Rule> RulePtr;
+typedef QSharedPointer<const Rule> RuleConstPtr;
+
+class SourceArtifact;
+typedef QSharedPointer<SourceArtifact> SourceArtifactPtr;
+typedef QSharedPointer<const SourceArtifact> SourceArtifactConstPtr;
+
+class PrepareScript;
+typedef QSharedPointer<PrepareScript> PrepareScriptPtr;
+typedef QSharedPointer<const PrepareScript> PrepareScriptConstPtr;
+
+class RuleArtifact;
+typedef QSharedPointer<RuleArtifact> RuleArtifactPtr;
+typedef QSharedPointer<const RuleArtifact> RuleArtifactConstPtr;
+
+class ResolvedModule;
+typedef QSharedPointer<ResolvedModule> ResolvedModulePtr;
+typedef QSharedPointer<const ResolvedModule> ResolvedModuleConstPtr;
+
+} // namespace Internal
+} // namespace qbs
+
+#endif // QBS_LANG_FORWARD_DECLS_H
diff --git a/src/lib/language/language.cpp b/src/lib/language/language.cpp
index fc1d68387..df0065ba3 100644
--- a/src/lib/language/language.cpp
+++ b/src/lib/language/language.cpp
@@ -189,9 +189,9 @@ void SourceWildCards::store(PersistentPool &pool) const
* \brief Returns all files specified in the group item as source artifacts.
* This includes the expanded list of wildcards.
*/
-QList<SourceArtifact::Ptr> ResolvedGroup::allFiles() const
+QList<SourceArtifactPtr> ResolvedGroup::allFiles() const
{
- QList<SourceArtifact::Ptr> lst = files;
+ QList<SourceArtifactPtr> lst = files;
if (wildcards)
lst.append(wildcards->files);
return lst;
@@ -315,7 +315,7 @@ QString Rule::toString() const
QStringList Rule::outputFileTags() const
{
QStringList result;
- foreach (const RuleArtifact::ConstPtr &artifact, artifacts)
+ foreach (const RuleArtifactConstPtr &artifact, artifacts)
result.append(artifact->fileTags);
result.sort();
std::unique(result.begin(), result.end());
@@ -352,9 +352,9 @@ ResolvedProduct::ResolvedProduct()
{
}
-QList<SourceArtifact::Ptr> ResolvedProduct::allFiles() const
+QList<SourceArtifactPtr> ResolvedProduct::allFiles() const
{
- QList<SourceArtifact::Ptr> lst;
+ QList<SourceArtifactPtr> lst;
foreach (const ResolvedGroup::ConstPtr &group, groups)
lst += group->allFiles();
return lst;
@@ -453,8 +453,8 @@ enum EnvType
};
static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType envType,
- const QList<ResolvedModule::ConstPtr> &modules,
- const PropertyMap::ConstPtr &productConfiguration,
+ const QList<ResolvedModuleConstPtr> &modules,
+ const PropertyMapConstPtr &productConfiguration,
ResolvedProject *project,
const QProcessEnvironment &systemEnvironment)
{
@@ -466,12 +466,12 @@ static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType e
procenv.insert(it.key(), it.value().toString());
QMap<QString, const ResolvedModule *> moduleMap;
- foreach (const ResolvedModule::ConstPtr &module, modules)
+ foreach (const ResolvedModuleConstPtr &module, modules)
moduleMap.insert(module->name, module.data());
QHash<const ResolvedModule*, QList<const ResolvedModule*> > moduleParents;
QHash<const ResolvedModule*, QList<const ResolvedModule*> > moduleChildren;
- foreach (ResolvedModule::ConstPtr module, modules) {
+ foreach (ResolvedModuleConstPtr module, modules) {
foreach (const QString &moduleName, module->moduleDependencies) {
const ResolvedModule * const depmod = moduleMap.value(moduleName);
moduleParents[depmod].append(module.data());
@@ -480,7 +480,7 @@ static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType e
}
QList<const ResolvedModule *> rootModules;
- foreach (ResolvedModule::ConstPtr module, modules)
+ foreach (ResolvedModuleConstPtr module, modules)
if (moduleParents.value(module.data()).isEmpty())
rootModules.append(module.data());
@@ -591,7 +591,7 @@ void ResolvedProject::load(PersistentPool &pool)
products.clear();
products.reserve(count);
for (; --count >= 0;) {
- ResolvedProduct::Ptr rProduct = pool.idLoadS<ResolvedProduct>();
+ ResolvedProductPtr rProduct = pool.idLoadS<ResolvedProduct>();
products.append(rProduct);
}
}
@@ -602,7 +602,7 @@ void ResolvedProject::store(PersistentPool &pool) const
pool.stream() << platformEnvironment;
pool.stream() << products.count();
- foreach (const ResolvedProduct::ConstPtr &product, products)
+ foreach (const ResolvedProductConstPtr &product, products)
pool.store(product);
}
diff --git a/src/lib/language/language.h b/src/lib/language/language.h
index de3b35f11..9a2d57ffd 100644
--- a/src/lib/language/language.h
+++ b/src/lib/language/language.h
@@ -30,6 +30,7 @@
#ifndef L2_LANGUAGE_HPP
#define L2_LANGUAGE_HPP
+#include "forward_decls.h"
#include "jsimports.h"
#include <tools/codelocation.h>
#include <tools/fileinfo.h>
@@ -43,7 +44,6 @@
#include <QScriptProgram>
#include <QScriptValue>
#include <QSet>
-#include <QSharedPointer>
#include <QString>
#include <QStringList>
#include <QVariant>
@@ -55,7 +55,7 @@ QT_END_NAMESPACE
namespace qbs {
namespace Internal {
-class PropertyMap: public PersistentObject
+class PropertyMap : public PersistentObject
{
public:
typedef QSharedPointer<PropertyMap> Ptr;
@@ -113,10 +113,7 @@ private:
class RuleArtifact : public PersistentObject
{
public:
- typedef QSharedPointer<RuleArtifact> Ptr;
- typedef QSharedPointer<const RuleArtifact> ConstPtr;
-
- static Ptr create() { return Ptr(new RuleArtifact); }
+ static RuleArtifactPtr create() { return RuleArtifactPtr(new RuleArtifact); }
QString fileName;
QStringList fileTags;
@@ -143,15 +140,12 @@ private:
class SourceArtifact : public PersistentObject
{
public:
- typedef QSharedPointer<SourceArtifact> Ptr;
- typedef QSharedPointer<const SourceArtifact> ConstPtr;
-
- static Ptr create() { return Ptr(new SourceArtifact); }
+ static SourceArtifactPtr create() { return SourceArtifactPtr(new SourceArtifact); }
QString absoluteFilePath;
QSet<QString> fileTags;
bool overrideFileTags;
- PropertyMap::Ptr properties;
+ PropertyMapPtr properties;
private:
SourceArtifact() : overrideFileTags(true) {}
@@ -176,7 +170,7 @@ public:
QStringList patterns;
QStringList excludePatterns;
- QList<SourceArtifact::Ptr> files;
+ QList<SourceArtifactPtr> files;
private:
SourceWildCards() : recursive(false) {}
@@ -200,11 +194,11 @@ public:
int qbsLine;
QString name;
- QList<SourceArtifact::Ptr> files;
+ QList<SourceArtifactPtr> files;
SourceWildCards::Ptr wildcards;
- PropertyMap::Ptr properties;
+ PropertyMapPtr properties;
- QList<SourceArtifact::Ptr> allFiles() const;
+ QList<SourceArtifactPtr> allFiles() const;
private:
ResolvedGroup() {}
@@ -216,10 +210,7 @@ private:
class PrepareScript: public PersistentObject
{
public:
- typedef QSharedPointer<PrepareScript> Ptr;
- typedef QSharedPointer<const PrepareScript> ConstPtr;
-
- static Ptr create() { return Ptr(new PrepareScript); }
+ static PrepareScriptPtr create() { return PrepareScriptPtr(new PrepareScript); }
QString script;
CodeLocation location;
@@ -234,10 +225,7 @@ private:
class ResolvedModule : public PersistentObject
{
public:
- typedef QSharedPointer<ResolvedModule> Ptr;
- typedef QSharedPointer<const ResolvedModule> ConstPtr;
-
- static Ptr create() { return Ptr(new ResolvedModule); }
+ static ResolvedModulePtr create() { return ResolvedModulePtr(new ResolvedModule); }
QString name;
QStringList moduleDependencies;
@@ -264,19 +252,16 @@ private:
class Rule : public PersistentObject
{
public:
- typedef QSharedPointer<Rule> Ptr;
- typedef QSharedPointer<const Rule> ConstPtr;
+ static RulePtr create() { return RulePtr(new Rule); }
- static Ptr create() { return Ptr(new Rule); }
-
- ResolvedModule::ConstPtr module;
+ ResolvedModuleConstPtr module;
JsImports jsImports;
- PrepareScript::ConstPtr script;
+ PrepareScriptConstPtr script;
QStringList inputs;
QStringList usings;
QStringList explicitlyDependsOn;
bool multiplex;
- QList<RuleArtifact::ConstPtr> artifacts;
+ QList<RuleArtifactConstPtr> artifacts;
// members that we don't need to save
int ruleGraphId;
@@ -298,10 +283,10 @@ public:
static Ptr create() { return Ptr(new ResolvedTransformer); }
- ResolvedModule::ConstPtr module;
+ ResolvedModuleConstPtr module;
QStringList inputs;
- QList<SourceArtifact::Ptr> outputs;
- PrepareScript::ConstPtr transform;
+ QList<SourceArtifactPtr> outputs;
+ PrepareScriptConstPtr transform;
JsImports jsImports;
private:
@@ -311,13 +296,10 @@ private:
class ResolvedProject;
class ScriptEngine;
-class ResolvedProduct: public PersistentObject
+class ResolvedProduct : public PersistentObject
{
public:
- typedef QSharedPointer<ResolvedProduct> Ptr;
- typedef QSharedPointer<const ResolvedProduct> ConstPtr;
-
- static Ptr create() { return Ptr(new ResolvedProduct); }
+ static ResolvedProductPtr create() { return ResolvedProductPtr(new ResolvedProduct); }
QStringList fileTags;
QStringList additionalFileTags;
@@ -328,11 +310,11 @@ public:
QString qbsFile;
int qbsLine;
WeakPointer<ResolvedProject> project;
- PropertyMap::Ptr properties;
- QSet<Rule::Ptr> rules;
- QSet<ResolvedProduct::Ptr> dependencies;
+ PropertyMapPtr properties;
+ QSet<RulePtr> rules;
+ QSet<ResolvedProductPtr> dependencies;
QSet<FileTagger::ConstPtr> fileTaggers;
- QList<ResolvedModule::ConstPtr> modules;
+ QList<ResolvedModuleConstPtr> modules;
QList<ResolvedTransformer::Ptr> transformers;
QList<ResolvedGroup::Ptr> groups;
@@ -340,7 +322,7 @@ public:
mutable QProcessEnvironment runEnvironment; // must not be saved
QHash<QString, QString> executablePathCache;
- QList<SourceArtifact::Ptr> allFiles() const;
+ QList<SourceArtifactPtr> allFiles() const;
QSet<QString> fileTagsForFileName(const QString &fileName) const;
void setupBuildEnvironment(ScriptEngine *scriptEngine, const QProcessEnvironment &systemEnvironment) const;
void setupRunEnvironment(ScriptEngine *scriptEngine, const QProcessEnvironment &systemEnvironment) const;
@@ -355,10 +337,7 @@ private:
class ResolvedProject: public PersistentObject
{
public:
- typedef QSharedPointer<ResolvedProject> Ptr;
- typedef QSharedPointer<const ResolvedProject> ConstPtr;
-
- static Ptr create() { return Ptr(new ResolvedProject); }
+ static ResolvedProjectPtr create() { return ResolvedProjectPtr(new ResolvedProject); }
static QString deriveId(const QVariantMap &config);
static QString deriveBuildDirectory(const QString &buildRoot, const QString &id);
@@ -366,7 +345,7 @@ public:
QString qbsFile; // Not saved.
QString buildDirectory; // Not saved
QVariantMap platformEnvironment;
- QList<ResolvedProduct::Ptr> products;
+ QList<ResolvedProductPtr> products;
void setBuildConfiguration(const QVariantMap &config);
const QVariantMap &buildConfiguration() const { return m_buildConfiguration; }
diff --git a/src/lib/language/language.pri b/src/lib/language/language.pri
index d5fc7eeb2..8095dbb38 100644
--- a/src/lib/language/language.pri
+++ b/src/lib/language/language.pri
@@ -1,11 +1,10 @@
-INCLUDEPATH += $$PWD
-
HEADERS += \
$$PWD/jsimports.h \
$$PWD/loader.h \
$$PWD/language.h \
$$PWD/scriptengine.h \
- $$PWD/identifiersearch.h
+ $$PWD/identifiersearch.h \
+ $$PWD/forward_decls.h
SOURCES += \
$$PWD/loader.cpp \
diff --git a/src/lib/language/loader.cpp b/src/lib/language/loader.cpp
index 7af631eb0..2c6eec7af 100644
--- a/src/lib/language/loader.cpp
+++ b/src/lib/language/loader.cpp
@@ -396,7 +396,7 @@ public:
LoaderPrivate(ScriptEngine *engine);
void loadProject(const QString &fileName);
- ResolvedProject::Ptr resolveProject(const QString &buildRoot,
+ ResolvedProjectPtr resolveProject(const QString &buildRoot,
const QVariantMap &userProperties);
ProjectFile::Ptr parseFile(const QString &fileName);
@@ -418,9 +418,9 @@ public:
void evaluateDependencyConditions(EvaluationObject *evaluationObject);
void evaluateImports(Scope::Ptr target, const JsImports &jsImports);
void evaluatePropertyOptions(LanguageObject *object);
- QVariantMap evaluateAll(const ResolvedProduct::ConstPtr &rproduct,
+ QVariantMap evaluateAll(const ResolvedProductConstPtr &rproduct,
const Scope::Ptr &properties);
- QVariantMap evaluateModuleValues(const ResolvedProduct::ConstPtr &rproduct,
+ QVariantMap evaluateModuleValues(const ResolvedProductConstPtr &rproduct,
EvaluationObject *moduleContainer, Scope::Ptr objectScope);
void resolveInheritance(LanguageObject *object, EvaluationObject *evaluationObject,
ScopeChain::Ptr moduleScope = ScopeChain::Ptr(), const QVariantMap &userProperties = QVariantMap());
@@ -428,14 +428,14 @@ public:
void fillEvaluationObjectBasics(const ScopeChain::Ptr &scope, LanguageObject *object, EvaluationObject *evaluationObject);
void setupBuiltinDeclarations();
void setupInternalPrototype(LanguageObject *object, EvaluationObject *evaluationObject);
- void resolveModule(ResolvedProduct::Ptr rproduct, const QString &moduleName, EvaluationObject *module);
- void resolveGroup(ResolvedProduct::Ptr rproduct, EvaluationObject *product, EvaluationObject *group);
- void resolveProductModule(const ResolvedProduct::ConstPtr &rproduct, EvaluationObject *group);
- void resolveTransformer(ResolvedProduct::Ptr rproduct, EvaluationObject *trafo, ResolvedModule::ConstPtr module);
+ void resolveModule(ResolvedProductPtr rproduct, const QString &moduleName, EvaluationObject *module);
+ void resolveGroup(ResolvedProductPtr rproduct, EvaluationObject *product, EvaluationObject *group);
+ void resolveProductModule(const ResolvedProductConstPtr &rproduct, EvaluationObject *group);
+ void resolveTransformer(ResolvedProductPtr rproduct, EvaluationObject *trafo, ResolvedModuleConstPtr module);
void resolveProbe(EvaluationObject *node);
QList<EvaluationObject *> resolveCommonItems(const QList<EvaluationObject *> &objects,
- ResolvedProduct::Ptr rproduct, const ResolvedModule::ConstPtr &module);
- Rule::Ptr resolveRule(EvaluationObject *object, ResolvedModule::ConstPtr module);
+ ResolvedProductPtr rproduct, const ResolvedModuleConstPtr &module);
+ RulePtr resolveRule(EvaluationObject *object, ResolvedModuleConstPtr module);
FileTagger::ConstPtr resolveFileTagger(EvaluationObject *evaluationObject);
void buildModulesProperty(EvaluationObject *evaluationObject);
void checkModuleDependencies(const Module::Ptr &module);
@@ -453,28 +453,28 @@ public:
struct ProjectData
{
- QHash<ResolvedProduct::Ptr, ProductData> products;
+ QHash<ResolvedProductPtr, ProductData> products;
QList<ProductData> removedProducts;
};
- void resolveTopLevel(const ResolvedProject::Ptr &rproject,
+ void resolveTopLevel(const ResolvedProjectPtr &rproject,
LanguageObject *object,
const QString &projectFileName,
ProjectData *projectData,
- QList<Rule::Ptr> *globalRules,
+ QList<RulePtr> *globalRules,
QList<FileTagger::ConstPtr> *globalFileTaggers,
const QVariantMap &userProperties,
const ScopeChain::Ptr &scope,
- const ResolvedModule::ConstPtr &dummyModule);
+ const ResolvedModuleConstPtr &dummyModule);
void checkUserProperties(const ProjectData &projectData, const QVariantMap &userProperties);
- typedef QMultiMap<QString, ResolvedProduct::Ptr> ProductMap;
- void resolveProduct(const ResolvedProduct::Ptr &product, const ResolvedProject::Ptr &project,
+ typedef QMultiMap<QString, ResolvedProductPtr> ProductMap;
+ void resolveProduct(const ResolvedProductPtr &product, const ResolvedProjectPtr &project,
ProductData &data, ProductMap &products,
- const QList<Rule::Ptr> &globalRules,
+ const QList<RulePtr> &globalRules,
const QList<FileTagger::ConstPtr> &globalFileTaggers,
- const ResolvedModule::ConstPtr &dummyModule);
- void resolveProductDependencies(const ResolvedProject::Ptr &project, ProjectData &projectData,
+ const ResolvedModuleConstPtr &dummyModule);
+ void resolveProductDependencies(const ResolvedProjectPtr &project, ProjectData &projectData,
const ProductMap &resolvedProducts);
static LoaderPrivate *get(QScriptEngine *engine);
@@ -1140,7 +1140,7 @@ void Loader::setSearchPaths(const QStringList &searchPaths)
d->m_moduleSearchPaths += FileInfo::resolvePath(path, moduleSearchSubDir);
}
-ResolvedProject::Ptr Loader::loadProject(const QString &fileName, const QString &buildRoot,
+ResolvedProjectPtr Loader::loadProject(const QString &fileName, const QString &buildRoot,
const QVariantMap &userProperties)
{
TimedActivityLogger loadLogger(QLatin1String("Loading project"));
@@ -1814,13 +1814,13 @@ static void checkAllowedPropertyValues(const PropertyDeclaration &decl, const QS
throw Error(msg);
}
-static QString sourceDirPath(const Property &property, const ResolvedProduct::ConstPtr &rproduct)
+static QString sourceDirPath(const Property &property, const ResolvedProductConstPtr &rproduct)
{
return property.sourceObject
? FileInfo::path(property.sourceObject->file->fileName) : rproduct->sourceDirectory;
}
-QVariantMap Loader::LoaderPrivate::evaluateAll(const ResolvedProduct::ConstPtr &rproduct,
+QVariantMap Loader::LoaderPrivate::evaluateAll(const ResolvedProductConstPtr &rproduct,
const Scope::Ptr &properties)
{
checkCancelation();
@@ -1878,7 +1878,7 @@ static Scope::Ptr moduleScopeById(Scope::Ptr scope, const QStringList &moduleId)
return scope;
}
-QVariantMap Loader::LoaderPrivate::evaluateModuleValues(const ResolvedProduct::ConstPtr &rproduct,
+QVariantMap Loader::LoaderPrivate::evaluateModuleValues(const ResolvedProductConstPtr &rproduct,
EvaluationObject *moduleContainer, Scope::Ptr objectScope)
{
QVariantMap values;
@@ -2299,8 +2299,8 @@ static QHash<QString, ProjectFile *> findModuleDependencies(EvaluationObject *ro
return result;
}
-static void applyFileTaggers(const SourceArtifact::Ptr &artifact,
- const ResolvedProduct::ConstPtr &product)
+static void applyFileTaggers(const SourceArtifactPtr &artifact,
+ const ResolvedProductConstPtr &product)
{
if (!artifact->overrideFileTags || artifact->fileTags.isEmpty()) {
QSet<QString> fileTags = product->fileTagsForFileName(artifact->absoluteFilePath);
@@ -2333,7 +2333,7 @@ static bool checkCondition(EvaluationObject *object)
return true;
}
-ResolvedProject::Ptr Loader::LoaderPrivate::resolveProject(const QString &buildRoot,
+ResolvedProjectPtr Loader::LoaderPrivate::resolveProject(const QString &buildRoot,
const QVariantMap &userProperties)
{
Q_ASSERT(FileInfo::isAbsolute(buildRoot));
@@ -2342,7 +2342,7 @@ ResolvedProject::Ptr Loader::LoaderPrivate::resolveProject(const QString &buildR
ScriptEngineContextPusher contextPusher(m_engine);
m_scopesWithEvaluatedProperties->clear();
m_convertedScopesCache.clear();
- ResolvedProject::Ptr rproject = ResolvedProject::create();
+ ResolvedProjectPtr rproject = ResolvedProject::create();
rproject->qbsFile = m_project->fileName;
rproject->setBuildConfiguration(userProperties);
rproject->buildDirectory = ResolvedProject::deriveBuildDirectory(buildRoot, rproject->id());
@@ -2350,9 +2350,9 @@ ResolvedProject::Ptr Loader::LoaderPrivate::resolveProject(const QString &buildR
Scope::Ptr context = buildFileContext(m_project.data());
ScopeChain::Ptr scope(new ScopeChain(m_engine, context));
- ResolvedModule::Ptr dummyModule = ResolvedModule::create();
+ ResolvedModulePtr dummyModule = ResolvedModule::create();
dummyModule->jsImports = m_project->jsImports;
- QList<Rule::Ptr> globalRules;
+ QList<RulePtr> globalRules;
QList<FileTagger::ConstPtr> globalFileTaggers;
ProjectData projectData;
@@ -2367,7 +2367,7 @@ ResolvedProject::Ptr Loader::LoaderPrivate::resolveProject(const QString &buildR
dummyModule);
ProductMap resolvedProducts;
- QHash<ResolvedProduct::Ptr, ProductData>::iterator it = projectData.products.begin();
+ QHash<ResolvedProductPtr, ProductData>::iterator it = projectData.products.begin();
if (m_progressObserver)
m_progressObserver->initialize(Tr::tr("Loading project"), projectData.products.count());
for (; it != projectData.products.end(); ++it) {
@@ -2383,7 +2383,7 @@ ResolvedProject::Ptr Loader::LoaderPrivate::resolveProject(const QString &buildR
checkUserProperties(projectData, userProperties);
// Check all modules for unresolved dependencies.
- foreach (ResolvedProduct::Ptr rproduct, rproject->products)
+ foreach (ResolvedProductPtr rproduct, rproject->products)
foreach (Module::Ptr module, projectData.products.value(rproduct).product->modules)
checkModuleDependencies(module);
@@ -2393,9 +2393,9 @@ ResolvedProject::Ptr Loader::LoaderPrivate::resolveProject(const QString &buildR
return rproject;
}
-void Loader::LoaderPrivate::resolveModule(ResolvedProduct::Ptr rproduct, const QString &moduleName, EvaluationObject *module)
+void Loader::LoaderPrivate::resolveModule(ResolvedProductPtr rproduct, const QString &moduleName, EvaluationObject *module)
{
- ResolvedModule::Ptr rmodule = ResolvedModule::create();
+ ResolvedModulePtr rmodule = ResolvedModule::create();
rmodule->name = moduleName;
rmodule->jsImports = module->instantiatingObject()->file->jsImports;
rmodule->setupBuildEnvironmentScript = module->scope->verbatimValue("setupBuildEnvironment");
@@ -2416,14 +2416,14 @@ void Loader::LoaderPrivate::resolveModule(ResolvedProduct::Ptr rproduct, const Q
}
}
-static void createSourceArtifact(const ResolvedProduct::ConstPtr &rproduct,
- const PropertyMap::Ptr &properties,
+static void createSourceArtifact(const ResolvedProductConstPtr &rproduct,
+ const PropertyMapPtr &properties,
const QString &fileName,
const QSet<QString> &fileTags,
bool overrideTags,
- QList<SourceArtifact::Ptr> &artifactList)
+ QList<SourceArtifactPtr> &artifactList)
{
- SourceArtifact::Ptr artifact = SourceArtifact::create();
+ SourceArtifactPtr artifact = SourceArtifact::create();
artifact->absoluteFilePath = FileInfo::resolvePath(rproduct->sourceDirectory, fileName);
artifact->fileTags = fileTags;
artifact->overrideFileTags = overrideTags;
@@ -2434,11 +2434,11 @@ static void createSourceArtifact(const ResolvedProduct::ConstPtr &rproduct,
/**
* Resolve Group {} and the files part of Product {}.
*/
-void Loader::LoaderPrivate::resolveGroup(ResolvedProduct::Ptr rproduct, EvaluationObject *product, EvaluationObject *group)
+void Loader::LoaderPrivate::resolveGroup(ResolvedProductPtr rproduct, EvaluationObject *product, EvaluationObject *group)
{
const bool isGroup = product != group;
- PropertyMap::Ptr properties = rproduct->properties;
+ PropertyMapPtr properties = rproduct->properties;
if (isGroup) {
clearScopesCache();
@@ -2530,7 +2530,7 @@ void Loader::LoaderPrivate::resolveGroup(ResolvedProduct::Ptr rproduct, Evaluati
rproduct->groups += resolvedGroup;
}
-void Loader::LoaderPrivate::resolveProductModule(const ResolvedProduct::ConstPtr &rproduct,
+void Loader::LoaderPrivate::resolveProductModule(const ResolvedProductConstPtr &rproduct,
EvaluationObject *productModule)
{
Q_ASSERT(!rproduct->name.isEmpty());
@@ -2541,7 +2541,7 @@ void Loader::LoaderPrivate::resolveProductModule(const ResolvedProduct::ConstPtr
m_productModules.insert(rproduct->name.toLower(), moduleValues);
}
-void Loader::LoaderPrivate::resolveTransformer(ResolvedProduct::Ptr rproduct, EvaluationObject *trafo, ResolvedModule::ConstPtr module)
+void Loader::LoaderPrivate::resolveTransformer(ResolvedProductPtr rproduct, EvaluationObject *trafo, ResolvedModuleConstPtr module)
{
if (!checkCondition(trafo))
return;
@@ -2552,7 +2552,7 @@ void Loader::LoaderPrivate::resolveTransformer(ResolvedProduct::Ptr rproduct, Ev
rtrafo->inputs = trafo->scope->stringListValue("inputs");
for (int i=0; i < rtrafo->inputs.count(); ++i)
rtrafo->inputs[i] = FileInfo::resolvePath(rproduct->sourceDirectory, rtrafo->inputs[i]);
- const PrepareScript::Ptr transform = PrepareScript::create();
+ const PrepareScriptPtr transform = PrepareScript::create();
transform->script = trafo->scope->verbatimValue("prepare");
transform->location.fileName = trafo->instantiatingObject()->file->fileName;
transform->location.column = 1;
@@ -2563,7 +2563,7 @@ void Loader::LoaderPrivate::resolveTransformer(ResolvedProduct::Ptr rproduct, Ev
foreach (EvaluationObject *child, trafo->children) {
if (child->prototype != name_Artifact)
throw Error(Tr::tr("Transformer: wrong child type '%0'.").arg(child->prototype));
- SourceArtifact::Ptr artifact = SourceArtifact::create();
+ SourceArtifactPtr artifact = SourceArtifact::create();
artifact->properties = rproduct->properties;
QString fileName = child->scope->stringValue("fileName");
if (fileName.isEmpty())
@@ -2602,9 +2602,9 @@ void Loader::LoaderPrivate::resolveProbe(EvaluationObject *node)
*Resolve stuff that Module and Product have in common.
*/
QList<EvaluationObject *> Loader::LoaderPrivate::resolveCommonItems(const QList<EvaluationObject *> &objects,
- ResolvedProduct::Ptr rproduct, const ResolvedModule::ConstPtr &module)
+ ResolvedProductPtr rproduct, const ResolvedModuleConstPtr &module)
{
- QList<Rule::Ptr> rules;
+ QList<RulePtr> rules;
QList<EvaluationObject *> unhandledObjects;
foreach (EvaluationObject *object, objects) {
@@ -2612,7 +2612,7 @@ QList<EvaluationObject *> Loader::LoaderPrivate::resolveCommonItems(const QList<
if (hashPrototypeName == hashName_FileTagger) {
rproduct->fileTaggers.insert(resolveFileTagger(object));
} else if (hashPrototypeName == hashName_Rule) {
- const Rule::Ptr rule = resolveRule(object, module);
+ const RulePtr rule = resolveRule(object, module);
rproduct->rules.insert(rule);
rules.append(rule);
} else if (hashPrototypeName == hashName_Transformer) {
@@ -2629,17 +2629,17 @@ QList<EvaluationObject *> Loader::LoaderPrivate::resolveCommonItems(const QList<
return unhandledObjects;
}
-Rule::Ptr Loader::LoaderPrivate::resolveRule(EvaluationObject *object, ResolvedModule::ConstPtr module)
+RulePtr Loader::LoaderPrivate::resolveRule(EvaluationObject *object, ResolvedModuleConstPtr module)
{
- Rule::Ptr rule = Rule::create();
+ RulePtr rule = Rule::create();
// read artifacts
- QList<RuleArtifact::ConstPtr> artifacts;
+ QList<RuleArtifactConstPtr> artifacts;
bool hasAlwaysUpdatedArtifact = false;
foreach (EvaluationObject *child, object->children) {
const uint hashChildPrototypeName = qHash(child->prototype);
if (hashChildPrototypeName == hashName_Artifact) {
- RuleArtifact::Ptr artifact = RuleArtifact::create();
+ RuleArtifactPtr artifact = RuleArtifact::create();
artifacts.append(artifact);
artifact->fileName = child->scope->verbatimValue("fileName");
artifact->fileTags = child->scope->stringListValue("fileTags");
@@ -2668,7 +2668,7 @@ Rule::Ptr Loader::LoaderPrivate::resolveRule(EvaluationObject *object, ResolvedM
"must have alwaysUpdated set to true."),
object->instantiatingObject()->prototypeLocation);
- const PrepareScript::Ptr prepareScript = PrepareScript::create();
+ const PrepareScriptPtr prepareScript = PrepareScript::create();
prepareScript->script = object->scope->verbatimValue("prepare");
prepareScript->location.fileName = object->instantiatingObject()->file->fileName;
prepareScript->location.column = 1;
@@ -3136,15 +3136,15 @@ QScriptValue Loader::LoaderPrivate::js_configurationValue(QScriptContext *contex
return engine->toScriptValue(v);
}
-void Loader::LoaderPrivate::resolveTopLevel(const ResolvedProject::Ptr &rproject,
+void Loader::LoaderPrivate::resolveTopLevel(const ResolvedProjectPtr &rproject,
LanguageObject *object,
const QString &projectFileName,
ProjectData *projectData,
- QList<Rule::Ptr> *globalRules,
+ QList<RulePtr> *globalRules,
QList<FileTagger::ConstPtr> *globalFileTaggers,
const QVariantMap &userProperties,
const ScopeChain::Ptr &scope,
- const ResolvedModule::ConstPtr &dummyModule)
+ const ResolvedModuleConstPtr &dummyModule)
{
if (qbsLogLevel(LoggerTrace))
qbsTrace() << "[LDR] resolve top-level " << object->file->fileName;
@@ -3248,7 +3248,7 @@ void Loader::LoaderPrivate::resolveTopLevel(const ResolvedProject::Ptr &rproject
// set the 'path' and 'filePath' properties
setPathAndFilePath(evaluationObject->scope, object->file->fileName);
- const ResolvedProduct::Ptr rproduct = ResolvedProduct::create();
+ const ResolvedProductPtr rproduct = ResolvedProduct::create();
rproduct->qbsFile = projectFileName;
rproduct->qbsLine = evaluationObject->instantiatingObject()->prototypeLocation.line;
rproduct->sourceDirectory = QFileInfo(projectFileName).absolutePath();
@@ -3326,14 +3326,14 @@ void Loader::LoaderPrivate::checkUserProperties(const Loader::LoaderPrivate::Pro
{
QSet<QString> allowedUserPropertyNames;
allowedUserPropertyNames << QLatin1String("project");
- for (QHash<ResolvedProduct::Ptr, ProductData>::const_iterator it = projectData.products.constBegin();
+ for (QHash<ResolvedProductPtr, ProductData>::const_iterator it = projectData.products.constBegin();
it != projectData.products.constEnd(); ++it)
{
- const ResolvedProduct::Ptr &product = it.key();
+ const ResolvedProductPtr &product = it.key();
const ProductData &productData = it.value();
allowedUserPropertyNames += product->name;
allowedUserPropertyNames += productData.originalProductName;
- foreach (const ResolvedModule::ConstPtr &module, product->modules) {
+ foreach (const ResolvedModuleConstPtr &module, product->modules) {
allowedUserPropertyNames += module->name;
foreach (const QString &dependency, module->moduleDependencies)
allowedUserPropertyNames += dependency;
@@ -3354,10 +3354,10 @@ void Loader::LoaderPrivate::checkUserProperties(const Loader::LoaderPrivate::Pro
}
}
-void Loader::LoaderPrivate::resolveProduct(const ResolvedProduct::Ptr &rproduct,
- const ResolvedProject::Ptr &project, ProductData &data, Loader::LoaderPrivate::ProductMap &products,
- const QList<Rule::Ptr> &globalRules, const QList<FileTagger::ConstPtr> &globalFileTaggers,
- const ResolvedModule::ConstPtr &dummyModule)
+void Loader::LoaderPrivate::resolveProduct(const ResolvedProductPtr &rproduct,
+ const ResolvedProjectPtr &project, ProductData &data, Loader::LoaderPrivate::ProductMap &products,
+ const QList<RulePtr> &globalRules, const QList<FileTagger::ConstPtr> &globalFileTaggers,
+ const ResolvedModuleConstPtr &dummyModule)
{
Scope *productProps = data.product->scope.data();
@@ -3373,7 +3373,7 @@ void Loader::LoaderPrivate::resolveProduct(const ResolvedProduct::Ptr &rproduct,
rproduct->fileTags = productProps->stringListValue("type");
rproduct->destinationDirectory = productProps->stringValue("destination");
- foreach (const Rule::Ptr &rule, globalRules)
+ foreach (const RulePtr &rule, globalRules)
rproduct->rules.insert(rule);
foreach (const FileTagger::ConstPtr &fileTagger, globalFileTaggers)
rproduct->fileTaggers.insert(fileTagger);
@@ -3414,24 +3414,24 @@ void Loader::LoaderPrivate::resolveProduct(const ResolvedProduct::Ptr &rproduct,
}
// Apply file taggers.
- foreach (const SourceArtifact::Ptr &artifact, rproduct->allFiles())
+ foreach (const SourceArtifactPtr &artifact, rproduct->allFiles())
applyFileTaggers(artifact, rproduct);
foreach (const ResolvedTransformer::Ptr &transformer, rproduct->transformers)
- foreach (const SourceArtifact::Ptr &artifact, transformer->outputs)
+ foreach (const SourceArtifactPtr &artifact, transformer->outputs)
applyFileTaggers(artifact, rproduct);
// Merge duplicate artifacts.
- QHash<QString, QPair<ResolvedGroup::Ptr, SourceArtifact::Ptr> > uniqueArtifacts;
+ QHash<QString, QPair<ResolvedGroup::Ptr, SourceArtifactPtr> > uniqueArtifacts;
foreach (const ResolvedGroup::Ptr &group, rproduct->groups) {
Q_ASSERT(group->properties);
- QList<SourceArtifact::Ptr> artifactsInGroup = group->files;
+ QList<SourceArtifactPtr> artifactsInGroup = group->files;
if (group->wildcards)
artifactsInGroup += group->wildcards->files;
- foreach (const SourceArtifact::Ptr &artifact, artifactsInGroup) {
- QPair<ResolvedGroup::Ptr, SourceArtifact::Ptr> p = uniqueArtifacts.value(artifact->absoluteFilePath);
- SourceArtifact::Ptr existing = p.second;
+ foreach (const SourceArtifactPtr &artifact, artifactsInGroup) {
+ QPair<ResolvedGroup::Ptr, SourceArtifactPtr> p = uniqueArtifacts.value(artifact->absoluteFilePath);
+ SourceArtifactPtr existing = p.second;
if (existing) {
// if an artifact is in the product and in a group, prefer the group configuration
if (existing->properties != rproduct->properties)
@@ -3452,18 +3452,18 @@ void Loader::LoaderPrivate::resolveProduct(const ResolvedProduct::Ptr &rproduct,
project->products.append(rproduct);
}
-void Loader::LoaderPrivate::resolveProductDependencies(const ResolvedProject::Ptr &project,
+void Loader::LoaderPrivate::resolveProductDependencies(const ResolvedProjectPtr &project,
ProjectData &projectData, const ProductMap &resolvedProducts)
{
// Collect product dependencies from ProductModules.
bool productDependenciesAdded;
do {
productDependenciesAdded = false;
- foreach (ResolvedProduct::Ptr rproduct, project->products) {
+ foreach (ResolvedProductPtr rproduct, project->products) {
ProductData &productData = projectData.products[rproduct];
foreach (const UnknownModule::Ptr &unknownModule, productData.usedProducts) {
const QString &usedProductName = unknownModule->name;
- QList<ResolvedProduct::Ptr> usedProductCandidates = resolvedProducts.values(usedProductName);
+ QList<ResolvedProductPtr> usedProductCandidates = resolvedProducts.values(usedProductName);
if (usedProductCandidates.count() < 1) {
if (!unknownModule->required) {
if (!unknownModule->failureMessage.isEmpty())
@@ -3476,7 +3476,7 @@ void Loader::LoaderPrivate::resolveProductDependencies(const ResolvedProject::Pt
if (usedProductCandidates.count() > 1)
throw Error(Tr::tr("Product dependency '%1' is ambiguous.").arg(usedProductName),
CodeLocation(m_project->fileName));
- ResolvedProduct::Ptr usedProduct = usedProductCandidates.first();
+ ResolvedProductPtr usedProduct = usedProductCandidates.first();
const ProductData &usedProductData = projectData.products.value(usedProduct);
bool added;
productData.addUsedProducts(usedProductData.usedProductsFromProductModule, &added);
@@ -3487,10 +3487,10 @@ void Loader::LoaderPrivate::resolveProductDependencies(const ResolvedProject::Pt
} while (productDependenciesAdded);
// Resolve all inter-product dependencies.
- foreach (ResolvedProduct::Ptr rproduct, project->products) {
+ foreach (ResolvedProductPtr rproduct, project->products) {
foreach (const UnknownModule::Ptr &unknownModule, projectData.products.value(rproduct).usedProducts) {
const QString &usedProductName = unknownModule->name;
- QList<ResolvedProduct::Ptr> usedProductCandidates = resolvedProducts.values(usedProductName);
+ QList<ResolvedProductPtr> usedProductCandidates = resolvedProducts.values(usedProductName);
if (usedProductCandidates.count() < 1) {
if (!unknownModule->required) {
if (!unknownModule->failureMessage.isEmpty())
@@ -3503,7 +3503,7 @@ void Loader::LoaderPrivate::resolveProductDependencies(const ResolvedProject::Pt
if (usedProductCandidates.count() > 1)
throw Error(Tr::tr("Product dependency '%1' is ambiguous.").arg(usedProductName),
CodeLocation(m_project->fileName));
- ResolvedProduct::Ptr usedProduct = usedProductCandidates.first();
+ ResolvedProductPtr usedProduct = usedProductCandidates.first();
rproduct->dependencies.insert(usedProduct);
// insert the configuration of the ProductModule into the product's configuration
@@ -3518,7 +3518,7 @@ void Loader::LoaderPrivate::resolveProductDependencies(const ResolvedProject::Pt
rproduct->properties->setValue(productProperties);
// insert the configuration of the ProductModule into the artifact configurations
- foreach (SourceArtifact::Ptr artifact, rproduct->allFiles()) {
+ foreach (SourceArtifactPtr artifact, rproduct->allFiles()) {
if (artifact->properties == rproduct->properties)
continue; // Already inserted above.
QVariantMap sourceArtifactProperties = artifact->properties->value();
diff --git a/src/lib/language/loader.h b/src/lib/language/loader.h
index 0f61651c1..60a67d171 100644
--- a/src/lib/language/loader.h
+++ b/src/lib/language/loader.h
@@ -29,7 +29,7 @@
#ifndef LOADER_H
#define LOADER_H
-#include "language.h"
+#include "forward_decls.h"
#include <QStringList>
#include <QVariantMap>
@@ -47,7 +47,7 @@ public:
void setProgressObserver(ProgressObserver *observer);
void setSearchPaths(const QStringList &searchPaths);
- ResolvedProject::Ptr loadProject(const QString &fileName, const QString &buildRoot,
+ ResolvedProjectPtr loadProject(const QString &fileName, const QString &buildRoot,
const QVariantMap &userProperties);
QByteArray qmlTypeInfo();
diff --git a/src/lib/language/scriptengine.cpp b/src/lib/language/scriptengine.cpp
index d6e80c8fd..314bc338b 100644
--- a/src/lib/language/scriptengine.cpp
+++ b/src/lib/language/scriptengine.cpp
@@ -35,6 +35,8 @@
#include <QFile>
#include <QScriptProgram>
#include <QScriptValueIterator>
+#include <QSet>
+#include <QTextStream>
namespace qbs {
namespace Internal {
diff --git a/src/lib/language/scriptengine.h b/src/lib/language/scriptengine.h
index 88e41b271..8262827c8 100644
--- a/src/lib/language/scriptengine.h
+++ b/src/lib/language/scriptengine.h
@@ -30,12 +30,9 @@
#ifndef SCRIPTENGINE_H
#define SCRIPTENGINE_H
-#include "language.h" // ### remove
-#include <QScriptEngine>
+#include "jsimports.h"
-QT_BEGIN_NAMESPACE
-class QScriptEngine;
-QT_END_NAMESPACE
+#include <QScriptEngine>
namespace qbs {
namespace Internal {
diff --git a/src/lib/lib.pro b/src/lib/lib.pro
index 65c17f1c1..f157d96ca 100644
--- a/src/lib/lib.pro
+++ b/src/lib/lib.pro
@@ -2,6 +2,7 @@ QT = core script
greaterThan(QT_MAJOR_VERSION, 4): QT += concurrent
TEMPLATE = lib
DESTDIR = ../../lib
+INCLUDEPATH += $$PWD
TARGET = qbscore
CONFIG += static depend_includepath
diff --git a/src/lib/logging/logging.pri b/src/lib/logging/logging.pri
index 0c5030903..d87a15d5e 100644
--- a/src/lib/logging/logging.pri
+++ b/src/lib/logging/logging.pri
@@ -1,5 +1,3 @@
-INCLUDEPATH += $$PWD/.. $$PWD/../..
-
HEADERS += \
$$PWD/logger.h \
$$PWD/consolelogger.h \
diff --git a/src/lib/tools/persistence.h b/src/lib/tools/persistence.h
index b90798420..7a84ca3d4 100644
--- a/src/lib/tools/persistence.h
+++ b/src/lib/tools/persistence.h
@@ -60,7 +60,7 @@ public:
template <typename T> T *idLoad();
template <typename T> void loadContainer(T &container);
- template <class T> typename T::Ptr idLoadS();
+ template <class T> QSharedPointer<T> idLoadS();
template <typename T> void loadContainerS(T &container);
void store(const QSharedPointer<const PersistentObject> &ptr) { store(ptr.data()); }
@@ -91,7 +91,7 @@ private:
template <class T> struct RemoveConst<const T> { typedef T Type; };
template <class T> T *loadRaw(PersistentObjectId id);
- template <class T> typename T::Ptr load(PersistentObjectId id);
+ template <class T> QSharedPointer<T> load(PersistentObjectId id);
QDataStream m_stream;
HeadData m_headData;
@@ -122,7 +122,7 @@ template <typename T> inline void PersistentPool::loadContainer(T &container)
container += idLoad<typename RemovePointer<typename T::value_type>::Type>();
}
-template <class T> inline typename T::Ptr PersistentPool::idLoadS()
+template <class T> inline QSharedPointer<T> PersistentPool::idLoadS()
{
PersistentObjectId id;
m_stream >> id;
@@ -170,10 +170,10 @@ template <class T> inline T *PersistentPool::loadRaw(PersistentObjectId id)
return static_cast<T*>(obj);
}
-template <class T> inline typename T::Ptr PersistentPool::load(PersistentObjectId id)
+template <class T> inline QSharedPointer<T> PersistentPool::load(PersistentObjectId id)
{
if (id < 0)
- return typename T::Ptr();
+ return QSharedPointer<T>();
QSharedPointer<PersistentObject> obj;
if (id < m_loaded.count()) {
diff --git a/src/lib/tools/tools.pri b/src/lib/tools/tools.pri
index be0f09b37..1f3da7294 100644
--- a/src/lib/tools/tools.pri
+++ b/src/lib/tools/tools.pri
@@ -1,4 +1,4 @@
-INCLUDEPATH += $$PWD $$PWD/.. $$PWD/../.. $$PWD/../../..
+INCLUDEPATH += $$PWD/../.. # for plugins
HEADERS += \
$$PWD/codelocation.h \
diff --git a/tests/auto/buildgraph/tst_buildgraph.cpp b/tests/auto/buildgraph/tst_buildgraph.cpp
index ea0511976..cf8fb479b 100644
--- a/tests/auto/buildgraph/tst_buildgraph.cpp
+++ b/tests/auto/buildgraph/tst_buildgraph.cpp
@@ -29,7 +29,9 @@
#include "tst_buildgraph.h"
#include <buildgraph/artifact.h>
+#include <buildgraph/buildgraph.h>
#include <buildgraph/cycledetector.h>
+#include <language/language.h>
#include <tools/error.h>
#include <QtTest>
@@ -47,7 +49,7 @@ void TestBuildGraph::cleanupTestCase()
}
-static bool cycleDetected(const BuildProduct::ConstPtr &product)
+static bool cycleDetected(const BuildProductConstPtr &product)
{
try {
CycleDetector().visitProduct(product);
@@ -57,19 +59,19 @@ static bool cycleDetected(const BuildProduct::ConstPtr &product)
}
}
-BuildProduct::ConstPtr TestBuildGraph::productWithDirectCycle()
+BuildProductConstPtr TestBuildGraph::productWithDirectCycle()
{
Artifact * const root = new Artifact;
Artifact * const child = new Artifact;
m_artifacts << root << child;
root->children.insert(child);
child->children.insert(root);
- const BuildProduct::Ptr product = BuildProduct::create();
+ const BuildProductPtr product = BuildProduct::create();
product->targetArtifacts.insert(root);
return product;
}
-BuildProduct::ConstPtr TestBuildGraph::productWithLessDirectCycle()
+BuildProductConstPtr TestBuildGraph::productWithLessDirectCycle()
{
Artifact * const root = new Artifact;
Artifact * const child = new Artifact;
@@ -78,19 +80,19 @@ BuildProduct::ConstPtr TestBuildGraph::productWithLessDirectCycle()
root->children.insert(child);
child->children.insert(grandchild);
grandchild->children.insert(root);
- const BuildProduct::Ptr product = BuildProduct::create();
+ const BuildProductPtr product = BuildProduct::create();
product->targetArtifacts << root;
return product;
}
// root appears as a child, but in a different tree
-BuildProduct::ConstPtr TestBuildGraph::productWithNoCycle()
+BuildProductConstPtr TestBuildGraph::productWithNoCycle()
{
Artifact * const root = new Artifact;
Artifact * const root2 = new Artifact;
m_artifacts << root << root2;
root2->children.insert(root);
- const BuildProduct::Ptr product = BuildProduct::create();
+ const BuildProductPtr product = BuildProduct::create();
product->targetArtifacts << root << root2;
return product;
}
diff --git a/tests/auto/buildgraph/tst_buildgraph.h b/tests/auto/buildgraph/tst_buildgraph.h
index 835764c8d..9e5905dd5 100644
--- a/tests/auto/buildgraph/tst_buildgraph.h
+++ b/tests/auto/buildgraph/tst_buildgraph.h
@@ -29,13 +29,11 @@
#ifndef TST_BUILDGRAPH_H
#define TST_BUILDGRAPH_H
-#include <buildgraph/buildgraph.h>
+#include <buildgraph/forward_decls.h>
#include <QList>
#include <QObject>
-namespace qbs { namespace Internal { class Artifact; } }
-
class TestBuildGraph : public QObject
{
Q_OBJECT
@@ -47,9 +45,9 @@ private slots:
void testCycle();
private:
- qbs::Internal::BuildProduct::ConstPtr productWithDirectCycle();
- qbs::Internal::BuildProduct::ConstPtr productWithLessDirectCycle();
- qbs::Internal::BuildProduct::ConstPtr productWithNoCycle();
+ qbs::Internal::BuildProductConstPtr productWithDirectCycle();
+ qbs::Internal::BuildProductConstPtr productWithLessDirectCycle();
+ qbs::Internal::BuildProductConstPtr productWithNoCycle();
QList<qbs::Internal::Artifact *> m_artifacts;
};
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index 9dd93af8f..ac7140df0 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -30,28 +30,29 @@
#include "tst_language.h"
#include <language/identifiersearch.h>
+#include <language/language.h>
#include <language/scriptengine.h>
#include <parser/qmljslexer_p.h>
#include <parser/qmljsparser_p.h>
#include <tools/error.h>
-QHash<QString, ResolvedProduct::Ptr> TestLanguage::productsFromProject(ResolvedProject::Ptr project)
+QHash<QString, ResolvedProductPtr> TestLanguage::productsFromProject(ResolvedProjectPtr project)
{
- QHash<QString, ResolvedProduct::Ptr> result;
- foreach (ResolvedProduct::Ptr product, project->products)
+ QHash<QString, ResolvedProductPtr> result;
+ foreach (ResolvedProductPtr product, project->products)
result.insert(product->name, product);
return result;
}
-ResolvedModule::ConstPtr TestLanguage::findModuleByName(ResolvedProduct::Ptr product, const QString &name)
+ResolvedModuleConstPtr TestLanguage::findModuleByName(ResolvedProductPtr product, const QString &name)
{
- foreach (const ResolvedModule::ConstPtr &module, product->modules)
+ foreach (const ResolvedModuleConstPtr &module, product->modules)
if (module->name == name)
return module;
- return ResolvedModule::ConstPtr();
+ return ResolvedModuleConstPtr();
}
-QVariant TestLanguage::productPropertyValue(ResolvedProduct::Ptr product, QString propertyName)
+QVariant TestLanguage::productPropertyValue(ResolvedProductPtr product, QString propertyName)
{
QStringList propertyNameComponents = propertyName.split(QLatin1Char('.'));
if (propertyNameComponents.count() > 1)
@@ -79,13 +80,13 @@ void TestLanguage::cleanupTestCase()
void TestLanguage::conditionalDepends()
{
bool exceptionCaught = false;
- ResolvedProduct::Ptr product;
- ResolvedModule::ConstPtr dependency;
+ ResolvedProductPtr product;
+ ResolvedModuleConstPtr dependency;
try {
project = loader->loadProject(SRCDIR "testdata/conditionaldepends.qbs",
"/some/build/directory", buildConfig);
QVERIFY(project);
- QHash<QString, ResolvedProduct::Ptr> products = productsFromProject(project);
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
product = products.value("conditionaldepends_derived");
QVERIFY(product);
@@ -95,7 +96,7 @@ void TestLanguage::conditionalDepends()
product = products.value("conditionaldepends_derived_false");
QVERIFY(product);
dependency = findModuleByName(product, "dummy");
- QCOMPARE(dependency, ResolvedModule::ConstPtr());
+ QCOMPARE(dependency, ResolvedModuleConstPtr());
product = products.value("product_props_true");
QVERIFY(product);
@@ -105,7 +106,7 @@ void TestLanguage::conditionalDepends()
product = products.value("product_props_false");
QVERIFY(product);
dependency = findModuleByName(product, "dummy");
- QCOMPARE(dependency, ResolvedModule::ConstPtr());
+ QCOMPARE(dependency, ResolvedModuleConstPtr());
product = products.value("project_props_true");
QVERIFY(product);
@@ -115,7 +116,7 @@ void TestLanguage::conditionalDepends()
product = products.value("project_props_false");
QVERIFY(product);
dependency = findModuleByName(product, "dummy");
- QCOMPARE(dependency, ResolvedModule::ConstPtr());
+ QCOMPARE(dependency, ResolvedModuleConstPtr());
product = products.value("module_props_true");
QVERIFY(product);
@@ -129,7 +130,7 @@ void TestLanguage::conditionalDepends()
dependency = findModuleByName(product, "dummy2");
QVERIFY(dependency);
dependency = findModuleByName(product, "dummy");
- QCOMPARE(dependency, ResolvedModule::ConstPtr());
+ QCOMPARE(dependency, ResolvedModuleConstPtr());
product = products.value("contradictory_conditions1");
QVERIFY(product);
@@ -151,13 +152,13 @@ void TestLanguage::groupName()
{
bool exceptionCaught = false;
try {
- ResolvedProject::Ptr project = loader->loadProject(SRCDIR "testdata/groupname.qbs",
+ ResolvedProjectPtr project = loader->loadProject(SRCDIR "testdata/groupname.qbs",
"/some/build/directory", buildConfig);
QVERIFY(project);
- QHash<QString, ResolvedProduct::Ptr> products = productsFromProject(project);
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.count(), 2);
- ResolvedProduct::Ptr product = products.value("MyProduct");
+ ResolvedProductPtr product = products.value("MyProduct");
QVERIFY(product);
QCOMPARE(product->groups.count(), 2);
ResolvedGroup::ConstPtr group = product->groups.at(0);
@@ -275,12 +276,12 @@ void TestLanguage::jsImportUsedInMultipleScopes()
QVariantMap customBuildConfig = buildConfig;
setConfigProperty(customBuildConfig, QStringList() << "qbs" << "buildVariant",
buildVariant);
- ResolvedProject::Ptr project = loader->loadProject(SRCDIR "testdata/jsimportsinmultiplescopes.qbs",
+ ResolvedProjectPtr project = loader->loadProject(SRCDIR "testdata/jsimportsinmultiplescopes.qbs",
"/some/build/directory", customBuildConfig);
QVERIFY(project);
- QHash<QString, ResolvedProduct::Ptr> products = productsFromProject(project);
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.count(), 1);
- ResolvedProduct::Ptr product = products.values().first();
+ ResolvedProductPtr product = products.values().first();
QVERIFY(product);
QCOMPARE(product->name, expectedProductName);
}
@@ -295,10 +296,10 @@ void TestLanguage::productConditions()
{
bool exceptionCaught = false;
try {
- ResolvedProject::Ptr project = loader->loadProject(SRCDIR "testdata/productconditions.qbs",
+ ResolvedProjectPtr project = loader->loadProject(SRCDIR "testdata/productconditions.qbs",
"/some/build/directory", buildConfig);
QVERIFY(project);
- QHash<QString, ResolvedProduct::Ptr> products = productsFromProject(project);
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.count(), 3);
QVERIFY(products.value("product_no_condition"));
QVERIFY(products.value("product_true_condition"));
@@ -345,15 +346,15 @@ void TestLanguage::propertiesBlocks()
QCOMPARE(exceptionCaught, false);
return;
} else if (productName == "cleanup") {
- project = ResolvedProject::Ptr();
+ project = ResolvedProjectPtr();
return;
}
QFETCH(QString, propertyName);
QFETCH(QStringList, expectedValues);
QVERIFY(project);
- QHash<QString, ResolvedProduct::Ptr> products = productsFromProject(project);
- ResolvedProduct::Ptr product = products.value(productName);
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
+ ResolvedProductPtr product = products.value(productName);
QVERIFY(product);
QCOMPARE(product->name, productName);
QVariant v = productPropertyValue(product, propertyName);
@@ -393,21 +394,21 @@ void TestLanguage::fileTags()
QCOMPARE(exceptionCaught, false);
return;
} else if (productName == QLatin1String("cleanup")) {
- project = ResolvedProject::Ptr();
+ project = ResolvedProjectPtr();
return;
}
QVERIFY(project);
QFETCH(int, numberOfGroups);
QFETCH(QStringList, expectedFileTags);
- QHash<QString, ResolvedProduct::Ptr> products = productsFromProject(project);
- ResolvedProduct::Ptr product;
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
+ ResolvedProductPtr product;
QVERIFY(product = products.value(productName));
QCOMPARE(product->groups.count(), numberOfGroups);
ResolvedGroup::Ptr group = product->groups.last();
QVERIFY(group);
QCOMPARE(group->files.count(), 1);
- SourceArtifact::ConstPtr sourceFile = group->files.first();
+ SourceArtifactConstPtr sourceFile = group->files.first();
QStringList fileTags = sourceFile->fileTags.toList();
fileTags.sort();
QCOMPARE(fileTags, expectedFileTags);
diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h
index 637030dcc..5091a80ca 100644
--- a/tests/auto/language/tst_language.h
+++ b/tests/auto/language/tst_language.h
@@ -30,6 +30,7 @@
#ifndef TST_LANGUAGE_H
#define TST_LANGUAGE_H
+#include <language/forward_decls.h>
#include <language/loader.h>
#include <logging/consolelogger.h>
#include <logging/logger.h>
@@ -42,12 +43,12 @@ class TestLanguage : public QObject
{
Q_OBJECT
Loader *loader;
- ResolvedProject::Ptr project;
+ ResolvedProjectPtr project;
QVariantMap buildConfig;
- QHash<QString, ResolvedProduct::Ptr> productsFromProject(ResolvedProject::Ptr project);
- ResolvedModule::ConstPtr findModuleByName(ResolvedProduct::Ptr product, const QString &name);
- QVariant productPropertyValue(ResolvedProduct::Ptr product, QString propertyName);
+ QHash<QString, ResolvedProductPtr> productsFromProject(ResolvedProjectPtr project);
+ ResolvedModuleConstPtr findModuleByName(ResolvedProductPtr product, const QString &name);
+ QVariant productPropertyValue(ResolvedProductPtr product, QString propertyName);
private slots:
void initTestCase();