summaryrefslogtreecommitdiff
path: root/buildlibxml.py
diff options
context:
space:
mode:
authorscoder <none@none>2010-03-13 15:06:07 +0100
committerscoder <none@none>2010-03-13 15:06:07 +0100
commitefcc53c591b473e4c3bed337e2cc9bfd65860fff (patch)
tree0385177c66cecd8f058b11a9ebc78104ca94579b /buildlibxml.py
parentb70344165e601b530f8171fc520d820b10e82816 (diff)
downloadpython-lxml-efcc53c591b473e4c3bed337e2cc9bfd65860fff.tar.gz
[svn r4375] r5514@lenny: sbehnel | 2010-03-13 15:05:54 +0100
build lib dependencies in parallel if supported --HG-- branch : trunk
Diffstat (limited to 'buildlibxml.py')
-rw-r--r--buildlibxml.py38
1 files changed, 29 insertions, 9 deletions
diff --git a/buildlibxml.py b/buildlibxml.py
index 5fb39386..eb86c159 100644
--- a/buildlibxml.py
+++ b/buildlibxml.py
@@ -7,8 +7,19 @@ try:
except ImportError:
from urllib.parse import urlsplit
from urllib.request import urlretrieve
-
-
+
+multi_make_options = []
+try:
+ from multiprocessing import cpu_count
+except ImportError:
+ pass
+else:
+ cpus = cpu_count()
+ if cpus > 1:
+ if cpus > 5:
+ cpus = 5
+ multi_make_options = ['-j%d' % (cpus+1)]
+
# use pre-built libraries on Windows
@@ -229,18 +240,27 @@ def safe_mkdir(dir):
if not os.path.exists(dir):
os.makedirs(dir)
-def cmmi(configure_cmd, build_dir, **call_setup):
+def cmmi(configure_cmd, build_dir, multicore=None, **call_setup):
print('Starting build in %s' % build_dir)
call_subprocess(configure_cmd, cwd=build_dir, **call_setup)
+ if not multicore:
+ make_jobs = multi_make_options
+ elif int(multicore) > 1:
+ make_jobs = ['-j%s' % multicore]
+ else:
+ make_jobs = []
call_subprocess(
- ['make'], cwd=build_dir, **call_setup)
+ ['make'] + make_jobs,
+ cwd=build_dir, **call_setup)
call_subprocess(
- ['make', 'install'], cwd=build_dir, **call_setup)
+ ['make'] + make_jobs + ['install'],
+ cwd=build_dir, **call_setup)
def build_libxml2xslt(download_dir, build_dir,
static_include_dirs, static_library_dirs,
static_cflags, static_binaries,
- libxml2_version=None, libxslt_version=None, libiconv_version=None):
+ libxml2_version=None, libxslt_version=None, libiconv_version=None,
+ multicore=None):
safe_mkdir(download_dir)
safe_mkdir(build_dir)
libiconv_dir = unpack_tarball(download_libiconv(download_dir, libiconv_version), build_dir)
@@ -278,13 +298,13 @@ def build_libxml2xslt(download_dir, build_dir,
]
# build libiconv
- cmmi(configure_cmd, libiconv_dir, **call_setup)
+ cmmi(configure_cmd, libiconv_dir, multicore, **call_setup)
# build libxml2
libxml2_configure_cmd = configure_cmd + [
'--without-python',
'--with-iconv=%s' % prefix]
- cmmi(libxml2_configure_cmd, libxml2_dir, **call_setup)
+ cmmi(libxml2_configure_cmd, libxml2_dir, multicore, **call_setup)
# build libxslt
libxslt_configure_cmd = configure_cmd + [
@@ -295,7 +315,7 @@ def build_libxml2xslt(download_dir, build_dir,
libxslt_configure_cmd += [
'--without-crypto',
]
- cmmi(libxslt_configure_cmd, libxslt_dir, **call_setup)
+ cmmi(libxslt_configure_cmd, libxslt_dir, multicore, **call_setup)
# collect build setup for lxml
xslt_config = os.path.join(prefix, 'bin', 'xslt-config')