aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/coredata.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/coredata.py')
-rw-r--r--mesonbuild/coredata.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 80ad94f..d39270b 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -85,6 +85,36 @@ class UserBooleanOption(UserOption):
def validate_value(self, value):
return self.tobool(value)
+class UserIntegerOption(UserOption):
+ def __init__(self, name, description, min_value, max_value, value):
+ super().__init__(name, description, [True, False])
+ self.min_value = min_value
+ self.max_value = max_value
+ self.set_value(value)
+
+ def set_value(self, newvalue):
+ if isinstance(newvalue, str):
+ newvalue = self.toint(newvalue)
+ if not isinstance(newvalue, int):
+ raise MesonException('New value for integer option is not an integer.')
+ if self.min_value is not None and newvalue < self.min_value:
+ raise MesonException('New value %d is less than minimum value %d.' % (newvalue, self.min_value))
+ if self.max_value is not None and newvalue > self.max_value:
+ raise MesonException('New value %d is more than maximum value %d.' % (newvalue, self.max_value))
+ self.value = newvalue
+
+ def toint(self, valuestring):
+ try:
+ return int(valuestring)
+ except:
+ raise MesonException('Value string "%s" is not convertable to an integer.' % valuestring)
+
+ def parse_string(self, valuestring):
+ return self.toint(valuestring)
+
+ def validate_value(self, value):
+ return self.toint(value)
+
class UserComboOption(UserOption):
def __init__(self, name, description, choices, value):
super().__init__(name, description, choices)
@@ -145,6 +175,7 @@ class CoreData:
self.target_guids = {}
self.version = version
self.init_builtins(options)
+ self.init_backend_options(self.builtins['backend'].value)
self.user_options = {}
self.compiler_options = {}
self.base_options = {}
@@ -218,6 +249,13 @@ class CoreData:
args = [key] + builtin_options[key][1:-1] + [value]
self.builtins[key] = builtin_options[key][0](*args)
+ def init_backend_options(self, backend_name):
+ self.backend_options = {}
+ if backend_name == 'ninja':
+ self.backend_options['backend_max_links'] = UserIntegerOption('backend_max_links',
+ 'Maximum number of linker processes to run or 0 for no limit',
+ 0, None, 0)
+
def get_builtin_option(self, optname):
if optname in self.builtins:
return self.builtins[optname].value