1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
8 PLOCALES="ar 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 sk sl sr_RS@cyrillic sr_RS@latin sv te th tr uk wa zh_CN zh_TW"
11 inherit autotools-utils eutils fdo-mime flag-o-matic gnome2-utils l10n multilib multilib-minimal pax-utils toolchain-funcs virtualx
13 if [[ ${PV} == "9999" ]] ; then
14 EGIT_REPO_URI="git://source.winehq.org/git/wine.git http://source.winehq.org/git/wine.git"
20 MY_P="${PN}-${PV/_/-}"
21 SRC_URI="mirror://sourceforge/${PN}/Source/${MY_P}.tar.bz2"
22 KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
28 STAGING_P="wine-staging-${PV}"
29 STAGING_DIR="${WORKDIR}/${STAGING_P}"
30 WINE_GENTOO="wine-gentoo-2015.03.07"
31 GST_P="wine-1.7.34-gstreamer-v5"
32 DESCRIPTION="Free implementation of Windows(tm) on Unix"
33 HOMEPAGE="http://www.winehq.org/"
36 abi_x86_32? ( mirror://sourceforge/${PN}/Wine%20Gecko/${GV}/wine_gecko-${GV}-x86.msi )
37 abi_x86_64? ( mirror://sourceforge/${PN}/Wine%20Gecko/${GV}/wine_gecko-${GV}-x86_64.msi )
39 mono? ( mirror://sourceforge/${PN}/Wine%20Mono/${MV}/wine-mono-${MV}.msi )
40 gstreamer? ( https://dev.gentoo.org/~tetromino/distfiles/${PN}/${GST_P}.patch.bz2 )
41 https://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2"
43 if [[ ${PV} == "9999" ]] ; then
44 STAGING_EGIT_REPO_URI="git://github.com/wine-compholio/wine-staging.git"
47 staging? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz )
48 pulseaudio? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz )"
53 IUSE="+abi_x86_32 +abi_x86_64 +alsa capi cups custom-cflags dos elibc_glibc +fontconfig +gecko gphoto2 gsm gstreamer +jpeg +lcms ldap +mono mp3 ncurses netapi nls odbc openal opencl +opengl osmesa oss +perl pcap pipelight +png +prelink pulseaudio +realtime +run-exes s3tc samba scanner selinux +ssl staging test +threads +truetype +udisks v4l +X +xcomposite xinerama +xml"
54 REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )
56 elibc_glibc? ( threads )
58 pipelight? ( staging )
60 osmesa? ( opengl )" #286560
62 # FIXME: the test suite is unsuitable for us; many tests require net access
63 # or fail due to Xvfb's opengl limitations.
67 truetype? ( >=media-libs/freetype-2.0.0[${MULTILIB_USEDEP}] )
68 capi? ( net-dialup/capi4k-utils )
69 ncurses? ( >=sys-libs/ncurses-5.2:0=[${MULTILIB_USEDEP}] )
70 udisks? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
71 fontconfig? ( media-libs/fontconfig:=[${MULTILIB_USEDEP}] )
72 gphoto2? ( media-libs/libgphoto2:=[${MULTILIB_USEDEP}] )
73 openal? ( media-libs/openal:=[${MULTILIB_USEDEP}] )
75 media-libs/gstreamer:0.10[${MULTILIB_USEDEP}]
76 media-libs/gst-plugins-base:0.10[${MULTILIB_USEDEP}]
79 x11-libs/libXcursor[${MULTILIB_USEDEP}]
80 x11-libs/libXext[${MULTILIB_USEDEP}]
81 x11-libs/libXrandr[${MULTILIB_USEDEP}]
82 x11-libs/libXi[${MULTILIB_USEDEP}]
83 x11-libs/libXxf86vm[${MULTILIB_USEDEP}]
85 xinerama? ( x11-libs/libXinerama[${MULTILIB_USEDEP}] )
86 alsa? ( media-libs/alsa-lib[${MULTILIB_USEDEP}] )
87 cups? ( net-print/cups:=[${MULTILIB_USEDEP}] )
88 opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
90 virtual/glu[${MULTILIB_USEDEP}]
91 virtual/opengl[${MULTILIB_USEDEP}]
93 gsm? ( media-sound/gsm:=[${MULTILIB_USEDEP}] )
94 jpeg? ( virtual/jpeg:0=[${MULTILIB_USEDEP}] )
95 ldap? ( net-nds/openldap:=[${MULTILIB_USEDEP}] )
96 lcms? ( media-libs/lcms:2=[${MULTILIB_USEDEP}] )
97 mp3? ( >=media-sound/mpg123-1.5.0[${MULTILIB_USEDEP}] )
98 netapi? ( net-fs/samba[netapi(+),${MULTILIB_USEDEP}] )
99 nls? ( sys-devel/gettext[${MULTILIB_USEDEP}] )
100 odbc? ( dev-db/unixODBC:=[${MULTILIB_USEDEP}] )
101 osmesa? ( media-libs/mesa[osmesa,${MULTILIB_USEDEP}] )
102 pcap? ( net-libs/libpcap[${MULTILIB_USEDEP}] )
103 pulseaudio? ( media-sound/pulseaudio[${MULTILIB_USEDEP}] )
104 s3tc? ( media-libs/libtxc_dxtn[${MULTILIB_USEDEP}] )
105 staging? ( sys-apps/attr[${MULTILIB_USEDEP}] )
107 dev-libs/libxml2[${MULTILIB_USEDEP}]
108 dev-libs/libxslt[${MULTILIB_USEDEP}]
110 scanner? ( media-gfx/sane-backends:=[${MULTILIB_USEDEP}] )
111 ssl? ( net-libs/gnutls:=[${MULTILIB_USEDEP}] )
112 png? ( media-libs/libpng:0=[${MULTILIB_USEDEP}] )
113 v4l? ( media-libs/libv4l[${MULTILIB_USEDEP}] )
114 xcomposite? ( x11-libs/libXcomposite[${MULTILIB_USEDEP}] )
116 !app-emulation/emul-linux-x86-baselibs[-abi_x86_32(-)]
117 !<app-emulation/emul-linux-x86-baselibs-20140508-r14
118 !app-emulation/emul-linux-x86-db[-abi_x86_32(-)]
119 !<app-emulation/emul-linux-x86-db-20140508-r3
120 !app-emulation/emul-linux-x86-medialibs[-abi_x86_32(-)]
121 !<app-emulation/emul-linux-x86-medialibs-20140508-r6
122 !app-emulation/emul-linux-x86-opengl[-abi_x86_32(-)]
123 !<app-emulation/emul-linux-x86-opengl-20140508-r1
124 !app-emulation/emul-linux-x86-sdl[-abi_x86_32(-)]
125 !<app-emulation/emul-linux-x86-sdl-20140508-r1
126 !app-emulation/emul-linux-x86-soundlibs[-abi_x86_32(-)]
127 !<app-emulation/emul-linux-x86-soundlibs-20140508
128 !app-emulation/emul-linux-x86-xlibs[-abi_x86_32(-)]
129 !<app-emulation/emul-linux-x86-xlibs-20140508
132 RDEPEND="${COMMON_DEPEND}
133 dos? ( games-emulation/dosbox )
134 perl? ( dev-lang/perl dev-perl/XML-Simple )
135 samba? ( >=net-fs/samba-3.0.25 )
136 selinux? ( sec-policy/selinux-wine )
137 udisks? ( sys-fs/udisks:2 )
138 pulseaudio? ( realtime? ( sys-auth/rtkit ) )"
140 # tools/make_requests requires perl
141 DEPEND="${COMMON_DEPEND}
142 staging? ( dev-lang/perl dev-perl/XML-Simple )
146 x11-proto/xf86vidmodeproto
148 xinerama? ( x11-proto/xineramaproto )
149 prelink? ( sys-devel/prelink )
150 >=sys-kernel/linux-headers-2.6
155 # These use a non-standard "Wine" category, which is provided by
156 # /etc/xdg/applications-merged/wine.menu
157 QA_DESKTOP_FILE="usr/share/applications/wine-browsedrive.desktop
158 usr/share/applications/wine-notepad.desktop
159 usr/share/applications/wine-uninstaller.desktop
160 usr/share/applications/wine-winecfg.desktop"
162 wine_build_environment_check() {
163 [[ ${MERGE_TYPE} = "binary" ]] && return 0
166 if use abi_x86_64 && [[ $(gcc-major-version) = 5 && $(gcc-minor-version) -le 2 ]]; then
167 einfo "Checking for gcc-5 ms_abi compiler bug ..."
168 $(tc-getCC) -O2 "${FILESDIR}"/pr66838.c -o "${T}"/pr66838 || die
169 # Run in subshell to prevent "Aborted" message
170 if ! ( "${T}"/pr66838 || false ) >/dev/null 2>&1; then
171 eerror "64-bit wine cannot be built with gcc-5.1 or initial patchset of 5.2.0"
172 eerror "due to compiler bugs; please re-emerge the latest gcc-5.2.x ebuild,"
173 eerror "or use gcc-config to select a different compiler version."
174 eerror "See https://bugs.gentoo.org/549768"
180 if use abi_x86_64 && [[ $(( $(gcc-major-version) * 100 + $(gcc-minor-version) )) -lt 404 ]]; then
181 eerror "You need gcc-4.4+ to build 64-bit wine"
186 if use abi_x86_32 && use opencl && [[ x$(eselect opencl show 2> /dev/null) = "xintel" ]]; then
187 eerror "You cannot build wine with USE=opencl because intel-ocl-sdk is 64-bit only."
188 eerror "See https://bugs.gentoo.org/487864 for more details."
195 wine_build_environment_check || die
199 wine_build_environment_check || die
203 if [[ ${PV} == "9999" ]] ; then
205 if use staging || use pulseaudio; then
206 EGIT_REPO_URI=${STAGING_EGIT_REPO_URI}
207 unset ${PN}_LIVE_REPO;
208 EGIT_CHECKOUT_DIR=${STAGING_DIR} git-r3_src_unpack
211 unpack ${MY_P}.tar.bz2
212 use staging || use pulseaudio && unpack "${STAGING_P}.tar.gz"
215 unpack "${WINE_GENTOO}.tar.bz2"
216 use gstreamer && unpack "${GST_P}.patch.bz2"
218 l10n_find_plocales_changes "${S}/po" "" ".po"
222 local md5="$(md5sum server/protocol.def)"
224 "${FILESDIR}"/${PN}-1.5.26-winegcc.patch #260726
225 "${FILESDIR}"/${PN}-1.4_rc2-multilib-portage.patch #395615
226 "${FILESDIR}"/${PN}-1.7.12-osmesa-check.patch #429386
227 "${FILESDIR}"/${PN}-1.6-memset-O3.patch #480508
230 if use gstreamer; then
231 # See http://bugs.winehq.org/show_bug.cgi?id=30557
232 ewarn "Applying experimental patch to fix GStreamer support. Note that"
233 ewarn "this patch has been reported to cause crashes in certain games."
235 PATCHES+=( "${WORKDIR}/${GST_P}.patch" )
238 ewarn "Applying the unofficial Wine-Staging patchset which is unsupported"
239 ewarn "by Wine developers. Please don't report bugs to Wine bugzilla"
240 ewarn "unless you can reproduce them with USE=-staging"
242 local STAGING_EXCLUDE=""
243 use pipelight || STAGING_EXCLUDE="${STAGING_EXCLUDE} -W Pipelight"
245 # Launch wine-staging patcher in a subshell, using epatch as a backend, and gitapply.sh as a backend for binary patches
246 ebegin "Running Wine-Staging patch installer"
248 set -- DESTDIR="${S}" --backend=epatch --no-autoconf --all ${STAGING_EXCLUDE}
249 cd "${STAGING_DIR}/patches"
250 source "${STAGING_DIR}/patches/patchinstall.sh"
253 elif use pulseaudio; then
254 PATCHES+=( "${STAGING_DIR}/patches/winepulse-PulseAudio_Support"/*.patch )
256 autotools-utils_src_prepare
258 # Modification of the server protocol requires regenerating the server requests
259 if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then
260 einfo "server/protocol.def was patched; running tools/make_requests"
261 tools/make_requests || die #432348
263 sed -i '/^UPDATE_DESKTOP_DATABASE/s:=.*:=true:' tools/Makefile.in || die
264 if ! use run-exes; then
265 sed -i '/^MimeType/d' tools/wine.desktop || die #117785
268 # hi-res default icon, #472990, http://bugs.winehq.org/show_bug.cgi?id=24652
269 cp "${WORKDIR}"/${WINE_GENTOO}/icons/oic_winlogo.ico dlls/user32/resources/ || die
271 l10n_get_locales > po/LINGUAS # otherwise wine doesn't respect LINGUAS
275 export LDCONFIG=/bin/true
276 use custom-cflags || strip-flags
278 multilib-minimal_src_configure
281 multilib_src_configure() {
283 --sysconfdir=/etc/wine
288 $(use_with ncurses curses)
289 $(use_with udisks dbus)
290 $(use_with fontconfig)
291 $(use_with ssl gnutls)
292 $(use_enable gecko mshtml)
293 $(use_with gphoto2 gphoto)
295 $(use_with gstreamer)
299 $(use_enable mono mscoree)
300 $(use_with mp3 mpg123)
302 $(use_with nls gettext)
310 $(use_with threads pthread)
311 $(use_with scanner sane)
312 $(use_enable test tests)
313 $(use_with truetype freetype)
316 $(use_with xcomposite)
322 if use pulseaudio || use staging; then
323 myconf+=( $(use_with pulseaudio pulse) )
325 use staging && myconf+=(
327 $(use_with s3tc txc_dxtn)
330 local PKG_CONFIG AR RANLIB
331 # Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038
332 # set AR and RANLIB to make QA scripts happy; #483342
333 tc-export PKG_CONFIG AR RANLIB
336 if [[ ${ABI} == amd64 ]]; then
337 myconf+=( --enable-win64 )
339 myconf+=( --disable-win64 )
342 # Note: using --with-wine64 results in problems with multilib.eclass
343 # CC/LD hackery. We're using separate tools instead.
351 multilib_src_test() {
352 # FIXME: win32-only; wine64 tests fail with "could not find the Wine loader"
353 if [[ ${ABI} == x86 ]]; then
354 if [[ $(id -u) == 0 ]]; then
355 ewarn "Skipping tests since they cannot be run under the root user."
356 ewarn "To run the test ${PN} suite, add userpriv to FEATURES in make.conf"
360 WINEPREFIX="${T}/.wine-${ABI}" \
365 multilib_src_install_all() {
366 local DOCS=( ANNOUNCE AUTHORS README )
369 local locale_doc="documentation/README.$1"
370 [[ ! -e ${locale_doc} ]] || DOCS+=( ${locale_doc} )
372 l10n_for_each_locale_do add_locale_docs
375 prune_libtool_files --all
377 emake -C "../${WINE_GENTOO}" install DESTDIR="${D}" EPREFIX="${EPREFIX}"
379 insinto /usr/share/wine/gecko
380 use abi_x86_32 && doins "${DISTDIR}"/wine_gecko-${GV}-x86.msi
381 use abi_x86_64 && doins "${DISTDIR}"/wine_gecko-${GV}-x86_64.msi
384 insinto /usr/share/wine/mono
385 doins "${DISTDIR}"/wine-mono-${MV}.msi
387 if ! use perl ; then # winedump calls function_grep.pl, and winemaker is a perl script
388 rm "${D}"usr/bin/{wine{dump,maker},function_grep.pl} "${D}"usr/share/man/man1/wine{dump,maker}.1 || die
391 use abi_x86_32 && pax-mark psmr "${D}"usr/bin/wine{,-preloader} #255055
392 use abi_x86_64 && pax-mark psmr "${D}"usr/bin/wine64{,-preloader}
394 if use abi_x86_64 && ! use abi_x86_32; then
395 dosym /usr/bin/wine{64,} # 404331
396 dosym /usr/bin/wine{64,}-preloader
399 # respect LINGUAS when installing man pages, #469418
400 for l in de fr pl; do
401 use linguas_${l} || rm -r "${D}"usr/share/man/${l}*
410 gnome2_icon_cache_update
411 fdo-mime_desktop_database_update
414 ewarn "Without Wine Gecko, wine prefixes will not have a default"
415 ewarn "implementation of iexplore. Many older windows applications"
416 ewarn "rely upon the existence of an iexplore implementation, so"
417 ewarn "you will likely need to install an external one, like via winetricks"
420 ewarn "Without Wine Mono, wine prefixes will not have a default"
421 ewarn "implementation of .NET. Many windows applications rely upon"
422 ewarn "the existence of a .NET implementation, so you will likely need"
423 ewarn "to install an external one, like via winetricks"
428 gnome2_icon_cache_update
429 fdo-mime_desktop_database_update