diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2013-10-29 17:04:26 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-10-29 18:26:01 +0100 |
commit | 4d49aae4570ac059212d0a8ff7244b2779e0a546 (patch) | |
tree | 95b4385ad02504a67cf3656399a3f99dc47ed860 | |
parent | ff6483f79d5f89f4a68f20548e6d4f38b004fb94 (diff) |
Remove duplicates when transitively adding library dependencies.
When not doing that, the number of redundant linker arguments can reach
enormous values rather quickly. For instance, the size of Qt Creator's
build graph on Linux goes down by 10 per cent due to this change.
Task-number: QBS-435
Change-Id: I772fc6a6c90696b5d0a3e0ebd65315cf0773552f
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | share/qbs/modules/cpp/GenericGCC.qbs | 9 | ||||
-rw-r--r-- | share/qbs/modules/utils.js | 11 |
2 files changed, 16 insertions, 4 deletions
diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index 9445919e4..d07c6e69d 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -69,9 +69,9 @@ CppModule { var result = [] for (var i in inputs.dynamiclibrary) { var lib = inputs.dynamiclibrary[i] - result.push(lib.fileName) var impliedLibs = ModUtils.moduleProperties(lib, 'transitiveSOs') - result = result.concat(impliedLibs) + var libsToAdd = impliedLibs.concat([lib.fileName]); + result = ModUtils.uniqueConcat(result, libsToAdd); } return result } @@ -251,8 +251,9 @@ CppModule { if (product.moduleProperty("qbs", "targetOS").contains('linux')) { var transitiveSOs = ModUtils.modulePropertiesFromArtifacts(product, inputs.dynamiclibrary, 'cpp', 'transitiveSOs') - for (i in transitiveSOs) { - args.push("-Wl,-rpath-link=" + FileInfo.path(transitiveSOs[i])) + var uniqueSOs = ModUtils.uniqueConcat([], transitiveSOs) + for (i in uniqueSOs) { + args.push("-Wl,-rpath-link=" + FileInfo.path(uniqueSOs[i])) } } diff --git a/share/qbs/modules/utils.js b/share/qbs/modules/utils.js index 8ee1f399a..9d187d01f 100644 --- a/share/qbs/modules/utils.js +++ b/share/qbs/modules/utils.js @@ -136,6 +136,17 @@ function dumpObject(obj, description) traverseObject(obj, dumpProperty) } +function uniqueConcat(array1, array2) +{ + var result = array1; + for (i in array2) { + var elem = array2[i]; + if (result.indexOf(elem) === -1) + result.push(elem); + } + return result; +} + ////////////////////////////////////////////////////////// // The EnvironmentVariable class |