aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonmain.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/mesonmain.py')
-rw-r--r--mesonbuild/mesonmain.py60
1 files changed, 21 insertions, 39 deletions
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
index daf5907..613e953 100644
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -25,47 +25,9 @@ from .wrap import WrapMode, wraptool
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']
- h = coredata.get_builtin_option_description(k)
- if not b:
- h = h.rstrip('.') + ' (default: %s).' % coredata.get_builtin_option_default(k)
- if c and not b:
- kwargs['choices'] = c
- default = coredata.get_builtin_option_default(k, noneIfSuppress=True)
- if default is not None:
- kwargs['default'] = default
- else:
- kwargs['default'] = argparse.SUPPRESS
- p.add_argument('--' + name, help=h, **kwargs)
-
def create_parser():
p = argparse.ArgumentParser(prog='meson')
- add_builtin_argument(p, 'prefix')
- add_builtin_argument(p, 'libdir')
- add_builtin_argument(p, 'libexecdir')
- add_builtin_argument(p, 'bindir')
- add_builtin_argument(p, 'sbindir')
- add_builtin_argument(p, 'includedir')
- add_builtin_argument(p, 'datadir')
- add_builtin_argument(p, 'mandir')
- add_builtin_argument(p, 'infodir')
- add_builtin_argument(p, 'localedir')
- add_builtin_argument(p, 'sysconfdir')
- add_builtin_argument(p, 'localstatedir')
- 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, 'unity')
- add_builtin_argument(p, 'werror', action='store_true')
- 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')
+ coredata.register_builtin_arguments(p)
p.add_argument('--cross-file', default=None,
help='File describing cross compilation environment.')
p.add_argument('-D', action='append', dest='projectoptions', default=[], metavar="option",
@@ -87,6 +49,25 @@ def wrapmodetype(string):
msg = 'invalid argument {!r}, use one of {}'.format(string, msg)
raise argparse.ArgumentTypeError(msg)
+def filter_builtin_options(args, original_args):
+ """Filter out any builtin arguments passed as -D options.
+
+ Error if an argument is passed with -- and -D
+ """
+ arguments = dict(p.split('=', 1) for p in args.projectoptions)
+ meson_opts = set(arguments).intersection(set(coredata.builtin_options))
+ if meson_opts:
+ for arg in meson_opts:
+ value = arguments[arg]
+ if any([a.startswith('--{}'.format(arg)) for a in original_args]):
+ raise MesonException(
+ 'Argument "{0}" passed as both --{0} and -D{0}, but only '
+ 'one is allowed'.format(arg))
+ setattr(args, coredata.get_builtin_option_destination(arg), value)
+
+ # Remove the builtin option from the project args values
+ args.projectoptions.remove('{}={}'.format(arg, value))
+
class MesonApp:
def __init__(self, dir1, dir2, script_launcher, handshake, options, original_cmd_line_args):
@@ -338,6 +319,7 @@ def run(original_args, mainfile=None):
args = mesonlib.expand_arguments(args)
options = parser.parse_args(args)
+ filter_builtin_options(options, args)
args = options.directories
if not args or len(args) > 2:
# if there's a meson.build in the dir above, and not in the current