diff options
-rw-r--r-- | docs/markdown/Dependencies.md | 12 | ||||
-rw-r--r-- | mesonbuild/dependencies/__init__.py | 3 | ||||
-rw-r--r-- | mesonbuild/dependencies/misc.py | 47 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 3 | ||||
-rw-r--r-- | test cases/failing/85 gtest dependency with version/meson.build | 2 |
5 files changed, 64 insertions, 3 deletions
diff --git a/docs/markdown/Dependencies.md b/docs/markdown/Dependencies.md index 47fce8b..bd07524 100644 --- a/docs/markdown/Dependencies.md +++ b/docs/markdown/Dependencies.md @@ -483,6 +483,18 @@ Meson substitutes `modules` to `wx-config` invocation, it generates - `compile_args` using `wx-config --cxxflags $modules...` - `link_args` using `wx-config --libs $modules...` +## Shaderc + +*(added 0.51.0)* + +Shaderc currently does not ship with any means of detection. Nevertheless, Meson +can try to detect it using `pkg-config`, but will default to looking for the +appropriate library manually. If the `static` keyword argument is `true`, +`shaderc_combined` is preferred. Otherwise, `shaderc_shared` is preferred. Note +that it is not possible to obtain the shaderc version using this method. + +`method` may be `auto`, `pkg-config` or `system`. + ### Example ```meson diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py index 53ff1c9..1152b8d 100644 --- a/mesonbuild/dependencies/__init__.py +++ b/mesonbuild/dependencies/__init__.py @@ -18,7 +18,7 @@ from .base import ( # noqa: F401 ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency, PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language) from .dev import GMockDependency, GTestDependency, LLVMDependency, ValgrindDependency -from .misc import (CoarrayDependency, HDF5Dependency, MPIDependency, NetCDFDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency) +from .misc import (CoarrayDependency, HDF5Dependency, MPIDependency, NetCDFDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency, ShadercDependency) from .platform import AppleFrameworks from .ui import GLDependency, GnuStepDependency, Qt4Dependency, Qt5Dependency, SDL2Dependency, WxDependency, VulkanDependency @@ -43,6 +43,7 @@ packages.update({ 'cups': CupsDependency, 'libwmf': LibWmfDependency, 'libgcrypt': LibGCryptDependency, + 'shaderc': ShadercDependency, # From platform: 'appleframeworks': AppleFrameworks, diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index 52e8ee6..76eccfb 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -117,6 +117,7 @@ class HDF5Dependency(ExternalDependency): except Exception: pass + class NetCDFDependency(ExternalDependency): def __init__(self, environment, kwargs): @@ -666,3 +667,49 @@ class LibGCryptDependency(ExternalDependency): @staticmethod def get_methods(): return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL] + + +class ShadercDependency(ExternalDependency): + + def __init__(self, environment, kwargs): + super().__init__('shaderc', environment, None, kwargs) + + static_lib = 'shaderc_combined' + shared_lib = 'shaderc_shared' + + libs = [shared_lib, static_lib] + if self.static: + libs.reverse() + + cc = self.get_compiler() + + for lib in libs: + self.link_args = cc.find_library(lib, environment, []) + if self.link_args is not None: + self.is_found = True + + if self.static and lib != static_lib: + mlog.warning('Static library {!r} not found for dependency {!r}, may ' + 'not be statically linked'.format(static_lib, self.name)) + + break + + def log_tried(self): + return 'system' + + @classmethod + def _factory(cls, environment, kwargs): + methods = cls._process_method_kw(kwargs) + candidates = [] + + if DependencyMethods.SYSTEM in methods: + candidates.append(functools.partial(ShadercDependency, environment, kwargs)) + + if DependencyMethods.PKGCONFIG in methods: + candidates.append(functools.partial(PkgConfigDependency, 'shaderc', environment, kwargs)) + + return candidates + + @staticmethod + def get_methods(): + return [DependencyMethods.SYSTEM, DependencyMethods.PKGCONFIG] diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 3efc88c..4b713ea 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2471,7 +2471,8 @@ external dependencies (including libraries) must go to "dependencies".''') self.active_projectname = current_active self.subprojects.update(subi.subprojects) self.subprojects[dirname] = SubprojectHolder(subi, self.subproject_dir, dirname) - self.build_def_files += subi.build_def_files + # Duplicates are possible when subproject uses files from project root + self.build_def_files = list(set(self.build_def_files + subi.build_def_files)) self.build.merge(subi.build) self.build.subprojects[dirname] = subi.project_version return self.subprojects[dirname] diff --git a/test cases/failing/85 gtest dependency with version/meson.build b/test cases/failing/85 gtest dependency with version/meson.build index 5115f27..3d90994 100644 --- a/test cases/failing/85 gtest dependency with version/meson.build +++ b/test cases/failing/85 gtest dependency with version/meson.build @@ -1,3 +1,3 @@ project('gtest dependency with version', ['c', 'cpp']) # discovering gtest version is not yet implemented -dep = dependency('gtest', version: '>0') +dep = dependency('gtest', method: 'system', version: '>0') |