Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r649:006f22f50bb8 Date: 2012-07-15 14:45 +0200 http://bitbucket.org/cffi/cffi/changeset/006f22f50bb8/
Log: Final fixes. diff --git a/cffi/ffiplatform.py b/cffi/ffiplatform.py --- a/cffi/ffiplatform.py +++ b/cffi/ffiplatform.py @@ -24,14 +24,18 @@ return _tmpdir -def compile(tmpdir, srcfilename, modname, **kwds): +def get_extension(srcfilename, modname, **kwds): + from distutils.core import Extension + return Extension(name=modname, sources=[srcfilename], **kwds) + +def compile(tmpdir, ext): """Compile a C extension module using distutils.""" saved_environ = os.environ.copy() saved_path = os.getcwd() try: os.chdir(tmpdir) - outputfilename = _build(srcfilename, modname, kwds) + outputfilename = _build(ext) outputfilename = os.path.abspath(outputfilename) finally: os.chdir(saved_path) @@ -42,12 +46,11 @@ os.environ[key] = value return outputfilename -def _build(srcfilename, modname, kwds): +def _build(ext): # XXX compact but horrible :-( - from distutils.core import Distribution, Extension + from distutils.core import Distribution import distutils.errors # - ext = Extension(name=modname, sources=[srcfilename], **kwds) dist = Distribution({'ext_modules': [ext]}) options = dist.get_option_dict('build_ext') options['force'] = ('ffiplatform', True) diff --git a/cffi/verifier.py b/cffi/verifier.py --- a/cffi/verifier.py +++ b/cffi/verifier.py @@ -57,9 +57,14 @@ assert self._status == 'module' return self._load_library() - def getmodulename(self): + def get_module_name(self): return os.path.splitext(os.path.basename(self.modulefilename))[0] + def get_extension(self): + sourcename = os.path.abspath(self.sourcefilename) + modname = self.get_module_name() + return ffiplatform.get_extension(sourcename, modname, **self.kwds) + # ---------- @staticmethod @@ -71,7 +76,7 @@ def _locate_module(self): try: - f, filename, descr = imp.find_module(self.getmodulename()) + f, filename, descr = imp.find_module(self.get_module_name()) except ImportError: return if f is not None: @@ -161,7 +166,7 @@ prnt() # # standard init. - modname = self.getmodulename() + modname = self.get_module_name() prnt('PyMODINIT_FUNC') prnt('init%s(void)' % modname) prnt('{') @@ -176,10 +181,7 @@ def _compile_module(self): # compile this C source tmpdir = os.path.dirname(self.sourcefilename) - sourcename = os.path.basename(self.sourcefilename) - modname = self.getmodulename() - outputfilename = ffiplatform.compile(tmpdir, sourcename, - modname, **self.kwds) + outputfilename = ffiplatform.compile(tmpdir, self.get_extension()) try: same = os.path.samefile(outputfilename, self.modulefilename) except OSError: @@ -192,7 +194,8 @@ # XXX review all usages of 'self' here! # import it as a new extension module try: - module = imp.load_dynamic(self.getmodulename(), self.modulefilename) + module = imp.load_dynamic(self.get_module_name(), + self.modulefilename) except ImportError, e: error = "importing %r: %s" % (self.modulefilename, e) raise ffiplatform.VerificationError(error) diff --git a/testing/test_zdistutils.py b/testing/test_zdistutils.py --- a/testing/test_zdistutils.py +++ b/testing/test_zdistutils.py @@ -1,4 +1,4 @@ -import imp, math, StringIO +import os, imp, math, StringIO import py from cffi import FFI, FFIError from cffi.verifier import Verifier @@ -42,8 +42,8 @@ csrc = '/*hi there!*/\n#include <math.h>\n' v = Verifier(ffi, csrc) v.compile_module() - assert v.getmodulename().startswith('_cffi_') - mod = imp.load_dynamic(v.getmodulename(), v.modulefilename) + assert v.get_module_name().startswith('_cffi_') + mod = imp.load_dynamic(v.get_module_name(), v.modulefilename) assert hasattr(mod, '_cffi_setup') def test_compile_module_explicit_filename(): @@ -54,8 +54,8 @@ v.modulefilename = filename = str(udir.join('test_compile_module.so')) v.compile_module() assert filename == v.modulefilename - assert v.getmodulename() == 'test_compile_module' - mod = imp.load_dynamic(v.getmodulename(), v.modulefilename) + assert v.get_module_name() == 'test_compile_module' + mod = imp.load_dynamic(v.get_module_name(), v.modulefilename) assert hasattr(mod, '_cffi_setup') def test_name_from_md5_of_cdef(): @@ -64,7 +64,7 @@ ffi = FFI() ffi.cdef("%s sin(double x);" % csrc) v = Verifier(ffi, "#include <math.h>") - names.append(v.getmodulename()) + names.append(v.get_module_name()) assert names[0] == names[1] != names[2] def test_name_from_md5_of_csrc(): @@ -73,7 +73,7 @@ ffi = FFI() ffi.cdef("double sin(double x);") v = Verifier(ffi, csrc) - names.append(v.getmodulename()) + names.append(v.get_module_name()) assert names[0] == names[1] != names[2] def test_load_library(): @@ -118,6 +118,6 @@ v = ffi.verifier ext = v.get_extension() assert str(ext.__class__) == 'distutils.extension.Extension' - assert ext.sources == [v.sourcefilename] - assert ext.name == v.getmodulename() + assert ext.sources == [os.path.abspath(v.sourcefilename)] + assert ext.name == v.get_module_name() assert ext.define_macros == [('TEST_EXTENSION_OBJECT', '1')] _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit