diff --git a/CHANGES.txt b/CHANGES.txt index 30387a6..5e62c1c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,14 @@ +Oct 29, 2013 - v0.5.9 Fixed bad library load on linux as a result of 0.5.8 + +Oct 29, 2013 - v0.5.8 Fixed unnecessary warnings when default locations for + openjpeg libraries on mac do not specify the actual library. + +Oct 28, 2013 - v0.5.7 Fixed bad import error message when libopenjpeg library + not installed on mac. + +Oct 13, 2013 - v0.5.6 Fixed handling of non-ascii chars in XML boxes. Fixed + some docstring errors in jp2box module. + Oct 03, 2013 - v0.5.5 Fixed pip install error introduced in 0.5.0. Sep 24, 2013 - v0.5.4 Fixed test error restricted to v2.0. diff --git a/docs/source/conf.py b/docs/source/conf.py index f847e68..b14af27 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -78,7 +78,7 @@ copyright = u'2013, John Evans' # The short X.Y version. version = '0.5' # The full version, including alpha/beta/rc tags. -release = '0.5.5' +release = '0.5.9' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/glymur/lib/config.py b/glymur/lib/config.py index e3a5c1d..fdb5a92 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -43,37 +43,81 @@ def glymurrc_fname(): return None -def load_openjpeg(libopenjpeg_path): +def load_openjpeg(path): """Load the openjpeg library, falling back on defaults if necessary. - """ - if libopenjpeg_path is None: - # Let ctypes try to find it. - libopenjpeg_path = find_library('openjpeg') - # If we could not find it, then look in some likely locations. - if libopenjpeg_path is None: + Parameters + ---------- + path : str + Path to openjpeg 1.5 library as specified by configuration file. Will + be None if no configuration file specified. + """ + if path is None: + # Let ctypes try to find it. + path = find_library('openjpeg') + + # If we could not find it, then look in some likely locations on mac + # and win. + if path is None: + # Could not find a library via ctypes if platform.system() == 'Darwin': + # MacPorts path = '/opt/local/lib/libopenjpeg.dylib' - if os.path.exists(path): - libopenjpeg_path = path elif os.name == 'nt': path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', 'bin', 'openjpeg.dll') - if os.path.exists(path): - libopenjpeg_path = path - else: - # No sense trying further on Linux + + if path is not None and not os.path.exists(path): + # the mac/win default location does not exist. return None + return load_library_handle(path) + + +def load_openjp2(path): + """Load the openjp2 library, falling back on defaults if necessary. + """ + if path is None: + # No help from the config file, try to find it via ctypes. + path = find_library('openjp2') + + if path is None: + # Could not find a library via ctypes + if platform.system() == 'Darwin': + # MacPorts + path = '/opt/local/lib/libopenjp2.dylib' + elif os.name == 'nt': + path = os.path.join('C:\\', 'Program files', 'OpenJPEG 2.0', + 'bin', 'openjp2.dll') + + if path is not None and not os.path.exists(path): + # the mac/win default location does not exist. + return None + + return load_library_handle(path) + + +def load_library_handle(path): + """Load the library, return the ctypes handle.""" + + if path is None: + # Either could not find a library via ctypes or user-configuration-file, + # or we could not find it in any of the default locations. + # This is probably a very old linux. + return None + try: if os.name == "nt": - openjpeg_lib = ctypes.windll.LoadLibrary(libopenjpeg_path) + opj_lib = ctypes.windll.LoadLibrary(path) else: - openjpeg_lib = ctypes.CDLL(libopenjpeg_path) - except OSError: - openjpeg_lib = None + opj_lib = ctypes.CDLL(path) + except (TypeError, OSError): + msg = '"Library {0}" could not be loaded. Operating in degraded mode.' + msg = msg.format(path) + warnings.warn(msg, UserWarning) + opj_lib = None - return openjpeg_lib + return opj_lib def read_config_file(): @@ -98,41 +142,6 @@ def read_config_file(): return lib -def load_openjp2(libopenjp2_path): - """Load the openjp2 library, falling back on defaults if necessary. - """ - if libopenjp2_path is None: - # No help from the config file, try to find it ourselves. - libopenjp2_path = find_library('openjp2') - - if libopenjp2_path is None: - if platform.system() == 'Darwin': - path = '/opt/local/lib/libopenjp2.dylib' - if os.path.exists(path): - libopenjp2_path = path - elif os.name == 'nt': - path = os.path.join('C:\\', 'Program files', 'OpenJPEG 2.0', - 'bin', 'openjp2.dll') - if os.path.exists(path): - libopenjp2_path = path - - if libopenjp2_path is None: - return None - - try: - if os.name == "nt": - openjp2_lib = ctypes.windll.LoadLibrary(libopenjp2_path) - else: - openjp2_lib = ctypes.CDLL(libopenjp2_path) - except (TypeError, OSError): - msg = '"Library {0}" could not be loaded. Operating in degraded mode.' - msg = msg.format(libopenjp2_path) - warnings.warn(msg, UserWarning) - openjp2_lib = None - - return openjp2_lib - - def glymur_config(): """Try to ascertain locations of openjp2, openjpeg libraries. """ diff --git a/glymur/version.py b/glymur/version.py index 192859f..6116920 100644 --- a/glymur/version.py +++ b/glymur/version.py @@ -15,7 +15,7 @@ from .lib import openjp2 as opj2 # Do not change the format of this next line! Doing so risks breaking # setup.py -version = "0.5.5" +version = "0.5.9" _sv = LooseVersion(version) version_tuple = _sv.version