]> git.tdb.fi Git - libs/gl.git/blobdiff - scripts/extgen.py
Add kerning support to Font
[libs/gl.git] / scripts / extgen.py
index d6727123d97cb842a5836ea1b7d2f4a901396962..bcff3b4498ccafeefbc061c81872c3fbef3051be 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 import sys
+import os
 
 if len(sys.argv)<2:
        print """Usage:
@@ -13,16 +14,38 @@ given to override the version where <extension> was promoted to core."""
        sys.exit(0)
 
 ext = sys.argv[1]
+out_base = None
+if ext.endswith(".glext"):
+       fn = ext
+       ext = None
+       ver = None
+       secondary = []
+       for line in open(fn):
+               parts = line.split()
+               if parts[0]=="extension":
+                       ext = parts[1]
+               elif parts[0]=="core_version":
+                       ver = parts[1]
+               elif parts[0]=="secondary":
+                       secondary.append(parts[1])
+       if len(sys.argv)>=3:
+               out_base = os.path.splitext(sys.argv[2])[0]
+else:
+       secondary = sys.argv[2:]
+       ver = None
+       if secondary and secondary[0][0].isdigit():
+               ver = secondary.pop(0)
+
 exttype = ext.split('_')[0]
-secondary = sys.argv[2:]
-ver = None
-if secondary and secondary[0][0].isdigit():
-       ver = secondary.pop(0)
 bp_ext = None
 
+if not out_base:
+       out_base = ext.lower()
+
 class Function:
        def __init__(self, name):
                self.name = name
+               self.typedef = None
                self.version = None
                self.category = None
                self.vectorequiv = None
@@ -89,23 +112,26 @@ funcs.sort(key=(lambda f: f.name))
 
 for f in funcs:
        if f.extfunc:
+               f.typedef = "PFNGL%sPROC"%f.extfunc.name.upper()
                if not ver:
                        ver = f.version
                if not f.category.startswith("VERSION_"):
                        bp_ext = f.category
-       if not f.extfunc and not f.name.endswith(exttype):
-               bp_ext = f.category
+       else:
+               f.typedef = "PFNGL%sPROC"%f.name.upper()
+               if not f.name.endswith(exttype):
+                       bp_ext = f.category
 
 if ver:
        ver = map(int, ver.split('.'))
 
-out = file(ext.lower()+".h", "w")
+out = file(out_base+".h", "w")
 out.write("#ifndef MSP_GL_%s_\n"%ext.upper())
 out.write("#define MSP_GL_%s_\n"%ext.upper())
 
 out.write("""
-#include "extension.h"
-#include "gl.h"
+#include <msp/gl/extension.h>
+#include <msp/gl/gl.h>
 #include <GL/glext.h>
 
 namespace Msp {
@@ -115,7 +141,7 @@ namespace GL {
 if funcs:
        out.write("\n")
 for f in funcs:
-       out.write("extern PFNGL%sPROC gl%s;\n"%(f.name.upper(), f.name))
+       out.write("extern %s gl%s;\n"%(f.typedef, f.name))
 
 out.write("\nextern Extension %s;\n"%ext)
 
@@ -126,7 +152,7 @@ out.write("""
 #endif
 """)
 
-out = file(ext.lower()+".cpp", "w")
+out = file(out_base+".cpp", "w")
 out.write("#include \"%s.h\"\n"%ext.lower())
 
 out.write("""
@@ -137,7 +163,7 @@ namespace GL {
 if funcs:
        out.write("\n")
 for f in funcs:
-       out.write("PFNGL%sPROC gl%s = 0;\n"%(f.name.upper(), f.name))
+       out.write("%s gl%s = 0;\n"%(f.typedef, f.name))
 
 out.write("\nExtension::SupportLevel init_%s()\n{\n"%ext.lower())
 if ver:
@@ -146,7 +172,7 @@ if ver:
                out.write(" || is_supported(\"GL_%s\")"%bp_ext)
        out.write(")\n\t{\n")
        for f in funcs:
-               out.write("\t\tgl%s = reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f.name, f.name.upper(), f.name))
+               out.write("\t\tgl%s = reinterpret_cast<%s>(get_proc_address(\"gl%s\"));\n"%(f.name, f.typedef, f.name))
        out.write("\t\treturn Extension::CORE;\n")
        out.write("\t}\n")
 if ext!=bp_ext:
@@ -155,7 +181,7 @@ if ext!=bp_ext:
                n = f.name
                if f.extfunc:
                        n = f.extfunc.name
-               out.write("\t\tgl%s = reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f.name, f.name.upper(), n))
+               out.write("\t\tgl%s = reinterpret_cast<%s>(get_proc_address(\"gl%s\"));\n"%(f.name, f.typedef, n))
        out.write("\t\treturn Extension::EXTENSION;\n")
        out.write("\t}\n")
 out.write("\treturn Extension::UNSUPPORTED;\n")