Repository URL to install this package:
|
Version:
1.11.0 ▾
|
import os
def unuran_pre_build_hook(build_clib, build_info):
from scipy._build_utils.compiler_helper import (get_c_std_flag,
try_compile, has_flag)
c = build_clib.compiler
c_flag = get_c_std_flag(c)
if c_flag is not None:
if "extra_compiler_args" not in build_info:
build_info["extra_compiler_args"] = []
build_info["extra_compiler_args"].append(c_flag)
deps = {"unistd.h": ["HAVE_DECL_GETOPT", "HAVE_UNISTD_H"],
"dlfcn.h": ["HAVE_DLFCN_H"],
"sys/time.h": ["HAVE_GETTIMEOFDAY", "HAVE_SYS_TIME_H",
"TIME_WITH_SYS_TIME"],
"memory.h": ["HAVE_MEMORY_H"],
"strings.h": ["HAVE_STRCASECMP", "HAVE_STRINGS_H"],
"sys/stat.h": ["HAVE_SYS_STAT_H"],
"sys/types.h": ["HAVE_SYS_TYPES_H"]}
for dep in deps:
has_dep = try_compile(c, code=f"#include <{dep}>\n"
"int main(int argc, char **argv){}")
if has_dep:
for macro in deps[dep]:
build_info["macros"].append((macro, "1"))
if has_flag(c, flag="-lm"):
try:
build_info["libraries"].append("m")
except KeyError:
build_info["libraries"] = ["m"]
def _get_sources(dirs):
sources = []
for dir_ in dirs:
files = [
file for file in os.listdir(dir_) if (not os.path.isdir(file))
]
path = [str(dir_ / file) for file in files]
sources += [source for source in path if (source.endswith(".c"))]
return sources
def configuration(parent_package="", top_path=None):
from numpy.distutils.misc_util import Configuration
from scipy._lib._unuran_utils import _unuran_dir
if not os.path.exists(_unuran_dir(ret_path=True) / 'README.md'):
raise RuntimeError("Missing the `unuran` submodule! Run `git "
"submodule update --init` to fix this.")
config = Configuration("_unuran", parent_package, top_path)
# UNU.RAN info
UNURAN_DIR = _unuran_dir(ret_path=True).resolve()
UNURAN_VERSION = "16:0:0"
DEFINE_MACROS = [
("HAVE_ALARM", "1"),
("HAVE_DECL_ALARM", "1"),
("HAVE_DECL_HUGE_VAL", "1"),
("HAVE_DECL_INFINITY", "1"),
("HAVE_DECL_ISFINITE", "0"),
("HAVE_DECL_ISINF", "0"),
("HAVE_DECL_ISNAN", "1"),
("HAVE_DECL_LOG1P", "1"),
("HAVE_DECL_SIGNAL", "1"),
("HAVE_DECL_SNPRINTF", "1"),
("HAVE_DECL_VSNPRINTF", "1"),
("HAVE_FLOAT_H", "1"),
("HAVE_FLOOR", "1"),
("HAVE_IEEE_COMPARISONS", "1"),
("HAVE_INTTYPES_H", "1"),
("HAVE_LIBM", "1"),
("HAVE_LIMITS_H", "1"),
("HAVE_POW", "1"),
("HAVE_SIGNAL", "1"),
("HAVE_SQRT", "1"),
("HAVE_STDINT_H", "1"),
("HAVE_STDLIB_H", "1"),
("HAVE_STRCHR", "1"),
("HAVE_STRING_H", "1"),
("HAVE_STRTOL", "1"),
("HAVE_STRTOUL", "1"),
("LT_OBJDIR", '".libs/"'),
("PACKAGE", '"unuran"'),
("PACKAGE_BUGREPORT", '"unuran@statmath.wu.ac.at"'),
("PACKAGE_NAME", '"unuran"'),
("PACKAGE_STRING", '"unuran %s"' % UNURAN_VERSION),
("PACKAGE_TARNAME", '"unuran"'),
("PACKAGE_URL", '""'),
("PACKAGE_VERSION", '"%s"' % UNURAN_VERSION),
("STDC_HEADERS", "1"),
("UNUR_ENABLE_INFO", "1"),
("VERSION", '"%s"' % UNURAN_VERSION),
("HAVE_CONFIG_H", "1"),
("_ISOC99_SOURCE", "1"),
]
UNURAN_DIRS = [
os.path.join("unuran", "src"),
os.path.join("unuran", "src", "distr"),
os.path.join("unuran", "src", "distributions"),
os.path.join("unuran", "src", "methods"),
os.path.join("unuran", "src", "parser"),
os.path.join("unuran", "src", "specfunct"),
os.path.join("unuran", "src", "urng"),
os.path.join("unuran", "src", "utils"),
os.path.join("unuran", "src", "tests"),
]
UNURAN_SOURCE_DIRS = [UNURAN_DIR / dir_ for dir_ in UNURAN_DIRS]
sources = _get_sources(UNURAN_SOURCE_DIRS[1:])
ext = config.add_extension(
"unuran_wrapper",
sources=["unuran_wrapper.c"] + sources,
libraries=[],
include_dirs=[str(dir_.resolve()) for dir_ in UNURAN_SOURCE_DIRS]
+ [
os.path.join(
os.path.dirname(__file__), "..", "..", "_lib", "src"
)
]
+ [os.path.dirname(__file__)],
language="c",
define_macros=DEFINE_MACROS,
)
ext.pre_build_hook = unuran_pre_build_hook
config.add_data_files("*.pxd")
config.add_data_files("*.pyi")
return config
if __name__ == "__main__":
from numpy.distutils.core import setup
setup(**configuration(top_path="").todict())