cffi / cffi /

The branch 'release-0.2' does not exist.
Armin Rigo 0685657 
Armin Rigo 2eb031e 

Armin Rigo b8bff87 
Armin Rigo 006f22f 

Armin Rigo b8bff87 

Armin Rigo 1d66408 

Armin Rigo b8bff87 

Armin Rigo 006f22f 
Armin Rigo b8bff87 

Armin Rigo 006f22f 
Armin Rigo b8bff87 
Armin Rigo 006f22f 
Armin Rigo 69aa45b 

Armin Rigo b8bff87 

Armin Rigo 69aa45b 

Armin Rigo d5897c6 
Armin Rigo b8bff87 

import os

class VerificationError(Exception):
    """ An error raised when verification fails

class VerificationMissing(Exception):
    """ An error raised when incomplete structures are passed into
    cdef, but no verification has been done

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."""

    # Turn the 'ext.sources' into absolute paths, because we're going to
    # do chdir().  In the common case where the path is precisely where
    # we're going to chdir(), then replace it with a pathless copy.
    for i, src in enumerate(ext.sources):
        src = os.path.abspath(src)
        if os.path.samefile(os.path.dirname(src), tmpdir):
            src = os.path.basename(src)
        ext.sources[i] = src

    saved_environ = os.environ.copy()
    saved_path = os.getcwd()
        outputfilename = _build(ext)
        outputfilename = os.path.abspath(outputfilename)
        # workaround for a distutils bugs where some env vars can
        # become longer and longer every time it is used
        for key, value in saved_environ.items():
            if os.environ.get(key) != value:
                os.environ[key] = value
    return outputfilename

def _build(ext):
    # XXX compact but horrible :-(
    from distutils.core import Distribution
    import distutils.errors
    dist = Distribution({'ext_modules': [ext]})
    options = dist.get_option_dict('build_ext')
    options['force'] = ('ffiplatform', True)
    except (distutils.errors.CompileError,
            distutils.errors.LinkError), e:
        raise VerificationError('%s: %s' % (e.__class__.__name__, e))
    cmd_obj = dist.get_command_obj('build_ext')
    [soname] = cmd_obj.get_outputs()
    return soname