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