diff options
-rw-r--r-- | src/app/qbs-setup-qt/setupqt.cpp | 26 | ||||
-rw-r--r-- | src/app/qbs/parser/parsercommand.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/api/project.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/api/project.h | 5 | ||||
-rw-r--r-- | src/lib/corelib/generators/generatordata.cpp | 9 | ||||
-rw-r--r-- | src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp | 15 | ||||
-rw-r--r-- | src/lib/corelib/language/scriptengine.cpp | 3 | ||||
-rw-r--r-- | src/lib/corelib/logging/logger.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/logging/logger.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/parser/qmljsengine_p.h | 3 | ||||
-rw-r--r-- | src/lib/corelib/tools/set.h | 17 | ||||
-rw-r--r-- | src/lib/corelib/tools/toolchains.cpp | 3 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtmoduleinfo.cpp | 10 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtmoduleinfo.h | 7 | ||||
-rw-r--r-- | tests/auto/api/tst_api.cpp | 4 |
16 files changed, 76 insertions, 52 deletions
diff --git a/src/app/qbs-setup-qt/setupqt.cpp b/src/app/qbs-setup-qt/setupqt.cpp index 635ca3b13..0abbaaa67 100644 --- a/src/app/qbs-setup-qt/setupqt.cpp +++ b/src/app/qbs-setup-qt/setupqt.cpp @@ -45,6 +45,7 @@ #include <tools/architectures.h> #include <tools/hostosinfo.h> #include <tools/profile.h> +#include <tools/set.h> #include <tools/settings.h> #include <tools/version.h> @@ -288,11 +289,12 @@ QtEnvironment SetupQt::fetchEnvironment(const QString &qmakePath) static bool isToolchainProfile(const Profile &profile) { - const QSet<QString> actual = profile.allKeys(Profile::KeySelectionRecursive).toSet(); - QSet<QString> expected = QSet<QString>() << QLatin1String("qbs.toolchain"); + const auto actual = Internal::Set<QString>::fromList( + profile.allKeys(Profile::KeySelectionRecursive)); + Internal::Set<QString> expected = Internal::Set<QString> { QLatin1String("qbs.toolchain") }; if (HostOsInfo::isMacosHost()) expected.insert(QLatin1String("qbs.targetOS")); // match only Xcode profiles - return QSet<QString>(actual).unite(expected) == actual; + return Internal::Set<QString>(actual).unite(expected) == actual; } static bool isQtProfile(const Profile &profile) @@ -442,11 +444,12 @@ static Match compatibility(const QtEnvironment &env, const Profile &toolchainPro { Match match = MatchFull; - const QSet<QString> toolchainNames = toolchainProfile.value(QLatin1String("qbs.toolchain")) - .toStringList().toSet(); - const QSet<QString> mkspecToolchainNames = qbsToolchainFromQtMkspec(env.mkspecName).toSet(); + const auto toolchainNames = Internal::Set<QString>::fromList( + toolchainProfile.value(QLatin1String("qbs.toolchain")).toStringList()); + const auto mkspecToolchainNames = Internal::Set<QString>::fromList( + qbsToolchainFromQtMkspec(env.mkspecName)); if (areProfilePropertiesIncompatible(toolchainNames, mkspecToolchainNames)) { - QSet<QString> intersection = toolchainNames; + auto intersection = toolchainNames; intersection.intersect(mkspecToolchainNames); if (!intersection.isEmpty()) match = MatchPartial; @@ -454,10 +457,11 @@ static Match compatibility(const QtEnvironment &env, const Profile &toolchainPro return MatchNone; } - const QSet<QString> targetOsNames = toolchainProfile.value(QLatin1String("qbs.targetOS")) - .toStringList().toSet(); - if (areProfilePropertiesIncompatible(qbsTargetOsFromQtMkspec(env.mkspecName).toSet(), - targetOsNames)) + const auto targetOsNames = Internal::Set<QString>::fromList( + toolchainProfile.value(QLatin1String("qbs.targetOS")).toStringList()); + if (areProfilePropertiesIncompatible( + Internal::Set<QString>::fromList(qbsTargetOsFromQtMkspec(env.mkspecName)), + targetOsNames)) return MatchNone; const QString toolchainArchitecture = toolchainProfile.value(QLatin1String("qbs.architecture")) diff --git a/src/app/qbs/parser/parsercommand.cpp b/src/app/qbs/parser/parsercommand.cpp index 63bd46710..40c4fa112 100644 --- a/src/app/qbs/parser/parsercommand.cpp +++ b/src/app/qbs/parser/parsercommand.cpp @@ -44,9 +44,9 @@ #include <logging/translator.h> #include <tools/error.h> #include <tools/hostosinfo.h> +#include <tools/set.h> #include <QtCore/qmap.h> -#include <QtCore/qset.h> namespace qbs { using namespace Internal; @@ -91,7 +91,7 @@ QList<CommandLineOption::Type> Command::actualSupportedOptions() const void Command::parseOptions(QStringList &input) { - QSet<CommandLineOption *> usedOptions; + Set<CommandLineOption *> usedOptions; while (!input.isEmpty()) { const QString optionString = input.first(); if (!optionString.startsWith(QLatin1Char('-'))) diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp index 4d79168eb..61ee8d57e 100644 --- a/src/lib/corelib/api/project.cpp +++ b/src/lib/corelib/api/project.cpp @@ -1085,10 +1085,10 @@ QHash<QString, QString> Project::usedEnvironment() const return d->internalProject->usedEnvironment; } -QSet<QString> Project::buildSystemFiles() const +std::set<QString> Project::buildSystemFiles() const { - QBS_ASSERT(isValid(), return QSet<QString>()); - return d->internalProject->buildSystemFiles.toQSet(); + QBS_ASSERT(isValid(), return std::set<QString>()); + return d->internalProject->buildSystemFiles.toStdSet(); } RuleCommandList Project::ruleCommands(const ProductData &product, diff --git a/src/lib/corelib/api/project.h b/src/lib/corelib/api/project.h index 0462682b1..5456da335 100644 --- a/src/lib/corelib/api/project.h +++ b/src/lib/corelib/api/project.h @@ -46,10 +46,11 @@ #include <QtCore/qshareddata.h> #include <QtCore/qhash.h> #include <QtCore/qlist.h> -#include <QtCore/qset.h> #include <QtCore/qstringlist.h> #include <QtCore/qvariant.h> +#include <set> + QT_BEGIN_NAMESPACE class QIODevice; class QObject; @@ -131,7 +132,7 @@ public: QVariantMap projectConfiguration() const; QHash<QString, QString> usedEnvironment() const; - QSet<QString> buildSystemFiles() const; + std::set<QString> buildSystemFiles() const; RuleCommandList ruleCommands(const ProductData &product, const QString &inputFilePath, const QString &outputFileTag, ErrorInfo *error = 0) const; diff --git a/src/lib/corelib/generators/generatordata.cpp b/src/lib/corelib/generators/generatordata.cpp index 47178bca3..eb0cb2d09 100644 --- a/src/lib/corelib/generators/generatordata.cpp +++ b/src/lib/corelib/generators/generatordata.cpp @@ -39,6 +39,7 @@ #include "generatordata.h" #include <tools/error.h> +#include <tools/set.h> #include <QtCore/qdir.h> @@ -93,7 +94,7 @@ QString GeneratableProjectData::name() const QDir GeneratableProject::baseBuildDirectory() const { - QSet<QString> baseBuildDirectory; + Internal::Set<QString> baseBuildDirectory; QMapIterator<QString, ProjectData> it(data); while (it.hasNext()) { it.next(); @@ -102,19 +103,19 @@ QDir GeneratableProject::baseBuildDirectory() const baseBuildDirectory.insert(dir.absolutePath()); } Q_ASSERT(baseBuildDirectory.size() == 1); - return baseBuildDirectory.values().first(); + return *baseBuildDirectory.begin(); } QFileInfo GeneratableProject::filePath() const { - QSet<QString> filePath; + Internal::Set<QString> filePath; QMapIterator<QString, ProjectData> it(data); while (it.hasNext()) { it.next(); filePath.insert(it.value().location().filePath()); } Q_ASSERT(filePath.size() == 1); - return filePath.values().first(); + return *filePath.begin(); } bool GeneratableProject::hasMultipleConfigurations() const diff --git a/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp b/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp index 22bc72841..c1a60e919 100644 --- a/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp +++ b/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp @@ -37,6 +37,8 @@ #include "msbuild/items/msbuildfilter.h" #include "msbuild/items/msbuildnone.h" +#include <tools/set.h> + #include <QtCore/qfileinfo.h> #include <QtCore/qvector.h> @@ -123,11 +125,11 @@ MSBuildFiltersProject::MSBuildFiltersProject(const GeneratableProductData &produ filter->appendProperty(QStringLiteral("SourceControlFiles"), options->sourceControlFiles()); } - QSet<QString> allFiles; + Internal::Set<QString> allFiles; for (const auto &productData : product.data.values()) { for (const auto &groupData : productData.groups()) if (groupData.isEnabled()) - allFiles.unite(groupData.allFilePaths().toSet()); + allFiles.unite(Internal::Set<QString>::fromList(groupData.allFilePaths())); } auto allFilesSorted = allFiles.toList(); diff --git a/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp b/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp index 45aafbac7..6aa9857fb 100644 --- a/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp +++ b/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp @@ -336,20 +336,15 @@ void MSBuildQbsProductProject::addItemDefGroup(const Project &project, debugBuild ? QStringLiteral("false") : QStringLiteral("true")); } -// No QSet::intersects until Qt 5.6 -template <class T> bool setIntersects(const QSet<T> &this_, const QSet<T> &other) -{ - QSet<T> s = this_; - return !s.intersect(other).isEmpty(); -} - static MSBuildFileItem *fileItemForFileTags(const QList<QString> &fileTags, IMSBuildItemGroup *parent = 0) { - const auto fileTagsSet = fileTags.toSet(); - if (setIntersects(fileTagsSet, QSet<QString>() << QStringLiteral("hpp"))) + const auto fileTagsSet = Internal::Set<QString>::fromList(fileTags); + if (fileTagsSet.intersects( + Internal::Set<QString> { QStringLiteral("hpp") })) return new MSBuildClInclude(parent); - if (setIntersects(fileTagsSet, QSet<QString>() << QStringLiteral("c") << QStringLiteral("cpp"))) + if (fileTagsSet.intersects( + Internal::Set<QString> { QStringLiteral("c"), QStringLiteral("cpp") })) return new MSBuildClCompile(parent); return new MSBuildNone(parent); } diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp index 1622769ad..c071b2c14 100644 --- a/src/lib/corelib/language/scriptengine.cpp +++ b/src/lib/corelib/language/scriptengine.cpp @@ -58,13 +58,14 @@ #include <QtCore/qdiriterator.h> #include <QtCore/qfile.h> #include <QtCore/qfileinfo.h> -#include <QtCore/qset.h> #include <QtCore/qtextstream.h> #include <QtCore/qtimer.h> #include <QtScript/qscriptclass.h> #include <QtScript/qscriptvalueiterator.h> +#include <set> + namespace qbs { namespace Internal { diff --git a/src/lib/corelib/logging/logger.cpp b/src/lib/corelib/logging/logger.cpp index a11c2181d..277e40427 100644 --- a/src/lib/corelib/logging/logger.cpp +++ b/src/lib/corelib/logging/logger.cpp @@ -43,13 +43,15 @@ #include "logger.h" +#include <tools/set.h> + #include <QtCore/qbytearray.h> #include <QtCore/qelapsedtimer.h> -#include <QtCore/qset.h> #include <QtCore/qvariant.h> #include <cstdarg> #include <mutex> +#include <set> #include <stdio.h> namespace qbs { @@ -143,7 +145,7 @@ LogWriter operator<<(LogWriter w, const QStringList &strList) return w; } -LogWriter operator<<(LogWriter w, const QSet<QString> &strSet) +LogWriter operator<<(LogWriter w, const Internal::Set<QString> &strSet) { bool firstLoop = true; w.write('('); diff --git a/src/lib/corelib/logging/logger.h b/src/lib/corelib/logging/logger.h index be0c1de3d..aee59dde4 100644 --- a/src/lib/corelib/logging/logger.h +++ b/src/lib/corelib/logging/logger.h @@ -55,6 +55,8 @@ QT_END_NAMESPACE namespace qbs { namespace Internal { +template<typename T> class Set; + // Note that while these classes are not part of the API, we export some stuff for use by // our command line tools for the sake of a uniform logging approach. @@ -99,7 +101,7 @@ QBS_EXPORT LogWriter operator<<(LogWriter w, const char *str); QBS_EXPORT LogWriter operator<<(LogWriter w, const QByteArray &byteArray); QBS_EXPORT LogWriter operator<<(LogWriter w, const QString &str); QBS_EXPORT LogWriter operator<<(LogWriter w, const QStringList &strList); -QBS_EXPORT LogWriter operator<<(LogWriter w, const QSet<QString> &strSet); +QBS_EXPORT LogWriter operator<<(LogWriter w, const Internal::Set<QString> &strSet); QBS_EXPORT LogWriter operator<<(LogWriter w, const QVariant &variant); QBS_EXPORT LogWriter operator<<(LogWriter w, int n); QBS_EXPORT LogWriter operator<<(LogWriter w, qint64 n); diff --git a/src/lib/corelib/parser/qmljsengine_p.h b/src/lib/corelib/parser/qmljsengine_p.h index 14d5dfd74..be88b917b 100644 --- a/src/lib/corelib/parser/qmljsengine_p.h +++ b/src/lib/corelib/parser/qmljsengine_p.h @@ -56,7 +56,8 @@ #include "qmljsmemorypool_p.h" #include <QtCore/qstring.h> -#include <QtCore/qset.h> + +#include <set> namespace QbsQmlJS { diff --git a/src/lib/corelib/tools/set.h b/src/lib/corelib/tools/set.h index 99954061a..f299ec71e 100644 --- a/src/lib/corelib/tools/set.h +++ b/src/lib/corelib/tools/set.h @@ -49,6 +49,7 @@ #include <algorithm> #include <functional> #include <iterator> +#include <set> #include <type_traits> namespace qbs { @@ -140,8 +141,9 @@ public: QString toString() const; static Set<T> fromList(const QList<T> &list); + static Set<T> fromStdSet(const std::set<T> &set); QList<T> toList() const { return m_data.toList(); } - QSet<T> toQSet() const; + std::set<T> toStdSet() const; template<typename U> static Set<T> filtered(const Set<U> &s); @@ -300,11 +302,18 @@ template<typename T> Set<T> Set<T>::fromList(const QList<T> &list) return s; } -template<typename T> QSet<T> Set<T>::toQSet() const +template<typename T> Set<T> Set<T>::fromStdSet(const std::set<T> &set) { - QSet<T> set; + Set<T> s; + std::copy(set.cbegin(), set.cend(), std::back_inserter(s.m_data)); + return s; +} + +template<typename T> std::set<T> Set<T>::toStdSet() const +{ + std::set<T> set; for (auto it = cbegin(); it != cend(); ++it) - set << *it; + set.insert(*it); return set; } diff --git a/src/lib/corelib/tools/toolchains.cpp b/src/lib/corelib/tools/toolchains.cpp index 28b00908b..b148fce87 100644 --- a/src/lib/corelib/tools/toolchains.cpp +++ b/src/lib/corelib/tools/toolchains.cpp @@ -39,7 +39,8 @@ #include "toolchains.h" #include <QtCore/qmap.h> -#include <QtCore/qset.h> + +#include <set> namespace qbs { diff --git a/src/lib/qtprofilesetup/qtmoduleinfo.cpp b/src/lib/qtprofilesetup/qtmoduleinfo.cpp index 115099754..91215a9f2 100644 --- a/src/lib/qtprofilesetup/qtmoduleinfo.cpp +++ b/src/lib/qtprofilesetup/qtmoduleinfo.cpp @@ -43,6 +43,7 @@ #include <logging/translator.h> #include <tools/error.h> #include <tools/profile.h> +#include <tools/set.h> #include <QtCore/qdiriterator.h> #include <QtCore/qfile.h> @@ -160,7 +161,8 @@ QString QtModuleInfo::libNameForLinker(const QtEnvironment &qtEnvironment, bool return libName; } -void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, QSet<QString> *nonExistingPrlFiles) +void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, + Internal::Set<QString> *nonExistingPrlFiles) { setupLibraries(qtEnv, true, nonExistingPrlFiles); setupLibraries(qtEnv, false, nonExistingPrlFiles); @@ -172,7 +174,7 @@ static QStringList makeList(const QByteArray &s) } void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, bool debugBuild, - QSet<QString> *nonExistingPrlFiles) + Internal::Set<QString> *nonExistingPrlFiles) { if (!hasLibrary) return; // Can happen for Qt4 convenience modules, like "widgets". @@ -485,7 +487,7 @@ QList<QtModuleInfo> allQt4Modules(const QtEnvironment &qtEnvironment) modules[i].mustExist = false; } - QSet<QString> nonExistingPrlFiles; + Internal::Set<QString> nonExistingPrlFiles; for (int i = 0; i < modules.count(); ++i) { QtModuleInfo &module = modules[i]; if (qtEnvironment.staticBuild) @@ -531,7 +533,7 @@ static QList<QByteArray> getPriFileContentsRecursively(const Profile &profile, QList<QtModuleInfo> allQt5Modules(const Profile &profile, const QtEnvironment &qtEnvironment) { - QSet<QString> nonExistingPrlFiles; + Internal::Set<QString> nonExistingPrlFiles; QList<QtModuleInfo> modules; QDirIterator dit(qtEnvironment.mkspecBasePath + QLatin1String("/modules")); while (dit.hasNext()) { diff --git a/src/lib/qtprofilesetup/qtmoduleinfo.h b/src/lib/qtprofilesetup/qtmoduleinfo.h index 5d1b6d956..318b5608f 100644 --- a/src/lib/qtprofilesetup/qtmoduleinfo.h +++ b/src/lib/qtprofilesetup/qtmoduleinfo.h @@ -39,7 +39,6 @@ #ifndef QBS_QTMODULEINFO_H #define QBS_QTMODULEINFO_H -#include <QtCore/qset.h> #include <QtCore/qstringlist.h> namespace qbs { @@ -48,6 +47,8 @@ class Profile; namespace Internal { +template<typename T> class Set; + class QtModuleInfo { public: @@ -62,7 +63,7 @@ public: QString libBaseName(const QString &libName, bool debugBuild, const QtEnvironment &qtEnvironment) const; QString libNameForLinker(const QtEnvironment &qtEnvironment, bool debugBuild) const; - void setupLibraries(const QtEnvironment &qtEnv, QSet<QString> *nonExistingPrlFiles); + void setupLibraries(const QtEnvironment &qtEnv, Internal::Set<QString> *nonExistingPrlFiles); bool isFramework(const QtEnvironment &qtEnv) const; QString modulePrefix; // default is empty and means "Qt". @@ -100,7 +101,7 @@ public: private: void setupLibraries(const QtEnvironment &qtEnv, bool debugBuild, - QSet<QString> *nonExistingPrlFiles); + Internal::Set<QString> *nonExistingPrlFiles); }; QList<QtModuleInfo> allQt4Modules(const QtEnvironment &qtEnvironment); diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index adb873e3e..eadbc1559 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -35,6 +35,7 @@ #include <tools/fileinfo.h> #include <tools/hostosinfo.h> #include <tools/qttools.h> +#include <tools/set.h> #include <tools/toolchains.h> #include <QtCore/qcoreapplication.h> @@ -1407,7 +1408,8 @@ void TestApi::listBuildSystemFiles() m_logSink, 0)); waitForFinished(job.data()); QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString())); - const QSet<QString> buildSystemFiles = job->project().buildSystemFiles(); + const auto buildSystemFiles = qbs::Internal::Set<QString>::fromStdSet( + job->project().buildSystemFiles()); QVERIFY(buildSystemFiles.contains(setupParams.projectFilePath())); QVERIFY(buildSystemFiles.contains(setupParams.buildRoot() + "/subproject2/subproject2.qbs")); QVERIFY(buildSystemFiles.contains(setupParams.buildRoot() |