aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-10-04 04:02:17 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2015-10-04 04:02:17 +0300
commitb197d9e2796874420e7ffc6f5dd66ac8b08bc56c (patch)
tree1e933b5bea09b0accebc4e41b2683032f64f5ef9
parent50663144c37af5e0f411902eb3b799641daffa45 (diff)
downloadmeson-b197d9e2796874420e7ffc6f5dd66ac8b08bc56c.zip
meson-b197d9e2796874420e7ffc6f5dd66ac8b08bc56c.tar.gz
meson-b197d9e2796874420e7ffc6f5dd66ac8b08bc56c.tar.bz2
Can set compiler options with mesonconf.
-rwxr-xr-xmesonconf.py36
-rw-r--r--mesonlib.py13
-rw-r--r--optinterpreter.py18
3 files changed, 43 insertions, 24 deletions
diff --git a/mesonconf.py b/mesonconf.py
index 6922ea6..963585a 100755
--- a/mesonconf.py
+++ b/mesonconf.py
@@ -64,13 +64,6 @@ class Conf:
f = '%s%s %s%s' % (name, namepad, descr, descrpad)
print(f, value)
- def tobool(self, thing):
- if thing.lower() == 'true':
- return True
- if thing.lower() == 'false':
- return False
- raise ConfException('Value %s is not boolean (true or false).' % thing)
-
def set_options(self, options):
for o in options:
if '=' not in o:
@@ -127,18 +120,10 @@ class Conf:
self.coredata.localedir = v
elif k in self.coredata.user_options:
tgt = self.coredata.user_options[k]
- if isinstance(tgt, mesonlib.UserBooleanOption):
- tgt.set_value(self.tobool(v))
- elif isinstance(tgt, mesonlib.UserComboOption):
- try:
- tgt.set_value(v)
- except coredata.MesonException:
- raise ConfException('Value of %s must be one of %s.' %
- (k, tgt.choices))
- elif isinstance(tgt, mesonlib.UserStringOption):
- tgt.set_value(v)
- else:
- raise ConfException('Internal error, unknown option type.')
+ tgt.set_value(v)
+ elif k in self.coredata.compiler_options:
+ tgt = self.coredata.compiler_options[k]
+ tgt.set_value(v)
elif k.endswith('linkargs'):
lang = k[:-8]
if not lang in self.coredata.external_link_args:
@@ -181,6 +166,17 @@ class Conf:
for (lang, args) in self.coredata.external_link_args.items():
print(lang + 'linkargs', str(args))
print('')
+ okeys = sorted(self.coredata.compiler_options.keys())
+ if len(okeys) == 0:
+ print('No compiler options\n')
+ else:
+ print('Compiler options\n')
+ coarr = []
+ for k in okeys:
+ o = self.coredata.compiler_options[k]
+ coarr.append([k, o.description, o.value])
+ self.print_aligned(coarr)
+ print('')
print('Directories\n')
parr = []
parr.append(['prefix', 'Install prefix', self.coredata.prefix])
@@ -193,7 +189,7 @@ class Conf:
self.print_aligned(parr)
print('')
if len(self.coredata.user_options) == 0:
- print('This project does not have any options')
+ print('This project does not have user options')
else:
print('Project options\n')
options = self.coredata.user_options
diff --git a/mesonlib.py b/mesonlib.py
index 0b200ac..0e31ef1 100644
--- a/mesonlib.py
+++ b/mesonlib.py
@@ -279,10 +279,17 @@ class UserBooleanOption(UserOption):
super().__init__(name, description)
self.set_value(value)
+ def tobool(self, thing):
+ if isinstance(thing, bool):
+ return thing
+ if thing.lower() == 'true':
+ return True
+ if thing.lower() == 'false':
+ return False
+ raise MesonException('Value %s is not boolean (true or false).' % thing)
+
def set_value(self, newvalue):
- if not isinstance(newvalue, bool):
- raise MesonException('Value "%s" for boolean option "%s" is not a boolean.' % (str(newvalue), self.name))
- self.value = newvalue
+ self.value = self.tobool(newvalue)
def parse_string(self, valuestring):
if valuestring == 'false':
diff --git a/optinterpreter.py b/optinterpreter.py
index e61707a..d66aa1f 100644
--- a/optinterpreter.py
+++ b/optinterpreter.py
@@ -17,6 +17,22 @@ import coredata, mesonlib
import os, re
forbidden_option_names = coredata.builtin_options
+forbidden_prefixes = {'c_': True,
+ 'cpp_': True,
+ 'rust_': True,
+ 'fortran_': True,
+ 'objc_': True,
+ 'objcpp_': True,
+ 'vala_': True,
+ 'csharp_': True
+ }
+
+def is_invalid_name(name):
+ if name in forbidden_option_names:
+ return True
+ if name in forbidden_prefixes:
+ return True
+ return False
class OptionException(coredata.MesonException):
pass
@@ -120,7 +136,7 @@ class OptionInterpreter:
raise OptionException('Positional argument must be a string.')
if optname_regex.search(opt_name) is not None:
raise OptionException('Option names can only contain letters, numbers or dashes.')
- if opt_name in forbidden_option_names:
+ if is_invalid_name(opt_name):
raise OptionException('Option name %s is reserved.' % opt_name)
if self.subproject != '':
opt_name = self.subproject + ':' + opt_name