mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-12-20 00:24:48 +03:00
Re-arrange python generator to make it clear what's auto-generated
* README: New file describing what each file is used for * livvirt-override.c, libvirt-override.py, libvirt-override-api.xml, libvirt-override-virConnect.py: Manually written code overriding the generator * typewrappers.c, typewrappers.h: Data type wrappers * generator.py: Automatically pre-prend contents of libvirt-override.py to generated libvirt.py. Output into libvirt.py directly instead of libvirtclass.py. Don't generate libvirtclass.txt at all. Write C files into libvirt.c/.h directly * Makefile.am: Remove rule for creating libvirt.py from libvirt-override.py and libvirtclass.py, since generator.py does it directly
This commit is contained in:
@@ -287,8 +287,8 @@ foreign_encoding_args = (
|
||||
|
||||
#######################################################################
|
||||
#
|
||||
# This part writes the C <-> Python stubs libvirt2-py.[ch] and
|
||||
# the table libxml2-export.c to add when registrering the Python module
|
||||
# This part writes the C <-> Python stubs libvirt.[ch] and
|
||||
# the table libvirt-export.c to add when registrering the Python module
|
||||
#
|
||||
#######################################################################
|
||||
|
||||
@@ -555,7 +555,7 @@ def buildStubs():
|
||||
|
||||
py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject")
|
||||
try:
|
||||
f = open(os.path.join(srcPref,"libvirt-python-api.xml"))
|
||||
f = open(os.path.join(srcPref,"libvirt-override-api.xml"))
|
||||
data = f.read()
|
||||
(parser, target) = getparser()
|
||||
parser.feed(data)
|
||||
@@ -564,22 +564,22 @@ def buildStubs():
|
||||
print file, ":", msg
|
||||
|
||||
|
||||
print "Found %d functions in libvirt-python-api.xml" % (
|
||||
print "Found %d functions in libvirt-override-api.xml" % (
|
||||
len(functions.keys()) - n)
|
||||
nb_wrap = 0
|
||||
failed = 0
|
||||
skipped = 0
|
||||
|
||||
include = open("libvirt-py.h", "w")
|
||||
include = open("libvirt.h", "w")
|
||||
include.write("/* Generated */\n\n")
|
||||
export = open("libvirt-export.c", "w")
|
||||
export.write("/* Generated */\n\n")
|
||||
wrapper = open("libvirt-py.c", "w")
|
||||
wrapper = open("libvirt.c", "w")
|
||||
wrapper.write("/* Generated */\n\n")
|
||||
wrapper.write("#include <Python.h>\n")
|
||||
wrapper.write("#include <libvirt/libvirt.h>\n")
|
||||
wrapper.write("#include \"libvirt_wrap.h\"\n")
|
||||
wrapper.write("#include \"libvirt-py.h\"\n\n")
|
||||
wrapper.write("#include \"typewrappers.h\"\n")
|
||||
wrapper.write("#include \"libvirt.h\"\n\n")
|
||||
for function in functions.keys():
|
||||
ret = print_function_wrapper(function, wrapper, export, include)
|
||||
if ret < 0:
|
||||
@@ -931,12 +931,30 @@ def buildWrappers():
|
||||
info = (0, func, name, ret, args, file)
|
||||
function_classes['None'].append(info)
|
||||
|
||||
classes = open("libvirtclass.py", "w")
|
||||
classes = open("libvirt.py", "w")
|
||||
|
||||
txt = open("libvirtclass.txt", "w")
|
||||
txt.write(" Generated Classes for libvir-python\n\n")
|
||||
extra = open(os.path.join(srcPref,"libvirt-override.py"), "r")
|
||||
classes.write("#!/usr/bin/python -i\n")
|
||||
classes.write("#\n")
|
||||
classes.write("# WARNING WARNING WARNING WARNING\n")
|
||||
classes.write("#\n")
|
||||
classes.write("# This file is automatically written by generator.py. Any changes\n")
|
||||
classes.write("# made here will be lost.\n")
|
||||
classes.write("#\n")
|
||||
classes.write("# To change the manually written methods edit libvirt-override.py\n")
|
||||
classes.write("# To change the automatically written methods edit generator.py\n")
|
||||
classes.write("#\n")
|
||||
classes.write("# WARNING WARNING WARNING WARNING\n")
|
||||
classes.write("#\n")
|
||||
classes.writelines(extra.readlines())
|
||||
classes.write("#\n")
|
||||
classes.write("# WARNING WARNING WARNING WARNING\n")
|
||||
classes.write("#\n")
|
||||
classes.write("# Automatically written part of python bindings for libvirt\n")
|
||||
classes.write("#\n")
|
||||
classes.write("# WARNING WARNING WARNING WARNING\n")
|
||||
extra.close()
|
||||
|
||||
txt.write("#\n# Global functions of the module\n#\n\n")
|
||||
if function_classes.has_key("None"):
|
||||
flist = function_classes["None"]
|
||||
flist.sort(functionCompare)
|
||||
@@ -945,10 +963,8 @@ def buildWrappers():
|
||||
(index, func, name, ret, args, file) = info
|
||||
if file != oldfile:
|
||||
classes.write("#\n# Functions from module %s\n#\n\n" % file)
|
||||
txt.write("\n# functions from module %s\n" % file)
|
||||
oldfile = file
|
||||
classes.write("def %s(" % func)
|
||||
txt.write("%s()\n" % func);
|
||||
n = 0
|
||||
for arg in args:
|
||||
if n != 0:
|
||||
@@ -1025,14 +1041,11 @@ def buildWrappers():
|
||||
|
||||
classes.write("\n");
|
||||
|
||||
txt.write("\n\n#\n# Set of classes of the module\n#\n\n")
|
||||
for classname in classes_list:
|
||||
if classname == "None":
|
||||
pass
|
||||
else:
|
||||
if classes_ancestor.has_key(classname):
|
||||
txt.write("\n\nClass %s(%s)\n" % (classname,
|
||||
classes_ancestor[classname]))
|
||||
classes.write("class %s(%s):\n" % (classname,
|
||||
classes_ancestor[classname]))
|
||||
classes.write(" def __init__(self, _obj=None):\n")
|
||||
@@ -1044,7 +1057,6 @@ def buildWrappers():
|
||||
classes.write(" %s.__init__(self, _obj=_obj)\n\n" % (
|
||||
classes_ancestor[classname]))
|
||||
else:
|
||||
txt.write("Class %s()\n" % (classname))
|
||||
classes.write("class %s:\n" % (classname))
|
||||
if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", "virStorageVol", "virNodeDevice", "virSecret" ]:
|
||||
classes.write(" def __init__(self, conn, _obj=None):\n")
|
||||
@@ -1084,16 +1096,13 @@ def buildWrappers():
|
||||
if file != oldfile:
|
||||
if file == "python_accessor":
|
||||
classes.write(" # accessors for %s\n" % (classname))
|
||||
txt.write(" # accessors\n")
|
||||
else:
|
||||
classes.write(" #\n")
|
||||
classes.write(" # %s functions from module %s\n" % (
|
||||
classname, file))
|
||||
txt.write("\n # functions from module %s\n" % file)
|
||||
classes.write(" #\n\n")
|
||||
oldfile = file
|
||||
classes.write(" def %s(self" % func)
|
||||
txt.write(" %s()\n" % func);
|
||||
n = 0
|
||||
for arg in args:
|
||||
if n != index:
|
||||
@@ -1316,7 +1325,7 @@ def buildWrappers():
|
||||
classes.write("\n");
|
||||
# Append "<classname>.py" to class def, iff it exists
|
||||
try:
|
||||
extra = open(classname + ".py", "r")
|
||||
extra = open(os.path.join(srcPref,"libvirt-override-" + classname + ".py"), "r")
|
||||
classes.write (" #\n")
|
||||
classes.write (" # %s methods from %s.py (hand coded)\n" % (classname,classname))
|
||||
classes.write (" #\n")
|
||||
@@ -1336,15 +1345,6 @@ def buildWrappers():
|
||||
classes.write("%s = %s\n" % (name,value))
|
||||
classes.write("\n");
|
||||
|
||||
if len(functions_skipped) != 0:
|
||||
txt.write("\nFunctions skipped:\n")
|
||||
for function in functions_skipped:
|
||||
txt.write(" %s\n" % function)
|
||||
if len(functions_failed) != 0:
|
||||
txt.write("\nFunctions failed:\n")
|
||||
for function in functions_failed:
|
||||
txt.write(" %s\n" % function)
|
||||
txt.close()
|
||||
classes.close()
|
||||
|
||||
if buildStubs() < 0:
|
||||
|
||||
Reference in New Issue
Block a user