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-1.7.18-1"
29 STAGING_DIR="${WORKDIR}/wine-staging-1.7.19"
30 WINE_GENTOO="wine-gentoo-2015.03.07"
31 PULSE_PATCHES="winepulse-patches-1.7.12"
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 pulseaudio? ( https://dev.gentoo.org/~tetromino/distfiles/${PN}/${PULSE_PATCHES}.tar.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 )"
52 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 pipelight +png +prelink pulseaudio +realtime +run-exes samba scanner selinux +ssl staging test +threads +truetype +udisks v4l +X +xcomposite xinerama +xml"
53 REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )
55 elibc_glibc? ( threads )
57 pipelight? ( staging )
58 osmesa? ( opengl )" #286560
60 # FIXME: the test suite is unsuitable for us; many tests require net access
61 # or fail due to Xvfb's opengl limitations.
65 truetype? ( >=media-libs/freetype-2.0.0[${MULTILIB_USEDEP}] )
66 capi? ( net-dialup/capi4k-utils )
67 ncurses? ( >=sys-libs/ncurses-5.2:=[${MULTILIB_USEDEP}] )
68 udisks? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
69 fontconfig? ( media-libs/fontconfig:=[${MULTILIB_USEDEP}] )
70 gphoto2? ( media-libs/libgphoto2:=[${MULTILIB_USEDEP}] )
71 openal? ( media-libs/openal:=[${MULTILIB_USEDEP}] )
73 media-libs/gstreamer:0.10[${MULTILIB_USEDEP}]
74 media-libs/gst-plugins-base:0.10[${MULTILIB_USEDEP}]
77 x11-libs/libXcursor[${MULTILIB_USEDEP}]
78 x11-libs/libXext[${MULTILIB_USEDEP}]
79 x11-libs/libXrandr[${MULTILIB_USEDEP}]
80 x11-libs/libXi[${MULTILIB_USEDEP}]
81 x11-libs/libXxf86vm[${MULTILIB_USEDEP}]
83 xinerama? ( x11-libs/libXinerama[${MULTILIB_USEDEP}] )
84 alsa? ( media-libs/alsa-lib[${MULTILIB_USEDEP}] )
85 cups? ( net-print/cups:=[${MULTILIB_USEDEP}] )
86 opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
88 virtual/glu[${MULTILIB_USEDEP}]
89 virtual/opengl[${MULTILIB_USEDEP}]
91 gsm? ( media-sound/gsm:=[${MULTILIB_USEDEP}] )
92 jpeg? ( virtual/jpeg:0=[${MULTILIB_USEDEP}] )
93 ldap? ( net-nds/openldap:=[${MULTILIB_USEDEP}] )
94 lcms? ( media-libs/lcms:2=[${MULTILIB_USEDEP}] )
95 mp3? ( >=media-sound/mpg123-1.5.0[${MULTILIB_USEDEP}] )
96 netapi? ( net-fs/samba[netapi(+),${MULTILIB_USEDEP}] )
97 nls? ( sys-devel/gettext[${MULTILIB_USEDEP}] )
98 odbc? ( dev-db/unixODBC:=[${MULTILIB_USEDEP}] )
99 osmesa? ( media-libs/mesa[osmesa,${MULTILIB_USEDEP}] )
100 pulseaudio? ( media-sound/pulseaudio[${MULTILIB_USEDEP}] )
101 staging? ( sys-apps/attr[${MULTILIB_USEDEP}] )
103 dev-libs/libxml2[${MULTILIB_USEDEP}]
104 dev-libs/libxslt[${MULTILIB_USEDEP}]
106 scanner? ( media-gfx/sane-backends:=[${MULTILIB_USEDEP}] )
107 ssl? ( net-libs/gnutls:=[${MULTILIB_USEDEP}] )
108 png? ( media-libs/libpng:0=[${MULTILIB_USEDEP}] )
109 v4l? ( media-libs/libv4l[${MULTILIB_USEDEP}] )
110 xcomposite? ( x11-libs/libXcomposite[${MULTILIB_USEDEP}] )
112 !app-emulation/emul-linux-x86-baselibs[-abi_x86_32(-)]
113 !<app-emulation/emul-linux-x86-baselibs-20140508-r14
114 !app-emulation/emul-linux-x86-db[-abi_x86_32(-)]
115 !<app-emulation/emul-linux-x86-db-20140508-r3
116 !app-emulation/emul-linux-x86-medialibs[-abi_x86_32(-)]
117 !<app-emulation/emul-linux-x86-medialibs-20140508-r6
118 !app-emulation/emul-linux-x86-opengl[-abi_x86_32(-)]
119 !<app-emulation/emul-linux-x86-opengl-20140508-r1
120 !app-emulation/emul-linux-x86-sdl[-abi_x86_32(-)]
121 !<app-emulation/emul-linux-x86-sdl-20140508-r1
122 !app-emulation/emul-linux-x86-soundlibs[-abi_x86_32(-)]
123 !<app-emulation/emul-linux-x86-soundlibs-20140508
124 !app-emulation/emul-linux-x86-xlibs[-abi_x86_32(-)]
125 !<app-emulation/emul-linux-x86-xlibs-20140508
128 RDEPEND="${COMMON_DEPEND}
129 dos? ( games-emulation/dosbox )
130 perl? ( dev-lang/perl dev-perl/XML-Simple )
131 samba? ( >=net-fs/samba-3.0.25 )
132 selinux? ( sec-policy/selinux-wine )
133 udisks? ( sys-fs/udisks:2 )
134 pulseaudio? ( realtime? ( sys-auth/rtkit ) )"
136 # tools/make_requests requires perl
137 DEPEND="${COMMON_DEPEND}
138 staging? ( dev-lang/perl dev-perl/XML-Simple )
142 x11-proto/xf86vidmodeproto
144 xinerama? ( x11-proto/xineramaproto )
145 prelink? ( sys-devel/prelink )
146 >=sys-kernel/linux-headers-2.6
151 # These use a non-standard "Wine" category, which is provided by
152 # /etc/xdg/applications-merged/wine.menu
153 QA_DESKTOP_FILE="usr/share/applications/wine-browsedrive.desktop
154 usr/share/applications/wine-notepad.desktop
155 usr/share/applications/wine-uninstaller.desktop
156 usr/share/applications/wine-winecfg.desktop"
158 wine_build_environment_check() {
159 [[ ${MERGE_TYPE} = "binary" ]] && return 0
162 if [[ $(gcc-major-version) = 5 ]]; then
163 eerror "You need gcc-4.x to build wine; see https://bugs.gentoo.org/549768"
168 if use abi_x86_64 && [[ $(( $(gcc-major-version) * 100 + $(gcc-minor-version) )) -lt 404 ]]; then
169 eerror "You need gcc-4.4+ to build 64-bit wine"
174 if use abi_x86_32 && use opencl && [[ x$(eselect opencl show 2> /dev/null) = "xintel" ]]; then
175 eerror "You cannot build wine with USE=opencl because intel-ocl-sdk is 64-bit only."
176 eerror "See https://bugs.gentoo.org/487864 for more details."
183 wine_build_environment_check || die
187 wine_build_environment_check || die
191 if [[ ${PV} == "9999" ]] ; then
194 EGIT_REPO_URI=${STAGING_EGIT_REPO_URI}
195 unset ${PN}_LIVE_REPO;
196 EGIT_CHECKOUT_DIR=${STAGING_DIR} git-r3_src_unpack
199 unpack ${MY_P}.tar.bz2
200 use staging && unpack "${STAGING_P}.tar.gz"
203 use pulseaudio && unpack "${PULSE_PATCHES}.tar.bz2"
205 # we use a separate pulseaudio patchset
206 rm -r "${STAGING_DIR}/patches/06-winepulse" || die
207 # ... and need special tools for binary patches
208 mv "${STAGING_DIR}/patches/10-Missing_Fonts" "${T}" || die
209 if ! use pipelight; then
210 rm -r "${STAGING_DIR}/patches/97-Pipelight" || die
213 unpack "${WINE_GENTOO}.tar.bz2"
215 l10n_find_plocales_changes "${S}/po" "" ".po"
219 local md5="$(md5sum server/protocol.def)"
222 "${FILESDIR}"/${PN}-1.5.26-winegcc.patch #260726
223 "${FILESDIR}"/${PN}-1.4_rc2-multilib-portage.patch #395615
224 "${FILESDIR}"/${PN}-1.7.12-osmesa-check.patch #429386
225 "${FILESDIR}"/${PN}-1.6-memset-O3.patch #480508
227 use pulseaudio && PATCHES+=(
228 "../${PULSE_PATCHES}"/*.patch #421365
231 ewarn "Applying the unofficial Wine-Staging patchset which is unsupported"
232 ewarn "by Wine developers. Please don't report bugs to Wine bugzilla"
233 ewarn "unless you can reproduce them with USE=-staging"
236 "${FILESDIR}/wine-1.7.19-makefile-race-cond.patch"
237 "${STAGING_DIR}/patches"/*/*.patch #507950
238 "${STAGING_DIR}/patches/patch-list.patch"
240 # epatch doesn't support binary patches
241 ebegin "Applying Staging font patches"
242 for f in "${T}/10-Missing_Fonts"/*.patch; do
243 "${STAGING_DIR}/debian/tools/gitapply.sh" < "${f}" || die "Failed to apply Compholio font patches"
247 autotools-utils_src_prepare
249 # Modification of the server protocol requires regenerating the server requests
250 if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then
251 einfo "server/protocol.def was patched; running tools/make_requests"
252 tools/make_requests || die #432348
254 sed -i '/^UPDATE_DESKTOP_DATABASE/s:=.*:=true:' tools/Makefile.in || die
255 if ! use run-exes; then
256 sed -i '/^MimeType/d' tools/wine.desktop || die #117785
259 # hi-res default icon, #472990, http://bugs.winehq.org/show_bug.cgi?id=24652
260 cp "${WORKDIR}"/${WINE_GENTOO}/icons/oic_winlogo.ico dlls/user32/resources/ || die
262 l10n_get_locales > po/LINGUAS # otherwise wine doesn't respect LINGUAS
266 export LDCONFIG=/bin/true
267 use custom-cflags || strip-flags
269 multilib-minimal_src_configure
272 multilib_src_configure() {
274 --sysconfdir=/etc/wine
279 $(use_with ncurses curses)
280 $(use_with udisks dbus)
281 $(use_with fontconfig)
282 $(use_with ssl gnutls)
283 $(use_enable gecko mshtml)
284 $(use_with gphoto2 gphoto)
286 $(use_with gstreamer)
290 $(use_enable mono mscoree)
291 $(use_with mp3 mpg123)
293 $(use_with nls gettext)
300 $(use_with threads pthread)
301 $(use_with scanner sane)
302 $(use_enable test tests)
303 $(use_with truetype freetype)
306 $(use_with xcomposite)
312 use pulseaudio && myconf+=( --with-pulse )
313 use staging && myconf+=( --with-xattr )
315 local PKG_CONFIG AR RANLIB
316 # Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038
317 # set AR and RANLIB to make QA scripts happy; #483342
318 tc-export PKG_CONFIG AR RANLIB
321 if [[ ${ABI} == amd64 ]]; then
322 myconf+=( --enable-win64 )
324 myconf+=( --disable-win64 )
327 # Note: using --with-wine64 results in problems with multilib.eclass
328 # CC/LD hackery. We're using separate tools instead.
336 multilib_src_test() {
337 # FIXME: win32-only; wine64 tests fail with "could not find the Wine loader"
338 if [[ ${ABI} == x86 ]]; then
339 if [[ $(id -u) == 0 ]]; then
340 ewarn "Skipping tests since they cannot be run under the root user."
341 ewarn "To run the test ${PN} suite, add userpriv to FEATURES in make.conf"
345 WINEPREFIX="${T}/.wine-${ABI}" \
350 multilib_src_install_all() {
351 local DOCS=( ANNOUNCE AUTHORS README )
354 local locale_doc="documentation/README.$1"
355 [[ ! -e ${locale_doc} ]] || DOCS+=( ${locale_doc} )
357 l10n_for_each_locale_do add_locale_docs
360 prune_libtool_files --all
362 emake -C "../${WINE_GENTOO}" install DESTDIR="${D}" EPREFIX="${EPREFIX}"
364 insinto /usr/share/wine/gecko
365 use abi_x86_32 && doins "${DISTDIR}"/wine_gecko-${GV}-x86.msi
366 use abi_x86_64 && doins "${DISTDIR}"/wine_gecko-${GV}-x86_64.msi
369 insinto /usr/share/wine/mono
370 doins "${DISTDIR}"/wine-mono-${MV}.msi
372 if ! use perl ; then # winedump calls function_grep.pl, and winemaker is a perl script
373 rm "${D}"usr/bin/{wine{dump,maker},function_grep.pl} "${D}"usr/share/man/man1/wine{dump,maker}.1 || die
376 use abi_x86_32 && pax-mark psmr "${D}"usr/bin/wine{,-preloader} #255055
377 use abi_x86_64 && pax-mark psmr "${D}"usr/bin/wine64{,-preloader}
379 if use abi_x86_64 && ! use abi_x86_32; then
380 dosym /usr/bin/wine{64,} # 404331
381 dosym /usr/bin/wine{64,}-preloader
384 # respect LINGUAS when installing man pages, #469418
385 for l in de fr pl; do
386 use linguas_${l} || rm -r "${D}"usr/share/man/${l}*
395 gnome2_icon_cache_update
396 fdo-mime_desktop_database_update
399 ewarn "Without Wine Gecko, wine prefixes will not have a default"
400 ewarn "implementation of iexplore. Many older windows applications"
401 ewarn "rely upon the existence of an iexplore implementation, so"
402 ewarn "you will likely need to install an external one, like via winetricks"
405 ewarn "Without Wine Mono, wine prefixes will not have a default"
406 ewarn "implementation of .NET. Many windows applications rely upon"
407 ewarn "the existence of a .NET implementation, so you will likely need"
408 ewarn "to install an external one, like via winetricks"
413 gnome2_icon_cache_update
414 fdo-mime_desktop_database_update