X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=scripts%2Fextgen.py;h=bcff3b4498ccafeefbc061c81872c3fbef3051be;hb=355e3a068ea4ad6a7d3ab9318b3ce74b7f0b0b15;hp=d6727123d97cb842a5836ea1b7d2f4a901396962;hpb=6afbace895a7bbcf216ab8e48280ea0303ab5892;p=libs%2Fgl.git diff --git a/scripts/extgen.py b/scripts/extgen.py index d6727123..bcff3b44 100755 --- a/scripts/extgen.py +++ b/scripts/extgen.py @@ -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 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 +#include #include 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(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(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")