From d591353b7874816378f9f61df69829a5cf135b4b Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Sun, 13 Jun 2021 15:40:23 -0400 Subject: [PATCH] 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. --- mesonbuild/dependencies/base.py | 19 +++++++++++++++++++ mesonbuild/dependencies/factory.py | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 66fbc853b..515edcfc1 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -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' diff --git a/mesonbuild/dependencies/factory.py b/mesonbuild/dependencies/factory.py index 774e88e84..048e3bc58 100644 --- a/mesonbuild/dependencies/factory.py +++ b/mesonbuild/dependencies/factory.py @@ -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: