dependencies: Add a zlib system dependency for macOS

This comes pre-installed, but currently we don't have a way to detect it
without relying on pkg-config or cmake. This is only valid with the
apple clang-based compilers, as they do some special magic to get
headers.
pull/6421/head
Dylan Baker 5 years ago
parent 402f7afdb0
commit 5f51ee2fc8
  1. 3
      mesonbuild/dependencies/__init__.py
  2. 30
      mesonbuild/dependencies/dev.py

@ -20,7 +20,7 @@ from .base import ( # noqa: F401
ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency,
PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language,
DependencyFactory)
from .dev import ValgrindDependency, gmock_factory, gtest_factory, llvm_factory
from .dev import ValgrindDependency, gmock_factory, gtest_factory, llvm_factory, zlib_factory
from .coarrays import coarray_factory
from .mpi import MPIDependency
from .scalapack import ScalapackDependency
@ -44,6 +44,7 @@ packages.update({
'gmock': gmock_factory,
'llvm': llvm_factory,
'valgrind': ValgrindDependency,
'zlib': zlib_factory,
'boost': BoostDependency,
'cuda': CudaDependency,

@ -28,6 +28,8 @@ from .base import (
strip_system_libdirs, ConfigToolDependency, CMakeDependency, DependencyFactory,
)
from .misc import threads_factory
from ..compilers.c import AppleClangCCompiler
from ..compilers.cpp import AppleClangCPPCompiler
if T.TYPE_CHECKING:
from .. environment import Environment
@ -449,6 +451,27 @@ class ValgrindDependency(PkgConfigDependency):
return []
class ZlibSystemDependency(ExternalDependency):
def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
super().__init__(name, environment, kwargs)
# I'm not sure this is entirely correct. What if we're cross compiling
# from something to macOS?
if (self.env.machines[self.for_machine].is_darwin() and
isinstance(self.clib_compiler, (AppleClangCCompiler, AppleClangCPPCompiler))):
self.is_found = True
self.link_args = ['-lz']
# No need to set includes, xcode/clang will do that for us.
v, _ = self.clib_compiler.get_define('ZLIB_VERSION', '#include <zlib.h>', self.env, [], [self])
self.version = v.strip('"')
@staticmethod
def get_methods():
return [DependencyMethods.SYSTEM]
llvm_factory = DependencyFactory(
'LLVM',
[DependencyMethods.CMAKE, DependencyMethods.CONFIG_TOOL],
@ -469,3 +492,10 @@ gmock_factory = DependencyFactory(
pkgconfig_class=GMockDependencyPC,
system_class=GMockDependencySystem,
)
zlib_factory = DependencyFactory(
'zlib',
[DependencyMethods.PKGCONFIG, DependencyMethods.CMAKE, DependencyMethods.SYSTEM],
cmake_name='ZLIB',
system_class=ZlibSystemDependency,
)

Loading…
Cancel
Save