aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2024-01-19 17:38:11 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2024-01-29 15:14:49 +0000
commit6fa4d2169cc874d9b1a93ead3ef00d85f9baf106 (patch)
tree9904c2d89b6b9b2f68ce683dc3d7e0e252f61adb
parent54fd05f5a893cebcba05d568fb86fcea37102f45 (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.qdoc15
-rw-r--r--share/qbs/imports/qbs/Probes/QbsPkgConfigProbe.qbs6
-rw-r--r--share/qbs/imports/qbs/Probes/qbs-pkg-config-probe.js3
-rw-r--r--share/qbs/module-providers/qbspkgconfig.qbs6
-rw-r--r--src/lib/corelib/jsextensions/pkgconfigjs.cpp1
-rw-r--r--src/lib/pkgconfig/pkgconfig.cpp157
-rw-r--r--src/lib/pkgconfig/pkgconfig.h2
-rw-r--r--tests/auto/pkgconfig/testdata/requires-test-merged-static.json22
-rw-r--r--tests/auto/pkgconfig/testdata/requires-test-merged.json19
-rw-r--r--tests/auto/pkgconfig/tst_pkgconfig.cpp15
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")