blob: eecc1ac9baf59bf71b2c5dde4c3c14d06c8423e3 [file] [log] [blame]
#! /usr/bin/env python
#
# Check the option usage.
# Make sure the union member matches the option type.
#
import sys, os, fnmatch
# just use the first letter of the member name - should be unique
opt_suffix = {
'b' : 'AT_BOOL',
'a' : 'AT_IARF',
'n' : 'AT_NUM',
'l' : 'AT_LINE',
't' : 'AT_POS'
}
opts = { }
def check_file (fn):
problems = 0
fd = open(fn, 'r')
line_no = 0
for line in fd:
line_no = line_no + 1
cpd = line.find('cpd.settings[UO_')
if cpd > 0:
sb = line[cpd:].find(']')
opt = line[cpd + 13 : cpd + sb]
mem = line[cpd + sb + 2]
if opt in opts and mem in opt_suffix:
if opts[opt] != opt_suffix[mem]:
print fn + '[%d]' % (line_no) , opt, 'should use', opts[opt], 'not', opt_suffix[mem]
problems += 1
return problems
def main (argv):
# Read in all the options
of = open(os.path.join('src', 'options.cpp'), 'r');
for line in of:
if line.find('unc_add_option') > 0 and line.find('UO_') > 0:
ps = line.split(',')
if len(ps) >= 3:
opts[ps[1].strip()] = ps[2].strip()
of.close()
# Get a list of all the source files
ld = os.listdir('src')
src_files = fnmatch.filter(ld, '*.cpp')
src_files.extend(fnmatch.filter(ld, '*.h'))
# Check each source file
problems = 0
for fn in src_files:
problems += check_file(os.path.join('src', fn))
if problems == 0:
print 'No problems found'
if __name__ == '__main__':
main(sys.argv)