cffi / setup.py

Armin Rigo be6a98c 
Scott Tsai 198f114 

Ronny Pfannschmi… 4ee10e6 
Alex Gaynor 0164a34 
Armin Rigo 232154d 
Armin Rigo 3c10fb4 
Armin Rigo c15fb2d 

Armin Rigo ee60367 
Armin Rigo 0e2a312 




Armin Rigo 58766b1 

Armin Rigo 0e2a312 
Armin Rigo 58766b1 
Ronny Pfannschmi… 138bd80 
Amaury Forgeot d… 203dc42 
Armin Rigo 0e2a312 


Amaury Forgeot d… 203dc42 
Armin Rigo 0e2a312 






Armin Rigo 58766b1 








Armin Rigo c15fb2d 
Armin Rigo 0e2a312 

Armin Rigo 58766b1 
Armin Rigo c15fb2d 
Armin Rigo 58766b1 
Armin Rigo c15fb2d 

Armin Rigo 3c10fb4 











Armin Rigo c15fb2d 

Armin Rigo 63bec0a 







Armin Rigo 3c10fb4 
Armin Rigo 63bec0a 
Armin Rigo ee60367 
Scott Tsai 198f114 
Armin Rigo 0e2a312 
Armin Rigo be6a98c 

Armin Rigo 32527f1 
Ronny Pfannschmi… bce40a4 
Armin Rigo 32527f1 
Maciej Fijalkows… ea23f54 
Maciej Fijalkows… 794b030 
Armin Rigo 8194696 
Maciej Fijalkows… ca6e81d 
Armin Rigo 328cd35 
Ronny Pfannschmi… 4ee10e6 
Maciej Fijalkows… 794b030 
Maciej Fijalkows… ecb400a 


Maciej Fijalkows… e70cacb 

Ronny Pfannschmi… bce40a4 

















fijal 88f5792 
Armin Rigo 0b8ea5a 
fijal 88f5792 
Armin Rigo 32527f1 
import sys, os
import subprocess
import errno


sources = ['c/_cffi_backend.c']
libraries = ['ffi']
include_dirs = ['/usr/include/ffi',
                '/usr/include/libffi']    # may be changed by pkg-config
define_macros = []
library_dirs = []
extra_compile_args = []
extra_link_args = []


def _ask_pkg_config(resultlist, option, result_prefix='', sysroot=False):
    pkg_config = os.environ.get('PKG_CONFIG','pkg-config')
    try:
        p = subprocess.Popen([pkg_config, option, 'libffi'],
                             stdout=subprocess.PIPE)
    except OSError as e:
        if e.errno != errno.ENOENT:
            raise
    else:
        t = p.stdout.read().decode().strip()
        if p.wait() == 0:
            res = t.split()
            # '-I/usr/...' -> '/usr/...'
            for x in res:
                assert x.startswith(result_prefix)
            res = [x[len(result_prefix):] for x in res]
            #print 'PKG_CONFIG:', option, res
            #
            sysroot = sysroot and os.environ.get('PKG_CONFIG_SYSROOT_DIR', '')
            if sysroot:
                # old versions of pkg-config don't support this env var,
                # so here we emulate its effect if needed
                res = [path if path.startswith(sysroot)
                            else sysroot + path
                         for path in res]
            #
            resultlist[:] = res

def use_pkg_config():
    _ask_pkg_config(include_dirs,       '--cflags-only-I', '-I', sysroot=True)
    _ask_pkg_config(extra_compile_args, '--cflags-only-other')
    _ask_pkg_config(library_dirs,       '--libs-only-L', '-L', sysroot=True)
    _ask_pkg_config(extra_link_args,    '--libs-only-other')
    _ask_pkg_config(libraries,          '--libs-only-l', '-l')


if sys.platform == 'win32':
    COMPILE_LIBFFI = 'c/libffi_msvc'    # from the CPython distribution
else:
    COMPILE_LIBFFI = None

if COMPILE_LIBFFI:
    assert os.path.isdir(COMPILE_LIBFFI), (
        "On Windows, you need to copy the directory "
        "Modules\\_ctypes\\libffi_msvc from the CPython sources (2.6 or 2.7) "
        "into the top-level directory.")
    include_dirs[:] = [COMPILE_LIBFFI]
    libraries[:] = []
    _filenames = [filename.lower() for filename in os.listdir(COMPILE_LIBFFI)]
    _filenames = [filename for filename in _filenames
                           if filename.endswith('.c') or
                              filename.endswith('.asm')]
    if sys.maxsize <= 2**32:
        _filenames.remove('win64.asm')
    else:
        _filenames.remove('win32.c')
    sources.extend(os.path.join(COMPILE_LIBFFI, filename)
                   for filename in _filenames)
    define_macros.append(('USE_C_LIBFFI_MSVC', '1'))
else:
    use_pkg_config()


if __name__ == '__main__':
  from setuptools import setup, Feature, Extension
  setup(
    name='cffi',
    description='Foreign Function Interface for Python calling C code.',
    version='0.5',
    packages=['cffi'],
    zip_safe=False,

    url='http://cffi.readthedocs.org',
    author='Armin Rigo, Maciej Fijalkowski',
    author_email='python-cffi@googlegroups.com',

    license='MIT',

    features={
        'cextension': Feature(
            "fast c backend for cpython",
            standard='__pypy__' not in sys.modules,
            ext_modules=[
                Extension(name='_cffi_backend',
                          include_dirs=include_dirs,
                          sources=sources,
                          libraries=libraries,
                          define_macros=define_macros,
                          library_dirs=library_dirs,
                          extra_compile_args=extra_compile_args,
                          extra_link_args=extra_link_args,
                          ),
            ],
        ),
    },

    install_requires=[
        'pycparser',
    ]
  )
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.