diff --git a/.github/mergify.yml b/.github/mergify.yml index 9bb089615..26a401798 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -7,7 +7,7 @@ pull_request_rules: - status-success=Test Successful - status-success=Docker Test Successful - status-success=Windows Test Successful - - status-success=MinGW + - status-success=MSYS2 Test Successful - status-success=Cygwin Test Successful actions: merge: diff --git a/.github/workflows/test-mingw.yml b/.github/workflows/test-mingw.yml deleted file mode 100644 index bb6d7dc37..000000000 --- a/.github/workflows/test-mingw.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Test MinGW - -on: - push: - branches: - - "**" - paths-ignore: - - ".github/workflows/docs.yml" - - ".github/workflows/wheels*" - - ".gitmodules" - - "docs/**" - - "wheels/**" - pull_request: - paths-ignore: - - ".github/workflows/docs.yml" - - ".github/workflows/wheels*" - - ".gitmodules" - - "docs/**" - - "wheels/**" - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - COVERAGE_CORE: sysmon - -jobs: - build: - runs-on: windows-latest - - defaults: - run: - shell: bash.exe --login -eo pipefail "{0}" - env: - MSYSTEM: MINGW64 - CHERE_INVOKING: 1 - - timeout-minutes: 30 - name: "MinGW" - - steps: - - name: Checkout Pillow - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Set up shell - run: echo "C:\msys64\usr\bin\" >> $env:GITHUB_PATH - shell: pwsh - - - name: Install dependencies - run: | - pacman -S --noconfirm \ - 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-python-numpy \ - mingw-w64-x86_64-python-olefile \ - mingw-w64-x86_64-python-pip \ - mingw-w64-x86_64-python-pytest \ - mingw-w64-x86_64-python-pytest-cov \ - mingw-w64-x86_64-python-pytest-timeout \ - mingw-w64-x86_64-python-pyqt6 - - pushd depends && ./install_extra_test_images.sh && popd - - - name: Build Pillow - run: CFLAGS="-coverage" python3 -m pip install . - - - name: Test Pillow - run: | - python3 selftest.py --installed - .ci/test.sh - - - name: Upload coverage - uses: codecov/codecov-action@v5 - with: - files: ./coverage.xml - flags: GHA_Windows - name: "MSYS2 MinGW" - token: ${{ secrets.CODECOV_ORG_TOKEN }} diff --git a/.github/workflows/test-msys2.yml b/.github/workflows/test-msys2.yml new file mode 100644 index 000000000..87e945576 --- /dev/null +++ b/.github/workflows/test-msys2.yml @@ -0,0 +1,115 @@ +name: Test MSYS2 + +on: + push: + branches: + - "**" + paths-ignore: + - ".github/workflows/docs.yml" + - ".github/workflows/wheels*" + - ".gitmodules" + - "docs/**" + - "wheels/**" + pull_request: + paths-ignore: + - ".github/workflows/docs.yml" + - ".github/workflows/wheels*" + - ".gitmodules" + - "docs/**" + - "wheels/**" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + COVERAGE_CORE: sysmon + +jobs: + build: + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + include: + # skip to save CI time: + # see https://github.com/python-pillow/Pillow/pull/6888#issuecomment-1400392821 + # - msystem: "UCRT64" + - msystem: "CLANG64" + - msystem: "MINGW64" + defaults: + run: + shell: bash.exe --login -eo pipefail "{0}" + env: + MSYSTEM: ${{ matrix.msystem }} + CHERE_INVOKING: 1 + + timeout-minutes: 30 + name: MSYS2 ${{ matrix.msystem }} + + steps: + - name: Checkout Pillow + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Set up shell + run: echo "C:\msys64\usr\bin\" >> $env:GITHUB_PATH + shell: pwsh + + - name: Install dependencies + run: | + pacman -S --noconfirm \ + make \ + pactoys \ + subversion + + pacboy -S --noconfirm \ + freetype:p \ + gcc:p \ + ghostscript:p \ + lcms2:p \ + libimagequant:p \ + libjpeg-turbo:p \ + libraqm:p \ + libtiff:p \ + libwebp:p \ + openjpeg2:p \ + python-numpy:p \ + python-olefile:p \ + python-pip:p \ + python-pyqt6:p + + python3 -m pip install pyroma pytest pytest-cov pytest-timeout + + pushd depends && ./install_extra_test_images.sh && popd + + - name: Build Pillow + run: .ci/build.sh + + - name: Test Pillow + run: .ci/test.sh + + - name: After success + run: .ci/after_success.sh + + - name: Upload coverage + uses: codecov/codecov-action@v5 + with: + files: ./coverage.xml + flags: GHA_Windows + name: MSYS2 ${{ matrix.msystem }} + + success: + permissions: + contents: none + needs: build + runs-on: ubuntu-latest + name: MSYS2 Test Successful + steps: + - name: Success + run: echo MSYS2 Test Successful diff --git a/docs/installation/building-from-source.rst b/docs/installation/building-from-source.rst index 2790bc2e6..ab54d3ef0 100644 --- a/docs/installation/building-from-source.rst +++ b/docs/installation/building-from-source.rst @@ -162,32 +162,44 @@ 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 are for the **MSYS2 UCRT64** system. + To build Pillow on one of the other MSYS2 systems, replace all occurences of + ``mingw-w64-ucrt-x86_64`` with the corresponding prefix: - The following instructions target the 64-bit build, for 32-bit - replace all occurrences of ``mingw-w64-x86_64-`` with ``mingw-w64-i686-``. + .. list-table:: + :header-rows: 1 + + * - MSYS2 system + - Package prefix + * - **UCRT64** + - ``mingw-w64-ucrt-x86_64`` + * - **CLANG64** + - ``mingw-w64-clang-x86_64`` + * - **MINGW64** + - ``mingw-w64-x86_64`` + + Installing in **MSYS2 MSYS** is not supported. Make sure you have Python and GCC installed:: pacman -S \ - mingw-w64-x86_64-gcc \ - mingw-w64-x86_64-python3 \ - mingw-w64-x86_64-python3-pip \ - mingw-w64-x86_64-python3-setuptools + mingw-w64-ucrt-x86_64-gcc \ + mingw-w64-ucrt-x86_64-python3 \ + mingw-w64-ucrt-x86_64-python3-pip \ + mingw-w64-ucrt-x86_64-python3-setuptools - Prerequisites are installed on **MSYS2 MinGW 64-bit** with:: + Prerequisites are installed on **MSYS2 UCRT64** with:: pacman -S \ - mingw-w64-x86_64-libjpeg-turbo \ - mingw-w64-x86_64-zlib \ - mingw-w64-x86_64-libtiff \ - mingw-w64-x86_64-freetype \ - mingw-w64-x86_64-lcms2 \ - mingw-w64-x86_64-libwebp \ - mingw-w64-x86_64-openjpeg2 \ - mingw-w64-x86_64-libimagequant \ - mingw-w64-x86_64-libraqm + mingw-w64-ucrt-x86_64-libjpeg-turbo \ + mingw-w64-ucrt-x86_64-zlib \ + mingw-w64-ucrt-x86_64-libtiff \ + mingw-w64-ucrt-x86_64-freetype \ + mingw-w64-ucrt-x86_64-lcms2 \ + mingw-w64-ucrt-x86_64-libwebp \ + mingw-w64-ucrt-x86_64-openjpeg2 \ + mingw-w64-ucrt-x86_64-libimagequant \ + mingw-w64-ucrt-x86_64-libraqm .. tab:: FreeBSD diff --git a/docs/installation/platform-support.rst b/docs/installation/platform-support.rst index 9eafad3c4..cde2a3750 100644 --- a/docs/installation/platform-support.rst +++ b/docs/installation/platform-support.rst @@ -53,7 +53,7 @@ These platforms are built and tested for every change. | Windows Server 2022 | 3.10, 3.11, 3.12, 3.13, | x86-64 | | | PyPy3 | | | +----------------------------+---------------------+ -| | 3.12 (MinGW) | x86-64 | +| | 3.12 (CLANG64, MINGW64) | x86-64 | | +----------------------------+---------------------+ | | 3.9 (Cygwin) | x86-64 | +----------------------------------+----------------------------+---------------------+