mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-14 05:36:48 +03:00
d50445ff30
Similar to the recent adoption of Black. isort is a Python utility to sort imports alphabetically and automatically separate into sections. By using isort, contributors can quickly and automatically conform to the projects style without thinking. Just let the tool do it. Uses the configuration recommended by the Black to avoid conflicts of style. Rewrite TestImageQt.test_deprecated to no rely on import order.
210 lines
5.0 KiB
Python
Executable File
210 lines
5.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import getopt
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
from config import (
|
|
VIRT_BASE,
|
|
X64_EXT,
|
|
bit_from_env,
|
|
compiler_from_env,
|
|
compilers,
|
|
pythons,
|
|
pyversion_from_env,
|
|
)
|
|
|
|
|
|
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.decode())
|
|
print("-- stdout --")
|
|
print(trace.decode())
|
|
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 vc_setup(compiler, bit):
|
|
script = ""
|
|
if compiler["vc_version"] == "2015":
|
|
arch = "x86" if bit == 32 else "x86_amd64"
|
|
script = (
|
|
r"""
|
|
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %s"""
|
|
% arch
|
|
)
|
|
return script
|
|
|
|
|
|
def build_one(py_ver, compiler, bit):
|
|
# 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 "27" in py_ver:
|
|
args["tcl_ver"] = "85"
|
|
else:
|
|
args["tcl_ver"] = "86"
|
|
|
|
if compiler["vc_version"] == "2015":
|
|
args["imaging_libs"] = " build_ext --add-imaging-libs=msvcrt"
|
|
else:
|
|
args["imaging_libs"] = ""
|
|
|
|
args["vc_setup"] = vc_setup(compiler, bit)
|
|
|
|
script = 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%(vc_setup)s
|
|
call %(python_path)s\%(executable)s setup.py %(imaging_libs)s %%BLDOPT%%
|
|
call %(python_path)s\%(executable)s -c "from PIL import _webp;import os, shutil;shutil.copy('%%INCLIB%%\\freetype.dll', os.path.dirname(_webp.__file__));"
|
|
endlocal
|
|
|
|
endlocal
|
|
""" # noqa: E501
|
|
return script % args
|
|
|
|
|
|
def clean():
|
|
try:
|
|
shutil.rmtree("../build")
|
|
except Exception:
|
|
# could already be removed
|
|
pass
|
|
run_script(("virtualenvs", setup_vms()))
|
|
|
|
|
|
def main(op):
|
|
scripts = []
|
|
|
|
for py_version, py_info in pythons.items():
|
|
py_compilers = compilers[py_info["compiler"]][py_info["vc"]]
|
|
scripts.append(
|
|
(
|
|
py_version,
|
|
"\n".join(
|
|
[header(op), build_one(py_version, py_compilers[32], 32), footer()]
|
|
),
|
|
)
|
|
)
|
|
|
|
scripts.append(
|
|
(
|
|
"%s%s" % (py_version, X64_EXT),
|
|
"\n".join(
|
|
[
|
|
header(op),
|
|
build_one("%sx64" % py_version, py_compilers[64], 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()
|
|
bit = bit_from_env()
|
|
|
|
run_script(
|
|
(
|
|
py_version,
|
|
"\n".join([header(op), build_one(py_version, compiler, bit), 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)
|