132001f49Smrg#!/usr/bin/env python
232001f49Smrg
332001f49Smrg
432001f49Smrg# Helper for the getprocaddress.c test.
532001f49Smrg
632001f49Smrg
732001f49Smrgimport sys, getopt, re, os
832001f49Smrgargc = len(sys.argv)
932001f49Smrgif (argc):
1032001f49Smrg	glapi_xml_path = sys.argv[1]
1132001f49Smrgelse:
1232001f49Smrg	glapi_xml_path = "../../src/mapi/glapi/gen/"
1332001f49Smrg
1432001f49Smrgsys.path.append(glapi_xml_path)
1532001f49Smrgimport gl_XML
1632001f49Smrgimport license
1732001f49Smrg
1832001f49Smrg
1932001f49Smrg
2032001f49Smrgdef FindTestFunctions():
2132001f49Smrg	"""Scan getprocaddress.c for lines that start with "test_" to find
2232001f49Smrg	extension function tests.  Return a list of names found."""
2332001f49Smrg	functions = []
2432001f49Smrg	f = open("getprocaddress.c")
2532001f49Smrg	if not f:
2632001f49Smrg		return functions
2732001f49Smrg	for line in f.readlines():
2832001f49Smrg		v = re.search("^test_([a-zA-Z0-9]+)", line)
2932001f49Smrg		if v:
3032001f49Smrg			func = v.group(1)
3132001f49Smrg			functions.append(func)
3232001f49Smrg	f.close
3332001f49Smrg	return functions
3432001f49Smrg
3532001f49Smrg
3632001f49Smrgclass PrintExports(gl_XML.gl_print_base):
3732001f49Smrg	def __init__(self):
3832001f49Smrg		gl_XML.gl_print_base.__init__(self)
3932001f49Smrg
4032001f49Smrg		self.name = "getprocaddress.py (from Mesa)"
4132001f49Smrg		self.license = license.bsd_license_template % ( \
4232001f49Smrg"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
4332001f49Smrg(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
4432001f49Smrg
4532001f49Smrg		self.tests = FindTestFunctions()
4632001f49Smrg		self.prevCategory = ""
4732001f49Smrg		return
4832001f49Smrg
4932001f49Smrg
5032001f49Smrg	def printRealHeader(self):
5132001f49Smrg		print """
5232001f49Smrgstruct name_test_pair {
5332001f49Smrg   const char *name;
5432001f49Smrg   GLboolean (*test)(generic_func);
5532001f49Smrg};
5632001f49Smrg
5732001f49Smrgstatic struct name_test_pair functions[] = {"""
5832001f49Smrg
5932001f49Smrg	def printBody(self, api):
6032001f49Smrg		prev_category = None
6132001f49Smrg
6232001f49Smrg
6332001f49Smrg		for f in api.functionIterateByCategory():
6432001f49Smrg			[category, num] = api.get_category_for_name( f.name )
6532001f49Smrg			if category != prev_category:
6632001f49Smrg				print '   { "-%s", NULL},' % category
6732001f49Smrg				prev_category = category
6832001f49Smrg
6932001f49Smrg			test = "NULL"
7032001f49Smrg			for name in f.entry_points:
7132001f49Smrg				if name in self.tests:
7232001f49Smrg					test = "test_%s" % name
7332001f49Smrg					break
7432001f49Smrg
7532001f49Smrg			print '   { "gl%s", %s },' % (f.name, test)
7632001f49Smrg
7732001f49Smrg		print ''
7832001f49Smrg		print '   { NULL, NULL }'
7932001f49Smrg		print '};'
8032001f49Smrg		print ''
8132001f49Smrg		return
8232001f49Smrg
8332001f49Smrg
8432001f49Smrgif __name__ == '__main__':
8532001f49Smrg	file_name = os.path.join(glapi_xml_path, "gl_API.xml")
8632001f49Smrg
8732001f49Smrg	try:
8832001f49Smrg		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
8932001f49Smrg	except Exception,e:
9032001f49Smrg		show_usage()
9132001f49Smrg
9232001f49Smrg	for (arg,val) in args:
9332001f49Smrg		if arg == "-f":
9432001f49Smrg			file_name = val
9532001f49Smrg
9632001f49Smrg	printer = PrintExports()
9732001f49Smrg
9832001f49Smrg	api = gl_XML.parse_GL_API( file_name, gl_XML.gl_item_factory() )
9932001f49Smrg
10032001f49Smrg	printer.Print( api )
101