Warcraft III : Battle.Net sous Linux Ou comment patcher WIne
novembre 4, 2008
Autrefois j’étais joueur linuxien sur Cedega, je n’avais jamais eu de problème avec Warcraft III. Le projet Cedega tombant dans l’oubli j’ai décidé de passer vers Wine.
Tout s’est très bien passé (Installation / Patch et mise à jour). Tout sauf le jeu sous Battle.Net (chat en ligne impossible et impossible d’héberger une partie).
Je me rends donc sur http://www.winehq.org/ et sur la page dédiée à mon jeu favori (http://appdb.winehq.org/objectManager.php?sClass=version&iId=3126) j’apprends la nécessité d’avoir un patch non validé par la team Wine.
Comment patcher Wine proprement sous Fedora
Etape 1 : Récolte des fichiers
(Si vous ne disposez pas de yumdownloader)
yum install yum-util
(puis pour récupérer le src.rpm de wine)
yumdownloader –source wine
Concernant le patch, je vous conseille de vous armer de patience et de savoir parler anglais. Une fois le bon patch récupéré (pour la bonne version) exposez le fièrement :
— a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -1826,12 +1826,12 @@ HANDLE WINAPI CreateIoCompletionPort(HANDLE hFileHandle, HANDLE hExistingComplet
TRACE(“(%p, %p, %08lx, %08x)\n”,
hFileHandle, hExistingCompletionPort, CompletionKey, dwNumberOfConcurrentThreads);- if (hExistingCompletionPort && hFileHandle == INVALID_HANDLE_VALUE)
+/* if (hExistingCompletionPort && hFileHandle == INVALID_HANDLE_VALUE)*/
{
SetLastError( ERROR_INVALID_PARAMETER);
return NULL;
}
-
+#if 0
if (hExistingCompletionPort)
ret = hExistingCompletionPort;
else
@@ -1858,6 +1858,7 @@ fail:
CloseHandle( ret );
SetLastError( RtlNtStatusToDosError(status) );
return 0;
+#endif
}/******************************************************************************
À SAVOIR : les zones en gras seront à supprimer, elles ne correspondent pas à la structure réelle utilisée pendant la construction du rpm.
Étape 2 : Préparation des fichiers
(installation des sources dans les dossiers /usr/src/redhat/)
rpm -i wine-1.1.5-1.fc9.src.rpm
copiez aussi votre patch dans le dossier /usr/src/redhat/SOURCES/
Étape 3 : Modification du fichier SPEC
Dans le fichier /usr/src/redhat/SPECS/wine.spec il faut :
- Augmenter le numéro de release d’un(+1) pour éviter un conflit avec la version existant.
- Indiquer la présence d’un nouveau patch
- Indiquer l’exécution du patch
- Remplir le changelog si vous souhaitiez partager ce rpm
Name: wine
Version: 1.1.5
Release: 2%{?dist}…
Source300: wine-mime-msi.desktop
# enhancements
Source400: wineshelllink-fedora
Patch400: wine-wineshelllink.patch# explain how to use wine with pulseaudio
Source402: README-FEDORA-PULSEAUDIOPatch1: wine-rpath.patch
# fix #448338
Patch2: wine-desktop-mime.patch# fix: I/O completion
Patch3: wine-completion-disable.patchBuildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
…
etup -q -n %{name}-%{version}-fe
%patch1
%patch2
%patch3
%patch400%build
…%changelog
* Sat Nov 02 2008 Bodman
- 1.1.5-2
- I/O fix…
Etape 4 – Compilation du RPM
Wine n’est compilable qu’en version i386. Mais ne vous inquiétez pas que vous soyez sur i386 ou x64, cela ne change rien.
Il y a un certain nombre de dépendances pour wine ….
yum install alsa-lib-devel.i386 alsa-lib-devel audiofile-devel.i386 audiofile-devel cups-devel.i386 cups-devel dbus-devel.i386 dbus-devel esound-devel.i386 esound-devel fontconfig-devel.i386 fontconfig-devel freetype-devel.i386 freetype-devel giflib-devel.i386 giflib-devel hal-devel.i386 hal-devel lcms-devel.i386 lcms-devel libICE-devel.i386 libICE-devel libjpeg-devel.i386 libjpeg-devel libpng-devel.i386 libpng-devel libSM-devel.i386 libSM-devel libusb-devel.i386 libusb-devel libX11-devel.i386 libX11-devel libXau-devel.i386 libXau-devel libXcomposite-devel.i386 libXcomposite-devel libXcursor-devel.i386 libXcursor-devel libXext-devel.i386 libXext-devel libXi-devel.i386 libXi-devel libXinerama-devel.i386 libXinerama-devel libxml2-devel.i386 libxml2-devel libXrandr-devel.i386 libXrandr-devel libXrender-devel.i386 libXrender-devel libxslt-devel.i386 libxslt-devel libXt-devel.i386 libXt-devel libXv-devel.i386 libXv-devel libXxf86vm-devel.i386 libXxf86vm-devel mesa-libGL-devel.i386 mesa-libGL-devel mesa-libGLU-devel.i386 mesa-libGLU-devel ncurses-devel.i386 ncurses-devel openldap-devel.i386 openldap-devel openssl-devel.i386 openssl-devel zlib-devel.i386 pkgconfig sane-backends-devel.i386 sane-backends-devel xorg-x11-proto-devel.i386 xorg-x11-proto-devel glibc-devel.i386 prelink fontforge flex bison
Pour ma part les paquets alsa-lib-devel giflib-devel et libusb-devel en version i386 entre en conflit avec mes paquets x64 :
yum remove alsa-lib-devel* giflib-devel* libusb-devel*
yum install alsa-lib-devel.i386 giflib-devel.i386 libusb-devel.i386 esound-devel.i386 gphoto2-devel.i386 sane-backends-devel.i386
(Compilation des RPMs)
cd /usr/src/redhat/SPECS/
rpmbuild -ba wine.spec –target i386
(Installation de Wine patché)
cd /usr/src/redhat/RPM/
rpm -Uvh wine-*1.1.5-2.fc9.i386.rpm
bien sûr en cas de mise à jour de wine plusieurs solutions s’offrent à vous :
- Patcher la nouvelle version.
- Bloquer les mises à jour automatiques de wine
- proposer votre patch à la personne responsable du paquet wine de votre distribution favorite.
Sources :
Patch : http://bugs.winehq.org/attachment.cgi?id=8368
compilation wine sur x64 : http://wiki.winehq.org/WineOn64bit