| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | 
							- #!/usr/bin/env python3
 - 
 - import sys
 - import os
 - import xml.etree.ElementTree as etree
 - 
 - passed = True
 - 
 - def check_result(check, message):
 -   global passed
 -   if check:
 -     print('passed')
 -   elif message:
 -     print('failed: ' + message)
 -     passed = False
 -   else:
 -     print('failed')
 -     passed = False
 - 
 - def check_missing(items, target):
 -   missing = []
 -   for item in items:
 -     if not item in target:
 -       missing.append(item)
 -   check_result(len(missing) == 0, ', '.join(missing))
 -   return missing
 - 
 - def all_descendants(proj, name):
 -   for e in proj.iter():
 -     if e.tag == '{http://schemas.microsoft.com/developer/msbuild/2003}' + name:
 -       yield e
 - 
 - def children(e, name):
 -   for c in e:
 -     if not isinstance(c, str):
 -       if c.tag == '{http://schemas.microsoft.com/developer/msbuild/2003}' + name:
 -         yield c
 - 
 - def element_map(proj, name):
 -   print('testing for duplicate \'' + name + '\' names ... ', end='')
 -   items = {}
 -   duplicates = []
 -   for e in all_descendants(proj, name):
 -     id = e.attrib.get("Name")
 -     if id in items.keys():
 -       duplicates.append(id)
 -     else:
 -       items[id] = e
 -   check_result(len(duplicates) == 0 , ', '.join(duplicates))
 -   return items
 - 
 - def list_dictionaries():
 -   for file in os.listdir('dictsource'):
 -     if file.endswith('_rules'):
 -       yield file.split('_')[0]
 - 
 - # 1. Check for missing/duplicate names #################################################################################
 - 
 - proj = etree.parse('src/windows/data.vcxproj').getroot()
 - targets = element_map(proj, 'Target')
 - 
 - # 2. Check for missing dictionaries ####################################################################################
 - 
 - dictionaries = list(list_dictionaries())
 - depends_on_dictionaries = targets['Dictionaries'].attrib.get('DependsOnTargets').split(';')
 - 
 - print('testing for missing dictionary targets ... ', end='')
 - check_missing(depends_on_dictionaries, targets.keys())
 - 
 - print('testing for missing dependencies on dictionaries ... ', end='')
 - check_missing(set.intersection(set(dictionaries), set(targets.keys())), depends_on_dictionaries)
 - 
 - ########################################################################################################################
 - 
 - if not passed:
 -   sys.exit(-1)
 
 
  |