diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/build.py | 11 | ||||
-rw-r--r-- | mesonbuild/dependencies/base.py | 52 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 16 |
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']) |