aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/reference/modules/qt-modules.qdoc2
-rw-r--r--src/app/qbs-setup-toolchains/xcodeprobe.cpp4
-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
-rw-r--r--tests/auto/blackbox/testdata-qt/qrc/bla.cpp13
-rw-r--r--tests/auto/blackbox/testdata-qt/qrc/bla.qrc1
-rw-r--r--tests/auto/blackbox/testdata-qt/qrc/subdir/dummy.txt0
-rw-r--r--tests/auto/blackbox/tst_blackboxqt.cpp9
17 files changed, 50 insertions, 36 deletions
diff --git a/doc/reference/modules/qt-modules.qdoc b/doc/reference/modules/qt-modules.qdoc
index 62f851497..c86c9cca6 100644
--- a/doc/reference/modules/qt-modules.qdoc
+++ b/doc/reference/modules/qt-modules.qdoc
@@ -49,7 +49,7 @@
Or, alternatively:
\code
- Depends { name: "Qt"; submodules: ["core", "network" } }
+ Depends { name: "Qt"; submodules: [ "core", "network" ] }
\endcode
The Qt modules that have properties and relevant file tags are described in
diff --git a/src/app/qbs-setup-toolchains/xcodeprobe.cpp b/src/app/qbs-setup-toolchains/xcodeprobe.cpp
index 857a3d231..2cb54f5b9 100644
--- a/src/app/qbs-setup-toolchains/xcodeprobe.cpp
+++ b/src/app/qbs-setup-toolchains/xcodeprobe.cpp
@@ -102,7 +102,7 @@ void XcodeProbe::detectDeveloperPaths()
QString program = QLatin1String("/usr/bin/xcode-select");
QStringList arguments(QLatin1String("--print-path"));
selectedXcode.start(program, arguments, QProcess::ReadOnly);
- if (!selectedXcode.waitForFinished() || selectedXcode.exitCode()) {
+ if (!selectedXcode.waitForFinished(-1) || selectedXcode.exitCode()) {
qbsInfo() << Tr::tr("Could not detect selected Xcode with /usr/bin/xcode-select");
} else {
QString path = QString::fromLocal8Bit(selectedXcode.readAllStandardOutput());
@@ -114,7 +114,7 @@ void XcodeProbe::detectDeveloperPaths()
program = QLatin1String("/usr/bin/mdfind");
arguments = QStringList(QLatin1String("kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'"));
launchServices.start(program, arguments, QProcess::ReadOnly);
- if (!launchServices.waitForFinished() || launchServices.exitCode()) {
+ if (!launchServices.waitForFinished(-1) || launchServices.exitCode()) {
qbsInfo() << Tr::tr("Could not detect additional Xcode installations with /usr/bin/mdfind");
} else {
for (const QString &path : QString::fromLocal8Bit(launchServices.readAllStandardOutput())
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)
diff --git a/tests/auto/blackbox/testdata-qt/qrc/bla.cpp b/tests/auto/blackbox/testdata-qt/qrc/bla.cpp
index e04f873a6..5375b33b6 100644
--- a/tests/auto/blackbox/testdata-qt/qrc/bla.cpp
+++ b/tests/auto/blackbox/testdata-qt/qrc/bla.cpp
@@ -26,8 +26,19 @@
**
****************************************************************************/
+#include <QFileInfo>
+
int main()
{
- return 3;
+ QFileInfo f(":/stuff.txt");
+ if (!f.exists())
+ return 1;
+ if (!f.isFile())
+ return 2;
+ QFileInfo d(":/subdir");
+ if (!d.exists())
+ return 3;
+ if (!d.isDir())
+ return 4;
}
diff --git a/tests/auto/blackbox/testdata-qt/qrc/bla.qrc b/tests/auto/blackbox/testdata-qt/qrc/bla.qrc
index 46c93847e..cad4c6cd3 100644
--- a/tests/auto/blackbox/testdata-qt/qrc/bla.qrc
+++ b/tests/auto/blackbox/testdata-qt/qrc/bla.qrc
@@ -1,5 +1,6 @@
<RCC>
<qresource prefix="/">
<file>stuff.txt</file>
+ <file>subdir/</file>
</qresource>
</RCC>
diff --git a/tests/auto/blackbox/testdata-qt/qrc/subdir/dummy.txt b/tests/auto/blackbox/testdata-qt/qrc/subdir/dummy.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/blackbox/testdata-qt/qrc/subdir/dummy.txt
diff --git a/tests/auto/blackbox/tst_blackboxqt.cpp b/tests/auto/blackbox/tst_blackboxqt.cpp
index 03e52590b..46f9d2e21 100644
--- a/tests/auto/blackbox/tst_blackboxqt.cpp
+++ b/tests/auto/blackbox/tst_blackboxqt.cpp
@@ -365,7 +365,7 @@ void TestBlackboxQt::track_qobject_change()
void TestBlackboxQt::track_qrc()
{
QDir::setCurrent(testDataDir + "/qrc");
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(QbsRunParameters("run")), 0);
const QString fileName = relativeExecutableFilePath("i");
QVERIFY2(regularFileExists(fileName), qPrintable(fileName));
QDateTime dt = QFileInfo(fileName).lastModified();
@@ -377,9 +377,14 @@ void TestBlackboxQt::track_qrc()
f.write("bla");
f.close();
}
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(QbsRunParameters("run")), 0);
QVERIFY(regularFileExists(fileName));
QVERIFY(dt < QFileInfo(fileName).lastModified());
+ WAIT_FOR_NEW_TIMESTAMP();
+ touch("i.qbs");
+ QCOMPARE(runQbs(), 0);
+ QVERIFY2(m_qbsStdout.contains("Resolving"), m_qbsStdout.constData());
+ QVERIFY2(!m_qbsStdout.contains("rcc"), m_qbsStdout.constData());
}
void TestBlackboxQt::unmocable()