diff options
-rw-r--r-- | mesonbuild/compilers/compilers.py | 4 | ||||
-rwxr-xr-x | run_unittests.py | 19 |
2 files changed, 21 insertions, 2 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 50e2188..f427262 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -481,10 +481,10 @@ class CompilerArgs(collections.abc.MutableSequence): post_flush_set = set() #The two lists are here walked from the front to the back, in order to not need removals for deduplication - for a in reversed(self.pre): + for a in self.pre: dedup = self._can_dedup(a) if a not in pre_flush_set: - pre_flush.appendleft(a) + pre_flush.append(a) if dedup == 2: pre_flush_set.add(a) for a in reversed(self.post): diff --git a/run_unittests.py b/run_unittests.py index a6817c3..9572b27 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -350,6 +350,25 @@ class InternalTests(unittest.TestCase): stat.S_IRWXU | stat.S_ISUID | stat.S_IRGRP | stat.S_IXGRP) + def test_compiler_args_class_none_flush(self): + cargsfunc = mesonbuild.compilers.CompilerArgs + cc = mesonbuild.compilers.CCompiler([], 'fake', False, MachineChoice.HOST, mock.Mock()) + a = cargsfunc(cc, ['-I.']) + #first we are checking if the tree construction deduplicates the correct -I argument + a += ['-I..'] + a += ['-I./tests/'] + a += ['-I./tests2/'] + #think this here as assertion, we cannot apply it, otherwise the CompilerArgs would already flush the changes: + # assertEqual(a, ['-I.', '-I./tests2/', '-I./tests/', '-I..', '-I.']) + a += ['-I.'] + a += ['-I.', '-I./tests/'] + self.assertEqual(a, ['-I.', '-I./tests/', '-I./tests2/', '-I..']) + + #then we are checking that when CompilerArgs already have a build container list, that the deduplication is taking the correct one + a += ['-I.', '-I./tests2/'] + self.assertEqual(a, ['-I.', '-I./tests2/', '-I./tests/', '-I..']) + + def test_compiler_args_class(self): cargsfunc = mesonbuild.compilers.CompilerArgs cc = mesonbuild.compilers.CCompiler([], 'fake', False, MachineChoice.HOST, mock.Mock()) |