aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-06-18 03:49:48 +0300
committerGitHub <noreply@github.com>2017-06-18 03:49:48 +0300
commit3bc7651907e81cacb93f2f160b720dc97b958f05 (patch)
treedb8cec8f6e8cb81db425c60cc89da21b1e641f00
parent7c7dc0efde77e395babfe3a082a23e6ceaa31a87 (diff)
parent1c34707aeeedfe499bf2101253788cb41e970383 (diff)
downloadmeson-3bc7651907e81cacb93f2f160b720dc97b958f05.zip
meson-3bc7651907e81cacb93f2f160b720dc97b958f05.tar.gz
meson-3bc7651907e81cacb93f2f160b720dc97b958f05.tar.bz2
Merge pull request #1951 from mesonbuild/dedupfix
Preserve standalone -D arguments
-rw-r--r--mesonbuild/compilers.py11
-rwxr-xr-xrun_unittests.py9
-rw-r--r--test cases/unit/10 d dedup/meson.build6
-rw-r--r--test cases/unit/10 d dedup/prog.c14
4 files changed, 40 insertions, 0 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index 2b54cc8..6a9ad4f 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -430,6 +430,17 @@ class CompilerArgs(list):
to recursively search for symbols in the libraries. This is not needed
with other linkers.
'''
+
+ # A standalone argument must never be deduplicated because it is
+ # defined by what comes _after_ it. Thus dedupping this:
+ # -D FOO -D BAR
+ # would yield either
+ # -D FOO BAR
+ # or
+ # FOO -D BAR
+ # both of which are invalid.
+ if arg in cls.dedup2_prefixes:
+ return 0
if arg in cls.dedup2_args or \
arg.startswith(cls.dedup2_prefixes) or \
arg.endswith(cls.dedup2_suffixes):
diff --git a/run_unittests.py b/run_unittests.py
index 2cdd13a..61dc0ee 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -1221,6 +1221,15 @@ int main(int argc, char **argv) {
for path in rpath.split(':'):
self.assertTrue(path.startswith('$ORIGIN'), msg=(each, path))
+ def test_dash_d_dedup(self):
+ testdir = os.path.join(self.unit_test_dir, '10 d dedup')
+ self.init(testdir)
+ cmd = self.get_compdb()[0]['command']
+ self.assertTrue('-D FOO -D BAR' in cmd or
+ '"-D" "FOO" "-D" "BAR"' in cmd or
+ '/D FOO /D BAR' in cmd or
+ '"/D" "FOO" "/D" "BAR"' in cmd)
+
class FailureTests(BasePlatformTests):
'''
diff --git a/test cases/unit/10 d dedup/meson.build b/test cases/unit/10 d dedup/meson.build
new file mode 100644
index 0000000..08f3a6c
--- /dev/null
+++ b/test cases/unit/10 d dedup/meson.build
@@ -0,0 +1,6 @@
+project('d dedup', 'c')
+
+add_project_arguments('-D', 'FOO', '-D', 'BAR', language : 'c')
+
+executable('prog', 'prog.c')
+
diff --git a/test cases/unit/10 d dedup/prog.c b/test cases/unit/10 d dedup/prog.c
new file mode 100644
index 0000000..505f122
--- /dev/null
+++ b/test cases/unit/10 d dedup/prog.c
@@ -0,0 +1,14 @@
+#include<stdio.h>
+
+#ifndef FOO
+#error FOO is not defined.
+#endif
+
+#ifndef BAR
+#error BAR is not defined.
+#endif
+
+int main(int argc, char **argv) {
+ printf("All is well.\n");
+ return 0;
+}