diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2019-04-04 14:37:57 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2019-04-05 15:08:17 -0700 |
commit | 377b652b93c8961bdcb266ba4254a15b28f2c5be (patch) | |
tree | 1b9e53dec5b8304257202fb01d8e9db025aa3e16 /mesonbuild/coredata.py | |
parent | 569e646e1e3556fb5fdb7c4fb012a30145c7145d (diff) | |
download | meson-377b652b93c8961bdcb266ba4254a15b28f2c5be.zip meson-377b652b93c8961bdcb266ba4254a15b28f2c5be.tar.gz meson-377b652b93c8961bdcb266ba4254a15b28f2c5be.tar.bz2 |
coredata: Add ability to mark options as having separate cross values
Currently this only marks the pkg_config_path flag, but it could be
used to mark any of these values as having separate values for cross
and native builds, assuming that the necessary plumbing is done.
Diffstat (limited to 'mesonbuild/coredata.py')
-rw-r--r-- | mesonbuild/coredata.py | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 034f86a..739f6e7 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -337,6 +337,8 @@ class CoreData: self.builtins = {} for key, opt in builtin_options.items(): self.builtins[key] = opt.init_option(key) + if opt.separate_cross: + self.builtins['cross_' + key] = opt.init_option(key) def init_backend_options(self, backend_name): if backend_name == 'ninja': @@ -680,15 +682,19 @@ def parse_cmd_line_options(args): args.cmd_line_options = create_options_dict(args.projectoptions) # Merge builtin options set with --option into the dict. - for name in builtin_options: - value = getattr(args, name, None) - if value is not None: - if name in args.cmd_line_options: - cmdline_name = BuiltinOption.argparse_name_to_arg(name) - raise MesonException( - 'Got argument {0} as both -D{0} and {1}. Pick one.'.format(name, cmdline_name)) - args.cmd_line_options[name] = value - delattr(args, name) + for name, builtin in builtin_options.items(): + names = [name] + if builtin.separate_cross: + names.append('cross_' + name) + for name in names: + value = getattr(args, name, None) + if value is not None: + if name in args.cmd_line_options: + cmdline_name = BuiltinOption.argparse_name_to_arg(name) + raise MesonException( + 'Got argument {0} as both -D{0} and {1}. Pick one.'.format(name, cmdline_name)) + args.cmd_line_options[name] = value + delattr(args, name) _U = TypeVar('_U', bound=UserOption) @@ -701,12 +707,13 @@ class BuiltinOption(Generic[_U]): """ def __init__(self, opt_type: Type[_U], description: str, default: Any, yielding: Optional[bool] = None, *, - choices: Any = None): + choices: Any = None, separate_cross: bool = False): self.opt_type = opt_type self.description = description self.default = default self.choices = choices self.yielding = yielding + self.separate_cross = separate_cross def init_option(self, name: str) -> _U: """Create an instance of opt_type and return it.""" @@ -762,6 +769,9 @@ class BuiltinOption(Generic[_U]): cmdline_name = self.argparse_name_to_arg(name) parser.add_argument(cmdline_name, help=h, **kwargs) + if self.separate_cross: + kwargs['dest'] = 'cross_' + name + parser.add_argument(self.argparse_name_to_arg('cross_' + name), help=h + ' (for host in cross compiles)', **kwargs) builtin_options = { @@ -794,7 +804,7 @@ builtin_options = { 'optimization': BuiltinOption(UserComboOption, 'Optimization level', '0', choices=['0', 'g', '1', '2', '3', 's']), 'debug': BuiltinOption(UserBooleanOption, 'Debug', True), 'wrap_mode': BuiltinOption(UserComboOption, 'Wrap mode', 'default', choices=['default', 'nofallback', 'nodownload', 'forcefallback']), - 'pkg_config_path': BuiltinOption(UserArrayOption, 'List of additional paths for pkg-config to search', []), + 'pkg_config_path': BuiltinOption(UserArrayOption, 'List of additional paths for pkg-config to search', [], separate_cross=True), } # Special prefix-dependent defaults for installation directories that reside in |