From 8e2f528a992ac2805e114730f7803921e024b850 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 6 Nov 2016 19:07:03 +0100 Subject: [PATCH] Fix python build script --- nix/build-all.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index afb4252f49..e34499c5ef 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -40,6 +40,7 @@ import subprocess as sp import shutil import time import tarfile +import multiprocessing logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) @@ -104,7 +105,7 @@ def get_os(): try: IFCOS_NUM_BUILD_PROCS = os.environ["IFCOS_NUM_BUILD_PROCS"] except KeyError: - IFCOS_NUM_BUILD_PROCS=int(sp.check_output([bash, "-c", "sysctl -n hw.ncpu 2> /dev/null || cat /proc/cpuinfo | grep processor | wc -l"]))+1 + IFCOS_NUM_BUILD_PROCS=multiprocessing.cpu_count() + 1 os.environ["IFCOS_NUM_BUILD_PROCS"]=str(IFCOS_NUM_BUILD_PROCS) try: @@ -188,11 +189,19 @@ if not os.path.exists(LOG_FILE): logger.info("using command log file '%s'" % (LOG_FILE,)) def __check_call__(cmds, cwd=None): - logger.info("running command '%s' in directory '%s'" % (cmds, cwd)) + logger.info("running command '%s' in directory '%s'" % (" ".join(cmds), cwd)) log_file_handle = open(LOG_FILE, "a") - sp.check_call(cmds, cwd=cwd, stdout=log_file_handle, stderr=log_file_handle) + proc = sp.Popen(cmds, cwd=cwd, stdout=log_file_handle, stderr=sp.PIPE) + _, stderr = proc.communicate() + log_file_handle.write(stderr) log_file_handle.close() + if proc.returncode != 0: + print "-" * 70 + print stderr + print "-" * 70 + raise Exception("Command `%s` returned exit code %d" % (" ".join(cmds), proc.returncode)) + def __check_output__(cmds, cwd=None): """Wraps `subprocess.check_output` and logs the command being executed, sets up logging `stderr` to `LOG_FILE` (in append mode) and strips the @@ -219,9 +228,8 @@ def run_autoconf(arg1, configure_args, cwd): configure_path = os.path.realpath(os.path.join(cwd, "..", "configure")) if not os.path.exists(configure_path): __check_call__([bash, "./autogen.sh"], cwd=os.path.realpath(os.path.join(cwd, ".."))) # only run autogen.sh in the directory it is located and use cwd to achieve that in order to not mess up things - __check_call__([bash, configure_path - #"../configure" - ]+configure_args+["--prefix=%s" % (os.path.realpath("%s/install/%s" % (DEPS_DIR, arg1)),)], cwd=cwd) + # Using `sh` over `bash` fixes issues with building swig + __check_call__(["/bin/sh", "../configure"]+configure_args+["--prefix=%s" % (os.path.realpath("%s/install/%s" % (DEPS_DIR, arg1)),)], cwd=cwd) def run_cmake(arg1, cmake_args, cmake_dir=None, cwd=None): if cmake_dir is None: @@ -454,14 +462,14 @@ run_cmake("", cmake_args=["-DBOOST_ROOT=%s/install/boost-%s" % (DEPS_DIR, BOOST_ logger.info("\rBuilding executables... ") -__check_call__([make, "-j%s" % (IFCOS_NUM_BUILD_PROCS,)], cwd=CMAKE_DIR) +__check_call__([make, "-j%s" % (IFCOS_NUM_BUILD_PROCS,)], cwd=executables_dir) if get_os() == "Darwin": STRIP_OPTION="-x" else: STRIP_OPTION="-s" -__check_call__([strip, STRIP_OPTION, "IfcConvert", "IfcGeomServer"], cwd=CMAKE_DIR) +__check_call__([strip, STRIP_OPTION, "IfcConvert", "IfcGeomServer"], cwd=executables_dir) # On OSX the actual Python library is not linked against. ADDITIONAL_ARGS="" @@ -499,10 +507,10 @@ for PYTHON_VERSION in PYTHON_VERSIONS: logger.info("\rBuilding python %s wrapper... " % (PYTHON_VERSION,)) - __check_call__([make, "-j%s" % (IFCOS_NUM_BUILD_PROCS,), "_ifcopenshell_wrapper"], cwd=CMAKE_DIR) + __check_call__([make, "-j%s" % (IFCOS_NUM_BUILD_PROCS,), "_ifcopenshell_wrapper"], cwd=python_dir) if get_os() != "Darwin": # TODO: This symbol name depends on the Python version? - __check_call__([strip, "-s", "-K", "PyInit__ifcopenshell_wrapper", "ifcwrap/_ifcopenshell_wrapper.so"]) + __check_call__([strip, "-s", "-K", "PyInit__ifcopenshell_wrapper", "ifcwrap/_ifcopenshell_wrapper.so"], cwd=python_dir) logger.info("\rBuilt IfcOpenShell...\n\n")