compilers: corretify deduplication direction
so: when building compile args, meson is deduplicating flags. When a compiler argument is appended, a later appearance of a dedup'ed is going to remove a earlier one. If the argument is prepended, the element *before* the new one is going to be removed. And that is where the problem reported in https://github.com/mesonbuild/meson/pull/7119 is coming in. In the revision linked there, the order of replacement in the prepend case was revesered. With this patch, we restore this behaviour again.
This commit is contained in:
parent
71d68a940b
commit
18b99b3bc3
|
@ -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):
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Reference in New Issue