Warcraft III : Battle.Net sous Linux Ou comment patcher WIne

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-PULSEAUDIO

Patch1: wine-rpath.patch

# fix #448338
Patch2: wine-desktop-mime.patch

# fix: I/O completion
Patch3: wine-completion-disable.patch

Buildroot: %{_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

3 réflexions sur “Warcraft III : Battle.Net sous Linux Ou comment patcher WIne

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s