From 4e2efcd952855f16e0c12d9c1b53838d974d1ce7 Mon Sep 17 00:00:00 2001 From: Tushar Gohad Date: Fri, 31 Jul 2015 07:19:15 +0000 Subject: Fix liberasurecode install exit code, redo lib search --- setup.py | 122 ++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 49 deletions(-) diff --git a/setup.py b/setup.py index 37881b5..3aac98e 100644 --- a/setup.py +++ b/setup.py @@ -28,6 +28,7 @@ import os import platform import sys +from ctypes import * from distutils.command.build import build as _build from distutils.command.clean import clean as _clean from distutils.sysconfig import EXEC_PREFIX as _exec_prefix @@ -48,53 +49,82 @@ platform_str = platform.platform() platform_arch = platform.architecture() default_python_incdir = get_python_inc() default_python_libdir = get_python_lib() - default_library_paths = [default_python_libdir] -if platform_arch[0].startswith('64') and os.path.exists('/lib64'): - default_library_paths.append('/lib64') -else: - default_library_paths.append('/lib') -if platform_arch[0].startswith('64') and os.path.exists('/usr/lib64'): - default_library_paths.append('/usr/lib64') -else: - default_library_paths.append('/usr/lib') -if platform_arch[0].startswith('64') and os.path.exists('/usr/local/lib64'): - default_library_paths.append('/usr/local/lib64') -else: - default_library_paths.append('/usr/local/lib') -if platform_arch[0].startswith('64') and os.path.exists('%s/lib64' - % _exec_prefix): - default_library_paths.append('%s/lib64' % _exec_prefix) -else: - default_library_paths.append('%s/lib' % _exec_prefix) - - -# utility routine + +# utility routines +def _find_library(name): + target_lib = None + if os.name == 'posix' and sys.platform.startswith('linux'): + target_lib = ctypes.util._findLib_gcc(name) + else: + target_lib = find_library(name) + if target_lib: + target_lib = os.path.abspath(target_lib) + if os.path.islink(target_lib): + p = os.readlink(target_lib) + if os.path.isabs(p): + target_lib = p + else: + target_lib = os.path.join(os.path.dirname(target_lib), p) + # return absolute path to the library if found + return target_lib + + +def _build_default_lib_search_path(): + arch64 = platform_arch[0].startswith('64') + for prefix in ('/', '/usr', '/usr/local', _exec_prefix): + libdir = os.path.join(prefix, 'lib') + libdir64 = os.path.join(prefix, 'lib64') + if arch64 and os.path.exists(libdir64): + default_library_paths.append(libdir64) + else: + default_library_paths.append(libdir) + return default_library_paths + + def _read_file_as_str(name): with open(name, "rt") as f: s = f.readline().strip() return s +def _liberasurecode_install_error(): + print("**********************************************") + print("** ") + print("*** Error: " + library + " build failed! ") + print("*** Please install " + library + " manually. ") + print("*** project url: %s" % library_url) + print("** ") + print("**********************************************") + + class build(_build): def check_liberasure(self): - missing = True - library_basename = "liberasurecode" + library_basename = "erasurecode" library_version = "1.0.8" - if platform_str.find("Darwin") > -1: - liberasure_file = \ - library_basename + "." + library_version + ".dylib" + notfound = True + found_path = _find_library(library_basename) + if found_path: + if found_path.endswith(library_version) or \ + found_path.find(library_version + ".") > -1: + # call 1.0.8 the only compatible version for now + notfound = False else: - liberasure_file = \ - library_basename + ".so." + library_version - for dir in (default_library_paths): - liberasure_file_path = dir + os.sep + liberasure_file - if (os.path.isfile(liberasure_file_path)): - missing = False - break - if missing: + # look harder + if platform_str.find("Darwin") > -1: + liberasure_file = \ + "lib" + library_basename + "." + library_version + ".dylib" + else: + liberasure_file = \ + "lib" + library_basename + ".so." + library_version + for dir in (default_library_paths): + liberasure_file_path = dir + os.sep + liberasure_file + if (os.path.isfile(liberasure_file_path)): + notfound = False + break + if notfound: print("***************************************************") print("** ") print("** Can not locate %s" % (liberasure_file)) @@ -121,32 +151,26 @@ class build(_build): curdir = os.getcwd() os.chdir(locallibsrcdir) configure_cmd = ("./configure --prefix=/usr") + if platform_arch[0].startswith('64'): + if os.path.exists('/usr/lib64'): + configure_cmd = configure_cmd + " --libdir=/usr/lib64" print(configure_cmd) retval = os.system(configure_cmd) if retval != 0: - print("**********************************************") - print("** ") - print("*** Error: " + library + " build failed! ") - print("*** Please install " + library + " manually. ") - print("*** project url: %s" % library_url) - print("** ") - print("**********************************************") + _liberasurecode_install_error() os.chdir(curdir) sys.exit(retval) make_cmd = ("make && make install") retval = os.system(make_cmd) if retval != 0: - print("**********************************************") - print("** ") - print("*** Error: " + library + " install failed! ") - print("*** Please install " + library + " manually. ") - print("*** project url: %s" % library_url) - print("** ") - print("**********************************************") + _liberasurecode_install_error() os.chdir(curdir) sys.exit(retval) os.chdir(curdir) - sys.exit(1) + else: + _liberasurecode_install_error() + os.chdir(curdir) + sys.exit(-1) def run(self): self.check_liberasure() -- cgit v1.2.1 From 553515d0c09392efdec86d29784d2e1e4f9ef67f Mon Sep 17 00:00:00 2001 From: Kevin Greenan Date: Fri, 31 Jul 2015 11:46:49 -0700 Subject: A few fixes to the new setup.py library finder/installer. --- setup.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/setup.py b/setup.py index 3aac98e..6c9ff44 100644 --- a/setup.py +++ b/setup.py @@ -29,6 +29,7 @@ import platform import sys from ctypes import * +from ctypes.util import * from distutils.command.build import build as _build from distutils.command.clean import clean as _clean from distutils.sysconfig import EXEC_PREFIX as _exec_prefix @@ -89,7 +90,7 @@ def _read_file_as_str(name): return s -def _liberasurecode_install_error(): +def _liberasurecode_install_error(library, library_url): print("**********************************************") print("** ") print("*** Error: " + library + " build failed! ") @@ -102,28 +103,33 @@ def _liberasurecode_install_error(): class build(_build): def check_liberasure(self): - library_basename = "erasurecode" + library_basename = "liberasurecode" library_version = "1.0.8" notfound = True found_path = _find_library(library_basename) + + if platform_str.find("Darwin") > -1: + liberasure_file = \ + library_basename + "." + library_version + ".dylib" + else: + liberasure_file = \ + library_basename + ".so." + library_version + if found_path: if found_path.endswith(library_version) or \ found_path.find(library_version + ".") > -1: # call 1.0.8 the only compatible version for now notfound = False - else: + + if found_path and notfound: # look harder - if platform_str.find("Darwin") > -1: - liberasure_file = \ - "lib" + library_basename + "." + library_version + ".dylib" - else: - liberasure_file = \ - "lib" + library_basename + ".so." + library_version + _build_default_lib_search_path() for dir in (default_library_paths): liberasure_file_path = dir + os.sep + liberasure_file if (os.path.isfile(liberasure_file_path)): notfound = False break + if notfound: print("***************************************************") print("** ") @@ -157,19 +163,18 @@ class build(_build): print(configure_cmd) retval = os.system(configure_cmd) if retval != 0: - _liberasurecode_install_error() + _liberasurecode_install_error(library, library_url) os.chdir(curdir) sys.exit(retval) make_cmd = ("make && make install") retval = os.system(make_cmd) if retval != 0: - _liberasurecode_install_error() + _liberasurecode_install_error(library, library_url) os.chdir(curdir) sys.exit(retval) os.chdir(curdir) else: - _liberasurecode_install_error() - os.chdir(curdir) + _liberasurecode_install_error(library, library_url) sys.exit(-1) def run(self): -- cgit v1.2.1 From c4e03adddee5d38b953ffcc38b22b5a75b6e8537 Mon Sep 17 00:00:00 2001 From: Kevin Greenan Date: Fri, 31 Jul 2015 11:51:09 -0700 Subject: Another minor fix to setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6c9ff44..5f3695b 100644 --- a/setup.py +++ b/setup.py @@ -57,7 +57,7 @@ default_library_paths = [default_python_libdir] def _find_library(name): target_lib = None if os.name == 'posix' and sys.platform.startswith('linux'): - target_lib = ctypes.util._findLib_gcc(name) + target_lib = _findLib_gcc(name) else: target_lib = find_library(name) if target_lib: -- cgit v1.2.1