Include upstream patch to add .c_pointer() method to classes.
This commit is contained in:
parent
dd6d2a4068
commit
f64654b65c
94
0001-Add-c_pointer-method-to-classes.patch
Normal file
94
0001-Add-c_pointer-method-to-classes.patch
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
From e3da7ade421a1fbb5f1789dea9903a3ae6243ced Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
|
Date: Thu, 11 Dec 2014 11:16:12 +0000
|
||||||
|
Subject: [PATCH] Add c_pointer method to classes.
|
||||||
|
|
||||||
|
This returns the raw C pointer to the underlying object, eg:
|
||||||
|
|
||||||
|
conn = libvirt.open(None)
|
||||||
|
print "0x%x" % conn.c_pointer() # returns virConnectPtr of the connection
|
||||||
|
dom = conn.lookupByName("test")
|
||||||
|
print "0x%x" % dom.c_pointer() # returns virDomainPtr of the domain
|
||||||
|
|
||||||
|
The reason behind this is to allow us to transparently pass Python dom
|
||||||
|
objects through the libguestfs Python API.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1075164
|
||||||
|
---
|
||||||
|
generator.py | 32 ++++++++++++++++++++++++++++++++
|
||||||
|
sanitytest.py | 2 ++
|
||||||
|
2 files changed, 34 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/generator.py b/generator.py
|
||||||
|
index 20df54f..cf044c9 100755
|
||||||
|
--- a/generator.py
|
||||||
|
+++ b/generator.py
|
||||||
|
@@ -821,6 +821,27 @@ def print_function_wrapper(module, name, output, export, include):
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
+def print_c_pointer(classname, output, export, include):
|
||||||
|
+ output.write("PyObject *\n")
|
||||||
|
+ output.write("libvirt_%s_pointer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)\n" % classname)
|
||||||
|
+ output.write("{\n")
|
||||||
|
+ output.write(" %sPtr ptr;\n" % classname)
|
||||||
|
+ output.write(" PyObject *pyptr;\n")
|
||||||
|
+ output.write(" PyObject *pylong;\n")
|
||||||
|
+ output.write("\n")
|
||||||
|
+ output.write(" if (!PyArg_ParseTuple(args, (char *) \"O\", &pyptr))\n")
|
||||||
|
+ output.write(" return NULL;\n")
|
||||||
|
+ output.write(" ptr = (%sPtr) Py%s_Get(pyptr);\n" % (classname, classname))
|
||||||
|
+ output.write(" pylong = PyLong_FromVoidPtr(ptr);\n")
|
||||||
|
+ output.write(" return pylong;\n")
|
||||||
|
+ output.write("}\n")
|
||||||
|
+ output.write("\n")
|
||||||
|
+
|
||||||
|
+ include.write("PyObject *libvirt_%s_pointer(PyObject *self, PyObject *args);\n" % classname)
|
||||||
|
+
|
||||||
|
+ export.write(" { (char *)\"%s_pointer\", libvirt_%s_pointer, METH_VARARGS, NULL },\n" %
|
||||||
|
+ (classname, classname))
|
||||||
|
+
|
||||||
|
def buildStubs(module, api_xml):
|
||||||
|
global py_types
|
||||||
|
global py_return_types
|
||||||
|
@@ -917,6 +938,12 @@ def buildStubs(module, api_xml):
|
||||||
|
del funcs[function]
|
||||||
|
if ret == 1:
|
||||||
|
nb_wrap = nb_wrap + 1
|
||||||
|
+
|
||||||
|
+ if module == "libvirt":
|
||||||
|
+ # Write C pointer conversion functions.
|
||||||
|
+ for classname in primary_classes:
|
||||||
|
+ print_c_pointer(classname, wrapper, export, include)
|
||||||
|
+
|
||||||
|
include.close()
|
||||||
|
export.close()
|
||||||
|
wrapper.close()
|
||||||
|
@@ -1496,6 +1523,11 @@ def buildWrappers(module):
|
||||||
|
classes.write(" def domain(self):\n")
|
||||||
|
classes.write(" return self._dom\n\n")
|
||||||
|
|
||||||
|
+ classes.write(" def c_pointer(self):\n")
|
||||||
|
+ classes.write(" \"\"\"Get C pointer to underlying object\"\"\"\n")
|
||||||
|
+ classes.write(" return libvirtmod.%s_pointer(self._o)\n\n" %
|
||||||
|
+ classname)
|
||||||
|
+
|
||||||
|
flist = function_classes[classname]
|
||||||
|
flist.sort(key=functionSortKey)
|
||||||
|
oldfile = ""
|
||||||
|
diff --git a/sanitytest.py b/sanitytest.py
|
||||||
|
index f5337fc..9907f3d 100644
|
||||||
|
--- a/sanitytest.py
|
||||||
|
+++ b/sanitytest.py
|
||||||
|
@@ -109,6 +109,8 @@ for klassname in gottypes:
|
||||||
|
for name in dir(klassobj):
|
||||||
|
if name[0] == '_':
|
||||||
|
continue
|
||||||
|
+ if name == 'c_pointer':
|
||||||
|
+ continue
|
||||||
|
thing = getattr(klassobj, name)
|
||||||
|
if callable(thing):
|
||||||
|
gotfunctions[klassname].append(name)
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
@ -7,8 +7,10 @@
|
|||||||
Summary: The libvirt virtualization API python2 binding
|
Summary: The libvirt virtualization API python2 binding
|
||||||
Name: libvirt-python
|
Name: libvirt-python
|
||||||
Version: 1.2.10
|
Version: 1.2.10
|
||||||
Release: 1%{?dist}%{?extra_release}
|
Release: 2%{?dist}%{?extra_release}
|
||||||
Source0: http://libvirt.org/sources/python/%{name}-%{version}.tar.gz
|
Source0: http://libvirt.org/sources/python/%{name}-%{version}.tar.gz
|
||||||
|
# Upstream patch to add .c_pointer() method to classes.
|
||||||
|
Patch1: 0001-Add-c_pointer-method-to-classes.patch
|
||||||
Url: http://libvirt.org
|
Url: http://libvirt.org
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
@ -49,6 +51,8 @@ of recent versions of Linux (and other OSes).
|
|||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
|
%patch1 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build
|
CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build
|
||||||
%if %{with_python3}
|
%if %{with_python3}
|
||||||
@ -90,6 +94,9 @@ rm -f %{buildroot}%{_libdir}/python*/site-packages/*egg-info
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Dec 12 2014 Richard W.M. Jones <rjones@redhat.com> - 1.2.10-2
|
||||||
|
- Include upstream patch to add .c_pointer() method to classes.
|
||||||
|
|
||||||
* Sat Nov 15 2014 Cole Robinson <crobinso@redhat.com> - 1.2.10-1
|
* Sat Nov 15 2014 Cole Robinson <crobinso@redhat.com> - 1.2.10-1
|
||||||
- Update to v1.2.10
|
- Update to v1.2.10
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user