diff options
-rw-r--r-- | mesonbuild/compilers.py | 11 | ||||
-rwxr-xr-x | run_unittests.py | 7 |
2 files changed, 15 insertions, 3 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 7e3a2f1..c21db08 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -1225,9 +1225,10 @@ int main(int argc, char **argv) { 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) - + 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): |