mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			164 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
import subprocess
 | 
						|
import shutil
 | 
						|
import sys
 | 
						|
import getopt
 | 
						|
import os
 | 
						|
 | 
						|
from config import (compilers, compiler_from_env, pythons, pyversion_from_env,
 | 
						|
                    VIRT_BASE, X64_EXT)
 | 
						|
 | 
						|
 | 
						|
def setup_vms():
 | 
						|
    ret = []
 | 
						|
    for py in pythons:
 | 
						|
        for arch in ('', X64_EXT):
 | 
						|
            ret.append("virtualenv -p c:/Python%s%s/python.exe --clear %s%s%s"
 | 
						|
                       % (py, arch, VIRT_BASE, py, arch))
 | 
						|
            ret.append(r"%s%s%s\Scripts\pip.exe install pytest pytest-cov" %
 | 
						|
                       (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("-- stderr --")
 | 
						|
        print(stderr)
 | 
						|
        print("-- stdout --")
 | 
						|
        print(trace)
 | 
						|
        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
 | 
						|
set MPLSRC=%%~dp0\..
 | 
						|
set INCLIB=%%~dp0\depends
 | 
						|
set BLDOPT=%s
 | 
						|
cd /D %%MPLSRC%%
 | 
						|
""" % (op)
 | 
						|
 | 
						|
 | 
						|
def footer():
 | 
						|
    return """endlocal
 | 
						|
exit
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
def build_one(py_ver, compiler):
 | 
						|
    # UNDONE virtual envs if we're not running on appveyor
 | 
						|
    args = {}
 | 
						|
    args.update(compiler)
 | 
						|
    if 'PYTHON' in os.environ:
 | 
						|
        args['python_path'] = "%PYTHON%"
 | 
						|
    else:
 | 
						|
        args['python_path'] = "%s%s\\Scripts" % (VIRT_BASE, py_ver)
 | 
						|
 | 
						|
    args['executable'] = "python.exe"
 | 
						|
    if 'EXECUTABLE' in os.environ:
 | 
						|
        args['executable'] = "%EXECUTABLE%"
 | 
						|
 | 
						|
    args['py_ver'] = py_ver
 | 
						|
    if '34' in py_ver:
 | 
						|
        args['tcl_ver'] = '86'
 | 
						|
    else:
 | 
						|
        args['tcl_ver'] = '85'
 | 
						|
 | 
						|
    return r"""
 | 
						|
setlocal EnableDelayedExpansion
 | 
						|
call "%%ProgramFiles%%\Microsoft SDKs\Windows\%(env_version)s\Bin\SetEnv.Cmd" /Release %(env_flags)s
 | 
						|
set DISTUTILS_USE_SDK=1
 | 
						|
set LIB=%%LIB%%;%%INCLIB%%\%(inc_dir)s
 | 
						|
set INCLUDE=%%INCLUDE%%;%%INCLIB%%\%(inc_dir)s;%%INCLIB%%\tcl%(tcl_ver)s\include
 | 
						|
 | 
						|
setlocal
 | 
						|
set LIB=%%LIB%%;C:\Python%(py_ver)s\tcl
 | 
						|
call %(python_path)s\%(executable)s setup.py %%BLDOPT%%
 | 
						|
endlocal
 | 
						|
 | 
						|
endlocal
 | 
						|
""" % args
 | 
						|
 | 
						|
 | 
						|
def clean():
 | 
						|
    try:
 | 
						|
        shutil.rmtree('../build')
 | 
						|
    except:
 | 
						|
        # could already be removed
 | 
						|
        pass
 | 
						|
    run_script(('virtualenvs', setup_vms()))
 | 
						|
 | 
						|
 | 
						|
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(("%s%s" % (py_version, X64_EXT),
 | 
						|
                        "\n".join([header(op),
 | 
						|
                                   build_one("%sx64" % py_version,
 | 
						|
                                             compilers[(compiler_version,
 | 
						|
                                                        64)]),
 | 
						|
                                   footer()])))
 | 
						|
 | 
						|
    results = map(run_script, scripts)
 | 
						|
 | 
						|
    for (version, status, trace, err) in results:
 | 
						|
        print("Compiled %s: %s" % (version, status and 'ERR' or 'OK'))
 | 
						|
 | 
						|
 | 
						|
def run_one(op):
 | 
						|
 | 
						|
    compiler = compiler_from_env()
 | 
						|
    py_version = pyversion_from_env()
 | 
						|
 | 
						|
    run_script((py_version,
 | 
						|
                "\n".join([header(op),
 | 
						|
                           build_one(py_version, compiler),
 | 
						|
                           footer()])
 | 
						|
                ))
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    opts, args = getopt.getopt(sys.argv[1:], '', ['clean', 'dist', 'wheel'])
 | 
						|
    opts = dict(opts)
 | 
						|
 | 
						|
    if '--clean' in opts:
 | 
						|
        clean()
 | 
						|
 | 
						|
    op = 'install'
 | 
						|
    if '--dist' in opts:
 | 
						|
        op = "bdist_wininst --user-access-control=auto"
 | 
						|
    elif '--wheel' in opts:
 | 
						|
        op = "bdist_wheel"
 | 
						|
 | 
						|
    if 'PYTHON' in os.environ:
 | 
						|
        run_one(op)
 | 
						|
    else:
 | 
						|
        main(op)
 |