1#!/usr/bin/env python
2
3import argparse
4from generate.eglFunctionList import EGL_FUNCTIONS as GLVND_ENTRYPOINTS
5
6
7PREFIX = 'EGL_ENTRYPOINT('
8SUFFIX = ')'
9
10
11# These entrypoints should *not* be in the GLVND entrypoints
12GLVND_EXCLUDED_ENTRYPOINTS = [
13        # EGL_KHR_debug
14        'eglDebugMessageControlKHR',
15        'eglQueryDebugKHR',
16        'eglLabelObjectKHR',
17    ]
18
19
20def check_entrypoint_sorted(entrypoints):
21    print('Checking that EGL API entrypoints are sorted...')
22
23    for i, _ in enumerate(entrypoints):
24        # Can't compare the first one with the previous
25        if i == 0:
26            continue
27        if entrypoints[i - 1] > entrypoints[i]:
28            print('ERROR: ' + entrypoints[i] + ' should come before ' + entrypoints[i - 1])
29            exit(1)
30
31    print('All good :)')
32
33
34def check_glvnd_entrypoints(egl_entrypoints, glvnd_entrypoints):
35    print('Checking the GLVND entrypoints against the plain EGL ones...')
36    success = True
37
38    for egl_entrypoint in egl_entrypoints:
39        if egl_entrypoint in GLVND_EXCLUDED_ENTRYPOINTS:
40            continue
41        if egl_entrypoint not in glvnd_entrypoints:
42            print('ERROR: ' + egl_entrypoint + ' is missing from the GLVND entrypoints (src/egl/generate/eglFunctionList.py)')
43            success = False
44
45    for glvnd_entrypoint in glvnd_entrypoints:
46        if glvnd_entrypoint not in egl_entrypoints:
47            print('ERROR: ' + glvnd_entrypoint + ' is missing from the plain EGL entrypoints (src/egl/main/eglentrypoint.h)')
48            success = False
49
50    for glvnd_entrypoint in GLVND_EXCLUDED_ENTRYPOINTS:
51        if glvnd_entrypoint in glvnd_entrypoints:
52            print('ERROR: ' + glvnd_entrypoint + ' is should *not* be in the GLVND entrypoints (src/egl/generate/eglFunctionList.py)')
53            success = False
54
55    if success:
56        print('All good :)')
57    else:
58        exit(1)
59
60
61def main():
62    parser = argparse.ArgumentParser()
63    parser.add_argument('header')
64    args = parser.parse_args()
65
66    with open(args.header) as header:
67        lines = header.readlines()
68
69    entrypoints = []
70    for line in lines:
71        line = line.strip()
72        if line.startswith(PREFIX):
73            assert line.endswith(SUFFIX)
74            entrypoints.append(line[len(PREFIX):-len(SUFFIX)])
75
76    check_entrypoint_sorted(entrypoints)
77
78    glvnd_entrypoints = [x[0] for x in GLVND_ENTRYPOINTS]
79
80    check_glvnd_entrypoints(entrypoints, glvnd_entrypoints)
81
82if __name__ == '__main__':
83    main()
84