mconf: Set prefix first because other options depends on it

pull/3705/head
Xavier Claessens 7 years ago committed by Nirbheek Chauhan
parent 00414a326a
commit da29e48d13
  1. 35
      mesonbuild/coredata.py
  2. 6
      mesonbuild/mconf.py

@ -361,13 +361,22 @@ class CoreData:
self.user_options[name] = value self.user_options[name] = value
def set_options(self, options, subproject=''): 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 = [] unknown_options = []
for o in options: for k, v in options.items():
if '=' not in o: if k == 'prefix':
raise MesonException('Value "%s" not of type "a=b".' % o) pass
(k, v) = o.split('=', 1) elif k in self.builtins:
if is_builtin_option(k): tgt = self.builtins[k]
self.set_builtin_option(k, v) tgt.set_value(self.sanitize_dir_option_value(prefix, k, v))
elif k in self.backend_options: elif k in self.backend_options:
tgt = self.backend_options[k] tgt = self.backend_options[k]
tgt.set_value(v) tgt.set_value(v)
@ -527,6 +536,20 @@ def filter_builtin_options(args, original_args):
if hasattr(args, name): if hasattr(args, name):
delattr(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 = { builtin_options = {
'buildtype': [UserComboOption, 'Build type to use.', ['plain', 'debug', 'debugoptimized', 'release', 'minsize'], 'debug'], 'buildtype': [UserComboOption, 'Build type to use.', ['plain', 'debug', 'debugoptimized', 'release', 'minsize'], 'debug'],

@ -189,7 +189,7 @@ def run(args):
if not args: if not args:
args = [os.getcwd()] args = [os.getcwd()]
options = buildparser().parse_args(args) options = buildparser().parse_args(args)
coredata.filter_builtin_options(options, args) coredata.parse_cmd_line_options(options, args)
if len(options.directory) > 1: if len(options.directory) > 1:
print('%s <build directory>' % args[0]) print('%s <build directory>' % args[0])
print('If you omit the build directory, the current directory is substituted.') print('If you omit the build directory, the current directory is substituted.')
@ -201,8 +201,8 @@ def run(args):
try: try:
c = Conf(builddir) c = Conf(builddir)
save = False save = False
if len(options.projectoptions) > 0: if len(options.cmd_line_options) > 0:
c.set_options(options.projectoptions) c.set_options(options.cmd_line_options)
save = True save = True
elif options.clearcache: elif options.clearcache:
c.clear_cache() c.clear_cache()

Loading…
Cancel
Save