""" See BENTO_BUILD.txt. Caveats: - no automatic detection for BLAS/LAPACK/etc... You need to set it up manually for now (except on Mac OS X and Debian/Ubuntu). The upside is that it is extremely easy to do so - bento is still in flux, and some things may changes between releases. """ import os import sys import subprocess # Ugly but necessary hack: import numpy here so that wscript in sub directories # will see this numpy and not an already installed one import __builtin__ __builtin__.__NUMPY_SETUP__ = True import waflib from numpy.distutils.conv_template \ import \ process_str as process_c_str from bento.commands import hooks from bento.utils.utils \ import \ cmd_is_runnable from bento.backends.waf_backend \ import \ WAF_TOOLDIR from bento.backends.waf_tools \ import \ blas_lapack sys.path.insert(0, os.getcwd()) try: _SETUP_PY = __import__("setup") finally: sys.path.pop(0) def compute_git_revision(top_node): git_repo_node = top_node.find_node(".git") if git_repo_node and cmd_is_runnable(["git", "--version"]): s = subprocess.Popen(["git", "rev-parse", "HEAD"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=top_node.abspath()) out = s.communicate()[0] return out.decode().strip() else: return "" def _register_metadata(context): git_revision = compute_git_revision(context.top_node) full_version = context.pkg.version if not _SETUP_PY.ISRELEASED: full_version += '.dev-' + git_revision[:7] context.register_metadata("git_revision", git_revision) context.register_metadata("is_released", _SETUP_PY.ISRELEASED) context.register_metadata("full_version", full_version) def _generate_cython(): print("Cythonizing sources") cwd = os.path.abspath(os.path.dirname(__file__)) p = subprocess.call([sys.executable, os.path.join(cwd, 'tools', 'cythonize.py'), 'numpy'], cwd=cwd) if p != 0: raise RuntimeError("Running cythonize failed!") @hooks.post_configure def post_configure(context): conf = context.waf_context if conf.env["CC_NAME"] == "gcc": conf.env.CFLAGS_PYEXT.append("-Wfatal-errors") conf.load("arch", tooldir=[WAF_TOOLDIR]) if sys.platform == "darwin": conf.env["MACOSX_DEPLOYMENT_TARGET"] = "10.4" conf.check_cc_default_arch() archs = [conf.env.DEFAULT_CC_ARCH] conf.env.ARCH = archs blas_lapack.check_blas_lapack(context) _generate_cython() @hooks.pre_build def pre_build(context): _register_metadata(context) @hooks.pre_sdist def pre_sdist(context): _register_metadata(context) @hooks.options def options(global_context): blas_lapack.add_options(global_context) class CTemplateTask(waflib.Task.Task): color = 'BLUE' before = ['c'] def run(self): s = self.inputs[0] cnt = s.read() writestr = process_c_str(cnt) o = self.outputs[0] o.write(writestr) @waflib.TaskGen.extension(".src") def c_template(self, node): outs = [] outs.append(node.change_ext("")) tsk = self.create_task('CTemplateTask', node, outs) if "c" in self.features and not node.name[-6:] == (".h.src"): self.source.append(outs[0])