From 1943dcd4c9ad652013592653b087350560b7a778 Mon Sep 17 00:00:00 2001 From: Prashanth Pai Date: Mon, 4 May 2015 15:23:06 +0530 Subject: Explicitly set .so file if find_library() fails Change-Id: I8678148961ee192d96e887b6ca7f4b8e4ba89507 Signed-off-by: Prashanth Pai --- gluster/api.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'gluster/api.py') diff --git a/gluster/api.py b/gluster/api.py index 3309471..1b5d320 100755 --- a/gluster/api.py +++ b/gluster/api.py @@ -13,9 +13,26 @@ import ctypes from ctypes.util import find_library +# LD_LIBRARY_PATH is not looked up by ctypes.util.find_library() +so_file_name = find_library("gfapi") + +if so_file_name is None: + for name in ["libgfapi.so.0", "libgfapi.so"]: + try: + ctypes.CDLL(name, ctypes.RTLD_GLOBAL, use_errno=True) + except OSError: + pass + else: + so_file_name = name + break + if so_file_name is None: + # The .so file cannot be found (or loaded) + # May be you need to run ldconfig command + raise Exception("libgfapi.so not found") + # Looks like ctypes is having trouble with dependencies, so just force them to # load with RTLD_GLOBAL until I figure that out. -client = ctypes.CDLL(find_library("gfapi"), ctypes.RTLD_GLOBAL, use_errno=True) +client = ctypes.CDLL(so_file_name, ctypes.RTLD_GLOBAL, use_errno=True) # The above statement "may" fail with OSError on some systems if libgfapi.so # is located in /usr/local/lib/. This happens when glusterfs is installed from # source. Refer to: http://bugs.python.org/issue18502 -- cgit