blob: d16b2d93d0e45bf4394a0a50c41db4c8b76c4630 [file] [log] [blame]
Brian Pauld1efbf02002-11-08 15:35:46 +00001#!/usr/bin/env python
2
Ian Romanick66a55482005-06-21 23:42:43 +00003# $Id: getprocaddress.py,v 1.7 2005/06/21 23:42:43 idr Exp $
Brian Pauld1efbf02002-11-08 15:35:46 +00004
5# Helper for the getprocaddress.c test.
6
Brian Paul7520e252004-10-29 19:12:08 +00007import sys, getopt, re
8sys.path.append("../../src/mesa/glapi/" )
9import gl_XML
10import license
Brian Pauld1efbf02002-11-08 15:35:46 +000011
12
13def FindTestFunctions():
14 """Scan getprocaddress.c for lines that start with "test_" to find
15 extension function tests. Return a list of names found."""
16 functions = []
17 f = open("getprocaddress.c")
18 if not f:
19 return functions
20 for line in f.readlines():
21 v = re.search("^test_([a-zA-Z0-9]+)", line)
22 if v:
23 func = v.group(1)
Brian Pauld1efbf02002-11-08 15:35:46 +000024 functions.append(func)
25 f.close
26 return functions
27
28
Ian Romanick66a55482005-06-21 23:42:43 +000029class PrintExports(gl_XML.gl_print_base):
Brian Paul7520e252004-10-29 19:12:08 +000030 def __init__(self):
Ian Romanick66a55482005-06-21 23:42:43 +000031 gl_XML.gl_print_base.__init__(self)
32
33 self.name = "getprocaddress.py (from Mesa)"
Brian Paul7520e252004-10-29 19:12:08 +000034 self.license = license.bsd_license_template % ( \
35"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
36(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
Ian Romanick66a55482005-06-21 23:42:43 +000037
Brian Paul7520e252004-10-29 19:12:08 +000038 self.tests = FindTestFunctions()
39 self.prevCategory = ""
Ian Romanick66a55482005-06-21 23:42:43 +000040 return
41
Brian Pauld1efbf02002-11-08 15:35:46 +000042
Brian Paul7520e252004-10-29 19:12:08 +000043 def printRealHeader(self):
44 print """
45struct name_test_pair {
46 const char *name;
Brian Paul0699b0b2004-11-27 19:57:46 +000047 GLboolean (*test)(generic_func);
Brian Paul7520e252004-10-29 19:12:08 +000048};
49
50static struct name_test_pair functions[] = {"""
Brian Pauld1efbf02002-11-08 15:35:46 +000051
Ian Romanick66a55482005-06-21 23:42:43 +000052 def printBody(self, api):
53 prev_category = None
54
Brian Pauld1efbf02002-11-08 15:35:46 +000055
Ian Romanick66a55482005-06-21 23:42:43 +000056 for f in api.functionIterateByOffset():
57 [category, num] = api.get_category_for_name( f.name )
58 if category != prev_category:
59 print ' { "-%s", NULL},' % category
60 prev_category = category
Brian Paul7520e252004-10-29 19:12:08 +000061
Brian Paul7520e252004-10-29 19:12:08 +000062 test = "NULL"
Ian Romanick66a55482005-06-21 23:42:43 +000063 for name in f.entry_points:
64 if name in self.tests:
65 test = "test_%s" % name
66 break
67
68 print ' { "gl%s", %s },' % (f.name, test)
69
70 print ''
71 print ' { NULL, NULL }'
72 print '};'
73 print ''
Brian Paul7520e252004-10-29 19:12:08 +000074 return
Brian Pauld1efbf02002-11-08 15:35:46 +000075
76
Brian Paul7520e252004-10-29 19:12:08 +000077if __name__ == '__main__':
78 file_name = "../../src/mesa/glapi/gl_API.xml"
79
80 try:
81 (args, trail) = getopt.getopt(sys.argv[1:], "f:")
82 except Exception,e:
83 show_usage()
Brian Pauld1efbf02002-11-08 15:35:46 +000084
Brian Paul7520e252004-10-29 19:12:08 +000085 for (arg,val) in args:
86 if arg == "-f":
87 file_name = val
Brian Pauld1efbf02002-11-08 15:35:46 +000088
Ian Romanick66a55482005-06-21 23:42:43 +000089 printer = PrintExports()
Brian Paul7520e252004-10-29 19:12:08 +000090
Ian Romanick66a55482005-06-21 23:42:43 +000091 api = gl_XML.parse_GL_API( file_name, gl_XML.gl_item_factory() )
Brian Paul7520e252004-10-29 19:12:08 +000092
Ian Romanick66a55482005-06-21 23:42:43 +000093 printer.Print( api )