[
https://issues.apache.org/jira/browse/THRIFT-6373?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-6373.
--------------------------------
Fix Version/s: 0.26.0
Resolution: Fixed
> Move the AppVeyor MINGW job to UCRT64, as MSYS2 phases out MINGW64
> ------------------------------------------------------------------
>
> Key: THRIFT-6373
> URL: https://issues.apache.org/jira/browse/THRIFT-6373
> Project: Thrift
> Issue Type: Improvement
> Components: Build Process
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Major
> Fix For: 0.26.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> The MINGW job in {{appveyor.yml}} builds the compiler and the C++ library
> with the MINGW64 toolchain of MSYS2:
> {{build/appveyor/MINGW-appveyor-full.bat}} installs the
> {{mingw-w64-x86_64-...}} packages and compiles with {{/mingw64/bin/gcc.exe}}.
> MSYS2 announced on 2026-03-15 that it is phasing out that environment ([MSYS2
> news|https://www.msys2.org/news/#2026-03-15-deprecating-the-mingw64-environment]):
> {quote}
> As support for Windows 8.1 has been dropped, there is no longer a need for
> non-UCRT environments such as MINGW64. Consequently, we are beginning to
> phase out the MINGW64 environment. To start, no new packages will be added to
> this environment, and existing leaf packages may be removed if issues arise.
> If you are currently relying on the MINGW64 environment, please consider
> switching to UCRT64 or CLANG64 instead.
> {quote}
> The announcement gives no end date. The job depends on the environment in two
> ways:
> * It builds with MINGW64 packages: the toolchain, Boost, CMake, libevent,
> OpenSSL and zlib.
> * Before building, it upgrades every MSYS2 package preinstalled on the
> AppVeyor image with two {{pacman -Syu}} calls. Besides the MSYS packages,
> that covers the image's MINGW64 and MINGW32 packages. MSYS2 is shrinking
> MINGW32 as well: its repository lists 237 packages today, against 2617 for
> MINGW64. When MSYS2 drops a package that the image has installed and that
> requires an exact version of another package, the upgrade fails, and the job
> goes red before it compiles anything.
> The second case has just happened, in MINGW32. gdb 18.1 no longer builds
> {{mingw-w64-i686-gdb-multiarch}}
> ([msys2/MINGW-packages@12db8b1|https://github.com/msys2/MINGW-packages/commit/12db8b115506331f5ca36eee23293e37185df001]).
> The image has version 16.3 of it installed, which requires exactly
> {{mingw-w64-i686-gdb=16.3}}. Every AppVeyor build from
> [54792483|https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/builds/54792483]
> (2026-09-26 20:09 UTC) to
> [54792634|https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/builds/54792634]
> failed in the MINGW job with:
> {noformat}
> error: failed to prepare transaction (could not satisfy dependencies)
> :: installing mingw-w64-i686-gdb (18.1-1) breaks dependency
> 'mingw-w64-i686-gdb=16.3' required by mingw-w64-i686-gdb-multiarch
> {noformat}
> MSYS2 has since declared a conflict between the i686 gdb and the dropped
> package (gdb 18.1-3,
> [e3284a3|https://github.com/msys2/MINGW-packages/commit/e3284a3132495dc4c5c2a86eeed57ee1e32c2ac4]
> and
> [16177c9|https://github.com/msys2/MINGW-packages/commit/16177c95b5cda7d0bc0e00606e5c896ffaff01b3]).
> MSYS2's pacman answers "yes" by default when it asks whether to remove a
> conflicting package, so under {{--noconfirm}} the upgrade should now remove
> the orphan and continue. No AppVeyor build has confirmed that yet.
> h3. Proposed action
> # Build the x64 MINGW job in UCRT64. Install the UCRT64 packages
> ({{mingw-w64-ucrt-x86_64-toolchain}}, {{mingw-w64-ucrt-x86_64-boost}} and so
> on), put {{/ucrt64/bin}} first on the PATH, and point CMake at
> {{/ucrt64/bin/gcc.exe}}, {{/ucrt64/bin/g++.exe}} and
> {{/ucrt64/bin/mingw32-make.exe}}, with {{OPENSSL_ROOT_DIR=/ucrt64}}. UCRT64
> carries the same versions of everything the job needs: GCC 16.2.0, Boost
> 1.92.0, CMake 4.4.3, libevent 2.1.13, OpenSSL 3.6.4 and zlib 1.3.2. The
> package list also names {{mingw-w64-x86_64-toolchain}} explicitly; that entry
> goes. An x86 build, which the matrix does not have, would stay in MINGW32,
> the only 32-bit environment MSYS2 has left.
> # Stop upgrading the MINGW64 and MINGW32 packages, which the x64 job then no
> longer uses, by passing {{--ignore}} patterns for both environments to the
> two {{pacman -Syu}} calls. The script already passes {{%IGNORE%}} to them,
> currently empty. This takes both shrinking environments out of the job's path
> and shortens the download: about 250 of the 415 MiB in the last green run
> were upgrades in these two environments.
> # Update {{build/cmake/README-MSYS2.md}}, which also tells users to build in
> MINGW64. This should be a separate change, because the file is out of date
> beyond that: it passes {{WITH_SHARED_LIB}}, {{WITH_STATIC_LIB}} and
> {{WITH_PERL}}, which no longer exist, and it says that libevent does not
> work, while the CI job builds with libevent.
> {{build/appveyor/MSYS-appveyor-full.bat}} installs MINGW64 packages as well,
> but no job uses it, and it exits before reaching them.
> To check the change: the MINGW job still builds the compiler and the C++
> library with OpenSSL, libevent and ZLIB, and passes all 57 tests, as the last
> green run on master did
> ([54792478|https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/builds/54792478/job/krn1yf179yfspowm],
> 35 minutes).
> _Drafted with AI assistance (Claude Opus 5.5)._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)