gentoo/app-emulation/wine-proton/wine-proton-10.0.2d.ebuild
Ionen Wolkens 2a83e65516
app-emulation/wine-proton: always pull gst-plugins-libav+bad
Not overly worth a revbump+rebuild over, but want to propagate
it over time. Hard-dependency also ensures USE=abi_x86_32 is
properly set where needed.

Had an application crash mentioning that h264 support was missing
despite gst-plugins-libav was installed which resolved itself after
installing -bad. Was formerly under the impression -libav was enough
for that but maybe(?) it's needed for h264parser or so before it can
use -libav or -openh264 (possibly only with the way wine is using it).

...and then sometime seen users confused by similar issues despite
"it works with real Proton".

Regardless of if -bad is really needed for h264 or not, real Proton
does ship with -base + -good (provided by -meta), -libav, -bad (with
auto_features=disabled + videoparsers/hls/mpegtsdemux=enabled), and
-dav1d -- so, to ensure things work as expected, let's just hard depend
on everything except -dav1d (from gst-plugins-rs, currently unpackaged
and it would also be an unpopular default given the rust requirement --
hopefully av1 works through libav+ffmpeg[dav1d] but I have not tested).

This may annoy more miminalistic users that didn't need these for their
use case, but would rather not keep this as optfeature or gated behind
USE and instead stay closer to upstream Proton. IMO minimalist users
should use wine-vanilla instead which offers more control in general,
wine-proton is more meant as a "should mostly just work" alternative
for games (e.g. wine-proton doesn't allow disabling opengl/vulkan too,
not tried recently but it didn't even build when vulkan was disabled).

Could take it further and match what Proton enables in each plugins set
like pull gst-plugins-vpx/mpg123/hls among others but believe most of
these should work through -libav and default ffmpeg USE and they may be
redundant (or at least for decoding, games rarely need to do encoding).
Believe Proton enables these given ffmpeg is shipped separately and it
serves as a fallback if missing.

Not depending on e.g. -meta[ffmpeg] as this does nothing but annoy
users into setting the USE. Arguably could drop -meta entirely and
depend on -good but it doesn't hurt to keep to pull additional things
depending on global USE.

Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
2025-11-04 05:24:53 -05:00

257 lines
7.2 KiB
Bash

# Copyright 2022-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{11..14} )
inherit optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
WINE_GECKO=2.47.4
WINE_MONO=10.0.0
WINE_PV=$(ver_rs 2 -)
if [[ ${PV} == 9999 ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
EGIT_BRANCH="bleeding-edge"
else
SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
S=${WORKDIR}/${PN}-wine-${WINE_PV}
KEYWORDS="-* amd64 ~x86"
fi
DESCRIPTION="Valve Software's fork of Wine"
HOMEPAGE="https://github.com/ValveSoftware/wine/"
LICENSE="
LGPL-2.1+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
|| ( WTFPL-2 public-domain )
"
SLOT="${PV}"
IUSE="
+X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+unwind usb v4l wayland video_cards_amdgpu +xcomposite xinerama
"
# headless is not really supported here, and udev needs sdl due to Valve's
# changes (bug #959263), use normal wine instead if need to avoid these
REQUIRED_USE="
|| ( X wayland )
udev? ( sdl )
"
# tests are non-trivial to run, can hang easily, don't play well with
# sandbox, and several need real opengl/vulkan or network access
RESTRICT="test"
# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
WINE_DLOPEN_DEPEND="
dev-libs/libgcrypt:=[${WINE_USEDEP}]
media-libs/freetype[${WINE_USEDEP}]
media-libs/libglvnd[X?,${WINE_USEDEP}]
media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
X? (
x11-libs/libXcursor[${WINE_USEDEP}]
x11-libs/libXfixes[${WINE_USEDEP}]
x11-libs/libXi[${WINE_USEDEP}]
x11-libs/libXrandr[${WINE_USEDEP}]
x11-libs/libXrender[${WINE_USEDEP}]
x11-libs/libXxf86vm[${WINE_USEDEP}]
xcomposite? ( x11-libs/libXcomposite[${WINE_USEDEP}] )
xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
)
dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
ssl? (
dev-libs/gmp:=[${WINE_USEDEP}]
net-libs/gnutls:=[${WINE_USEDEP}]
)
v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
"
WINE_COMMON_DEPEND="
${WINE_DLOPEN_DEPEND}
X? (
x11-libs/libX11[${WINE_USEDEP}]
x11-libs/libXext[${WINE_USEDEP}]
)
alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
gstreamer? (
dev-libs/glib:2[${WINE_USEDEP}]
media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
media-libs/gstreamer:1.0[${WINE_USEDEP}]
)
pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
udev? ( virtual/libudev:=[${WINE_USEDEP}] )
unwind? (
llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
!llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
)
usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
wayland? (
dev-libs/wayland[${WINE_USEDEP}]
x11-libs/libxkbcommon[${WINE_USEDEP}]
)
"
RDEPEND="
${WINE_COMMON_DEPEND}
app-emulation/wine-desktop-common
gecko? (
app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
wow64? ( app-emulation/wine-gecko[abi_x86_32] )
)
gstreamer? (
media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
)
mono? ( app-emulation/wine-mono:${WINE_MONO} )
perl? (
dev-lang/perl
dev-perl/XML-LibXML
)
selinux? ( sec-policy/selinux-wine )
"
DEPEND="
${WINE_COMMON_DEPEND}
|| (
sys-devel/gcc:*
llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
)
sys-kernel/linux-headers
X? ( x11-base/xorg-proto )
"
BDEPEND="
${PYTHON_DEPS}
dev-lang/perl
sys-devel/bison
sys-devel/flex
virtual/pkgconfig
nls? ( sys-devel/gettext )
wayland? ( dev-util/wayland-scanner )
"
QA_CONFIG_IMPL_DECL_SKIP=(
__clear_cache # unused on amd64+x86 (bug #900332)
res_getservers # false positive
)
QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
PATCHES=(
"${FILESDIR}"/${PN}-7.0.4-musl.patch
"${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
"${FILESDIR}"/${PN}-8.0.1c-unwind.patch
"${FILESDIR}"/${PN}-8.0.4-restore-menubuilder.patch
"${FILESDIR}"/${PN}-9.0-rpath.patch
"${FILESDIR}"/${PN}-9.0.4-binutils2.44.patch
)
src_prepare() {
# similarly to staging, append to `wine --version` for identification
sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
wine_src_prepare
# this is kind-of best effort and ignores llvm slots, ideally
# atomic-builtins should be package.use.force then could drop this
if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
then
# needed by Valve's fsync patches if using compiler-rt w/o atomics
sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
-i dlls/{ntdll,winevulkan}/Makefile.in || die
fi
# proton variant also needs specfiles and vulkan
tools/make_specfiles || die # perl
dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
}
src_configure() {
local wineconfargs=(
# upstream (Valve) doesn't really support misc configurations (e.g.
# adds vulkan code not always guarded by --with-vulkan), so force
# some options that are typically needed by games either way
--with-freetype
--with-opengl
--with-vulkan
# ...and disable most options unimportant for games and unused by
# Proton rather than expose as volatile USEs with little support
--without-capi
--without-cups
--without-gphoto
--without-gssapi
--without-krb5
--without-netapi
--without-opencl
--without-pcap
--without-pcsclite
--without-sane
ac_cv_lib_soname_odbc=
$(use_enable gecko mshtml)
$(use_enable mono mscoree)
$(use_enable video_cards_amdgpu amd_ags_x64)
--disable-tests
$(use_with X x)
$(use_with alsa)
$(use_with dbus)
$(use_with ffmpeg)
$(use_with fontconfig)
$(use_with gstreamer)
$(use_with nls gettext)
--without-osmesa # media-libs/mesa no longer supports this
--without-oss # media-sound/oss is not packaged (OSSv4)
$(use_with pulseaudio pulse)
$(use_with sdl)
$(use_with ssl gnutls)
$(use_with udev)
$(use_with unwind)
$(use_with usb)
$(use_with v4l v4l2)
$(use_with wayland)
$(use_with xcomposite)
$(use_with xinerama)
--without-piper # unpackaged, for tts but unusable without steam
)
wine_src_configure
}
src_install() {
use perl || local WINE_SKIP_INSTALL=(
${WINE_DATADIR}/man/man1/wine{dump,maker}.1
${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
)
wine_src_install
dodoc ANNOUNCE* AUTHORS README* documentation/README*
readme.gentoo_create_doc
}
pkg_preinst() {
has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
}
pkg_postinst() {
wine_src_postinst
[[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
games-util/game-device-udev-rules
ewarn
ewarn "Warning: please consider ${PN} provided as-is without real"
ewarn "support. Upstream does not want bug reports unless can reproduce"
ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
ewarn "unless it is a build/packaging issue. So, if need support, try"
ewarn "normal Wine or Proton instead."
}