From 3485e577f1b4eb1905bba425ee8eac951c2cedf8 Mon Sep 17 00:00:00 2001 From: tannevaled Date: Fri, 22 May 2026 08:36:34 +0200 Subject: [PATCH 1/4] new(winehq.org): headless wine for Windows-binary CI testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Minimal headless wine build — no X11, no OpenGL, no audio, 64-bit only, no wine tests. Aimed at the use case described in pkgxdev/pantry#12985 and the brewkit#346 RFC: run cross-compiled .exe files inside brewkit's Linux test sandbox to validate native-Windows pantry recipes. What it provides: - bin/wine, bin/wine64 (the runtime) - bin/winepath (path-translation helper) - bin/wineserver (the wine background service) - bin/winecfg (mostly stub-useful, included for completeness) What it does NOT support: - GUI apps (no X11) - 3D / Vulkan / OpenGL - Audio (ALSA, Pulse, OSS all disabled) - Multimedia (SDL, gstreamer disabled) - Peripherals (USB, CUPS, gphoto, V4L2, SANE all disabled) - 32-bit Win binaries (--enable-archs=x86_64 only) - Wine's own test suite (--disable-tests) Pilot platform: linux/x86-64 only. linux/aarch64 + darwin/* are follow-ups (wine-side complications: aarch64 needs qemu-user or hangover for x86-64 Win binaries; darwin needs the macOS-32-bit dance). Test step: `wine64 --version` returns "wine-X.Y" — proves the binary loads + can run a basic console command. Recipes that depend on wine (starting with pkgxdev/pantry#12984's llvm-mingw test step) get the full runtime check for free. Refs: pkgxdev/pantry#12985 (this issue), pkgxdev/brewkit#346 (RFC). --- projects/winehq.org/package.yml | 106 ++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 projects/winehq.org/package.yml diff --git a/projects/winehq.org/package.yml b/projects/winehq.org/package.yml new file mode 100644 index 0000000000..499345d967 --- /dev/null +++ b/projects/winehq.org/package.yml @@ -0,0 +1,106 @@ +# Wine: Windows API implementation for POSIX hosts. +# +# Headless minimal build aimed at CI use — runs cross-compiled +# Windows .exe files in brewkit's Linux test sandbox so we can +# validate native-Windows pantry recipes without spinning up +# GitHub Windows runners. See pkgxdev/pantry#12985 for context +# and pkgxdev/brewkit#346 for the broader RFC. +# +# What's deliberately out of this build: +# +# - X11 (--without-x): no GUI in CI +# - OpenGL/Vulkan/OSMesa: no 3D rendering +# - ALSA/PulseAudio/OSS: no audio +# - SDL/GStreamer: no media +# - CUPS/gphoto2/USB/V4L2/SANE/UDev: no peripherals +# - 32-bit Win support (--enable-archs=x86_64): 64-bit only +# - tests (--disable-tests): skip wine's own test suite (massive +# build-time saving, irrelevant for our use case) +# +# Result: a headless wine64 binary that can launch a console-only +# Windows .exe and capture its stdout/stderr. Good for CLI tool +# testing; not useful for GUI apps, games, or anything graphical. + +distributable: + url: https://dl.winehq.org/wine/source/{{ version.major }}.0/wine-{{ version.raw }}.tar.xz + strip-components: 1 + +# Use the github mirror's tag list, filtering down to numeric semver +# tags (excludes legacy daily-build tags like wine-20050930). +versions: + github: wine-mirror/wine/tags + match: /^wine-\d{2,}\.\d+(\.\d+)?$/ + strip: /^wine-/ + +# Pilot scope: linux/x86-64 only. Once the integration with +# brewkit#346 lands, expanding to linux/aarch64 + darwin/* is +# a follow-up — both have wine-side complications: +# - linux/aarch64: wine can run aarch64 Windows binaries but +# x86-64 Windows requires qemu-user or hangover +# - darwin: Apple deprecated 32-bit; wine 11.x ships darwin +# support but it's a meaningful extra config dance +platforms: + - linux/x86-64 + +build: + dependencies: + gnu.org/bison: '^3' + github.com/westes/flex: '*' + perl.org: '^5' + gnu.org/gettext: '*' + freetype.org: '*' + gnutls.org: '*' + zlib.net: '*' + gnu.org/make: '*' + gnu.org/gcc: '*' + gnu.org/binutils: '*' + + script: + - ./configure $ARGS + - make --jobs {{ hw.concurrency }} + - make install + + env: + ARGS: + - --prefix={{ prefix }} + - --enable-archs=x86_64 # 64-bit only — half the build, all we need + - --disable-tests # skip wine's massive internal test suite + - --without-x # no X11 + - --without-opengl + - --without-osmesa + - --without-vulkan + - --without-alsa + - --without-pulse + - --without-oss + - --without-sdl + - --without-gstreamer + - --without-cups + - --without-gphoto + - --without-capi + - --without-cms + - --without-udev + - --without-v4l2 + - --without-sane + - --without-usb + - --without-pcap + - --without-fontconfig + - --without-krb5 + +test: + # `wine64 --version` returns "wine-X.Y" on stable, "wine-X.Y (Staging)" + # on staging. We just check that it ran and printed a sane version. + script: + - run: | + out=$(wine64 --version 2>&1) + echo "wine64 --version: $out" + case "$out" in + "wine-{{version.marketing}}"*) echo PASS ;; + *) echo "FAIL: expected wine-{{version.marketing}}, got $out"; exit 1 ;; + esac + +provides: + - bin/wine + - bin/wine64 + - bin/winepath + - bin/wineserver + - bin/winecfg From 1aac3add16ab9bb897f8a8e558f627437d53c692 Mon Sep 17 00:00:00 2001 From: tannevaled Date: Fri, 22 May 2026 13:22:36 +0200 Subject: [PATCH 2/4] =?UTF-8?q?fix(winehq):=20restrict=20versions=20to=20s?= =?UTF-8?q?table=20(X.0)=20=E2=80=94=20dev=20releases=20live=20at=20.../X.?= =?UTF-8?q?x/,=20broke=20URL=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/winehq.org/package.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/projects/winehq.org/package.yml b/projects/winehq.org/package.yml index 499345d967..621832f16c 100644 --- a/projects/winehq.org/package.yml +++ b/projects/winehq.org/package.yml @@ -25,11 +25,16 @@ distributable: url: https://dl.winehq.org/wine/source/{{ version.major }}.0/wine-{{ version.raw }}.tar.xz strip-components: 1 -# Use the github mirror's tag list, filtering down to numeric semver -# tags (excludes legacy daily-build tags like wine-20050930). +# Use the github mirror's tag list, filtering to STABLE-branch tags +# only (X.0 and X.0.Y). Wine's release naming: +# wine-X.0 — stable (annual, lives at dl.winehq.org/.../X.0/) +# wine-X.Y — dev release (lives at dl.winehq.org/.../X.x/) +# wine-X.0-rcN — release candidates (skipped) +# We pick only stable so the URL template (.../{{major}}.0/) resolves. +# Also excludes legacy daily-build tags like wine-20050930. versions: github: wine-mirror/wine/tags - match: /^wine-\d{2,}\.\d+(\.\d+)?$/ + match: /^wine-\d{2,}\.0(\.\d+)?$/ strip: /^wine-/ # Pilot scope: linux/x86-64 only. Once the integration with From a5a6ef2a83878663a4ba387dca131dfd82aa21f6 Mon Sep 17 00:00:00 2001 From: tannevaled Date: Fri, 22 May 2026 15:06:03 +0200 Subject: [PATCH 3/4] fix(winehq): switch versions to url: mode (github: ignores match:) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brewkit's github: codepath silently ignores match:, so my previous regex didn't filter anything — pantry picked wine-11.9 (dev release) which lives in dl.winehq.org/source/11.x/, not /11.0/, so the URL template 404'd. Switch to url: mode (same shape as gnu.org/glibc): url: https://dl.winehq.org/wine/source/ match: /\d{2,}\.0\// # only stable major-version directories strip: /\// Picks the latest stable (currently wine-11.0). Excludes 11.x/ dev release dirs because match looks for an exact \d.0/ pattern. --- projects/winehq.org/package.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/projects/winehq.org/package.yml b/projects/winehq.org/package.yml index 621832f16c..8c6e1cb94a 100644 --- a/projects/winehq.org/package.yml +++ b/projects/winehq.org/package.yml @@ -25,17 +25,19 @@ distributable: url: https://dl.winehq.org/wine/source/{{ version.major }}.0/wine-{{ version.raw }}.tar.xz strip-components: 1 -# Use the github mirror's tag list, filtering to STABLE-branch tags -# only (X.0 and X.0.Y). Wine's release naming: +# Wine's release naming: # wine-X.0 — stable (annual, lives at dl.winehq.org/.../X.0/) # wine-X.Y — dev release (lives at dl.winehq.org/.../X.x/) -# wine-X.0-rcN — release candidates (skipped) -# We pick only stable so the URL template (.../{{major}}.0/) resolves. -# Also excludes legacy daily-build tags like wine-20050930. +# wine-X.0-rcN — release candidates +# +# We list ONLY stable major-version directories from the dl.winehq.org +# index, then semver-sort to pick the latest. URL mode is required: +# brewkit's `github:` mode silently ignores `match:`, so we can't use +# it to filter dev releases out of the tag list. versions: - github: wine-mirror/wine/tags - match: /^wine-\d{2,}\.0(\.\d+)?$/ - strip: /^wine-/ + url: https://dl.winehq.org/wine/source/ + match: /\d{2,}\.0\// + strip: /\// # Pilot scope: linux/x86-64 only. Once the integration with # brewkit#346 lands, expanding to linux/aarch64 + darwin/* is From 2b0d3dfc69d389192632fbff332d93f2abbd0687 Mon Sep 17 00:00:00 2001 From: tannevaled Date: Fri, 22 May 2026 15:18:00 +0200 Subject: [PATCH 4/4] =?UTF-8?q?fix(winehq):=20--without-mingw=20=E2=80=94?= =?UTF-8?q?=20use=20wine's=20builtin=20win-side=20DLLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI surface: `configure: error: x86_64 PE cross-compiler not found` because --enable-archs=x86_64 implicitly requires a mingw cross- compiler on PATH (to build wine's Windows-side DLLs from source). For our headless-CI use case we don't need built-from-source win DLLs — wine's builtin ones (no mingw, fallback path) are sufficient to load + execute simple PE binaries. Bonus: avoids the build-dep cycle with pkgxdev/pantry#12984 (llvm-mingw) once that recipe lands — wine would otherwise build- depend on the cross-compiler whose recipe build-depends on wine for its own runtime testing. --- projects/winehq.org/package.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/winehq.org/package.yml b/projects/winehq.org/package.yml index 8c6e1cb94a..c46a537380 100644 --- a/projects/winehq.org/package.yml +++ b/projects/winehq.org/package.yml @@ -72,6 +72,10 @@ build: - --prefix={{ prefix }} - --enable-archs=x86_64 # 64-bit only — half the build, all we need - --disable-tests # skip wine's massive internal test suite + - --without-mingw # use wine's built-in win-side DLLs instead of + # mingw-cross-compiled ones (avoids requiring + # llvm.org/mingw-w64 at build time, which would + # be a build-dep cycle once mingw recipe lands) - --without-x # no X11 - --without-opengl - --without-osmesa