summaryrefslogtreecommitdiffhomepage
path: root/registry/stripAPI.py
blob: df1287fb64a672f7d66a04ae30910840e1aaa504 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/python3
#
# Copyright 2023-2024 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0

import argparse
import xml.etree.ElementTree as etree
from reg import stripNonmatchingAPIs

if __name__ == '__main__':
    parser = argparse.ArgumentParser(prog='stripAPI',
                formatter_class=argparse.RawDescriptionHelpFormatter,
                description='''\
Filters out elements with non-matching explicit 'api' attributes from API XML.
To remove Vulkan SC-only elements from the combined API XML:
    python3 scripts/stripAPI.py -input xml/vk.xml -output vulkan-only.xml -keepAPI vulkan
To remove Vulkan-only elements:
    python3 scripts/stripAPI.py -input xml/vk.xml -output vulkansc-only.xml -keepAPI vulkansc
If you are parsing the XML yourself but using the xml.etree package, the
equivalent runtime code is:
   import reg
   reg.stripNonmatchingAPIs(tree.getroot(), keepAPI, actuallyDelete=True)
where 'tree' is an ElementTree created from the XML file using
    etree.parse(filename)''')

    parser.add_argument('-input', action='store',
                        required=True,
                        help='Specify input registry XML')
    parser.add_argument('-output', action='store',
                        required=True,
                        help='Specify output registry XML')
    parser.add_argument('-keepAPI', action='store',
                        default=None,
                        help='Specify API name whose \'api\' tags are kept')

    args = parser.parse_args()

    tree = etree.parse(args.input)
    if args.keepAPI is not None:
        stripNonmatchingAPIs(tree.getroot(), args.keepAPI, actuallyDelete = True)
    tree.write(args.output)