aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/coredata.py35
-rw-r--r--mesonbuild/mconf.py6
2 files changed, 32 insertions, 9 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index a46f95a..24580bc 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -361,13 +361,22 @@ class CoreData:
self.user_options[name] = value
def set_options(self, options, subproject=''):
+ # Set prefix first because it's needed to sanitize other options
+ prefix = self.builtins['prefix'].value
+ if 'prefix' in options:
+ prefix = self.sanitize_prefix(options['prefix'])
+ self.builtins['prefix'].set_value(prefix)
+ for key in builtin_dir_noprefix_options:
+ if key not in options:
+ self.builtins[key].set_value(get_builtin_option_default(key, prefix))
+
unknown_options = []
- for o in options:
- if '=' not in o:
- raise MesonException('Value "%s" not of type "a=b".' % o)
- (k, v) = o.split('=', 1)
- if is_builtin_option(k):
- self.set_builtin_option(k, v)
+ for k, v in options.items():
+ if k == 'prefix':
+ pass
+ elif k in self.builtins:
+ tgt = self.builtins[k]
+ tgt.set_value(self.sanitize_dir_option_value(prefix, k, v))
elif k in self.backend_options:
tgt = self.backend_options[k]
tgt.set_value(v)
@@ -527,6 +536,20 @@ def filter_builtin_options(args, original_args):
if hasattr(args, name):
delattr(args, name)
+def create_options_dict(options):
+ result = {}
+ for o in options:
+ try:
+ (key, value) = o.split('=', 1)
+ except ValueError:
+ raise MesonException('Option {!r} must have a value separated by equals sign.'.format(o))
+ result[key] = value
+ return result
+
+def parse_cmd_line_options(args, original_args):
+ filter_builtin_options(args, original_args)
+ args.cmd_line_options = create_options_dict(args.projectoptions)
+
builtin_options = {
'buildtype': [UserComboOption, 'Build type to use.', ['plain', 'debug', 'debugoptimized', 'release', 'minsize'], 'debug'],
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py
index 0b33ba3..9932aa0 100644
--- a/mesonbuild/mconf.py
+++ b/mesonbuild/mconf.py
@@ -189,7 +189,7 @@ def run(args):
if not args:
args = [os.getcwd()]
options = buildparser().parse_args(args)
- coredata.filter_builtin_options(options, args)
+ coredata.parse_cmd_line_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.')
@@ -201,8 +201,8 @@ def run(args):
try:
c = Conf(builddir)
save = False
- if len(options.projectoptions) > 0:
- c.set_options(options.projectoptions)
+ if len(options.cmd_line_options) > 0:
+ c.set_options(options.cmd_line_options)
save = True
elif options.clearcache:
c.clear_cache()