diff options
author | Niels de Vos <ndevos@redhat.com> | 2013-09-30 09:05:14 +0200 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2013-12-24 04:12:23 -0800 |
commit | b2ee85b3e452678c330c25bf32c522090bb320fc (patch) | |
tree | edcccb745bc4b10127eb29e1e9395a2c3cfac651 /api | |
parent | 828a6eea202e9195f323a7c4b4656c73ecb34256 (diff) |
gfapi.py: support dynamic loading of versioned librariesv3.4.2qa5
Currently gfapi.py only loads libraries by filename ending in ".so". On
an installed system without development packages, the <lib>.so filenames
are not available. ctypes.util.find_library() can be used to detect the
files dynamically.
In addition to this, also fixing some minor indention errors and package
the library into the Python site-packages path. Python applications and
libraries can now access libgfapi through 'from glusterfs import gfapi'.
Change and review in the master branch:
> Change-Id: I71e38dabd3ade5dcf24813bf2fc25cda91b571c6
> Signed-off-by: Niels de Vos <ndevos@redhat.com>
> Reviewed-on: http://review.gluster.org/5835
> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
BUG: 1005146
Change-Id: Id7665fe5140111be7bf2038454fb775c70b15993
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: http://review.gluster.org/6581
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'api')
-rw-r--r-- | api/Makefile.am | 2 | ||||
-rw-r--r-- | api/examples/Makefile.am | 6 | ||||
-rwxr-xr-x | api/examples/gfapi.py | 8 | ||||
-rw-r--r-- | api/examples/setup.py.in | 29 |
4 files changed, 39 insertions, 6 deletions
diff --git a/api/Makefile.am b/api/Makefile.am index af437a64d6d..f0ad1ee971c 100644 --- a/api/Makefile.am +++ b/api/Makefile.am @@ -1 +1 @@ -SUBDIRS = src +SUBDIRS = src examples diff --git a/api/examples/Makefile.am b/api/examples/Makefile.am index 6048bb1c8b7..cfb0d3dff84 100644 --- a/api/examples/Makefile.am +++ b/api/examples/Makefile.am @@ -1,4 +1,6 @@ -noinst_PROGRAMS = glfsxmp +EXTRA_PROGRAMS = glfsxmp glfsxmp_SOURCES = glfsxmp.c glfsxmp_CFLAGS = $(GLFS_CFLAGS) -Wall -glfsxmp_LDADD = $(GLFS_LIBS)
\ No newline at end of file +glfsxmp_LDADD = $(GLFS_LIBS) + +EXTRA_DIST = gfapi.py diff --git a/api/examples/gfapi.py b/api/examples/gfapi.py index 7d7a5bab12d..f89996d9a10 100755 --- a/api/examples/gfapi.py +++ b/api/examples/gfapi.py @@ -1,6 +1,7 @@ #!/usr/bin/python from ctypes import * +from ctypes.util import find_library import os import sys import time @@ -8,9 +9,9 @@ import types # Looks like ctypes is having trouble with dependencies, so just force them to # load with RTLD_GLOBAL until I figure that out. -glfs = CDLL("libglusterfs.so",RTLD_GLOBAL) -xdr = CDLL("libgfxdr.so",RTLD_GLOBAL) -api = CDLL("libgfapi.so",RTLD_GLOBAL) +glfs = CDLL(find_library("glusterfs"),RTLD_GLOBAL) +xdr = CDLL(find_library("gfxdr"),RTLD_GLOBAL) +api = CDLL(find_library("gfapi"),RTLD_GLOBAL) # Wow, the Linux kernel folks really play nasty games with this structure. If # you look at the man page for stat(2) and then at this definition you'll note @@ -98,6 +99,7 @@ class File(object): def write (self, data, flags=0): return api.glfs_write(self.fd,data,len(data),flags) + class Dir(object): def __init__ (self, fd): diff --git a/api/examples/setup.py.in b/api/examples/setup.py.in new file mode 100644 index 00000000000..44b73809486 --- /dev/null +++ b/api/examples/setup.py.in @@ -0,0 +1,29 @@ +from distutils.core import setup + +# generate a __init__.py for the package namespace +fo = open('__init__.py', 'w') +fo.write('__version__ = "@PACKAGE_VERSION@"\n') +fo.close() + +DESC = """GlusterFS is a clustered file-system capable of scaling to +several petabytes. It aggregates various storage bricks over Infiniband +RDMA or TCP/IP interconnect into one large parallel network file system. +GlusterFS is one of the most sophisticated file systems in terms of +features and extensibility. It borrows a powerful concept called +Translators from GNU Hurd kernel. Much of the code in GlusterFS is in +user space and easily manageable. + +This package contains the Python interface to the libgfapi library.""" + +setup( + name='glusterfs-api', + version='@PACKAGE_VERSION@', + description='Python client library for the GlusterFS libgfapi', + long_description=DESC, + author='Gluster Community', + author_email='gluster-devel@nongnu.org', + license='LGPLv3', + url='http://gluster.org/', + package_dir={'gluster':''}, + packages=['gluster'] +) |