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)
|