From 64235ccc11175e6d4186a8fa911816cd7674d453 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Tue, 10 Jan 2017 16:31:19 -0200 Subject: [PATCH] Make build-many-glibcs.py work on python3.2 I used this patch to run the new build script with python3.2, it may be worth adding this hack if python3.5 is not widespread (might work with older python, i haven't tested that). This patch make build-many-glibcs.py work with python 3.2 by adding fallback implementation to python 3.5 facilities if they are not present. Checked building a x86_64-linux-gnu toolchain with python 3.2. 2016-11-22 Szabolcs Nagy * scripts/build-many-glibcs.py (os.cpu_count): Add compatibility definition. (re.fullmatch, subprocess.run): Likewise. --- ChangeLog | 5 +++++ scripts/build-many-glibcs.py | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/ChangeLog b/ChangeLog index e1cb0378f6..4f87985cdb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-01-11 Szabolcs Nagy + + * scripts/build-many-glibcs.py (os.cpu_count): Add compatibility definition. + (re.fullmatch, subprocess.run): Likewise. + 2016-01-11 Siddhesh Poyarekar * po/libc.pot: Regenerate. diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index 60a7874875..d27e70b8bd 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -49,6 +49,43 @@ import sys import time import urllib.request +try: + os.cpu_count +except: + import multiprocessing + os.cpu_count = lambda: multiprocessing.cpu_count() + +try: + re.fullmatch +except: + re.fullmatch = lambda p,s,f=0: re.match(p+"\\Z",s,f) + +try: + subprocess.run +except: + class _CompletedProcess: + def __init__(self, args, returncode, stdout=None, stderr=None): + self.args = args + self.returncode = returncode + self.stdout = stdout + self.stderr = stderr + + def _run(*popenargs, input=None, timeout=None, check=False, **kwargs): + assert(timeout is None) + with subprocess.Popen(*popenargs, **kwargs) as process: + try: + stdout, stderr = process.communicate(input) + except: + process.kill() + process.wait() + raise + returncode = process.poll() + if check and returncode: + raise subprocess.CalledProcessError(returncode, popenargs) + return _CompletedProcess(popenargs, returncode, stdout, stderr) + + subprocess.run = _run + class Context(object): """The global state associated with builds in a given directory."""