aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/base.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2019-10-06 17:33:12 +0300
committerGitHub <noreply@github.com>2019-10-06 17:33:12 +0300
commit51fef880b6a12e82955d5b93df7ffed0ae2f1478 (patch)
tree327575ae53cc7e25389ee6af1a02861c8296b9ad /mesonbuild/dependencies/base.py
parent5bbea6be05c9740aedcd7f170c24a6b2c098cd01 (diff)
parent47e20b3004b41261c01b1a46898252924f031f1d (diff)
downloadmeson-51fef880b6a12e82955d5b93df7ffed0ae2f1478.zip
meson-51fef880b6a12e82955d5b93df7ffed0ae2f1478.tar.gz
meson-51fef880b6a12e82955d5b93df7ffed0ae2f1478.tar.bz2
Merge pull request #5953 from mensinda/isystem
Add is_system to dependency
Diffstat (limited to 'mesonbuild/dependencies/base.py')
-rw-r--r--mesonbuild/dependencies/base.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 4e95c94..3c55a56 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -104,6 +104,16 @@ class Dependency:
return methods
+ @classmethod
+ 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"
self.version = None
@@ -117,6 +127,7 @@ class Dependency:
self.raw_link_args = None
self.sources = []
self.methods = self._process_method_kw(kwargs)
+ self.include_type = self._process_include_type_kw(kwargs)
self.ext_deps = [] # type: List[Dependency]
def __repr__(self):
@@ -124,6 +135,22 @@ class Dependency:
return s.format(self.__class__.__name__, self.name, self.is_found)
def get_compile_args(self):
+ 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):
@@ -152,6 +179,9 @@ class Dependency:
else:
return 'unknown'
+ def get_include_type(self) -> str:
+ return self.include_type
+
def get_exe_args(self, compiler):
return []
@@ -200,6 +230,10 @@ 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, include_type: str) -> typing.Type['Dependency']:
+ new_dep = copy.deepcopy(self)
+ new_dep.include_type = self._process_include_type_kw({'include_type': include_type})
+ return new_dep
class InternalDependency(Dependency):
def __init__(self, version, incdirs, compile_args, link_args, libraries, whole_libraries, sources, ext_deps):