mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	 5a49e45d21
			
		
	
	
		5a49e45d21
		
	
	
	
	
		
			
			Also switch existing shebangs to "better" /usr/bin/env python.
(cherry picked from commit fc8ccd5b8c)
		
	
			
		
			
				
	
	
		
			183 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #! /usr/bin/env 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")
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |