add new dependency type "builtin"

For dependencies that on some systems are built into libc etc. and don't
need to be separately linked. This is distinct from "system"
dependencies which add linker args.
This commit is contained in:
Eli Schwartz 2021-06-13 15:40:23 -04:00
parent 493dc6ed10
commit d591353b78
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
2 changed files with 22 additions and 1 deletions

View File

@ -42,6 +42,8 @@ class DependencyMethods(Enum):
AUTO = 'auto'
PKGCONFIG = 'pkg-config'
CMAKE = 'cmake'
# The dependency is provided by the standard library and does not need to be linked
BUILTIN = 'builtin'
# Just specify the standard link arguments, assuming the operating system provides the library.
SYSTEM = 'system'
# This is only supported on OSX - search the frameworks directory by name.
@ -551,3 +553,20 @@ class SystemDependency(ExternalDependency):
def log_tried(self) -> str:
return 'system'
class BuiltinDependency(ExternalDependency):
"""Dependency base for Builtin type dependencies."""
def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],
language: T.Optional[str] = None) -> None:
super().__init__(DependencyTypeName('builtin'), env, kwargs, language=language)
self.name = name
@staticmethod
def get_methods() -> T.List[DependencyMethods]:
return [DependencyMethods.BUILTIN]
def log_tried(self) -> str:
return 'builtin'

View File

@ -20,7 +20,7 @@ from ..mesonlib import MachineChoice
from .base import DependencyException, DependencyMethods
from .base import ExternalDependency
from .base import process_method_kw
from .base import SystemDependency
from .base import BuiltinDependency, SystemDependency
from .cmake import CMakeDependency
from .framework import ExtraFrameworkDependency
from .pkgconfig import PkgConfigDependency
@ -81,6 +81,7 @@ class DependencyFactory:
configtool_class: 'T.Optional[T.Type[ConfigToolDependency]]' = None,
framework_name: T.Optional[str] = None,
framework_class: 'T.Type[ExtraFrameworkDependency]' = ExtraFrameworkDependency,
builtin_class: 'T.Type[BuiltinDependency]' = BuiltinDependency,
system_class: 'T.Type[SystemDependency]' = SystemDependency):
if DependencyMethods.CONFIG_TOOL in methods and not configtool_class:
@ -98,6 +99,7 @@ class DependencyFactory:
DependencyMethods.PKGCONFIG: lambda env, kwargs: pkgconfig_class(pkgconfig_name or name, env, kwargs),
DependencyMethods.CMAKE: lambda env, kwargs: cmake_class(cmake_name or name, env, kwargs),
DependencyMethods.SYSTEM: lambda env, kwargs: system_class(name, env, kwargs),
DependencyMethods.BUILTIN: lambda env, kwargs: builtin_class(name, env, kwargs),
DependencyMethods.CONFIG_TOOL: None,
}
if configtool_class is not None: