From 5f51ee2fc850a417f6ca1afcf158b21be9150c88 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 7 Jan 2020 10:13:31 -0800 Subject: 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. --- mesonbuild/dependencies/dev.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'mesonbuild/dependencies/dev.py') diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 4cefd756b..c4eeaf12f 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -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 ', 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, +) -- cgit v1.2.3 From d87955f9905f569588baabef1de76a245ff92b2e Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 7 Jan 2020 10:33:45 -0800 Subject: dependencies: Add system zlib method for freebsd and dragonflybsd I've tested this on FreeBSD, and dragonfly's userland is close enough I'm willing to call it good without testing. OpenBSD and NetBSD also have a zlib in their base configurations, but I'm not confident enough to enable those without testing. --- mesonbuild/dependencies/dev.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'mesonbuild/dependencies/dev.py') diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index c4eeaf12f..8ba654b5d 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -456,13 +456,18 @@ class ZlibSystemDependency(ExternalDependency): def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]): super().__init__(name, environment, kwargs) + m = self.env.machines[self.for_machine] + # 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))): + if ((m.is_darwin() and isinstance(self.clib_compiler, (AppleClangCCompiler, AppleClangCPPCompiler))) or + m.is_freebsd() or m.is_dragonflybsd()): self.is_found = True self.link_args = ['-lz'] - # No need to set includes, xcode/clang will do that for us. + + # No need to set includes, + # on macos xcode/clang will do that for us. + # on freebsd zlib.h is in /usr/include v, _ = self.clib_compiler.get_define('ZLIB_VERSION', '#include ', self.env, [], [self]) self.version = v.strip('"') -- cgit v1.2.3 From c1a3b37ab7e4ccf3a946ee4ba6da81a4c230ecc4 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 17 Jan 2020 12:00:16 -0800 Subject: dependencies: Add a zlib system dependency for windows --- mesonbuild/dependencies/dev.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'mesonbuild/dependencies/dev.py') diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 8ba654b5d..534684b5d 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -468,9 +468,27 @@ class ZlibSystemDependency(ExternalDependency): # No need to set includes, # on macos xcode/clang will do that for us. # on freebsd zlib.h is in /usr/include + elif m.is_windows(): + if self.clib_compiler.get_argument_syntax() == 'msvc': + libs = ['zlib1' 'zlib'] + else: + libs = ['z'] + for lib in libs: + l = self.clib_compiler.find_library(lib, environment, []) + h = self.clib_compiler.has_header('zlib.h', '', environment, dependencies=[self]) + if l and h: + self.is_found = True + self.link_args = l + break + else: + return + else: + mlog.debug('Unsupported OS {}'.format(m.system)) + return + + v, _ = self.clib_compiler.get_define('ZLIB_VERSION', '#include ', self.env, [], [self]) + self.version = v.strip('"') - v, _ = self.clib_compiler.get_define('ZLIB_VERSION', '#include ', self.env, [], [self]) - self.version = v.strip('"') @staticmethod def get_methods(): -- cgit v1.2.3