Skip to content

Commit

Permalink
Fix builds with --parallel
Browse files Browse the repository at this point in the history
Python 3.5's distutils added support for parallel builds, which means
that we don't need to monkeypatch it anymore. But more importantly, this
monkeypatch made build fail (hang in fact) whenever `--parallel` was
passed to `python setup.py build`.

This commit fixes the problem by not applying the monkeypatch on
python 3.5+ and preserve the old behavior (parallel build by default) by
injecting a `parallel` option when it's not specified.
  • Loading branch information
Virgil Dupras committed Aug 5, 2018
1 parent 69918dc commit 64bce1a
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
6 changes: 5 additions & 1 deletion mp_compile.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# A monkey patch of the base distutils.ccompiler to use parallel builds
# Tested on 2.7, looks to be identical to 3.3.
# Only applied on Python < 3.5 because otherwise, it conflicts with Python's
# own newly-added support for parallel builds.

from __future__ import print_function
from multiprocessing import Pool, cpu_count
Expand Down Expand Up @@ -77,4 +79,6 @@ def install():
"%s processes" % MAX_PROCS)


install()
# We monkeypatch only versions earlier than 3.5
if sys.version_info < (3, 5):
install()
6 changes: 6 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,12 @@ def finalize_options(self):
if self.debug:
global DEBUG
DEBUG = True
if sys.version_info >= (3, 5) and not self.parallel:
# For Python < 3.5, we monkeypatch distutils to have parallel
# builds. If --parallel (or -j) wasn't specified, we want to
# reproduce the same behavior as before, that is, auto-detect the
# number of jobs.
self.parallel = mp_compile.MAX_PROCS
for x in self.feature:
if getattr(self, 'disable_%s' % x):
setattr(self.feature, x, False)
Expand Down

0 comments on commit 64bce1a

Please sign in to comment.