diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-06-18 03:49:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-18 03:49:48 +0300 |
commit | 3bc7651907e81cacb93f2f160b720dc97b958f05 (patch) | |
tree | db8cec8f6e8cb81db425c60cc89da21b1e641f00 | |
parent | 7c7dc0efde77e395babfe3a082a23e6ceaa31a87 (diff) | |
parent | 1c34707aeeedfe499bf2101253788cb41e970383 (diff) | |
download | meson-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.py | 11 | ||||
-rwxr-xr-x | run_unittests.py | 9 | ||||
-rw-r--r-- | test cases/unit/10 d dedup/meson.build | 6 | ||||
-rw-r--r-- | test cases/unit/10 d dedup/prog.c | 14 |
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; +} |