From 251749b110472ebd179ee5b2adc125dbb1ce838a Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 4 Apr 2014 16:29:58 -0700 Subject: [PATCH] python/multiprocessing build process + clean/dist options --- winbuild/build.py | 79 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 70 insertions(+), 9 deletions(-) diff --git a/winbuild/build.py b/winbuild/build.py index 5e04166e5..277d19f1e 100644 --- a/winbuild/build.py +++ b/winbuild/build.py @@ -1,4 +1,8 @@ -#/usr/bin/env python34 +#/usr/bin/env python3 + +import subprocess, multiprocessing +import shutil +import sys, getopt from config import * @@ -10,6 +14,29 @@ def setup_vms(): (py, arch, VIRT_BASE, py, arch)) return "\n".join(ret) +def run_script(params): + (version, script) = params + try: + print ("Running %s" %version) + filename = 'build_pillow_%s.cmd' % version + with open(filename, 'w') as f: + f.write(script) + + command = ['powershell', "./%s" %filename] + proc = subprocess.Popen(command, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + (trace, stderr) = proc.communicate() + status = proc.returncode + print ("Done with %s: %s" % (version, status)) + return (version, status, trace, stderr) + except Exception as msg: + print ("Error with %s: %s" % (version, str(msg))) + return (version, -1, "", str(msg)) + + def header(op): return r""" setlocal @@ -37,19 +64,53 @@ set INCLUDE=%%INCLUDE%%;%%INCLIB%%\%(inc_dir)s;%%INCLIB%%\tcl85\include setlocal set LIB=%%LIB%%;C:\Python%(py_ver)s\tcl -rd /q /s build call c:\vp\%(py_ver)s\Scripts\python.exe setup.py %%BLDOPT%% endlocal endlocal """ % args -script = [setup_vms(), header('install')] -for py_version, compiler_version in pythons.items(): - script.append(build_one(py_version, compilers[(compiler_version, 32)])) - script.append(build_one("%sx64" %py_version, compilers[(compiler_version, 64)])) -script.append(footer()) +def clean(): + try: + shutil.rmtree('../build') + except: + # could already be removed + pass + run_script(('virtualenvs', setup_vms())) -with open('build_pillows.cmd', 'w') as f: - f.write("\n".join(script)) +def main(op): + scripts = [] + for py_version, compiler_version in pythons.items(): + scripts.append((py_version, + "\n".join([header(op), + build_one(py_version, + compilers[(compiler_version, 32)]), + footer()]))) + + scripts.append(("%sx64" % py_version, + "\n".join([header(op), + build_one("%sx64" %py_version, + compilers[(compiler_version, 64)]), + footer()]))) + + pool = multiprocessing.Pool() + results = pool.map(run_script, scripts) + + for (version, status, trace, err) in results: + print ("Compiled %s: %s" % (version, status)) + + + +if __name__=='__main__': + opts, args = getopt.getopt(sys.argv[1:], '', ['clean', 'dist']) + opts = dict(opts) + + if '--clean' in opts: + clean() + + op = 'install' + if '--dist' in opts: + op = "bdist_wininst --user-access-control=auto" + + main(op)