From bbf71d9aa35c46c31e2363590d560f32455ba252 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 6 Feb 2018 12:10:32 -0800 Subject: coredata: Add helper for setting action Currently we manually pass the argparse action, this isn't very DRY, since the builtin_types already has all the data necessary to find that. This adds a new function to determine the action based on the default type. --- mesonbuild/coredata.py | 8 ++++++++ mesonbuild/mesonmain.py | 12 +++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 918671a68..ff24922fd 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -359,6 +359,14 @@ def get_builtin_option_description(optname): else: raise RuntimeError('Tried to get the description for an unknown builtin option \'%s\'.' % optname) +def get_builtin_option_action(optname): + default = builtin_options[optname][2] + if default is True: + return 'store_false' + elif default is False: + return 'store_true' + return None + def get_builtin_option_default(optname, prefix='', noneIfSuppress=False): if is_builtin_option(optname): o = builtin_options[optname] diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py index daf5907d9..4b5505748 100644 --- a/mesonbuild/mesonmain.py +++ b/mesonbuild/mesonmain.py @@ -28,10 +28,12 @@ default_warning = '1' def add_builtin_argument(p, name, **kwargs): k = kwargs.get('dest', name.replace('-', '_')) c = coredata.get_builtin_option_choices(k) - b = kwargs.get('action', None) in ['store_true', 'store_false'] + b = coredata.get_builtin_option_action(k) h = coredata.get_builtin_option_description(k) if not b: h = h.rstrip('.') + ' (default: %s).' % coredata.get_builtin_option_default(k) + else: + kwargs['action'] = b if c and not b: kwargs['choices'] = c default = coredata.get_builtin_option_default(k, noneIfSuppress=True) @@ -58,14 +60,14 @@ def create_parser(): add_builtin_argument(p, 'sharedstatedir') add_builtin_argument(p, 'backend') add_builtin_argument(p, 'buildtype') - add_builtin_argument(p, 'strip', action='store_true') + add_builtin_argument(p, 'strip') add_builtin_argument(p, 'unity') - add_builtin_argument(p, 'werror', action='store_true') + add_builtin_argument(p, 'werror') add_builtin_argument(p, 'layout') add_builtin_argument(p, 'default-library') add_builtin_argument(p, 'warnlevel', dest='warning_level') - add_builtin_argument(p, 'stdsplit', action='store_false') - add_builtin_argument(p, 'errorlogs', action='store_false') + add_builtin_argument(p, 'stdsplit') + add_builtin_argument(p, 'errorlogs') p.add_argument('--cross-file', default=None, help='File describing cross compilation environment.') p.add_argument('-D', action='append', dest='projectoptions', default=[], metavar="option", -- cgit v1.2.3