mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 13:38:47 +00:00
92 lines
2.8 KiB
Python
Executable File
92 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
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 all_descendants(wix, name):
|
|
for e in wix.iter():
|
|
if e.tag == '{http://schemas.microsoft.com/wix/2006/wi}' + name:
|
|
yield e
|
|
|
|
def children(e, name):
|
|
for c in e:
|
|
if not isinstance(c, str):
|
|
if c.tag == '{http://schemas.microsoft.com/wix/2006/wi}' + name:
|
|
yield c
|
|
|
|
def element_map(wix, name):
|
|
print('testing for duplicate \'' + name + '\' ids ... ', end='')
|
|
items = {}
|
|
duplicates = []
|
|
for e in all_descendants(wix, name):
|
|
id = e.attrib.get("Id")
|
|
if id in items.keys():
|
|
duplicates.append(id)
|
|
else:
|
|
items[id] = e
|
|
check_result(len(duplicates) == 0 , ', '.join(duplicates))
|
|
return items
|
|
|
|
def check_element_guids(wix, name):
|
|
print('testing for duplicate \'' + name + '\' guids ... ', end='')
|
|
guids = []
|
|
missing_guids = []
|
|
duplicates = []
|
|
for e in all_descendants(wix, name):
|
|
id = e.attrib.get("Id")
|
|
guid = e.attrib.get("Guid")
|
|
if not guid:
|
|
missing_guids.append(id)
|
|
elif guid in guids:
|
|
duplicates.append(guid)
|
|
else:
|
|
guids.append(guid)
|
|
check_result(len(duplicates) == 0 , ', '.join(duplicates))
|
|
return (guids, missing_guids)
|
|
|
|
def check_references(nodes, node_name, name, item_name, items):
|
|
print('testing for missing \'' + item_name + '\' ids in \'' + node_name + '/' + name + '\' ... ', end='')
|
|
missing = []
|
|
for node in nodes.values():
|
|
for ref in children(node, name):
|
|
id = ref.attrib.get("Id")
|
|
if not id in items.keys():
|
|
missing.append(id)
|
|
check_result(len(missing) == 0 , ', '.join(missing))
|
|
|
|
# 1. Check for missing/duplicate ids ###################################################################################
|
|
|
|
wix = etree.parse('src/windows/installer/Product.wxs').getroot()
|
|
features = element_map(wix, 'Feature')
|
|
component_groups = element_map(wix, 'ComponentGroup')
|
|
components = element_map(wix, 'Component')
|
|
directories = element_map(wix, 'Directory')
|
|
|
|
check_references(features, 'Feature', 'ComponentGroupRef', 'ComponentGroup', component_groups)
|
|
check_references(component_groups, 'ComponentGroups', 'ComponentRef', 'Component', components)
|
|
|
|
# 2. Check for missing/duplicate guids #################################################################################
|
|
|
|
guids, missing_guids = check_element_guids(wix, 'Component')
|
|
|
|
print('testing for missing \'Component\' guids ... ', end='')
|
|
check_result(len(missing_guids) == 0 , ', '.join(missing_guids))
|
|
|
|
########################################################################################################################
|
|
|
|
if not passed:
|
|
sys.exit(-1)
|