aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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();