]> git.tdb.fi Git - libs/gl.git/blobdiff - extgen.py
Add support for detecting extensions
[libs/gl.git] / extgen.py
diff --git a/extgen.py b/extgen.py
new file mode 100755 (executable)
index 0000000..1098028
--- /dev/null
+++ b/extgen.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+# $Id$
+
+import sys
+
+ext=sys.argv[1]
+
+funcs=[]
+cur_func=None
+for line in file("gl.spec"):
+       if line[0]=='#' or line.find(':')>=0:
+               continue
+       elif line[0]=='\t' and cur_func:
+               parts=line.split()
+               if parts[0]=="category" and parts[1]==ext:
+                       funcs.append(cur_func)
+       else:
+               paren=line.find('(')
+               if paren>0:
+                       cur_func=line[:paren]
+
+out=file(ext.lower()+".h", "w")
+out.write("#ifndef MSP_GL_%s_\n"%ext.upper())
+out.write("#define MSP_GL_%s_\n"%ext.upper())
+
+out.write("""
+#include <GL/gl.h>
+
+namespace Msp {
+namespace GL {
+
+""")
+
+for f in funcs:
+       out.write("extern PFNGL%sPROC gl%s;\n"%(f.upper(), f))
+
+out.write("\nvoid init_%s();\n"%ext.lower())
+
+out.write("""
+} // namespace GL
+} // namespace Msp
+
+#endif
+""")
+
+out=file(ext.lower()+".cpp", "w")
+out.write("#include \"extension.h\"\n")
+out.write("#include \"%s.h\"\n"%ext.lower())
+
+out.write("""
+namespace Msp {
+namespace GL {
+
+""")
+
+for f in funcs:
+       out.write("PFNGL%sPROC gl%s=0;\n"%(f.upper(), f))
+
+out.write("\nvoid init_%s()\n{\n"%ext.lower())
+for f in funcs:
+       out.write("\tgl%s=reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f, f.upper(), f))
+out.write("}\n")
+
+out.write("""
+} // namespace GL
+} // namespace Msp
+""")