mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-27 18:36:17 +03:00
cleanup
This commit is contained in:
parent
aa4592c951
commit
ae0c0f3d0a
34
.github/workflows/test-windows.yml
vendored
34
.github/workflows/test-windows.yml
vendored
|
@ -77,37 +77,37 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Build dependencies / libjpeg
|
- name: Build dependencies / libjpeg
|
||||||
run: "& .\\winbuild\\build_dep_libjpeg.cmd"
|
run: "& .\\winbuild\\build\\build_dep_libjpeg.cmd"
|
||||||
- name: Build dependencies / zlib
|
- name: Build dependencies / zlib
|
||||||
run: "& .\\winbuild\\build_dep_zlib.cmd"
|
run: "& .\\winbuild\\build\\build_dep_zlib.cmd"
|
||||||
- name: Build dependencies / LibTiff
|
- name: Build dependencies / LibTiff
|
||||||
run: "& .\\winbuild\\build_dep_libtiff.cmd"
|
run: "& .\\winbuild\\build\\build_dep_libtiff.cmd"
|
||||||
- name: Build dependencies / WebP
|
- name: Build dependencies / WebP
|
||||||
run: "& .\\winbuild\\build_dep_libwebp.cmd"
|
run: "& .\\winbuild\\build\\build_dep_libwebp.cmd"
|
||||||
- name: Build dependencies / FreeType
|
- name: Build dependencies / FreeType
|
||||||
run: "& .\\winbuild\\build_dep_freetype.cmd"
|
run: "& .\\winbuild\\build\\build_dep_freetype.cmd"
|
||||||
- name: Build dependencies / LCMS2
|
- name: Build dependencies / LCMS2
|
||||||
run: "& .\\winbuild\\build_dep_lcms2.cmd"
|
run: "& .\\winbuild\\build\\build_dep_lcms2.cmd"
|
||||||
- name: Build dependencies / OpenJPEG
|
- name: Build dependencies / OpenJPEG
|
||||||
run: "& .\\winbuild\\build_dep_openjpeg.cmd"
|
run: "& .\\winbuild\\build\\build_dep_openjpeg.cmd"
|
||||||
|
|
||||||
# GPL licensed; skip if building wheels
|
# GPL licensed; skip if building wheels
|
||||||
- name: Build dependencies / libimagequant
|
- name: Build dependencies / libimagequant
|
||||||
if: "github.event_name != 'push' || contains(matrix.python-version, 'pypy')"
|
if: "github.event_name != 'push' || contains(matrix.python-version, 'pypy')"
|
||||||
run: "& .\\winbuild\\build_dep_libimagequant.cmd"
|
run: "& .\\winbuild\\build\\build_dep_libimagequant.cmd"
|
||||||
|
|
||||||
# Raqm dependencies
|
# Raqm dependencies
|
||||||
- name: Build dependencies / HarfBuzz
|
- name: Build dependencies / HarfBuzz
|
||||||
run: "& .\\winbuild\\build_dep_harfbuzz.cmd"
|
run: "& .\\winbuild\\build\\build_dep_harfbuzz.cmd"
|
||||||
- name: Build dependencies / FriBidi
|
- name: Build dependencies / FriBidi
|
||||||
run: "& .\\winbuild\\build_dep_fribidi.cmd"
|
run: "& .\\winbuild\\build\\build_dep_fribidi.cmd"
|
||||||
- name: Build dependencies / Raqm
|
- name: Build dependencies / Raqm
|
||||||
run: "& .\\winbuild\\build_dep_libraqm.cmd"
|
run: "& .\\winbuild\\build\\build_dep_libraqm.cmd"
|
||||||
|
|
||||||
- name: Build Pillow
|
- name: Build Pillow
|
||||||
run: |
|
run: |
|
||||||
cd $env:GITHUB_WORKSPACE
|
cd $env:GITHUB_WORKSPACE
|
||||||
& winbuild\build_pillow.cmd install
|
& winbuild\build\build_pillow.cmd install
|
||||||
& $env:pythonLocation\python.exe selftest.py --installed
|
& $env:pythonLocation\python.exe selftest.py --installed
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
|
@ -145,14 +145,14 @@ jobs:
|
||||||
with:
|
with:
|
||||||
file: ./coverage.xml
|
file: ./coverage.xml
|
||||||
flags: GHA_Windows
|
flags: GHA_Windows
|
||||||
name: ${{ runner.os }} Python ${{ matrix.python-version }}
|
name: ${{ runner.os }} Python ${{ matrix.python-version }} ${{ matrix.architecture }}
|
||||||
|
|
||||||
- name: Build wheel
|
- name: Build wheel
|
||||||
id: wheel
|
id: wheel
|
||||||
if: "github.event_name == 'push' && !contains(matrix.python-version, 'pypy')"
|
if: "github.event_name == 'push' && !contains(matrix.python-version, 'pypy')"
|
||||||
run: |
|
run: |
|
||||||
for /f "tokens=3 delims=/" %%a in ("${{ github.ref }}") do echo ::set-output name=dist::dist-%%a
|
for /f "tokens=3 delims=/" %%a in ("${{ github.ref }}") do echo ::set-output name=dist::dist-%%a
|
||||||
%GITHUB_WORKSPACE%\\winbuild\\build_pillow.cmd bdist_wheel"
|
%GITHUB_WORKSPACE%\\winbuild\\build\\build_pillow.cmd bdist_wheel"
|
||||||
shell: cmd
|
shell: cmd
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v1
|
- uses: actions/upload-artifact@v1
|
||||||
|
@ -160,9 +160,3 @@ jobs:
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.wheel.outputs.dist }}
|
name: ${{ steps.wheel.outputs.dist }}
|
||||||
path: dist
|
path: dist
|
||||||
|
|
||||||
# - uses: actions/upload-artifact@v1
|
|
||||||
# if: matrix.architecture == 'x86'
|
|
||||||
# with:
|
|
||||||
# name: lib
|
|
||||||
# path: "winbuild\\build\\3.x\\x86\\lib"
|
|
||||||
|
|
|
@ -2,10 +2,90 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import winreg
|
|
||||||
from itertools import count
|
|
||||||
|
|
||||||
from commands import *
|
|
||||||
|
def cmd_cd(path):
|
||||||
|
return "cd /D {path}".format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_set(name, value):
|
||||||
|
return "set {name}={value}".format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_append(name, value):
|
||||||
|
op = "path " if name == "PATH" else "set {name}="
|
||||||
|
return (op + "%{name}%;{value}").format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_copy(src, tgt):
|
||||||
|
return 'copy /Y /B "{src}" "{tgt}"'.format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_xcopy(src, tgt):
|
||||||
|
return 'xcopy /Y /E "{src}" "{tgt}"'.format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_mkdir(path):
|
||||||
|
return 'mkdir "{path}"'.format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_rmdir(path):
|
||||||
|
return 'rmdir /S /Q "{path}"'.format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_nmake(makefile=None, target="", params=None):
|
||||||
|
if params is None:
|
||||||
|
params = ""
|
||||||
|
elif isinstance(params, list) or isinstance(params, tuple):
|
||||||
|
params = " ".join(params)
|
||||||
|
else:
|
||||||
|
params = str(params)
|
||||||
|
|
||||||
|
return " ".join(
|
||||||
|
[
|
||||||
|
"{{nmake}}",
|
||||||
|
"-nologo",
|
||||||
|
'-f "{makefile}"' if makefile is not None else "",
|
||||||
|
"{params}",
|
||||||
|
'"{target}"',
|
||||||
|
]
|
||||||
|
).format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_cmake(params=None, file="."):
|
||||||
|
if params is None:
|
||||||
|
params = ""
|
||||||
|
elif isinstance(params, list) or isinstance(params, tuple):
|
||||||
|
params = " ".join(params)
|
||||||
|
else:
|
||||||
|
params = str(params)
|
||||||
|
return " ".join(
|
||||||
|
[
|
||||||
|
"{{cmake}}",
|
||||||
|
"-DCMAKE_VERBOSE_MAKEFILE=ON",
|
||||||
|
"-DCMAKE_RULE_MESSAGES:BOOL=OFF",
|
||||||
|
"-DCMAKE_BUILD_TYPE=Release",
|
||||||
|
"{params}",
|
||||||
|
'-G "NMake Makefiles"',
|
||||||
|
'"{file}"',
|
||||||
|
]
|
||||||
|
).format(**locals())
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_msbuild(
|
||||||
|
file, configuration="Release", target="Build", platform="{msbuild_arch}"
|
||||||
|
):
|
||||||
|
return " ".join(
|
||||||
|
[
|
||||||
|
"{{msbuild}}",
|
||||||
|
"{file}",
|
||||||
|
'/t:"{target}"',
|
||||||
|
'/p:Configuration="{configuration}"',
|
||||||
|
"/p:Platform={platform}",
|
||||||
|
"/m",
|
||||||
|
]
|
||||||
|
).format(**locals())
|
||||||
|
|
||||||
|
|
||||||
SF_MIRROR = "http://iweb.dl.sourceforge.net"
|
SF_MIRROR = "http://iweb.dl.sourceforge.net"
|
||||||
|
|
||||||
|
@ -61,8 +141,7 @@ deps = {
|
||||||
"libs": [r"*.lib"],
|
"libs": [r"*.lib"],
|
||||||
},
|
},
|
||||||
"libtiff": {
|
"libtiff": {
|
||||||
# FIXME FTP timeout
|
"url": "https://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz",
|
||||||
"url": "ftp://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz",
|
|
||||||
"filename": "tiff-4.1.0.tar.gz",
|
"filename": "tiff-4.1.0.tar.gz",
|
||||||
"dir": "tiff-4.1.0",
|
"dir": "tiff-4.1.0",
|
||||||
"build": [
|
"build": [
|
||||||
|
@ -147,7 +226,7 @@ deps = {
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake(("-DBUILD_THIRDPARTY:BOOL=OFF", "-DBUILD_SHARED_LIBS:BOOL=OFF")),
|
cmd_cmake(("-DBUILD_THIRDPARTY:BOOL=OFF", "-DBUILD_SHARED_LIBS:BOOL=OFF")),
|
||||||
cmd_nmake(target="clean"),
|
cmd_nmake(target="clean"),
|
||||||
cmd_nmake(),
|
cmd_nmake(target="openjp2"),
|
||||||
cmd_mkdir(r"{inc_dir}\openjpeg-2.3.1"),
|
cmd_mkdir(r"{inc_dir}\openjpeg-2.3.1"),
|
||||||
cmd_copy(r"src\lib\openjp2\*.h", r"{inc_dir}\openjpeg-2.3.1"),
|
cmd_copy(r"src\lib\openjp2\*.h", r"{inc_dir}\openjpeg-2.3.1"),
|
||||||
],
|
],
|
||||||
|
@ -303,6 +382,8 @@ def extract_dep(url, filename):
|
||||||
ex = e
|
ex = e
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(ex)
|
raise RuntimeError(ex)
|
||||||
|
|
||||||
|
print("Extracting " + filename)
|
||||||
if filename.endswith(".zip"):
|
if filename.endswith(".zip"):
|
||||||
with zipfile.ZipFile(file) as zf:
|
with zipfile.ZipFile(file) as zf:
|
||||||
zf.extractall(build_dir)
|
zf.extractall(build_dir)
|
||||||
|
@ -314,7 +395,7 @@ def extract_dep(url, filename):
|
||||||
|
|
||||||
|
|
||||||
def write_script(name, lines):
|
def write_script(name, lines):
|
||||||
name = os.path.join(script_dir, name)
|
name = os.path.join(build_dir, name)
|
||||||
lines = [line.format(**prefs) for line in lines]
|
lines = [line.format(**prefs) for line in lines]
|
||||||
print("Writing " + name)
|
print("Writing " + name)
|
||||||
with open(name, "w") as f:
|
with open(name, "w") as f:
|
||||||
|
@ -350,8 +431,11 @@ def build_dep(name):
|
||||||
with open(patch_file, "w") as f:
|
with open(patch_file, "w") as f:
|
||||||
f.write(text)
|
f.write(text)
|
||||||
|
|
||||||
|
banner = "Building {name} ({dir})".format(**locals())
|
||||||
lines = [
|
lines = [
|
||||||
"@echo ---- Building {name} ({dir}) ----".format(**locals()),
|
"@echo " + ("=" * 70),
|
||||||
|
"@echo ==== {:<60} ====".format(banner),
|
||||||
|
"@echo " + ("=" * 70),
|
||||||
"cd /D %s" % os.path.join(build_dir, dir),
|
"cd /D %s" % os.path.join(build_dir, dir),
|
||||||
*prefs["header"],
|
*prefs["header"],
|
||||||
*dep.get("build", []),
|
*dep.get("build", []),
|
||||||
|
@ -363,13 +447,12 @@ def build_dep(name):
|
||||||
|
|
||||||
|
|
||||||
def build_dep_all():
|
def build_dep_all():
|
||||||
lines = [
|
lines = ["@echo on"]
|
||||||
"$ErrorActionPreference = 'stop'",
|
|
||||||
"cd {script_dir}",
|
|
||||||
]
|
|
||||||
for dep_name in deps:
|
for dep_name in deps:
|
||||||
lines.append('cmd.exe /c "%s"' % build_dep(dep_name))
|
lines.append(r'cmd.exe /c "{{build_dir}}\{}"'.format(build_dep(dep_name)))
|
||||||
write_script("build_dep_all.ps1", lines)
|
lines.append("if errorlevel 1 echo Build failed! && exit /B 1")
|
||||||
|
lines.append("@echo All Pillow dependencies built successfully!")
|
||||||
|
write_script("build_dep_all.cmd", lines)
|
||||||
|
|
||||||
|
|
||||||
def build_pillow(wheel=False):
|
def build_pillow(wheel=False):
|
||||||
|
@ -379,7 +462,7 @@ def build_pillow(wheel=False):
|
||||||
lines.extend(prefs["header"])
|
lines.extend(prefs["header"])
|
||||||
lines.extend(
|
lines.extend(
|
||||||
[
|
[
|
||||||
"@echo ---- Building Pillow (%s) ----",
|
"@echo ---- Building Pillow (build_ext %*) ----",
|
||||||
cmd_cd("{pillow_dir}"),
|
cmd_cd("{pillow_dir}"),
|
||||||
cmd_append("LIB", r"{python_dir}\tcl"),
|
cmd_append("LIB", r"{python_dir}\tcl"),
|
||||||
cmd_set("MSSdk", "1"),
|
cmd_set("MSSdk", "1"),
|
||||||
|
@ -393,39 +476,50 @@ def build_pillow(wheel=False):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
# winbuild directory
|
||||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
# dependency cache directory
|
||||||
depends_dir = os.path.join(script_dir, "depends")
|
depends_dir = os.path.join(script_dir, "depends")
|
||||||
|
print("Caching dependencies in:", depends_dir)
|
||||||
|
|
||||||
|
# python bin directory
|
||||||
python_dir = os.environ.get(
|
python_dir = os.environ.get(
|
||||||
"PYTHON", os.path.dirname(os.path.realpath(sys.executable))
|
"PYTHON", os.path.dirname(os.path.realpath(sys.executable))
|
||||||
)
|
)
|
||||||
|
print("Target Python:", python_dir)
|
||||||
print("Target Python: {}".format(python_dir))
|
|
||||||
|
|
||||||
# copy binaries to this directory
|
# copy binaries to this directory
|
||||||
path_dir = os.environ.get("PILLOW_BIN")
|
path_dir = os.environ.get("PILLOW_BIN")
|
||||||
|
print("Copying binary files to:", path_dir)
|
||||||
|
|
||||||
# use PYTHON to select architecture
|
# use PYTHON to select architecture
|
||||||
arch_prefs = match(architectures, python_dir)
|
arch_prefs = match(architectures, python_dir)
|
||||||
if arch_prefs is None:
|
if arch_prefs is None:
|
||||||
architecture = "x86"
|
architecture = "x86"
|
||||||
print("WARN: Could not determine architecture, guessing " + architecture)
|
|
||||||
arch_prefs = architectures[architecture]
|
arch_prefs = architectures[architecture]
|
||||||
else:
|
else:
|
||||||
architecture = arch_prefs["name"]
|
architecture = arch_prefs["name"]
|
||||||
|
print("Target Architecture:", architecture)
|
||||||
print("Target Architecture: {}".format(architecture))
|
|
||||||
|
|
||||||
msvs = find_msvs()
|
msvs = find_msvs()
|
||||||
if msvs is None:
|
if msvs is None:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
"Visual Studio not found. Please install Visual Studio 2017 or newer."
|
"Visual Studio not found. Please install Visual Studio 2017 or newer."
|
||||||
)
|
)
|
||||||
|
print("Found Visual Studio at:", msvs["vs_dir"])
|
||||||
|
|
||||||
print("Found Visual Studio at: {}".format(msvs["vs_dir"]))
|
# build root directory
|
||||||
|
build_dir = os.environ.get("PILLOW_BUILD", os.path.join(script_dir, "build"))
|
||||||
|
print("Using output directory:", build_dir)
|
||||||
|
|
||||||
build_dir = os.path.join(script_dir, "build", architecture)
|
# build directory for *.h files
|
||||||
lib_dir = os.path.join(build_dir, "lib")
|
|
||||||
inc_dir = os.path.join(build_dir, "inc")
|
inc_dir = os.path.join(build_dir, "inc")
|
||||||
|
|
||||||
|
# build directory for *.lib files
|
||||||
|
lib_dir = os.path.join(build_dir, "lib")
|
||||||
|
|
||||||
|
# build directory for *.bin files
|
||||||
bin_dir = os.path.join(build_dir, "bin")
|
bin_dir = os.path.join(build_dir, "bin")
|
||||||
|
|
||||||
shutil.rmtree(build_dir, ignore_errors=True)
|
shutil.rmtree(build_dir, ignore_errors=True)
|
||||||
|
|
|
@ -1,96 +1,3 @@
|
||||||
# builtins
|
# builtins
|
||||||
|
|
||||||
|
|
||||||
def cmd_cd(path):
|
|
||||||
return "cd /D {path}".format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_set(name, value):
|
|
||||||
return "set {name}={value}".format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_prepend(name, value):
|
|
||||||
op = "path " if name == "PATH" else "set {name}="
|
|
||||||
return (op + "{value};%{name}%").format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_append(name, value):
|
|
||||||
op = "path " if name == "PATH" else "set {name}="
|
|
||||||
return (op + "%{name}%;{value}").format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_copy(src, tgt):
|
|
||||||
return 'copy /Y /B "{src}" "{tgt}"'.format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_xcopy(src, tgt):
|
|
||||||
return 'xcopy /Y /E "{src}" "{tgt}"'.format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_mkdir(path):
|
|
||||||
return 'mkdir "{path}"'.format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_rmdir(path):
|
|
||||||
return 'rmdir /S /Q "{path}"'.format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_if_eq(a, b, cmd):
|
|
||||||
return 'if "{a}"=="{b}" {cmd}'.format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
# tools
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_nmake(makefile=None, target="", params=None):
|
|
||||||
if params is None:
|
|
||||||
params = ""
|
|
||||||
elif isinstance(params, list) or isinstance(params, tuple):
|
|
||||||
params = " ".join(params)
|
|
||||||
else:
|
|
||||||
params = str(params)
|
|
||||||
|
|
||||||
return " ".join(
|
|
||||||
[
|
|
||||||
"{{nmake}}",
|
|
||||||
"-nologo",
|
|
||||||
'-f "{makefile}"' if makefile is not None else "",
|
|
||||||
"{params}",
|
|
||||||
'"{target}"',
|
|
||||||
]
|
|
||||||
).format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_cmake(params=None, file="."):
|
|
||||||
if params is None:
|
|
||||||
params = ""
|
|
||||||
elif isinstance(params, list) or isinstance(params, tuple):
|
|
||||||
params = " ".join(params)
|
|
||||||
else:
|
|
||||||
params = str(params)
|
|
||||||
return " ".join(
|
|
||||||
[
|
|
||||||
"{{cmake}}",
|
|
||||||
"-DCMAKE_VERBOSE_MAKEFILE=ON",
|
|
||||||
"-DCMAKE_RULE_MESSAGES:BOOL=OFF",
|
|
||||||
"-DCMAKE_BUILD_TYPE=Release",
|
|
||||||
"{params}",
|
|
||||||
'-G "NMake Makefiles"',
|
|
||||||
'"{file}"',
|
|
||||||
]
|
|
||||||
).format(**locals())
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_msbuild(
|
|
||||||
file, configuration="Release", target="Build", platform="{msbuild_arch}"
|
|
||||||
):
|
|
||||||
return " ".join(
|
|
||||||
[
|
|
||||||
"{{msbuild}}",
|
|
||||||
"{file}",
|
|
||||||
'/t:"{target}"',
|
|
||||||
'/p:Configuration="{configuration}"',
|
|
||||||
"/p:Platform={platform}",
|
|
||||||
"/m",
|
|
||||||
]
|
|
||||||
).format(**locals())
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user