Skip to content

Migrate the SDK from MINGW64 to UCRT64#117

Draft
dscho wants to merge 28 commits into
mainfrom
ucrt64
Draft

Migrate the SDK from MINGW64 to UCRT64#117
dscho wants to merge 28 commits into
mainfrom
ucrt64

Conversation

@dscho

@dscho dscho commented Jun 6, 2026

Copy link
Copy Markdown
Member

MSYS2 deprecated MINGW64 a while back; new packages no longer get accepted there, and updates of the ones we already ship have been winding down. The SDK has to move over to UCRT64 before what we ship there starts to bit-rot.

This branch only adds the piece that kicks the move off: a workflow that runs inside this PR, pulls in the UCRT64 equivalent of every MINGW64 package we currently have installed, and then takes the old MINGW64 and MINGW32 packages back out. The PR is a draft so the resulting commits can be looked at before any of it lands on main.

The plan was sketched in git-for-windows/git#6018 (reply in thread).

@dscho dscho self-assigned this Jun 6, 2026
MSYS2 has deprecated MINGW64. Upstream no longer accepts new packages
targeting that environment and is winding down updates for the ones we
already ship, so anything we do not migrate is going to rot in place.
UCRT64 is the supported successor for the x86_64 target, and Git for
Windows therefore has to follow.

Rather than spin up a separate `git-sdk-ucrt-64` repository just for the
new environment, we want to keep everything in this repo and make the
cutover happen on a `ucrt64` branch that eventually becomes `main`. To
produce the converted tree without running `pacman` manually, many
times, and committing the resulting churn, this commit adds a one-shot
workflow that performs exactly that work inside the PR opened from the
`ucrt64` branch: it installs the UCRT64 counterpart of every
currently-installed MINGW64 package, then uninstalls every MINGW64
package, then uninstalls every MINGW32 package. Each phase becomes one
giant commit like the ones produced by the `sync` workflow.

This approach was brain-stormed and documented in
git-for-windows/git#6018 (reply in thread).

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Git for Windows Build Agent added 3 commits June 6, 2026 20:45
Installed UCRT64 packages:
    mingw-w64-ucrt-x86_64-7zip
    mingw-w64-ucrt-x86_64-antiword
    mingw-w64-ucrt-x86_64-asciidoctor
    mingw-w64-ucrt-x86_64-binutils
    mingw-w64-ucrt-x86_64-brotli
    mingw-w64-ucrt-x86_64-bzip2
    mingw-w64-ucrt-x86_64-c-ares
    mingw-w64-ucrt-x86_64-ca-certificates
    mingw-w64-ucrt-x86_64-connect
    mingw-w64-ucrt-x86_64-crt
    mingw-w64-ucrt-x86_64-curl-winssl
    mingw-w64-ucrt-x86_64-expat
    mingw-w64-ucrt-x86_64-gcc
    mingw-w64-ucrt-x86_64-gcc-libs
    mingw-w64-ucrt-x86_64-gdb
    mingw-w64-ucrt-x86_64-gdbm
    mingw-w64-ucrt-x86_64-gettext-libtextstyle
    mingw-w64-ucrt-x86_64-gettext-runtime
    mingw-w64-ucrt-x86_64-gettext-tools
    mingw-w64-ucrt-x86_64-git
    mingw-w64-ucrt-x86_64-git-credential-wincred
    mingw-w64-ucrt-x86_64-git-doc-html
    mingw-w64-ucrt-x86_64-git-for-windows-addons
    mingw-w64-ucrt-x86_64-git-gui
    mingw-w64-ucrt-x86_64-git-lfs
    mingw-w64-ucrt-x86_64-git-perl
    mingw-w64-ucrt-x86_64-git-send-email
    mingw-w64-ucrt-x86_64-git-subtree
    mingw-w64-ucrt-x86_64-git-svn
    mingw-w64-ucrt-x86_64-gitk
    mingw-w64-ucrt-x86_64-gmp
    mingw-w64-ucrt-x86_64-gnutls
    mingw-w64-ucrt-x86_64-headers
    mingw-w64-ucrt-x86_64-isl
    mingw-w64-ucrt-x86_64-libb2
    mingw-w64-ucrt-x86_64-libffi
    mingw-w64-ucrt-x86_64-libiconv
    mingw-w64-ucrt-x86_64-libidn2
    mingw-w64-ucrt-x86_64-libmangle
    mingw-w64-ucrt-x86_64-libpsl
    mingw-w64-ucrt-x86_64-libssh2-wincng
    mingw-w64-ucrt-x86_64-libsystre
    mingw-w64-ucrt-x86_64-libtasn1
    mingw-w64-ucrt-x86_64-libtre
    mingw-w64-ucrt-x86_64-libunistring
    mingw-w64-ucrt-x86_64-libwinpthread
    mingw-w64-ucrt-x86_64-libyaml
    mingw-w64-ucrt-x86_64-libzip
    mingw-w64-ucrt-x86_64-mpc
    mingw-w64-ucrt-x86_64-mpdecimal
    mingw-w64-ucrt-x86_64-mpfr
    mingw-w64-ucrt-x86_64-ncurses
    mingw-w64-ucrt-x86_64-nettle
    mingw-w64-ucrt-x86_64-nghttp2
    mingw-w64-ucrt-x86_64-odt2txt
    mingw-w64-ucrt-x86_64-openssl
    mingw-w64-ucrt-x86_64-osslsigncode
    mingw-w64-ucrt-x86_64-p11-kit
    mingw-w64-ucrt-x86_64-pcre
    mingw-w64-ucrt-x86_64-pcre2
    mingw-w64-ucrt-x86_64-pkgconf
    mingw-w64-ucrt-x86_64-python
    mingw-w64-ucrt-x86_64-readline
    mingw-w64-ucrt-x86_64-ruby
    mingw-w64-ucrt-x86_64-sqlite3
    mingw-w64-ucrt-x86_64-tcl
    mingw-w64-ucrt-x86_64-termcap
    mingw-w64-ucrt-x86_64-tk
    mingw-w64-ucrt-x86_64-tools
    mingw-w64-ucrt-x86_64-tzdata
    mingw-w64-ucrt-x86_64-windows-default-manifest
    mingw-w64-ucrt-x86_64-wineditline
    mingw-w64-ucrt-x86_64-winpthreads
    mingw-w64-ucrt-x86_64-xxhash
    mingw-w64-ucrt-x86_64-xz
    mingw-w64-ucrt-x86_64-zlib
    mingw-w64-ucrt-x86_64-zstd

No UCRT64 counterpart in the configured Pacman repositories (skipped):
    mingw-w64-x86_64-busybox
    mingw-w64-x86_64-curl-openssl-alternate
    mingw-w64-x86_64-cv2pdb
    mingw-w64-x86_64-git-credential-manager
    mingw-w64-x86_64-git-extra
    mingw-w64-x86_64-wintoast
    mingw-w64-x86_64-xpdf-tools

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
Removed MINGW64 packages:
    mingw-w64-x86_64-7zip
    mingw-w64-x86_64-antiword
    mingw-w64-x86_64-asciidoctor
    mingw-w64-x86_64-binutils
    mingw-w64-x86_64-brotli
    mingw-w64-x86_64-busybox
    mingw-w64-x86_64-bzip2
    mingw-w64-x86_64-c-ares
    mingw-w64-x86_64-ca-certificates
    mingw-w64-x86_64-connect
    mingw-w64-x86_64-crt
    mingw-w64-x86_64-curl-openssl-alternate
    mingw-w64-x86_64-curl-winssl
    mingw-w64-x86_64-cv2pdb
    mingw-w64-x86_64-expat
    mingw-w64-x86_64-gcc
    mingw-w64-x86_64-gcc-libs
    mingw-w64-x86_64-gdb
    mingw-w64-x86_64-gdbm
    mingw-w64-x86_64-gettext-libtextstyle
    mingw-w64-x86_64-gettext-runtime
    mingw-w64-x86_64-gettext-tools
    mingw-w64-x86_64-git
    mingw-w64-x86_64-git-credential-manager
    mingw-w64-x86_64-git-credential-wincred
    mingw-w64-x86_64-git-doc-html
    mingw-w64-x86_64-git-extra
    mingw-w64-x86_64-git-gui
    mingw-w64-x86_64-git-lfs
    mingw-w64-x86_64-git-perl
    mingw-w64-x86_64-git-send-email
    mingw-w64-x86_64-git-subtree
    mingw-w64-x86_64-git-svn
    mingw-w64-x86_64-gitk
    mingw-w64-x86_64-gmp
    mingw-w64-x86_64-gnutls
    mingw-w64-x86_64-headers
    mingw-w64-x86_64-isl
    mingw-w64-x86_64-libb2
    mingw-w64-x86_64-libffi
    mingw-w64-x86_64-libiconv
    mingw-w64-x86_64-libidn2
    mingw-w64-x86_64-libmangle
    mingw-w64-x86_64-libpsl
    mingw-w64-x86_64-libssh2-wincng
    mingw-w64-x86_64-libsystre
    mingw-w64-x86_64-libtasn1
    mingw-w64-x86_64-libtre
    mingw-w64-x86_64-libunistring
    mingw-w64-x86_64-libwinpthread
    mingw-w64-x86_64-libyaml
    mingw-w64-x86_64-libzip
    mingw-w64-x86_64-mpc
    mingw-w64-x86_64-mpdecimal
    mingw-w64-x86_64-mpfr
    mingw-w64-x86_64-ncurses
    mingw-w64-x86_64-nettle
    mingw-w64-x86_64-nghttp2
    mingw-w64-x86_64-odt2txt
    mingw-w64-x86_64-openssl
    mingw-w64-x86_64-osslsigncode
    mingw-w64-x86_64-p11-kit
    mingw-w64-x86_64-pcre
    mingw-w64-x86_64-pcre2
    mingw-w64-x86_64-pkgconf
    mingw-w64-x86_64-python
    mingw-w64-x86_64-readline
    mingw-w64-x86_64-ruby
    mingw-w64-x86_64-sqlite3
    mingw-w64-x86_64-tcl
    mingw-w64-x86_64-termcap
    mingw-w64-x86_64-tk
    mingw-w64-x86_64-tools
    mingw-w64-x86_64-tzdata
    mingw-w64-x86_64-windows-default-manifest
    mingw-w64-x86_64-wineditline
    mingw-w64-x86_64-winpthreads
    mingw-w64-x86_64-wintoast
    mingw-w64-x86_64-xpdf-tools
    mingw-w64-x86_64-xxhash
    mingw-w64-x86_64-xz
    mingw-w64-x86_64-zlib
    mingw-w64-x86_64-zstd

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
Removed MINGW32 packages:
    mingw-w64-i686-asciidoctor
    mingw-w64-i686-binutils
    mingw-w64-i686-brotli
    mingw-w64-i686-bzip2
    mingw-w64-i686-c-ares
    mingw-w64-i686-ca-certificates
    mingw-w64-i686-crt
    mingw-w64-i686-curl-openssl-alternate
    mingw-w64-i686-curl-winssl
    mingw-w64-i686-cv2pdb
    mingw-w64-i686-expat
    mingw-w64-i686-gcc
    mingw-w64-i686-gcc-libs
    mingw-w64-i686-gdb
    mingw-w64-i686-gdbm
    mingw-w64-i686-gettext-libtextstyle
    mingw-w64-i686-gettext-runtime
    mingw-w64-i686-gettext-tools
    mingw-w64-i686-gmp
    mingw-w64-i686-headers
    mingw-w64-i686-isl
    mingw-w64-i686-libb2
    mingw-w64-i686-libffi
    mingw-w64-i686-libiconv
    mingw-w64-i686-libidn2
    mingw-w64-i686-libmangle
    mingw-w64-i686-libpsl
    mingw-w64-i686-libssh2-wincng
    mingw-w64-i686-libsystre
    mingw-w64-i686-libtasn1
    mingw-w64-i686-libtre
    mingw-w64-i686-libunistring
    mingw-w64-i686-libwinpthread
    mingw-w64-i686-libyaml
    mingw-w64-i686-make
    mingw-w64-i686-mpc
    mingw-w64-i686-mpdecimal
    mingw-w64-i686-mpfr
    mingw-w64-i686-ncurses
    mingw-w64-i686-nghttp2
    mingw-w64-i686-openssl
    mingw-w64-i686-p11-kit
    mingw-w64-i686-pcre
    mingw-w64-i686-pcre2
    mingw-w64-i686-pkgconf
    mingw-w64-i686-python
    mingw-w64-i686-readline
    mingw-w64-i686-ruby
    mingw-w64-i686-sqlite3
    mingw-w64-i686-tcl
    mingw-w64-i686-termcap
    mingw-w64-i686-tk
    mingw-w64-i686-tools
    mingw-w64-i686-tzdata
    mingw-w64-i686-windows-default-manifest
    mingw-w64-i686-wineditline
    mingw-w64-i686-winpthreads
    mingw-w64-i686-xxhash
    mingw-w64-i686-xz
    mingw-w64-i686-zlib
    mingw-w64-i686-zstd

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown

The following MINGW64 packages have no UCRT64 counterpart in the configured Pacman repositories and were skipped:

mingw-w64-x86_64-busybox
mingw-w64-x86_64-curl-openssl-alternate
mingw-w64-x86_64-cv2pdb
mingw-w64-x86_64-git-credential-manager
mingw-w64-x86_64-git-extra
mingw-w64-x86_64-wintoast
mingw-w64-x86_64-xpdf-tools

@dscho

dscho commented Jun 6, 2026

Copy link
Copy Markdown
Member Author

@rimrul here's something to play with ;-)

@dscho

dscho commented Jun 7, 2026

Copy link
Copy Markdown
Member Author

The following MINGW64 packages have no UCRT64 counterpart in the configured Pacman repositories and were skipped:
[...]

Before we can build those, there are a lot of loose ends to address even with this:

  • adapt the setup-git-for-windows-sdk Action so that it can handle the "architecture" ucrt64 (checking out that branch instead of main, skipping the fast path for minimal/build-installers flavors because there is no pre-built artifact to download)
  • initialize the UCRT64-only Pacman database (= new file in the x86_64 branch of git-for-windows/pacman-repo)
  • adjust git-extra so that it adds the UCRT64-only Pacman database in x86_64 Git SDKs (or maybe only in the ucrt-x86_64 variant?)
  • build tons of packages, not only the ones listed in the previous comment (basically, all the mingw-w64-* ones listed in GitHub - git-for-windows/pacman-repo at x86_64)
  • hook up ucrt64 into the build-and-deploy and git-installers automation
  • test, test, test
  • audit where else in Git for Windows' automation ucrt64 needs to be handled specially
  • start building snapshots so that helpful contributors can beta-test
  • everything else I forgot to list here 😉

dscho added 3 commits June 7, 2026 18:53
Now that the SDK is being converted to UCRT64, the minimal-sdk
sparse-checkout definition has to follow: every path that previously
lived under `/mingw64/` is now under `/ucrt64/`. The MSYS2 GCC triple
(`x86_64-w64-mingw32`) and the subdirectory names below it
(`lib/gcc/...`, the toolchain `bin/`/`lib/`/`include/` tree) are
unchanged, so a plain `/mingw64/` -> `/ucrt64/` rename is enough here.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The bulk of this file is a straight `/mingw64/` -> `/ucrt64/`
substitution, just like the minimal-sdk definition that just got
adjusted.

Two MSYS2 naming differences need separate handling for the
asciidoctor/Ruby block, however: the Ruby DLL in the UCRT64
environment is `x64-ucrt-ruby<ver>.dll` rather than the MSVCRT-flavored
`x64-msvcrt-ruby<ver>.dll`, and the per-arch subdirectory that Ruby
uses for native extensions is `x64-mingw-ucrt/` rather than
`x64-mingw32/`. Both of those have to be renamed in tandem with the
top-level path, otherwise the sparse checkout would silently skip the
Ruby pieces that asciidoctor depends on.

`cv2pdb` is still referenced under `/ucrt64/bin/`, even though it
currently lacks a UCRT64 counterpart (it's on the skipped-packages
list posted by the conversion workflow). That's fine for a
sparse-checkout file: it only selects what to materialize once such a
package is built and added to the SDK.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This file selects exactly the `/mingw32/` paths needed to build the
32-bit `mingw-w64-git` package out of a partial SDK clone. With the
move to UCRT64 we also drop the entire MINGW32 (i686) flavor; there is
no UCRT64 i686 environment, and the third conversion commit removes
every `mingw-w64-i686-*` package outright. The sparse definition can
no longer materialize anything useful, so retire it rather than leave a
file that points at directories that will never reappear.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit that referenced this pull request Jun 7, 2026
The PR opened from this branch (#117) keeps diverging from `main` (the
package-sync commits keep landing there, and the conversion commits
keep removing the MINGW64 tree here), so the merge commit GitHub
builds for the `pull_request` event is `DIRTY` most of the time. While
in that state, GitHub skips the `pull_request` workflow dispatch
entirely, which means `ci-artifacts` no longer runs against the PR
head and we lose all signal about whether the converted SDK still
builds Git.

Adding `ucrt64` to the workflow's `push` trigger sidesteps that:
pushes to the branch run the workflow directly, without going through
a synthetic merge commit, so the build/test matrix stays exercised
until the branch is finally merged.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit that referenced this pull request Jun 7, 2026
Same reasoning as the matching change to `ci-artifacts.yml`: while the
PR opened from this branch (#117) is in a `DIRTY` merge state, GitHub
refuses to dispatch `pull_request` events, so the DLL check no longer
runs against the PR head. Listing `ucrt64` under the `push` trigger
restores coverage directly from the branch tip.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to git-for-windows/setup-git-for-windows-sdk that referenced this pull request Jun 7, 2026
The `test` job of `build-test` is the only PR-time gate that actually
runs this Action on a clean Windows runner and pokes at the result;
the matrix-based smoke test in `matrix.yml` only fires on manual
dispatch. So far that gate has only covered the historical default
combination (`flavor: minimal`, `architecture: x86_64`), which means
any regression on the new `ucrt64` axis would slip through CI and
only surface in a consumer repository.

Turn the job into a matrix that adds `architecture: ucrt64` next to
the existing `x86_64` row, with `flavor: full` for the UCRT64 entry
because that is the only flavor wired up end-to-end at this point
(the subset flavors still depend on follow-up work in `build-extra`
and on the `ci-artifacts` pipeline of `git-sdk-64`, tracked in
git-for-windows/git-sdk-64#117 (comment)).

The verification step's previously hard-coded `/mingw64/bin/gcc`
becomes `$MINGW_PREFIX/bin/gcc`, with `MINGW_PREFIX` injected from
the matrix so it picks up `/mingw64` for the `x86_64` row and
`/ucrt64` for the `ucrt64` row. The name follows the MSYS2 ecosystem
convention for the per-environment path, which is the same variable
the SDK's own shell profile exports.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho dscho force-pushed the ucrt64 branch 2 times, most recently from 0863902 to 927e526 Compare June 7, 2026 21:45
dscho added a commit to git-for-windows/setup-git-for-windows-sdk that referenced this pull request Jun 8, 2026
Now that the preceding commits have actually taught the Action about
the `ucrt64` axis, document it in AGENTS.md so the institutional
description there matches the code. Add a row to the architecture
table covering repository, MSYSTEM, mingw bin path, and current
limitations, plus a follow-up paragraph that points at
git-for-windows/git-sdk-64#117 and
git-for-windows/git-sdk-64#117 (comment)
for the larger migration context.

Mention in the relationship section that `git-sdk-64` now carries the
extra long-lived `ucrt64` branch and that no UCRT64 asset exists in
the `ci-artifacts` release, which is why the fast path is forcibly
suppressed for that axis.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to git-for-windows/setup-git-for-windows-sdk that referenced this pull request Jun 8, 2026
The manually-triggered `test all artifact flavors` workflow is the
closest thing this repository has to an end-to-end smoke test that
actually downloads an SDK and runs in-place. Without an entry for the
new `ucrt64` axis it would silently keep verifying only the MINGW64
and MINGW32 paths, leaving regressions on the UCRT64 path to surface
only in consumer repositories.

Add a single `flavor: full, architecture: ucrt64` row via `include`,
because that is the only combination wired up end-to-end at this
point: the subset flavors still depend on `please.sh create-sdk-artifact`
in `build-extra` learning `--architecture=ucrt64` and on a UCRT64
asset appearing in the `ci-artifacts` release of `git-sdk-64`, both
tracked in
git-for-windows/git-sdk-64#117 (comment).
The build-installer step keys off `matrix.flavor == 'build-installers'`
and is therefore skipped for the new row, which is exactly what we
want.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to git-for-windows/setup-git-for-windows-sdk that referenced this pull request Jun 8, 2026
The `test` job of `build-test` is the only PR-time gate that actually
runs this Action on a clean Windows runner and pokes at the result;
the matrix-based smoke test in `matrix.yml` only fires on manual
dispatch. So far that gate has only covered the historical default
combination (`flavor: minimal`, `architecture: x86_64`), which means
any regression on the new `ucrt64` axis would slip through CI and
only surface in a consumer repository.

Turn the job into a matrix that adds `architecture: ucrt64` next to
the existing `x86_64` row, with `flavor: full` for the UCRT64 entry
because that is the only flavor wired up end-to-end at this point
(the subset flavors still depend on follow-up work in `build-extra`
and on the `ci-artifacts` pipeline of `git-sdk-64`, tracked in
git-for-windows/git-sdk-64#117 (comment)).

The verification step's previously hard-coded `/mingw64/bin/gcc`
becomes `$MINGW_PREFIX/bin/gcc`, with `MINGW_PREFIX` injected from
the matrix so it picks up `/mingw64` for the `x86_64` row and
`/ucrt64` for the `ucrt64` row. The name follows the MSYS2 ecosystem
convention for the per-environment path, which is the same variable
the SDK's own shell profile exports.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to dscho/build-extra that referenced this pull request Jun 8, 2026
This script translates a caller-supplied ARCH into both a directory
prefix (MSYSTEM_LOWER) and a Pacman architecture-segment used to
filter package names. The existing cases map x86_64 -> mingw64 /
x86_64, i.e. they assume the only x86_64 Git for Windows SDK is the
MINGW64 one.

git-sdk-64 is moving to UCRT64
(git-for-windows/git-sdk-64#117). The new
SDK is still x86_64 but its toolchain lives in /ucrt64/ and its
Pacman packages are named mingw-w64-ucrt-x86_64-*. Add a dedicated
ucrt64 case so callers that explicitly know which flavor they want
can pass ARCH=ucrt64 and get the right prefix and package names,
without having to teach this script to auto-detect.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to dscho/build-extra that referenced this pull request Jun 8, 2026
create_sdk_artifact's `case "$architecture" in` ladder hard-maps
x86_64 to MSYSTEM=MINGW64 / PREFIX=/mingw64, writes that into the
artifact's /etc/profile, and calls make-file-list.sh with
ARCH=$architecture. Against the new UCRT64 git-sdk-64
(git-for-windows/git-sdk-64#117), the
resulting artifact is broken: the profile points at /mingw64/bin
which doesn't exist, and the listed packages all carry the wrong
Pacman prefix.

Add a new ucrt64 architecture value that maps to MSYSTEM=UCRT64 and
PREFIX=/ucrt64 while keeping SDK_REPO=git-sdk-64 (the SDK has not
been renamed). The caller asks for the new flavor explicitly; the
make-file-list.sh side already knows what ARCH=ucrt64 means after
the previous commit.

Auto-detection is deliberately left alone: a dual-tree SDK (one
with both /mingw64 and /ucrt64) is rare enough that guessing the
wrong default would be more surprising than requiring the caller to
say what they want.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to dscho/build-extra that referenced this pull request Jun 8, 2026
This script audits import/export DLL references in an SDK
installation. It picks the directory prefix from MSYSTEM (and only
falls back to ARCH if MSYSTEM is unset or unknown), then forwards
ARCH to make-file-list.sh to learn which Pacman packages to
install.

On the UCRT64 git-sdk-64
(git-for-windows/git-sdk-64#117) the
caller's MSYSTEM is UCRT64; today the script falls through to the
*) default and ends up with MINGW_PREFIX=mingw64 and ARCH=x86_64,
asking pacman for the long-gone mingw-w64-x86_64-* packages.

Add a UCRT64 case alongside MINGW64 and CLANGARM64 that sets
MINGW_PREFIX=ucrt64 and overrides ARCH=ucrt64 the same way
CLANGARM64 overrides it to aarch64. make-file-list.sh, taught
ARCH=ucrt64 in an earlier commit, then resolves the right Pacman
package set.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to git-for-windows/git-for-windows-automation that referenced this pull request Jun 8, 2026
In git-for-windows/git-sdk-64#117, I am starting
the MINGW64 -> UCRT64 migration, and therefore I want to target that
branch, too, when uninstalling packages.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to git-for-windows/git-for-windows-automation that referenced this pull request Jun 8, 2026
In git-for-windows/git-sdk-64#117, I am starting
the MINGW64 -> UCRT64 migration, and therefore I want to target that
branch, too, when uninstalling packages.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added a commit to git-for-windows/git-for-windows-automation that referenced this pull request Jun 8, 2026
In git-for-windows/git-sdk-64#117, I am starting
the MINGW64 -> UCRT64 migration, and therefore I want to target that
branch, too, when uninstalling packages.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added 4 commits June 16, 2026 16:18
A long time ago, we had to transition from our home-grown
`asciidoctor-extensions` package, and needed support in this
script so that the update would run smoothly via the next
`sync` workflow run.

This transition has concluded a long time ago, and therefore
the support code is no longer necessary.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This is the `ucrt64` branch of git-sdk-64, destined to become the
`main` branch once the migration from MINGW64 to UCRT64 outlined in
#117 is complete.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The migration of Git for Windows' SDK from MINGW64 to UCRT64 is under
way, and as part of that, we need to ensure that the Git for
Windows-specific addons package is installed in the SDK.

Technically, this logic is not _really_ necessary in this branch
because the split package is already installed. But hey, the logic
is there, and it cannot hurt to have something "self-healing" in
place just in case the addons package gets uninstalled at some
stage by mistake.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The script still had one left-over from the MINGW64 flavor of Git
for Windows' SDK: the final `pacman` call that ensures that the
`git-extra` package is installed (mostly for the benefit of letting
its post-install script modify all the things in a regular MSYS2
setup to what Git for Windows needs and which cannot be configured
in any other way).

With this commit, this script now installs the UCRT64 flavor of
that package, and the migration of this script is now complete.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
apr (1.7.6-1 -> 1.7.6-2)
bash (5.3.012-1 -> 5.3.015-1)
binutils (2.46-2 -> 2.46.1-1)
bsdcpio (3.8.7-1 -> 3.8.7-2)
bsdtar (3.8.7-1 -> 3.8.7-2)
file (5.47-1 -> 5.48-1)
gcc (15.2.0-1 -> 15.3.0-1)
gcc-libs (15.2.0-1 -> 15.3.0-1)
gdb (17.1-2 -> 17.1-3)
less (702-1 -> 704-1)
libarchive (3.8.7-1 -> 3.8.7-2)
libltdl (2.5.4-4 -> 2.5.4-5)
libopenssl (3.5.6-1 -> 3.5.7-1)
libsqlite (3.53.1-1 -> 3.53.2-1)
libtool (2.5.4-4 -> 2.5.4-5)
mingw-w64-ucrt-x86_64-binutils (2.46-3 -> 2.46.1-1)
mingw-w64-ucrt-x86_64-crt (14.0.0.r59.g93753750c-1 -> 14.0.0.r98.g19f5121a2-1)
mingw-w64-ucrt-x86_64-docx2txt-rs (new: 0.2.0-1)
mingw-w64-ucrt-x86_64-expat (2.8.1-1 -> 2.8.1-2)
mingw-w64-ucrt-x86_64-git-extra (new: 1.1.709.fa78d67ca-1)
mingw-w64-ucrt-x86_64-headers (14.0.0.r59.g93753750c-1 -> 14.0.0.r98.g19f5121a2-1)
mingw-w64-ucrt-x86_64-libmangle (14.0.0.r59.g93753750c-1 -> 14.0.0.r98.g19f5121a2-1)
mingw-w64-ucrt-x86_64-libwinpthread (14.0.0.r59.g93753750c-1 -> 14.0.0.r98.g19f5121a2-1)
mingw-w64-ucrt-x86_64-openssl (3.6.2-2 -> 3.6.3-1)
mingw-w64-ucrt-x86_64-python (3.14.5-1 -> 3.14.6-1)
mingw-w64-ucrt-x86_64-tools (14.0.0.r59.g93753750c-1 -> 14.0.0.r98.g19f5121a2-1)
mingw-w64-ucrt-x86_64-winpthreads (14.0.0.r59.g93753750c-1 -> 14.0.0.r98.g19f5121a2-1)
mintty (1~3.8.2-1 -> 1~3.8.3-1)
msys2-runtime (3.6.9-1 -> 3.6.9-2)
msys2-runtime-devel (3.6.9-1 -> 3.6.9-2)
openssl (3.5.6-1 -> 3.5.7-1)
pacman (6.1.0-24 -> 6.1.0-25)
perl-HTTP-Message (7.01-1 -> 7.02-1)
rsync (3.4.3-1 -> 3.4.4-1)
tig (2.6.0-1 -> 2.6.1-1)
vim (9.2.0577-1 -> 9.2.0640-1)

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
…e installed

The set of Pacman packages required to build Git for Windows' installer/portable
Git/MinGit from scratch need to be installed in the `git-sdk-*` repositories, so
that MinGit or other backports are possible without having to rely on external
Pacman repositories whose contents might have been culled to make more space.

Let's ensure that these packages (which were uninstalled as part of moving
from MINGW64 to UCRT64 because their UCRT64 counterparts were not yet available)
are installed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
mingw-w64-ucrt-x86_64-curl-openssl-alternate (new: 8.20.0-1)
mingw-w64-ucrt-x86_64-cv2pdb (new: 0.53-1)
mingw-w64-ucrt-x86_64-git-credential-manager (new: 2.8.0-1)
mingw-w64-ucrt-x86_64-wintoast (new: 1.0.0.275.a44fa02-1)
mingw-w64-ucrt-x86_64-xpdf-tools (new: 4.06-1)

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
@dscho

dscho commented Jun 16, 2026

Copy link
Copy Markdown
Member Author

check-for-missing-dlls / check (push) check-for-missing-dlls / check (push) Failing after 2m

The PR git-for-windows/build-extra#716 will fix this.

dscho added a commit to git-for-windows/git-for-windows-automation that referenced this pull request Jun 17, 2026
This is part of the overall effort in git-for-windows/git-sdk-64#117,
and it was used to deploy the UCRT64 variants of the Git for
Windows-only MINGW packages to the Pacman repository.
dscho added a commit to git-for-windows/build-extra that referenced this pull request Jun 17, 2026
I noticed over in git-for-windows/git-sdk-64#117 that the
`check-for-missing-dlls` job failed. That's because the script needed
some adjustment. (The `make-file-list.sh` script, to be precise.)
dscho added a commit to git-for-windows/MINGW-packages that referenced this pull request Jun 18, 2026
In upstream MSYS2, this is still a full Qt6-dependent package, of
course.

This is required to build the `mingw-w64-ucrt-x86_64-xpdf-tools` package
that is needed as part of Git for Windows' transition to UCRT64 (see
git-for-windows/git-sdk-64#117 for more
details).
mingw-w64-ucrt-x86_64-git-extra (1.1.709.fa78d67ca-1 -> 1.1.713.cd940aab6-1)
mingw-w64-ucrt-x86_64-pkgconf (1~2.5.1-1 -> 1~2.5.1-2)

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
@dscho

dscho commented Jun 19, 2026

Copy link
Copy Markdown
Member Author

In the meantime, I deployed the following mingw-w64-ucrt-x86_64-* packages to the Pacman repository:

Add to that:

And now busybox is built and deployed, too.

pull Bot pushed a commit to Dustin4444/build-extra that referenced this pull request Jun 20, 2026
The merge brought in UCRT64 support across the tooling (make-file-list,
check-for-missing-dlls, please.sh, and CI), a PowerShell-based PE
import parser (pe-imports.ps1) as fallback for objdump on cross-arch
binaries, and the removal of the tracked git-extra.install file in
favor of generating it from .install.in at build time.

Update the Key Scripts table to include check-for-missing-dlls.sh and
pe-imports.ps1, rewrite the check-for-missing-dlls section to describe
the current two-stage approach (objdump then PowerShell fallback) and
the api-ms-* skip, document the UCRT64 migration in the Architectures
section with a reference to git-for-windows/git-sdk-64#117, and note
that git-extra's .install is now generated.
@dscho

dscho commented Jun 20, 2026

Copy link
Copy Markdown
Member Author

In the meantime, I deployed the following mingw-w64-ucrt-x86_64-* packages to the Pacman repository:

Add to that:

And now busybox is built and deployed, too.

And with this build, git-lfs is deployed, too. (I missed this earlier because MSYS2 has that package, too, but in Git for Windows we need to be prepared for the occasional embargoed Git LFS release that we have to package early.)

gnutls (3.8.13-1 -> 3.8.13-2)
libgnutls (3.8.13-1 -> 3.8.13-2)
libhogweed (3.10.2-1 -> 4.0-1)
libnettle (3.10.2-1 -> 4.0-1)
mingw-w64-ucrt-x86_64-git-lfs (new: 3.7.1-1)
mingw-w64-ucrt-x86_64-git-lfs (removed)
nettle (3.10.2-1 -> 4.0-1)
perl-URI (5.34-1 -> 5.35-1)
vim (9.2.0640-1 -> 9.2.0677-2)

Signed-off-by: Git for Windows Build Agent <ci@git-for-windows.build>
dscho added a commit to git-for-windows/git-for-windows-automation that referenced this pull request Jun 22, 2026
In git-for-windows/git-sdk-64#117, a long-running PR, the UCRT64 flavor
of Git for Windows' SDK is being established. Multiple packages have
already been deployed, and now, in conjuction with
git-for-windows/build-extra#719, it is time to
build installers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Consider builds for UCRT64?

2 participants