aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2019-04-04 14:37:57 -0700
committerDylan Baker <dylan@pnwbakers.com>2019-04-05 15:08:17 -0700
commit377b652b93c8961bdcb266ba4254a15b28f2c5be (patch)
tree1b9e53dec5b8304257202fb01d8e9db025aa3e16
parent569e646e1e3556fb5fdb7c4fb012a30145c7145d (diff)
downloadmeson-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.
-rw-r--r--mesonbuild/coredata.py32
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