mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 08:12:17 +00:00
7b9e024f37
This brings enabled features on the same level as disabled and
auto-detected features by having both alternatives available.
Looking at the commit message of 652895abdc
this seems to have been the intent from the start, but this specific
definition was missing from the option creation in Features.
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
from waflib.Options import OptionsContext
|
|
import optparse
|
|
|
|
class Feature(object):
|
|
def __init__(self, group, feature):
|
|
self.group = group
|
|
self.identifier, self.attributes = feature['name'], feature
|
|
|
|
def add_options(self):
|
|
[self.add_option(option_rule) for option_rule in self.option_rules()]
|
|
|
|
def add_option(self, rule):
|
|
self.group.add_option(self.option(rule['state']),
|
|
action=rule['action'],
|
|
default=rule['default'],
|
|
dest=self.storage(),
|
|
help=self.help(rule['state']))
|
|
|
|
# private
|
|
def option_rules(self):
|
|
return {
|
|
'autodetect': [
|
|
{'state': 'disable', 'action': 'store_false', 'default': None},
|
|
{'state': 'enable', 'action': 'store_true', 'default': None},
|
|
],
|
|
'disable': [
|
|
{'state': 'disable', 'action': 'store_false', 'default': False},
|
|
{'state': 'enable', 'action': 'store_true', 'default': False},
|
|
],
|
|
'enable': [
|
|
{'state': 'disable', 'action': 'store_false', 'default': True},
|
|
{'state': 'enable', 'action': 'store_true', 'default': True},
|
|
],
|
|
}[self.behaviour()]
|
|
|
|
|
|
def behaviour(self):
|
|
if 'default' in self.attributes:
|
|
return self.attributes['default']
|
|
else:
|
|
return 'autodetect'
|
|
|
|
|
|
def option(self, state):
|
|
return "--{0}-{1}".format(state, self.identifier)
|
|
|
|
def help(self, state):
|
|
default = self.behaviour()
|
|
if (default, state) == ("autodetect", "enable") or default == state:
|
|
return optparse.SUPPRESS_HELP
|
|
return "{0} {1} [{2}]" \
|
|
.format(state, self.attributes['desc'], default)
|
|
|
|
def storage(self):
|
|
return "enable_{0}".format(self.identifier)
|
|
|
|
def add_feature(group, feature):
|
|
Feature(group, feature).add_options()
|
|
|
|
def parse_features(opt, group_name, features):
|
|
def is_feature(dep):
|
|
return dep['name'].find('--') >= 0
|
|
|
|
def strip_feature(dep):
|
|
dep['name'] = dep['name'].lstrip('-')
|
|
return dep
|
|
|
|
features = [strip_feature(dep) for dep in features if is_feature(dep)]
|
|
group = opt.get_option_group(group_name)
|
|
if not group:
|
|
group = opt.add_option_group(group_name)
|
|
[add_feature(group, feature) for feature in features]
|
|
|
|
OptionsContext.parse_features = parse_features
|