diff options
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(); |