diff options
-rw-r--r-- | doc/reference/modules/qt-modules.qdoc | 2 | ||||
-rw-r--r-- | src/app/qbs-setup-toolchains/xcodeprobe.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/api/project.cpp | 16 | ||||
-rw-r--r-- | src/lib/corelib/api/runenvironment.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraphloader.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/executor.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/inputartifactscanner.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/rescuableartifactdata.h | 3 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/rulesapplicator.cpp | 16 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/rulesapplicator.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/tools/fileinfo.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/tools/msvcinfo.cpp | 2 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtprofilesetup.cpp | 2 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata-qt/qrc/bla.cpp | 13 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata-qt/qrc/bla.qrc | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata-qt/qrc/subdir/dummy.txt | 0 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackboxqt.cpp | 9 |
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() |