From 8f60e57622707a0555cf79a83275c3c5e6dfa146 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 16 Aug 2024 03:34:49 -0600 Subject: [PATCH] Merge equivalent require blocks (#2406) * Merge equivalent require blocks Addresses #2404 Merges extension require blocks that have identical children, extending the depends attribute with a logical or. * Add utility script This script prints out require blocks that are eligible to be merged together. --- scripts/find_equivalent_ext_require_blocks.py | 46 +++++++++++++++++++ xml/vk.xml | 11 +---- 2 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 scripts/find_equivalent_ext_require_blocks.py diff --git a/scripts/find_equivalent_ext_require_blocks.py b/scripts/find_equivalent_ext_require_blocks.py new file mode 100644 index 000000000..0c6852405 --- /dev/null +++ b/scripts/find_equivalent_ext_require_blocks.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# +# Copyright 2024 Waffl3x +# SPDX-License-Identifier: Apache-2.0 + +import xml.etree.ElementTree as etree +import itertools + +tree = etree.parse('vk.xml') +doc = tree.getroot() + +extensions = doc.find('extensions') + +def check_if_children_equal(req1, req2): + if len(req1) != len(req2): + return False + for child1, child2 in zip(req1, req2): + if child1.tag != child2.tag: + return False + if child1.attrib != child2.attrib: + return False + return True +# def check_if_children_equal + +for ext in extensions: + req_with_depends = [] + # put all candidates into a list + for req, count in zip(ext, itertools.count()): + if 'depends' in req.attrib: + req_with_depends.append((req, count)) + + # compare candidates in a pairwise manner + for tup1, it2_start in zip(req_with_depends[:-1], range(1, len(req_with_depends))): + for tup2 in req_with_depends[it2_start:]: + req1, req_count1 = tup1 + req2, req_count2 = tup2 + all_match = check_if_children_equal(req1, req2) + if all_match: + print('Found matching require block in extension {}:'.format(ext.attrib['name'])) + print('blocks {} and {} are equal'.format(req_count1, req_count2)) + print('require block {} attributes: {}'.format(req_count1, req1.attrib)) + print('require block {} attributes: {}'.format(req_count2, req2.attrib)) + print(' block children:') + for child1, child2 in zip(req1, req2): + print(' ', req_count1, ': ', child1.attrib) + print(' ', req_count2, ': ', child2.attrib) diff --git a/xml/vk.xml b/xml/vk.xml index 0413c0a59..928a73c9d 100755 --- a/xml/vk.xml +++ b/xml/vk.xml @@ -18125,11 +18125,7 @@ typedef void* MTLSharedEvent_id; - - - - - + @@ -20515,10 +20511,7 @@ typedef void* MTLSharedEvent_id; - - - - +