diff options
Diffstat (limited to 'tools/scripts/make_glwrapper.py')
-rw-r--r-- | tools/scripts/make_glwrapper.py | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/tools/scripts/make_glwrapper.py b/tools/scripts/make_glwrapper.py new file mode 100644 index 0000000000..f3f8d39837 --- /dev/null +++ b/tools/scripts/make_glwrapper.py @@ -0,0 +1,183 @@ +#! /usr/bin/python +import sys + +if (len(sys.argv)<2): + print("usage: make_glwrapper.py <headers>") + sys.exit(255) + + +functions=[] +types=[] +constants=[] + +READ_FUNCTIONS=0 +READ_TYPES=1 +READ_CONSTANTS=2 + +read_what=READ_TYPES + +for x in (range(len(sys.argv)-1)): + f=open(sys.argv[x+1],"r") + + while(True): + + line=f.readline() + if (line==""): + break + + line=line.replace("\n","").strip() + """ + if (line.find("[types]")!=-1): + read_what=READ_TYPES + continue + elif (line.find("[constants]")!=-1): + read=READ_TYPES + continue + elif (line.find("[functions]")!=-1): + read_what=READ_FUNCTIONS + continue + """ + + if (line.find("#define")!=-1): + if (line.find("0x")==-1 and line.find("GL_VERSION")==-1): + continue + constants.append(line) + elif (line.find("typedef")!=-1): + if (line.find("(")!=-1 or line.find(")")!=-1 or line.find("ARB")!=-1 or line.find("EXT")!=-1 or line.find("GL")==-1): + continue + types.append(line) + elif (line.find("APIENTRY")!=-1 and line.find("GLAPI")!=-1): + + if (line.find("ARB")!=-1 or line.find("EXT")!=-1 or line.find("NV")!=-1): + continue + + line=line.replace("APIENTRY","") + line=line.replace("GLAPI","") + + glpos=line.find(" gl") + if (glpos==-1): + + glpos=line.find("\tgl") + if (glpos==-1): + continue + + ret=line[:glpos].strip(); + + line=line[glpos:].strip() + namepos=line.find("(") + + if (namepos==-1): + continue + + name=line[:namepos].strip() + line=line[namepos:] + + argpos=line.rfind(")") + if (argpos==-1): + continue + + args=line[1:argpos] + + funcdata={} + funcdata["ret"]=ret + funcdata["name"]=name + funcdata["args"]=args + + functions.append(funcdata) + print(funcdata) + + + +#print(types) +#print(constants) +#print(functions) + + +f=open("glwrapper.h","w") + +f.write("#ifndef GL_WRAPPER\n") +f.write("#define GL_WRAPPER\n\n\n") + +header_code="""\ +#if defined(__gl_h_) || defined(__GL_H__) +#error gl.h included before glwrapper.h +#endif +#if defined(__glext_h_) || defined(__GLEXT_H_) +#error glext.h included before glwrapper.h +#endif +#if defined(__gl_ATI_h_) +#error glATI.h included before glwrapper.h +#endif + +#define __gl_h_ +#define __GL_H__ +#define __glext_h_ +#define __GLEXT_H_ +#define __gl_ATI_h_ + +#define GL_TRUE 1 +#define GL_FALSE 0 + +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_NONE 0 +#define GL_NO_ERROR 0 + +\n\n +""" + +f.write("#include <stddef.h>\n\n\n") + +f.write(header_code); + +f.write("#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n") +f.write("#if defined(_WIN32) && !defined(__CYGWIN__)\n") +f.write("#define GLWRP_APIENTRY __stdcall\n") +f.write("#else\n"); +f.write("#define GLWRP_APIENTRY \n") +f.write("#endif\n\n"); +for x in types: + f.write(x+"\n") + +f.write("\n\n") + +for x in constants: + f.write(x+"\n") + +f.write("\n\n") + +for x in functions: + f.write("extern "+x["ret"]+" GLWRP_APIENTRY (*__wrapper_"+x["name"]+")("+x["args"]+");\n") + f.write("#define "+x["name"]+" __wrapper_"+x["name"]+"\n") + +f.write("\n\n") +f.write("typedef void (*GLWrapperFuncPtr)(void);\n\n"); +f.write("void glWrapperInit( GLWrapperFuncPtr (*wrapperFunc)(const char*) );\n") + +f.write("#ifdef __cplusplus\n}\n#endif\n") + +f.write("#endif\n\n") + +f=open("glwrapper.c","w") + +f.write("\n\n") +f.write("#include \"glwrapper.h\"\n") +f.write("\n\n") + +for x in functions: + f.write(x["ret"]+" GLWRP_APIENTRY (*__wrapper_"+x["name"]+")("+x["args"]+")=NULL;\n") + +f.write("\n\n") +f.write("void glWrapperInit( GLWrapperFuncPtr (*wrapperFunc)(const char*) ) {\n") +f.write("\n") + +for x in functions: + f.write("\t__wrapper_"+x["name"]+"=("+x["ret"]+" GLWRP_APIENTRY (*)("+x["args"]+"))wrapperFunc(\""+x["name"]+"\");\n") + +f.write("\n\n") +f.write("}\n") +f.write("\n\n") + + + + |