Ticket #305: portfileHOWTO.php.html

File portfileHOWTO.php.html, 15.2 KB (added by ports@…, 22 years ago)

French localization of the Portfile's HowTo webpage.

Line 
1<? // // File : portfileHOWTO.php // Version : $Id: portfileHOWTO.php,v 1.9 2002/12/06 07:15:40 michaelm Exp $ // Location : /projects/darwinports/portfileHOWTO.php // include_once("$DOCUMENT_ROOT/includes/od_lib.inc.php"); od_print_header("How to Write a DarwinPorts Portfile", "fr", "iso-8859-1", "", 0); ?>
2<h2>
3        Comment écrire un Portfile pour Darwinports
4</h2>
5<pre><tt>
6Kevin Van Vechten | <a href="mailto:kevin@opendarwin.org">kevin@opendarwin.org</a>
78-Oct-2002
8</tt></pre>
9<h3>
10        Divers
11</h3>
12<p>
13        DarwinPorts automatise les tâches usuelles requises pour le portage de logiciel sur Darwin. Les Portfiles contiennent les informations nécessaires pour que la compilation et l'installation de logiciels particuliers soient faites correctement sous Darwin. Le but de DarwinPorts est de pouvoir garder la syntaxe des Portfiles aussi simple que possible, tout en supportant les cas spéciaux requis par la compilation et l'installation de beaucoup de logiciel afin que tout se passe avec succès.
14</p>
15<p>
16        Cet article décrit la constitution d'un simple Portfile, et explore les fonctions les plus communes à DarwinPorts.
17</p>
18<h3>
19        Commencer
20</h3>
21<p>
22        Pour pouvoir travailler avec DarwinPorts, vous devrez le télécharger et l'installer sur votre système. La <a href="http://opendarwin.org/projects/darwinports/fr/">page d'accueil</a> du projet DarwinPorts décrit comment se le procurer et l'installer.
23</p>
24<p>
25        Comme vous vous intéressez à l'écriture d'un Portfile, changeons quelques options de configuration qui vous aidera au déboguage. Éditez le fichier <tt>/etc/ports/ports.conf</tt> afin que les changements suivants y soient incorporés (vous devrez passer par <tt>sudo</tt> pour pouvoir éditer ce fichier) :
26</p>
27<pre><tt>
28ports_debug     yes
29ports_verbose   yes
30</tt></pre>
31<p>
32        Cela affichera des messages utiles pour le déboguage qui sont normalement omis lors de l'utilisation de DarwinPorts.
33</p>
34<p>
35        DarwinPorts effectuera plusieurs tâches basiques prédéfinies, qui sont :
36</p>
37<a name="basictoc"></a>
38<h4>
39        Sujets basiques
40</h4>
41<ul>
42        <li><a href="#fetch">Récupération des sources</a></li>
43        <li><a href="#checksum">Vérification du fichier téléchargé</a></li>
44        <li><a href="#extract">Extraction des sources dans le répertoire de travail</a></li>
45        <li><a href="#configure">Exécution d'un script Configure</a></li>
46        <li><a href="#build">Compilation des sources</a></li>
47        <li><a href="#install">Installation du programme dans le système</a></li>
48</ul>
49<a name="advancedtoc"></a>
50<h4>
51        Sujets avancés
52</h4>
53<ul>
54        <li><a href="#targets">Modifier des cibles</a></li>
55        <li><a href="#variants">Variantes du Portfile</a></li>
56</ul>
57<a name="appendixtoc"></a>
58<h4>
59        Annexe
60</h4>
61<ul>
62        <li><a href="#portfilelist">Aperçu d'un Portfile</a></li>
63        <li><a href="#contentslist">Liste de contents</a></li>
64</ul>
65<h3>
66        <a name="fetch"></a>Récupération des sources
67</h3>
68<p>
69        La première chose à faire est de choisir un logiciel à porter. Pour cet exemple, nous allons utiliser ircII, un client IRC populaire. Nous commencerons avec un Portfile simple, décrivant les attributs basiques d'ircII comme son nom, sa version et le site où nous pouvons télécharger les sources. Créez un répertoire de travail nommé <tt>ircii</tt> et créez à l'intérieur un fichier nommé <tt>Portfile</tt> ayant le contenu suivant :
70</p>
71<pre><tt>
72PortSystem 1.0
73name            ircii
74version         20020912
75categories      irc
76maintainers     kevin@opendarwin.org
77master_sites    ftp://ircftp.au.eterna.com.au/pub/ircII/
78</tt></pre>
79<p>
80        Un Portfile consiste en une suite de paires de type clé/valeur. Les clés <tt>name</tt> et <tt>version</tt> décrivent le nom et la version du logiciel. La clé <tt>categories</tt> est une liste des catégories auquel le logiciel peut appartenir de façon logique; c'est utilisé dans un but d'organisation. La première entrée dans <tt>categories</tt> devrait correspondre au nom du répertoire où doit résider le répertoire du port. La clé <tt>maintainers</tt> devrait, elle, contenir votre adresse email et la clé <tt>master_sites</tt> devrait quant à elle contenir une liste des sites où télécharger les sources. DarwinPorts utilise les termes "clés" et "options" indifféremment comme la plupart des clés sont utilisées comme des options d'une tâche particulière dans le processus du portage.
81</p>
82<p>
83        Arrivé à ce point, le Portfile est assez complet pour permettre le téléchargement d'ircII. Par défaut, DarwinPorts ajoutera <tt>version</tt> à <tt>name</tt> et considérera que les sources sont au format <tt>.tar.gz</tt>. Depuis votre répertoire de travail, exécutez la commande suivante :
84</p>
85<pre><tt>
86% port checksum
87</tt></pre>
88<p>
89        La commande <tt>port</tt> opère directement sur le <tt>Portfile</tt> du répertoire de travail actuel. Vous devriez voir la même chose que ce qui suit :
90</p>
91<!--
92.........|.........|.........|.........|.........|.........|.........|.........|
93-->
94<pre><tt>
95DEBUG: Executing com.apple.main (ircii)
96DEBUG: Executing com.apple.fetch (ircii)
97--->  ircii-20020912.tar.gz doesn't seem to exist in /opt/local/var/db/dports/
98distfiles
99--->  Attempting to fetch ircii-20020912.tar.gz from ftp://
100ircftp.au.eterna.com.au/pub/ircII/
101DEBUG: Executing com.apple.checksum (ircii)
102Error: No checksums statement in Portfile.  File checksums are:
103ircii-20020912.tar.gz md5 2ae68c015698f58763a113e9bc6852cc
104Error: Target error: com.apple.checksum returned: No checksums statement in
105Portfile.
106</tt></pre>
107<h3>
108        <a name="checksum"></a>Vérification du fichier téléchargé
109</h3>
110<p>
111        Remarquez que DarwinPorts vérifiera dans un premier temps s'il existe une copie locale d'<tt>ircii-20020912.tar.gz</tt> mais il ne la trouvera pas, donc il la téléchargera depuis le site distant. La commande port ne se termine correctement car l'erreur : "No checksums statement in Portfile" est arrivée. Les Portfiles doivent contenir une somme de contrôle md5 de tous les fichiers distribués -- cela permet à DarwinPorts de vérifier l'exactitude et l'authenticité des sources. Pour plus de souplesse, une somme de contrôle md5 pour les fichiers téléchargés est affichée lorsque l'argument <tt>checksums</tt> n'est pas spécifié. Revenez en arrière et ajoutez ce qui suit à votre Portfile :
112</p>
113<pre><tt>
114checksums       md5 2ae68c015698f58763a113e9bc6852cc
115</tt></pre>
116<h3>
117        <a name="extract"></a>Extraction des sources dans le répertoire de travail
118</h3>
119<p>
120        Maintenant que nous avons une somme de contrôle, nous pouvons vérifier nos sources. Procédons à l'extraction des sources dans notre répertoire de travail. Exécutez la commande suivante :
121</p>
122<pre><tt>
123% port extract
124</tt></pre>
125<p>
126        Qui devrait afficher ce qui suit :
127</p>
128<!--
129.........|.........|.........|.........|.........|.........|.........|.........|
130-->
131<pre><tt>
132DEBUG: Skipping completed com.apple.main (ircii)
133DEBUG: Skipping completed com.apple.fetch (ircii)
134DEBUG: Executing com.apple.checksum (ircii)
135--->  Checksum OK for ircii-20020912.tar.gz
136DEBUG: Executing com.apple.extract (ircii)
137--->  Extracting for ircii-20020912
138--->  Extracting ircii-20020912.tar.gz ... DEBUG: Assembled command: 'cd /Users/
139kevin/opendarwin/proj/darwinports/dports/irc/ircii/work &amp;&amp; gzip -dc /opt/local/
140var/db/dports/distfiles/ircii-20020912.tar.gz | tar -xf -'
141Done
142</tt></pre>
143<h3>
144        <a name="configure"></a>Exécution d'un script Configure
145</h3>
146<p>
147        Maintenant que les sources ont été extraites dans un répertoire nommé <tt>work</tt> placé dans le répertoire de travail actuel, nous pouvons configurer les sources afin de les compiler avec les options désirées. Par défaut, DarwinPorts assume que le logiciel que vous portez utilise un script configure autoconf, et toujours par défaut, DarwinPorts passera l'argument <tt>--prefix=${prefix}</tt> au script configure, spécifiant que ce logiciel devra s'installer dans la hiérarchie utilisée par DarwinPorts.
148</p>
149<p>
150        Les options standards d'ircII semblent correctes pour une installation de base sur Darwin, donc nous passerons directement à la phase de compilation.
151</p>
152<h3>
153        <a name="build"></a>Compilation des sources
154</h3>
155<p>
156        Pour compiler, tapez ce qui suit :
157</p>
158<pre><tt>
159% port build
160</tt></pre>
161<p>
162        Par défaut, la phase de compilation exécute l'utilitaire système make(1). (Cela peut être changé avec l'option <tt>build.type</tt> qui accepte les arguments tel que <tt>bsd</tt>, <tt>gnu</tt> ou <tt>pbx</tt>. Alternativement, l'option <tt>build.cmd</tt> peut être utilisée pour spécifier une commande de compilation arbitraire.) L'étape ci-dessus a commencé la compilation des sources, lorsqu'elle sera terminée, nous serons fin prêt pour installer le logiciel.
163</p>
164<h3>
165        <a name="install"></a>Installation du programme dans le système
166</h3>
167<p>
168        Les Portfiles doivent contenir une option <tt>contents</tt> qui spécifie quels sont les fichiers installés. DarwinPorts utilise cette information pour cataloguer quel fichier appartient à quel logiciel, car ensuite il peut être désinstaller ultérieurement. Chaque paramètre de <tt>contents</tt> est un chemin vers un fichier. Tous les chemins sont relatifs à la variable <tt>${prefix}</tt>. Comme moyen simple de déterminer exactement quels fichiers font partie d'ircII, utilisons la commande "find" pour composer un manifeste des fichiers dans la hiérarchie <tt>${prefix}</tt>. Après l'installation, nous allons réutiliser la commande "find" et utiliser les différences pour générer notre liste.
169</p>
170<p>
171        En utilisant le format unidiff, nous allons comparer la liste des fichiers existants avec la nouvelle liste de fichiers, en prenant en compte juste les nouvelles lignes ajoutées. Comme les chemins sont supposés être relatifs à <tt>${prefix}</tt>, nous allons passer via <tt>sed</tt> et effacer le prefix (/opt/local/), et stocker le résultat dans un fichier nommé <tt>contents</tt> placé dans notre dossier hébergeant notre port. Nous pouvons faire tout cela via les commandes suivantes :
172</p>
173<!--
174.........|.........|.........|.........|.........|.........|.........|.........|
175-->
176<pre><tt>
177% find /opt/local > /tmp/existing.files
178% sudo port install
179% find /opt/local > /tmp/more.files
180% diff -u /tmp/existing.files /tmp/more.files | grep ^\+\/ | \
181  sed -e 's|^\+/opt/local/*||g' > contents
182</tt></pre>
183<p>
184        Maintenant que nous avons un fichier contents dans notre répertoire hébergeant notre port, nous devrions l'éditer afin de débuter avec <tt>contents {</tt> et de terminer avec un <tt>}</tt>. (C'est important de noter que tout autre processus utilisant la hiérarchie <tt>${prefix}</tt> peut interférer avec l'efficacité de la commande <tt>find</tt>. Vous devriez vérifier le fichier <tt>contents</tt> résultant afin de voir si tout les fichiers apparaissent à leur place, spécialement les fichiers temporaires de DarwinPorts comme <tt>/var/db/receipts/ircii-20020912.tmp</tt>.) Il est également important de s'assurer que dans le fichier contents les répertoires soient listés <i>après</i> les fichiers qui les contiennent afin que le processus de désinstallation fonctionne correctement. Ensuite nous devrions éditer le Portfile afin d'inclure notre fichier contents :
185</p>
186<pre><tt>
187include contents
188</tt></pre>
189<p>
190        Si la liste des fichiers installés par le port ne s'étend pas au-delà d'une page de terminal de 80x24, l'option <tt>contents</tt> devrait être incluse dans le Portfile. Au lieu de <tt>include contents</tt>, nous utiliserons :
191</p>
192<pre><tt>
193contents    bin/irc \
194            bin/irc-20020912 \
195            man/man1/irc.1 \
196            man/man1/ircbug.1 \
197            man/man1/ircII.1 \
198            man/man1
199</pre>
200</tt>
201<p>
202        À présent nous avons un portfile complet. Relancez l'étape d'installation pour ajouter ce port à votre propre registre :
203</p>
204<pre><tt>
205% sudo port install
206</tt></pre>
207Qui affichera :
208<pre><tt>
209DEBUG: Skipping completed com.apple.main (ircii)
210DEBUG: Skipping completed com.apple.fetch (ircii)
211DEBUG: Skipping completed com.apple.checksum (ircii)
212DEBUG: Skipping completed com.apple.extract (ircii)
213DEBUG: Skipping completed com.apple.patch (ircii)
214DEBUG: Skipping completed com.apple.configure (ircii)
215DEBUG: Skipping completed com.apple.build (ircii)
216DEBUG: Skipping completed com.apple.install (ircii)
217DEBUG: Executing com.apple.registry (ircii)
218--->  Adding ircii to registry, this may take a moment...
219</tt></pre>
220<h2>
221        Sujets avancés
222</h2>
223<h3>
224        <a name="targets"></a>Modifier des cibles
225</h3>
226<p>
227        Il est possible de modifier la fonctionnalité d'une cible de compilation avec le code Tcl. Un exemple commun est le suivant, qui peut être utile pour un script sans script configure autoconf :
228</p>
229<pre><tt>
230configure {}
231</tt></pre>
232<p>
233        Dans le Portfile, cela remplacera la fonctionnalité de la cible de configure, aussi nous sauterons cette étape. Il est également possible d'exécuter du code Tcl immédiatement avant ou après une cible standard. Cela peut être accompli de la manière suivante :
234</p>
235<!--
236.........|.........|.........|.........|.........|.........|.........|.........|
237-->
238<pre><tt>
239post-configure {
240    reinplace "s|change.this.to.a.server|irc.openprojects.net|g" \
241        "${workdir}/${worksrcdir}/config.h"
242}
243</tt></pre>
244<p>
245        Cet exemple remplace l'occurrence de <tt>change.this.to.a.server</tt> avec <tt>irc.openprojects.net</tt> dans le fichier config.h qui a été généré pendant la phase précédant <tt>configure</tt>. Notez que c'est en quelque sorte un exemple inventé et voulu, car la même chose aurait pu être faite en spécifiant <tt>--with-default-server=irc.openprojects.net</tt> dans <tt>configure.args</tt>, mais l'approche est généralement utile lorsque de tels arguments ne sont pas présents.
246</p>
247<h3>
248        <a name="variants"></a>Variantes du Portfile
249</h3>
250<p>
251        Comme Darwin 6.0 a l'ipv6, il est possible de configurer le port avec l'option <tt>--with-ipv6</tt>. Cela peut être effectué en ajoutant l'option suivante dans le Portfile :
252</p>
253<pre><tt>
254configure.args      --disable-ipv6
255
256variant ipv6 {
257    configure.args-append  --enable-ipv6
258}
259</tt></pre>
260<p>
261        Maintenant la compilation par défaut n'inclura pas le support d'ipv6, mais si la variante ipv6 est voulue, ircII l'aura. Les options par elles-même devraient être considérées comme un facteur d'assignation. Comme les variantes peuvent être utilisées en combinaison avec d'autre, il est conseillé de les ajouter uniquement aux options au lieu de les écraser. Toutes les options peuvent avoir un suffixe avec <tt>-append</tt> ou <tt>-delete</tt> pour ajouter ou effacer un terme de la liste. Vous pouvez spécifier la compilation avec la variante ipv6 de la manière suivante :
262</p>
263<pre><tt>
264% port build +ipv6
265</tt></pre>
266<h2>
267        Annexe
268</h2>
269<h3>
270        <a name="portfilelist"></a>Aperçu d'un Portfile
271</h3>
272<p>
273        Ce qui suit est le listage complet du Portfile d'ircII :
274</p>
275<pre><tt>
276PortSystem 1.0
277name            ircii
278version         20020912
279categories      irc
280maintainers     kevin@opendarwin.org
281master_sites    ftp://ircftp.au.eterna.com.au/pub/ircII/
282checksums       md5 2ae68c015698f58763a113e9bc6852cc
283configure.args  --disable-ipv6
284include         contents
285
286post-configure {
287        reinplace "s|change.this.to.a.server|irc.openprojects.net|g" \
288                  "${workdir}/${worksrcdir}/config.h"
289}
290
291variant ipv6 {
292        configure.args-append --enable-ipv6
293}
294</tt></pre>
295<h3>
296        <a name="contentslist"></a>Liste de contents
297</h3>
298<p>
299        Ce qui suit est un listage partiel du fichier contents d'ircII :
300</p>
301<pre><tt>
302contents {
303bin/irc
304bin/irc-20020912
305... omitted ...
306man/man1/irc.1
307man/man1/ircbug.1
308man/man1/ircII.1
309man/man1
310man
311... omitted ...
312}
313</tt></pre>
314<? od_print_footer("en"); ?>