Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
setup.py 2.29 KiB
from distutils.core import setup, Extension
import os
import subprocess
import re
import sys

# binary_c must be installed.

binary_c_config = os.environ['BINARY_C']+'/binary_c-config'

binary_c_incdirs = subprocess.run([binary_c_config,'incdirs_list'],stdout=subprocess.PIPE).stdout.decode('utf-8').split()
binary_c_libdirs = subprocess.run([binary_c_config,'libdirs_list'],stdout=subprocess.PIPE).stdout.decode('utf-8').split()
binary_c_cflags =  subprocess.run([binary_c_config,'cflags'],stdout=subprocess.PIPE).stdout.decode('utf-8').split()
# binary_c_cflags.remove('-fvisibility=hidden')
binary_c_libs = subprocess.run([binary_c_config,'libs_list'],stdout=subprocess.PIPE).stdout.decode('utf-8').split()

# create list of tuples of defined macros
binary_c_define_macros = []
defines = subprocess.run([binary_c_config,'define_macros'],stdout=subprocess.PIPE).stdout.decode('utf-8').split()
lone = re.compile('^-D(.+)$')
partner = re.compile('^-D(.+)=(.+)$')
for x in defines:
    y = partner.match(x)
    if(y):
        binary_c_define_macros.extend([(y.group(1),y.group(2))])
    else:
        y = lone.match(x)
        if(y):
            binary_c_define_macros.extend([(y.group(1),None)])
# add API header file
API_h = os.environ['BINARY_C'] + '/src/API/binary_c_API.h'
binary_c_define_macros.extend([('BINARY_C_API_H',API_h)])
            
setup(
    name='binary_c',
    version='1.0',
    description='This is a python API for binary_c by Rob Izzard and collaborators',
    author='Jeff Andrews and Robert Izzard',
    author_email='andrews@physics.uoc.gr and r.izzard@surrey.ac.uk and rob.izzard@gmail.com',
license='',
    ext_modules=[Extension("binary_c",
                           ["binary_c_python.c"],
                           libraries = ['binary_c']+binary_c_libs+['binary_c_api'],
                           include_dirs = [os.environ['BINARY_C']+'/src',os.environ['BINARY_C']+'/src/API']+binary_c_incdirs,
                           library_dirs = [os.environ['BINARY_C']+'/src', './'] + binary_c_libdirs,
                           runtime_library_dirs = [os.environ['BINARY_C']+'/src', './']+binary_c_libdirs,
                           define_macros = [] + binary_c_define_macros,
                           extra_objects = [],
                           extra_compile_args = [],

    )]  # binary_c must be loaded
)