aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/build.py11
-rw-r--r--mesonbuild/dependencies/base.py52
-rw-r--r--mesonbuild/interpreter.py16
3 files changed, 44 insertions, 35 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index e9b2a4a..267bd16 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1024,7 +1024,7 @@ This will become a hard error in a future Meson release.''')
if isinstance(dep, dependencies.InternalDependency):
# Those parts that are internal.
self.process_sourcelist(dep.sources)
- self.add_include_dirs(dep.include_directories)
+ self.add_include_dirs(dep.include_directories, dep.get_include_type())
for l in dep.libraries:
self.link(l)
for l in dep.whole_libraries:
@@ -1150,7 +1150,7 @@ You probably should put it in link_with instead.''')
raise MesonException('File %s does not exist.' % f)
self.pch[language] = pchlist
- def add_include_dirs(self, args, set_is_system: typing.Optional[bool] = None):
+ def add_include_dirs(self, args, set_is_system: typing.Optional[str] = None):
ids = []
for a in args:
# FIXME same hack, forcibly unpack from holder.
@@ -1159,8 +1159,11 @@ You probably should put it in link_with instead.''')
if not isinstance(a, IncludeDirs):
raise InvalidArguments('Include directory to be added is not an include directory object.')
ids.append(a)
- if set_is_system is not None:
- ids = [IncludeDirs(x.get_curdir(), x.get_incdirs(), set_is_system, x.get_extra_build_dirs()) for x in ids]
+ if set_is_system is None:
+ set_is_system = 'preserve'
+ if set_is_system != 'preserve':
+ is_system = set_is_system == 'system'
+ ids = [IncludeDirs(x.get_curdir(), x.get_incdirs(), is_system, x.get_extra_build_dirs()) for x in ids]
self.include_dirs += ids
def add_compiler_args(self, language, args):
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 1ccc343..3c55a56 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -105,12 +105,14 @@ class Dependency:
return methods
@classmethod
- def _process_is_system_kw(cls, kwargs):
- if 'is_system' not in kwargs:
- return False
- if not isinstance(kwargs['is_system'], bool):
- raise DependencyException('The is_system kwarg must be a boolean type')
- return kwargs['is_system']
+ def _process_include_type_kw(cls, kwargs) -> str:
+ if 'include_type' not in kwargs:
+ return 'preserve'
+ if not isinstance(kwargs['include_type'], str):
+ raise DependencyException('The include_type kwarg must be a string type')
+ if kwargs['include_type'] not in ['preserve', 'system', 'non-system']:
+ raise DependencyException("include_type may only be one of ['preserve', 'system', 'non-system']")
+ return kwargs['include_type']
def __init__(self, type_name, kwargs):
self.name = "null"
@@ -125,7 +127,7 @@ class Dependency:
self.raw_link_args = None
self.sources = []
self.methods = self._process_method_kw(kwargs)
- self.is_system = self._process_is_system_kw(kwargs)
+ self.include_type = self._process_include_type_kw(kwargs)
self.ext_deps = [] # type: List[Dependency]
def __repr__(self):
@@ -133,17 +135,23 @@ class Dependency:
return s.format(self.__class__.__name__, self.name, self.is_found)
def get_compile_args(self):
- if not self.is_system:
- return self.compile_args
-
- system_args = []
- for i in self.compile_args:
- if i.startswith('-I') or i.startswith('/I'):
- system_args += ['-isystem' + i[2:]]
- else:
- system_args += [i]
-
- return system_args
+ if self.include_type == 'system':
+ converted = []
+ for i in self.compile_args:
+ if i.startswith('-I') or i.startswith('/I'):
+ converted += ['-isystem' + i[2:]]
+ else:
+ converted += [i]
+ return converted
+ if self.include_type == 'non-system':
+ converted = []
+ for i in self.compile_args:
+ if i.startswith('-isystem'):
+ converted += ['-I' + i[8:]]
+ else:
+ converted += [i]
+ return converted
+ return self.compile_args
def get_link_args(self, raw=False):
if raw and self.raw_link_args is not None:
@@ -171,8 +179,8 @@ class Dependency:
else:
return 'unknown'
- def get_is_system(self) -> bool:
- return self.is_system
+ def get_include_type(self) -> str:
+ return self.include_type
def get_exe_args(self, compiler):
return []
@@ -222,9 +230,9 @@ class Dependency:
return default_value
raise DependencyException('No default provided for dependency {!r}, which is not pkg-config, cmake, or config-tool based.'.format(self))
- def generate_system_dependency(self, is_system: bool) -> typing.Type['Dependency']:
+ def generate_system_dependency(self, include_type: str) -> typing.Type['Dependency']:
new_dep = copy.deepcopy(self)
- new_dep.is_system = is_system
+ new_dep.include_type = self._process_include_type_kw({'include_type': include_type})
return new_dep
class InternalDependency(Dependency):
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index eb0eaf7..eae5a16 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -412,7 +412,7 @@ class DependencyHolder(InterpreterObject, ObjectHolder):
'get_configtool_variable': self.configtool_method,
'get_variable': self.variable_method,
'partial_dependency': self.partial_dependency_method,
- 'is_system': self.is_system_method,
+ 'include_type': self.include_type_method,
'as_system': self.as_system_method,
})
@@ -475,22 +475,20 @@ class DependencyHolder(InterpreterObject, ObjectHolder):
def variable_method(self, args, kwargs):
return self.held_object.get_variable(**kwargs)
- @FeatureNew('dep.is_system', '0.52.0')
+ @FeatureNew('dep.include_type', '0.52.0')
@noPosargs
@permittedKwargs({})
- def is_system_method(self, args, kwargs):
- return self.held_object.get_is_system()
+ def include_type_method(self, args, kwargs):
+ return self.held_object.get_include_type()
@FeatureNew('dep.as_system', '0.52.0')
@permittedKwargs({})
def as_system_method(self, args, kwargs):
args = listify(args)
- new_is_system = True
+ new_is_system = 'system'
if len(args) > 1:
raise InterpreterException('as_system takes only one optional value')
if len(args) == 1:
- if not isinstance(args[0], bool):
- raise InterpreterException('as_system takes only a boolean value')
new_is_system = args[0]
new_dep = self.held_object.generate_system_dependency(new_is_system)
return DependencyHolder(new_dep, self.subproject)
@@ -2019,7 +2017,7 @@ permitted_kwargs = {'add_global_arguments': {'language', 'native'},
'version',
'private_headers',
'cmake_args',
- 'is_system',
+ 'include_type',
},
'declare_dependency': {'include_directories',
'link_with',
@@ -3071,7 +3069,7 @@ external dependencies (including libraries) must go to "dependencies".''')
elif name == 'openmp':
FeatureNew('OpenMP Dependency', '0.46.0').use(self.subproject)
- @FeatureNewKwargs('dependency', '0.52.0', ['is_system'])
+ @FeatureNewKwargs('dependency', '0.52.0', ['include_type'])
@FeatureNewKwargs('dependency', '0.50.0', ['not_found_message', 'cmake_module_path', 'cmake_args'])
@FeatureNewKwargs('dependency', '0.49.0', ['disabler'])
@FeatureNewKwargs('dependency', '0.40.0', ['method'])