forked from python-pillow/Pillow
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request python-pillow#7552 from radarhere/cibuildwheel
Use cibuildwheel
- Loading branch information
Showing
9 changed files
with
264 additions
and
461 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
#!/bin/bash | ||
# Define custom utilities | ||
# Test for macOS with [ -n "$IS_MACOS" ] | ||
if [ -z "$IS_MACOS" ]; then | ||
export MB_ML_LIBC=${AUDITWHEEL_POLICY::9} | ||
export MB_ML_VER=${AUDITWHEEL_POLICY:9} | ||
fi | ||
export PLAT=$CIBW_ARCHS | ||
source wheels/multibuild/common_utils.sh | ||
source wheels/multibuild/library_builders.sh | ||
if [ -z "$IS_MACOS" ]; then | ||
source wheels/multibuild/manylinux_utils.sh | ||
fi | ||
|
||
ARCHIVE_SDIR=pillow-depends-main | ||
|
||
# Package versions for fresh source builds | ||
FREETYPE_VERSION=2.13.2 | ||
HARFBUZZ_VERSION=8.2.1 | ||
LIBPNG_VERSION=1.6.40 | ||
JPEGTURBO_VERSION=3.0.1 | ||
OPENJPEG_VERSION=2.5.0 | ||
XZ_VERSION=5.4.5 | ||
TIFF_VERSION=4.6.0 | ||
LCMS2_VERSION=2.15 | ||
if [[ -n "$IS_MACOS" ]]; then | ||
GIFLIB_VERSION=5.1.4 | ||
else | ||
GIFLIB_VERSION=5.2.1 | ||
fi | ||
if [[ -n "$IS_MACOS" ]] || [[ "$MB_ML_VER" != 2014 ]]; then | ||
ZLIB_VERSION=1.3 | ||
else | ||
ZLIB_VERSION=1.2.8 | ||
fi | ||
LIBWEBP_VERSION=1.3.2 | ||
BZIP2_VERSION=1.0.8 | ||
LIBXCB_VERSION=1.16 | ||
BROTLI_VERSION=1.1.0 | ||
|
||
if [[ -n "$IS_MACOS" ]] && [[ "$CIBW_ARCHS" == "x86_64" ]]; then | ||
function build_openjpeg { | ||
local out_dir=$(fetch_unpack https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz openjpeg-2.5.0.tar.gz) | ||
(cd $out_dir \ | ||
&& cmake -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_INSTALL_NAME_DIR=$BUILD_PREFIX/lib . \ | ||
&& make install) | ||
touch openjpeg-stamp | ||
} | ||
fi | ||
|
||
function build_brotli { | ||
local cmake=$(get_modern_cmake) | ||
local out_dir=$(fetch_unpack https://github.com/google/brotli/archive/v$BROTLI_VERSION.tar.gz brotli-1.1.0.tar.gz) | ||
(cd $out_dir \ | ||
&& $cmake -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_INSTALL_NAME_DIR=$BUILD_PREFIX/lib . \ | ||
&& make install) | ||
if [[ "$MB_ML_LIBC" == "manylinux" ]]; then | ||
cp /usr/local/lib64/libbrotli* /usr/local/lib | ||
cp /usr/local/lib64/pkgconfig/libbrotli* /usr/local/lib/pkgconfig | ||
fi | ||
} | ||
|
||
function build { | ||
if [[ -n "$IS_MACOS" ]] && [[ "$CIBW_ARCHS" == "arm64" ]]; then | ||
export BUILD_PREFIX="/usr/local" | ||
fi | ||
build_xz | ||
if [ -z "$IS_ALPINE" ] && [ -z "$IS_MACOS" ]; then | ||
yum remove -y zlib-devel | ||
fi | ||
build_new_zlib | ||
|
||
build_simple xcb-proto 1.16.0 https://xorg.freedesktop.org/archive/individual/proto | ||
if [ -n "$IS_MACOS" ]; then | ||
if [[ "$CIBW_ARCHS" == "arm64" ]]; then | ||
build_simple xorgproto 2023.2 https://www.x.org/pub/individual/proto | ||
build_simple libXau 1.0.11 https://www.x.org/pub/individual/lib | ||
build_simple libpthread-stubs 0.5 https://xcb.freedesktop.org/dist | ||
if [ -f /Library/Frameworks/Python.framework/Versions/Current/share/pkgconfig/xcb-proto.pc ]; then | ||
cp /Library/Frameworks/Python.framework/Versions/Current/share/pkgconfig/xcb-proto.pc /Library/Frameworks/Python.framework/Versions/Current/lib/pkgconfig/xcb-proto.pc | ||
fi | ||
fi | ||
else | ||
sed s/\${pc_sysrootdir\}// /usr/local/share/pkgconfig/xcb-proto.pc > /usr/local/lib/pkgconfig/xcb-proto.pc | ||
fi | ||
build_simple libxcb $LIBXCB_VERSION https://www.x.org/releases/individual/lib | ||
|
||
build_libjpeg_turbo | ||
build_tiff | ||
build_libpng | ||
build_lcms2 | ||
if [[ -n "$IS_MACOS" ]] && [[ "$CIBW_ARCHS" == "arm64" ]]; then | ||
for dylib in libjpeg.dylib libtiff.dylib liblcms2.dylib; do | ||
cp $BUILD_PREFIX/lib/$dylib /opt/arm64-builds/lib | ||
done | ||
fi | ||
build_openjpeg | ||
|
||
ORIGINAL_CFLAGS=$CFLAGS | ||
CFLAGS="$CFLAGS -O3 -DNDEBUG" | ||
if [[ -n "$IS_MACOS" ]]; then | ||
CFLAGS="$CFLAGS -Wl,-headerpad_max_install_names" | ||
fi | ||
build_libwebp | ||
CFLAGS=$ORIGINAL_CFLAGS | ||
|
||
build_brotli | ||
|
||
if [ -n "$IS_MACOS" ]; then | ||
# Custom freetype build | ||
build_simple freetype $FREETYPE_VERSION https://download.savannah.gnu.org/releases/freetype tar.gz --with-harfbuzz=no | ||
else | ||
build_freetype | ||
fi | ||
|
||
if [ -z "$IS_MACOS" ]; then | ||
export FREETYPE_LIBS=-lfreetype | ||
export FREETYPE_CFLAGS=-I/usr/local/include/freetype2/ | ||
fi | ||
build_simple harfbuzz $HARFBUZZ_VERSION https://github.com/harfbuzz/harfbuzz/releases/download/$HARFBUZZ_VERSION tar.xz --with-freetype=yes --with-glib=no | ||
if [ -z "$IS_MACOS" ]; then | ||
export FREETYPE_LIBS="" | ||
export FREETYPE_CFLAGS="" | ||
fi | ||
} | ||
|
||
# Any stuff that you need to do before you start building the wheels | ||
# Runs in the root directory of this repository. | ||
curl -fsSL -o pillow-depends-main.zip https://github.com/python-pillow/pillow-depends/archive/main.zip | ||
untar pillow-depends-main.zip | ||
|
||
if [[ -n "$IS_MACOS" ]]; then | ||
# webp, libtiff, libxcb cause a conflict with building webp, libtiff, libxcb | ||
# libxdmcp causes an issue on macOS < 11 | ||
# if php is installed, brew tries to reinstall these after installing openblas | ||
# remove cairo to fix building harfbuzz on arm64 | ||
# remove lcms2 and libpng to fix building openjpeg on arm64 | ||
# remove zstd to avoid inclusion on x86_64 | ||
# curl from brew requires zstd, use system curl | ||
brew remove --ignore-dependencies webp libpng libtiff libxcb libxdmcp curl php cairo lcms2 ghostscript zstd | ||
|
||
brew install pkg-config | ||
fi | ||
|
||
wrap_wheel_builder build | ||
|
||
# Append licenses | ||
for filename in wheels/dependency_licenses/*; do | ||
echo -e "\n\n----\n\n$(basename $filename | cut -f 1 -d '.')\n" | cat >> LICENSE | ||
cat $filename >> LICENSE | ||
done |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#!/bin/bash | ||
set -e | ||
|
||
EXP_CODECS="jpg jpg_2000 libtiff zlib" | ||
EXP_MODULES="freetype2 littlecms2 pil tkinter webp" | ||
EXP_FEATURES="fribidi harfbuzz libjpeg_turbo raqm transp_webp webp_anim webp_mux xcb" | ||
|
||
if [[ "$OSTYPE" == "darwin"* ]]; then | ||
brew install fribidi | ||
export PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig" | ||
elif [ "${AUDITWHEEL_POLICY::9}" == "musllinux" ]; then | ||
apk add curl fribidi | ||
else | ||
yum install -y fribidi | ||
fi | ||
if [ "${AUDITWHEEL_POLICY::9}" != "musllinux" ]; then | ||
python3 -m pip install numpy | ||
fi | ||
|
||
if [ ! -d "test-images-main" ]; then | ||
curl -fsSL -o pillow-test-images.zip https://github.com/python-pillow/test-images/archive/main.zip | ||
unzip pillow-test-images.zip | ||
mv test-images-main/* Tests/images | ||
fi | ||
|
||
# Runs tests | ||
python3 selftest.py | ||
python3 -m pytest | ||
|
||
# Test against expected codecs, modules and features | ||
codecs=$(python3 -c 'from PIL.features import *; print(" ".join(sorted(get_supported_codecs())))') | ||
if [ "$codecs" != "$EXP_CODECS" ]; then | ||
echo "Codecs should be: '$EXP_CODECS'; but are '$codecs'" | ||
exit 1 | ||
fi | ||
modules=$(python3 -c 'from PIL.features import *; print(" ".join(sorted(get_supported_modules())))') | ||
if [ "$modules" != "$EXP_MODULES" ]; then | ||
echo "Modules should be: '$EXP_MODULES'; but are '$modules'" | ||
exit 1 | ||
fi | ||
features=$(python3 -c 'from PIL.features import *; print(" ".join(sorted(get_supported_features())))') | ||
if [ "$features" != "$EXP_FEATURES" ]; then | ||
echo "Features should be: '$EXP_FEATURES'; but are '$features'" | ||
exit 1 | ||
fi |
Oops, something went wrong.