[ précedent ] [ Copyright ] [ Table des matières ] [ suivant ]

Guide du nouveau responsable Debian
Chapitre 3 Modifier les sources


Normalement, les programmes s'installent d'eux-mêmes dans les sous-répertoires /usr/local. Mais les paquets Debian ne doivent pas utiliser ce répertoire, car il est réservé à l'usage privé de l'administrateur système (ou de l'utilisateur). Cela signifie que vous devez examinez le système de création de votre programme, en général en commençant par le Makefile. C'est le script que make(1) utilisera pour automatiser la création du programme. Pour plus de détails sur les Makefile, regardez fichier « rules », Section 4.4.

Notez que si votre programme utilise GNU automake(1) et/ou autoconf(1), ce qui signifie que les sources incluent des fichiers Makefile.am et/ou Makefile.in, respectivement, vous devrez modifier ces fichiers, parce que chaque appel d'automake va écraser les Makefile.in avec des informations générées à partir des Makefile.am, et que chaque appel de ./configure fera de même avec les fichiers Makefile, avec des données des Makefile.in. Éditer les fichiers Makefile.am requiert des connaissances sur automake, que vous pouvez apprendre dans la section automake d'info, alors qu'éditer les fichiers Makefile.in est globalement identique à l'édition de fichiers Makefile, si ce n'est qu'il faut faire attention à toutes les variables, à savoir toute chaîne entourée de « @ », comme par exemple @CFLAGS@ ou @LN_S@, qui sont remplacées par des valeurs réelles à chaque appel d'autoconf.

Notez qu'il n'y a pas la place ici pour entrer dans tous les détails sur les modifications, mais voici quelques-uns des problèmes qui reviennent souvent.


3.1 Installer dans un sous-répertoire

La plupart des programmes ont une certaine manière de s'installer dans la structure de répertoire de votre système, de sorte que leurs exécutables sont inclus dans votre $PATH, et que vous trouvez leurs documentation et pages de manuel aux places habituelles. Vous devez vous assurer qu'ils le font correctement, mais vous devez les forcer à s'installer dans un sous-répertoire temporaire qui sera créé sous votre répertoire debian/, normalement nommé debian/tmp, à partir duquel les outils du responsable vont construire un paquet .deb fonctionnel. Tout ce qui est contenu dans ce répertoire sera installé sur le système de l'utilisateur quand il installe votre paquet, la seule différence est que dpkg installera les fichiers dans le répertoire racine.

Fondamentalement, vous devez faire en sorte que le programme s'installe dans debian/tmp, mais se comporte correctement quand il est placé dans le répertoire racine, i.e. quand il est installé depuis le paquet .deb. Avec des programmes utilisant GNU autoconf, ceci est relativement facile, parce que dh_make va mettre en place des commandes pour le faire automatiquement, et vous pouvez tout aussi bien passer à la section suivante. Mais avec d'autres programmes, vous devrez plus que probablement examiner et éditer les Makefiles.

Voici les parties concernées du Makefile de gentoo :

       # Where to put binary on 'make install'?
       BIN     = /usr/local/bin
       # Where to put icons on 'make install'? Note: if you change this,
       # gentoo will not find the icons as it starts up. You're going to
       # have to alter gentoo's icon path (in the config window, "Paths"
       # tab) to get it work.
       ICONS   = /usr/local/lib/gentoo/

Avant tout, vous devriez insérer deux nouvelles lignes qui disent :

       # Edited for Debian GNU/Linux.
       DESTDIR =

parce que le processus de création en a besoin (ce sera expliqué plus loin, dans fichier « rules », Section 4.4).

Ensuite le Makefile mentionne l'emplacement final de l'exécutable. Changez-le en ceci :

       # Where to put binary on 'make install'?
       BIN     = $(DESTDIR)/usr/X11R6/bin

Mais pourquoi dans ce répertoire, et pas dans un autre ? Parce que Debian a défini quelques règles indiquant où les programmes doivent être installés. Ceci est spécifié dans le Standard de la Hiérarchie de Fichiers (/usr/share/doc/debian-policy/fhs). Ainsi, nous devons installer l'exécutable dans /usr/X11R6/bin, à la place de /usr/local/bin, et la page de manuel (qui n'existe pas dans notre cas, mais presque tous les programmes en ont une, aussi nous en ferons une plus tard) dans /usr/share/man/man1 à la place de /usr/local/man/man1.

Après cela nous avons une situation un peu plus difficile. Si vous changez une ligne en :

       ICONS   = $(DESTDIR)/usr/share/gentoo/

pour être conforme aux règles, vous devrez éditer quelques sources C. Mais où et que chercher ? Vous pouvez trouver où en lançant :

       grep -n usr/local/lib *.[ch]

(dans chaque sous-répertoire qui contient des fichiers .c et .h). Grep vous dira le nom du fichier et le numéro de ligne où il trouve une occurrence. Maintenant éditez ces fichiers et aux lignes indiquées, remplacez usr/local/lib par usr/share - et voilà. Remplacez juste usr/local/lib avec votre répertoire, et faites attention de ne pas casser le reste du code, si vous ne vous y connaissez pas trop en programmation C :-)

Après quoi vous devez trouver la cible d'installation (cherchez une ligne qui commence avec « install: ») et renommez toutes les références aux répertoires autres que ceux définis au début du Makefile. Dans notre cas, c'est déjà fait et cela simplifie un peu les choses. Auparavant, la cible d'installation de gentoo disait :

       # ----------------------------------------- Installation
     
       # You're going to have to be root to do this!
       install:        gentoo
                       install ./gentoo $(BIN)
                       install icons $(ICONS)
                       install gentoorc-example $(HOME)/.gentoorc

Après votre modification elle dit :

       # ----------------------------------------- Installation
     
       # You're going to have to be root to do this!
       install:        gentoo-target
                       install -d $(BIN) $(ICONS) $(DESTDIR)/etc
                       install ./gentoo $(BIN)
                       install -m644 icons/* $(ICONS)
                       install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
                       install -d $(DESTDIR)/usr/share/doc/gentoo/html
                       cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html

Le lecteur attentif notera que j'ai changé « gentoo » en « gentoo-target » dans la ligne « install: ». C'est ce qu'on appelle une correction de bogue :-)

Chaque fois que vous faites des modifications qui ne sont pas spécifiquement lié à Debian, envoyez les au responsable amont pour qu'elles puissent être inclue dans la version suivante du programme. Remarquez que vous ne devez pas envoyer les fichiers debian/* en amont, mais vous devriez le faire pour toute autre modification. Et essayez d'être gentil avec le responsable amont, en évitant de faire des corrections spécifiques à Debian ou Linux (ou même Unix).


3.2 Bibliothèques différentes

Il y a souvent un problème commun : des bibliothèques sont souvent différentes d'une plate-forme à l'autre. Par exemple, Makefile peut contenir une référence à une bibliothèque qui n'existe pas dans Debian. Dans ce cas, nous devons la changer en une bibliothèque qui existe dans Debian, et qui sert à la même chose. La meilleure méthode est de commenter ces lignes parce qu'elles peuvent fournir des indices à d'autres qui ont le même problème.

Ainsi, s'il y a une ligne dans le Makefile (ou Makefile.in) de votre programme qui dit quelque chose comme ceci (et votre programme ne compile pas) :

       LIBS = -lcurses -lquelquechose -lautrechose

Changez la en ceci, et cela marchera probablement :

       LIBS = -lncurses -lquelquechose -lautrechose
       #LIBS = -lcurses -lquelquechose -lautrechose


[ précedent ] [ Copyright ] [ Table des matières ] [ suivant ]
Guide du nouveau responsable Debian
version 1.0.2, 10 juin 2001.
Josip Rodin jrodin@jagor.srce.hr
Traducteur : Frédéric Dumont frederic.dumont@freeworld.be