aboutsummaryrefslogtreecommitdiff
path: root/mesonconf.py
diff options
context:
space:
mode:
authorWink Saville <wink@saville.com>2015-11-09 14:45:05 -0800
committerWink Saville <wink@saville.com>2015-11-09 14:45:05 -0800
commitc49da5aa00c1d3b0a89c51274786374ba80f46f9 (patch)
treef18dd24e6a3d3c7a42a72142620412838ede6542 /mesonconf.py
parent8e24e9e09a17f4a944e827503b50c1b5282c1fc6 (diff)
downloadmeson-c49da5aa00c1d3b0a89c51274786374ba80f46f9.zip
meson-c49da5aa00c1d3b0a89c51274786374ba80f46f9.tar.gz
meson-c49da5aa00c1d3b0a89c51274786374ba80f46f9.tar.bz2
Enhance mesonconfig.py help
Added code to output the 'Possible values' and also titles for the columns. Added code to so 'choices' is allowed for all UserOption's.
Diffstat (limited to 'mesonconf.py')
-rwxr-xr-xmesonconf.py92
1 files changed, 58 insertions, 34 deletions
diff --git a/mesonconf.py b/mesonconf.py
index 14fd8f4..710b5cd 100755
--- a/mesonconf.py
+++ b/mesonconf.py
@@ -53,16 +53,33 @@ class Conf:
def print_aligned(self, arr):
if len(arr) == 0:
return
- longest_name = max((len(x[0]) for x in arr))
- longest_descr = max((len(x[1]) for x in arr))
+ titles = ['Option', 'Description', 'Current Value', '']
+ longest_name = len(titles[0])
+ longest_descr = len(titles[1])
+ longest_value = len(titles[2])
+ longest_possible_value = len(titles[3])
+ for x in arr:
+ longest_name = max(longest_name, len(x[0]))
+ longest_descr = max(longest_descr, len(x[1]))
+ longest_value = max(longest_value, len(str(x[2])))
+ longest_possible_value = max(longest_possible_value, len(x[3]))
+
+ if longest_possible_value > 0:
+ titles[3] = 'Possible Values'
+ print(' %s%s %s%s %s%s %s' % (titles[0], ' '*(longest_name - len(titles[0])), titles[1], ' '*(longest_descr - len(titles[1])), titles[2], ' '*(longest_value - len(titles[2])), titles[3]))
+ print(' %s%s %s%s %s%s %s' % ('-'*len(titles[0]), ' '*(longest_name - len(titles[0])), '-'*len(titles[1]), ' '*(longest_descr - len(titles[1])), '-'*len(titles[2]), ' '*(longest_value - len(titles[2])), '-'*len(titles[3])))
for i in arr:
name = i[0]
descr = i[1]
value = i[2]
+ if isinstance(value, bool):
+ value = 'true' if value else 'false'
+ possible_values = i[3]
namepad = ' '*(longest_name - len(name))
descrpad = ' '*(longest_descr - len(descr))
- f = '%s%s %s%s' % (name, namepad, descr, descrpad)
- print(f, value)
+ valuepad = ' '*(longest_value - len(str(value)))
+ f = ' %s%s %s%s %s%s %s' % (name, namepad, descr, descrpad, value, valuepad, possible_values)
+ print(f)
def set_options(self, options):
for o in options:
@@ -97,62 +114,69 @@ class Conf:
def print_conf(self):
- print('Core properties\n')
- print('Source dir', self.build.environment.source_dir)
- print('Build dir ', self.build.environment.build_dir)
+ print('Core properties:')
+ print(' Source dir', self.build.environment.source_dir)
+ print(' Build dir ', self.build.environment.build_dir)
print('')
- print('Core options\n')
+ print('Core options:')
carr = []
- carr.append(['buildtype', 'Build type', self.coredata.get_builtin_option('buildtype')])
- carr.append(['warning_level', 'Warning level', self.coredata.get_builtin_option('warning_level')])
- carr.append(['strip', 'Strip on install', self.coredata.get_builtin_option('strip')])
- carr.append(['coverage', 'Coverage report', self.coredata.get_builtin_option('coverage')])
- carr.append(['use_pch', 'Precompiled headers', self.coredata.get_builtin_option('use_pch')])
- carr.append(['unity', 'Unity build', self.coredata.get_builtin_option('unity')])
- carr.append(['default_library', 'Default library type', self.coredata.get_builtin_option('default_library')])
+ booleans = '[true, false]'
+ carr.append(['buildtype', 'Build type', self.coredata.get_builtin_option('buildtype'), build_types])
+ carr.append(['warning_level', 'Warning level', self.coredata.get_builtin_option('warning_level'), warning_levels])
+ carr.append(['strip', 'Strip on install', self.coredata.get_builtin_option('strip'), booleans])
+ carr.append(['coverage', 'Coverage report', self.coredata.get_builtin_option('coverage'), booleans])
+ carr.append(['use_pch', 'Precompiled headers', self.coredata.get_builtin_option('use_pch'), booleans])
+ carr.append(['unity', 'Unity build', self.coredata.get_builtin_option('unity'), booleans])
+ carr.append(['default_library', 'Default library type', self.coredata.get_builtin_option('default_library'), booleans])
self.print_aligned(carr)
print('')
- print('Compiler arguments\n')
+ print('Compiler arguments:')
for (lang, args) in self.coredata.external_args.items():
- print(lang + 'args', str(args))
+ print(' ' + lang + 'args', str(args))
print('')
- print('Linker args\n')
+ print('Linker args:')
for (lang, args) in self.coredata.external_link_args.items():
- print(lang + 'linkargs', str(args))
+ print(' ' + lang + 'linkargs', str(args))
print('')
+ print('Compiler options:')
okeys = sorted(self.coredata.compiler_options.keys())
if len(okeys) == 0:
- print('No compiler options\n')
+ 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])
+ coarr.append([k, o.description, o.value, ''])
self.print_aligned(coarr)
print('')
- print('Directories\n')
+ print('Directories:')
parr = []
- parr.append(['prefix', 'Install prefix', self.coredata.get_builtin_option('prefix')])
- parr.append(['libdir', 'Library directory', self.coredata.get_builtin_option('libdir')])
- parr.append(['bindir', 'Binary directory', self.coredata.get_builtin_option('bindir')])
- parr.append(['includedir', 'Header directory', self.coredata.get_builtin_option('includedir')])
- parr.append(['datadir', 'Data directory', self.coredata.get_builtin_option('datadir')])
- parr.append(['mandir', 'Man page directory', self.coredata.get_builtin_option('mandir')])
- parr.append(['localedir', 'Locale file directory', self.coredata.get_builtin_option('localedir')])
+ parr.append(['prefix', 'Install prefix', self.coredata.get_builtin_option('prefix'), ''])
+ parr.append(['libdir', 'Library directory', self.coredata.get_builtin_option('libdir'), ''])
+ parr.append(['bindir', 'Binary directory', self.coredata.get_builtin_option('bindir'), ''])
+ parr.append(['includedir', 'Header directory', self.coredata.get_builtin_option('includedir'), ''])
+ parr.append(['datadir', 'Data directory', self.coredata.get_builtin_option('datadir'), ''])
+ parr.append(['mandir', 'Man page directory', self.coredata.get_builtin_option('mandir'), ''])
+ parr.append(['localedir', 'Locale file directory', self.coredata.get_builtin_option('localedir'), ''])
self.print_aligned(parr)
print('')
+ print('Project options:')
if len(self.coredata.user_options) == 0:
- print('This project does not have user options')
+ print(' This project does not have any options')
else:
- print('Project options\n')
options = self.coredata.user_options
keys = list(options.keys())
keys.sort()
optarr = []
for key in keys:
opt = options[key]
- optarr.append([key, opt.description, opt.value])
+ if (opt.choices is None) or (len(opt.choices) == 0):
+ # Zero length list or string
+ choices = '';
+ else:
+ # A non zero length list or string, convert to string
+ choices = str(opt.choices);
+ optarr.append([key, opt.description, opt.value, choices])
self.print_aligned(optarr)
if __name__ == '__main__':
@@ -172,7 +196,7 @@ if __name__ == '__main__':
c.save()
else:
c.print_conf()
- except coredata.MesonException as e:
+ except ConfException as e:
print('Meson configurator encountered an error:\n')
print(e)