python 3 compatible

This commit is contained in:
step21 2018-01-04 21:06:43 +01:00
commit 642330e22c

View file

@ -128,28 +128,28 @@ def gen_functions_header(entries, prefix_name, verbatim, filename, with_args):
""" """
prefix_name = prefix_name.upper() prefix_name = prefix_name.upper()
print "// Auto-generated with: %s" % banner_command(sys.argv) print("// Auto-generated with: %s" % banner_command(sys.argv))
print "// DO NOT EDIT THIS FILE" print("// DO NOT EDIT THIS FILE")
print "" print("")
print "#ifndef %s_FUNCTIONS_H" % prefix_name print("#ifndef %s_FUNCTIONS_H" % prefix_name)
print "#define %s_FUNCTIONS_H" % prefix_name print("#define %s_FUNCTIONS_H" % prefix_name)
print "" print("")
for line in verbatim: for line in verbatim:
print line print(line)
print "#define LIST_%s_FUNCTIONS(X) \\" % prefix_name print("#define LIST_%s_FUNCTIONS(X) \\" % prefix_name)
for entry in entries: for entry in entries:
if with_args: if with_args:
print " X(%s, %s, (%s), (%s)) \\" % \ print(" X(%s, %s, (%s), (%s)) \\" % \
(entry.return_type, entry.func_name, entry.parameters, (entry.return_type, entry.func_name, entry.parameters,
entry.call) entry.call))
else: else:
print " X(%s, %s, (%s)) \\" % \ print(" X(%s, %s, (%s)) \\" % \
(entry.return_type, entry.func_name, entry.parameters) (entry.return_type, entry.func_name, entry.parameters))
print "" print("")
print "" print("")
print "#endif // %s_FUNCTIONS_H" % prefix_name print("#endif // %s_FUNCTIONS_H" % prefix_name)
@ -199,10 +199,10 @@ def gen_translator(entries):
"glProgramUniform3ui": 1, "glProgramUniform3ui": 1,
"glProgramUniform4ui": 1, "glProgramUniform4ui": 1,
"glBindVertexBuffer": 1, "glBindVertexBuffer": 1,
}; }
translator_nocontext_fail_codes = { translator_nocontext_fail_codes = {
"glClientWaitSync" : "GL_WAIT_FAILED", "glClientWaitSync" : "GL_WAIT_FAILED",
}; }
def needExternC(entry): def needExternC(entry):
if translator_needexternc.has_key(entry.func_name): if translator_needexternc.has_key(entry.func_name):
return "extern \"C\" " return "extern \"C\" "
@ -210,14 +210,14 @@ def gen_translator(entries):
return "" return ""
def get_fail_code(entry): def get_fail_code(entry):
if translator_nocontext_fail_codes.has_key(entry.func_name): if translator_nocontext_fail_codes.has_key(entry.func_name):
return translator_nocontext_fail_codes[entry.func_name]; return translator_nocontext_fail_codes[entry.func_name]
else: else:
return "0" return "0"
def gen_cxt_getter(entry): def gen_cxt_getter(entry):
if (entry.return_type == "void"): if (entry.return_type == "void"):
print " GET_CTX_V2();" print(" GET_CTX_V2();")
else: else:
print " GET_CTX_V2_RET(%s);" % get_fail_code(entry) print(" GET_CTX_V2_RET(%s);" % get_fail_code(entry))
def gen_validations_custom_impl(entry): def gen_validations_custom_impl(entry):
isGen = entry.func_name.startswith("glGen") isGen = entry.func_name.startswith("glGen")
@ -231,14 +231,14 @@ def gen_translator(entries):
if entry.return_type == "void": if entry.return_type == "void":
return "SET_ERROR_IF(%s,%s)" % (condition, glerr); return "SET_ERROR_IF(%s,%s)" % (condition, glerr);
else: else:
return "RET_AND_SET_ERROR_IF(%s,%s,%s)" % (condition, glerr, get_fail_code(entry)); return "RET_AND_SET_ERROR_IF(%s,%s,%s)" % (condition, glerr, get_fail_code(entry))
if (isGen or isDelete) and ("n" in entry.varnames): if (isGen or isDelete) and ("n" in entry.varnames):
print " %s;" % mySetError("n < 0", "GL_INVALID_VALUE"); print(" %s;" % mySetError("n < 0", "GL_INVALID_VALUE"))
if (isBufferOp and hasTargetArg): if (isBufferOp and hasTargetArg):
print " %s;" % mySetError("!GLESv2Validate::bufferTarget(ctx, target)", "GL_INVALID_ENUM"); print(" %s;" % mySetError("!GLESv2Validate::bufferTarget(ctx, target)", "GL_INVALID_ENUM"))
if translator_custom_pre.has_key(entry.func_name): if translator_custom_pre.has_key(entry.func_name):
print translator_custom_pre[entry.func_name], print(translator_custom_pre[entry.func_name],)
def gen_call_ret(entry): def gen_call_ret(entry):
globalNameTypes = { globalNameTypes = {
@ -262,53 +262,53 @@ def gen_translator(entries):
needsShareGroup = True needsShareGroup = True
if needsShareGroup: if needsShareGroup:
print " if (ctx->shareGroup().get()) {" print(" if (ctx->shareGroup().get()) {")
for key in zip(entry.vartypes, entry.varnames): for key in zip(entry.vartypes, entry.varnames):
vartype, varname = key vartype, varname = key
if globalNames.has_key(key): if globalNames.has_key(key):
print " const GLuint %s = ctx->shareGroup()->getGlobalName(%s, %s);" % (globalNames[key], globalNameTypes[key], varname) print(" const GLuint %s = ctx->shareGroup()->getGlobalName(%s, %s);" % (globalNames[key], globalNameTypes[key], varname))
globalCall = ", ".join(map(lambda k: globalNames.get(k, k[1]), zip(entry.vartypes, entry.varnames))) globalCall = ", ".join(map(lambda k: globalNames.get(k, k[1]), zip(entry.vartypes, entry.varnames)))
if needsShareGroup and translator_custom_share_processing.has_key(entry.func_name): if needsShareGroup and translator_custom_share_processing.has_key(entry.func_name):
print translator_custom_share_processing[entry.func_name], print(translator_custom_share_processing[entry.func_name])
if (entry.return_type == "void"): if (entry.return_type == "void"):
if (needsShareGroup): if (needsShareGroup):
print " ", print(" "),
if not translator_no_passthrough.has_key(entry.func_name): if not translator_no_passthrough.has_key(entry.func_name):
print " ctx->dispatcher().%s(%s);" % (entry.func_name, globalCall) print(" ctx->dispatcher().%s(%s);" % (entry.func_name, globalCall))
if needsShareGroup: if needsShareGroup:
print " }" print(" }")
if translator_custom_post.has_key(entry.func_name): if translator_custom_post.has_key(entry.func_name):
print translator_custom_post[entry.func_name]; print(translator_custom_post[entry.func_name])
else: else:
if (needsShareGroup): if (needsShareGroup):
print " ", print(" "),
if not translator_no_passthrough.has_key(entry.func_name): if not translator_no_passthrough.has_key(entry.func_name):
print " %s %s = ctx->dispatcher().%s(%s);" % (entry.return_type, entry.func_name + "RET", entry.func_name, globalCall) print(" %s %s = ctx->dispatcher().%s(%s);" % (entry.return_type, entry.func_name + "RET", entry.func_name, globalCall))
else: else:
print " %s %s = %s" % (entry.return_type, entry_func_name + "RET", get_fail_code(entry)) print(") %s %s = %s" % (entry.return_type, entry_func_name + "RET", get_fail_code(entry)))
if translator_custom_post.has_key(entry.func_name): if translator_custom_post.has_key(entry.func_name):
print translator_custom_post[entry.func_name]; print(translator_custom_post[entry.func_name])
print " return %s;" % (entry.func_name + "RET"); print(" return %s;" % (entry.func_name + "RET"))
if needsShareGroup: if needsShareGroup:
print " } else return %s;" % (get_fail_code(entry)) print(" } else return %s;" % (get_fail_code(entry)))
print "// Auto-generated with: %s" % banner_command(sys.argv) print("// Auto-generated with: %s" % banner_command(sys.argv))
print "// This file is best left unedited." print("// This file is best left unedited.")
print "// Try to make changes through gen_translator in gen-entries.py," print("// Try to make changes through gen_translator in gen-entries.py,")
print "// and/or parcel out custom functionality in separate code." print("// and/or parcel out custom functionality in separate code.")
for entry in entries: for entry in entries:
print "%sGL_APICALL %s GL_APIENTRY %s(%s) {" % (needExternC(entry), entry.return_type, entry.func_name, entry.parameters) print("%sGL_APICALL %s GL_APIENTRY %s(%s) {" % (needExternC(entry), entry.return_type, entry.func_name, entry.parameters))
gen_cxt_getter(entry); gen_cxt_getter(entry)
gen_validations_custom_impl(entry); gen_validations_custom_impl(entry)
gen_call_ret(entry); gen_call_ret(entry)
print "}\n" print("}\n")
def gen_dll_wrapper(entries, prefix_name, verbatim, filename): def gen_dll_wrapper(entries, prefix_name, verbatim, filename):
"""Generate a C source file that contains functions that act as wrappers """Generate a C source file that contains functions that act as wrappers
@ -322,77 +322,77 @@ def gen_dll_wrapper(entries, prefix_name, verbatim, filename):
ENTRY_PREFIX = "__dll_" ENTRY_PREFIX = "__dll_"
print "// Auto-generated with: %s" % banner_command(sys.argv) print("// Auto-generated with: %s" % banner_command(sys.argv))
print "// DO NOT EDIT THIS FILE" print("// DO NOT EDIT THIS FILE")
print "" print("")
print "#include <dlfcn.h>" print("#include <dlfcn.h>")
for line in verbatim: for line in verbatim:
print line print(line)
print "" print("")
print "///" print("///")
print "/// W R A P P E R P O I N T E R S" print("/// W R A P P E R P O I N T E R S")
print "///" print("///")
print "" print("")
for entry in entries: for entry in entries:
ptr_name = ENTRY_PREFIX + entry.func_name ptr_name = ENTRY_PREFIX + entry.func_name
print "static %s (*%s)(%s) = 0;" % \ print("static %s (*%s)(%s) = 0;" % \
(entry.return_type, ptr_name, entry.parameters) (entry.return_type, ptr_name, entry.parameters))
print "" print("")
print "///" print("///")
print "/// W R A P P E R F U N C T I O N S" print("/// W R A P P E R F U N C T I O N S")
print "///" print("///")
print "" print("")
for entry in entries: for entry in entries:
print "%s %s(%s) {" % \ print ("%s %s(%s) {" % \
(entry.return_type, entry.func_name, entry.parameters) (entry.return_type, entry.func_name, entry.parameters))
ptr_name = ENTRY_PREFIX + entry.func_name ptr_name = ENTRY_PREFIX + entry.func_name
if entry.return_type != "void": if entry.return_type != "void":
print " return %s(%s);" % (ptr_name, entry.call) print(" return %s(%s);" % (ptr_name, entry.call))
else: else:
print " %s(%s);" % (ptr_name, entry.call) print(" %s(%s);" % (ptr_name, entry.call))
print "}\n" print("}\n")
print "" print("")
print "///" print("///")
print "/// I N I T I A L I Z A T I O N F U N C T I O N" print("/// I N I T I A L I Z A T I O N F U N C T I O N")
print "///" print("///")
print "" print("")
print "int %s_dynlink_init(void* lib) {" % prefix_name print("int %s_dynlink_init(void* lib) {" % prefix_name)
for entry in entries: for entry in entries:
ptr_name = ENTRY_PREFIX + entry.func_name ptr_name = ENTRY_PREFIX + entry.func_name
print " %s = (%s(*)(%s))dlsym(lib, \"%s\");" % \ print(" %s = (%s(*)(%s))dlsym(lib, \"%s\");" % \
(ptr_name, (ptr_name,
entry.return_type, entry.return_type,
entry.parameters, entry.parameters,
entry.func_name) entry.func_name))
print " if (!%s) return -1;" % ptr_name print(" if (!%s) return -1;" % ptr_name)
print " return 0;" print(" return 0;")
print "}" print("}")
def gen_windows_def_file(entries): def gen_windows_def_file(entries):
"""Generate a windows DLL .def file. |entries| is a list of Entry instances. """Generate a windows DLL .def file. |entries| is a list of Entry instances.
""" """
print "EXPORTS" print("EXPORTS")
for entry in entries: for entry in entries:
print " %s" % entry.func_name print(" %s" % entry.func_name)
def gen_unix_sym_file(entries): def gen_unix_sym_file(entries):
"""Generate an ELF linker version file. |entries| is a list of Entry """Generate an ELF linker version file. |entries| is a list of Entry
instances. instances.
""" """
print "VERSION {" print("VERSION {")
print "\tglobal:" print("\tglobal:")
for entry in entries: for entry in entries:
print "\t\t%s;" % entry.func_name print("\t\t%s;" % entry.func_name)
print "\tlocal:" print("\tlocal:")
print "\t\t*;" print("\t\t*;")
print "};" print("};")
def gen_symbols(entries, underscore): def gen_symbols(entries, underscore):
"""Generate a list of symbols from |entries|, a list of Entry instances. """Generate a list of symbols from |entries|, a list of Entry instances.
@ -403,7 +403,7 @@ def gen_symbols(entries, underscore):
if underscore: if underscore:
prefix = "_" prefix = "_"
for entry in entries: for entry in entries:
print "%s%s" % (prefix, entry.func_name) print("%s%s" % (prefix, entry.func_name))
def parse_file(filename, lines, mode): def parse_file(filename, lines, mode):
"""Generate one of possible outputs from |filename|. |lines| must be a list """Generate one of possible outputs from |filename|. |lines| must be a list
@ -413,7 +413,9 @@ def parse_file(filename, lines, mode):
entries, prefix_name, verbatim, errors = parse_entries_file(lines) entries, prefix_name, verbatim, errors = parse_entries_file(lines)
if errors: if errors:
for error in errors: for error in errors:
print >> sys.stderr, "ERROR: %s:%s" % (filename, error) print("ERROR: %s:%s" % (filename, error))
#FIXME
#print >> sys.stderr, "ERROR: %s:%s" % (filename, error)
sys.exit(1) sys.exit(1)
if not prefix_name: if not prefix_name:
@ -466,7 +468,9 @@ parser.add_argument("file", help=".entries file path")
args = parser.parse_args() args = parser.parse_args()
if not args.mode: if not args.mode:
print >> sys.stderr, "ERROR: Please use --mode=<name>, see --help." print("ERROR: Please use --mode=<name>, see --help.")
#FIXME
#print >> sys.stderr, "ERROR: Please use --mode=<name>, see --help."
sys.exit(1) sys.exit(1)
if args.output: if args.output: