Can tag include directories as system dirs to reduce compiler warning noise. Closes #345.

pull/351/head
Jussi Pakkanen 9 years ago
parent edaf663ee2
commit 4c041e2aec
  1. 4
      backends.py
  2. 3
      build.py
  3. 12
      compilers.py
  4. 8
      interpreter.py
  5. 14
      ninjabackend.py

@ -201,7 +201,7 @@ class Backend():
def get_pch_include_args(self, compiler, target):
args = []
pchpath = self.get_target_private_dir(target)
includeargs = compiler.get_include_args(pchpath)
includeargs = compiler.get_include_args(pchpath, False)
for lang in ['c', 'cpp']:
p = target.get_pch(lang)
if len(p) == 0:
@ -238,7 +238,7 @@ class Backend():
if compiler.language == 'fortran':
for lt in target.link_targets:
priv_dir = os.path.join(self.get_target_dir(lt), lt.get_basename() + lt.type_suffix())
incflag = compiler.get_include_args(priv_dir)
incflag = compiler.get_include_args(priv_dir, False)
commands += incflag
return commands

@ -148,9 +148,10 @@ class Build:
return self.global_args.get(compiler.get_language(), [])
class IncludeDirs():
def __init__(self, curdir, dirs, extra_build_dirs=None):
def __init__(self, curdir, dirs, is_system, extra_build_dirs=None):
self.curdir = curdir
self.incdirs = dirs
self.is_system = is_system
# Interpreter has validated that all given directories
# actually exist.
if extra_build_dirs is None:

@ -264,9 +264,11 @@ class CCompiler(Compiler):
def get_std_exe_link_args(self):
return []
def get_include_args(self, path):
def get_include_args(self, path, is_system):
if path == '':
path = '.'
if is_system:
return ['-isystem', path]
return ['-I' + path]
def get_std_shared_lib_link_args(self):
@ -1174,6 +1176,12 @@ class VisualStudioCCompiler(CCompiler):
result.append(i)
return result
def get_include_args(self, path, is_system):
if path == '':
path = '.'
# msvc does not have a concept of system header dirs.
return ['-I' + path]
class VisualStudioCPPCompiler(VisualStudioCCompiler):
def __init__(self, exelist, version, is_cross, exe_wrap):
VisualStudioCCompiler.__init__(self, exelist, version, is_cross, exe_wrap)
@ -1588,7 +1596,7 @@ end program prog
return True
return False
def get_include_args(self, path):
def get_include_args(self, path, is_system):
return ['-I' + path]
def get_module_outdir_args(self, path):

@ -475,7 +475,7 @@ class BuildTargetHolder(InterpreterObject):
return self.held_object.is_cross()
def private_dir_include_method(self, args, kwargs):
return IncludeDirsHolder(build.IncludeDirs('', [],
return IncludeDirsHolder(build.IncludeDirs('', [], False,
[self.interpreter.backend.get_target_private_dir(self.held_object)]))
def outdir_method(self, args, kwargs):
@ -1821,14 +1821,16 @@ class Interpreter():
return mesonlib.File.from_built_file(self.subdir, output)
@stringArgs
@noKwargs
def func_include_directories(self, node, args, kwargs):
absbase = os.path.join(self.environment.get_source_dir(), self.subdir)
for a in args:
absdir = os.path.join(absbase, a)
if not os.path.isdir(absdir):
raise InvalidArguments('Include dir %s does not exist.' % a)
i = IncludeDirsHolder(build.IncludeDirs(self.subdir, args))
is_system = kwargs.get('is_system', False)
if not isinstance(is_system, bool):
raise InvalidArguments('Is_system must be boolean.')
i = IncludeDirsHolder(build.IncludeDirs(self.subdir, args, is_system))
return i
@stringArgs

@ -1429,13 +1429,13 @@ rule FORTRAN_DEP_HACK
extra_orderdeps = []
compiler = self.get_compiler_for_source(src)
commands = self.generate_basic_compiler_args(target, compiler)
commands += compiler.get_include_args(self.get_target_private_dir(target))
commands += compiler.get_include_args(self.get_target_private_dir(target), False)
curdir = target.get_subdir()
tmppath = os.path.normpath(os.path.join(self.build_to_src, curdir))
commands += compiler.get_include_args(tmppath)
commands += compiler.get_include_args(tmppath, False)
if curdir == '':
curdir = '.'
commands += compiler.get_include_args(curdir)
commands += compiler.get_include_args(curdir, False)
for d in target.external_deps:
if d.need_threads():
commands += compiler.thread_flags()
@ -1482,12 +1482,12 @@ rule FORTRAN_DEP_HACK
for d in i.get_incdirs():
expdir = os.path.join(basedir, d)
srctreedir = os.path.join(self.build_to_src, expdir)
bargs = compiler.get_include_args(expdir)
sargs = compiler.get_include_args(srctreedir)
bargs = compiler.get_include_args(expdir, i.is_system)
sargs = compiler.get_include_args(srctreedir, i.is_system)
commands += bargs
commands += sargs
for d in i.get_extra_build_dirs():
commands += compiler.get_include_args(d)
commands += compiler.get_include_args(d, i.is_system)
custom_target_include_dirs = []
for i in target.generated:
if isinstance(i, build.CustomTarget):
@ -1495,7 +1495,7 @@ rule FORTRAN_DEP_HACK
if idir not in custom_target_include_dirs:
custom_target_include_dirs.append(idir)
for i in custom_target_include_dirs:
commands+= compiler.get_include_args(i)
commands+= compiler.get_include_args(i, False)
if self.environment.coredata.get_builtin_option('use_pch'):
commands += self.get_pch_include_args(compiler, target)
crstr = ''

Loading…
Cancel
Save