Skip to content
Snippets Groups Projects
setup.py 5.49 KiB
Newer Older
from distutils.core import setup, Extension
# from setuptools import find_packages
# from setuptools import setup, find_packages, Extension
GSL_DIR = os.getenv("GSL_DIR", None)
David Hendriks's avatar
David Hendriks committed
if not GSL_DIR:
        "Warning: GSL_DIR is not set, this might lead to errors along the installation if\
        there is no other version of GSL in the include dirs"
David Hendriks's avatar
David Hendriks committed
BINARY_C_DIR = os.getenv("BINARY_C", None)
if not BINARY_C_DIR:
    print("Error: the BINARY_C environment variable is not set. Aborting setup")
    quit()


David Hendriks's avatar
David Hendriks committed

# TODO: write code to know exact parent directory of this file.
CWD = os.getcwd()
David Hendriks's avatar
David Hendriks committed
############################################################
# Getting information from binary_c
############################################################

David Hendriks's avatar
David Hendriks committed
BINARY_C_CONFIG = os.path.join(BINARY_C_DIR, "binary_c-config")
David Hendriks's avatar
David Hendriks committed
    subprocess.run(
        [BINARY_C_CONFIG, "incdirs_list"], stdout=subprocess.PIPE, check=True
    )
    .stdout.decode("utf-8")
    .split()
)
David Hendriks's avatar
David Hendriks committed
    subprocess.run(
        [BINARY_C_CONFIG, "libdirs_list"], stdout=subprocess.PIPE, check=True
    )
    .stdout.decode("utf-8")
    .split()
)
BINARY_C_CFLAGS = (
    subprocess.run([BINARY_C_CONFIG, "cflags"], stdout=subprocess.PIPE, check=True)
    .stdout.decode("utf-8")
    .split()
)
# BINARY_C_CFLAGS.remove('-fvisibility=hidden')
BINARY_C_LIBS = (
    subprocess.run([BINARY_C_CONFIG, "libs_list"], stdout=subprocess.PIPE, check=True)
    .stdout.decode("utf-8")
    .split()
)

# create list of tuples of defined macros
David Hendriks's avatar
David Hendriks committed
    subprocess.run(
        [BINARY_C_CONFIG, "define_macros"], stdout=subprocess.PIPE, check=True
    )
    .stdout.decode("utf-8")
    .split()
)
David Hendriks's avatar
David Hendriks committed

LONE = re.compile("^-D(.+)$")
PARTNER = re.compile("^-D(.+)=(.+)$")
for x in DEFINES:
    y = PARTNER.match(x)
        BINARY_C_DEFINE_MACROS.extend([(y.group(1), y.group(2))])
            BINARY_C_DEFINE_MACROS.extend([(y.group(1), None)])
David Hendriks's avatar
David Hendriks committed
API_h = os.path.join(BINARY_C_DIR, "src", "API", "binary_c_API.h")
BINARY_C_DEFINE_MACROS.extend([("BINARY_C_API_H", API_h)])
David Hendriks's avatar
David Hendriks committed
############################################################
# Setting all directories and LIBRARIES to their final values
David Hendriks's avatar
David Hendriks committed
############################################################
David Hendriks's avatar
David Hendriks committed
    [
        os.path.join(BINARY_C_DIR, "src"), 
        os.path.join(BINARY_C_DIR, "src", "API"), 
        "include",
    ]
    + [os.path.join(GSL_DIR, "include")]
    if GSL_DIR
    else []
)
David Hendriks's avatar
David Hendriks committed

LIBRARIES = ["binary_c"] + BINARY_C_LIBS + ["binary_c_api"]
David Hendriks's avatar
David Hendriks committed

David Hendriks's avatar
David Hendriks committed
    os.path.join(BINARY_C_DIR, "src"),
    "./",
    os.path.join(CWD, "lib/"),
    # os.path.join(CWD, "binarycpython/core/"),
David Hendriks's avatar
David Hendriks committed

David Hendriks's avatar
David Hendriks committed
    os.path.join(BINARY_C_DIR, "src"),
    "./",
    os.path.join(CWD, "lib/"),
    # os.path.join(CWD, "binarycpython/core/"),
David Hendriks's avatar
David Hendriks committed

David Hendriks's avatar
David Hendriks committed
# print('\n')
# print("BINARY_C_CONFIG: ", str(BINARY_C_CONFIG) + "\n")
# print("incdirs: ", str(INCLUDE_DIRS) + "\n")
# print("BINARY_C_LIBS: ", str(BINARY_C_LIBS) + "\n")
# print("LIBRARIES: ", str(LIBRARIES) + "\n")
# print("LIBRARY_DIRS: ", str(LIBRARY_DIRS) + "\n")
# print("RUNTIME_LIBRARY_DIRS: ", str(RUNTIME_LIBRARY_DIRS) + "\n")
# print("BINARY_C_CFLAGS: ", str(BINARY_C_CFLAGS) + "\n")
David Hendriks's avatar
David Hendriks committed
# print("API_h: ", str(API_h) + "\n")
# print("macros: ", str(BINARY_C_DEFINE_MACROS) + "\n")
David Hendriks's avatar
David Hendriks committed
# print('\n')
David Hendriks's avatar
David Hendriks committed

David Hendriks's avatar
David Hendriks committed
############################################################
# Making the extension function
############################################################
# TODO: fix that this one also compiles the code itself

David Hendriks's avatar
David Hendriks committed
    # name="binarycpython.core.binary_c",
    name="binary_c_python_api",
    sources=["src/binary_c_python.c"],
David Hendriks's avatar
David Hendriks committed
    include_dirs=INCLUDE_DIRS,
    libraries=LIBRARIES,
    library_dirs=LIBRARY_DIRS,
David Hendriks's avatar
David Hendriks committed
    runtime_library_dirs=RUNTIME_LIBRARY_DIRS,
    define_macros=[] + BINARY_C_DEFINE_MACROS,
    extra_objects=[],
    extra_compile_args=[],
def readme():
    """Opens readme file and returns content"""
    with open("README.md") as file:
        return file.read()
David Hendriks's avatar
David Hendriks committed
def license():
    """Opens license file and returns the content"""
    with open("LICENSE.md") as file:
        return file.read()
David Hendriks's avatar
David Hendriks committed
############################################################
# Making the extension function
############################################################
David Hendriks's avatar
David Hendriks committed
    version="0.2",
    description="This is a python API for binary_c by David Hendriks, Rob Izzard and collaborators.\
        Based on the initial set up by Jeff andrews",
David Hendriks's avatar
David Hendriks committed
    author="David Hendriks, Robert Izzard and Jeff Andrews",
    author_email="davidhendriks93@gmail.com/d.hendriks@surrey.ac.uk,\
        r.izzard@surrey.ac.uk/rob.izzard@gmail.com andrews@physics.uoc.gr",
    long_description=readme(),
    url="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python",
    package_dir={
        "binarycpython": "binarycpython",
        "binarycpython.utils": "binarycpython/utils",
        "binarycpython",
        "binarycpython.utils",
    # package_data={
    #     'binarycpython.core': ['libbinary_c_api.so'],
    # },
    ext_modules=[BINARY_C_PYTHON_API_MODULE],  # binary_c must be loaded