diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2018-01-16 09:15:16 -0800 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-01-30 06:45:58 +1100 |
commit | bcc3cbb93e5d03e659a3f2a8b23f0f3ac49db010 (patch) | |
tree | 4645f3510d58bd1eef039199b982e62f215a99ae | |
parent | 5f3c282e6e48c6223882c15bba64cad27f5ab5e5 (diff) | |
download | meson-bcc3cbb93e5d03e659a3f2a8b23f0f3ac49db010.zip meson-bcc3cbb93e5d03e659a3f2a8b23f0f3ac49db010.tar.gz meson-bcc3cbb93e5d03e659a3f2a8b23f0f3ac49db010.tar.bz2 |
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
-rw-r--r-- | docs/markdown/snippets/config-tool-cross.md | 13 | ||||
-rw-r--r-- | mesonbuild/dependencies/base.py | 15 |
2 files changed, 27 insertions, 1 deletions
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): |