diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-01-19 17:38:11 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-01-29 15:14:49 +0000 |
commit | 6fa4d2169cc874d9b1a93ead3ef00d85f9baf106 (patch) | |
tree | 9904c2d89b6b9b2f68ce683dc3d7e0e252f61adb | |
parent | 54fd05f5a893cebcba05d568fb86fcea37102f45 (diff) |
Remove qbspkgconfig.mergeDependencies
As promised.
Change-Id: I2e13d220057225f1afcad0cab1e5e049313cae2b
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r-- | doc/reference/module-providers/qbspkgconfig-module-provider.qdoc | 15 | ||||
-rw-r--r-- | share/qbs/imports/qbs/Probes/QbsPkgConfigProbe.qbs | 6 | ||||
-rw-r--r-- | share/qbs/imports/qbs/Probes/qbs-pkg-config-probe.js | 3 | ||||
-rw-r--r-- | share/qbs/module-providers/qbspkgconfig.qbs | 6 | ||||
-rw-r--r-- | src/lib/corelib/jsextensions/pkgconfigjs.cpp | 1 | ||||
-rw-r--r-- | src/lib/pkgconfig/pkgconfig.cpp | 157 | ||||
-rw-r--r-- | src/lib/pkgconfig/pkgconfig.h | 2 | ||||
-rw-r--r-- | tests/auto/pkgconfig/testdata/requires-test-merged-static.json | 22 | ||||
-rw-r--r-- | tests/auto/pkgconfig/testdata/requires-test-merged.json | 19 | ||||
-rw-r--r-- | tests/auto/pkgconfig/tst_pkgconfig.cpp | 15 |
10 files changed, 2 insertions, 244 deletions
diff --git a/doc/reference/module-providers/qbspkgconfig-module-provider.qdoc b/doc/reference/module-providers/qbspkgconfig-module-provider.qdoc index 51f3bccb7..b5d720d01 100644 --- a/doc/reference/module-providers/qbspkgconfig-module-provider.qdoc +++ b/doc/reference/module-providers/qbspkgconfig-module-provider.qdoc @@ -120,18 +120,3 @@ \defaultvalue \c "" on macOS, \c qbs.sysroot on other platforms */ - -/*! - \qmlproperty bool qbspkgconfig::mergeDependencies - \obsolete - - Holds whether dependencies should be merged by pkg-config or \QBS. - - If set to true, dependencies are merged by pkg-config meaning each generated module - is self-contained and does not depend on other modules. If set to false, generated modules - may depend on other modules and property merging is done by \QBS. - - \defaultvalue \c false - - Deprecated in \QBS 2.2.0. -*/ diff --git a/share/qbs/imports/qbs/Probes/QbsPkgConfigProbe.qbs b/share/qbs/imports/qbs/Probes/QbsPkgConfigProbe.qbs index 066dc26c3..5acec6bc0 100644 --- a/share/qbs/imports/qbs/Probes/QbsPkgConfigProbe.qbs +++ b/share/qbs/imports/qbs/Probes/QbsPkgConfigProbe.qbs @@ -41,9 +41,6 @@ Probe { property path _sysroot - // TODO: deprecate in 2.2, remove in 2.3 - property bool _mergeDependencies: false - // Output property var packages property var packagesByModuleName @@ -57,8 +54,7 @@ Probe { _libDirs, _staticMode, _definePrefix, - _sysroot, - _mergeDependencies); + _sysroot); packages = result.packages; packagesByModuleName = result.packagesByModuleName; brokenPackages = result.brokenPackages; diff --git a/share/qbs/imports/qbs/Probes/qbs-pkg-config-probe.js b/share/qbs/imports/qbs/Probes/qbs-pkg-config-probe.js index abfa3fcf2..3978ac4b6 100644 --- a/share/qbs/imports/qbs/Probes/qbs-pkg-config-probe.js +++ b/share/qbs/imports/qbs/Probes/qbs-pkg-config-probe.js @@ -79,7 +79,7 @@ function getQmakePaths(pkg) { } function configure( - executableFilePath, extraPaths, libDirs, staticMode, definePrefix, sysroot, mergeDependencies) { + executableFilePath, extraPaths, libDirs, staticMode, definePrefix, sysroot) { var result = {}; result.packages = []; @@ -94,7 +94,6 @@ function configure( if (options.sysroot) options.allowSystemLibraryPaths = true; options.staticMode = staticMode; - options.mergeDependencies = mergeDependencies; options.extraPaths = extraPaths; if (options.sysroot && !options.libDirs) { options.libDirs = [ diff --git a/share/qbs/module-providers/qbspkgconfig.qbs b/share/qbs/module-providers/qbspkgconfig.qbs index d5257aa55..5e027788e 100644 --- a/share/qbs/module-providers/qbspkgconfig.qbs +++ b/share/qbs/module-providers/qbspkgconfig.qbs @@ -62,12 +62,6 @@ ModuleProvider { property path sysroot: qbs.toolchain && qbs.toolchain.includes("xcode") ? undefined : qbs.sysroot - property bool mergeDependencies: false - PropertyOptions { - name: "mergeDependencies" - removalVersion: "2.3.0" - } - Probes.QbsPkgConfigProbe { id: theProbe // TODO: without explicit 'parent' we do not have access to the fake "qbs" scope diff --git a/src/lib/corelib/jsextensions/pkgconfigjs.cpp b/src/lib/corelib/jsextensions/pkgconfigjs.cpp index e663c537f..817a3dfb9 100644 --- a/src/lib/corelib/jsextensions/pkgconfigjs.cpp +++ b/src/lib/corelib/jsextensions/pkgconfigjs.cpp @@ -242,7 +242,6 @@ PkgConfig::Options PkgConfigJs::convertOptions(const QProcessEnvironment &env, c result.disableUninstalled = map.value(QStringLiteral("disableUninstalled"), true).toBool(); result.staticMode = map.value(QStringLiteral("staticMode"), false).toBool(); result.definePrefix = map.value(QStringLiteral("definePrefix"), false).toBool(); - result.mergeDependencies = map.value(QStringLiteral("mergeDependencies"), true).toBool(); result.globalVariables = variablesFromQVariantMap(map.value(QStringLiteral("globalVariables")).toMap()); result.systemVariables = envToVariablesMap(env); diff --git a/src/lib/pkgconfig/pkgconfig.cpp b/src/lib/pkgconfig/pkgconfig.cpp index b2c3d4d71..6b3bde46c 100644 --- a/src/lib/pkgconfig/pkgconfig.cpp +++ b/src/lib/pkgconfig/pkgconfig.cpp @@ -106,50 +106,6 @@ constexpr inline char listSeparator() noexcept #endif } -// based on https://stackoverflow.com/a/33135699/295518 -int compareVersions(std::string_view v1, std::string_view v2) -{ - for (size_t i = 0, j = 0; i < v1.length() || j < v2.length(); ) { - size_t acc1 = 0; - size_t acc2 = 0; - - while (i < v1.length() && v1[i] != '.') { - acc1 = acc1 * 10 + (v1[i] - '0'); - i++; - } - while (j < v2.length() && v2[j] != '.') { - acc2 = acc2 * 10 + (v2[j] - '0'); - j++; - } - - if (acc1 < acc2) - return -1; - if (acc1 > acc2) - return +1; - - ++i; - ++j; - } - return 0; -} - -using ComparisonType = PcPackage::RequiredVersion::ComparisonType; - -bool versionTest(ComparisonType comparison, std::string_view a, std::string_view b) -{ - switch (comparison) { - case ComparisonType::LessThan: return compareVersions(a, b) < 0; - case ComparisonType::GreaterThan: return compareVersions(a, b) > 0; - case ComparisonType::LessThanEqual: return compareVersions(a, b) <= 0; - case ComparisonType::GreaterThanEqual: return compareVersions(a, b) >= 0; - case ComparisonType::Equal: return compareVersions(a, b) == 0; - case ComparisonType::NotEqual: return compareVersions(a, b) != 0; - case ComparisonType::AlwaysMatch: return true; - } - - return false; -} - [[noreturn]] void raizeUnknownPackageException(std::string_view package) { std::string message; @@ -334,116 +290,6 @@ PcBrokenPackage makeVersionMismatchDependency( package.filePath, package.baseFileName, std::move(message)}; } -PkgConfig::Packages PkgConfig::mergeDependencies(const PkgConfig::Packages &packages) const -{ - std::unordered_map<std::string_view, const PcPackageVariant *> packageHash; - - struct MergedHashEntry - { - PcPackageVariant package; // merged package or broken package - std::vector<const PcPackage *> deps; // unmerged transitive deps, including Package itself - }; - std::unordered_map<std::string, MergedHashEntry> mergedHash; - - for (const auto &package: packages) - packageHash[package.getBaseFileName()] = &package; - - auto func = [&](const PcPackageVariant &package, auto &f) -> const MergedHashEntry & - { - const auto it = mergedHash.find(package.getBaseFileName()); - if (it != mergedHash.end()) - return it->second; - - auto &entry = mergedHash[package.getBaseFileName()]; - - auto visitor = [&](auto &&package) -> PcPackageVariant { - - using T = std::decay_t<decltype(package)>; - if constexpr (std::is_same_v<T, PcPackage>) { // NOLINT - - using Flags = std::vector<PcPackage::Flag>; - - // returns true if multiple copies of the flag can present in the same package - // we can't properly merge flags that have multiple parameters except for - // -framework which we handle correctly. - auto canHaveDuplicates = [](const PcPackage::Flag::Type &type) { - return type == PcPackage::Flag::Type::LinkerFlag - || type == PcPackage::Flag::Type::CompilerFlag; - }; - - std::unordered_set<PcPackage::Flag> visitedFlags; - // appends only those flags to the target that were not seen before (except for - // ones that can have duplicates) - auto mergeFlags = [&](Flags &target, const Flags &source) - { - for (const auto &flag: source) { - if (canHaveDuplicates(flag.type) || visitedFlags.insert(flag).second) - target.push_back(flag); - } - }; - - std::unordered_set<const PcPackage *> visitedDeps; - - PcPackage result; - // copy only meta info for now - result.filePath = package.filePath; - result.baseFileName = package.baseFileName; - result.name = package.name; - result.version = package.version; - result.description = package.description; - result.url = package.url; - result.variables = package.variables; - - auto allDependencies = package.requiresPublic; - if (m_options.staticMode) - allDependencies << package.requiresPrivate; - - for (const auto &dependency: allDependencies) { - const auto it = packageHash.find(dependency.name); - if (it == packageHash.end()) - return makeMissingDependency(result, dependency); - - const auto childEntry = f(*it->second, f); - if (childEntry.package.isBroken()) - return makeBrokenDependency(result, dependency); - - const auto &mergedPackage = childEntry.package.asPackage(); - const bool versionOk = versionTest( - dependency.comparison, mergedPackage.version, dependency.version); - if (!versionOk) - return makeVersionMismatchDependency(result, mergedPackage, dependency); - - for (const auto *dep: childEntry.deps) { - if (visitedDeps.insert(dep).second) - entry.deps.push_back(dep); - } - } - - entry.deps.push_back(&package); - - for (const auto *dep: entry.deps) { - mergeFlags(result.libs, dep->libs); - mergeFlags(result.cflags, dep->cflags); - } - - return result; - } - return package; - }; - entry.package = package.visit(visitor); - - return entry; - }; - - for (const auto &package: packages) - func(package, func); - - Packages result; - for (auto &[key, value]: mergedHash) - result.push_back(std::move(value.package)); - return result; -} - PkgConfig::Packages PkgConfig::findPackages() const { Packages result; @@ -480,9 +326,6 @@ PkgConfig::Packages PkgConfig::findPackages() const result.emplace_back(std::move(pkg)); } - if (m_options.mergeDependencies) - result = mergeDependencies(result); - const auto lessThanPackage = [](const PcPackageVariant &lhs, const PcPackageVariant &rhs) { return lhs.getBaseFileName() < rhs.getBaseFileName(); diff --git a/src/lib/pkgconfig/pkgconfig.h b/src/lib/pkgconfig/pkgconfig.h index d50363e4a..fd4cc3253 100644 --- a/src/lib/pkgconfig/pkgconfig.h +++ b/src/lib/pkgconfig/pkgconfig.h @@ -58,7 +58,6 @@ public: std::vector<std::string> systemLibraryPaths; // PKG_CONFIG_SYSTEM_LIBRARY_PATH bool disableUninstalled{true}; // PKG_CONFIG_DISABLE_UNINSTALLED bool staticMode{false}; - bool mergeDependencies{true}; bool definePrefix{false}; VariablesMap globalVariables; VariablesMap systemVariables; @@ -78,7 +77,6 @@ public: private: Packages findPackages() const; - Packages mergeDependencies(const Packages &packages) const; private: Options m_options; diff --git a/tests/auto/pkgconfig/testdata/requires-test-merged-static.json b/tests/auto/pkgconfig/testdata/requires-test-merged-static.json deleted file mode 100644 index 2c43b2d40..000000000 --- a/tests/auto/pkgconfig/testdata/requires-test-merged-static.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "Name": "Requires test package", - "Description": "Dummy pkgconfig test package for testing Requires/Requires.private", - "Version": "1.0.0", - "Libs": [ - {"Type": "LibraryPath", "Value": "/public-dep/lib"}, - {"Type": "LibraryName", "Value": "public-dep"}, - {"Type": "LibraryPath", "Value": "/private-dep/lib"}, - {"Type": "LibraryName", "Value": "private-dep"}, - {"Type": "LibraryPath", "Value": "/requires-test/lib"}, - {"Type": "LibraryName", "Value": "requires-test"} - ], - "Cflags": [ - {"Type": "IncludePath", "Value": "/public-dep/include"}, - {"Type": "IncludePath", "Value": "/private-dep/include"}, - {"Type": "IncludePath", "Value": "/requires-test/include"} - ], - "Requires": [ - ], - "RequiresPrivate": [ - ] -} diff --git a/tests/auto/pkgconfig/testdata/requires-test-merged.json b/tests/auto/pkgconfig/testdata/requires-test-merged.json deleted file mode 100644 index 88114ba30..000000000 --- a/tests/auto/pkgconfig/testdata/requires-test-merged.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "Name": "Requires test package", - "Description": "Dummy pkgconfig test package for testing Requires/Requires.private", - "Version": "1.0.0", - "Libs": [ - {"Type": "LibraryPath", "Value": "/public-dep/lib"}, - {"Type": "LibraryName", "Value": "public-dep"}, - {"Type": "LibraryPath", "Value": "/requires-test/lib"}, - {"Type": "LibraryName", "Value": "requires-test"} - ], - "Cflags": [ - {"Type": "IncludePath", "Value": "/public-dep/include"}, - {"Type": "IncludePath", "Value": "/requires-test/include"} - ], - "Requires": [ - ], - "RequiresPrivate": [ - ] -} diff --git a/tests/auto/pkgconfig/tst_pkgconfig.cpp b/tests/auto/pkgconfig/tst_pkgconfig.cpp index ac94e1c48..86d954259 100644 --- a/tests/auto/pkgconfig/tst_pkgconfig.cpp +++ b/tests/auto/pkgconfig/tst_pkgconfig.cpp @@ -110,9 +110,6 @@ void TestPkgConfig::pkgConfig() if (jsonFileName.isEmpty()) jsonFileName = pcFileName; - if (!optionsMap.contains("mergeDependencies")) - optionsMap["mergeDependencies"] = false; - Options options = qbs::Internal::PkgConfigJs::convertOptions( QProcessEnvironment::systemEnvironment(), optionsMap); options.libDirs.push_back(m_workingDataDir.toStdString()); @@ -219,14 +216,6 @@ void TestPkgConfig::pkgConfig_data() << QStringLiteral("simple") << QString() << QVariantMap(); QTest::newRow("requires-test") << QStringLiteral("requires-test") << QString() << QVariantMap(); - QTest::newRow("requires-test-merged") - << QStringLiteral("requires-test") - << QStringLiteral("requires-test-merged") - << QVariantMap({{"mergeDependencies", true}}); - QTest::newRow("requires-test-merged-static") - << QStringLiteral("requires-test") - << QStringLiteral("requires-test-merged-static") - << QVariantMap({{"mergeDependencies", true}, {"staticMode", true}}); QTest::newRow("special-flags") << QStringLiteral("special-flags") << QString() << QVariantMap(); QTest::newRow("system") @@ -237,10 +226,6 @@ void TestPkgConfig::pkgConfig_data() << QStringLiteral("tilde") << QString() << QVariantMap(); QTest::newRow("variables") << QStringLiteral("variables") << QString() << QVariantMap(); - QTest::newRow("variables-merged") - << QStringLiteral("variables") - << QString() - << QVariantMap({{"mergeDependencies", true}}); QTest::newRow("whitespace") << QStringLiteral("whitespace") << QString() << QVariantMap(); QTest::newRow("base.name") |