Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed support for 32-bit #7228

Merged
merged 5 commits into from Jun 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions .appveyor.yml
Expand Up @@ -10,8 +10,8 @@ environment:
TEST_OPTIONS:
DEPLOY: YES
matrix:
- PYTHON: C:/Python311
ARCHITECTURE: x86
- PYTHON: C:/Python311-x64
ARCHITECTURE: x64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
- PYTHON: C:/Python38-x64
ARCHITECTURE: x64
Expand Down
2 changes: 1 addition & 1 deletion .github/mergify.yml
Expand Up @@ -7,7 +7,7 @@ pull_request_rules:
- status-success=Test Successful
- status-success=Docker Test Successful
- status-success=Windows Test Successful
- status-success=MinGW Test Successful
- status-success=MinGW
- status-success=Cygwin Test Successful
- status-success=continuous-integration/appveyor/pr
actions:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test-docker.yml
Expand Up @@ -38,8 +38,8 @@ jobs:
centos-7-amd64,
centos-stream-8-amd64,
centos-stream-9-amd64,
debian-11-bullseye-x86,
debian-12-bookworm-x86,
debian-11-bullseye-amd64,
debian-12-bookworm-amd64,
fedora-37-amd64,
fedora-38-amd64,
gentoo,
Expand Down
63 changes: 19 additions & 44 deletions .github/workflows/test-mingw.yml
Expand Up @@ -21,27 +21,16 @@ concurrency:
jobs:
build:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
mingw: ["MINGW32", "MINGW64"]
include:
- mingw: "MINGW32"
name: "MSYS2 MinGW 32-bit"
package: "mingw-w64-i686"
- mingw: "MINGW64"
name: "MSYS2 MinGW 64-bit"
package: "mingw-w64-x86_64"

defaults:
run:
shell: bash.exe --login -eo pipefail "{0}"
env:
MSYSTEM: ${{ matrix.mingw }}
MSYSTEM: MINGW64
CHERE_INVOKING: 1

timeout-minutes: 30
name: ${{ matrix.name }}
name: "MinGW"

steps:
- name: Checkout Pillow
Expand All @@ -54,26 +43,22 @@ jobs:
- name: Install dependencies
run: |
pacman -S --noconfirm \
${{ matrix.package }}-freetype \
${{ matrix.package }}-gcc \
${{ matrix.package }}-ghostscript \
${{ matrix.package }}-lcms2 \
${{ matrix.package }}-libimagequant \
${{ matrix.package }}-libjpeg-turbo \
${{ matrix.package }}-libraqm \
${{ matrix.package }}-libtiff \
${{ matrix.package }}-libwebp \
${{ matrix.package }}-openjpeg2 \
${{ matrix.package }}-python3-cffi \
${{ matrix.package }}-python3-numpy \
${{ matrix.package }}-python3-olefile \
${{ matrix.package }}-python3-pip \
${{ matrix.package }}-python3-setuptools

if [ ${{ matrix.package }} == "mingw-w64-x86_64" ]; then
pacman -S --noconfirm \
${{ matrix.package }}-python-pyqt6
fi
mingw-w64-x86_64-freetype \
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-ghostscript \
mingw-w64-x86_64-lcms2 \
mingw-w64-x86_64-libimagequant \
mingw-w64-x86_64-libjpeg-turbo \
mingw-w64-x86_64-libraqm \
mingw-w64-x86_64-libtiff \
mingw-w64-x86_64-libwebp \
mingw-w64-x86_64-openjpeg2 \
mingw-w64-x86_64-python3-cffi \
mingw-w64-x86_64-python3-numpy \
mingw-w64-x86_64-python3-olefile \
mingw-w64-x86_64-python3-pip \
mingw-w64-x86_64-python3-setuptools \
mingw-w64-x86_64-python-pyqt6

python3 -m pip install pyroma pytest pytest-cov pytest-timeout

Expand All @@ -93,14 +78,4 @@ jobs:
with:
file: ./coverage.xml
flags: GHA_Windows
name: ${{ matrix.name }}

success:
permissions:
contents: none
needs: build
runs-on: ubuntu-latest
name: MinGW Test Successful
hugovk marked this conversation as resolved.
Show resolved Hide resolved
steps:
- name: Success
run: echo MinGW Test Successful
name: "MSYS2 MinGW"
18 changes: 5 additions & 13 deletions .github/workflows/test-windows.yml
Expand Up @@ -24,18 +24,11 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"]
architecture: ["x86", "x64"]
include:
# PyPy 7.3.4+ only ships 64-bit binaries for Windows
- python-version: "pypy3.9"
architecture: "x64"
- python-version: "pypy3.10"
architecture: "x64"
python-version: ["pypy3.10", "pypy3.9", "3.8", "3.9", "3.10", "3.11", "3.12-dev"]

timeout-minutes: 30

name: Python ${{ matrix.python-version }} ${{ matrix.architecture }}
name: Python ${{ matrix.python-version }}

steps:
- name: Checkout Pillow
Expand All @@ -58,7 +51,6 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.architecture }}
cache: pip
cache-dependency-path: ".github/workflows/test-windows.yml"

Expand Down Expand Up @@ -206,14 +198,14 @@ jobs:
with:
file: ./coverage.xml
flags: GHA_Windows
name: ${{ runner.os }} Python ${{ matrix.python-version }} ${{ matrix.architecture }}
name: ${{ runner.os }} Python ${{ matrix.python-version }}

- name: Build wheel
id: wheel
if: "github.event_name != 'pull_request'"
run: |
mkdir fribidi\${{ matrix.architecture }}
copy winbuild\build\bin\fribidi* fribidi\${{ matrix.architecture }}
mkdir fribidi
copy winbuild\build\bin\fribidi* fribidi
setlocal EnableDelayedExpansion
for %%f in (winbuild\build\license\*) do (
set x=%%~nf
Expand Down
8 changes: 0 additions & 8 deletions Tests/32bit_segfault_check.py

This file was deleted.

5 changes: 0 additions & 5 deletions Tests/check_large_memory.py
@@ -1,5 +1,3 @@
import sys

import pytest

from PIL import Image
Expand All @@ -23,9 +21,6 @@
XDIM = 48000


pytestmark = pytest.mark.skipif(sys.maxsize <= 2**32, reason="requires 64-bit system")


def _write_png(tmp_path, xdim, ydim):
f = str(tmp_path / "temp.png")
im = Image.new("L", (xdim, ydim), 0)
Expand Down
5 changes: 0 additions & 5 deletions Tests/check_large_memory_numpy.py
@@ -1,5 +1,3 @@
import sys

import pytest

from PIL import Image
Expand All @@ -19,9 +17,6 @@
XDIM = 48000


pytestmark = pytest.mark.skipif(sys.maxsize <= 2**32, reason="requires 64-bit system")


def _write_png(tmp_path, xdim, ydim):
dtype = np.uint8
a = np.zeros((xdim, ydim), dtype=dtype)
Expand Down
5 changes: 0 additions & 5 deletions Tests/test_core_resources.py
@@ -1,5 +1,3 @@
import sys

import pytest

from PIL import Image
Expand Down Expand Up @@ -110,9 +108,6 @@ def test_set_blocks_max(self):

with pytest.raises(ValueError):
Image.core.set_blocks_max(-1)
if sys.maxsize < 2**32:
with pytest.raises(ValueError):
Image.core.set_blocks_max(2**29)

@pytest.mark.skipif(is_pypy(), reason="Images not collected")
def test_set_blocks_max_stats(self):
Expand Down
2 changes: 0 additions & 2 deletions Tests/test_file_webp.py
@@ -1,6 +1,5 @@
import io
import re
import sys
import warnings

import pytest
Expand Down Expand Up @@ -145,7 +144,6 @@ def test_write_unsupported_mode_P(self, tmp_path):

self._roundtrip(tmp_path, "P", 50.0)

@pytest.mark.skipif(sys.maxsize <= 2**32, reason="Requires 64-bit system")
def test_write_encoding_error_message(self, tmp_path):
temp_file = str(tmp_path / "temp.webp")
im = Image.new("RGB", (15000, 15000))
Expand Down
5 changes: 1 addition & 4 deletions Tests/test_image_putdata.py
Expand Up @@ -38,10 +38,7 @@ def put(value):
assert put(0xFFFFFFFF) == (255, 255, 255, 255)
assert put(-1) == (255, 255, 255, 255)
assert put(-1) == (255, 255, 255, 255)
if sys.maxsize > 2**32:
assert put(sys.maxsize) == (255, 255, 255, 255)
else:
assert put(sys.maxsize) == (255, 255, 255, 127)
assert put(sys.maxsize) == (255, 255, 255, 255)


def test_pypy_performance():
Expand Down
3 changes: 0 additions & 3 deletions Tests/test_map.py
@@ -1,5 +1,3 @@
import sys

import pytest

from PIL import Image
Expand Down Expand Up @@ -36,7 +34,6 @@ def test_tobytes():
Image.MAX_IMAGE_PIXELS = max_pixels


@pytest.mark.skipif(sys.maxsize <= 2**32, reason="Requires 64-bit system")
def test_ysize():
numpy = pytest.importorskip("numpy", reason="NumPy not installed")

Expand Down
17 changes: 6 additions & 11 deletions docs/installation.rst
Expand Up @@ -285,11 +285,8 @@ Many of Pillow's features require external libraries:

.. tab:: Windows using MSYS2/MinGW

To build Pillow using MSYS2, make sure you run the **MSYS2 MinGW 32-bit** or
**MSYS2 MinGW 64-bit** console, *not* **MSYS2** directly.

The following instructions target the 64-bit build, for 32-bit
replace all occurrences of ``mingw-w64-x86_64-`` with ``mingw-w64-i686-``.
To build Pillow using MSYS2, make sure you run the **MSYS2 MinGW 64-bit** console,
*not* **MSYS2** directly.

Make sure you have Python and GCC installed::

Expand Down Expand Up @@ -339,8 +336,6 @@ Many of Pillow's features require external libraries:
pkg install -y python ndk-sysroot clang make \
libjpeg-turbo

This has been tested within the Termux app on ChromeOS, on x86.

Installing
^^^^^^^^^^

Expand Down Expand Up @@ -451,9 +446,9 @@ These platforms are built and tested for every change.
+----------------------------------+----------------------------+---------------------+
| CentOS Stream 9 | 3.9 | x86-64 |
+----------------------------------+----------------------------+---------------------+
| Debian 11 Bullseye | 3.9 | x86 |
| Debian 11 Bullseye | 3.9 | x86-64 |
+----------------------------------+----------------------------+---------------------+
| Debian 12 Bookworm | 3.11 | x86 |
| Debian 12 Bookworm | 3.11 | x86-64 |
+----------------------------------+----------------------------+---------------------+
| Fedora 37 | 3.11 | x86-64 |
+----------------------------------+----------------------------+---------------------+
Expand All @@ -474,10 +469,10 @@ These platforms are built and tested for every change.
+----------------------------------+----------------------------+---------------------+
| Windows Server 2016 | 3.8 | x86-64 |
+----------------------------------+----------------------------+---------------------+
| Windows Server 2022 | 3.8, 3.9, 3.10, 3.11, | x86, x86-64 |
| Windows Server 2022 | 3.8, 3.9, 3.10, 3.11, | x86-64 |
| | 3.12, PyPy3 | |
| +----------------------------+---------------------+
| | 3.9 (MinGW) | x86, x86-64 |
| | 3.9 (MinGW) | x86-64 |
| +----------------------------+---------------------+
| | 3.8, 3.9 (Cygwin) | x86-64 |
+----------------------------------+----------------------------+---------------------+
Expand Down
5 changes: 5 additions & 0 deletions docs/releasenotes/10.0.0.rst
Expand Up @@ -4,6 +4,11 @@
Backwards Incompatible Changes
==============================

32-bit support
^^^^^^^^^^^^^^

32-bit architecture is no longer supported and 32-bit wheels are no longer provided.

Categories
^^^^^^^^^^

Expand Down
20 changes: 7 additions & 13 deletions setup.py
Expand Up @@ -153,16 +153,13 @@ def _find_library_dirs_ldconfig():

ldconfig = "ldconfig" if shutil.which("ldconfig") else "/sbin/ldconfig"
if sys.platform.startswith("linux") or sys.platform.startswith("gnu"):
if struct.calcsize("l") == 4:
machine = os.uname()[4] + "-32"
else:
machine = os.uname()[4] + "-64"
machine = os.uname()[4]
mach_map = {
"x86_64-64": "libc6,x86-64",
"ppc64-64": "libc6,64bit",
"sparc64-64": "libc6,64bit",
"s390x-64": "libc6,64bit",
"ia64-64": "libc6,IA-64",
"x86_64": "libc6,x86-64",
"ppc64": "libc6,64bit",
"sparc64": "libc6,64bit",
"s390x": "libc6,64bit",
"ia64": "libc6,IA-64",
}
abi_type = mach_map.get(machine, "libc6")

Expand Down Expand Up @@ -584,10 +581,7 @@ def build_extensions(self):
# user libs are at $PREFIX/lib
_add_directory(
library_dirs,
os.path.join(
os.environ["ANDROID_ROOT"],
"lib" if struct.calcsize("l") == 4 else "lib64",
),
os.path.join(os.environ["ANDROID_ROOT"], "lib64"),
)

elif sys.platform.startswith("netbsd"):
Expand Down
2 changes: 1 addition & 1 deletion src/libImaging/ImagingUtils.h
Expand Up @@ -30,7 +30,7 @@
/* This is to work around a bug in GCC prior 4.9 in 64 bit mode.
GCC generates code with partial dependency which is 3 times slower.
See: https://stackoverflow.com/a/26588074/253146 */
#if defined(__x86_64__) && defined(__SSE__) && !defined(__NO_INLINE__) && \
#if defined(__SSE__) && !defined(__NO_INLINE__) && \
!defined(__clang__) && defined(GCC_VERSION) && (GCC_VERSION < 40900)
static float __attribute__((always_inline)) inline _i2f(int v) {
float x;
Expand Down
6 changes: 3 additions & 3 deletions winbuild/build.rst
Expand Up @@ -27,7 +27,7 @@ Download and install:
* `Ninja <https://ninja-build.org/>`_
(optional, use ``--nmake`` if not available; bundled in Visual Studio CMake component)

* x86/x64: `Netwide Assembler (NASM) <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_
* x64: `Netwide Assembler (NASM) <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_

Any version of Visual Studio 2017 or newer should be supported,
including Visual Studio 2017 Community, or Build Tools for Visual Studio 2019.
Expand All @@ -42,7 +42,7 @@ Run ``build_prepare.py`` to configure the build::

usage: winbuild\build_prepare.py [-h] [-v] [-d PILLOW_BUILD]
[--depends PILLOW_DEPS]
[--architecture {x86,x64,ARM64}]
[--architecture {x64,ARM64}]
[--python PYTHON] [--executable EXECUTABLE]
[--nmake] [--no-imagequant] [--no-fribidi]

Expand All @@ -56,7 +56,7 @@ Run ``build_prepare.py`` to configure the build::
--depends PILLOW_DEPS
directory used to store cached dependencies (default:
'winbuild\depends')
--architecture {x86,x64,ARM64}
--architecture {x64,ARM64}
build architecture (default: same as host Python)
--python PYTHON Python install directory (default: use host Python)
--executable EXECUTABLE
Expand Down