Patcher un programme : exemple avec dmenu.

Un patch est un fichier apportant des modifications au code source d'origine. Il contient les différences qui existent entre l'ancienne et la nouvelle version. Les patchs permettent la correction de bug et/ou l'ajout de fonctionnalités.

Je vais vous parler de l'application d'un patch simple etj e vais illustrer mes propos avec un patch trouvé sur le forum d'archlinux pour dmenu, sur lequel j'avais déjà écrit un article.

Ce patch permet d'avoir un dmenu vertical et de régler sa taille et sa position sur l'écran.

A quoi ressemble un patch :


Le patch regroupe donc les différences entre l(es) ancien(s) fichier(s) source(s) et le(s) nouveau(x).

Le patch est obtenu grâce à la commande diff (man diff), qui recense les différences entre les fichiers, ici le code source original et celui modifié.

L'avantage du patch est de pouvoir facilement redistribuer un fichier simple au lieux de toutes les sources modifiées.

Voici une partie du patch que nous allons utiliser :

diff -u dmenu.orig/config.mk dmenu/config.mk
--- dmenu.orig/config.mk    2009-05-13 18:10:00.000000000 -0400
+++ dmenu/config.mk    2009-05-13 18:10:35.000000000 -0400
@@ -1,14 +1,14 @@
 # dmenu version
-VERSION = 4.0
+VERSION = 4.0-vertical
 
 # Customize below to fit your system
 
 # paths
-PREFIX = /usr/local
+PREFIX = /usr
 MANPREFIX = ${PREFIX}/share/man
 
-X11INC = /usr/X11R6/include
-X11LIB = /usr/X11R6/lib
+X11INC = /usr/include/X11
+X11LIB = /usr/lib/X11


On voit que cette partie du patch concerne le fichier config.mk.
On remarque aussi les lignes ajoutées(commençant par un "+") et supprimées (celle commencée par un "-").

1. Méthode générale.


Telechargez les sources et le patch.

wget http://code.suckless.org/dl/tools/dmenu-4.0.tar.gz

wget http://evaryont.me/dmenu-vertical-history.patch


Rendez vous dans le dossier des sources.

cd dmenu-4.0


Appliquez le patch :

patch -p1 < /chemin/verslepatch/dmenu-vertical-history.patch


Compilez le programme :

make
make install


et voila le patch est appliqué et dmenu installé!

2. Application à Archlinux.


Pour Archlinux il est possible d'ajouter le patch en modifiant le PKGBUILD, grâce à yaourt. Yaourt permet de récupérer le PKGBUILD du paquet grâce à l'option Sb, le reste se passe comme l'installation de logiciel provenant d'AUR.

yaourt -Sb


editez le PKGBUILD

remplacer le patch par celui téléchargé dans la fonction build

patch -p1 < /chemin/verslepatch/dmenu-vertical-history.patch

et voila vous pouvez continuer la compilation et l'installation dmenu.

3. Exemples d'utilisation de dmenu :

dmenu prend une liste de mots séparés par un retour à la ligne en entrée, les mets en forme et affiche  un menu et renvoie notre choix en sortie.


Exemple du forum Archlinux pour mpd:

mpc play `mpc playlist | dmenu -p "Find:" -r -l 10 -w 400 -y 5 -x 5| cut -c 2- - | sed -r s/").*$"/""/`

Qui ouvrira une fenêtre dmenu sur la droite de votre écran avec la place pour 10 items.

Quodmenu, un petit script dmenu pour commander simplement Quodlibet :

#!/bin/bash

titre=$(quodlibet --print-playing "<title> - <artist>")

ctrl="PlayPause Next Prev Order $(quodlibet --status | cut -d " " -f 1,4)"

cmd=$(echo -e $ctrl | dmenu -i -p "$titre" -nb '#000000' -nf '#1994d1' -sb '#000000' -sf '#ffffff' )

echo $titre
case ${cmd} in
 "PlayPause")    exec quodlibet --play-pause;;
 "Next")    exec quodlibet --next;;
 "Prev")    exec quodlibet --previous;;
 "Order")    exec quodlibet --order=toggle
esac

Un autre exemple pour mpd par Geob, qui avait donné un lien vers son blog dans l'article sur dmenu :

http://pti-zarticles.dnsalias.org/wp/2008/10/19/mpd-la-musique-souple/

Et voila, vous savez maintenant appliquer un patch, et aussi des exemples supplémentaires et des précisions pour dmenu.

/! Quand vous récupérez un patch, faites le d'une source sure pour des raisons de securité evidente !!

Vus : 346
Publié par Génération Linux : 126