aboutsummaryrefslogtreecommitdiffstats
path: root/share/qbs/modules/cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-01-30 10:13:40 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-01-30 17:55:29 +0100
commit64602965cd5ef19742a604512ca7570f7b0fe7ca (patch)
treedf81f764aeb289bbfada48c15e18f8b8af9762dd /share/qbs/modules/cpp
parent1eb6cadc4f42899b7e2c6d58d9f1a4fafbd1f070 (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.qbs9
-rw-r--r--share/qbs/modules/cpp/gcc.js17
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;
+}