aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2021-08-19 12:14:30 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2021-08-20 19:22:04 +0000
commit8fa1649691f75185a5fc1e1d625051508f5b8d9a (patch)
tree64a91dc5c4ee24ecae67039b15fea7b185311058
parent4d85d558597f9405b9c9d20446156cd63d5b09c2 (diff)
Use common Cpp.collectLibraryDependencies() function
... for MSVC and all bare-metal toolchains. We can use this common function because it has the same implementation. The only addition is that we have separated the handling of static and dynamic libraries that is related with their suffixes. Change-Id: Id83cb0bc9c3aa08a2f32915851a8ac58d7865588 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/modules/cpp/cpp.js21
-rw-r--r--share/qbs/modules/cpp/msvc.js68
2 files changed, 13 insertions, 76 deletions
diff --git a/share/qbs/modules/cpp/cpp.js b/share/qbs/modules/cpp/cpp.js
index 9563a5c84..af9c7df66 100644
--- a/share/qbs/modules/cpp/cpp.js
+++ b/share/qbs/modules/cpp/cpp.js
@@ -214,15 +214,18 @@ function collectLibraryDependencies(product) {
function sanitizedModuleListProperty(obj, moduleName, propertyName) {
return ensureArray(ModUtils.sanitizedModuleProperty(obj, moduleName, propertyName));
}
- var externalLibs = [].concat(
- sanitizedModuleListProperty(obj, "cpp", "staticLibraries"),
- sanitizedModuleListProperty(obj, "cpp", "dynamicLibraries"));
- var libSuffix = obj.moduleProperty("cpp", "staticLibrarySuffix");
- externalLibs.forEach(function(libName) {
- if (!libName.endsWith(libSuffix) && !libName.startsWith('@'))
- libName += libSuffix;
- addFilePath(libName);
- });
+ function handleExternalLibraries(tag, suffix) {
+ var externalLibs = sanitizedModuleListProperty(obj, "cpp", tag) || [];
+ externalLibs.forEach(function(libName) {
+ if (!libName.endsWith(suffix) && !libName.startsWith('@'))
+ libName += suffix;
+ addFilePath(libName, false);
+ });
+ }
+ handleExternalLibraries("staticLibraries",
+ obj.moduleProperty("cpp", "staticLibrarySuffix"));
+ handleExternalLibraries("dynamicLibraries",
+ obj.moduleProperty("cpp", "dynamicLibraryImportSuffix"));
}
function traverse(dep) {
diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js
index 1ebe5173b..46c8aa6ec 100644
--- a/share/qbs/modules/cpp/msvc.js
+++ b/share/qbs/modules/cpp/msvc.js
@@ -319,72 +319,6 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli
return [cmd];
}
-function collectLibraryDependencies(product) {
- var seen = {};
- var result = [];
-
- function addFilePath(filePath, wholeArchive, productName) {
- result.push({ filePath: filePath, wholeArchive: wholeArchive, productName: productName });
- }
-
- function addArtifactFilePaths(dep, artifacts) {
- if (!artifacts)
- return;
- var artifactFilePaths = artifacts.map(function(a) { return a.filePath; });
- var wholeArchive = dep.parameters.cpp && dep.parameters.cpp.linkWholeArchive;
- var artifactsAreImportLibs = artifacts.length > 0
- && artifacts[0].fileTags.contains("dynamiclibrary_import");
- for (var i = 0; i < artifactFilePaths.length; ++i) {
- addFilePath(artifactFilePaths[i], wholeArchive,
- artifactsAreImportLibs ? dep.name : undefined);
- }
- }
-
- function addExternalLibs(obj) {
- if (!obj.cpp)
- return;
- function ensureArray(a) {
- return (a instanceof Array) ? a : [];
- }
- function sanitizedModuleListProperty(obj, moduleName, propertyName) {
- return ensureArray(ModUtils.sanitizedModuleProperty(obj, moduleName, propertyName));
- }
- var externalLibs = [].concat(
- sanitizedModuleListProperty(obj, "cpp", "staticLibraries"),
- sanitizedModuleListProperty(obj, "cpp", "dynamicLibraries"));
- externalLibs.forEach(function (libName) {
- if (!libName.match(/\.lib$/i) && !libName.startsWith('@'))
- libName += ".lib";
- addFilePath(libName, false);
- });
- }
-
- function traverse(dep) {
- if (seen.hasOwnProperty(dep.name))
- return;
-
- if (dep.parameters.cpp && dep.parameters.cpp.link === false)
- return;
-
- var staticLibraryArtifacts = dep.artifacts["staticlibrary"];
- var dynamicLibraryArtifacts = staticLibraryArtifacts
- ? null : dep.artifacts["dynamiclibrary_import"];
- if (staticLibraryArtifacts) {
- seen[dep.name] = true;
- dep.dependencies.forEach(traverse);
- addArtifactFilePaths(dep, staticLibraryArtifacts);
- addExternalLibs(dep);
- } else if (dynamicLibraryArtifacts) {
- seen[dep.name] = true;
- addArtifactFilePaths(dep, dynamicLibraryArtifacts);
- }
- }
-
- product.dependencies.forEach(traverse);
- addExternalLibs(product);
- return result;
-}
-
function linkerSupportsWholeArchive(product)
{
return Utilities.versionCompare(product.cpp.compilerVersion, "19.0.24215.1") >= 0
@@ -524,7 +458,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) {
var wholeArchiveSupported = linkerSupportsWholeArchive(product);
var wholeArchiveRequested = false;
- var libDeps = collectLibraryDependencies(product);
+ var libDeps = Cpp.collectLibraryDependencies(product);
var prevLib;
for (i = 0; i < libDeps.length; ++i) {
var dep = libDeps[i];