diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-01-30 10:13:40 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-01-30 17:55:29 +0100 |
commit | 64602965cd5ef19742a604512ca7570f7b0fe7ca (patch) | |
tree | df81f764aeb289bbfada48c15e18f8b8af9762dd /share/qbs/modules/cpp | |
parent | 1eb6cadc4f42899b7e2c6d58d9f1a4fafbd1f070 (diff) |
fix order of libraries in gcc link command line
Array.uniqueConcat cannot be used to remove duplicates, because the
right-most duplicates are removed. To keep the dependencies ordered
correctly, we must remove the left-most duplicates instead.
Task-number: QBS-503
Change-Id: I5a2834905f650e0921bc42f9cffe15b71128ff7e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'share/qbs/modules/cpp')
-rw-r--r-- | share/qbs/modules/cpp/GenericGCC.qbs | 9 | ||||
-rw-r--r-- | share/qbs/modules/cpp/gcc.js | 17 |
2 files changed, 22 insertions, 4 deletions
diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index 0cbb2b982..a881159d9 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -102,10 +102,11 @@ CppModule { for (var i in inputs.dynamiclibrary_copy) { var lib = inputs.dynamiclibrary_copy[i] var impliedLibs = ModUtils.moduleProperties(lib, 'transitiveSOs') - var libsToAdd = impliedLibs.uniqueConcat([lib.fileName]); - result = result.uniqueConcat(libsToAdd); + var libsToAdd = [lib.fileName].concat(impliedLibs); + result = result.concat(libsToAdd); } - return result + result = Gcc.concatLibs([], result); + return result; } } @@ -218,7 +219,7 @@ CppModule { var lib = inputs.staticlibrary[i] result.push(lib.fileName) var impliedLibs = ModUtils.moduleProperties(lib, 'staticLibraries') - result = result.uniqueConcat(impliedLibs); + result = Gcc.concatLibs(result, impliedLibs); } return result } diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js index 604e20eec..a44465132 100644 --- a/share/qbs/modules/cpp/gcc.js +++ b/share/qbs/modules/cpp/gcc.js @@ -343,3 +343,20 @@ function prepareCompiler(project, product, inputs, outputs, input, output) cmd.responseFileUsagePrefix = '@'; return cmd; } + +// Concatenates two arrays of library names and preserves the dependency order that ld needs. +function concatLibs(libs, deplibs) +{ + var r = []; + var s = {}; + function f(e) + { + if (!s[e]) { + s[e] = true; + r.unshift(e); + } + } + deplibs.forEach(f); + libs.forEach(f); + return r; +} |