summary refs log tree commit diff
path: root/pkgs/development/python-modules/Wand/libraries.patch
blob: 15b19f5168bd5a8a9303d6530b85324fc71fe940 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
diff --git a/wand/api.py b/wand/api.py
index 2c18513..1a1b511 100644
--- a/wand/api.py
+++ b/wand/api.py
@@ -43,98 +43,6 @@ class c_magick_char_p(ctypes.c_char_p):
         """
         library.MagickRelinquishMemory(self)
 
-
-def library_paths():
-    """Iterates for library paths to try loading.  The result paths are not
-    guaranteed that they exist.
-
-    :returns: a pair of libwand and libmagick paths.  they can be the same.
-              path can be ``None`` as well
-    :rtype: :class:`tuple`
-
-    """
-    libwand = None
-    libmagick = None
-    versions = '', '-6', '-Q16', '-Q8', '-6.Q16'
-    options = '', 'HDRI', 'HDRI-2'
-    system = platform.system()
-    magick_home = os.environ.get('MAGICK_HOME')
-
-    if system == 'Windows':
-        # ImageMagick installers normally install coder and filter DLLs in
-        # subfolders, we need to add those folders to PATH, otherwise loading
-        # the DLL later will fail.
-        try:
-            with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
-                                r"SOFTWARE\ImageMagick\Current") as reg_key:
-                libPath = winreg.QueryValueEx(reg_key, "LibPath")
-                coderPath = winreg.QueryValueEx(reg_key, "CoderModulesPath")
-                filterPath = winreg.QueryValueEx(reg_key, "FilterModulesPath")
-                magick_home = libPath[0]
-                os.environ['PATH'] += (';' + libPath[0] + ";" +
-                                       coderPath[0] + ";" + filterPath[0])
-        except OSError:
-            # otherwise use MAGICK_HOME, and we assume the coder and
-            # filter DLLs are in the same directory
-            pass
-
-    def magick_path(path):
-        return os.path.join(magick_home, *path)
-    combinations = itertools.product(versions, options)
-    for suffix in (version + option for version, option in combinations):
-        # On Windows, the API is split between two libs. On other platforms,
-        # it's all contained in one.
-        if magick_home:
-            if system == 'Windows':
-                libwand = 'CORE_RL_wand_{0}.dll'.format(suffix),
-                libmagick = 'CORE_RL_magick_{0}.dll'.format(suffix),
-                yield magick_path(libwand), magick_path(libmagick)
-                libwand = 'libMagickWand{0}.dll'.format(suffix),
-                libmagick = 'libMagickCore{0}.dll'.format(suffix),
-                yield magick_path(libwand), magick_path(libmagick)
-            elif system == 'Darwin':
-                libwand = 'lib', 'libMagickWand{0}.dylib'.format(suffix),
-                yield magick_path(libwand), magick_path(libwand)
-            else:
-                libwand = 'lib', 'libMagickWand{0}.so'.format(suffix),
-                yield magick_path(libwand), magick_path(libwand)
-        if system == 'Windows':
-            libwand = ctypes.util.find_library('CORE_RL_wand_' + suffix)
-            libmagick = ctypes.util.find_library('CORE_RL_magick_' + suffix)
-            yield libwand, libmagick
-            libwand = ctypes.util.find_library('libMagickWand' + suffix)
-            libmagick = ctypes.util.find_library('libMagickCore' + suffix)
-            yield libwand, libmagick
-        else:
-            libwand = ctypes.util.find_library('MagickWand' + suffix)
-            yield libwand, libwand
-
-
-def load_library():
-    """Loads the MagickWand library.
-
-    :returns: the MagickWand library and the ImageMagick library
-    :rtype: :class:`ctypes.CDLL`
-
-    """
-    tried_paths = []
-    for libwand_path, libmagick_path in library_paths():
-        if libwand_path is None or libmagick_path is None:
-            continue
-        try:
-            tried_paths.append(libwand_path)
-            libwand = ctypes.CDLL(libwand_path)
-            if libwand_path == libmagick_path:
-                libmagick = libwand
-            else:
-                tried_paths.append(libmagick_path)
-                libmagick = ctypes.CDLL(libmagick_path)
-        except (IOError, OSError):
-            continue
-        return libwand, libmagick
-    raise IOError('cannot find library; tried paths: ' + repr(tried_paths))
-
-
 if not hasattr(ctypes, 'c_ssize_t'):
     if ctypes.sizeof(ctypes.c_uint) == ctypes.sizeof(ctypes.c_void_p):
         ctypes.c_ssize_t = ctypes.c_int
@@ -176,43 +84,14 @@ class AffineMatrix(ctypes.Structure):
 # Preserve the module itself even if it fails to import
 sys.modules['wand._api'] = sys.modules['wand.api']
 
-try:
-    libraries = load_library()
-except (OSError, IOError):
-    msg = 'http://docs.wand-py.org/en/latest/guide/install.html'
-    if sys.platform.startswith(('dragonfly', 'freebsd')):
-        msg = 'pkg install'
-    elif sys.platform == 'win32':
-        msg += '#install-imagemagick-on-windows'
-    elif sys.platform == 'darwin':
-        mac_pkgmgrs = {'brew': 'brew install freetype imagemagick',
-                       'port': 'port install imagemagick'}
-        for pkgmgr in mac_pkgmgrs:
-            with os.popen('which ' + pkgmgr) as f:
-                if f.read().strip():
-                    msg = mac_pkgmgrs[pkgmgr]
-                    break
-        else:
-            msg += '#install-imagemagick-on-mac'
-    else:
-        distname, _, __ = platform.linux_distribution()
-        distname = (distname or '').lower()
-        if distname in ('debian', 'ubuntu'):
-            msg = 'apt-get install libmagickwand-dev'
-        elif distname in ('fedora', 'centos', 'redhat'):
-            msg = 'yum install ImageMagick-devel'
-    raise ImportError('MagickWand shared library not found.\n'
-                      'You probably had not installed ImageMagick library.\n'
-                      'Try to install:\n  ' + msg)
-
 #: (:class:`ctypes.CDLL`) The MagickWand library.
-library = libraries[0]
+library = ctypes.CDLL("@magick_wand_library@")
 
 #: (:class:`ctypes.CDLL`) The ImageMagick library.  It is the same with
 #: :data:`library` on platforms other than Windows.
 #:
 #: .. versionadded:: 0.1.10
-libmagick = libraries[1]
+libmagick = ctypes.CDLL("@imagemagick_library@")
 
 try:
     library.MagickWandGenesis.argtypes = []