From b2ee85b3e452678c330c25bf32c522090bb320fc Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Mon, 30 Sep 2013 09:05:14 +0200 Subject: gfapi.py: support dynamic loading of versioned libraries Currently gfapi.py only loads libraries by filename ending in ".so". On an installed system without development packages, the .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 > Reviewed-on: http://review.gluster.org/5835 > Reviewed-by: Kaleb KEITHLEY BUG: 1005146 Change-Id: Id7665fe5140111be7bf2038454fb775c70b15993 Signed-off-by: Niels de Vos Reviewed-on: http://review.gluster.org/6581 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- api/examples/gfapi.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'api/examples/gfapi.py') diff --git a/api/examples/gfapi.py b/api/examples/gfapi.py index 7d7a5bab1..f89996d9a 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): -- cgit