Author: Donald Stufft <don...@stufft.io> Branch: Changeset: r1373:77da9e592d23 Date: 2013-10-06 16:34 -0400 http://bitbucket.org/cffi/cffi/changeset/77da9e592d23/
Log: Fixes #110 - Support different so suffixes diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py --- a/cffi/vengine_cpy.py +++ b/cffi/vengine_cpy.py @@ -15,7 +15,7 @@ def patch_extension_kwds(self, kwds): pass - def find_module(self, module_name, path, so_suffix): + def find_module(self, module_name, path, so_suffixes): try: f, filename, descr = imp.find_module(module_name, path) except ImportError: @@ -25,7 +25,7 @@ # Note that after a setuptools installation, there are both .py # and .so files with the same basename. The code here relies on # imp.find_module() locating the .so in priority. - if descr[0] != so_suffix: + if descr[0] not in so_suffixes: return None return filename diff --git a/cffi/vengine_gen.py b/cffi/vengine_gen.py --- a/cffi/vengine_gen.py +++ b/cffi/vengine_gen.py @@ -20,15 +20,15 @@ # up in kwds['export_symbols']. kwds.setdefault('export_symbols', self.export_symbols) - def find_module(self, module_name, path, so_suffix): - basename = module_name + so_suffix - if path is None: - path = sys.path - for dirname in path: - filename = os.path.join(dirname, basename) - if os.path.isfile(filename): - return filename - return None + def find_module(self, module_name, path, so_suffixes): + for so_suffix in so_suffixes: + basename = module_name + so_suffix + if path is None: + path = sys.path + for dirname in path: + filename = os.path.join(dirname, basename) + if os.path.isfile(filename): + return filename def collect_types(self): pass # not needed in the generic engine diff --git a/cffi/verifier.py b/cffi/verifier.py --- a/cffi/verifier.py +++ b/cffi/verifier.py @@ -31,7 +31,7 @@ k2 = k2.lstrip('0').rstrip('L') modulename = '_cffi_%s_%s%s%s' % (tag, self._vengine._class_key, k1, k2) - suffix = _get_so_suffix() + suffix = _get_so_suffixes()[0] self.tmpdir = tmpdir or _caller_dir_pycache() self.sourcefilename = os.path.join(self.tmpdir, modulename + '.c') self.modulefilename = os.path.join(self.tmpdir, modulename + suffix) @@ -103,7 +103,7 @@ else: path = None filename = self._vengine.find_module(self.get_module_name(), path, - _get_so_suffix()) + _get_so_suffixes()) if filename is None: return self.modulefilename = filename @@ -193,7 +193,7 @@ if keep_so: suffix = '.c' # only remove .c files else: - suffix = _get_so_suffix().lower() + suffix = _get_so_suffixes()[0].lower() for fn in filelist: if fn.lower().startswith('_cffi_') and ( fn.lower().endswith(suffix) or fn.lower().endswith('.c')): @@ -213,15 +213,20 @@ except OSError: pass -def _get_so_suffix(): +def _get_so_suffixes(): + suffixes = [] for suffix, mode, type in imp.get_suffixes(): if type == imp.C_EXTENSION: - return suffix - # bah, no C_EXTENSION available. Occurs on pypy without cpyext - if sys.platform == 'win32': - return ".pyd" - else: - return ".so" + suffixes.append(suffix) + + if not suffixes: + # bah, no C_EXTENSION available. Occurs on pypy without cpyext + if sys.platform == 'win32': + suffixes = [".pyd"] + else: + suffixes = [".so"] + + return suffixes def _ensure_dir(filename): try: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit