Skip to content
Snippets Groups Projects
setup.py 2.3 KiB
Newer Older
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_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 and David Hendriks',
    author_email='andrews@physics.uoc.gr and r.izzard@surrey.ac.uk and rob.izzard@gmail.com and dhendriks93@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
)