Use https by default
[gentoo.git] / app-emulation / wine / wine-1.7.19-r2.ebuild
1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Id$
4
5 EAPI="5"
6
7 AUTOTOOLS_AUTORECONF=1
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"
9 PLOCALE_BACKUP="en"
10
11 inherit autotools-utils eutils fdo-mime flag-o-matic gnome2-utils l10n multilib multilib-minimal pax-utils toolchain-funcs virtualx
12
13 if [[ ${PV} == "9999" ]] ; then
14         EGIT_REPO_URI="git://source.winehq.org/git/wine.git http://source.winehq.org/git/wine.git"
15         EGIT_BRANCH="master"
16         inherit git-r3
17         SRC_URI=""
18         #KEYWORDS=""
19 else
20         MY_P="${PN}-${PV/_/-}"
21         SRC_URI="mirror://sourceforge/${PN}/Source/${MY_P}.tar.bz2"
22         KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
23         S=${WORKDIR}/${MY_P}
24 fi
25
26 GV="2.24"
27 MV="4.5.2"
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/"
34 SRC_URI="${SRC_URI}
35         gecko? (
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 )
38         )
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"
42
43 if [[ ${PV} == "9999" ]] ; then
44         STAGING_EGIT_REPO_URI="git://github.com/wine-compholio/wine-staging.git"
45 else
46         SRC_URI="${SRC_URI}
47         staging? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz )"
48 fi
49
50 LICENSE="LGPL-2.1"
51 SLOT="0"
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 )
54         test? ( abi_x86_32 )
55         elibc_glibc? ( threads )
56         mono? ( abi_x86_32 )
57         pipelight? ( staging )
58         osmesa? ( opengl )" #286560
59
60 # FIXME: the test suite is unsuitable for us; many tests require net access
61 # or fail due to Xvfb's opengl limitations.
62 RESTRICT="test"
63
64 COMMON_DEPEND="
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}] )
72         gstreamer? (
73                 media-libs/gstreamer:0.10[${MULTILIB_USEDEP}]
74                 media-libs/gst-plugins-base:0.10[${MULTILIB_USEDEP}]
75         )
76         X? (
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}]
82         )
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}] )
87         opengl? (
88                 virtual/glu[${MULTILIB_USEDEP}]
89                 virtual/opengl[${MULTILIB_USEDEP}]
90         )
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}] )
102         xml? (
103                 dev-libs/libxml2[${MULTILIB_USEDEP}]
104                 dev-libs/libxslt[${MULTILIB_USEDEP}]
105         )
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}] )
111         abi_x86_32? (
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
126         )"
127
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 ) )"
135
136 # tools/make_requests requires perl
137 DEPEND="${COMMON_DEPEND}
138         staging? ( dev-lang/perl dev-perl/XML-Simple )
139         X? (
140                 x11-proto/inputproto
141                 x11-proto/xextproto
142                 x11-proto/xf86vidmodeproto
143         )
144         xinerama? ( x11-proto/xineramaproto )
145         prelink? ( sys-devel/prelink )
146         >=sys-kernel/linux-headers-2.6
147         virtual/pkgconfig
148         virtual/yacc
149         sys-devel/flex"
150
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"
157
158 wine_build_environment_check() {
159         [[ ${MERGE_TYPE} = "binary" ]] && return 0
160
161         # bug #549768
162         if [[ $(gcc-major-version) = 5 ]]; then
163                 eerror "You need gcc-4.x to build wine; see https://bugs.gentoo.org/549768"
164                 eerror
165                 return 1
166         fi
167
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"
170                 eerror
171                 return 1
172         fi
173
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."
177                 eerror
178                 return 1
179         fi
180 }
181
182 pkg_pretend() {
183         wine_build_environment_check || die
184 }
185
186 pkg_setup() {
187         wine_build_environment_check || die
188 }
189
190 src_unpack() {
191         if [[ ${PV} == "9999" ]] ; then
192                 git-r3_src_unpack
193                 if use staging; then
194                         EGIT_REPO_URI=${STAGING_EGIT_REPO_URI}
195                         unset ${PN}_LIVE_REPO;
196                         EGIT_CHECKOUT_DIR=${STAGING_DIR} git-r3_src_unpack
197                 fi
198         else
199                 unpack ${MY_P}.tar.bz2
200                 use staging && unpack "${STAGING_P}.tar.gz"
201         fi
202
203         use pulseaudio && unpack "${PULSE_PATCHES}.tar.bz2"
204         if use staging; then
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
211                 fi
212         fi
213         unpack "${WINE_GENTOO}.tar.bz2"
214
215         l10n_find_plocales_changes "${S}/po" "" ".po"
216 }
217
218 src_prepare() {
219         local md5="$(md5sum server/protocol.def)"
220         local f
221         local PATCHES=(
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
226         )
227         use pulseaudio && PATCHES+=(
228                 "../${PULSE_PATCHES}"/*.patch #421365
229         )
230         if use staging; then
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"
234
235                 PATCHES+=(
236                         "${FILESDIR}/wine-1.7.19-makefile-race-cond.patch"
237                         "${STAGING_DIR}/patches"/*/*.patch #507950
238                         "${STAGING_DIR}/patches/patch-list.patch"
239                 )
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"
244                 done
245                 eend
246         fi
247         autotools-utils_src_prepare
248
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
253         fi
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
257         fi
258
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
261
262         l10n_get_locales > po/LINGUAS # otherwise wine doesn't respect LINGUAS
263 }
264
265 src_configure() {
266         export LDCONFIG=/bin/true
267         use custom-cflags || strip-flags
268
269         multilib-minimal_src_configure
270 }
271
272 multilib_src_configure() {
273         local myconf=(
274                 --sysconfdir=/etc/wine
275                 $(use_with alsa)
276                 $(use_with capi)
277                 $(use_with lcms cms)
278                 $(use_with cups)
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)
285                 $(use_with gsm)
286                 $(use_with gstreamer)
287                 --without-hal
288                 $(use_with jpeg)
289                 $(use_with ldap)
290                 $(use_enable mono mscoree)
291                 $(use_with mp3 mpg123)
292                 $(use_with netapi)
293                 $(use_with nls gettext)
294                 $(use_with openal)
295                 $(use_with opencl)
296                 $(use_with opengl)
297                 $(use_with osmesa)
298                 $(use_with oss)
299                 $(use_with png)
300                 $(use_with threads pthread)
301                 $(use_with scanner sane)
302                 $(use_enable test tests)
303                 $(use_with truetype freetype)
304                 $(use_with v4l)
305                 $(use_with X x)
306                 $(use_with xcomposite)
307                 $(use_with xinerama)
308                 $(use_with xml)
309                 $(use_with xml xslt)
310         )
311
312         use pulseaudio && myconf+=( --with-pulse )
313         use staging && myconf+=( --with-xattr )
314
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
319
320         if use amd64; then
321                 if [[ ${ABI} == amd64 ]]; then
322                         myconf+=( --enable-win64 )
323                 else
324                         myconf+=( --disable-win64 )
325                 fi
326
327                 # Note: using --with-wine64 results in problems with multilib.eclass
328                 # CC/LD hackery. We're using separate tools instead.
329         fi
330
331         ECONF_SOURCE=${S} \
332         econf "${myconf[@]}"
333         emake depend
334 }
335
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"
342                         return
343                 fi
344
345                 WINEPREFIX="${T}/.wine-${ABI}" \
346                 Xemake test
347         fi
348 }
349
350 multilib_src_install_all() {
351         local DOCS=( ANNOUNCE AUTHORS README )
352         local l
353         add_locale_docs() {
354                 local locale_doc="documentation/README.$1"
355                 [[ ! -e ${locale_doc} ]] || DOCS+=( ${locale_doc} )
356         }
357         l10n_for_each_locale_do add_locale_docs
358
359         einstalldocs
360         prune_libtool_files --all
361
362         emake -C "../${WINE_GENTOO}" install DESTDIR="${D}" EPREFIX="${EPREFIX}"
363         if use gecko ; then
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
367         fi
368         if use mono ; then
369                 insinto /usr/share/wine/mono
370                 doins "${DISTDIR}"/wine-mono-${MV}.msi
371         fi
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
374         fi
375
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}
378
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
382         fi
383
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}*
387         done
388 }
389
390 pkg_preinst() {
391         gnome2_icon_savelist
392 }
393
394 pkg_postinst() {
395         gnome2_icon_cache_update
396         fdo-mime_desktop_database_update
397
398         if ! use gecko; then
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"
403         fi
404         if ! use mono; then
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"
409         fi
410 }
411
412 pkg_postrm() {
413         gnome2_icon_cache_update
414         fdo-mime_desktop_database_update
415 }