1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
6 PLOCALES="ar ast bg ca cs da de el en en_US eo es fa fi fr he hi hr hu it ja ko lt ml nb_NO nl or pa pl pt_BR pt_PT rm ro ru si sk sl sr_RS@cyrillic sr_RS@latin sv ta te th tr uk wa zh_CN zh_TW"
9 inherit autotools eapi7-ver estack eutils flag-o-matic gnome2-utils l10n multilib multilib-minimal pax-utils toolchain-funcs virtualx xdg-utils
14 if [[ ${PV} == "9999" ]] ; then
15 EGIT_REPO_URI="https://source.winehq.org/git/wine.git"
22 SRC_URI="https://dl.winehq.org/wine/source/${MAJOR_V}.x/${MY_P}.tar.xz"
23 KEYWORDS="-* ~amd64 ~x86"
25 S="${WORKDIR}/${MY_P}"
28 PATCHDIR="${WORKDIR}/gentoo-wine-patches"
30 DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
31 HOMEPAGE="https://www.winehq.org/"
33 https://dev.gentoo.org/~sarnex/distfiles/wine/gentoo-wine-patches-${GWP_V}.tar.xz
38 IUSE="+abi_x86_32 +abi_x86_64 +alsa capi cups custom-cflags dos elibc_glibc +faudio +fontconfig +gecko gphoto2 gsm gssapi gstreamer +jpeg kerberos kernel_FreeBSD +lcms ldap +mono mp3 ncurses netapi nls odbc openal opencl +opengl osmesa oss +perl pcap +png prelink pulseaudio +realtime +run-exes samba scanner sdl selinux +ssl test +threads +truetype udev +udisks +unwind v4l vkd3d vulkan +X +xcomposite xinerama +xml"
39 REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )
41 elibc_glibc? ( threads )
44 vkd3d? ( vulkan )" # osmesa-opengl #286560 # X-truetype #551124
46 # FIXME: the test suite is unsuitable for us; many tests require net access
47 # or fail due to Xvfb's opengl limitations.
52 x11-libs/libXcursor[${MULTILIB_USEDEP}]
53 x11-libs/libXext[${MULTILIB_USEDEP}]
54 x11-libs/libXfixes[${MULTILIB_USEDEP}]
55 x11-libs/libXrandr[${MULTILIB_USEDEP}]
56 x11-libs/libXi[${MULTILIB_USEDEP}]
57 x11-libs/libXxf86vm[${MULTILIB_USEDEP}]
59 alsa? ( media-libs/alsa-lib[${MULTILIB_USEDEP}] )
60 capi? ( net-libs/libcapi[${MULTILIB_USEDEP}] )
61 cups? ( net-print/cups:=[${MULTILIB_USEDEP}] )
62 faudio? ( app-emulation/faudio:=[${MULTILIB_USEDEP}] )
63 fontconfig? ( media-libs/fontconfig:=[${MULTILIB_USEDEP}] )
64 gphoto2? ( media-libs/libgphoto2:=[${MULTILIB_USEDEP}] )
65 gsm? ( media-sound/gsm:=[${MULTILIB_USEDEP}] )
66 gssapi? ( virtual/krb5[${MULTILIB_USEDEP}] )
68 media-libs/gstreamer:1.0[${MULTILIB_USEDEP}]
69 media-plugins/gst-plugins-meta:1.0[${MULTILIB_USEDEP}]
71 jpeg? ( virtual/jpeg:0=[${MULTILIB_USEDEP}] )
72 kerberos? ( virtual/krb5[${MULTILIB_USEDEP}] )
73 lcms? ( media-libs/lcms:2=[${MULTILIB_USEDEP}] )
74 ldap? ( net-nds/openldap:=[${MULTILIB_USEDEP}] )
75 mp3? ( >=media-sound/mpg123-1.5.0[${MULTILIB_USEDEP}] )
76 ncurses? ( >=sys-libs/ncurses-5.2:0=[${MULTILIB_USEDEP}] )
77 netapi? ( net-fs/samba[netapi(+),${MULTILIB_USEDEP}] )
78 nls? ( sys-devel/gettext[${MULTILIB_USEDEP}] )
79 odbc? ( dev-db/unixODBC:=[${MULTILIB_USEDEP}] )
80 openal? ( media-libs/openal:=[${MULTILIB_USEDEP}] )
81 opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
83 virtual/glu[${MULTILIB_USEDEP}]
84 virtual/opengl[${MULTILIB_USEDEP}]
86 osmesa? ( >=media-libs/mesa-13[osmesa,${MULTILIB_USEDEP}] )
87 pcap? ( net-libs/libpcap[${MULTILIB_USEDEP}] )
88 png? ( media-libs/libpng:0=[${MULTILIB_USEDEP}] )
89 pulseaudio? ( media-sound/pulseaudio[${MULTILIB_USEDEP}] )
90 scanner? ( media-gfx/sane-backends:=[${MULTILIB_USEDEP}] )
91 sdl? ( media-libs/libsdl2:=[haptic,joystick,${MULTILIB_USEDEP}] )
92 ssl? ( net-libs/gnutls:=[${MULTILIB_USEDEP}] )
93 truetype? ( >=media-libs/freetype-2.0.0[${MULTILIB_USEDEP}] )
94 udev? ( virtual/libudev:=[${MULTILIB_USEDEP}] )
95 udisks? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
96 unwind? ( sys-libs/libunwind[${MULTILIB_USEDEP}] )
97 v4l? ( media-libs/libv4l[${MULTILIB_USEDEP}] )
98 vkd3d? ( app-emulation/vkd3d[${MULTILIB_USEDEP}] )
99 vulkan? ( media-libs/vulkan-loader[${MULTILIB_USEDEP}] )
100 xcomposite? ( x11-libs/libXcomposite[${MULTILIB_USEDEP}] )
101 xinerama? ( x11-libs/libXinerama[${MULTILIB_USEDEP}] )
103 dev-libs/libxml2[${MULTILIB_USEDEP}]
104 dev-libs/libxslt[${MULTILIB_USEDEP}]
107 RDEPEND="${COMMON_DEPEND}
108 app-emulation/wine-desktop-common
109 >app-eselect/eselect-wine-0.3
110 !app-emulation/wine:0
111 dos? ( >=games-emulation/dosbox-0.74_p20160629 )
112 gecko? ( app-emulation/wine-gecko:2.47.1[abi_x86_32?,abi_x86_64?] )
113 mono? ( app-emulation/wine-mono:5.0.0 )
119 realtime? ( sys-auth/rtkit )
121 samba? ( >=net-fs/samba-3.0.25[winbind] )
122 selinux? ( sec-policy/selinux-wine )
123 udisks? ( sys-fs/udisks:2 )"
125 # tools/make_requests requires perl
126 DEPEND="${COMMON_DEPEND}
128 >=sys-kernel/linux-headers-2.6
131 X? ( x11-base/xorg-proto )
132 prelink? ( sys-devel/prelink )
133 xinerama? ( x11-base/xorg-proto )"
135 # These use a non-standard "Wine" category, which is provided by
136 # /etc/xdg/applications-merged/wine.menu
137 QA_DESKTOP_FILE="usr/share/applications/wine-browsedrive.desktop
138 usr/share/applications/wine-notepad.desktop
139 usr/share/applications/wine-uninstaller.desktop
140 usr/share/applications/wine-winecfg.desktop"
143 "${PATCHDIR}/patches/${MY_PN}-5.0-winegcc.patch" #260726
144 "${PATCHDIR}/patches/${MY_PN}-4.7-multilib-portage.patch" #395615
145 "${PATCHDIR}/patches/${MY_PN}-2.0-multislot-apploader.patch" #310611
146 "${PATCHDIR}/patches/${MY_PN}-5.9-Revert-makedep-Install-also-generated-typelib-for-in.patch"
150 # https://bugs.gentoo.org/show_bug.cgi?id=635222
151 if [[ ${#PATCHES_BIN[@]} -ge 1 ]] || [[ ${PV} == 9999 ]]; then
152 DEPEND+=" dev-util/patchbin"
155 wine_compiler_check() {
156 [[ ${MERGE_TYPE} = "binary" ]] && return 0
161 if use abi_x86_64 && [[ $(gcc-major-version) = 5 && $(gcc-minor-version) -le 2 ]]; then
162 ebegin "Checking for gcc-5 ms_abi compiler bug"
163 $(tc-getCC) -O2 "${PATCHDIR}/files/pr66838.c" -o "${T}"/pr66838 || die
164 # Run in subshell to prevent "Aborted" message
165 ( "${T}"/pr66838 || false ) >/dev/null 2>&1
167 eerror "64-bit wine cannot be built with gcc-5.1 or initial patchset of 5.2.0"
168 eerror "due to compiler bugs; please re-emerge the latest gcc-5.2.x ebuild,"
169 eerror "or use gcc-config to select a different compiler version."
170 eerror "See https://bugs.gentoo.org/549768"
176 if use abi_x86_64 && [[ $(gcc-major-version) = 5 && $(gcc-minor-version) = 3 ]]; then
177 ebegin "Checking for gcc-5-3 stack realignment compiler bug"
178 # Compile in subshell to prevent "Aborted" message
179 ( $(tc-getCC) -O2 -mincoming-stack-boundary=3 "${PATCHDIR}/files/pr69140.c" -o "${T}"/pr69140 ) >/dev/null 2>&1
181 eerror "Wine cannot be built with this version of gcc-5.3"
182 eerror "due to compiler bugs; please re-emerge the latest gcc-5.3.x ebuild,"
183 eerror "or use gcc-config to select a different compiler version."
184 eerror "See https://bugs.gentoo.org/574044"
191 # Ensure compiler support
192 if use abi_x86_64; then
193 ebegin "Checking for 64-bit compiler with builtin_ms_va_list support"
194 # Compile in subshell to prevent "Aborted" message
195 ( $(tc-getCC) -O2 "${PATCHDIR}/files/builtin_ms_va_list.c" -o "${T}"/builtin_ms_va_list >/dev/null 2>&1)
197 eerror "This version of $(tc-getCC) does not support builtin_ms_va_list, can't enable 64-bit wine"
199 eerror "You need gcc-4.4+ or clang 3.8+ to build 64-bit wine"
206 wine_build_environment_check() {
207 [[ ${MERGE_TYPE} = "binary" ]] && return 0
209 if use abi_x86_64; then
210 if tc-is-gcc && [[ $(gcc-major-version) -lt 4 || ( $(gcc-major-version) -eq 4 && $(gcc-minor-version) -lt 4 ) ]]; then
211 eerror "You need gcc-4.4+ to compile 64-bit wine"
213 elif tc-is-clang && [[ $(clang-major-version) -lt 3 || ( $(clang-major-version) -eq 3 && $(clang-minor-version) -lt 8 ) ]]; then
214 eerror "You need clang-3.8+ to compile 64-bit wine"
218 if tc-is-gcc && [[ $(gcc-major-version) -eq 5 && $(gcc-minor-version) -le 3 ]]; then
219 ewarn "GCC-5.0-5.3 suffered from compiler bugs and are no longer supported by"
220 ewarn "Gentoo's Toolchain Team. If your ebuild fails the compiler checks in"
221 ewarn "the configure phase, either update your compiler or switch to <5.0 || >=5.4"
223 if tc-is-gcc && [[ $(gcc-major-version) -eq 5 && $(gcc-minor-version) -eq 4 ]]; then
224 if has "-march=i686" ${CFLAGS} && ! has "-mtune=generic" ${CFLAGS}; then
225 ewarn "Compilation can hang with CFLAGS=\"-march=i686\". You can temporarily work"
226 ewarn "around this by adding \"-mtune=generic\" to your CFLAGS for wine."
227 ewarn "See package.env in man 5 portage for more information on how to do this."
228 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=613128 for more details"
232 if use abi_x86_32 && use opencl && [[ "$(eselect opencl show 2> /dev/null)" == "intel" ]]; then
233 eerror "You cannot build wine with USE=opencl because intel-ocl-sdk is 64-bit only."
234 eerror "See https://bugs.gentoo.org/487864 for more details."
240 wine_env_vcs_vars() {
241 local pn_live_var="${PN//[-+]/_}_LIVE_COMMIT"
242 local pn_live_val="${pn_live_var}"
243 eval pn_live_val='$'${pn_live_val}
244 if [[ ! -z ${EGIT_COMMIT} ]]; then
245 eerror "Commits must now be specified using the environmental variables"
246 eerror "EGIT_OVERRIDE_COMMIT_WINE"
253 wine_build_environment_check || die
256 if use oss && ! use kernel_FreeBSD; then
257 if ! has_version ">=media-sound/oss-4"; then
258 eerror "You cannot build wine with USE=oss without having support from a"
259 eerror "FreeBSD kernel or >=media-sound/oss-4 (only available through external repos)"
267 wine_build_environment_check || die
268 wine_env_vcs_vars || die
270 WINE_VARIANT="${PN#wine}-${PV}"
271 WINE_VARIANT="${WINE_VARIANT#-}"
273 MY_PREFIX="${EPREFIX}/usr/lib/wine-${WINE_VARIANT}"
274 MY_DATAROOTDIR="${EPREFIX}/usr/share/wine-${WINE_VARIANT}"
275 MY_DATADIR="${MY_DATAROOTDIR}"
276 MY_DOCDIR="${EPREFIX}/usr/share/doc/${PF}"
277 MY_INCLUDEDIR="${EPREFIX}/usr/include/wine-${WINE_VARIANT}"
278 MY_LIBEXECDIR="${EPREFIX}/usr/libexec/wine-${WINE_VARIANT}"
279 MY_LOCALSTATEDIR="${EPREFIX}/var/wine-${WINE_VARIANT}"
280 MY_MANDIR="${MY_DATADIR}/man"
284 if [[ ${PV} == "9999" ]] ; then
285 EGIT_CHECKOUT_DIR="${S}" git-r3_src_unpack
290 l10n_find_plocales_changes "${S}/po" "" ".po"
297 for patch in ${PATCHES_BIN[@]}; do
298 patchbin --nogit < "${patch}" || die
302 local md5="$(md5sum server/protocol.def)"
308 # Modification of the server protocol requires regenerating the server requests
309 if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then
310 einfo "server/protocol.def was patched; running tools/make_requests"
311 tools/make_requests || die #432348
313 sed -i '/^UPDATE_DESKTOP_DATABASE/s:=.*:=true:' tools/Makefile.in || die
314 if ! use run-exes; then
315 sed -i '/^MimeType/d' loader/wine.desktop || die #117785
318 # Edit wine.desktop to work for specific variant
319 sed -e "/^Exec=/s/wine /wine-${WINE_VARIANT} /" -i loader/wine.desktop || die
321 # hi-res default icon, #472990, https://bugs.winehq.org/show_bug.cgi?id=24652
322 cp "${PATCHDIR}/files/oic_winlogo.ico" dlls/user32/resources/ || die
324 l10n_get_locales > po/LINGUAS || die # otherwise wine doesn't respect LINGUAS
326 # Fix manpage generation for locales #469418 and abi_x86_64 #617864
328 # Duplicate manpages input files for wine64
330 for f in loader/*.man.in; do
331 cp ${f} ${f/wine/wine64} || die
333 # Add wine64 manpages to Makefile
334 if use abi_x86_64; then
335 sed -i "/wine.man.in/i \
336 \\\twine64.man.in \\\\" loader/Makefile.in || die
337 sed -i -E 's/(.*wine)(.*\.UTF-8\.man\.in.*)/&\
338 \164\2/' loader/Makefile.in || die
344 sed -i "/${loc}\.UTF-8\.man\.in/d" "${file}" || die
348 l10n_for_each_disabled_locale_do rm_man_file "${f}"
349 done < <(find -name "Makefile.in" -exec grep -q "UTF-8.man.in" "{}" \; -print)
353 wine_compiler_check || die
355 export LDCONFIG=/bin/true
356 use custom-cflags || strip-flags
358 multilib-minimal_src_configure
361 multilib_src_configure() {
363 --prefix="${MY_PREFIX}"
364 --datarootdir="${MY_DATAROOTDIR}"
365 --datadir="${MY_DATADIR}"
366 --docdir="${MY_DOCDIR}"
367 --includedir="${MY_INCLUDEDIR}"
368 --libdir="${EPREFIX}/usr/$(get_libdir)/wine-${WINE_VARIANT}"
369 --libexecdir="${MY_LIBEXECDIR}"
370 --localstatedir="${MY_LOCALSTATEDIR}"
371 --mandir="${MY_MANDIR}"
372 --sysconfdir="${EPREFIX}/etc/wine"
377 $(use_with ncurses curses)
378 $(use_with udisks dbus)
380 $(use_with fontconfig)
381 $(use_with ssl gnutls)
382 $(use_enable gecko mshtml)
383 $(use_with gphoto2 gphoto)
386 $(use_with gstreamer)
389 $(use_with kerberos krb5)
391 --without-mingw # linux LDFLAGS leak in mingw32: bug #685172
392 $(use_enable mono mscoree)
393 $(use_with mp3 mpg123)
395 $(use_with nls gettext)
403 $(use_with pulseaudio pulse)
404 $(use_with threads pthread)
405 $(use_with scanner sane)
407 $(use_enable test tests)
408 $(use_with truetype freetype)
416 $(use_with xcomposite)
422 local PKG_CONFIG AR RANLIB
423 # Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038
424 # set AR and RANLIB to make QA scripts happy; #483342
425 tc-export PKG_CONFIG AR RANLIB
428 if [[ ${ABI} == amd64 ]]; then
429 myconf+=( --enable-win64 )
431 myconf+=( --disable-win64 )
434 # Note: using --with-wine64 results in problems with multilib.eclass
435 # CC/LD hackery. We're using separate tools instead.
443 multilib_src_test() {
444 # FIXME: win32-only; wine64 tests fail with "could not find the Wine loader"
445 if [[ ${ABI} == x86 ]]; then
446 if [[ $(id -u) == 0 ]]; then
447 ewarn "Skipping tests since they cannot be run under the root user."
448 ewarn "To run the test ${MY_PN} suite, add userpriv to FEATURES in make.conf"
452 WINEPREFIX="${T}/.wine-${ABI}" \
457 multilib_src_install_all() {
458 local DOCS=( ANNOUNCE AUTHORS README )
460 local locale_doc="documentation/README.$1"
461 [[ ! -e ${locale_doc} ]] || DOCS+=( ${locale_doc} )
463 l10n_for_each_locale_do add_locale_docs
466 prune_libtool_files --all
468 if ! use perl ; then # winedump calls function_grep.pl, and winemaker is a perl script
469 rm "${D%/}${MY_PREFIX}"/bin/{wine{dump,maker},function_grep.pl} \
470 "${D%/}${MY_MANDIR}"/man1/wine{dump,maker}.1 || die
473 # Remove wineconsole if neither backend is installed #551124
474 if ! use X && ! use ncurses; then
475 rm "${D%/}${MY_PREFIX}"/bin/wineconsole* || die
476 rm "${D%/}${MY_MANDIR}"/man1/wineconsole* || die
478 rm "${D%/}${MY_PREFIX}/$(get_libdir)"/wine/{,fakedlls/}wineconsole.exe* || die
480 multilib_foreach_abi rm_wineconsole
483 use abi_x86_32 && pax-mark psmr "${D%/}${MY_PREFIX}"/bin/wine{,-preloader} #255055
484 use abi_x86_64 && pax-mark psmr "${D%/}${MY_PREFIX}"/bin/wine64{,-preloader}
486 # Avoid double prefix from dosym and make_wrapper
487 MY_PREFIX=${MY_PREFIX#${EPREFIX}}
489 if use abi_x86_64 && ! use abi_x86_32; then
490 dosym wine64 "${MY_PREFIX}"/bin/wine # 404331
491 dosym wine64-preloader "${MY_PREFIX}"/bin/wine-preloader
494 # Failglob for binloops, shouldn't be necessary, but including to stay safe
495 eshopts_push -s failglob #615218
496 # Make wrappers for binaries for handling multiple variants
497 # Note: wrappers instead of symlinks because some are shell which use basename
499 for b in "${ED%/}${MY_PREFIX}"/bin/*; do
500 make_wrapper "${b##*/}-${WINE_VARIANT}" "${MY_PREFIX}/bin/${b##*/}"
506 eselect wine register ${P}
507 if [[ ${PN} == "wine-vanilla" ]]; then
508 eselect wine register --vanilla ${P} || die
511 eselect wine update --all --if-unset || die
513 xdg_desktop_database_update
516 ewarn "Without Wine Gecko, wine prefixes will not have a default"
517 ewarn "implementation of iexplore. Many older windows applications"
518 ewarn "rely upon the existence of an iexplore implementation, so"
519 ewarn "you will likely need to install an external one, like via winetricks"
522 ewarn "Without Wine Mono, wine prefixes will not have a default"
523 ewarn "implementation of .NET. Many windows applications rely upon"
524 ewarn "the existence of a .NET implementation, so you will likely need"
525 ewarn "to install an external one, like via winetricks"
530 eselect wine deregister ${P}
531 if [[ ${PN} == "wine-vanilla" ]]; then
532 eselect wine deregister --vanilla ${P} || die
535 eselect wine update --all --if-unset || die
539 xdg_desktop_database_update