env:
MATRIX_ARCH: '${{ matrix.arch }}'
MATRIX_IMAGE: '${{ matrix.image }}'
- MATRIX_INSTALL: '${{ matrix.install }}'
+ MATRIX_INSTALL_MSYS2: '${{ matrix.install-msys2 }}'
+ MATRIX_INSTALL_VCPKG: '${{ matrix.install-vcpkg }}'
MATRIX_OPENSSH: '${{ matrix.openssh }}'
MATRIX_PLAT: '${{ matrix.plat }}'
MATRIX_TYPE: '${{ matrix.type }}'
matrix:
include:
- name: '!ssl +examples'
- install: 'zlib libssh2[core,zlib]'
+ install-vcpkg: 'zlib libssh2[core,zlib]'
arch: 'x64'
+ env: 'ucrt-x86_64'
plat: 'uwp'
type: 'Debug'
image: 'windows-2025'
-DENABLE_DEBUG=ON
-DCURL_ENABLE_SSL=OFF
-DUSE_WIN32_IDN=ON
- -DCURL_USE_LIBPSL=OFF
- - name: 'schannel +examples'
- install: 'zlib libssh2[core,zlib]'
+ - name: 'openssl +examples'
+ install-msys2: >-
+ mingw-w64-ucrt-x86_64-brotli
+ mingw-w64-ucrt-x86_64-zlib
+ mingw-w64-ucrt-x86_64-zstd
+ mingw-w64-ucrt-x86_64-openssl
+ mingw-w64-ucrt-x86_64-libssh2
+ mingw-w64-ucrt-x86_64-nghttp2
+
arch: 'x64'
+ env: 'ucrt-x86_64'
plat: 'windows'
type: 'Debug'
chkprefill: '_chkprefill'
config: >-
-DENABLE_DEBUG=ON
- -DCURL_USE_SCHANNEL=ON
+ -DCURL_USE_OPENSSL=ON
+ -DOPENSSL_INCLUDE_DIR=/ucrt64/include
+ -DSSL_EAY_DEBUG=/ucrt64/lib/libssl.dll.a
+ -DSSL_EAY_RELEASE=/ucrt64/lib/libssl.dll.a
+ -DLIB_EAY_DEBUG=/ucrt64/lib/libcrypto.dll.a
+ -DLIB_EAY_RELEASE=/ucrt64/lib/libcrypto.dll.a
-DUSE_WIN32_IDN=ON -DUSE_SSLS_EXPORT=ON
- -DCURL_USE_LIBPSL=OFF
+ -DBROTLI_INCLUDE_DIR=/ucrt64/include
+ -DBROTLICOMMON_LIBRARY=/ucrt64/lib/libbrotlicommon.dll.a
+ -DBROTLIDEC_LIBRARY=/ucrt64/lib/libbrotlidec.dll.a
+ -DZSTD_INCLUDE_DIR=/ucrt64/include
+ -DZSTD_LIBRARY=/ucrt64/lib/libzstd.dll.a
+ -DZLIB_INCLUDE_DIR=/ucrt64/include
+ -DZLIB_LIBRARY=/ucrt64/lib/libz.dll.a
+ -DLIBSSH2_INCLUDE_DIR=/ucrt64/include
+ -DLIBSSH2_LIBRARY=/ucrt64/lib/libssh2.dll.a
+ -DNGHTTP2_INCLUDE_DIR=/ucrt64/include
+ -DNGHTTP2_LIBRARY=/ucrt64/lib/libnghttp2.dll.a
- name: 'schannel U'
- install: 'zlib libssh2[core,zlib]'
+ install-vcpkg: 'zlib libssh2[core,zlib]'
arch: 'arm64'
+ env: 'clang-aarch64'
plat: 'windows'
type: 'Debug'
image: 'windows-11-arm'
-DENABLE_DEBUG=ON
-DCURL_USE_SCHANNEL=ON
-DUSE_WIN32_IDN=ON -DENABLE_UNICODE=ON -DUSE_SSLS_EXPORT=ON
- -DCURL_USE_LIBPSL=OFF
fail-fast: false
steps:
- uses: msys2/setup-msys2@d44ca8e88d8b43d56cf5670f91747359d5537f97 # v2
with:
- msystem: ucrt64
+ msystem: ${{ matrix.arch == 'arm64' && 'clangarm64' || 'ucrt64' }}
release: ${{ contains(matrix.image, 'arm') }}
cache: ${{ contains(matrix.image, 'arm') }}
path-type: inherit
+ install: >-
+ mingw-w64-${{ matrix.env }}-libpsl
+ ${{ matrix.install-msys2 }}
- name: 'vcpkg versions'
+ if: ${{ matrix.install-vcpkg }}
timeout-minutes: 1
run: |
git -C "$VCPKG_INSTALLATION_ROOT" show --no-patch --format='%H %ai'
vcpkg version
- name: 'vcpkg build'
+ if: ${{ matrix.install-vcpkg }}
timeout-minutes: 45
- run: vcpkg x-set-installed ${MATRIX_INSTALL} --triplet="${MATRIX_ARCH}-${MATRIX_PLAT}"
+ run: vcpkg x-set-installed ${MATRIX_INSTALL_VCPKG} --triplet="${MATRIX_ARCH}-${MATRIX_PLAT}"
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
MATRIX_CHKPREFILL: '${{ matrix.chkprefill }}'
MATRIX_CONFIG: '${{ matrix.config }}'
run: |
+ [ -f "${MINGW_PREFIX}/include/zconf.h" ] && sed -i -E 's|(# +define +Z_HAVE_UNISTD_H)|/*\1*/|g' "${MINGW_PREFIX}/include/zconf.h" # Patch MSYS2 zconf.h for MSVC
for _chkprefill in '' ${MATRIX_CHKPREFILL}; do
options=''
if [ "${MATRIX_PLAT}" = 'uwp' ]; then
[ "${MATRIX_ARCH}" = 'x64' ] && options+=' -A x64'
[ "${MATRIX_ARCH}" = 'x86' ] && options+=' -A Win32'
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
+ if [ -n "${MATRIX_INSTALL_VCPKG}" ]; then
+ options+=" -DCMAKE_TOOLCHAIN_FILE=$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
+ options+=" -DVCPKG_INSTALLED_DIR=$VCPKG_INSTALLATION_ROOT/installed"
+ options+=" -DVCPKG_TARGET_TRIPLET=${MATRIX_ARCH}-${MATRIX_PLAT}"
+ options+=" -DCMAKE_C_COMPILER_TARGET=${MATRIX_ARCH}-${MATRIX_PLAT}"
+ fi
cmake -B "bld${_chkprefill}" ${options} \
- -DCMAKE_TOOLCHAIN_FILE="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" \
- -DVCPKG_INSTALLED_DIR="$VCPKG_INSTALLATION_ROOT/installed" \
- -DVCPKG_TARGET_TRIPLET="${MATRIX_ARCH}-${MATRIX_PLAT}" \
- -DCMAKE_C_COMPILER_TARGET="${MATRIX_ARCH}-${MATRIX_PLAT}" \
-DCMAKE_C_FLAGS="${cflags}" \
-DCMAKE_EXE_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
-DCMAKE_SHARED_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
-DCMAKE_VS_GLOBALS="TrackFileAccess=false${vsglobals}" \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \
+ -DLIBPSL_INCLUDE_DIR="${MINGW_PREFIX}/include" \
+ -DLIBPSL_LIBRARY="${MINGW_PREFIX}/lib/libpsl.dll.a" \
-DBUILD_SHARED_LIBS=OFF \
${MATRIX_CONFIG}
done
export CURL_DIRSUFFIX="${MATRIX_TYPE}"
TFLAGS="-j8 ${TFLAGS}"
TFLAGS+=' !498' # 'Reject too large HTTP response headers on endless redirects' HTTP, HTTP GET (runtests detecting result code 2009 instead of 56 returned by curl)
- if [[ "${MATRIX_INSTALL}" = *'libssh2[core,zlib]'* ]]; then
+ if [[ "${MATRIX_INSTALL_MSYS2}" = *'libssh2-wincng'* || \
+ "${MATRIX_INSTALL_VCPKG}" = *'libssh2[core,zlib]'* ]]; then
TFLAGS+=' ~SCP ~SFTP' # Flaky: `-8, Unable to exchange encryption keys`. https://github.com/libssh2/libssh2/issues/804
fi
if [ -n "${MATRIX_OPENSSH}" ]; then # OpenSSH-Windows
TFLAGS+=' ~601 ~603 ~617 ~619 ~621 ~641 ~665 ~2004' # SCP
- if [[ "${MATRIX_INSTALL}" = *'libssh '* ]]; then
+ if [[ "${MATRIX_INSTALL_MSYS2} " = *'libssh '* || \
+ "${MATRIX_INSTALL_VCPKG} " = *'libssh '* ]]; then
TFLAGS+=' ~614' # 'SFTP pre-quote chmod' SFTP, pre-quote, directory
else
TFLAGS+=' ~3022' # 'SCP correct sha256 host key' SCP, server sha256 key check