From 6fe5493c3c84cfc3b766b8196f0913ab5717f589 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 22 Apr 2015 19:46:06 -0300 Subject: [PATCH] Fix py27-cxfreeze tox environment Use a custom script to install a patched version of cx_freeze, as required in Ubuntu 14.04 systems --HG-- branch : cx_freeze_ubuntu --- .hgignore | 2 + testing/cx_freeze/install_cx_freeze.py | 66 ++++++++++++++++++++++++++ tox.ini | 2 +- 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 testing/cx_freeze/install_cx_freeze.py diff --git a/.hgignore b/.hgignore index 398044a1a..16257ba78 100644 --- a/.hgignore +++ b/.hgignore @@ -25,6 +25,8 @@ syntax:glob doc/*/_build build/ dist/ +testing/cx_freeze/build +testing/cx_freeze/cx_freeze_source *.egg-info issue/ env/ diff --git a/testing/cx_freeze/install_cx_freeze.py b/testing/cx_freeze/install_cx_freeze.py new file mode 100644 index 000000000..801c3b2c8 --- /dev/null +++ b/testing/cx_freeze/install_cx_freeze.py @@ -0,0 +1,66 @@ +""" +Installs cx_freeze from source, but first patching +setup.py as described here: + +http://stackoverflow.com/questions/25107697/compiling-cx-freeze-under-ubuntu +""" +import glob +import shutil +import tarfile +import os +import sys +import platform + +if __name__ == '__main__': + if 'ubuntu' not in platform.version().lower(): + + print('Not Ubuntu, installing using pip. (platform.version() is %r)' % + platform.version()) + res = os.system('pip install cx_freeze') + if res != 0: + sys.exit(res) + sys.exit(0) + + if os.path.isdir('cx_freeze_source'): + shutil.rmtree('cx_freeze_source') + os.mkdir('cx_freeze_source') + + res = os.system('pip install --download cx_freeze_source --no-use-wheel ' + 'cx_freeze') + if res != 0: + sys.exit(res) + + packages = glob.glob('cx_freeze_source/*.tar.gz') + assert len(packages) == 1 + tar_filename = packages[0] + + tar_file = tarfile.open(tar_filename) + try: + tar_file.extractall(path='cx_freeze_source') + finally: + tar_file.close() + + basename = os.path.basename(tar_filename).replace('.tar.gz', '') + setup_py_filename = 'cx_freeze_source/%s/setup.py' % basename + with open(setup_py_filename) as f: + lines = f.readlines() + + line_to_patch = 'if not vars.get("Py_ENABLE_SHARED", 0):' + for index, line in enumerate(lines): + if line_to_patch in line: + indent = line[:line.index(line_to_patch)] + lines[index] = indent + 'if True:\n' + print('Patched line %d' % (index + 1)) + break + else: + sys.exit('Could not find line in setup.py to patch!') + + with open(setup_py_filename, 'w') as f: + f.writelines(lines) + + os.chdir('cx_freeze_source/%s' % basename) + res = os.system('python setup.py install') + if res != 0: + sys.exit(res) + + sys.exit(0) \ No newline at end of file diff --git a/tox.ini b/tox.ini index 73502d4d4..9f683c46f 100644 --- a/tox.ini +++ b/tox.ini @@ -125,10 +125,10 @@ commands= -rfsxX --junitxml={envlogdir}/junit-{envname}2.xml [] [testenv:py27-cxfreeze] -deps=cx_freeze changedir=testing/cx_freeze basepython=python2.7 commands= + {envpython} install_cx_freeze.py {envpython} runtests_setup.py build --build-exe build {envpython} tox_run.py