Use -isystem instead of -idirafter
This commit is contained in:
parent
a7c4682be1
commit
b1b8a7a7e3
|
@ -420,7 +420,7 @@ class CompilerArgs(list):
|
||||||
# Arg prefixes that override by prepending instead of appending
|
# Arg prefixes that override by prepending instead of appending
|
||||||
prepend_prefixes = ('-I', '-L')
|
prepend_prefixes = ('-I', '-L')
|
||||||
# Arg prefixes and args that must be de-duped by returning 2
|
# Arg prefixes and args that must be de-duped by returning 2
|
||||||
dedup2_prefixes = ('-I', '-L', '-D', '-U')
|
dedup2_prefixes = ('-I', '-isystem', '-L', '-D', '-U')
|
||||||
dedup2_suffixes = ()
|
dedup2_suffixes = ()
|
||||||
dedup2_args = ()
|
dedup2_args = ()
|
||||||
# Arg prefixes and args that must be de-duped by returning 1
|
# Arg prefixes and args that must be de-duped by returning 1
|
||||||
|
@ -548,6 +548,22 @@ class CompilerArgs(list):
|
||||||
# Last occurrence of a library
|
# Last occurrence of a library
|
||||||
new.insert(group_end + 1, '-Wl,--end-group')
|
new.insert(group_end + 1, '-Wl,--end-group')
|
||||||
new.insert(group_start, '-Wl,--start-group')
|
new.insert(group_start, '-Wl,--start-group')
|
||||||
|
# Remove system/default include paths added with -isystem
|
||||||
|
if hasattr(self.compiler, 'get_default_include_dirs'):
|
||||||
|
default_dirs = self.compiler.get_default_include_dirs()
|
||||||
|
bad_idx_list = []
|
||||||
|
for i, each in enumerate(new):
|
||||||
|
# Remove the -isystem and the path if the path is a dafault path
|
||||||
|
if (each == '-isystem' and
|
||||||
|
i < (len(new) - 1) and
|
||||||
|
new[i + 1] in default_dirs):
|
||||||
|
bad_idx_list += [i, i + 1]
|
||||||
|
elif each.startswith('-isystem=') and each[9:] in default_dirs:
|
||||||
|
bad_idx_list += [i]
|
||||||
|
elif each.startswith('-isystem') and each[8:] in default_dirs:
|
||||||
|
bad_idx_list += [i]
|
||||||
|
for i in reversed(bad_idx_list):
|
||||||
|
new.pop(i)
|
||||||
return self.compiler.unix_args_to_native(new)
|
return self.compiler.unix_args_to_native(new)
|
||||||
|
|
||||||
def append_direct(self, arg):
|
def append_direct(self, arg):
|
||||||
|
|
|
@ -139,11 +139,7 @@ class Dependency:
|
||||||
system_args = []
|
system_args = []
|
||||||
for i in self.compile_args:
|
for i in self.compile_args:
|
||||||
if i.startswith('-I') or i.startswith('/I'):
|
if i.startswith('-I') or i.startswith('/I'):
|
||||||
# -isystem and -idirafter, both mark directories as system
|
system_args += ['-isystem' + i[2:]]
|
||||||
# directories. However, both affect the search oder, which
|
|
||||||
# can lead to nasty bugs with -isystem:
|
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129
|
|
||||||
system_args += ['-idirafter' + i[2:]]
|
|
||||||
else:
|
else:
|
||||||
system_args += [i]
|
system_args += [i]
|
||||||
|
|
||||||
|
|
|
@ -447,6 +447,8 @@ class InternalTests(unittest.TestCase):
|
||||||
## Test --start/end-group
|
## Test --start/end-group
|
||||||
linker = mesonbuild.linkers.GnuDynamicLinker([], MachineChoice.HOST, 'fake', '-Wl,')
|
linker = mesonbuild.linkers.GnuDynamicLinker([], MachineChoice.HOST, 'fake', '-Wl,')
|
||||||
gcc = mesonbuild.compilers.GnuCCompiler([], 'fake', mesonbuild.compilers.CompilerType.GCC_STANDARD, False, MachineChoice.HOST, linker=linker)
|
gcc = mesonbuild.compilers.GnuCCompiler([], 'fake', mesonbuild.compilers.CompilerType.GCC_STANDARD, False, MachineChoice.HOST, linker=linker)
|
||||||
|
## Ensure that the fake compiler is never called by overriding the relevant function
|
||||||
|
gcc.get_default_include_dirs = lambda: ['/usr/include', '/usr/share/include', '/usr/local/include']
|
||||||
## Test that 'direct' append and extend works
|
## Test that 'direct' append and extend works
|
||||||
l = cargsfunc(gcc, ['-Lfoodir', '-lfoo'])
|
l = cargsfunc(gcc, ['-Lfoodir', '-lfoo'])
|
||||||
self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Wl,--end-group'])
|
self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Wl,--end-group'])
|
||||||
|
@ -469,6 +471,20 @@ class InternalTests(unittest.TestCase):
|
||||||
l.append('-Wl,-ldl')
|
l.append('-Wl,-ldl')
|
||||||
self.assertEqual(l.to_native(copy=True), ['-Lfoo', '-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-lbar', '/libbaz.a', '-Wl,--export-dynamic', '-Wl,-ldl', '-Wl,--end-group'])
|
self.assertEqual(l.to_native(copy=True), ['-Lfoo', '-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-lbar', '/libbaz.a', '-Wl,--export-dynamic', '-Wl,-ldl', '-Wl,--end-group'])
|
||||||
|
|
||||||
|
def test_compiler_args_remove_system(self):
|
||||||
|
cargsfunc = mesonbuild.compilers.CompilerArgs
|
||||||
|
## Test --start/end-group
|
||||||
|
linker = mesonbuild.linkers.GnuDynamicLinker([], MachineChoice.HOST, 'fake', '-Wl,')
|
||||||
|
gcc = mesonbuild.compilers.GnuCCompiler([], 'fake', mesonbuild.compilers.CompilerType.GCC_STANDARD, False, MachineChoice.HOST, linker=linker)
|
||||||
|
## Ensure that the fake compiler is never called by overriding the relevant function
|
||||||
|
gcc.get_default_include_dirs = lambda: ['/usr/include', '/usr/share/include', '/usr/local/include']
|
||||||
|
## Test that 'direct' append and extend works
|
||||||
|
l = cargsfunc(gcc, ['-Lfoodir', '-lfoo'])
|
||||||
|
self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Wl,--end-group'])
|
||||||
|
## Test that to_native removes all system includes
|
||||||
|
l += ['-isystem/usr/include', '-isystem=/usr/share/include', '-DSOMETHING_IMPORTANT=1', '-isystem', '/usr/local/include']
|
||||||
|
self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Wl,--end-group', '-DSOMETHING_IMPORTANT=1'])
|
||||||
|
|
||||||
def test_string_templates_substitution(self):
|
def test_string_templates_substitution(self):
|
||||||
dictfunc = mesonbuild.mesonlib.get_filenames_templates_dict
|
dictfunc = mesonbuild.mesonlib.get_filenames_templates_dict
|
||||||
substfunc = mesonbuild.mesonlib.substitute_values
|
substfunc = mesonbuild.mesonlib.substitute_values
|
||||||
|
|
Loading…
Reference in New Issue