| #!/usr/bin/env python3 |
| |
| from os import get_terminal_size |
| from textwrap import wrap |
| from mesonbuild import coredata |
| from mesonbuild import optinterpreter |
| |
| (COLUMNS, _) = get_terminal_size() |
| |
| def describe_option(option_name: str, option_default_value: str, |
| option_type: str, option_message: str) -> None: |
| print('name: ' + option_name) |
| print('default: ' + option_default_value) |
| print('type: ' + option_type) |
| for line in wrap(option_message, width=COLUMNS - 9): |
| print(' ' + line) |
| print('---') |
| |
| oi = optinterpreter.OptionInterpreter('') |
| oi.process('meson_options.txt') |
| |
| for (name, value) in oi.options.items(): |
| if isinstance(value, coredata.UserStringOption): |
| describe_option(name, |
| value.value, |
| 'string', |
| "You can type what you want, but make sure it makes sense") |
| elif isinstance(value, coredata.UserBooleanOption): |
| describe_option(name, |
| 'true' if value.value else 'false', |
| 'boolean', |
| "You can set it to 'true' or 'false'") |
| elif isinstance(value, coredata.UserIntegerOption): |
| describe_option(name, |
| str(value.value), |
| 'integer', |
| "You can set it to any integer value between '{}' and '{}'".format(value.min_value, value.max_value)) |
| elif isinstance(value, coredata.UserUmaskOption): |
| describe_option(name, |
| str(value.value), |
| 'umask', |
| "You can set it to 'preserve' or a value between '0000' and '0777'") |
| elif isinstance(value, coredata.UserComboOption): |
| choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']' |
| describe_option(name, |
| value.value, |
| 'combo', |
| "You can set it to any one of those values: " + choices) |
| elif isinstance(value, coredata.UserArrayOption): |
| choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']' |
| value = '[' + ', '.join(["'" + v + "'" for v in value.value]) + ']' |
| describe_option(name, |
| value, |
| 'array', |
| "You can set it to one or more of those values: " + choices) |
| elif isinstance(value, coredata.UserFeatureOption): |
| describe_option(name, |
| value.value, |
| 'feature', |
| "You can set it to 'auto', 'enabled', or 'disabled'") |
| else: |
| print(name + ' is an option of a type unknown to this script') |
| print('---') |