X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=scripts%2Fextgen.py;h=b3ed9c8f6d6fa033fc9916cebbf778d98a7f61b6;hb=e79c72cf90dacaa47d82d65d3e6c4252f055f454;hp=45094a4df35df26fe2608e0f07a4005378ec125e;hpb=55dbeb5e04516699b8415104e346243d5e4c48c9;p=libs%2Fgl.git diff --git a/scripts/extgen.py b/scripts/extgen.py index 45094a4d..b3ed9c8f 100755 --- a/scripts/extgen.py +++ b/scripts/extgen.py @@ -32,6 +32,7 @@ if sys.argv[i].startswith("gl"): target_ext = sys.argv[i] backport_ext = None +deprecated_version = None out_base = None ignore_things = [] if target_ext.endswith(".glext"): @@ -46,6 +47,9 @@ if target_ext.endswith(".glext"): elif parts[0]=="core_version": if parts[1]==target_api: core_version = parts[2] + elif parts[0]=="deprecated": + if parts[1]==target_api: + deprecated_version = parts[2] elif parts[0]=="secondary": secondary.append(parts[1]) elif parts[0]=="backport": @@ -65,6 +69,9 @@ ext_type = target_ext.split('_')[0] if core_version: core_version = map(int, core_version.split('.')) +if deprecated_version: + deprecated_version = map(int, deprecated_version.split('.')) + if not out_base: out_base = target_ext.lower() @@ -78,8 +85,10 @@ class Thing: self.name = name self.kind = kind self.version = None + self.deprecated_version = None self.extension = None self.supported_apis = {} + self.deprecated = {} self.aliases = [] self.sources = [] @@ -193,8 +202,11 @@ def parse_feature(feat): for t in itertools.chain(commands, enums): name = t.getAttribute("name") - if profile!="core" and name in things: - del things[name] + if name in things: + if profile!="core": + del things[name] + else: + things[name].deprecated.setdefault(api, version) def parse_extension(ext): ext_name = ext.getAttribute("name") @@ -325,18 +337,40 @@ enums = filter(is_relevant, enums) enums.sort(key=(lambda e: e.value)) # Some final preparations for creating the files +core_version_candidates = {} +min_deprecated_version = [999, 0] backport_ext_candidates = [] for t in itertools.chain(funcs, enums): if target_api in t.supported_apis and t.supported_apis[target_api]!="ext": t.version = t.supported_apis[target_api] - if not core_version: - core_version = t.version + if t.version: + ver_tuple = tuple(t.version) + core_version_candidates[ver_tuple] = core_version_candidates.get(ver_tuple, 0)+1 + + if target_api in t.deprecated: + t.deprecated_version = t.deprecated[target_api] + min_deprecated_version = min(min_deprecated_version, t.deprecated_version) + else: + min_deprecated_version = None # Things in backport extensions don't acquire an extension suffix if t.extension and not t.name.endswith(ext_type) and target_api in t.supported_apis: if t.extension not in backport_ext_candidates: backport_ext_candidates.append(t.extension) +if not core_version and core_version_candidates: + core_version_candidates = list((v, k) for k, v in core_version_candidates.items()) + if len(core_version_candidates)>1: + core_version_candidates.sort(reverse=True) + if core_version_candidates[1][0]+1>=core_version_candidates[0][0]: + ver0 = core_version_candidates[0][1] + ver1 = core_version_candidates[1][1] + print "Warning: multiple likely core version candidates: %d.%d %d.%d"%(ver0[0], ver0[1], ver1[0], ver1[1]) + core_version = core_version_candidates[0][1] + +if not deprecated_version: + deprecated_version = min_deprecated_version + if backport_ext: if backport_ext=="none": backport_ext = None @@ -483,10 +517,14 @@ for f in funcs: out.write("\nExtension::SupportLevel init_%s()\n{\n"%target_ext.name.lower()) if core_version: - out.write("\tif(is_version_at_least(%d, %d)"%tuple(core_version)) + out.write("\tif(is_disabled(\"GL_%s\"))\n\t\treturn Extension::UNSUPPORTED;\n"%target_ext.name) + out.write("\tif(") if backport_ext: - out.write(" || is_supported(\"GL_%s\")"%backport_ext.name) - out.write(")\n\t{\n") + out.write("is_supported(\"GL_%s\") || "%backport_ext.name) + out.write("is_supported(Version(%d, %d)"%tuple(core_version)) + if deprecated_version: + out.write(", Version(%d, %d)"%tuple(deprecated_version)) + out.write("))\n\t{\n") for f in funcs: if target_api in f.supported_apis: gpa_suffix = ""