aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/snippets/d-options-for-meson-setup.md8
-rw-r--r--mesonbuild/mconf.py15
2 files changed, 19 insertions, 4 deletions
diff --git a/docs/markdown/snippets/d-options-for-meson-setup.md b/docs/markdown/snippets/d-options-for-meson-setup.md
index 90dc452..37afbe0 100644
--- a/docs/markdown/snippets/d-options-for-meson-setup.md
+++ b/docs/markdown/snippets/d-options-for-meson-setup.md
@@ -1,6 +1,6 @@
-## Meson now accepts -D for builtin arguments at setup time like configure time
+## Meson and meson configure now accept the same arguments
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.
+`--prefix` to `meson` and `-Dprefix` to `meson configure`. `meson` now accepts -D
+form like `meson configure` has. `meson configure` also accepts the `--prefix`
+form, like `meson` has.
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py
index cadd306..9a11332 100644
--- a/mesonbuild/mconf.py
+++ b/mesonbuild/mconf.py
@@ -19,6 +19,7 @@ from . import (coredata, mesonlib, build)
def buildparser():
parser = argparse.ArgumentParser(prog='meson configure')
+ coredata.register_builtin_arguments(parser)
parser.add_argument('-D', action='append', default=[], dest='sets',
help='Set an option to the given value.')
@@ -28,6 +29,19 @@ def buildparser():
return parser
+def filter_builtin_options(args, original_args):
+ """Filter out any args passed with -- instead of -D."""
+ for arg in original_args:
+ if not arg.startswith('--') or arg == '--clearcache':
+ continue
+ name = arg.lstrip('--').split('=', 1)[0]
+ if any([a.startswith(name + '=') for a in args.sets]):
+ raise mesonlib.MesonException(
+ 'Got argument {0} as both -D{0} and --{0}. Pick one.'.format(name))
+ args.sets.append('{}={}'.format(name, getattr(args, name)))
+ delattr(args, name)
+
+
class ConfException(mesonlib.MesonException):
pass
@@ -229,6 +243,7 @@ def run(args):
if not args:
args = [os.getcwd()]
options = buildparser().parse_args(args)
+ filter_builtin_options(options, args)
if len(options.directory) > 1:
print('%s <build directory>' % args[0])
print('If you omit the build directory, the current directory is substituted.')