aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-06-15 09:56:54 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-06-15 09:56:54 +0200
commita46c03c0737ce5e2e5b231e448e3fc112ef1fc59 (patch)
tree77f8bc134b8eb4515947d219af4095c2865767cc /src/lib
parent9788db406f1a3317e3904cb910eab4d518d9cf8b (diff)
parentd994e54712efb69225d73d93fc57b89a3d39cacb (diff)
Merge 1.12 into master
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/corelib/api/project.cpp16
-rw-r--r--src/lib/corelib/api/runenvironment.cpp4
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.cpp2
-rw-r--r--src/lib/corelib/buildgraph/executor.cpp4
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.cpp2
-rw-r--r--src/lib/corelib/buildgraph/rescuableartifactdata.h3
-rw-r--r--src/lib/corelib/buildgraph/rulesapplicator.cpp16
-rw-r--r--src/lib/corelib/buildgraph/rulesapplicator.h2
-rw-r--r--src/lib/corelib/tools/fileinfo.cpp4
-rw-r--r--src/lib/corelib/tools/msvcinfo.cpp2
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.cpp2
11 files changed, 27 insertions, 30 deletions
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index 69c7edf77..bad18cab9 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -801,16 +801,14 @@ ProjectTransformerData ProjectPrivate::transformerData()
ProductTransformerData productTransformerData;
for (const Transformer * const t : allTransformers) {
TransformerData tData;
- for (Artifact * const a : t->inputs)
- tData.d->inputs << createArtifactData(a, product, targetArtifacts);
- for (Artifact * const a : t->explicitlyDependsOn)
- tData.d->inputs << createArtifactData(a, product, targetArtifacts);
- for (Artifact * const a
- : RulesApplicator::collectAuxiliaryInputs(t->rule.get(), product.get())) {
- tData.d->inputs << createArtifactData(a, product, targetArtifacts);
- }
- for (Artifact * const a : t->outputs)
+ Set<const Artifact *> allInputs;
+ for (Artifact * const a : t->outputs) {
tData.d->outputs << createArtifactData(a, product, targetArtifacts);
+ for (const Artifact * const child : filterByType<Artifact>(a->children))
+ allInputs << child;
+ }
+ for (const Artifact * const input : allInputs)
+ tData.d->inputs << createArtifactData(input, product, targetArtifacts);
tData.d->commands = ruleCommandListForTransformer(t);
productTransformerData << tData;
}
diff --git a/src/lib/corelib/api/runenvironment.cpp b/src/lib/corelib/api/runenvironment.cpp
index d803639a8..bf973cbc4 100644
--- a/src/lib/corelib/api/runenvironment.cpp
+++ b/src/lib/corelib/api/runenvironment.cpp
@@ -311,7 +311,7 @@ int RunEnvironment::doRunTarget(const QString &targetBin, const QStringList &arg
<< QStringLiteral("-t") // allow test packages
<< QStringLiteral("-d") // allow version code downgrade
<< targetBin);
- if (!process.waitForFinished()) {
+ if (!process.waitForFinished(-1)) {
if (process.error() == QProcess::FailedToStart) {
throw ErrorInfo(Tr::tr("The process '%1' could not be started: %2")
.arg(targetExecutable)
@@ -351,7 +351,7 @@ int RunEnvironment::doRunTarget(const QString &targetBin, const QStringList &arg
<< StringConstants::simctlInstallCommand()
<< simulatorId
<< QDir::cleanPath(bundlePath));
- if (!process.waitForFinished()) {
+ if (!process.waitForFinished(-1)) {
if (process.error() == QProcess::FailedToStart) {
throw ErrorInfo(Tr::tr("The process '%1' could not be started: %2")
.arg(targetExecutable)
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp
index 9890a8327..f9b9910e6 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp
@@ -888,7 +888,7 @@ void BuildGraphLoader::rescueOldBuildData(const ResolvedProductConstPtr &restore
= oldArtifact->transformer->lastPrepareScriptExecutionTime;
const ChildrenInfo &childrenInfo = childLists.value(oldArtifact);
for (Artifact * const child : qAsConst(childrenInfo.children)) {
- rad.children << RescuableArtifactData::ChildData(child->product->name,
+ rad.children.emplace_back(child->product->name,
child->product->multiplexConfigurationId, child->filePath(),
childrenInfo.childrenAddedByScanner.contains(child));
std::transform(oldArtifact->fileDependencies.cbegin(),
diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp
index 8713b9b41..980e2182a 100644
--- a/src/lib/corelib/buildgraph/executor.cpp
+++ b/src/lib/corelib/buildgraph/executor.cpp
@@ -775,7 +775,7 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = 0)
bool canRescue = artifact->transformer->commands == rad.commands;
if (canRescue) {
ResolvedProductPtr pseudoProduct = ResolvedProduct::create();
- for (const RescuableArtifactData::ChildData &cd : qAsConst(rad.children)) {
+ for (const RescuableArtifactData::ChildData &cd : rad.children) {
pseudoProduct->name = cd.productName;
pseudoProduct->multiplexConfigurationId = cd.productMultiplexId;
Artifact * const child = lookupArtifact(pseudoProduct, m_project->buildData.get(),
@@ -828,7 +828,7 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = 0)
if (canRescue) {
const TypeFilter<Artifact> childArtifacts(artifact->children);
- const int newChildCount = childrenToConnect.size()
+ const size_t newChildCount = childrenToConnect.size()
+ std::distance(childArtifacts.begin(), childArtifacts.end());
QBS_CHECK(newChildCount >= rad.children.size());
if (newChildCount > rad.children.size()) {
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
index 644b95d79..d183b1879 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
@@ -255,6 +255,8 @@ void InputArtifactScanner::resolveScanResultDependencies(const Artifact *inputAr
if (FileInfo::isAbsolute(dependencyFilePath)) {
resolveDepencency(dependency, inputArtifact->product.get(), &resolvedDependency);
+ if (resolvedDependency.filePath.isEmpty())
+ goto unresolved;
goto resolved;
}
diff --git a/src/lib/corelib/buildgraph/rescuableartifactdata.h b/src/lib/corelib/buildgraph/rescuableartifactdata.h
index fbcf8a9d4..a88d63273 100644
--- a/src/lib/corelib/buildgraph/rescuableartifactdata.h
+++ b/src/lib/corelib/buildgraph/rescuableartifactdata.h
@@ -54,7 +54,6 @@
#include <tools/persistence.h>
#include <QtCore/qhash.h>
-#include <QtCore/qlist.h>
#include <vector>
@@ -103,7 +102,7 @@ public:
};
FileTime timeStamp;
- QList<ChildData> children;
+ std::vector<ChildData> children;
std::vector<QString> fileDependencies;
bool knownOutOfDate = false;
diff --git a/src/lib/corelib/buildgraph/rulesapplicator.cpp b/src/lib/corelib/buildgraph/rulesapplicator.cpp
index d04475abb..4cb328f2c 100644
--- a/src/lib/corelib/buildgraph/rulesapplicator.cpp
+++ b/src/lib/corelib/buildgraph/rulesapplicator.cpp
@@ -156,7 +156,7 @@ ArtifactSet RulesApplicator::collectAuxiliaryInputs(const Rule *rule,
const ResolvedProduct *product)
{
return collectAdditionalInputs(rule->auxiliaryInputs, rule, product,
- RulesApplicator::CurrentProduct | RulesApplicator::Dependencies);
+ CurrentProduct | Dependencies);
}
static void copyProperty(const QString &name, const QScriptValue &src, QScriptValue dst)
@@ -319,16 +319,13 @@ ArtifactSet RulesApplicator::collectAdditionalInputs(const FileTags &tags, const
// 2) An artifact marked with filesAreTargets: true inside a Group inside of a
// Module also ends up in the results returned by product->lookupArtifactsByFileTag,
// so it should be considered conceptually as a "dependent product artifact".
- if ((inputsSources.testFlag(RulesApplicator::CurrentProduct)
- && !dependency->isTargetOfModule())
- || (inputsSources.testFlag(RulesApplicator::Dependencies)
- && dependency->isTargetOfModule())
- ) {
+ if ((inputsSources.testFlag(CurrentProduct) && !dependency->isTargetOfModule())
+ || (inputsSources.testFlag(Dependencies) && dependency->isTargetOfModule())) {
artifacts << dependency;
}
}
- if (inputsSources.testFlag(RulesApplicator::Dependencies)) {
+ if (inputsSources.testFlag(Dependencies)) {
for (const ResolvedProductConstPtr &depProduct : product->dependencies) {
for (Artifact * const ta : depProduct->targetArtifacts()) {
if (ta->fileTags().contains(fileTag)
@@ -345,11 +342,10 @@ ArtifactSet RulesApplicator::collectAdditionalInputs(const FileTags &tags, const
ArtifactSet RulesApplicator::collectExplicitlyDependsOn()
{
ArtifactSet first = collectAdditionalInputs(
- m_rule->explicitlyDependsOn, m_rule.get(), m_product.get(),
- RulesApplicator::CurrentProduct);
+ m_rule->explicitlyDependsOn, m_rule.get(), m_product.get(), CurrentProduct);
ArtifactSet second = collectAdditionalInputs(
m_rule->explicitlyDependsOnFromDependencies, m_rule.get(), m_product.get(),
- RulesApplicator::Dependencies);
+ Dependencies);
return first.unite(second);
}
diff --git a/src/lib/corelib/buildgraph/rulesapplicator.h b/src/lib/corelib/buildgraph/rulesapplicator.h
index 76220f52d..adc58f3d0 100644
--- a/src/lib/corelib/buildgraph/rulesapplicator.h
+++ b/src/lib/corelib/buildgraph/rulesapplicator.h
@@ -76,7 +76,7 @@ public:
const ArtifactSet &artifactsToRemove, const Logger &logger);
static ArtifactSet collectAuxiliaryInputs(const Rule *rule, const ResolvedProduct *product);
- enum InputsSourceFlag { CurrentProduct, Dependencies };
+ enum InputsSourceFlag { CurrentProduct = 1, Dependencies = 2 };
Q_DECLARE_FLAGS(InputsSources, InputsSourceFlag)
private:
diff --git a/src/lib/corelib/tools/fileinfo.cpp b/src/lib/corelib/tools/fileinfo.cpp
index a1571b954..3adacc883 100644
--- a/src/lib/corelib/tools/fileinfo.cpp
+++ b/src/lib/corelib/tools/fileinfo.cpp
@@ -360,8 +360,10 @@ QString applicationDirPath()
FileInfo::FileInfo(const QString &fileName)
{
- if (stat(fileName.toLocal8Bit(), &m_stat) == -1)
+ if (stat(fileName.toLocal8Bit(), &m_stat) == -1) {
m_stat.st_mtime = 0;
+ m_stat.st_mode = 0;
+ }
}
bool FileInfo::exists() const
diff --git a/src/lib/corelib/tools/msvcinfo.cpp b/src/lib/corelib/tools/msvcinfo.cpp
index 27e523d90..e390c9a30 100644
--- a/src/lib/corelib/tools/msvcinfo.cpp
+++ b/src/lib/corelib/tools/msvcinfo.cpp
@@ -101,7 +101,7 @@ static QByteArray runProcess(const QString &exeFilePath, const QStringList &args
process.write(pipeData);
process.closeWriteChannel();
}
- if (!process.waitForFinished() || process.exitStatus() != QProcess::NormalExit)
+ if (!process.waitForFinished(-1) || process.exitStatus() != QProcess::NormalExit)
throw ErrorInfo(mkStr("Could not run %1 (%2)").arg(exeFilePath, process.errorString()));
if (process.exitCode() != 0 && !allowFailure) {
ErrorInfo e(mkStr("Process '%1' failed with exit code %2.")
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp
index 6d82d50ad..adeeef7bc 100644
--- a/src/lib/qtprofilesetup/qtprofilesetup.cpp
+++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp
@@ -523,7 +523,7 @@ static void replaceSpecialValues(QByteArray *content, const Profile &profile,
additionalContent += "\n";
const QByteArray indent(4, ' ');
additionalContent += "Group {\n"
- + indent + indent + "files: [product.Qt[\"" + module.qbsName.toUtf8() + "\"]"
+ + indent + indent + "files: [Qt[\"" + module.qbsName.toUtf8() + "\"]"
+ ".libFilePath]\n"
+ indent + indent + "filesAreTargets: true\n"
+ indent + indent + "fileTags: [\"" + libraryFileTag(qtEnvironment, module)