Accept builtin options with -D when making initial meson call
Currently meson only accepts `-Dopt=value` for builtin options when calling `meson configure` and `--opt=value` for builtin options when calling `meson` initially. This is a confusing behavior, and users only get a small warning at the top of a potentially long configuration summary to catch this. This has confused end users and developers alike, there are at least 5 duplicates of the bug this fixes, and I have personally been asked about this more times than I can count. The help documentation doesn't make it clear that -D cannot be used to set options like prefix and bindir. This adds support for -D options to the initial meson call, but not -- options to the meson configure call. I think it's better to have one way to do things, and -- options are kinda one off while -D is used everywhere else, so lets stick with that. Related #969
This commit is contained in:
parent
cdefc15285
commit
78e37c4953
|
@ -0,0 +1,6 @@
|
|||
## Meson now accepts -D for builtin arguments at setup time like configure time
|
||||
|
||||
Previously meson required that builtin arguments (like prefix) be passed as
|
||||
`--prefix` to `meson` and `-Dprefix` to `meson configure`. Meson now accepts -D
|
||||
form like meson configure does. `meson configure` still does not accept the
|
||||
`--prefix` form.
|
|
@ -69,6 +69,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):
|
||||
|
@ -320,6 +339,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
|
||||
|
|
Loading…
Reference in New Issue