Lorsqu'on se lance dans la traduction ou la modification d'un logiciel libre, il faut trouver une manière simple et efficace de redistribuer son travail. Pour cela, il faut pouvoir le diffuser le plus légèrement possible. La solution consiste donc à ne distribuer que la différence entre la version originale et la vôtre. En un mot, il faut créer un patch.
PATCHER
Ce terme désigne
l'action d'appliquer un patch sur un ou plusieurs fichiers. En patchant
un fichier, vous apportez de manière automatique les modifications
nécessaires pour le mettre à jour. Le patch contient la
liste des différences qui existent entre l'ancienne et la nouvelle
version du ou des fichiers. Résultat : ce fichier de différences
est beaucoup plus léger et s'applique en une seule manipulation.
La commande utilisée pour appliquer un patch sous Linux s'appelle
tout naturellement patch. Cet utilitaire, créé par Larry
Wall (créateur de Perl), ne se limite pas à "regarder"
et changer les fichiers. En effet, patch peut réagir en fonction
du contexte et permettre d'appliquer un patch sur des fichiers déjà
modifiés.
CREATION D'UN PATCH
Pour créer
un fichier de différences, il faut utiliser la commande diff qui
analyse et détermine les "différences contextuelles"
entre deux fichiers. Celle-ci peut être utilisée de manière
récursive pour analyser les fichiers entre deux répertoires
distincts. Voici un exemple concret pour bien comprendre le fonctionnement
de la commande diff :
Soit un fichier source en C hello.c.old contenant le texte suivant :
//Demonstration file
for diff
//Creator :Diamonds Edition 1998
#include<stdio.h>
void main(void) {
printf("Hello World !");
}
Nous le modifions pour en faire une version française sous le nom hello.c. Ce qui nous donne :
//Fichier de démonstration
pour diff
//Créateur :Copyright 2000 Diamond Editions/Linux magazine France 1998
#include<stdio.h>
void main(void) {
printf("Bonjour le Monde !");
}
Ensuite, pour créer un fichier de différences, nous utilisons la commande :
diff -c hello.c.old hello.c > hello.diff
Le -c indiquant une comparaison contextuelle, il en résulte un fichier hello.diff qui peut alors être distribué à toutes personnes possédant la version anglaise de hello.c.
Bien souvent, les sources d'un logiciel ne se limitent pas à un seul fichier. Le programme est réparti sur plusieurs fichiers sources qui seront compilés, puis liés (linker) pour former le programme exécutable. La traduction (donc la modification), porte sur plusieurs fichiers et parfois plusieurs sous-répertoires. La méthode pour créer le patch consiste à modifier les sources dans son répertoire original, puis à installer les sources d'origine dans un répertoire différent. Soit le répertoire /h.old contenant la version anglaise de hello.c et le répertoire /h qui contiendra la version française. Placez-vous à la racine du disque puis tapez :
diff -cr h.old h >hello.diff
Le fichier hello.diff résultant contiendra les différences contextuelles entre les fichiers du répertoire /h.old (l'original en anglais) et /h (la version française). Le paramètre r passé en complément de -c indique un fonctionnement récursif.
APPLICATION D'UN PATCH
Pour appliquer le patch du premier exemple, nous utiliserons :
patch < hello.diff
dans le répertoire où figure le fichier hello.c anglais. Le patch s'appliquera et le fichier hello.c sera modifié pour devenir notre version française.
Dans le cas d'un patch s'appliquant sur plusieurs fichiers d'un répertoire, il faut copier le fichier .diff à la racine du disque , puis taper :
patch -p0 <hello.diff
Le paramètre
-p0 permet à patch de travailler de manière récursive.
Le fichier présent dans le répertoire /h se verra modifié
pour devenir notre version française.