diff options
Diffstat (limited to 'src/lib/corelib/buildgraph')
35 files changed, 140 insertions, 134 deletions
diff --git a/src/lib/corelib/buildgraph/artifactcleaner.cpp b/src/lib/corelib/buildgraph/artifactcleaner.cpp index 000dfda02..03b327232 100644 --- a/src/lib/corelib/buildgraph/artifactcleaner.cpp +++ b/src/lib/corelib/buildgraph/artifactcleaner.cpp @@ -162,7 +162,7 @@ ArtifactCleaner::ArtifactCleaner(Logger logger, ProgressObserver *observer) } void ArtifactCleaner::cleanup(const TopLevelProjectPtr &project, - const QList<ResolvedProductPtr> &products, const CleanOptions &options) + const QVector<ResolvedProductPtr> &products, const CleanOptions &options) { m_hasError = false; diff --git a/src/lib/corelib/buildgraph/artifactcleaner.h b/src/lib/corelib/buildgraph/artifactcleaner.h index 5112a75d6..8d0bef275 100644 --- a/src/lib/corelib/buildgraph/artifactcleaner.h +++ b/src/lib/corelib/buildgraph/artifactcleaner.h @@ -54,7 +54,7 @@ class ArtifactCleaner { public: ArtifactCleaner(Logger logger, ProgressObserver *observer); - void cleanup(const TopLevelProjectPtr &project, const QList<ResolvedProductPtr> &products, + void cleanup(const TopLevelProjectPtr &project, const QVector<ResolvedProductPtr> &products, const CleanOptions &options); private: diff --git a/src/lib/corelib/buildgraph/artifactvisitor.cpp b/src/lib/corelib/buildgraph/artifactvisitor.cpp index c28f07424..22c987572 100644 --- a/src/lib/corelib/buildgraph/artifactvisitor.cpp +++ b/src/lib/corelib/buildgraph/artifactvisitor.cpp @@ -61,7 +61,7 @@ void ArtifactVisitor::visitProduct(const ResolvedProductConstPtr &product) void ArtifactVisitor::visitProject(const ResolvedProjectConstPtr &project) { - for (const ResolvedProductConstPtr &product : project->allProducts()) + for (const auto &product : project->allProducts()) visitProduct(product); } diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp index 3726c654d..0d5e8a1f0 100644 --- a/src/lib/corelib/buildgraph/buildgraph.cpp +++ b/src/lib/corelib/buildgraph/buildgraph.cpp @@ -278,7 +278,7 @@ private: } return result; } - for (const ResolvedModuleConstPtr &dependency : product->modules) { + for (const auto &dependency : product->modules) { if (dependency->isProduct) continue; QScriptValue obj = engine->newObject(engine->modulePropertyScriptClass()); @@ -661,7 +661,7 @@ void provideFullFileTagsAndProperties(Artifact *artifact) artifact->properties = artifact->product->moduleProperties; FileTags allTags = artifact->pureFileTags.empty() ? artifact->product->fileTagsForFileName(artifact->fileName()) : artifact->pureFileTags; - for (const ArtifactPropertiesConstPtr &props : artifact->product->artifactProperties) { + for (const auto &props : artifact->product->artifactProperties) { if (allTags.intersects(props->fileTagsFilter())) { artifact->properties = props->propertyMap(); allTags += props->extraFileTags(); @@ -733,7 +733,7 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product, CycleDetector cycleDetector(logger); cycleDetector.visitProduct(product); const ProductBuildData * const buildData = product->buildData.get(); - for (const ResolvedModuleConstPtr &m : product->modules) + for (const auto &m : product->modules) QBS_CHECK(m->product == product.get()); qCDebug(lcBuildGraph) << "enabled:" << product->enabled << "build data:" << buildData; if (product->enabled) @@ -836,7 +836,7 @@ static void doSanityChecks(const ResolvedProjectPtr &project, for (const ResolvedProjectPtr &subProject : qAsConst(project->subProjects)) doSanityChecks(subProject, allProducts, productNames, logger); - for (const ResolvedProductConstPtr &product : project->products) { + for (const auto &product : project->products) { QBS_CHECK(product->project == project); QBS_CHECK(product->topLevelProject() == project->topLevelProject()); doSanityChecksForProduct(product, allProducts, logger); diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp index bf6c30dcd..58a34b616 100644 --- a/src/lib/corelib/buildgraph/buildgraphloader.cpp +++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp @@ -71,6 +71,7 @@ #include <algorithm> #include <functional> +#include <memory> #include <unordered_map> namespace qbs { @@ -273,7 +274,7 @@ static void updateProductAndRulePointers(const ResolvedProductPtr &newProduct) const auto it = ruleMap.find(oldRule); if (it != ruleMap.cend()) return it->second; - for (const RuleConstPtr &r : qAsConst(newProduct->rules)) { + for (const auto &r : qAsConst(newProduct->rules)) { if (*r == *oldRule) { ruleMap.insert(std::make_pair(oldRule, r)); return r; @@ -362,7 +363,7 @@ void BuildGraphLoader::trackProjectChanges() ChildListHash childLists; if (!changedProducts.empty()) { oldBuildData = std::make_shared<ProjectBuildData>(restoredProject->buildData.get()); - for (const ResolvedProductConstPtr &product : qAsConst(allRestoredProducts)) { + for (const auto &product : qAsConst(allRestoredProducts)) { if (!product->buildData) continue; @@ -451,7 +452,7 @@ void BuildGraphLoader::trackProjectChanges() updateGeneratedArtifacts(product.get()); } - for (const ResolvedProductConstPtr &changedProduct : qAsConst(changedProducts)) { + for (const auto &changedProduct : qAsConst(changedProducts)) { rescueOldBuildData(changedProduct, m_freshProductsByName.value(changedProduct->uniqueName()), childLists, rescuableArtifactData.value(changedProduct->uniqueName())); @@ -614,7 +615,7 @@ bool BuildGraphLoader::hasProductFileChanged(const std::vector<ResolvedProductPt FileInfo::path(group->location.filePath()), product->topLevelProject()->buildDirectory); Set<QString> wcFiles; - for (const SourceArtifactConstPtr &sourceArtifact : group->wildcards->files) + for (const auto &sourceArtifact : group->wildcards->files) wcFiles += sourceArtifact->absoluteFilePath; if (files == wcFiles) continue; @@ -741,9 +742,9 @@ static bool dependenciesAreEqual(const ResolvedProductConstPtr &p1, return false; Set<QString> names1; Set<QString> names2; - for (const ResolvedProductConstPtr &dep : qAsConst(p1->dependencies)) + for (const auto &dep : qAsConst(p1->dependencies)) names1 << dep->uniqueName(); - for (const ResolvedProductConstPtr &dep : qAsConst(p2->dependencies)) + for (const auto &dep : qAsConst(p2->dependencies)) names2 << dep->uniqueName(); return names1 == names2; } @@ -909,7 +910,7 @@ void BuildGraphLoader::rescueOldBuildData(const ResolvedProductConstPtr &restore if (!restoredProduct->buildData) return; if (!newlyResolvedProduct->buildData) - newlyResolvedProduct->buildData.reset(new ProductBuildData); + newlyResolvedProduct->buildData = std::make_unique<ProductBuildData>(); qCDebug(lcBuildGraph) << "rescue data of product" << restoredProduct->uniqueName(); QBS_CHECK(newlyResolvedProduct->buildData); diff --git a/src/lib/corelib/buildgraph/buildgraphloader.h b/src/lib/corelib/buildgraph/buildgraphloader.h index 9363b8358..c62ba7fa7 100644 --- a/src/lib/corelib/buildgraph/buildgraphloader.h +++ b/src/lib/corelib/buildgraph/buildgraphloader.h @@ -121,9 +121,9 @@ private: bool checkConfigCompatibility(); struct ChildrenInfo { - ChildrenInfo() {} - ChildrenInfo(const ArtifactSet &c1, const ArtifactSet &c2) - : children(c1), childrenAddedByScanner(c2) {} + ChildrenInfo() = default; + ChildrenInfo(ArtifactSet c1, ArtifactSet c2) + : children(std::move(c1)), childrenAddedByScanner(std::move(c2)) {} ArtifactSet children; ArtifactSet childrenAddedByScanner; }; diff --git a/src/lib/corelib/buildgraph/depscanner.h b/src/lib/corelib/buildgraph/depscanner.h index ffc0b83de..6b18004f9 100644 --- a/src/lib/corelib/buildgraph/depscanner.h +++ b/src/lib/corelib/buildgraph/depscanner.h @@ -61,7 +61,7 @@ class ScriptEngine; class DependencyScanner { public: - virtual ~DependencyScanner() {} + virtual ~DependencyScanner() = default; QString id() const; diff --git a/src/lib/corelib/buildgraph/environmentscriptrunner.cpp b/src/lib/corelib/buildgraph/environmentscriptrunner.cpp index 7d82efb41..9dafbf296 100644 --- a/src/lib/corelib/buildgraph/environmentscriptrunner.cpp +++ b/src/lib/corelib/buildgraph/environmentscriptrunner.cpp @@ -129,12 +129,12 @@ void EnvironmentScriptRunner::setupEnvironment() return; QMap<QString, const ResolvedModule *> moduleMap; - for (const ResolvedModuleConstPtr &module : m_product->modules) + for (const auto &module : m_product->modules) moduleMap.insert(module->name, module.get()); QHash<const ResolvedModule*, QList<const ResolvedModule*> > moduleParents; QHash<const ResolvedModule*, QList<const ResolvedModule*> > moduleChildren; - for (const ResolvedModuleConstPtr &module : m_product->modules) { + for (const auto &module : m_product->modules) { for (const QString &moduleName : qAsConst(module->moduleDependencies)) { const ResolvedModule * const depmod = moduleMap.value(moduleName); QBS_ASSERT(depmod, return); @@ -144,7 +144,7 @@ void EnvironmentScriptRunner::setupEnvironment() } QList<const ResolvedModule *> rootModules; - for (const ResolvedModuleConstPtr &module : m_product->modules) { + for (const auto &module : m_product->modules) { if (moduleParents.value(module.get()).isEmpty()) { QBS_ASSERT(module, return); rootModules.push_back(module.get()); diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp index de81ada20..377222d21 100644 --- a/src/lib/corelib/buildgraph/executor.cpp +++ b/src/lib/corelib/buildgraph/executor.cpp @@ -102,12 +102,8 @@ Executor::Executor(Logger logger, QObject *parent) Executor::~Executor() { - // jobs must be destroyed before deleting the shared scan result cache - for (ExecutorJob *job : qAsConst(m_availableJobs)) - delete job; - const auto processingJobs = m_processingJobs.keys(); - for (ExecutorJob *job : processingJobs) - delete job; + // jobs must be destroyed before deleting the m_inputArtifactScanContext + m_allJobs.clear(); delete m_inputArtifactScanContext; delete m_productInstaller; } @@ -153,7 +149,7 @@ void Executor::retrieveSourceFileTimestamp(Artifact *artifact) const void Executor::build() { try { - m_partialBuild = m_productsToBuild.size() != m_allProducts.size(); + m_partialBuild = size_t(m_productsToBuild.size()) != m_allProducts.size(); doBuild(); } catch (const ErrorInfo &e) { handleError(e); @@ -170,7 +166,7 @@ void Executor::setProject(const TopLevelProjectPtr &project) m_projectsByName.insert(std::make_pair(p->name, p.get())); } -void Executor::setProducts(const std::vector<ResolvedProductPtr> &productsToBuild) +void Executor::setProducts(const QVector<ResolvedProductPtr> &productsToBuild) { m_productsToBuild = productsToBuild; m_productsByName.clear(); @@ -266,8 +262,7 @@ void Executor::doBuild() doSanityChecks(); QBS_CHECK(!m_project->buildData->evaluationContext); - m_project->buildData->evaluationContext - = RulesEvaluationContextPtr(new RulesEvaluationContext(m_logger)); + m_project->buildData->evaluationContext = std::make_shared<RulesEvaluationContext>(m_logger); m_evalContext = m_project->buildData->evaluationContext; m_elapsedTimeRules = m_elapsedTimeScanners = m_elapsedTimeInstalling = 0; @@ -700,7 +695,7 @@ bool Executor::transformerHasMatchingInputFiles(const TransformerConstPtr &trans void Executor::setupJobLimits() { Settings settings(m_buildOptions.settingsDirectory()); - for (const ResolvedProductConstPtr &p : m_productsToBuild) { + for (const auto &p : qAsConst(m_productsToBuild)) { const Preferences prefs(&settings, p->profile()); const JobLimits &jobLimitsFromSettings = prefs.jobLimits(); JobLimits effectiveJobLimits; @@ -737,7 +732,7 @@ void Executor::setupProgressObserver() if (!m_progressObserver) return; int totalEffort = 1; // For the effort after the last rule application; - for (const ResolvedProductConstPtr &product : qAsConst(m_productsToBuild)) { + for (const auto &product : qAsConst(m_productsToBuild)) { QBS_CHECK(product->buildData); const auto filtered = filterByType<RuleNode>(product->buildData->allNodes()); totalEffort += std::distance(filtered.begin(), filtered.end()); @@ -749,7 +744,7 @@ void Executor::doSanityChecks() { QBS_CHECK(m_project); QBS_CHECK(!m_productsToBuild.empty()); - for (const ResolvedProductConstPtr &product : qAsConst(m_productsToBuild)) { + for (const auto &product : qAsConst(m_productsToBuild)) { QBS_CHECK(product->buildData); QBS_CHECK(product->topLevelProject() == m_project.get()); } @@ -768,10 +763,13 @@ void Executor::handleError(const ErrorInfo &error) void Executor::addExecutorJobs() { - qCDebug(lcExec) << "preparing executor for" << m_buildOptions.maxJobCount() - << "jobs in parallel"; - for (int i = 1; i <= m_buildOptions.maxJobCount(); i++) { - const auto job = new ExecutorJob(m_logger, this); + const int count = m_buildOptions.maxJobCount(); + qCDebug(lcExec) << "preparing executor for" << count << "jobs in parallel"; + m_allJobs.reserve(count); + m_availableJobs.reserve(count); + for (int i = 1; i <= count; i++) { + m_allJobs.push_back(std::make_unique<ExecutorJob>(m_logger)); + const auto job = m_allJobs.back().get(); job->setMainThreadScriptEngine(m_evalContext->engine()); job->setObjectName(QStringLiteral("J%1").arg(i)); job->setDryRun(m_buildOptions.dryRun()); @@ -1084,7 +1082,7 @@ void Executor::checkForUnbuiltProducts() if (m_buildOptions.executeRulesOnly()) return; std::vector<ResolvedProductPtr> unbuiltProducts; - for (const ResolvedProductPtr &product : m_productsToBuild) { + for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild)) { bool productBuilt = true; for (BuildGraphNode *rootNode : qAsConst(product->buildData->rootNodes())) { if (rootNode->buildState != BuildGraphNode::Built) { @@ -1206,7 +1204,7 @@ void Executor::prepareAllNodes() node->buildState = BuildGraphNode::Untouched; } } - for (const ResolvedProductPtr &product : m_productsToBuild) { + for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild)) { QBS_CHECK(product->buildData); for (Artifact * const artifact : filterByType<Artifact>(product->buildData->allNodes())) prepareArtifact(artifact); @@ -1228,7 +1226,7 @@ void Executor::syncFileDependencies() "removing from lookup table"; m_project->buildData->removeFromLookupTable(dep); bool isReferencedByArtifact = false; - for (const ResolvedProductConstPtr &product : m_allProducts) { + for (const auto &product : m_allProducts) { if (!product->buildData) continue; const auto artifactList = filterByType<Artifact>(product->buildData->allNodes()); @@ -1310,7 +1308,7 @@ void Executor::prepareProducts() { ProductPrioritySetter prioritySetter(m_allProducts); prioritySetter.apply(); - for (const ResolvedProductPtr &product : m_productsToBuild) { + for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild)) { EnvironmentScriptRunner(product.get(), m_evalContext.get(), m_project->environment) .setupForBuild(); } @@ -1319,7 +1317,7 @@ void Executor::prepareProducts() void Executor::setupRootNodes() { m_roots.clear(); - for (const ResolvedProductPtr &product : m_productsToBuild) + for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild)) m_roots += product->buildData->rootNodes(); } diff --git a/src/lib/corelib/buildgraph/executor.h b/src/lib/corelib/buildgraph/executor.h index 1fd591176..cc879e125 100644 --- a/src/lib/corelib/buildgraph/executor.h +++ b/src/lib/corelib/buildgraph/executor.h @@ -81,7 +81,7 @@ public: ~Executor() override; void setProject(const TopLevelProjectPtr &project); - void setProducts(const std::vector<ResolvedProductPtr> &productsToBuild); + void setProducts(const QVector<ResolvedProductPtr> &productsToBuild); void setBuildOptions(const BuildOptions &buildOptions); void setProgressObserver(ProgressObserver *observer) { m_progressObserver = observer; } @@ -166,10 +166,11 @@ private: BuildOptions m_buildOptions; Logger m_logger; ProgressObserver *m_progressObserver; + std::vector<std::unique_ptr<ExecutorJob>> m_allJobs; QList<ExecutorJob*> m_availableJobs; ExecutorState m_state; TopLevelProjectPtr m_project; - std::vector<ResolvedProductPtr> m_productsToBuild; + QVector<ResolvedProductPtr> m_productsToBuild; std::vector<ResolvedProductPtr> m_allProducts; std::unordered_map<QString, const ResolvedProduct *> m_productsByName; std::unordered_map<QString, const ResolvedProject *> m_projectsByName; diff --git a/src/lib/corelib/buildgraph/executorjob.cpp b/src/lib/corelib/buildgraph/executorjob.cpp index 79f17377d..bc96cbb6e 100644 --- a/src/lib/corelib/buildgraph/executorjob.cpp +++ b/src/lib/corelib/buildgraph/executorjob.cpp @@ -71,9 +71,7 @@ ExecutorJob::ExecutorJob(const Logger &logger, QObject *parent) reset(); } -ExecutorJob::~ExecutorJob() -{ -} +ExecutorJob::~ExecutorJob() = default; void ExecutorJob::setMainThreadScriptEngine(ScriptEngine *engine) { diff --git a/src/lib/corelib/buildgraph/executorjob.h b/src/lib/corelib/buildgraph/executorjob.h index bc8954072..1f8f0cd73 100644 --- a/src/lib/corelib/buildgraph/executorjob.h +++ b/src/lib/corelib/buildgraph/executorjob.h @@ -65,7 +65,7 @@ class ExecutorJob : public QObject { Q_OBJECT public: - ExecutorJob(const Logger &logger, QObject *parent); + explicit ExecutorJob(const Logger &logger, QObject *parent = nullptr); ~ExecutorJob() override; void setMainThreadScriptEngine(ScriptEngine *engine); diff --git a/src/lib/corelib/buildgraph/filedependency.cpp b/src/lib/corelib/buildgraph/filedependency.cpp index 9420fa96b..cbee758c7 100644 --- a/src/lib/corelib/buildgraph/filedependency.cpp +++ b/src/lib/corelib/buildgraph/filedependency.cpp @@ -44,13 +44,9 @@ namespace qbs { namespace Internal { -FileResourceBase::FileResourceBase() -{ -} +FileResourceBase::FileResourceBase() = default; -FileResourceBase::~FileResourceBase() -{ -} +FileResourceBase::~FileResourceBase() = default; void FileResourceBase::setTimestamp(const FileTime &t) @@ -86,13 +82,9 @@ void FileResourceBase::store(PersistentPool &pool) } -FileDependency::FileDependency() -{ -} +FileDependency::FileDependency() = default; -FileDependency::~FileDependency() -{ -} +FileDependency::~FileDependency() = default; } // namespace Internal } // namespace qbs diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp index 81cbe2178..1d00e29e1 100644 --- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp +++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp @@ -77,6 +77,7 @@ static void resolveDepencency(const RawScannedDependency &dependency, FileDependency *fileDependencyArtifact = nullptr; Artifact *dependencyInProduct = nullptr; Artifact *dependencyInOtherProduct = nullptr; + bool productOfDependencyIsDependency = false; const auto files = project->topLevelProject() ->buildData->lookupFiles(absDirPath, dependency.fileName()); for (FileResourceBase *lookupResult : files) { @@ -86,10 +87,13 @@ static void resolveDepencency(const RawScannedDependency &dependency, break; case FileResourceBase::FileTypeArtifact: { auto const foundArtifact = static_cast<Artifact *>(lookupResult); - if (foundArtifact->product == product) + if (foundArtifact->product == product) { dependencyInProduct = foundArtifact; - else + } else if (!productOfDependencyIsDependency) { dependencyInOtherProduct = foundArtifact; + productOfDependencyIsDependency + = contains(product->dependencies, dependencyInOtherProduct->product.lock()); + } break; } } @@ -102,6 +106,14 @@ static void resolveDepencency(const RawScannedDependency &dependency, || (result->file = dependencyInOtherProduct) || (result->file = fileDependencyArtifact)) { result->filePath = result->file->filePath(); + + if (result->file == dependencyInOtherProduct && !productOfDependencyIsDependency) { + qCDebug(lcDepScan) << "product" << dependencyInOtherProduct->product->fullDisplayName() + << "of scanned dependency" << result->filePath + << "is not a dependency of product" << product->fullDisplayName() + << ". The file dependency might get lost during change tracking."; + } + return; } @@ -349,6 +361,8 @@ void InputArtifactScanner::handleDependency(ResolvedDependency &dependency) if (m_artifact == dependency.file) return; + if (artifactDependency && artifactDependency->transformer == m_artifact->transformer) + return; if (fileDependency) { m_artifact->fileDependencies << fileDependency; @@ -372,16 +386,14 @@ void InputArtifactScanner::scanWithScannerPlugin(DependencyScanner *scanner, const QStringList &dependencies = scanner->collectDependencies( inputArtifact, fileToBeScanned, m_fileTagsForScanner.constData()); for (const QString &s : dependencies) - scanResult->deps.push_back(RawScannedDependency(s)); + scanResult->deps.emplace_back(s); } InputArtifactScannerContext::DependencyScannerCacheItem::DependencyScannerCacheItem() : valid(false) { } -InputArtifactScannerContext::DependencyScannerCacheItem::~DependencyScannerCacheItem() -{ -} +InputArtifactScannerContext::DependencyScannerCacheItem::~DependencyScannerCacheItem() = default; } // namespace Internal } // namespace qbs diff --git a/src/lib/corelib/buildgraph/nodetreedumper.cpp b/src/lib/corelib/buildgraph/nodetreedumper.cpp index 89975baf2..8475a46cf 100644 --- a/src/lib/corelib/buildgraph/nodetreedumper.cpp +++ b/src/lib/corelib/buildgraph/nodetreedumper.cpp @@ -51,13 +51,13 @@ namespace qbs { namespace Internal { -static unsigned int indentWidth() { return 4; } +static int indentWidth() { return 4; } NodeTreeDumper::NodeTreeDumper(QIODevice &outDevice) : m_outDevice(outDevice) { } -void NodeTreeDumper::start(const QList<ResolvedProductPtr> &products) +void NodeTreeDumper::start(const QVector<ResolvedProductPtr> &products) { m_indentation = 0; for (const ResolvedProductPtr &p : products) { diff --git a/src/lib/corelib/buildgraph/nodetreedumper.h b/src/lib/corelib/buildgraph/nodetreedumper.h index 4175ce727..38ccd6dae 100644 --- a/src/lib/corelib/buildgraph/nodetreedumper.h +++ b/src/lib/corelib/buildgraph/nodetreedumper.h @@ -57,7 +57,7 @@ class NodeTreeDumper : public BuildGraphVisitor public: NodeTreeDumper(QIODevice &outDevice); - void start(const QList<ResolvedProductPtr> &products); + void start(const QVector<ResolvedProductPtr> &products); private: bool visit(Artifact *artifact) override; @@ -74,7 +74,7 @@ private: QIODevice &m_outDevice; ResolvedProductPtr m_currentProduct; NodeSet m_visited; - unsigned int m_indentation = 0; + int m_indentation = 0; }; } // namespace Internal diff --git a/src/lib/corelib/buildgraph/processcommandexecutor.cpp b/src/lib/corelib/buildgraph/processcommandexecutor.cpp index 79edda320..7cde8553c 100644 --- a/src/lib/corelib/buildgraph/processcommandexecutor.cpp +++ b/src/lib/corelib/buildgraph/processcommandexecutor.cpp @@ -166,6 +166,7 @@ bool ProcessCommandExecutor::doStart() .arg(responseFile.fileName()))); return false; } + const auto separator = cmd->responseFileSeparator().toUtf8(); for (int i = cmd->responseFileArgumentIndex(); i < cmd->arguments().size(); ++i) { const QString arg = cmd->arguments().at(i); if (arg.startsWith(cmd->responseFileUsagePrefix())) { @@ -179,7 +180,7 @@ bool ProcessCommandExecutor::doStart() } else { responseFile.write(qbs::Internal::shellQuote(arg).toLocal8Bit()); } - responseFile.write("\n"); + responseFile.write(separator); } responseFile.close(); m_responseFileName = responseFile.fileName(); diff --git a/src/lib/corelib/buildgraph/productinstaller.cpp b/src/lib/corelib/buildgraph/productinstaller.cpp index d4acc9ace..80a76d7f5 100644 --- a/src/lib/corelib/buildgraph/productinstaller.cpp +++ b/src/lib/corelib/buildgraph/productinstaller.cpp @@ -60,7 +60,7 @@ namespace qbs { namespace Internal { ProductInstaller::ProductInstaller(TopLevelProjectPtr project, - std::vector<ResolvedProductPtr> products, InstallOptions options, + QVector<ResolvedProductPtr> products, InstallOptions options, ProgressObserver *observer, Logger logger) : m_project(std::move(project)), m_products(std::move(products)), @@ -96,7 +96,7 @@ void ProductInstaller::install() removeInstallRoot(); QList<const Artifact *> artifactsToInstall; - for (const ResolvedProductConstPtr &product : qAsConst(m_products)) { + for (const auto &product : qAsConst(m_products)) { QBS_CHECK(product->buildData); for (const Artifact *artifact : filterByType<Artifact>(product->buildData->allNodes())) { if (artifact->properties->qbsPropertyValue(StringConstants::installProperty()).toBool()) @@ -250,5 +250,5 @@ void ProductInstaller::handleError(const QString &message) m_logger.qbsWarning() << message; } -} // namespace Intern +} // namespace Internal } // namespace qbs diff --git a/src/lib/corelib/buildgraph/productinstaller.h b/src/lib/corelib/buildgraph/productinstaller.h index 09828cfe9..c07e0b7cf 100644 --- a/src/lib/corelib/buildgraph/productinstaller.h +++ b/src/lib/corelib/buildgraph/productinstaller.h @@ -56,7 +56,7 @@ class ProductInstaller { public: ProductInstaller(TopLevelProjectPtr project, - std::vector<ResolvedProductPtr> products, + QVector<ResolvedProductPtr> products, InstallOptions options, ProgressObserver *observer, Logger logger); void install(); @@ -72,7 +72,7 @@ private: void handleError(const QString &message); const TopLevelProjectConstPtr m_project; - const std::vector<ResolvedProductPtr> m_products; + const QVector<ResolvedProductPtr> m_products; InstallOptions m_options; ProgressObserver * const m_observer; Logger m_logger; diff --git a/src/lib/corelib/buildgraph/projectbuilddata.cpp b/src/lib/corelib/buildgraph/projectbuilddata.cpp index 31012e23e..0ac6b1537 100644 --- a/src/lib/corelib/buildgraph/projectbuilddata.cpp +++ b/src/lib/corelib/buildgraph/projectbuilddata.cpp @@ -60,6 +60,8 @@ #include <tools/qttools.h> #include <tools/stlutils.h> +#include <memory> + namespace qbs { namespace Internal { @@ -276,7 +278,7 @@ void BuildDataResolver::resolveBuildData(const TopLevelProjectPtr &resolvedProje { QBS_CHECK(!resolvedProject->buildData); m_project = resolvedProject; - resolvedProject->buildData.reset(new ProjectBuildData); + resolvedProject->buildData = std::make_unique<ProjectBuildData>(); resolvedProject->buildData->evaluationContext = evalContext; const std::vector<ResolvedProductPtr> &allProducts = resolvedProject->allProducts(); evalContext->initializeObserver(Tr::tr("Setting up build graph for configuration %1") @@ -390,7 +392,7 @@ void BuildDataResolver::resolveProductBuildData(const ResolvedProductPtr &produc evalContext()->checkForCancelation(); - product->buildData.reset(new ProductBuildData); + product->buildData = std::make_unique<ProductBuildData>(); ArtifactSetByFileTag artifactsPerFileTag; for (const auto &dependency : qAsConst(product->dependencies)) { @@ -411,7 +413,7 @@ void BuildDataResolver::resolveProductBuildData(const ResolvedProductPtr &produc artifactsPerFileTag["qbs"].insert(qbsFileArtifact); // read sources - for (const SourceArtifactConstPtr &sourceArtifact : product->allEnabledFiles()) { + for (const auto &sourceArtifact : product->allEnabledFiles()) { QString filePath = sourceArtifact->absoluteFilePath; if (lookupArtifact(product, filePath)) continue; // ignore duplicate artifacts @@ -443,7 +445,7 @@ void BuildDataResolver::connectRulesToDependencies(const ResolvedProductPtr &pro std::vector<RuleNode *> ruleNodes; for (RuleNode *ruleNode : filterByType<RuleNode>(product->buildData->allNodes())) ruleNodes.push_back(ruleNode); - for (const ResolvedProductConstPtr &dep : dependencies) { + for (const auto &dep : dependencies) { if (!dep->buildData) continue; for (RuleNode *depRuleNode : filterByType<RuleNode>(dep->buildData->allNodes())) { diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp index c834c60e6..4e054a636 100644 --- a/src/lib/corelib/buildgraph/qtmocscanner.cpp +++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp @@ -167,7 +167,7 @@ static RawScanResult runScanner(ScannerPlugin *scanner, const Artifact *artifact if (FileInfo::exists(localFilePath)) includedFilePath = localFilePath; } - scanData.rawScanResult.deps.push_back(RawScannedDependency(includedFilePath)); + scanData.rawScanResult.deps.emplace_back(includedFilePath); } scanner->close(opaq); diff --git a/src/lib/corelib/buildgraph/requesteddependencies.cpp b/src/lib/corelib/buildgraph/requesteddependencies.cpp index f993b2518..b95c8db94 100644 --- a/src/lib/corelib/buildgraph/requesteddependencies.cpp +++ b/src/lib/corelib/buildgraph/requesteddependencies.cpp @@ -48,9 +48,9 @@ namespace Internal { static Set<QString> depNamesForProduct(const ResolvedProduct *p) { Set<QString> names; - for (const ResolvedProductConstPtr &dep : p->dependencies) + for (const auto &dep : p->dependencies) names.insert(dep->uniqueName()); - for (const ResolvedModuleConstPtr &m : p->modules) { + for (const auto &m : p->modules) { if (!m->isProduct) names.insert(m->name); } @@ -73,7 +73,7 @@ bool RequestedDependencies::isUpToDate(const TopLevelProject *project) const { if (m_depsPerProduct.empty()) return true; - for (const ResolvedProductConstPtr &product : project->allProducts()) { + for (const auto &product : project->allProducts()) { const auto it = m_depsPerProduct.find(product->uniqueName()); if (it == m_depsPerProduct.cend()) continue; diff --git a/src/lib/corelib/buildgraph/rescuableartifactdata.h b/src/lib/corelib/buildgraph/rescuableartifactdata.h index 3e4d6e25f..6dd10f76c 100644 --- a/src/lib/corelib/buildgraph/rescuableartifactdata.h +++ b/src/lib/corelib/buildgraph/rescuableartifactdata.h @@ -84,9 +84,12 @@ public: struct ChildData { - ChildData(const QString &n = QString(), const QString &m = QString(), - const QString &c = QString(), bool byScanner = false) - : productName(n), productMultiplexId(m), childFilePath(c), addedByScanner(byScanner) + ChildData(QString n = QString(), QString m = QString(), + QString c = QString(), bool byScanner = false) + : productName(std::move(n)) + , productMultiplexId(std::move(m)) + , childFilePath(std::move(c)) + , addedByScanner(byScanner) {} template<PersistentPool::OpType opType> void completeSerializationOp(PersistentPool &pool) diff --git a/src/lib/corelib/buildgraph/rulecommands.cpp b/src/lib/corelib/buildgraph/rulecommands.cpp index 31ff6be4b..8fa3255f1 100644 --- a/src/lib/corelib/buildgraph/rulecommands.cpp +++ b/src/lib/corelib/buildgraph/rulecommands.cpp @@ -70,6 +70,7 @@ static QString responseFileUsagePrefixProperty() { return QStringLiteral("responseFileUsagePrefix"); } +static QString responseFileSeparatorProperty() { return QStringLiteral("responseFileSeparator"); } static QString silentProperty() { return QStringLiteral("silent"); } static QString stderrFilePathProperty() { return QStringLiteral("stderrFilePath"); } static QString stderrFilterFunctionProperty() { return QStringLiteral("stderrFilterFunction"); } @@ -78,7 +79,7 @@ static QString stdoutFilterFunctionProperty() { return QStringLiteral("stdoutFil static QString timeoutProperty() { return QStringLiteral("timeout"); } static QString workingDirProperty() { return QStringLiteral("workingDirectory"); } -static QString invokedSourceCode(const QScriptValue codeOrFunction) +static QString invokedSourceCode(const QScriptValue &codeOrFunction) { const QString &code = codeOrFunction.toString(); return codeOrFunction.isFunction() ? QStringLiteral("(") + code + QStringLiteral(")()") : code; @@ -94,9 +95,7 @@ AbstractCommand::AbstractCommand() { } -AbstractCommand::~AbstractCommand() -{ -} +AbstractCommand::~AbstractCommand() = default; bool AbstractCommand::equals(const AbstractCommand *other) const { @@ -218,6 +217,8 @@ static QScriptValue js_Command(QScriptContext *context, QScriptEngine *engine) engine->toScriptValue(commandPrototype->responseFileArgumentIndex())); cmd.setProperty(responseFileUsagePrefixProperty(), engine->toScriptValue(commandPrototype->responseFileUsagePrefix())); + cmd.setProperty(responseFileSeparatorProperty(), + engine->toScriptValue(commandPrototype->responseFileSeparator())); cmd.setProperty(stdoutFilePathProperty(), engine->toScriptValue(commandPrototype->stdoutFilePath())); cmd.setProperty(stderrFilePathProperty(), @@ -241,6 +242,7 @@ ProcessCommand::ProcessCommand() : m_maxExitCode(0) , m_responseFileThreshold(defaultResponseFileThreshold()) , m_responseFileArgumentIndex(0) + , m_responseFileSeparator(QStringLiteral("\n")) { } @@ -279,6 +281,7 @@ bool ProcessCommand::equals(const AbstractCommand *otherAbstractCommand) const && m_responseFileThreshold == other->m_responseFileThreshold && m_responseFileArgumentIndex == other->m_responseFileArgumentIndex && m_responseFileUsagePrefix == other->m_responseFileUsagePrefix + && m_responseFileSeparator == other->m_responseFileSeparator && m_stdoutFilePath == other->m_stdoutFilePath && m_stderrFilePath == other->m_stderrFilePath && m_relevantEnvVars == other->m_relevantEnvVars @@ -313,6 +316,8 @@ void ProcessCommand::fillFromScriptValue(const QScriptValue *scriptValue, const .toInt32(); m_responseFileUsagePrefix = scriptValue->property(responseFileUsagePrefixProperty()) .toString(); + m_responseFileSeparator = scriptValue->property(responseFileSeparatorProperty()) + .toString(); QStringList envList = scriptValue->property(environmentProperty()).toVariant() .toStringList(); getEnvironmentFromList(envList); @@ -399,9 +404,7 @@ void JavaScriptCommand::setupForJavaScript(QScriptValue targetObject) targetObject.setProperty(StringConstants::javaScriptCommandType(), ctor); } -JavaScriptCommand::JavaScriptCommand() -{ -} +JavaScriptCommand::JavaScriptCommand() = default; bool JavaScriptCommand::equals(const AbstractCommand *otherAbstractCommand) const { diff --git a/src/lib/corelib/buildgraph/rulecommands.h b/src/lib/corelib/buildgraph/rulecommands.h index d4d70d591..725cd6d89 100644 --- a/src/lib/corelib/buildgraph/rulecommands.h +++ b/src/lib/corelib/buildgraph/rulecommands.h @@ -136,6 +136,7 @@ public: int responseFileThreshold() const { return m_responseFileThreshold; } int responseFileArgumentIndex() const { return m_responseFileArgumentIndex; } QString responseFileUsagePrefix() const { return m_responseFileUsagePrefix; } + QString responseFileSeparator() const { return m_responseFileSeparator; } QProcessEnvironment environment() const { return m_environment; } QStringList relevantEnvVars() const; void clearRelevantEnvValues() { m_relevantEnvValues.clear(); } @@ -158,10 +159,10 @@ private: { pool.serializationOp<opType>(m_program, m_arguments, m_environment, m_workingDir, m_stdoutFilterFunction, m_stderrFilterFunction, - m_responseFileUsagePrefix, m_maxExitCode, - m_responseFileThreshold, m_responseFileArgumentIndex, - m_relevantEnvVars, m_relevantEnvValues, m_stdoutFilePath, - m_stderrFilePath); + m_responseFileUsagePrefix, m_responseFileSeparator, + m_maxExitCode, m_responseFileThreshold, + m_responseFileArgumentIndex, m_relevantEnvVars, + m_relevantEnvValues, m_stdoutFilePath, m_stderrFilePath); } QString m_program; @@ -173,6 +174,7 @@ private: int m_responseFileThreshold; // When to use response files? In bytes of (program name + arguments). int m_responseFileArgumentIndex; QString m_responseFileUsagePrefix; + QString m_responseFileSeparator; QProcessEnvironment m_environment; QStringList m_relevantEnvVars; QProcessEnvironment m_relevantEnvValues; diff --git a/src/lib/corelib/buildgraph/rulegraph.cpp b/src/lib/corelib/buildgraph/rulegraph.cpp index 23227ca09..23f22b7f2 100644 --- a/src/lib/corelib/buildgraph/rulegraph.cpp +++ b/src/lib/corelib/buildgraph/rulegraph.cpp @@ -46,9 +46,7 @@ namespace qbs { namespace Internal { -RuleGraph::RuleGraph() -{ -} +RuleGraph::RuleGraph() = default; void RuleGraph::build(const std::vector<RulePtr> &rules, const FileTags &productFileTags) { @@ -63,7 +61,7 @@ void RuleGraph::build(const std::vector<RulePtr> &rules, const FileTags &product m_parents.resize(rules.size()); m_children.resize(rules.size()); - for (const RuleConstPtr &rule : qAsConst(m_rules)) { + for (const auto &rule : qAsConst(m_rules)) { FileTags inFileTags = rule->inputs; inFileTags += rule->auxiliaryInputs; inFileTags += rule->explicitlyDependsOn; @@ -100,7 +98,7 @@ void RuleGraph::dump() const QByteArray indent; printf("---rule graph dump:\n"); Set<int> rootRules; - for (const RuleConstPtr &rule : qAsConst(m_rules)) + for (const auto &rule : qAsConst(m_rules)) if (m_parents[rule->ruleGraphId].empty()) rootRules += rule->ruleGraphId; for (int idx : qAsConst(rootRules)) diff --git a/src/lib/corelib/buildgraph/rulenode.cpp b/src/lib/corelib/buildgraph/rulenode.cpp index bf25b1da8..0558ba144 100644 --- a/src/lib/corelib/buildgraph/rulenode.cpp +++ b/src/lib/corelib/buildgraph/rulenode.cpp @@ -56,13 +56,9 @@ namespace qbs { namespace Internal { -RuleNode::RuleNode() -{ -} +RuleNode::RuleNode() = default; -RuleNode::~RuleNode() -{ -} +RuleNode::~RuleNode() = default; void RuleNode::accept(BuildGraphVisitor *visitor) { @@ -182,7 +178,7 @@ void RuleNode::apply(const Logger &logger, if (removedInputForcesOutputRemoval) outputArtifactsToRemove += parent; else - connectionsToBreak.push_back(std::make_pair(parent, artifact)); + connectionsToBreak.emplace_back(parent, artifact); } disconnect(this, artifact); } @@ -262,7 +258,7 @@ ArtifactSet RuleNode::currentInputArtifacts() const } } - for (const ResolvedProductConstPtr &dep : qAsConst(product->dependencies)) { + for (const auto &dep : qAsConst(product->dependencies)) { if (!dep->buildData) continue; for (Artifact * const a : filterByType<Artifact>(dep->buildData->allNodes())) { diff --git a/src/lib/corelib/buildgraph/rulesapplicator.cpp b/src/lib/corelib/buildgraph/rulesapplicator.cpp index 16aa0c001..0d36e1e21 100644 --- a/src/lib/corelib/buildgraph/rulesapplicator.cpp +++ b/src/lib/corelib/buildgraph/rulesapplicator.cpp @@ -79,12 +79,13 @@ namespace Internal { RulesApplicator::RulesApplicator( ResolvedProductPtr product, - std::unordered_map<QString, const ResolvedProduct *> productsByName, - std::unordered_map<QString, const ResolvedProject *> projectsByName, + const std::unordered_map<QString, const ResolvedProduct *> &productsByName, + const std::unordered_map<QString, const ResolvedProject *> &projectsByName, Logger logger) : m_product(std::move(product)) - , m_productsByName(std::move(productsByName)) - , m_projectsByName(std::move(projectsByName)) + // m_productsByName and m_projectsByName are references, cannot move-construct + , m_productsByName(productsByName) + , m_projectsByName(projectsByName) , m_mocScanner(nullptr) , m_logger(std::move(logger)) { @@ -213,13 +214,13 @@ void RulesApplicator::doApply(const ArtifactSet &inputArtifacts, QScriptValue &p ScriptEngine::argumentList(Rule::argumentNamesForOutputArtifacts(), scope())); } else { Set<QString> outputFilePaths; - for (const RuleArtifactConstPtr &ruleArtifact : m_rule->artifacts) { + for (const auto &ruleArtifact : m_rule->artifacts) { const OutputArtifactInfo outputInfo = createOutputArtifactFromRuleArtifact( ruleArtifact, inputArtifacts, &outputFilePaths); if (!outputInfo.artifact) continue; outputArtifacts.push_back(outputInfo.artifact); - ruleArtifactArtifactMap.push_back({ ruleArtifact.get(), outputInfo }); + ruleArtifactArtifactMap.emplace_back(ruleArtifact.get(), outputInfo); } if (m_rule->artifacts.empty()) { outputArtifacts.push_back(createOutputArtifactFromRuleArtifact( @@ -287,7 +288,7 @@ void RulesApplicator::doApply(const ArtifactSet &inputArtifacts, QScriptValue &p } const QVariant value = scriptValue.toVariant(); setConfigProperty(artifactModulesCfg, binding.name, value); - outputArtifact->pureProperties.push_back(std::make_pair(binding.name, value)); + outputArtifact->pureProperties.emplace_back(binding.name, value); } outputArtifact->properties->setValue(artifactModulesCfg); if (!outputInfo.newlyCreated && (outputArtifact->fileTags() != outputInfo.oldFileTags @@ -354,7 +355,7 @@ ArtifactSet RulesApplicator::collectAdditionalInputs(const FileTags &tags, const } if (inputsSources.testFlag(Dependencies)) { - for (const ResolvedProductConstPtr &depProduct : product->dependencies) { + for (const auto &depProduct : product->dependencies) { for (Artifact * const ta : depProduct->targetArtifacts()) { if (ta->fileTags().contains(fileTag) && !ta->fileTags().intersects(rule->excludedInputs)) { @@ -607,7 +608,7 @@ public: for (const auto &e : m_propertyValues) { const QStringList key{e.module, e.name}; setConfigProperty(artifactCfg, key, e.value); - outputArtifact->pureProperties.push_back(std::make_pair(key, e.value)); + outputArtifact->pureProperties.emplace_back(key, e.value); } outputArtifact->properties->setValue(artifactCfg); } diff --git a/src/lib/corelib/buildgraph/rulesapplicator.h b/src/lib/corelib/buildgraph/rulesapplicator.h index 1160f3d09..da7815014 100644 --- a/src/lib/corelib/buildgraph/rulesapplicator.h +++ b/src/lib/corelib/buildgraph/rulesapplicator.h @@ -63,8 +63,8 @@ class RulesApplicator { public: RulesApplicator(ResolvedProductPtr product, - std::unordered_map<QString, const ResolvedProduct *> productsByName, - std::unordered_map<QString, const ResolvedProject *> projectsByName, + const std::unordered_map<QString, const ResolvedProduct *> &productsByName, + const std::unordered_map<QString, const ResolvedProject *> &projectsByName, Logger logger); ~RulesApplicator(); diff --git a/src/lib/corelib/buildgraph/scriptclasspropertyiterator.h b/src/lib/corelib/buildgraph/scriptclasspropertyiterator.h index f6154f993..b57072236 100644 --- a/src/lib/corelib/buildgraph/scriptclasspropertyiterator.h +++ b/src/lib/corelib/buildgraph/scriptclasspropertyiterator.h @@ -57,10 +57,10 @@ class ScriptClassPropertyIterator : public QScriptClassPropertyIterator { public: ScriptClassPropertyIterator(const QScriptValue &object, const QVariantMap &properties, - const std::vector<QString> &additionalProperties) + std::vector<QString> additionalProperties) : QScriptClassPropertyIterator(object), m_it(properties), - m_additionalProperties(additionalProperties) + m_additionalProperties(std::move(additionalProperties)) { } diff --git a/src/lib/corelib/buildgraph/timestampsupdater.cpp b/src/lib/corelib/buildgraph/timestampsupdater.cpp index d31f57445..3f5279dd2 100644 --- a/src/lib/corelib/buildgraph/timestampsupdater.cpp +++ b/src/lib/corelib/buildgraph/timestampsupdater.cpp @@ -83,7 +83,7 @@ private: }; void TimestampsUpdater::updateTimestamps(const TopLevelProjectPtr &project, - const QList<ResolvedProductPtr> &products, const Logger &logger) + const QVector<ResolvedProductPtr> &products, const Logger &logger) { TimestampsUpdateVisitor v; for (const ResolvedProductPtr &product : products) diff --git a/src/lib/corelib/buildgraph/timestampsupdater.h b/src/lib/corelib/buildgraph/timestampsupdater.h index cfe20df12..8184ca708 100644 --- a/src/lib/corelib/buildgraph/timestampsupdater.h +++ b/src/lib/corelib/buildgraph/timestampsupdater.h @@ -51,7 +51,7 @@ class TimestampsUpdater { public: void updateTimestamps(const TopLevelProjectPtr &project, - const QList<ResolvedProductPtr> &products, const Logger &logger); + const QVector<ResolvedProductPtr> &products, const Logger &logger); }; } // namespace Internal diff --git a/src/lib/corelib/buildgraph/transformer.cpp b/src/lib/corelib/buildgraph/transformer.cpp index cc0b4c923..29f2bcdf0 100644 --- a/src/lib/corelib/buildgraph/transformer.cpp +++ b/src/lib/corelib/buildgraph/transformer.cpp @@ -62,9 +62,7 @@ Transformer::Transformer() : alwaysRun(false) { } -Transformer::~Transformer() -{ -} +Transformer::~Transformer() = default; static QScriptValue js_baseName(QScriptContext *ctx, QScriptEngine *engine, const Artifact *artifact) @@ -196,7 +194,7 @@ void Transformer::setupInputs(QScriptValue targetScriptValue, const ArtifactSet targetScriptValue.setProperty(StringConstants::inputVar(), inputScriptValue); } -void Transformer::setupInputs(QScriptValue targetScriptValue) +void Transformer::setupInputs(const QScriptValue &targetScriptValue) { setupInputs(targetScriptValue, inputs, rule->module->name); } diff --git a/src/lib/corelib/buildgraph/transformer.h b/src/lib/corelib/buildgraph/transformer.h index 2f6a8e56d..8772ed868 100644 --- a/src/lib/corelib/buildgraph/transformer.h +++ b/src/lib/corelib/buildgraph/transformer.h @@ -95,7 +95,7 @@ public: const Artifact *artifact, const QString &defaultModuleName); ResolvedProductPtr product() const; - void setupInputs(QScriptValue targetScriptValue); + void setupInputs(const QScriptValue &targetScriptValue); void setupOutputs(QScriptValue targetScriptValue); void setupExplicitlyDependsOn(QScriptValue targetScriptValue); void createCommands(ScriptEngine *engine, const PrivateScriptFunction &script, diff --git a/src/lib/corelib/buildgraph/transformerchangetracking.cpp b/src/lib/corelib/buildgraph/transformerchangetracking.cpp index 505f0cbba..e44c31639 100644 --- a/src/lib/corelib/buildgraph/transformerchangetracking.cpp +++ b/src/lib/corelib/buildgraph/transformerchangetracking.cpp @@ -71,7 +71,7 @@ private: const char *context) const; bool isExportedModuleUpToDate(const QString &productName, const ExportedModule &module) const; bool areExportedModulesUpToDate( - const std::unordered_map<QString, ExportedModule> exportedModules) const; + const std::unordered_map<QString, ExportedModule> &exportedModules) const; const Artifact *getArtifact(const QString &filePath, const QString &productName) const; const ResolvedProduct *getProduct(const QString &name) const; @@ -207,7 +207,7 @@ bool TrafoChangeTracker::isExportedModuleUpToDate(const QString &productName, } bool TrafoChangeTracker::areExportedModulesUpToDate( - const std::unordered_map<QString, ExportedModule> exportedModules) const + const std::unordered_map<QString, ExportedModule> &exportedModules) const { for (const auto &kv : exportedModules) { if (!isExportedModuleUpToDate(kv.first, kv.second)) |