From bff3cc9e28689896d6f42be6d068d6c1e147e13b Mon Sep 17 00:00:00 2001 From: Dan Farmer Date: Thu, 19 May 2011 22:43:33 -0700 Subject: [PATCH 1/4] Modified load_library for windll --- scikits/image/io/_plugins/freeimage_plugin.py | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/scikits/image/io/_plugins/freeimage_plugin.py b/scikits/image/io/_plugins/freeimage_plugin.py index d165a855..b3acdee2 100644 --- a/scikits/image/io/_plugins/freeimage_plugin.py +++ b/scikits/image/io/_plugins/freeimage_plugin.py @@ -2,9 +2,49 @@ import ctypes import numpy import sys import os - +import os.path from numpy.compat import asbytes +def _load_library(libname, loader_path): + """ A small fork of numpy.ctypeslib.load_library + to support windll. + """ + if ctypes.__version__ < '1.0.1': + import warnings + warnings.warn("All features of ctypes interface may not work " \ + "with ctypes < 1.0.1") + + ext = os.path.splitext(libname)[1] + if not ext: + # Try to load library with platform-specific name, otherwise + # default to libname.[so|pyd]. Sometimes, these files are built + # erroneously on non-linux platforms. + libname_ext = ['%s.so' % libname, '%s.pyd' % libname] + if sys.platform == 'win32': + libname_ext.insert(0, '%s.dll' % libname) + elif sys.platform == 'darwin': + libname_ext.insert(0, '%s.dylib' % libname) + else: + libname_ext = [libname] + + loader_path = os.path.abspath(loader_path) + if not os.path.isdir(loader_path): + libdir = os.path.dirname(loader_path) + else: + libdir = loader_path + + for ln in libname_ext: + try: + libpath = os.path.join(libdir, ln) + if sys.platform == 'win32': + return ctypes.windll[libpath] + else: + return ctypes.cdll[libpath] + except OSError, e: + pass + + raise e + lib_dirs = [os.path.dirname(__file__), '/lib', '/usr/lib', @@ -44,7 +84,7 @@ for d in lib_dirs: for libname in ('freeimage', 'FreeImage', 'libfreeimage', 'libFreeImage'): try: - _FI = numpy.ctypeslib.load_library(libname, d) + _FI = _load_library(libname, d) except OSError: pass else: From 59425666d0004c83d5975833c78d7f9e7da6e8fa Mon Sep 17 00:00:00 2001 From: Dan Farmer Date: Fri, 20 May 2011 15:54:00 -0700 Subject: [PATCH 2/4] Fix indentation error that broke linux support --- scikits/image/io/_plugins/freeimage_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scikits/image/io/_plugins/freeimage_plugin.py b/scikits/image/io/_plugins/freeimage_plugin.py index b3acdee2..3b668436 100644 --- a/scikits/image/io/_plugins/freeimage_plugin.py +++ b/scikits/image/io/_plugins/freeimage_plugin.py @@ -24,8 +24,8 @@ def _load_library(libname, loader_path): libname_ext.insert(0, '%s.dll' % libname) elif sys.platform == 'darwin': libname_ext.insert(0, '%s.dylib' % libname) - else: - libname_ext = [libname] + else: + libname_ext = [libname] loader_path = os.path.abspath(loader_path) if not os.path.isdir(loader_path): From c8533488b925eb6cf3dbfe4d93441ce4c41da970 Mon Sep 17 00:00:00 2001 From: Dan Farmer Date: Fri, 20 May 2011 16:04:05 -0700 Subject: [PATCH 3/4] Fix more indentation errors --- scikits/image/io/_plugins/freeimage_plugin.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scikits/image/io/_plugins/freeimage_plugin.py b/scikits/image/io/_plugins/freeimage_plugin.py index 3b668436..1e370ca5 100644 --- a/scikits/image/io/_plugins/freeimage_plugin.py +++ b/scikits/image/io/_plugins/freeimage_plugin.py @@ -27,15 +27,15 @@ def _load_library(libname, loader_path): else: libname_ext = [libname] - loader_path = os.path.abspath(loader_path) - if not os.path.isdir(loader_path): - libdir = os.path.dirname(loader_path) - else: - libdir = loader_path - + loader_path = os.path.abspath(loader_path) + if not os.path.isdir(loader_path): + libdir = os.path.dirname(loader_path) + else: + libdir = loader_path for ln in libname_ext: try: libpath = os.path.join(libdir, ln) + print("Trying to load ", libpath) if sys.platform == 'win32': return ctypes.windll[libpath] else: From 0f438564c9b5bcc75cff4eda50fe76ece299ca75 Mon Sep 17 00:00:00 2001 From: Dan Farmer Date: Fri, 20 May 2011 16:11:40 -0700 Subject: [PATCH 4/4] Remove debugging text --- scikits/image/io/_plugins/freeimage_plugin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scikits/image/io/_plugins/freeimage_plugin.py b/scikits/image/io/_plugins/freeimage_plugin.py index 1e370ca5..0126101e 100644 --- a/scikits/image/io/_plugins/freeimage_plugin.py +++ b/scikits/image/io/_plugins/freeimage_plugin.py @@ -35,7 +35,6 @@ def _load_library(libname, loader_path): for ln in libname_ext: try: libpath = os.path.join(libdir, ln) - print("Trying to load ", libpath) if sys.platform == 'win32': return ctypes.windll[libpath] else: