from distutils.core import setup, Extension import os import subprocess import re import sys # TODO: write code to know exact parent directory of this file. CWD = os.getcwd() # 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 and David Hendriks", author_email="andrews@physics.uoc.gr and r.izzard@surrey.ac.uk and rob.izzard@gmail.com and davidhendriks93@gmail.com", license="", ext_modules=[ Extension( "binary_c", ["src/binary_c_python.c"], include_dirs=[ os.environ["BINARY_C"] + "/src", os.environ["BINARY_C"] + "/src/API", "include", ] + binary_c_incdirs, libraries=["binary_c"] + binary_c_libs + ["binary_c_api"], library_dirs=[ os.environ["BINARY_C"] + "/src", "./", os.path.join(CWD, "lib/"), ] + binary_c_libdirs, runtime_library_dirs=[ os.environ["BINARY_C"] + "/src", "./", os.path.join(CWD, "lib/"), ] + binary_c_libdirs, define_macros=[] + binary_c_define_macros, extra_objects=[], extra_compile_args=[], ) ], # binary_c must be loaded )