From 7d11d7cf68f5a0379ef3b50b853cea4a3ceb0636 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 18 Sep 2020 09:48:48 -0700 Subject: [PATCH] dependencies/curses: Add support for using the ncurses config tools These are mostly duplicated with pkg-config, but maybe someone has one but not another, and they're easy to turn on with the ConfigToolDependency. --- docs/markdown/Dependencies.md | 4 +++- .../curses-dependency-improvements.md | 4 ++++ mesonbuild/dependencies/misc.py | 21 ++++++++++++++++++- test cases/frameworks/31 curses/meson.build | 2 +- .../frameworks/31 curses/meson_options.txt | 6 ++++++ test cases/frameworks/31 curses/test.json | 10 +++++++++ 6 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 docs/markdown/snippets/curses-dependency-improvements.md create mode 100644 test cases/frameworks/31 curses/meson_options.txt create mode 100644 test cases/frameworks/31 curses/test.json diff --git a/docs/markdown/Dependencies.md b/docs/markdown/Dependencies.md index f458afeae..eccfe0ac6 100644 --- a/docs/markdown/Dependencies.md +++ b/docs/markdown/Dependencies.md @@ -623,7 +623,9 @@ Curses (and ncurses) are a cross platform pain in the butt. Meson wraps up these dependencies in the `curses` dependency. This covers both `ncurses` (preferred) and other curses implementations. -`method` may be `auto` or `pkg-config` +`method` may be `auto`, `pkg-config`, or `config-tool` + +*New in 0.56.0* The `config-tool` method.
1: They may appear to be case-insensitive, if the diff --git a/docs/markdown/snippets/curses-dependency-improvements.md b/docs/markdown/snippets/curses-dependency-improvements.md new file mode 100644 index 000000000..bd1d0012a --- /dev/null +++ b/docs/markdown/snippets/curses-dependency-improvements.md @@ -0,0 +1,4 @@ +## Improvements for the builtin curses dependency + +This method has been extended to use config-tools for lookup as well as +pkg-config. diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index c27075838..c1e17d771 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -404,7 +404,23 @@ class ShadercDependency(ExternalDependency): return [DependencyMethods.SYSTEM, DependencyMethods.PKGCONFIG] -@factory_methods({DependencyMethods.PKGCONFIG}) +class CursesConfigToolDependency(ConfigToolDependency): + + """Use the curses config tools.""" + + tool = 'curses-config' + # ncurses5.4-config is for macOS Catalina + tools = ['ncursesw6-config', 'ncursesw5-config', 'ncurses6-config', 'ncurses5-config', 'ncurses5.4-config'] + + def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any], language: T.Optional[str] = None): + super().__init__(name, env, kwargs, language) + if not self.is_found: + return + self.compile_args = self.get_config_value(['--cflags'], 'compile_args') + self.link_args = self.get_config_value(['--libs'], 'link_args') + + +@factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL}) def curses_factory(env: 'Environment', for_machine: 'MachineChoice', kwargs: T.Dict[str, T.Any], methods: T.List[DependencyMethods]) -> T.List[T.Callable[[], 'Dependency']]: candidates = [] # type: T.List[T.Callable[[], Dependency]] @@ -414,6 +430,9 @@ def curses_factory(env: 'Environment', for_machine: 'MachineChoice', for pkg in pkgconfig_files: candidates.append(functools.partial(PkgConfigDependency, pkg, env, kwargs)) + if DependencyMethods.CONFIG_TOOL in methods: + candidates.append(functools.partial(CursesConfigToolDependency, 'curses', env, kwargs)) + return candidates diff --git a/test cases/frameworks/31 curses/meson.build b/test cases/frameworks/31 curses/meson.build index 21483fb6f..66e09576e 100644 --- a/test cases/frameworks/31 curses/meson.build +++ b/test cases/frameworks/31 curses/meson.build @@ -1,6 +1,6 @@ project('curses', 'c') -curses = dependency('curses', required: false) +curses = dependency('curses', required: false, method : get_option('method')) if not curses.found() error('MESON_SKIP_TEST: Curses library not found') endif diff --git a/test cases/frameworks/31 curses/meson_options.txt b/test cases/frameworks/31 curses/meson_options.txt new file mode 100644 index 000000000..3a587f476 --- /dev/null +++ b/test cases/frameworks/31 curses/meson_options.txt @@ -0,0 +1,6 @@ +option( + 'method', + type : 'combo', + choices : ['pkg-config', 'config-tool'], + value : 'pkg-config', +) diff --git a/test cases/frameworks/31 curses/test.json b/test cases/frameworks/31 curses/test.json new file mode 100644 index 000000000..0de1f73a4 --- /dev/null +++ b/test cases/frameworks/31 curses/test.json @@ -0,0 +1,10 @@ +{ + "matrix": { + "options": { + "method": [ + { "val": "pkg-config" }, + { "val": "config-tool" } + ] + } + } +}