add is_system kwarg to dependency
Also adds the is_system and as_system methods to the dependency holder.
This commit is contained in:
parent
f508b4cf80
commit
8593506b7b
|
@ -104,6 +104,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 __init__(self, type_name, kwargs):
|
||||
self.name = "null"
|
||||
self.version = None
|
||||
|
@ -117,6 +125,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.ext_deps = [] # type: List[Dependency]
|
||||
|
||||
def __repr__(self):
|
||||
|
@ -124,7 +133,21 @@ class Dependency:
|
|||
return s.format(self.__class__.__name__, self.name, self.is_found)
|
||||
|
||||
def get_compile_args(self):
|
||||
return self.compile_args
|
||||
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'):
|
||||
# -isystem and -idirafter, both mark directories as system
|
||||
# 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:
|
||||
system_args += [i]
|
||||
|
||||
return system_args
|
||||
|
||||
def get_link_args(self, raw=False):
|
||||
if raw and self.raw_link_args is not None:
|
||||
|
@ -152,6 +175,9 @@ class Dependency:
|
|||
else:
|
||||
return 'unknown'
|
||||
|
||||
def get_is_system(self) -> bool:
|
||||
return self.is_system
|
||||
|
||||
def get_exe_args(self, compiler):
|
||||
return []
|
||||
|
||||
|
|
|
@ -34,13 +34,12 @@ from .interpreterbase import ObjectHolder
|
|||
from .modules import ModuleReturnValue
|
||||
from .cmake import CMakeInterpreter
|
||||
|
||||
from pathlib import Path
|
||||
from pathlib import Path, PurePath
|
||||
import os, shutil, uuid
|
||||
import re, shlex
|
||||
import re, shlex, copy
|
||||
import subprocess
|
||||
from collections import namedtuple
|
||||
from itertools import chain
|
||||
from pathlib import PurePath
|
||||
import functools
|
||||
from typing import Sequence, List, Union, Optional, Dict, Any
|
||||
|
||||
|
@ -413,6 +412,8 @@ 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,
|
||||
'as_system': self.as_system_method,
|
||||
})
|
||||
|
||||
def found(self):
|
||||
|
@ -474,6 +475,27 @@ class DependencyHolder(InterpreterObject, ObjectHolder):
|
|||
def variable_method(self, args, kwargs):
|
||||
return self.held_object.get_variable(**kwargs)
|
||||
|
||||
@FeatureNew('dep.is_system', '0.52.0')
|
||||
@noPosargs
|
||||
@permittedKwargs({})
|
||||
def is_system_method(self, args, kwargs):
|
||||
return self.held_object.get_is_system()
|
||||
|
||||
@FeatureNew('dep.as_system', '0.52.0')
|
||||
@permittedKwargs({})
|
||||
def as_system_method(self, args, kwargs):
|
||||
args = listify(args)
|
||||
new_is_system = True
|
||||
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 = copy.deepcopy(self.held_object)
|
||||
new_dep.is_system = new_is_system
|
||||
return DependencyHolder(new_dep, self.subproject)
|
||||
|
||||
class ExternalProgramHolder(InterpreterObject, ObjectHolder):
|
||||
def __init__(self, ep):
|
||||
InterpreterObject.__init__(self)
|
||||
|
@ -1998,6 +2020,7 @@ permitted_kwargs = {'add_global_arguments': {'language', 'native'},
|
|||
'version',
|
||||
'private_headers',
|
||||
'cmake_args',
|
||||
'is_system',
|
||||
},
|
||||
'declare_dependency': {'include_directories',
|
||||
'link_with',
|
||||
|
@ -3049,6 +3072,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.50.0', ['not_found_message', 'cmake_module_path', 'cmake_args'])
|
||||
@FeatureNewKwargs('dependency', '0.49.0', ['disabler'])
|
||||
@FeatureNewKwargs('dependency', '0.40.0', ['method'])
|
||||
|
|
Loading…
Reference in New Issue