From bcc3cbb93e5d03e659a3f2a8b23f0f3ac49db010 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 16 Jan 2018 09:15:16 -0800 Subject: dependencies: Allow setting config-tool binaries in cross file This allows for much easier cross compiler configuration for tools like LLVM. This patch does honor the 'native' keyword, and falls back to searching PATH if the binary name is not specified. I'd be fine with either removing the fallback behavior, or marking it as deprecated and removing it later. Fixes #2921 --- docs/markdown/snippets/config-tool-cross.md | 13 +++++++++++++ mesonbuild/dependencies/base.py | 15 ++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 docs/markdown/snippets/config-tool-cross.md diff --git a/docs/markdown/snippets/config-tool-cross.md b/docs/markdown/snippets/config-tool-cross.md new file mode 100644 index 0000000..1102481 --- /dev/null +++ b/docs/markdown/snippets/config-tool-cross.md @@ -0,0 +1,13 @@ +# Config-Tool based dependencies can be specified in a cross file + +Tools like LLVM and pcap use a config tool for dependencies, this is a script +or binary that is run to get configuration information (cflags, ldflags, etc) +from. + +These binaries may now be specified in the `binaries` section of a cross file. + +```dosini +[binaries] +cc = ... +llvm-config = '/usr/bin/llvm-config32' +``` diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 560e389..f89e631 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -212,6 +212,7 @@ class ConfigToolDependency(ExternalDependency): def __init__(self, name, environment, language, kwargs): super().__init__('config-tool', environment, language, kwargs) self.name = name + self.native = kwargs.get('native', False) self.tools = listify(kwargs.get('tools', self.tools)) req_version = kwargs.get('version', None) @@ -260,8 +261,20 @@ class ConfigToolDependency(ExternalDependency): if not isinstance(versions, list) and versions is not None: versions = listify(versions) + if self.env.is_cross_build() and not self.native: + cross_file = self.env.cross_info.config['binaries'] + try: + tools = [cross_file[self.tool_name]] + except KeyError: + mlog.warning('No entry for {0} specified in your cross file. ' + 'Falling back to searching PATH. This may find a ' + 'native version of {0}!'.format(self.tool_name)) + tools = self.tools + else: + tools = self.tools + best_match = (None, None) - for tool in self.tools: + for tool in tools: try: p, out = Popen_safe([tool, '--version'])[:2] except (FileNotFoundError, PermissionError): -- cgit v1.1