diff options
author | Nik Clayton <nik@FreeBSD.org> | 1999-11-10 21:29:15 +0000 |
---|---|---|
committer | Nik Clayton <nik@FreeBSD.org> | 1999-11-10 21:29:15 +0000 |
commit | 0f9e3260d70b88672037b1ccf761db8079500840 (patch) | |
tree | f8ad8659aabb0980cf651bc5b5bfdf2d9b8337cb /fr_FR.ISO8859-1/books/handbook/ports | |
parent | 212679edca0d1e666ee1cffbbd82e2ddba57c69a (diff) | |
download | doc-0f9e3260d70b88672037b1ccf761db8079500840.tar.gz doc-0f9e3260d70b88672037b1ccf761db8079500840.zip |
French translation tree, meet CVS, CVS, this is the French translation
tree.
A round of applause, please, for Sebastien Gioria, Frederic Haby, and
the other volunteers on the French FreeBSD Documentation Project.
I haven't turned this on in the top level Makefile yet because I've almost
certainly missed something. I want to be able to grab a copy of the tree
after I've committed it and build it from scratch to make sure everything
works before I break the website. . .
Notes
Notes:
svn path=/head/; revision=6043
Diffstat (limited to 'fr_FR.ISO8859-1/books/handbook/ports')
-rw-r--r-- | fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml | 5197 |
1 files changed, 5197 insertions, 0 deletions
diff --git a/fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml new file mode 100644 index 0000000000..461ba197cb --- /dev/null +++ b/fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml @@ -0,0 +1,5197 @@ +<!-- + The FreeBSD Documentation Project + The FreeBSD French Documentation Project + + $FreeBSD$ + Original revision: n.nn +--> + + <chapter id="ports"> + <title>Installer des applications du “Catalogue des logiciels + portés”</title> + + <para><emphasis>Contribution de &a.jraynard;.</emphasis></para> + &trans.a.haby; + + <para>Le catalogue des logiciels portés de FreeBSD vous permet de + compiler et d'installer une grande variété d'applications avec + un minimum d'efforts.</para> + + <para>Malgré toutes les déclarations exagérées sur les standards ouverts, + faire fonctionner un programme sur différentes versions d'Unix + peut en réalité être fastidieux et délicat, comme tous ceux qui + ont essayé le savent. Vous aurez peut-être la chance d'arriver + à compiler, installer où il faut et exécuter sans incident le + programme que vous voulez “tel quel”, mais c'est + malheureusement assez rare. Dans la plupart des cas, vous devrez + vous creuser un peu la tête, et il y a un certain nombre de programmes + qui vous donneront prématurement des cheveux blancs, ou même une + calvitie chronique...</para> + + <para>Certaines distributions de logiciels ont résolu ce problème + en fournissant des procédures de configuration. Certaines sont très + sophistiquées, mais ont une fâcheuse tendance à vous annoncer + triomphalement que votre système est d'une espèce dont vous n'avez + jamais entendu parler et à vous poser un tas de questions qui + ressemblent plus à un examen de programmation système Unix. + <literal>(La fonction gethitlist de votre système vous rend-elle un + pointeur const sur un schmilblick ou un pointeur sur un schmilblick + const? Avez-vous la gestion des exceptions inconnues de style + Foonix? Et sinon, pourquoi?)</literal></para> + + <para>Heureusement, grâce au catalogue des logiciels portés, tout le + travail pénible a déjà été fait, et il vous suffit de taper + <command>make install</command> pour avoir un logiciel qui + fonctionne.</para> + + <sect1> + <title>Pourquoi un catalogue des logiciels portés?</title> + + <para>Le système FreeBSD de base comporte une grande variété d'outils + et d'utilitaires système, mais de nombreux logiciels d'usage + courant n'en font pas partie, et il y a de bonnes raisons à + cela:</para> + + <orderedlist> + + <listitem> + <para>Il y a des programmes dont certains ne peuvent se passer + et que d'autres ne peuvent pas voir en peinture, un certain + éditeur basé sur Lisp, par exemple.</para> + </listitem> + + <listitem> + <para>Certains programmes sont trop spécialisés pour faire partie + du système de base (Conception Assistée par Ordinateur, bases de données).</para> + </listitem> + + <listitem> + <para>Les programmes de la catégorie “Je devrais y jeter + un coup d'oeil quand j'aurais cinq minutes”, et qui n'ont + rien d'indispensable (certains langages, peut-être).</para> + </listitem> + + <listitem> + <para>Les programmes qui sont bien trop amusants pour être fournis + avec un système d'exploitation sérieux comme FreeBSD ;-)</para> + </listitem> + + <listitem> + <para>Peut importe la quantité de programmes fournis de base, + les gens en veulent toujours plus, et il faut définir une + séparation quelque part (sans quoi les distributions de FreeBSD + deviendraient absolument énormes).</para> + </listitem> + + </orderedlist> + + <para>Il serait évidemment irréaliste d'attendre que chacun porte + ses programmes favoris à la main (sans mentionner la quantité + invraisemblable de travail refait à chaque fois), le Projet + FreeBSD a donc mis en place une méthode ingénieuse d'utilisation + d'outils standard pour automatiser le processus.</para> + + <para>C'est, au passage, une excellente illustration de la + “manière Unix” de faire en combinant un jeu + d'outils simples mais souples pour arriver à un mécanisme + très puissant.</para> + + </sect1> + + <sect1> + <title>Comment fonctionne le catalogue des logiciels portés?</title> + + <para>Les logiciels sont typiquement distribués sur l'Internet sous + forme d'<link linkend="ports-tarball">archives</link> incluant un + fichier <filename>Makefile</filename>, le code source du programme + et habituellement quelques instructions (qui ne sont pas toujours + aussi instructives qu'elles pourraient l'être), avec peut-être aussi + une procédure de configuration.</para> + + <para>Le scénario standard consiste à télécharger l'archive par FTP, + l'extraire quelque part, parcourir les instructions, faire les + modifications qui vous paraissent nécessaires, lancer la procédure + de configuration pour mettre tout au point et utiliser la commande + <command>make</command> habituelle pour compiler et installer le + programme à partir du source.</para> + + <para>Les logiciels portés de FreeBSD utilisent toujours le mécanisme + des archives, mais se servent d'un + <link linkend="ports-skeleton">squelette</link> qui renferme + la “connaissance” nécessaire pour pouvoir obtenir un + logiciel utilisable sous FreeBSD, plutôt que d'attendre de + l'utilisateur qu'il se débrouille. Ils comportent aussi leurs + propres + <link linkend="ports-makefile"><filename>Makefile</filename>s</link>, + de sorte que presque tous les logiciels portés se compilent et + s'installent de la même façon.</para> + + <para>Si vous regardez le squelette pour un logiciel porté (soit sur + <ulink url="file://localhost/usr/ports/devel/ElectricFence">votre + machine FreeBSD</ulink>, soit sur <ulink + url="ftp://ftp.freebsd.org/pub/FreeBSD/ports/devel/ElectricFence">le + site FTP</ulink>), et espérez y trouver toutes sortes de techniques + d'avant-garde, vous serez déçu par les quelques fichiers et + répertoires sans éclat que vous y verrez. (Nous parlerons bientôt de + la façon de <link linkend="ports-getting">Se procurer un logiciel + porté</link>).</para> + + <para>Je vous entends d'ici: “Comment diable cela peut-il arriver + à faire quoi que ce soit? Le code source n'y est même + pas!”</para> + + <para>Ne craignez rien, aimable lecteur, tout va s'éclairer + (espérons-le). Examinons ce qui se passe lorsque nous essayons + d'installer un logiciel porté. J'ai choisi + <application>ElectricFence</application>, un bon outil pour les + développeurs, car son squelette est plus explicite que la + plupart.</para> + + <note> + <para>Si vous essayez de le faire chez vous, vous devez être + super-utilisateur.</para> + </note> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports/devel/ElectricFence</userinput> +&prompt.root; <userinput>make install</userinput> +>> Checksum OK for ElectricFence-2.0.5.tar.gz. +===> Extracting for ElectricFence-2.0.5 +===> Patching for ElectricFence-2.0.5 +===> Applying FreeBSD patches for ElectricFence-2.0.5 +===> Configuring for ElectricFence-2.0.5 +===> Building for ElectricFence-2.0.5 +[une tonne de résultats de compilation...] +===> Installing for ElectricFence-2.0.5 +===> Warning: your umask is "0002". If this is not desired, set it to + an appropriate value and install this port again by ``make reinstall''. +install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib +install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3 +===> Compressing manual pages for ElectricFence-2.0.5 +===> Registering installation for ElectricFence-2.0.5</screen> + </informalexample> + + <para>Pour éviter la confusion, je n'ai pas donné les résultats de la + compilation.</para> + + <para>Si vous avez essayé de votre côté, vous avez peut-être obtenu au + début quelque chose du genre:</para> + + <informalexample id="ports-fetch"> + <screen>&prompt.root; <userinput>make install</userinput> +>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system. +>> Attempting to fetch from + ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.</screen> + </informalexample> + + <para>Le programme <command>make</command> s'est rendu compte que vous + n'aviez pas de copie locale du source et a essayé de le télécharger + pour pouvoir continuer son travail. J'avais déjà le source, il n'a + donc pas eu besoin d'aller le chercher.</para> + + <para>Continuons et voyons ce que le programme <command>make</command> + a fait:</para> + + <procedure> + + <step> + <para>Localiser l'<link linkend="ports-tarball">archive</link> + du code source. Si elle n'est pas localement disponible, aller + la chercher sur un site FTP.</para> + </step> + + <step> + <para>Lancer un test de la <link linkend="ports-checksum">somme de + contrôle</link> sur le fichier d'archive pour s'assurer qu'il + a bien été récupéré, et non accidentellement tronqué, + téléchargé en mode ASCII, ou bombardé de neutrinos pendant le + transfert.</para> + </step> + + <step> + <para>Extraire l'archive dans un répertoire temporaire.</para> + </step> + + <step> + <para>Appliquer les + <link linkend="ports-patch">“patches”</link> - mises + à jour - nécessaires à la compilation et à l'exécution + sous FreeBSD.</para> + </step> + + <step> + <para>Lancer les procédures de configuration nécessaires à la + compilation et répondre correctement aux questions + posées.</para> + </step> + + <step> + <para>(Finalement!) Compiler le code.</para> + </step> + + <step> + <para>Installer le programme exécutable et les autres fichiers + qui vont avec, pages de manuel, etc. dans un sous-répertoire de + <filename>/usr/local</filename>, où ils ne se mélangeront pas + avec vos programmes système. Cela garantit aussi que tous les + logiciels portés soient au même endroit, au lieu d'être + éparpillés à droite et à gauche sur votre système.</para> + </step> + + <step> + <para>Enregistrez l'installation dans une base de données. Si vous + ne voulez pas conserver le programme par la suite, vous pourrez + le <link linkend="ports-remove">désinstaller</link> proprement + de votre système.</para> + </step> + + </procedure> + + <para>Parcourez les résultats de <command>make</command> et voyez si + vous retrouvez ces différentes étapes. Si vous n'étiez pas encore + impressionné, vous devriez l'être maintenant!</para> + + </sect1> + + <sect1 id="ports-getting"> + <title>Se procurer un logiciel porté pour FreeBSD</title> + + <para>Il y a deux façons d'obtenir la version portée pour FreeBSD d'un + logiciel. Il vous faut soit le <link linkend="ports-cd">CD-ROM + FreeBSD</link>, soit une <link linkend="ports-inet">connexion + Internet</link>.</para> + + <sect2 id="ports-cd"> + <title>Compiler les logiciels portés depuis le CD-ROM</title> + + <para>Si vous avez répondu oui à la question “Do you want to + link the ports collection to your + CD-ROM?” - “Voulez-vous créer un lien + symbolique sur le catalogue des logiciels portés du + CD-ROM?” - pendant la configuration de + l'installation de FreeBSD, le programme aura déjà effectué à votre + place les étapes préliminaires.</para> + + <para>Sinon, vérifiez que le CD-ROM <emphasis>FreeBSD</emphasis> est + bien dans le lecteur et monté sur, par exemple, + <filename>/cdrom</filename>. puis tapez:</para> + + <informalexample> + <screen>&prompt.root; <userinput>mkdir /usr/ports</userinput> +&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>ln -s /cdrom/ports/distfiles distfiles</userinput></screen> + </informalexample> + + <para>pour que le mécanisme d'installation puisse trouver + les archives (il s'attend à ce qu'elles soient dans le répertoire + <filename>/usr/ports/distfiles</filename>, c'est la raison pour + laquelle nous avons créé un lien symbolique du répertoire + d'archive du CD-ROM sur ce répertoire).</para> + + <para>Supposons maintenant que nous voulions installer le programme + <application>gnats</application> qui se trouve dans le répertoire + des bases de données. Voici comment nous procéderions:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>mkdir databases</userinput> +&prompt.root; <userinput>cp -R /cdrom/ports/databases/gnats databases</userinput> +&prompt.root; <userinput>cd databases/gnats</userinput> +&prompt.root; <userinput>make install</userinput></screen> + </informalexample> + + <para>Si vous utilisez sérieusement les bases de données et que vous + voulez comparer toutes celles qui sont disponibles au catalogue, + tapez:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>cp -R /cdrom/ports/databases .</userinput> +&prompt.root; <userinput>cd databases</userinput> +&prompt.root; <userinput>make install</userinput></screen> + </informalexample> + + <para>(oui, il y a vraiment un “.” à la fin de la + commande <command>cp</command>, ce n'est pas une erreur. C'est une + “Unixerie” qui veut dire: “le répertoire + courant”) et le système d'installation des logiciels portés + compilera et installera automatiquement tous les logiciels de + base de données disponibles!</para> + + <para>Si cette méthode ne vous convient pas, voici une façon + entièrement différente de faire:</para> + + <para>Créez une “arborescence de liens” vers le catalogue + en vous servant de la commande <citerefentry><refentrytitle>lndir</refentrytitle><manvolnum>1</manvolnum></citerefentry> + de la distribution de <emphasis>XFree86</emphasis>. Trouvez un + endroit où vous avez de la place, créez-y un répertoire et + placez-vous dans ce répertoire avec <command>cd</command>. Utilisez + maintenant la commande + <citerefentry><refentrytitle>lndir</refentrytitle><manvolnum>1</manvolnum></citerefentry> + avec comme premier argument le chemin d'accès complet au répertoire + <filename>ports</filename> du CD-ROM et un “.” (le + répertoire courant) comme second argument. Quelque chose du + genre:</para> + + <informalexample> + <screen>&prompt.root; <userinput>lndir /cdrom/ports .</userinput></screen> + </informalexample> + + <para>Vous pouvez alors installer les logiciels portés directement + à partir du CD-ROM en le faisant depuis l'arborescence de liens que + vous venez de créer.</para> + + <para>Remarquez que les sources d'origine de certains logiciels ne + peuvent être fournis sur le CD-ROM, pour des questions de licence. + Dans ce cas, vous devrez vous reporter à la section + <link linkend="ports-inet">Installer de logiciels portés via + une connexion Internet</link>.</para> + + </sect2> + + <sect2 id="ports-inet"> + <title>Installer des logiciels portés via une connexion + Internet</title> + + <para>Si vous n'avez pas de CD-ROM, ou voulez être sûr d'avoir + la toute dernière version d'un logiciel, vous devrez + télécharger le <link linkend="ports-skeleton">squelette</link> + associé au logiciel porté. Cela peut paraître une combine + pleine d'embûches, mais c'est en réalité très + simple.</para> + + <para>Le secret est que le serveur FTP FreeBSD peut vous générer + des <link linkend="ports-tarball">archives</link> à la volée. Voici + comment cela fonctionne, avec toujours comme exemple le programme + <application>gnats</application> du répertoire des bases de données + (les textes entre crochets sont des commentaires. Ne le tapez pas + si vous essayez cela de votre côté!):</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>mkdir databases</userinput> +&prompt.root; <userinput>cd databases</userinput> +&prompt.root; <userinput>ftp ftp.freebsd.org</userinput> +[ouvrez une session en tant qu'utilisateur `ftp' et donnez votre adresse +de courrier électronique quand on vous demande un mot de passe. N'oubliez +pas d'utiliser le mode binaire (appelé aussi 'image')!] +<prompt>></prompt> <userinput>cd /pub/FreeBSD/ports/databases</userinput> +<prompt>></prompt> <userinput>get gnats.tar</userinput> +[archive et récupère le squelette de gnats] +<prompt>></prompt> <userinput>quit</userinput> +&prompt.root; <userinput>tar xf gnats.tar</userinput> +[extrait le squelette de gnats] +&prompt.root; <userinput>cd gnats</userinput> +&prompt.root; <userinput>make install</userinput> +[compile et installe gnats]</screen> + </informalexample> + + <para>Que se passe-t-il? Nous nous sommes connectés comme à + l'ordinaire au serveur FTP et sommes allés dans son sous-répertoire + des bases de données. Quand nous lui + avons donné la commande <command>get gnats.tar</command>, le serveur + FTP a créé une <link linkend="ports-tarball">archive</link> du + répertoire gnats à notre usage.</para> + + <para>Nous avons alors extrait de cette archive le squelette pour + gnats qu'elle contenait et sommes allés dans le répertoire gnats + pour compiler et installer le logiciel. Comme nous l'avons expliqué + <link linkend="ports-fetch">plus haut</link>, le processus + d'installation s'est rendu compte que nous n'avions pas de copie + locale des sources, en a téléchargé une avant de l'extraire, de la + mettre à jour et de la compiler.</para> + + <para>Essayons maintenant quelque chose de plus ambitieux. Au lieu + de récupérer un seul squelette, récupérons un sous-répertoire + complet, par exemple, tous les squelettes pour les bases de données + du catalogue des logiciels portés. La façon de procéder est + quasi identique:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>ftp ftp.freebsd.org</userinput> +[ouvrez une session en tant qu'utilisateur `ftp' et donnez votre adresse +de courrier électronique quand on vous demande un mot de passe. N'oubliez +pas d'utiliser le mode binaire (appelé aussi 'image')!] +<prompt>></prompt> <userinput>cd /pub/FreeBSD/ports</userinput> +<prompt>></prompt> <userinput>get databases.tar</userinput> +[archive et récupère les squelettes pour les bases de données] +<prompt>></prompt> <userinput>quit</userinput> +&prompt.root; <userinput>tar xf databases.tar</userinput> +[extrait les squelettes de toutes les bases de données] +&prompt.root; <userinput>cd databases</userinput> +&prompt.root; <userinput>make install</userinput> +[compile et installe les logiciels de base de données portés]</screen> + </informalexample> + + <para>Avec une demi-douzaine de commandes élémentaires, nous + disposons maintenant d'un éventail de logiciels de base de + données sur notre machine FreeBSD. La seule différence avec + l'installation d'un seul logiciel est que nous avons récupéré + et compilé d'un seul coup tout un répertoire de programmes. + Impressionnant, non?</para> + + <para>Si vous envisagez d'installer de nombreux logiciels portés, cela + vaut probablement la peine de télécharger tous les répertoires du + catalogue.</para> + + </sect2> + </sect1> + + <sect1 id="ports-skeleton"> + <title>Les squelettes</title> + + <para>Une bande de programmeurs compulsifs qui ont oublié de manger + lors d'une tentative désespérée de respecter une échéance? Des choses + désagréables hantant les sous-sols de FreeBSD? Non, un squelette est + un environnement minimal qui contient tout ce qu'il faut pour que la + magie des logiciels portés fonctionne.</para> + + <sect2 id="ports-makefile"> + <title><filename>Makefile</filename></title> + + <para>Le composant le plus important d'un squelette est le fichier + <filename>Makefile</filename>. Il contient les divers ordres qui + précisent comment le logiciel doit être compilé et installé. Voici + le <filename>Makefile</filename> pour + <application>ElectricFence</application>:</para> + + <programlisting> +# New ports collection makefile for: Electric Fence +# Version required: 2.0.5 +# Date created: 13 November 1997 +# Whom: jraynard +# +# $Id$ +# + +DISTNAME= ElectricFence-2.0.5 +CATEGORIES= devel +MASTER_SITES= ${MASTER_SITE_SUNSITE} +MASTER_SITE_SUBDIR= devel/lang/c + +MAINTAINER= jraynard@freebsd.org + +MAN3= libefence.3 + +do-install: + ${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib + ${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3 + +.include <bsd.port.mk></programlisting> + + <para>Les lignes qui commencent par un “#” sont des + commentaires à l'intention des lecteurs humains (comme dans la + plupart des procédures Unix).</para> + + <para><literal>DISTNAME</literal> donne le nom, sans extension, de + l'<link linkend="ports-tarball">archive</link>.</para> + + <para><literal>CATEGORIES</literal> indique de quel type de logiciel + il s'agit. Dans le cas présent, c'est un outil pour les + développeurs.</para> + + <para><literal>MASTER_SITES</literal> est l'URL(s) du site FTP + principal, d'où sera téléchargé + l'<link linkend="ports-tarball">archive</link>, si elle n'est + pas disponible sur la machine locale. C'est un site considéré + comme fiable, normalement celui de la distribution officielle + (dans la mesure où un logiciel peut être + “officiellement” distribué sur l'Internet).</para> + + <para><literal>MAINTAINER</literal> est l'adresse électronique de + la personne responsable de la maintenance du squelette, qui + intervient lorsque, par exemple, il sort une nouvelle version du + programme.</para> + + <para>Sautons pour l'instant quelques lignes, la ligne + <literal>.include <bsd.port.mk></literal> indique que les + autres directives et commandes nécessaires se trouvent dans le + fichier générique <filename>bsd.port.mk</filename>. Comme ce sont + les mêmes pour tous les logiciels portés, il n'y a pas de raison + de les dupliquer à chaque fois, elles sont donc enregistrées dans un + fichier standard.</para> + + <para>Ce n'est probablement pas l'endroit où expliquer en détail + comment le <filename>Makefile</filename> fonctionne; il suffit de + préciser que la ligne qui commence par <literal>MAN3</literal> + garantit que les pages de manuel d'ElectricFence seront compressées + après installation, pour économiser votre précieux espace disque. Le + logiciel d'origine ne définissait pas de cible + <maketarget>install</maketarget>, les trois lignes qui commencent à + <maketarget>do-install</maketarget> veillent à ce que les fichiers + générés soient bien placés là où il faut.</para> + + </sect2> + + <sect2> + <title>Le répertoire <filename>files</filename></title> + + <para>Le fichier qui contient la <link linkend="ports-checksum">somme + de contrôle</link> pour ce logiciel s'appelle + <filename>md5</filename>, du nom de l'algorithme MD5 utilisé pour + la calculer. Il se trouve dans un répertoire au nom quelque peu + trompeur de <filename>files</filename>.</para> + + <para>Ce répertoire peut aussi contenir divers fichiers nécessaires + au portage et qui n'ont pas de raison particulière + d'être ailleurs.</para> + + </sect2> + + <sect2> + <title>Le répertoire <filename>patches</filename></title> + + <para>Ce répertoire contient les <link linkend="ports-patch">mises à + niveau</link> qu'il faut appliquer pour que tout fonctionne + correctement sous FreeBSD.</para> + + </sect2> + + <sect2> + <title>Le répertoire <filename>pkg</filename></title> + + <para>Ce répertoire contient trois fichiers assez utiles:</para> + + <itemizedlist> + + <listitem> + <para><filename>COMMENT</filename> - une description + en une seule ligne du logiciel.</para> + </listitem> + + <listitem> + <para><filename>DESCR</filename> - une description + plus détaillée.</para> + </listitem> + + <listitem> + <para><filename>PLIST</filename> - la liste de tous + les fichiers qui seront créés quand le logiciel sera + installé.</para> + </listitem> + + </itemizedlist> + + </sect2> + </sect1> + + <sect1 id="ports-troubleshooting"> + <title>Que faire quand un portage échoue?</title> + + <para>Oh. Il y a quatre (4) choses que vous pouvez faire :</para> + + <orderedlist> + + <listitem> + <para>Corriger le problème vous-même. Vous trouverez des détails + techniques sur le mécanisme des portages à la section + <link linkend="porting">Faire vous-même un portage</link>.</para> + </listitem> + + <listitem> + <para>Rouspéter. Cela ne se fait <emphasis>que</emphasis> par + courrrier électronique! adressez-vous à la &a.ports; et précisez + s'il vous plaît le nom et la version du logiciel, sur quel site + vous avez récupéré le squelette et l'(les) archive(s) et quel + message d'erreur vous obtenez.</para> + </listitem> + + <listitem> + <para>Faire une croix dessus. C'est la méthode la plus facile pour + la plupart des gens - il y a bien peu de programmes + du catalogue qui soient vraiment essentiels!</para> + </listitem> + + <listitem> + <para>Récupérer la version précompilée sur un serveur ftp. Le + catalogue de référence des logiciels précompilés se trouve + sur le serveur FTP de FreeBSD dans le répertoire des + <ulink + url="ftp://ftp.FreeBSD.org/pub/FreeBSD/packages/">logiciels + précompilés</ulink>, bien que nous souhaiterions + s'il vous plaît que + vous consultiez d'abord vos sites miroirs locaux! Il y a + globalement plus de chances que cela marche, que lorsque vous + essayez de les compiler d'après les sources, et cela va + de plus beaucoup plus vite. Servez-vous du programme + <citerefentry><refentrytitle>pkg_add</refentrytitle><manvolnum>1</manvolnum></citerefentry> + pour installer le fichier contenant un logiciel précompilé sur + votre système.</para> + </listitem> + + </orderedlist> + + </sect1> + + <sect1> + <title>Quelques questions et leurs réponses</title> + + <itemizedlist> + + <listitem> + <para>Q. Je pensais que cela allait être une discussion sur les + modems??!</para> + + <para>R. Ah. Vous pensiez peut-être aux “ports” + série sur la face arrière de votre ordinateur. Nous utilisons + ici le terme + “port” - logiciels portés - pour + parler du résultat du “portage” d'un logiciel d'une + version d'Unix à une autre. (Les informaticiens ont la fâcheuse + habitude d'employer le même mot pour parler de choses + différentes.)</para> + </listitem> + + <listitem> + <para>Q. Je pensais qu'il fallait utiliser des + “paquetages” pour installer des logiciels + supplémentaires.</para> + + <para>R. Oui, c'est habituellement la façon la plus rapide et la + plus facile de le faire.</para> + </listitem> + + <listitem> + <para>Q. Pourquoi alors se préoccuper de logiciels portés?</para> + + <para>R. Il y a plusieurs raisons:</para> + + <orderedlist> + + <listitem> + <para>Les licences de certains logiciels stipulent qu'ils + doivent être distribués sous forme de sources et non de + binaires.</para> + </listitem> + + <listitem> + <para>Certains ne font pas confiance aux distributions sous + forme binaire. Avec le code source, vous pouvez au moins + (en théorie) le lire pour y repérer d'éventuels + problèmes.</para> + </listitem> + + <listitem> + <para>Si vous avez des corrections/évolutions qui vous sont + propres, vous avez besoin des sources pour les + appliquer.</para> + </listitem> + + <listitem> + <para>Vous pouvez vouloir compiler le programme avec des + options différentes de celles qu'a utilisées la personne + qui a construit le + “paquetage” - certains ont des + opinions bien arrêtées sur la manière dont il faut + optimiser, sur le fait qu'il faut ou non disposer de + versions débogables et y inclure ou non les symboles, + etc.</para> + </listitem> + + <listitem> + <para>Certains aiment disposer du code source, pour pouvoir + le lire en cas de problème, le modifier, en emprunter des + morceaux (si la licence le permet, bien sûr!), et ainsi de + suite.</para> + </listitem> + + <listitem> + <para>Si vous n'avez pas le source, ce n'est pas du + logiciel! <!-- smiley -->;-)</para> + </listitem> + + </orderedlist> + + </listitem> + + <listitem> + <para><anchor id="ports-patch"> Q. Qu'est-ce qu'un + “patch” - mise à jour?</para> + + <para>R. Un “patch” est (habituellement) un petit + fichier qui précise comment passer d'une version à une autre. Il + contient du texte qui dit, par exemple, des choses comme + “effacez la ligne 23”, “ajoutez ces deux + lignes après la ligne 468” ou “modifiez comme suit + la ligne 197”. On appelle aussi cela un + “diff” parce qu'il est généré avec un programme + du même nom.</para> + </listitem> + + <listitem> + <para><anchor id="ports-tarball"> Q. Que sont les archives?</para> + + <para>R. C'est un fichier d'extension <filename>.tar</filename> ou + <filename>.tar.gz</filename> (avec des variantes du style + <filename>.tar.Z</filename>, ou même <filename>.tgz</filename> + si vous voulez utiliser ces noms de fichiers avec un systèmes + de fichiers DOS).</para> + + <para>C'est essentiellement une arborescence de répertoires qui a + été archivée en un seul fichier (<filename>.tar</filename>) et + éventuellement compressé (<filename>.gz</filename>). Cette + technique était à l'origine utilisée pour les + “<emphasis>T</emphasis>ape” - bande - “<emphasis>AR</emphasis>chives” + (d'où le nom <command>tar</command>), mais c'est une méthode + très utilisée pour distribuer du code source sur + l'Internet.</para> + + <para>Vous pouvez avoir la liste des fichiers qu'elles + contiennent, ou même les extraire vous-même, avec le programme + Unix standard <command>tar</command>, qui fait partie du système + FreeBSD de base, comme ceci:</para> + + <informalexample> + <screen>&prompt.user; <userinput>tar tvzf foobar.tar.gz</userinput> # connaître le contenu de foobar.tar.gz +&prompt.user; <userinput>tar xzvf foobar.tar.gz</userinput> # extraire le contenu de foobar.tgz dans le répertoire courant +&prompt.user; <userinput>tar tvf foobar.tar</userinput> # connaître le contenu de foobar.tar +&prompt.user; <userinput>tar xvf foobar.tar</userinput> # extraire le contenu de foobar.tar dans le répertoire courant + </screen> + </informalexample> + </listitem> + + <listitem> + <para><anchor id="ports-checksum"> Q. Et une somme de + contrôle?</para> + + <para>R. C'est un nombre calculé en additionnant tout ce que + contient le fichier. Si un caractère change, la somme de + contrôle n'est plus la même, et une simple comparaison vous + permettra de repérer la différence. (En pratique, le calcul + est un peu plus compliqué pour pouvoir repérer des problèmes + comme les permutations de caractères, ce que ne permettrait + pas une simple addition.)</para> + </listitem> + + <listitem> + <para>Q. J'ai suivi vos indications au paragraphe + <link linkend="ports-cd">Compiler les logiciels portés depuis + le CD-ROM</link> et ça a marché sans problème jusqu'à ce que + j'essaie d'installer <command>kermit</command></para> + + <informalexample> + <screen>&prompt.root; <userinput>make install</userinput> +>> cku190.tar.gz doesn't seem to exist on this system. +>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.</screen> + </informalexample> + <para>Pourquoi ne le trouve-t-il pas? Ai-je un CD-ROM + endommagé?</para> + + <para>R. La licence de <command>kermit</command> ne nous permet + pas d'inclure l'archive sur le CD-ROM, vous devrez donc la + récupérez vous-même - désolé! Vous avez tous ces + messages d'erreur parce que vous n'étiez pas alors connecté à + l'Internet. Une fois que vous l'avez téléchargé à partir de l'un + des sites mentionnés, vous pouvez recommencer l'installation + (essayez et choisissez le site le plus proche, pour économiser + votre temps et de la bande passante);</para> + </listitem> + + <listitem> + <para>Q. Je l'ai fait, mais quand j'ai essayé de la mettre + dans <filename>/usr/ports/distfiles</filename>, j'ai eu des + erreurs à propos de permissions que je n'avais pas.</para> + + <para>R. Le mécanisme des logiciels portés cherche les archives + dans <filename>/usr/ports/distfiles</filename>, mais il ne peut + rien y copier parce que c'est un lien symbolique sur le CD-ROM, + sur lequel on ne peut que lire. Vous pouvez lui dire de chercher + ailleurs avec:</para> + + <informalexample> + <screen>&prompt.root; <userinput>make DISTDIR=/where/you/put/it install</userinput></screen> + </informalexample> + </listitem> + + <listitem> + <para>Q. Le système des logiciels portés ne fonctionne-t-il + qu'avec <filename>/usr/ports</filename>? Mon administrateur + système veut que je mette tout dans + <filename>/u/people/guests/wurzburger</filename>, mais cela ne + marche apparemment pas.</para> + + <para>R. Vous pouvez utiliser les variables + <makevar>PORTSDIR</makevar> et <makevar>PREFIX</makevar> + pour dire au mécanisme des logiciels portés de travailler dans + d'autres répertoires. Par exemple:</para> + + <informalexample> + <screen>&prompt.root; <userinput>make PORTSDIR=/u/people/guests/wurzburger/ports install</userinput></screen> + </informalexample> + + <para>compilera le logiciel dans + <filename>/u/people/guests/wurzburger/ports</filename> et + l'installera dans <filename>/usr/local</filename>.</para> + + <informalexample> + <screen>&prompt.root; <userinput>make PREFIX=/u/people/guests/wurzburger/local install</userinput></screen> + </informalexample> + + <para>le compilera dans <filename>/usr/ports</filename> et + l'installera dans + <filename>/u/people/guests/wurzburger/local</filename>.</para> + + <para>Et bien sûr:</para> + + <informalexample> + <screen>&prompt.root; <userinput>make PORTSDIR=.../ports PREFIX=.../local install</userinput></screen> + </informalexample> + + <para>combinera les deux (c'est trop long pour tenir entièrement + sur la page, mais je suis sûr que vous avez compris le + principe).</para> + + <para>Si vous ne voulez pas avoir à retaper tout cela à chaque + fois que vous installez un logiciel (et pour être honnête, + pourquoi le feriez-vous?), c'est une bonne idée de définir + ces deux variables dans votre environnement par défaut.</para> + </listitem> + + <listitem> + <para>Q. Je n'ai pas le CD-ROM FreeBSD, mais je voudrais avoir les + archives sous la main sur mon système pour ne pas avoir à + attendre la fin du téléchargement chaque fois que j'installe un + logiciel. y-a-t-il une façon simple de tout récupérer d'un + coup?</para> + + <para>R. Pour récupérer toutes les archives du catalogue des + logiciels portés, tapez:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>make fetch</userinput></screen> + </informalexample> + + <para>Pour avoir toutes les archives d'un seul sous-répertoire, + utilisez:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput> +&prompt.root; <userinput>make fetch</userinput></screen> + </informalexample> + + <para>et pour un seul port - bon, je suppose que vous + avez déjà deviné.</para> + </listitem> + + <listitem> + <para>Q. Je sais qu'il est probablement plus rapide de récupérer + les archives de sites miroir FreeBSD proches. Y'a-t-il un moyen + de dire au mécanisme de s'adresser à d'autres serveurs que ceux + listés dans les MASTER_SITES?</para> + + <para>R. Oui. Si vous savez que, par exemple, + <hostid role="fqdn">ftp.FreeBSD.ORG</hostid> est plus près que + les sites listés dans <makevar>MASTER_SITES</makevar>, faites + comme dans l'exemple suivant:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports/directory</userinput> +&prompt.root; <userinput>make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/ fetch</userinput></screen> + </informalexample> + </listitem> + + <listitem> + <para>Q. Je veux savoir de quels fichiers j'aurai besoin, avant + d'essayer de les télécharger.</para> + + <para>R. <command>make fetch-list</command> affichera la liste des + fichiers nécessaires pour installer un logiciel porté.</para> + </listitem> + + <listitem> + <para>Q. Y-a-t il un moyen de faire en sorte que le logiciel ne + soit pas compilé. Je veux modifier les sources avant de le + compiler et c'est fastidieux de surveiller ce qui ce passe à + chaque fois et de toujours taper Ctrl-C.</para> + + <para>R. <command>make extract</command> ne fait que récupérer et + extraire le code source.</para> + </listitem> + + <listitem> + <para>Q. J'essaie de faire mon propre portage, et voudrais qu'il + ne soit pas compilé avant que j'ai pu vérifier que les mises à + jour aient été correctement appliquées. Y-a-t-il un équivalent + de <command>make extract</command>, pour les mises à + jour?</para> + + <para>A. Oui, <command>make patch</command> est ce qu'il vous + faut. Vous trouverez peut-être aussi utile l'option + <option>PATCH_DEBUG</option>. Et, au + passage, merci de vos efforts!</para> + </listitem> + + <listitem> + <para>Q. J'ai entendu dire que certaines options du compilateur + posait des problèmes. Est-ce exact? Comment puis-je être sûr + que je compile les logiciels avec les bonnes options?</para> + + <para>R. Oui, avec la version 2.6.3 de <command>gcc</command> (la + version livrée avec FreeBSD 2.1.0 et 2.1.5), l'option + <option>-O2</option> pouvait générer du code bogué, à moins que + vous n'utilisiez en même temps l'option + <option>-fno-strength-reduce</option>. (La plupart des logiciels + portés n'utilisent pas l'option <option>-O2</option>). Vous + <emphasis>devriez</emphasis> pouvoir préciser au compilateur les + options à utiliser avec quelque chose comme:</para> + + <informalexample> + <screen>&prompt.root; <userinput>make CFLAGS='-O2 -fno-strength-reduce' install</userinput></screen> + </informalexample> + + <para>ou en éditant <filename>/etc/make.conf</filename>, mais tous + les logiciels portés n'en tiennent malheureusement pas compte. + Le plus sûr est d'utiliser <command>make configure</command>, + puis d'aller dans le répertoire des sources et de regarder ce + que font les <filename>Makefile</filename>s, mais cela peut + devenir fastidieux s'il y a de nombreux sous-répertoires avec + chacun leurs <filename>Makefile</filename>s.</para> + </listitem> + + <listitem> + <para>Q. Il y a tellement de logiciels portés qu'il est difficile + de trouver celui que je veux. Y-a-t-il quelque part une liste + des logiciels portés?</para> + + <para>R. Regardez dans le fichier <filename>INDEX</filename> + du répertoire <filename>/usr/ports</filename>.</para> + </listitem> + + <listitem> + <para>Q. J'ai installé le logiciel <literal>foo</literal> mais le + mécanisme s'est soudainement interrompu et a commencé à compiler + le logiciel <literal>bar</literal>. Que se passe-t-il?</para> + + <para>R. Le logiciel <literal>foo</literal> a besoin de quelque + chose qui fait partie de <literal>bar</literal> - par + exemple, si <literal>foo</literal> utilise des graphiques, + <literal>bar</literal> peut comporter une bibliothèque avec des + sous-programmes graphiques utiles. Ou bien + <literal>bar</literal> est un outil nécessaire à la compilation + du logiciel <literal>foo</literal>.</para> + </listitem> + + <listitem> + <para><anchor id="ports-remove">Q. J'ai installé le logiciel + <literal>grizzle</literal> du catalogue et c'est franchement + du gaspillage d'espace disque. Je veux le supprimer mais je + ne sais pas où il a mis tous les fichiers. Des + indications?</para> + + <para>R. Pas de problème, tapez simplement:</para> + + <informalexample> + <screen>&prompt.root; <userinput>pkg_delete grizzle-6.5</userinput></screen> + </informalexample> + </listitem> + + <listitem> + <para> + Q. Une minute, il faut connaître le numéro de version pour + utiliser cette commande. Vous ne vous attendez sérieusement pas + à ce que je l'ai retenu, n'est-ce pas?</para> + + <para>R. Absolument pas, vous pouvez le trouver en tapant:</para> + + <informalexample> + <screen>&prompt.root; <userinput>pkg_info -a | grep grizzle</userinput> +Information for grizzle-6.5: +grizzle-6.5 - La méthode de piano, l'interpréteur LOGO et le casse-briques tout +en un.</screen> + </informalexample> + </listitem> + + <listitem> + <para>Q. A propos d'espace disque, le catalogue des logiciels + portés occupe apparemment énormément de place. Est-il possible + d'y faire du ménage?</para> + + <para>R. Oui, si vous avez installé un programme et êtes à peu + près certain que vous n'aurez plus besoin des sources, il est + inutile de les garder. La meilleure façon de faire est:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>make clean</userinput></screen> + </informalexample> + + <para>qui parcourera tous les sous-répertoires et supprimera tout + ce qui se rapporte aux logiciels sauf les squelettes.</para> + </listitem> + + <listitem> + <para>Q. J'ai essayé, mais il reste toujours toutes ces archives, + quelque soit le nom que vous leur donniez, dans le répertoire + <filename>distfiles</filename>. Puis-je aussi les + effacer?</para> + + <para>R. Oui, si vous êtes sûr d'en avez terminé avec elles, vous + pouvez aussi les supprimer.</para> + </listitem> + + <listitem> + <para>Q. J'aime avoir quantité de logiciels pour les tester? + Y-a-t-il un moyen de tous les installer d'un seul coup?</para> + + <para>R. Tapez simplement:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>make install</userinput></screen> + </informalexample> + </listitem> + + <listitem> + <para>Q. OK, j'ai essayé, mais comme je pensais que cela allait + prendre beaucoup de temps, j'ai laissé la machine telle quelle + et je suis allé me coucher. Ce matin, quand j'ai jeté une coup + d'oeil à l'ordinateur, je n'avais que trois logiciels et demi + installés. Quelque chose s'est-il mal passé?</para> + + <para>R. Non, le problème est que certains logiciels ont des + questions à vous poser auxquelles ils ne peuvent répondre à + votre place (par exemple, “Voulez-vous imprimer au format + A4 ou au format légal US?”) et il faut donc que quelqu'un + y réponde sur le moment.</para> + </listitem> + + <listitem> + <para>Q. Je ne veux pas passer toute la journée planté devant + l'écran. Une meilleure idée?</para> + + <para>A. OK, avant d'aller au lit/travail/jardin public, + tapez:</para> + + <informalexample> + <screen>&prompt.root <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>make -DBATCH install</userinput></screen> + </informalexample> + + <para>Cela installera tous les logiciels sans interaction avec + l'utilisateur. A votre retour, tapez:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports</userinput> +&prompt.root; <userinput>make -DIS_INTERACTIVE install</userinput></screen> + </informalexample> + + <para>Pour terminer les installations.</para> + </listitem> + + <listitem> + <para>Q. Au bureau, nous utilisons <literal>frobble</literal>, qui + fait partie de votre catalogue des logiciels portés, mais nous + l'avons un peu modifié pour nos besoins propres. Y-a-t-il un + moyen de faire notre propre “paquetage” pour le + distribuer plus facilement sur nos sites?</para> + + <para>R. Pas de problème, si vous savez comment générer les + “patches” pour vos modifications:</para> + + <informalexample> + <screen>&prompt.root; <userinput>cd /usr/ports/somewhere/frobble</userinput> +&prompt.root; <userinput>make extract</userinput> +&prompt.root; <userinput>cd work/frobble-2.8</userinput> +[Appliquer vos mises à jour] +&prompt.root; <userinput>cd ../..</userinput> +&prompt.root; <userinput>make package</userinput></screen> + </informalexample> + </listitem> + + <listitem> + <para>Q. Ce système des logiciels portés est vraiment génial. Je + désespère de comprendre comment vous avez fait. Quel est votre + secret?</para> + + <para>R. Il n'y a absolument pas de secret, jetez juste un coup + d'oeil aux fichiers <filename>bsd.ports.mk</filename> et + <filename>bsd.ports.subdir.mk</filename> du répertoire des + <ulink url="file://localhost/usr/share/mk/"><filename>makefile</filename>s.</ulink></para> + + <note> + <para>Cette lecture est déconseillée à ceux que les procédures + de commandes compliquées rebutent...)</para> + </note> + </listitem> + + </itemizedlist> + + </sect1> + + <sect1 id="porting"> + <title>** Faire vous-même un portage</title> + + <para><emphasis>Contribution de &a.jkh;, &a.gpalmer;, &a.asami; + &a.obrien; et &a.hoek;. 28 Août 1996.</emphasis></para> + + <para>Donc, vous voulez faire vous-même votre propre portage? + Génial!</para> + + <para>Voici quelques indications sur la façon de créer un nouveau + portage d'un logiciel pour FreeBSD. L'essentiel du travail + est fait par <filename>/usr/share/mk/bsd.port.mk</filename>, qui + est inclus dans le <filename>Makefile</filename> de chaque logiciel + porté. Reportez-vous s'il vous plaît à ce fichier pour avoir plus + de détails sur le fonctionnement interne du catalogue des logiciels + portés. Même si vous n'écrivez pas tous les jours des + <filename>Makefile</filename>s, il est pas mal commenté, et vous + en apprendrez malgré tout beaucoup de choses.</para> + + <note> + <para>Seule une partie des variables surchargeables + (<makevar><replaceable>VAR</replaceable></makevar>) est décrite + dans ce document. La plupart (sinon toutes) sont explicitées au + début de <filename>bsd.port.mk</filename>. Ce fichier utilise des + tabulations non standard. <application>Emacs</application> et + <application>Vim</application> devraient reconnaître cette + configuration au chargement du fichier. <command>vi</command> ou + <command>ex</command> peuvent être configurés avec la valeur + adéquate après avoir chargé le fichier en tapant <command>:set + tabstop=4</command>.</para> + </note> + + <sect2> + <title>Portage rapide</title> + + <para>Cette section vous explique comment faire un portage rapide. + La plupart du temps, ce n'est pas suffisant, mais nous verrons + cela par la suite.</para> + + <para>Commencez par récupérer le fichier d'archive d'origine et + mettez-le dans <makevar>DISTDIR</makevar>, par défaut c'est le + répertoire <filename>/usr/ports/distfiles</filename>.</para> + + <note> + <para>Nous supposerons dans ce qui suit que le source a compilé + “tel quel”, i.e., il n'y a absolument pas eu de + modification à y apporter pour qu'il tourne sur votre machine + FreeBSD. Si vous avez dû changer quelque chose, vous devrez + aussi vous reporter à la section suivante.</para> + </note> + + <sect3> + <title>Ecrire le <filename>Makefile</filename></title> + + <para>Le <filename>Makefile</filename> minimal ressemblera à + ceci :</para> + + <programlisting> +# Nouveau makefile du catalogue pour: oneko +# Version correspondante: 1.1b +# Date de création: 5 Décembre 1994 +# Par: asami +# +# $Id$ +# + +DISTNAME= oneko-1.1b +CATEGORIES= games +MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ + +MAINTAINER= asami@FreeBSD.ORG + +MAN1= oneko.1 +MANCOMPRESSED= yes +USE_IMAKE= yes + +.include <bsd.port.mk></programlisting> + + <para>Voyez si vous y comprenez quelque chose. Ne vous occupez + pas de la ligne <literal>$Id$</literal>, elle sera + automatiquement renseignée par CVS quand le logiciel sera + importé dans notre arborescence principale des logiciels + portés. Vous trouverez un exemple plus détaillé à la section + <link linkend="porting-samplem">Exemple de + Makefile</link>.</para> + + </sect3> + + <sect3> + <title>Créer les fichiers de description</title> + + <para>Il y a trois fichiers de description indispensables à + chaque logiciel porté, qu'il soit ou non précompilé. Ce sont + les fichiers <filename>COMMENT</filename>, + <filename>DESCR</filename> et <filename>PLIST</filename>, + du sous-répertoire <filename>pkg</filename>.</para> + + <sect4> + <title><filename>COMMENT</filename></title> + + <para>C'est une description en une seule ligne du logiciel. + <emphasis>S'il vous plaît</emphasis>, n'incluez pas le nom + du logiciel (ni son numéro de version) dans le commentaire. + Voici un exemple :</para> + + <programlisting> +Un chat poursuit une souris à travers l'écran.</programlisting> + + </sect4> + + <sect4> + <title><filename>DESCR</filename></title> + + <para>C'est une description plus longue du logiciel. Un à + quelques paragraphes, expliquant succintement ce qu'il + fait, suffisent.</para> + + <note> + <para>Ce <emphasis>n'est pas</emphasis> un manuel, ni + une description détaillée de la manière de compiler et + d'utiliser le logiciel. Faites + <emphasis>s'il vous plaît attention si vous la recopiez + du <filename>README</filename> ou des pages de + manuel</emphasis>; trop souvent, ce ne sont pas des + descriptions concises et elles sont mal formatées (e.g., les + pages de manuel sont justifiées avec des espaces). S'il y a + une page Web officielle pour le logiciel, vous devriez la + mentionner ici.</para> + </note> + + <para>Il vous est recommandé de signer en fin de fichier, comme + suit:</para> + + <programlisting> +C'est le portage de “oneko”, le chat qui poursuit la pauvre souris +sur tout l'écran. + : +(etc.) + +http://www.oneko.org/ + +- Satoshi +asami@cs.berkeley.edu</programlisting> + + </sect4> + + <sect4> + <title><filename>PLIST</filename></title> + + <para>C'est la liste de tous les fichiers installés pour ce + logiciel. On l'appelle aussi “liste de paquetage” + parce que le “paquetage” sera généré en archivant + tous les fichiers de cette liste. Les chemins d'accès sont + relatifs à <filename>/usr/local</filename> ou + <filename>/usr/X11R6</filename>). Si vous utilisez des + variables <makevar>MAN<replaceable>n</replaceable></makevar> + (comme vous devriez le faire), n'y listez pas les pages de + manuel.</para> + + <para>Voici un court exemple:</para> + + <programlisting> +bin/oneko +lib/X11/app-defaults/Oneko +lib/X11/oneko/cat1.xpm +lib/X11/oneko/cat2.xpm +lib/X11/oneko/mouse.xpm +@dirrm lib/X11/oneko</programlisting> + + <para>Reportez-vous aux pages de manuel de + <citerefentry><refentrytitle>pkg_create</refentrytitle><manvolnum>1</manvolnum></citerefentry> + pour plus de détails sur la “liste de + paquetage”.</para> + + <note> + <para>Vous devez lister tous les fichiers, mais pas les noms + des répertoires. Par contre, s'il y a des répertoires créés + à l'installation, veillez à ajouter les lignes + <literal>@dirrm</literal> nécessaires pour qu'ils soient + détruits si le logiciel est désinstallé.</para> + + <para>Il est recommandé de lister les fichiers dans l'ordre + alphabétique. Cela facilite beaucoup les contrôles lors des + mises à jour.</para> + </note> + </sect4> + </sect3> + + <sect3> + <title>Créer le fichier pour la somme de contrôle</title> + + <para>Tapez simplement <command>make makesum</command>. + Les règles de construction des logiciels portés génèreront + automatiquement le fichier + <filename>files/md5</filename>.</para> + + </sect3> + + <sect3 id="porting-testing"> + <title>Tester le portage</title> + + <para>Vous devez vérifiez que les règles de construction du + logiciel porté font exactement ce que vous voulez. Voici + les points importants à contrôler:</para> + + <itemizedlist> + <listitem> + <para><filename>PLIST</filename> ne contient rien d'autre que + ce qu'installe votre logiciel.</para> + </listitem> + + <listitem> + <para><filename>PLIST</filename> contient tout ce qu'installe + votre logiciel.</para> + </listitem> + + <listitem> + <para>Le logiciel peut être installé plusieurs fois de suite + en utilisant la cible + <maketarget>reinstall</maketarget>.</para> + </listitem> + + <listitem> + <para>Le mécanisme de portage du logiciel + <link linkend="porting-cleaning">fait le ménage</link> + lors de la désinstallation.</para> + </listitem> + </itemizedlist> + + <procedure> + <title>Ordre de test recommandé</title> + + <step> + <para><command>make install</command></para> + </step> + + <step> + <para><command>make package</command></para> + </step> + + <step> + <para><command>make deinstall</command></para> + </step> + + <step> + <para><command>pkg_add `make nom_du_paquetage`</command></para> + </step> + + <step> + <para><command>make deinstall</command></para> + </step> + + <step> + <para><command>make reinstall</command></para> + </step> + + <step> + <para><command>make package</command></para> + </step> + </procedure> + + <para>Vérifiez qu'il n'y a aucun message d'avertissement + aux étapes <maketarget>package</maketarget> et + <maketarget>deinstall</maketarget>. Après l'étape 3, vérifiez + que tous les répertoires créés ont bien été détruits. Essayez + aussi d'utilisez le logiciel après l'étape 4, pour vous assurer + qu'il fonctionne correctement après installation sous forme + de “paquetage”.</para> + </sect3> + + <sect3 id="porting-portlint"> + <title>Vérifier votre portage avec + <command>portlint</command></title> + + <para>Utilisez s'il vous plaît la commande + <command>portlint</command> pour contrôler que votre portage + se conforme à nos recommandations. + Le programme <command>portlint</command> fait partie du catalogue + des logiciels portés. En particulier, vous devriez vérifier + que votre <link linkend="porting-samplem">Makefile</link> est + bien construit et que le nom du + <link linkend="porting-pkgname">paquetage</link> est + correct.</para> + </sect3> + + <sect3 id="porting-submitting"> + <title>Soumettre le portage</title> + + <para>Veillez d'abord à lire la section <link + linkend="porting-dads">A faire et à ne pas + faire</link>.</para> + + <para>Maintenant que vous êtes satisfait de votre portage, la + seule chose qui reste à faire est de le mettre dans + l'arborescence principale des logiciels portés de FreeBSD + de façon à ce que tout le monde en profite. Nous n'avons + pas besoin de votre répertoire + <filename>work</filename> ni de votre fichier + <filename><replaceable>nom_du_paquetage</replaceable>.tgz</filename>, + effacez-les donc maintenant. Incluez simplement ensuite le + résultat de la commande <command>shar `find répertoire_portage`</command> + dans un rapport de bogue et envoyez-le nous avec le programme + <citerefentry> + <refentrytitle>send-pr</refentrytitle> + <manvolnum>1</manvolnum> + </citerefentry>. (Voyez <link linkend="contrib-general">Rapports + de bogues et commentaires généraux</link> pour plus + d'informations sur <citerefentry> + <refentrytitle>send-pr</refentrytitle> + <manvolnum>1</manvolnum> + </citerefentry>.) Si le logiciel porté non compressé fait plus de + 20KB, vous devrez en faire une archive compressée et utiliser + <citerefentry><refentrytitle>uuencode</refentrytitle> + <manvolnum>1</manvolnum> + </citerefentry> avant de l'inclure dans le rapport (les archives + “tar” “uuencodées” sont admises même + si le rapport de bogue fait moins de 20KB, quoique non + souhaitées dans ce cas). Veillez à classer le rapport dans la + catégorie + <literal>ports</literal> - “portages” et + la classe + <literal>change-request</literal> - “demande + de modification”. (Ne classez pas le rapport + <literal>confidential</literal> - “confidentiel” !)</para> + + <para>Encore une fois, <emphasis>n'incluez pas la distribution + originale du source, le répertoire <filename>work</filename> ni le + “paquetage” construit avec <command>make + package</command></emphasis>.</para> + + <note> + <para>Dans le passé, nous demandions que les soumissions de + logiciels portés passent par notre site ftp + (<hostid role="fqdn">ftp.freebsd.org</hostid>). Ce n'est plus + souhaitable parce que l'accès en lecture est interdit sur le + répertoire <filename>incoming/</filename> de ce site du fait + de la trop grande quantité de logiciels piratés qui y + atterrissaient.</para> + </note> + + <para>Nous regarderons votre portage, vous contacterons si nécessaire, + et le mettrons dans l'arborescence. Votre nom apparaîtra aussi dans + la liste des “Autres collaborateurs de FreeBSD” du + manuel FreeBSD et dans d'autres fichiers. Génial, + non?!? <!-- smiley -->:)</para> + + </sect3> + </sect2> + + <sect2> + <title>Portage évolué</title> + + <para>Bon, ce n'était en fait pas si simple, et il a fallu + modifier le code pour que le portage fonctionne. Dans cette + section, nous allons expliquer, étape par étape, comment faire + dans ce cas pour appliquer le paradigme des logiciels + portés.</para> + + <sect3> + <title>Comment les choses fonctionnent</title> + + <para>Pour commencer, voici ce qui se passe lorsque + l'utilisateur tape <command>make</command> dans le + répertoire de votre logiciel porté. Ouvrir le fichier + <filename>bsd.port.mk</filename> dans une autre fenêtre + pendant que vous lisez ceci vous en facilitera la + compréhension.</para> + + <para>Ne vous inquiétez pas si vous ne comprenez pas complètement + ce que fait <filename>bsd.port.mk</filename>, peu de gens y + arrivent... <!-- smiley --><emphasis>:></emphasis></para> + + <procedure> + + <step> + <para>La cible <maketarget>fetch</maketarget> est exécutée. + La cible <maketarget>fetch</maketarget> est chargée de + faire en sorte que l'archive soit localement + disponible dans <makevar>DISTDIR</makevar>. Si + <maketarget>fetch</maketarget> ne trouve pas les + fichiers dans + <makevar>DISTDIR</makevar>, elle regardera à l'URL + <makevar>MASTER_SITES</makevar>, définie dans le + <filename>Makefile</filename>, et sur notre site ftp + principal dans <ulink + URL="ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/">ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/</ulink> où nous avons mis les archives + validées, à titre de copie de secours. Elle essayera alors + de rapatrier le fichier de la distribution avec + <makevar>FETCH</makevar>, en présumant que la machine + qui fait la demande a un accès direct à l'Internet. En + cas de succès, le fichier est sauvegardé dans + <makevar>DISTDIR</makevar> pour la suite, et le traitement + peut continuer.</para> + </step> + + <step> + <para>La cible <maketarget>extract</maketarget> est ensuite + exécutée. Elle cherche le fichier de distribution de votre + portage (typiquement une archive créée par + <command>tar</command> et compressée avec + <command>gzip</command>) dans + <makevar>DISTDIR</makevar> et en extrait le contenu dans + un sous-répertoire temporaire défini par + <makevar>WRKDIR</makevar> + (par défaut <filename>work</filename>).</para> + </step> + + <step> + <para>La cible suivante est <maketarget>patch</maketarget>. + Dans un premier temps, tous les fichiers de mise à jour + définis dans <makevar>PATCHFILES</makevar> sont appliqués. + Ensuite, s'il y a des fichiers de mise à jour dans + <makevar>PATCHDIR</makevar> (le sous-répertoire + <filename>patches</filename> par défaut), ils sont + appliqués, dans l'ordre alphabétique cette fois-ci.</para> + </step> + + <step> + <para>Vient ensuite <maketarget>configure</maketarget> qui + peut faire l'une des opérations suivantes:</para> + + <orderedlist> + + <listitem> + <para>Si elle existe, exécuter la procédure + <filename>scripts/configure</filename>.</para> + </listitem> + + <listitem> + <para>Si <makevar>HAS_CONFIGURE</makevar> ou + <makevar>GNU_CONFIGURE</makevar> + est définie, exécuter + <filename><makevar>WRKSRC</makevar>/configure</filename>.</para> + </listitem> + + <listitem> + <para>Si <makevar>USE_IMAKE</makevar> est définie, + exécuter <makevar>XMKMF</makevar> + (par défaut: <command>xmkmf + -a</command>).</para> + </listitem> + + </orderedlist> + + </step> + + <step> + <para>La dernière cible est + <maketarget>build</maketarget>. Elle passe dans le + sous-répertoire de travail du portage + (<makevar>WRKSRC</makevar>) et se charge de la + compilation. Si la variable <makevar>USE_GMAKE</makevar> + est définie, la commande <command>make</command> GNU est + utilisée, sinon c'est la commande <command>make</command> + du système qui est employée.</para> + </step> + + </procedure> + + <para>Ce sont les opérations par défaut. Vous pouvez en plus + définir des cibles + <maketarget>pre-<replaceable>quelque_chose</replaceable></maketarget> + ou <maketarget>post-<replaceable>quelque_chose</replaceable></maketarget>, + ou mettre des procédures du même nom dans le sous-répertoire + <filename>scripts</filename>, et elles précéderont ou suivront + les opérations par défaut.</para> + + <para>Par exemple, si vous avez défini une cible + <maketarget>post-extract</maketarget> dans votre + <filename>Makefile</filename>, et créé un fichier + <filename>pre-build</filename> dans le sous-répertoire + <filename>scripts</filename>, la cible + <maketarget>post-extract</maketarget> sera invoquée après + l'opération habituelle d'extraction et la procédure + <filename>pre-build</filename> exécutée avant d'appliquer les + règles de compilation par défaut. Il est recommandé d'utiliser + des cibles dans le <filename>Makefile</filename> si les actions + sont suffisamment élémentaires, car il est alors plus facile à + quelqu'un d'autre de voir quelles sont les opérations + supplémentaires effectuées lors du portage.</para> + + <para>Les opérations par défaut sont prises en charge par les + cibles + <maketarget>do-<replaceable>quelque_chose</replaceable></maketarget> + du fichier <filename>bsd.port.mk</filename>. Par exemple, les + commandes d'extraction sont définies par la cible + <maketarget>do-extract</maketarget>. Si la cible par défaut ne + vous convient pas, vous pouvez rédefinir + <maketarget>do-<replaceable>quelque_chose</replaceable></maketarget> + dans votre <filename>Makefile</filename>.</para> + + <note> + <para>Les cibles “principales” (e.g., <maketarget>extract</maketarget>, <maketarget>configure</maketarget>, etc.) ne font rien + d'autre que de s'assurer que les étapes qui les précèdent se + sont bien déroulées et appellent les vrais cibles ou + procédures. Elles ne doivent donc pas être modifiées. Si vous + voulez changer la méthode d'extraction, redéfinissez + <maketarget>do-extract</maketarget>, mais ne modifiez pas + <maketarget>extract</maketarget> !</para> + </note> + + <para>Maintenant que vous avez compris ce qui se passe quand + l'utilisateur tape <command>make</command>, passons en revue + les étapes conseillées pour créer le portage parfait.</para> + + </sect3> + + <sect3> + <title>Obtenez les sources d'origine</title> + + <para>Récupérez les sources d'origine (normalement) sous forme + d'archive compressée + (<filename><replaceable>foo</replaceable>.tar.gz</filename> ou + <filename><replaceable>foo</replaceable>.tar.Z</filename>) et + copiez-les dans <makevar>DISTDIR</makevar>. Utilisez toujours + des sources <emphasis>de première main</emphasis> si vous le + pouvez.</para> + + <para>Si vous ne trouvez pas de site ftp/http correctement + accessible sur le réseau, ou ne trouvez que des sites qui + utilisent des formats non standard, vous voudrez peut-être + mettre une copie sur un serveur ftp ou http fiable que vous + contrôlez (e.g., votre page personnelle). Veillez à définir + <makevar>MASTER_SITES</makevar> pour refléter ce choix.</para> + + <para>Si vous ne trouvez aucun endroit adéquat et fiable où mettre + la distribution (si vous y êtes autorisé, vous pouvez la mettre + dans votre sous-répertoire <filename>public_html/</filename> sur + <hostid>freefall</hostid>), nous pouvons en dernier ressort + “l'accueillir” nous-même en la mettant dans + <filename>ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/LOCAL_PORTS/</filename>. + Définissez cette adresse dans + <makevar>MASTER_SITE_LOCAL</makevar>. Adressez un courrier + électronique à la &a.ports;, si vous n'êtes pas sûr de ce qu'il + faut faire.</para> + + <para>Si la distribution est fréquemment modifiée sans raison + valable, envisagez de la recopier sur votre page personnelle et + listez-la en premier dans <makevar>MASTER_SITES</makevar>. Cela + évitera que les utilisateurs aient des erreurs + “<errorname>checksum mismatch</errorname>” + sur les sommes de contrôle, et réduira aussi + le travail des personnes chargées de maintenir notre site ftp. + D'autre part, s'il n'y a qu'un seul site pour le logiciel + d'origine, il est recommandé que vous ayez une sauvegarde sur + votre site et qu'elle soit mentionnée en second lieu dans + <makevar>MASTER_SITES</makevar>.</para> + + <para>S'il faut d'autres “patches” disponibles sur + l'Internet pour ce portage, récupérez-les aussi et mettez-les + dans <makevar>DISTDIR</makevar>. Ce n'est pas un problème s'ils + proviennent d'autres sites que la distribution de base, nous + pouvons gérer cette situation (voyez plus bas la description + de <link + linkend="porting-patchfiles">PATCHFILES</link>).</para> + + </sect3> + + <sect3> + <title>Modifier les sources</title> + + <para>Extrayez le contenu de l'archive dans un sous-répertoire + privé et faites-y les modifications nécessaires pour que le + logiciel compile correctement avec la version courante de + FreeBSD. Gardez <emphasis>avec soin trace</emphasis> de tout + ce que vous faites, car vous allez bientôt automatiser ces + opérations. Tout, y compris suppressions, ajouts et + modifications de fichiers doit pouvoir être fait par des + procédures ou fichiers de mise à jour une fois que vous aurez + terminé le portage.</para> + + <para>Si le portage demande l'intervention ou des choix de + l'utilisateur à la compilation ou à l'installation, vous + devriez jeter un oeil aux procédures classiques + <application>Configure</application> de Larry Wall, et peut-être + faire quelque chose du même genre. L'objectif du nouveau + catalogue des logiciels portés est que chaque logiciel soit + aussi “prêt-a-l'emploi” que possible pour + l'utilisateur final, tout en utilisant le minimum d'espace + disque.</para> + + <note> + <para>Sauf si vous le précisez explicitement, tous les fichiers + de mise à jour, procédures et fichiers que vous aurez créés + et introduits comme contribution au catalogue des logiciels + portés sont supposés couverts par les conditions standard + de copyright BSD.</para> + </note> + </sect3> + + <sect3> + <title>Modifications</title> + + <para>Les fichiers ajoutés ou modifiés pendant la mise au point + du portage peuvent être identifiés avec un + <command>diff</command> récursif pour générer ensuite les + fichiers de mise à + jour - <foreignphrase>patches</foreignphrase>. Chaque + ensemble de mise à jour que vous souhaitez appliquer doit + être rassemblé dans un fichier + <filename>patch-<replaceable>xx</replaceable></filename>, où + <replaceable>xx</replaceable> correspond au rang de cette + mise à jour dans la séquence d'application de ces + modifications - elles sont traitées en + <emphasis>ordre alphabétique</emphasis>, donc + <literal>aa</literal> d'abord, <literal>ab</literal> en second + et ainsi de suite. Ces fichiers doivent être placés dans + <makevar>PATCHDIR</makevar>, d'où ils seront automatiquement + appliqués. Toutes les modifications doivent être relatives à + <makevar>WRKSRC</makevar> (c'est habituellement le répertoire + où l'archive s'extrait elle-même, et où se fera la + compilation). Pour simplifier les corrections et les mises à + niveau, vous devriez éviter d'avoir plus d'un fichier de mise + à jour s'appliquant au même fichier source + (e.g., <filename>patch-aa</filename> et <filename>patch-ab</filename> modifiant tous deux <filename><makevar>WRKSRC</makevar>/foobar.c</filename>).</para> + + </sect3> + + <sect3> + <title>Configuration</title> + + <para>Ajoutez toutes les autres commandes de mise au point à votre + procédure <filename>configure</filename> et enregistrez-la dans + le sous-répertoire <filename>scripts</filename>. Comme on l'a + dit plus haut, vous pouvez aussi utiliser les cibles du + <filename>Makefile</filename> et/ou les procédures + <filename>pre-configure</filename> ou + <filename>post-configure</filename>.</para> + + </sect3> + + <sect3> + <title>Interactions avec l'utilisateur</title> + + <para>Si vos procédures de compilation, configuration ou + installation ont besoin d'interagir avec l'utilisateur, + définissez la variable <makevar>IS_INTERACTIVE</makevar> dans + votre <filename>Makefile</filename>. Cela permettra aux + “compilations de nuits” d'ignorer le logiciel + que vous avez porté, si l'utilisateur définit dans son + environnement la variable <envar>BATCH</envar> (s'il définit + la variable <envar>INTERACTIVE</envar>, + <emphasis>seuls</emphasis> les logiciels portés pour lesquels + il faut des réponses de l'utilisateur sont compilés).</para> + + <para>Il est aussi recommandé, s'il y a des réponses par défaut + raisonnables à vos questions, de tester la variable + <makevar>PACKAGE_BUILDING</makevar> et de désactiver la partie + interactive de la procédure si cette variable est définie. Cela + permet de compiler les “paquetages” pour les CD-ROMs + et les sites ftp.</para> + </sect3> + </sect2> + + <sect2> + <title>Configurer le Makefile</title> + + <para>Il est assez facile de configurer le Makefile, et nous vous + suggérons à nouveau de jeter un coup d'oeil aux exemples + existants avant de commencer. Il y a aussi un + <link linkend="porting-samplem">exemple de Makefile</link> dans ce + manuel, consultez-le donc et respectez s'il vous plaît l'ordre + des variables et des sections de ce modèle pour que votre + portage soit plus facile à lire pour les autres.</para> + + <para>Envisageons maintenant les problèmes suivants en + séquence au fur et à mesure que vous mettez au point + votre nouveau Makefile :</para> + + <sect3> + <title>Le source original</title> + + <para>Se trouve-t-il dans <makevar>DISTDIR</makevar> sous forme standard + d'archive compressée avec + <citerefentry><refentrytitle>gzip</refentrytitle> <manvolnum>1</manvolnum></citerefentry>. + Si ce n'est pas le cas, vous devriez envisager de surcharger une des + variables <makevar>EXTRACT_CMD</makevar>, + <makevar>EXTRACT_BEFORE_ARGS</makevar>, + <makevar>EXTRACT_AFTER_ARGS</makevar>, + <makevar>EXTRACT_SUFX</makevar> ou <makevar>DISTFILES</makevar> selon + le degré de non-conformité du fichier de distribution + de votre logiciel à porter. (Le cas le plus fréquent est + <literal>EXTRACT_SUFX=.tar.Z</literal>, quand l'archive est + compressée avec + <citerefentry><refentrytitle>compress</refentrytitle> <manvolnum>1</manvolnum></citerefentry> + et non + <citerefentry><refentrytitle>gzip</refentrytitle> <manvolnum>1</manvolnum></citerefentry>.)</para> + + <para>Dans le pire des cas, vous pouvez simplement créer votre + propre cible <maketarget>do-extract</maketarget> pour surcharger la + cible par défaut, bien que ce ne soit que rarement, sinon + jamais, nécessaire.</para> + </sect3> + + <sect3> + <title><makevar>DISTNAME</makevar></title> + + <para>Vous devez affecter à <makevar>DISTNAME</makevar> le nom de + fichier de votre logiciel à porter. Les règles par + défaut veulent que le fichier de distribution + (<makevar>DISTFILES</makevar>) s'appelle + <makevar>DISTNAME</makevar><makevar>EXTRACT_SUFX</makevar> qui, si + c'est un fichier d'archive habituel, sera quelque chose du style + <literal>foozolix-1.0.tar.gz</literal> si + <literal>DISTNAME=foozolix-1.0</literal>.</para> + + <para>Les règles par défaut veulent aussi que l(es) + archive(s) soi(en)t extraite(s) dans un sous-répertoire + appelé <filename>work/<makevar>DISTNAME</makevar></filename>, + e.g., <filename>work/foozolix-1.0/</filename>.</para> + + <para>Toutes ces conventions peuvent bien sûr être + surchargées; ce sont simplement les valeurs par défaut + qui font gagner le plus de temps. Pour un logiciel à porter + pour lequel il y a plusieurs fichiers de distribution, + définissez simplement explicitement + <makevar>DISTFILES</makevar>. S'il n'y a qu'un sous-ensemble de + <makevar>DISTFILES</makevar> qui est effectivement constitué + d'archives extractibles, définissez-les dans + <makevar>EXTRACT_ONLY</makevar>, qui surchargera la liste de + <makevar>DISTFILES</makevar> au moment de l'extraction, les autres + restant dans <makevar>DISTDIR</makevar> pour usage + ultérieur.</para> + </sect3> + + <sect3> + <title><makevar>PKGNAME</makevar></title> + + <para>Si <makevar>DISTNAME</makevar> n'est pas conforme à nos + <link linkend="porting-pkgname">recommandations pour un bon nom de + paquetage</link>, vous devriez affecter à la variable + <makevar>PKGNAME</makevar> une meilleure valeur. Reportez-vous aux + recommandations mentionnées ci-dessus pour plus de + détails.</para> + </sect3> + + <sect3> + <title><makevar>CATEGORIES</makevar></title> + + <para>Quand un paquetage est crée, il est mis dans + <filename>/usr/ports/packages/All</filename> et des liens sont + définis dans un ou plusieurs sous-répertoires de + <filename>/usr/ports/packages</filename>. Les noms de ces + sous-répertoires sont spécifiés par la + variable <makevar>CATEGORIES</makevar>. L'objectif est de faciliter + la vie de l'utilisateur qui erre dans la quantité de + paquetages sur le site ftp ou le CD-ROM. Jettez un oeil s'il vous + plaît aux + <link linkend="porting-categories">catégories</link> + existantes et choisissez celles qui conviennent à votre + logiciel à porter.</para> + + <para>Cette liste détermina aussi où le logiciel sera + importé dans l'arborescence du catalogue des logiciels + portés Si vous y mentionnez plus d'une catégorie, les + fichiers iront dans le sous-répertoire de même nom que la + première de ces catégories. Reportez-vous à la + section <link linkend="porting-categories">Catégories</link> + pour plus d'informations sur la manière de sélectionner + les bonnes catégories.</para> + + <para>Si votre logiciel à porter appartient vraiment à une + autre catégorie que celles qui sont déjà + définies, vous pouvez même créer une nouvelle + catégorie. Dans ce cas, envoyez s'il vous plaît un + courrier électronique à la &a.ports; pour proposer la + création d'une nouvelle catégorie.</para> + + <note> + <para>Il n'y a pas de contrôle des noms de catégorie. + <command>make paquetage</command> créera sans sourcillier un + nouveau sous-répertoire si vous orthographiez mal le nom de + la catégorie, soyez donc prudent !</para> + </note> + </sect3> + + <sect3> + <title><makevar>MASTER_SITES</makevar></title> + + <para>Indiquez le répertoire de l'“URL” ftp/http + où se trouve l'archive originale dans + <makevar>MASTER_SITES</makevar>. N'oubliez pas le “slash” + final (<filename>/</filename>) !</para> + + <para>Les macros-instructions <command>make</command> essayerons + d'utiliser cette valeur pour récupérer le fichier de + distribution avec <makevar>FETCH</makevar>, si elles ne le trouvent + pas sur votre système.</para> + + <para>Il est conseillé de mentionner plusieurs sites dans cette + liste, si possible sur des continents différents. Cela + constituera un garde-fou contre les problèmes du réseau + mondial, et nous envisageons même d'ajouter la + détermination automatique du site de référence + le plus proche, pour aller y chercher la distribution !</para> + + <para>Si l'archive d'origine se trouve sur l'une des archives classiques suivantes : X-contrib, GNU, Perl CPAN, TeX CTAN ou Linux Sunsite, + vous pouvez y faire référence sous forme plus compacte + en vous servant de <makevar>MASTER_SITE_XCONTRIB</makevar>, + <makevar>MASTER_SITE_GNU</makevar>, + <makevar>MASTER_SITE_PERL_CPAN</makevar>, + <makevar>MASTER_SITE_TEX_CTAN</makevar> et + <makevar>MASTER_SITE_SUNSITE</makevar>. Affectez simplement à + <makevar>MASTER_SITE_SUBDIR</makevar> le chemin d'accès au + fichier dans l'archive. En voici un exemple :</para> + + <programlisting> +MASTER_SITES= ${MASTER_SITE_XCONTRIB} +MASTER_SITE_SUBDIR= applications + </programlisting> + + <para>L'utilisateur peut aussi configurer les variables + <makevar>MASTER_SITE_*</makevar> dans + <filename>/etc/make.conf</filename> pour surcharger vos choix, et + utiliser à la place ses sites miroir favoris pour ces + archives.</para> + </sect3> + + <sect3 id="porting-patchfiles"> + <title><makevar>PATCHFILES</makevar></title> + + <para>Si votre logiciel à porter a besoin de + correctifs - <foreignphrase>patches</foreignphrase> - disponibles + via ftp ou http, affectez à <makevar>PATCHFILES</makevar> les + noms des fichiers et à <makevar>PATCH_SITES</makevar> + l'“URL” du répertoire où ils se trouvent (le + format est le même que pour + <makevar>MASTER_SITES</makevar>).</para> + + <para>Si le correctif ne s'applique pas à la racine de + l'arborescence des sources (i.e., <makevar>WKRSRC</makevar>) parce + qu'il contient des chemins d'accès supplémentaires, + définissez <makevar>PATCH_DIST_STRIP</makevar> en + conséquence. Par exemple, si tous les noms de fichiers dans le + correctif sont précédés de + <literal>foozolix-1.0/</literal>, configurez alors + <literal>PATCH_DIST_STRIP=-p1</literal>.</para> + + <para>Ne vous inquiétez pas si les correctifs sont + compressés, ils seront automatiquement + décompressés si les noms des fichiers se terminent par + <filename>.gz</filename> ou <filename>.Z</filename>.</para> + + <para>Si le correctif est distribué avec d'autres fichiers, de la + documentation par exemple, sous forme d'archive compressée avec + <citerefentry><refentrytitle>gzip</refentrytitle> <manvolnum>1</manvolnum></citerefentry>, + vous ne pouvez pas utiliser <makevar>PATCHFILES</makevar>. Dans ce + cas, ajoutez le nom et la localisation du correctif à + <makevar>DISTFILES</makevar> et <makevar>MASTER_SITES</makevar>. Puis, + appliquez le correctif depuis la cible + <maketarget>pre-patch</maketarget>, soit en y exécutant la + commande <command>patch</command>, soit en copiant le correctif dans + le répertoire <makevar>PATCHDIR</makevar> et en l'appelant + <filename>patch-<replaceable>xx</replaceable></filename>.</para> + + <note> + <para>Remarquez que cette archive sera extraite en même temps + que le source de base, il n'est donc pas nécessaire de + l'extraire explicitement si elle est normalement compressée + avec + <citerefentry><refentrytitle>gzip</refentrytitle> <manvolnum>1</manvolnum></citerefentry> + ou + <citerefentry><refentrytitle>compress</refentrytitle> <manvolnum>1</manvolnum></citerefentry>. + Si vous le faites néanmoins, faites attention à + ne rien écraser de ce qui existe dans le répertoire. + Et n'oubliez pas non plus d'ajouter une commande pour supprimer le + correctif recopié à la cible + <maketarget>pre-clean</maketarget>.</para> + </note> + </sect3> + + <sect3> + <title><makevar>MAINTAINER</makevar></title> + + <para>Indiquez ici votre adresse électronique. S'il vous + plaît. <!-- smiley --><emphasis>:)</emphasis></para> + + <para>Pour une description détaillé de la + responsabilité du chargé de la maintenance, + reportez-vous à la section + <link linkend="policies-maintainer">MAINTAINER des + <filename>Makefile</filename>s</link>.</para> + </sect3> + + <sect3> + <title>Dépendances</title> + + <para>De nombreux logiciels portés dépendent d'autres + logiciels. Il y a cinq variables que vous pouvez utiliser pour vous + assurer qu'il y a tout ce qu'il faut sur la machine de l'utilisateur. + Il y a aussi des variables prédéfinies pour les cas les + plus courants, et quelques autres pour contrôler le comportement + vis-à-vis des dépendances.</para> + + <sect4> + <title><makevar>LIB_DEPENDS</makevar></title> + + <para>Cette variable définit les bibliothèques + partagées dont dépend le logiciel à porter. + C'est une liste de tuples + <replaceable>biblothèque</replaceable>:<replaceable>répertoire</replaceable><optional><replaceable>:cible</replaceable></optional> + où <replaceable>bibliothèque</replaceable> est + le nom de la bibliothèque partagée, + <replaceable>répertoire</replaceable> est le nom du + répertoire où la trouver si elle n'est pas + encore installée et <replaceable>cible</replaceable> celui de + la cible à exécuter dans ce répertoire. Par + exemple :</para> + <programlisting> +LIB_DEPENDS= jpeg\\.9\\.:${PORTSDIR}/graphics/jpeg:install + </programlisting> + <para>cherchera une bibliothèque partagée + <literal>jpeg</literal> avec le numéro de version majeure 9 + et descendra dans le sous-répertoire + <filename>graphics/jpeg</filename> de l'arborescence du catalogue + des logiciels portés pour la compiler et l'installer, s'il ne + la trouve pas. La <replaceable>cible</replaceable> peut être + omise si elle est égale à + <makevar>DEPENDS_TARGET</makevar> (dont la valeur par défaut + est <literal>install</literal>).</para> + + <note> + <para><replaceable>bibliothèque</replaceable> est + passé en argument à + <command>ldconfig -r | grep -wF</command>. Cette variable ne doit + pas comporter d'expression régulière.</para> + </note> + + <para>La dépendance est vérifiée deux fois, une + première fois depuis la cible + <maketarget>extract</maketarget> et ensuite par la cible + <maketarget>install</maketarget>. Le nom de la dépendance est + aussi enregistré dans le paquetage de sorte que + <command>pkg_add</command> l'installe automatiquement si elle n'est + pas disponible sur le système de l'utilisateur.</para> + </sect4> + + <sect4> + <title><makevar>RUN_DEPENDS</makevar></title> + + <para>Cette variable définit quels exécutables et + fichiers doivent être présents pour pouvoir utiliser le + logiciel porté. C'est une liste de tuples + <replaceable>chemin d'accès</replaceable>:<replaceable>répertoire</replaceable><optional><replaceable>:cible</replaceable></optional> + où <replaceable>chemin d'accès</replaceable> est le + nom de l'exécutable ou du fichier, + <replaceable>répertoire</replaceable> est le + répertoire où le trouver s'il n'est pas encore + installé et <replaceable>cible</replaceable> est la cible + à exécuter dans ce répertoire. Si + <replaceable>chemin d'accès</replaceable> commence par un + “<foreignphrase>slash</foreignphrase> + (<literal>/</literal>), il est traité comme un fichier et son + existence est testée avec <command>test -e</command> ; + sinon, on suppose que c'est un exécutable, et c'est la + commande <command>which -s</command> qui est utilisée pour + voir si le programme existe dans les chemins d'accès par + défaut de l'utilisateur.</para> + + <para>Par exemple :</para> + + <programlisting> +RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ + wish8.0:${PORTSDIR}/x11-toolkits/tk80</programlisting> + + <para>regardera si le fichier ou le répertoire + <filename>/usr/local/etc/innd</filename> existe, et le compilera et + l'installera dans le sous-répertoiree + <filename>news/inn</filename> de l'arborescence du catalogue des + logiciels portés s'il ne le trouve pas. Il s'assurera aussi + de la présence d'un exécutable appelé + <command>wish8.0</command> dans vos chemins d'accès par + défaut, et ira dans le sous-répertoire + <filename>x11-toolkits/tk80</filename> de l'arborescence du + catalogue des logiciels portés pour le compiler et + l'installer s'il ne le trouve pas.</para> + + <note> + <para>Dans ce cas, <command>innd</command> est en fait un + exécutable ; si un programme n'est pas à la + place normale où on s'attend à le trouver dans les + chemins d'accès par défaut de l'utilisateur, il faut + utiliser son nom complet depuis la racine.</para> + </note> + + <para>La dépendance est vérifiée par la cible + <maketarget>install</maketarget>. Le nom de la dépendance est + aussi enregistré dans le paquetage de sorte que + <command>pkg_add</command> l'installe automatiquement si elle n'est + pas disponible sur le système de l'utilisateur. La + <replaceable>cible</replaceable> peut être omise si elle est + égale à <makevar>DEPENDS_TARGET</makevar>.</para> + </sect4> + + <sect4> + <title><makevar>BUILD_DEPENDS</makevar></title> + + <para>Cette variable définit quels exécutables et + fichiers sont nécessaires pour installer le logiciel. Comme + <makevar>RUN_DEPENDS</makevar>, c'est une liste de tuples + <replaceable>chemin d'accès</replaceable>:<replaceable>répertoire</replaceable><optional><replaceable>:cible</replaceable></optional>. + Par exemple :</para> + <programlisting> +BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip + </programlisting> + <para>recherchera un exécutable appelé + <command>unzip</command> et ira dans le sous-répertoire + <filename>archivers/unzip</filename> de l'arborescence du + catalogue des logiciels portés pour le compiler et + l'installer s'il ne le trouve pas.</para> + + <note> + <para>“installer” recouvre ici tout le processus, de + l'extraction à la compilation. La dépendance est + vérifiée par la cible + <maketarget>extract</maketarget>. La + <replaceable>cible</replaceable> peut être omise si elle + est égale à + <makevar>DEPENDS_TARGET</makevar>.</para> + </note> + </sect4> + + <sect4> + <title><makevar>FETCH_DEPENDS</makevar></title> + + <para>Cette variable définit quels exécutables le + logiciel a besoin de récupérer. Comme les deux + précédentes, c'est une liste de tuples + <replaceable>chemin d'accès</replaceable>:<replaceable>répertoire</replaceable><optional><replaceable>:cible</replaceable></optional>. + Par exemple :</para> + <programlisting> +FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2 + </programlisting> + <para>recherchera un exécutable appelé + <command>ncftp2</command> et descendera dans le + sous-répertoire <filename>net/ncftp2</filename> de + l'arborescence du catalogue des logiciels portés pour le + compiler et l'installer s'il ne le trouve pas.</para> + + <para>La dépendance est vérifiée par la cible + <maketarget>fetch</maketarget>. La <replaceable>cible</replaceable> + peut être omise si elle est égale à + <makevar>DEPENDS_TARGET</makevar>.</para> + </sect4> + + <sect4> + <title><makevar>DEPENDS</makevar></title> + + <para>S'il y a une dépendance qui ne rentre pas dans les quatre + catégories précédentes ou si votre logiciel + à porter a besoin que les sources d'un autre logiciel soient + installés en plus de ce logiciel lui-même, + utilisez cette variable. C'est une liste de + <replaceable>répertoire</replaceable><optional><replaceable>:cible</replaceable></optional>, + puisqu'il n'y a rien à vérifier, à l'inverse + des quatre précédentes. La + <replaceable>cible</replaceable> peut être omise si elle est + égale à <makevar>DEPENDS_TARGET</makevar>.</para> + </sect4> + + <sect4> + <title>Variables prédéfinies</title> + + <para>Utilisez <literal>USE_XLIB=yes</literal> si votre logiciel + à porter a besoin que le système <application>X + Window</application> soit installé (c'est implicite avec + <makevar>USE_IMAKE</makevar>). Utilisez + <literal>USE_GMAKE=yes</literal> si votre logiciel à porter a + besoin de GNU <command>make</command> au lieu de BSD + <command>make</command>. Utilisez + <literal>USE_AUTOCONF=yes</literal> si votre logiciel à + porter a besoin que GNU <command>autoconf</command> soit + exécuté. Utilisez <literal>USE_QT=yes</literal> si + votre logiciel utilise la boîte à outils + <application>Qt</application>. Utilisez + <literal>USE_PERL5=yes</literal> si votre logiciel à porter a + besoin de la version 5 du langage perl. (Cette dernière + variable est particulièrement importante parce que certaines + versions de FreeBSD comportent perl 5 installé de base, mais + d'autres non.)</para> + </sect4> + + <sect4> + <title>Notes à propos des dépendances</title> + + <para>Comme indiqué plus haut, la cible à appeler par + défaut quand il y a un dépendance requise est + <maketarget>DEPENDS_TARGET</maketarget>. Sa valeur par défaut + est <literal>install</literal>. C'est une variable utilisateur. Elle + n'est jamais définie dans le <filename>Makefile</filename> + d'un logiciel à porter. Si votre logiciel à porter a + besoin qu'une dépendance soit gérée d'une + façon particulière, utilisez la partie + <literal>:cible</literal> des variables <makevar>*_DEPENDS</makevar> + au lieu de redéfinir + <makevar>DEPENDS_TARGET</makevar>.</para> + + <para>Quand vous tapez <command>make clean</command>, les + dépendances sont aussi purgées. Si vous ne voulez pas + qu'il en soit ainsi, définissez la variable + <makevar>NOCLEANDEPENDS</makevar> dans votre environnement.</para> + + <para>Pour dépendre sans condition d'un autre logiciel + porté, il est habituel d'utiliser l'indication + <literal>nonexistent</literal> comme premier champ de + <makevar>BUILD_DEPENDS</makevar> ou + <makevar>RUN_DEPENDS</makevar>. N'utilisez cela que si vous avez + besoin du source d'un autre logiciel porté. Vous pouvez aussi + avec cette cible économiser du temps de compilation. Par + exemple :</para> + + <programlisting> +BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract + </programlisting> + + <para>ira toujours dans le répertoire du logiciel porté + JPEG pour l'extraire.</para> + + <para>N'utilisez <makevar>DEPENDS</makevar> que s'il n'y a pas d'autre + moyen d'obtenir ce que vous voulez. Cela provoquera toujours + la compilation (et par défaut l'installation) d'autres + logiciels portés et la dépendance sera aussi + inclue aux paquetages. Si c'est vraiment ce dont vous avez besoin, + je vous recommande d'utiliser <literal>BUILD_DEPENDS</literal> et + <literal>RUN_DEPENDS</literal> à la place—au moins + votre intention sera claire.</para> + </sect4> + </sect3> + + <sect3> + <title>Mécanismes de compilation</title> + + <para>Si votre paquetage utilise GNU <command>make</command>, + positionnez <literal>USE_GMAKE=yes</literal>. Si votre paquetage + utilise <command>configure</command>, positionnez + <literal>HAS_CONFIGURE=yes</literal>. Si votre paquetage utilise GNU + <command>configure</command>, positionnez + <literal>GNU_CONFIGURE=yes</literal> (ce qui implique + <literal>HAS_CONFIGURE</literal>). Si vous voulez passer des arguments + supplémentaires à <command>configure</command> (la liste + d'arguments par défaut est + <literal>--prefix=${PREFIX}</literal> pour GNU + <command>configure</command> et elle est vide pour les autres versions + de <command>configure</command>), définissez ces arguments + complémentaires avec la variable + <makevar>CONFIGURE_ARGS</makevar>. Si votre paquetage utilise GNU + <command>autoconf</command>, positionnez + <literal>USE_AUTOCONF=yes</literal>. Cela implique + <makevar>GNU_CONFIGURE</makevar>, et provoquera l'exécution + d'<command>autoconf</command> avant celle de + <command>configure</command>.</para> + + <para>Si votre paquetage est une application X qui génère + des <filename>Makefile</filename>s à partir + d'<filename>Imakefile</filename>s avec <command>imake</command>, + positionnez alors <literal>USE_IMAKE=yes</literal>. A l'étape + de configuration, la commande <command>xmkmf -a</command> sera + automatiquement exécutée. Si l'option + <option>-a</option> pose une problème pour votre portage, + positionnez <literal>XMKMF=xmkmf</literal>. Si le portage utilise + <command>imake</command> mais ne comprend pas la cible + <maketarget>install.man</maketarget>, il faut alors définir + <literal>NO_INSTALL_MANPAGES=yes</literal>. De plus, l'auteur + d'origine du logiciel devrait être “fusillé”. + <!-- smiley --><emphasis>:></emphasis></para> + + <para>Si le <filename>Makefile</filename> d'origine du logiciel que vous + portez utilise une autre cible principale que + <maketarget>all</maketarget>, définissez en conséquence + <makevar>ALL_TARGET</makevar>. Il en va de mê:me pour + <maketarget>install</maketarget> et + <makevar>INSTALL_TARGET</makevar>.</para> + </sect3> + </sect2> + + <sect2> + <title>Considérations particulières</title> + + <para>Il y a quelques autres points à prendre en compte lorsque + vous portez un logiciel. Cette section détaille les plus + fréquemment rencontrés.</para> + + <sect3> + <title><command>ldconfig</command></title> + + <para>Si votre portage installe une bibliothèque partagée, + ajoutez une cible <maketarget>post-install</maketarget> à votre + <filename>Makefile</filename> qui exécute + <literal>${LDCONFIG} -m</literal> sur le répertoire + où la nouvelle bibliothèque est installée + (habituellement <filename><makevar>PREFIX</makevar>/lib</filename>) + pour l'enregistrer dans le cache de bibliothèque + partagée.</para> + + <para>Ajoutez aussi une ligne <literal>@exec /sbin/ldconfig -m</literal> + et la ligne <literal>@unexec /sbin/ldconfig -R</literal> + correspondante à votre fichier <filename>pkg/PLIST</filename> + de façon à ce que l'utilisateur qui installe le + paquetage puisse utiliser immédiatement la bibliothèque + partagée et qu'à la désinstallation, le + système sache que la bibliothèque n'est plus là. + Ces lignes doivent suivre immédiatement celle qui concerne la + bibliothèque partagée elle-même, comme + dans :</para> + + <programlisting> +lib/libtvl80.so.1 +@exec /sbin/ldconfig -m %D/lib +@unexec /sbin/ldconfig -R + </programlisting> + + <para>N'ajoutez jamais, mais vraiment <emphasis>jamais</emphasis> de + ligne qui ne contienne que <literal>ldconfig</literal> sans argument + à votre <filename>Makefile</filename> ou à votre + <filename>pkg/PLIST</filename>. Cela réinitialisera le cache de + bibliothèque partagée avec le contenu de + <filename>/usr/lib</filename> uniquement, et vérolera + royalement la machine de l'utilisateur (“A l'aide, xinit ne + fonctionne plus depuis que j'ai installé ce logiciel + porté !). Quiconque commet ce crime sera fusillé + et découpé en 65.536 morceaux avec un couteau + rouillé, son foie sera déchiqueté par une bande + de corbeaux et il rôtira éternellement au tréfonds + de l'enfer (pas nécessairement dans cet ordre…)</para> + </sect3> + </sect2> + + <sect2> + <title>Support ELF</title> + + <para>Comme FreeBSD passe à ELF peu de temps aprè + 3.0-release, il faut convertir de nombreux ports qui compilent des + biblothèques partagées pour qu'ils supportent ELF. Cette + tâche est compliquée par le fait qu'un système 3.0 + peut s'exécuter à la fois en ELF et en a.out et que nous + voulons supporter la version 2.2 aussi longtemps que possible. Voici + quelques indications pour la conversion de logiciels portés a.out + pour qu'ils supportent à la fois la compilation en a.out et + ELF.</para> + + <para>Certains points cités ne s'appliquent qu'à la + conversion elle-même. Ils resteront mentionnés + néanmoins quelque temps pour le cas où vous tomberiez sur + un ancien logiciel porté que vous voulez mettre à + niveau.</para> + + <sect3> + <title>Mettre de côté les bibliothèques + a.out</title> + + <para>Les bibliothèques a.out doivent être + déplacées de <filename>/usr/local/lib</filename> et + autres vers un sous-répertoire <filename>aout</filename>. (Si + vous ne les mettez pas de côté, les logiciels + portés ELF les écraseront sans sourciller.) + La cible <maketarget>move-aout-libs</maketarget> du + <filename>src/Makefile</filename> de 3.0-current (appelé par + <maketarget>aout-to-elf</maketarget>) le fera pour vous. Elle ne + déplacera que les bibliothèques a.out, il n'y a donc pas + de risque à l'appeler sur un système où il y a + à la fois des bibliothèques ELF et a.out dans les + répertoires standard.</para> + </sect3> + + <sect3> + <title>Format</title> + + <para>L'arborescence du catalogue des logiciels portés compilera + les paquetages au format utilisé par la machine, + c'est-à-dire a.out en 2.2 et a.out ou ELF en 3.0 selon ce que + retourne la commande <command>`objformat`</command>. D'autre part, + un fois que les utilisateurs déplacent les bibliothèques + a.out dans un sous-répertoire, la compilation des + bibliothèques a.out ne sera plus supporté. (i.e., cela + peut encore marcher si vous savez ce que vous faites, mais vous devrez + vous débrouiller par vous-même.)</para> + + <note> + <para>Si un logiciel porté ne fonctionne qu'en a.out, affectez + à <makevar>BROKEN_ELF</makevar> une chaîne de + caractères qui décrive pourquoi. Ces logiciels ne + seront pas générés à la compilation sur + un système ELF.</para> + </note> + </sect3> + + <sect3> + <title><makevar>PORTOBJFORMAT</makevar></title> + + <para><filename>bsd.port.mk</filename> affectera à + <makevar>PORTOBJFORMAT</makevar> la valeur <literal>aout</literal> ou + <literal>elf</literal> et l'exportera dans les environnements + <envar>CONFIGURE_ENV</envar>, <envar>SCRIPTS_ENV</envar> et + <envar>MAKE_ENV</envar>. (Ce sera toujours + <literal>aout</literal> sous 2.2-STABLE). Elle est aussi passée + à <maketarget>PLIST_SUB</maketarget> sous la forme + <literal>PORTOBJFORMAT=${PORTOBJFORMAT}</literal>. (Reportez-vous aux + explications concernant <literal>ldconfig</literal> plus bas.)</para> + + <para>Cette variable est définie par la ligne suivante de + <filename>bsd.port.mk</filename> :</para> + + <programlisting> +PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout</programlisting> + + <para>Le processus de compilation des logiciels portés devrait + toujours utiliser cette variable pour décider de ce qu'il faut + faire. Cependant, si la procédure + <filename>configure</filename> associée + détecte déjà automatiquement un système + ELF, il n'est pas nécessaire de se référer + à <makevar>PORTOBJFORMAT</makevar>.</para> + </sect3> + + <sect3> + <title>Compilation des bibliothèques partagées</title> + + <para>Ce qui suit décrit les différences de gestion des + bibliothèques partagées entre les formats ELF et + a.out.</para> + + <itemizedlist> + <listitem> + <para>Versions de bibliothèques partagées</para> + + <para>Une bibliothèque partagée ELF doit s'appeler + <filename>libfoo.so.<replaceable>M</replaceable></filename>, + où <replaceable>M</replaceable> est un unique numéro + de version et une bibliothèque partagée a.out doit + s'appeler + <filename>libfoo.so.<replaceable>M</replaceable>.<replaceable>N</replaceable></filename>, + où <replaceable>M</replaceable> est le numéro de + version majeure et + <replaceable>N</replaceable> celui de version mineure. + Ne confondez pas ; n'installez <emphasis>jamais</emphasis> de + bibliothèque partagée ELF appelée + <filename>libfoo.so.<replaceable>N</replaceable>.<replaceable>M</replaceable></filename> + ou de bibliothèque partagée A.out (ou de lien + symbolique dessus) appelée + <filename>libfoo.so.<replaceable>N</replaceable></filename>.</para> + </listitem> + + <listitem> + <para>Ligne de commande de l'éditeur de liens</para> + + <para>En supposant que <command>cc -shared</command> + soit utilisé plutôt que <command>ld</command> + directement, la seule différence est qu'il faut ajouter + <option>-Wl,-<replaceable>soname,libfoo.so.M</replaceable></option> + sur la ligne de commande pour ELF.</para> + </listitem> + </itemizedlist> + + <para>Il faut définir un lien symbolique de + <filename>libfoo.so</filename> vers + <filename>libfoo.so.<replaceable>N</replaceable></filename> pour que + les éditeurs de liens ELF s'y retrouvent. Comme il doit + être aussi mentionné dans + <filename>PLIST</filename>, cela ne posera pas de problème dans + le cas de a.out (pour certains logiciels portés, il faut + même que ce lien existe pour l'édition de liens + dynamiques), vous devriez définir ce lien quelle que soit la + valeur de la variable <makevar>PORTOBJFORMAT</makevar>.</para> + </sect3> + + <sect3> + <title><makevar>LIB_DEPENDS</makevar></title> + + <para>Tous les <filename>Makefile</filename>s des logiciels + portés sont à modifier pour supprimer les numéros + de versions mineures de <makevar>LIB_DEPENDS</makevar>, ainsi que le + support des expressions réqulières (e.g., + <literal>foo\\.1\\.\\(33|40\\)</literal> devient + <literal>foo.2</literal>.) La correspondance sera effectuée par + <command>grep -wF</command>.</para> + </sect3> + + <sect3> + <title><filename>PLIST</filename></title> + + <para><filename>PLIST</filename> doit contenir les noms courts (ELF) des + bibliothèques partagées si leur numéro de version + mineure a.out est zéro et les noms longs (a.out) dans le cas + contraire. <filename>bsd.port.mk</filename> ajoutera automatiquement + le <literal>.0</literal> à la fin des noms courts de + bibliothèques partagées si + <makevar>PORTOBJFORMAT</makevar> vaut <literal>aout</literal>, et + supprimera le numéro de version mineure des noms longs si + <makevar>PORTOBJFORMAT</makevar> vaut <literal>elf</literal>.</para> + + <para>Au cas où vous auriez vraiment besoin d'installer des + bibliothèques partagées avec deux numéros de + version sur un système ELF ou avec un seul numéro de + version sur un système a.out (par exemple, pour les logiciels + portés qui installent des bibliothèques pour la + compatibilité avec d'autres systèmes d'exploitation), + définissez la variable <makevar>NO_FILTER_SHLIBS</makevar>. + Cela inhibera le mécanisme de modification de + <filename>PLIST</filename> décrit au paragraphe + précédent.</para> + </sect3> + + <sect3> + <title><literal>ldconfig</literal></title> + + <para>La ligne <literal>ldconfig</literal> des + <filename>Makefile</filename>s doit contenir :</para> + + <programlisting> +${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m .... + </programlisting> + + <para>Dans <filename>PLIST</filename>, il doit y avoir :</para> + + <programlisting> +@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ... +@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -R + </programlisting> + + <para>Cela pour garantir que la bonne commande + <command>ldconfig</command> sera appelée en fonction du format + du paquetage et non du format par défaut sur le + système.</para> + </sect3> + </sect2> + + <sect2 id="porting-masterdir"> + <title><makevar>MASTERDIR</makevar></title> + + <para>Si votre logiciel porté a besoin de générer des + versions légèrement différentes des paquetages en + fonction de la valeur d'une variable (la résolution ou le format + de page par exemple), créez un sous-répertoire par + paquetage pour qu'il soit plus facile aux utilisateurs de savoir quoi + faire, mais essayez de partager autant de fichiers que possible entre + logiciels portés. Vous aurez normalement besoin d'un + <filename>Makefile</filename> très court dans tous les + sous-répertoires à l'exception d'un seul. Dans ces + <filename>Makefile</filename>s, vous pouvez utiliser la variable + <makevar>MASTERDIR</makevar> pour indiquer le répertoire + où se trouvent le reste des fichiers. Utilisez aussi une variable + pour une partie de + <link linkend="porting-pkgname"><makevar>PKGNAME</makevar></link> de + façon à ce que les paquetages aient des noms + différents.</para> + + <para>Cela sera plus clair avec un exemple. C'est un extrait de + <filename>japanese/xdvi300/Makefile</filename> :</para> + + <programlisting> +PKGNAME= ja-xdvi${RESOLUTION}-17 + : +# default +RESOLUTION?= 300 +.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ + ${RESOLUTION} != 300 && ${RESOLUTION} != 400 + @${ECHO} "Erreur: valeur incorrecte pour RESOLUTION: \"${RESOLUTION}\"" + @${ECHO} "Les valeurs acceptables sont : 118, 240, 300 (par défaut) et 400." + @${FALSE} +.endif</programlisting> + + <para><filename>japanese/xdvi300</filename> contient aussi les fichiers + de “<foreignphrase>patches</foreignphrase>”, paquetages, + etc. Si vous y tapez <command>make</command>, la valeur de la + résolution sera prise par défaut (300) et le logiciel + porté compilera normalement.</para> + + <para>Poue les autres résolutions, voici le + <filename>xdvi118/Makefile</filename> + <emphasis>complet</emphasis> :</para> + + <programlisting> +RESOLUTION= 118 +MASTERDIR= ${.CURDIR}/../xdvi300 + +.include ${MASTERDIR}/Makefile + </programlisting> + + <para>(<filename>xdvi240/Makefile</filename> et + <filename>xdvi400/Makefile</filename> sont identiques). La + définition de <makevar>MASTERDIR</makevar> dit à + <filename>bsd.port.mk</filename> que le jeu de sous-répertoires + habituels tels que <makevar>PATCHDIR</makevar> et + <makevar>PKGDIR</makevar> se trouvent dans + <filename>xdvi300</filename>. La ligne <literal>RESOLUTION=118</literal> + surchargera la ligne <literal>RESOLUTION=300</literal> de + <filename>xdvi300/Makefile</filename> et le logiciel porté sera + compilé avec une résolution de 118.</para> + </sect2> + + <sect2> + <title>Versions des biblothèques partagées</title> + + <para>Lisez tout d'abord s'il vous plaît nos + <link linkend="policies-shlib">Instructions à propos des versions + de bibliothèques partagées</link> pour savoir comment + gérer de façon générale les versions de + bibliothèques. Ne supposez pas aveuglement que les auteurs des + logiciels savent ce qu'ils font; ce n'est, la plupart du temps, pas le + cas. Il est très important que ces détails soient + attentivement examinés, parce que nous nous trouvons dans une + situation assez particulière dans laquelle nous devons faire + cohabiter des douzaines de logiciels potentiellement incompatibles. + Les importations à la va-vite de logiciels ont posé dans + le passé de gros problèmes en ce qui concerne les + bibliothèques partagées (vous êtes vous jamais + demandé pourquoi le numéro de version de la + bibliothèque partagée <filename>jpeg-6b</filename> + était 0.9?). En cas de doute, envoyez un message à + &a.ports;. La plupart du temps, votre tâche se limitera à + déterminer la bonne version de bibliothèque + partagée et à appliquer les bonnes mises à + niveau - <foreignphrase>patches</foreignphrase> - pour + l'implémenter.</para> + + <para>Néanmoins, s'il y a une bibliothèque portée qui + n'est qu'une même version de la même bibliothèque + partagée déjà présente au catalogue, la + situation est beaucoup plus complexe. Brièvement, + l'implémentation sous FreeBSD ne permet pas à + l'utilisateur de préciser à l'éditeur de liens avec + quelle version de bibliothèque partagée effectuer + l'édition de liens (l'éditeur de liens choisira toujours + le numéro de version le plus élevé). Cela signifie + que, s'il y a sur le système une + <filename>libfoo.so.3.2</filename> et une + <filename>libfoo.so.4.0</filename>, il n'y a aucun moyen de dire + à l'éditeur de liens qu'une application donnée + doit être liée avec <filename>libfoo.so.3.2</filename>. + c'est totalement masqué au moment de l'édition de liens. + Dans ce cas, il n'y a qu'une seule solution, renommer la + <emphasis>base</emphasis> du nom de la bibliothèque + partagée. Par exemple, modifier + <filename>libfoo.so.4.0</filename> en + <filename>libfoo4.so.1.0</filename> pour que les versions 3.2 et 4.0 + puissent être liées avec d'autres logiciels + portées.</para> + </sect2> + + <sect2 id="porting-manpages"> + <title>Pages de manuel</title> + + <para>Les variables <makevar>MAN[1-9LN]</makevar> ajouteront + automatiquement toutes les pages de manuel à + <filename>pkg/PLIST</filename> (cela signifie que vous ne devez + <emphasis>pas</emphasis> lister les pages de manuel dans + <filename>PLIST</filename>—reportez-vous à la section + <link linkend="porting-plist">Modifier <filename>PLIST</filename> sur + la base des variables du <literal>make</literal></link> pour plus de + détails). Cela provoquera aussi la compression ou la + décompression de pages de manuel selon le contenu de la variable + <makevar>NOMANCOMPRESS</makevar> dans + <filename>/etc/make.conf</filename>.</para> + + <para>Pour indiquer si les pages de manuel doivent être + compressées à l'installation, utilisez la variable + <makevar>MANCOMPRESSED</makevar>. Cette variable peut prendre trois + valeurs, <literal>yes</literal>, <literal>no</literal> et + <literal>maybe</literal>. <literal>yes</literal> signifie que les pages + de manuel sont installées déjà compressées, + <literal>no</literal> signifie qu'elles ne le sont pas, et + <literal>maybe</literal> signifie que le logiciel s'aligne toujours sur + la valeur de <makevar>NOMANCOMPRESS</makevar> de sorte que + <filename>bsd.port.mk</filename> n'a rien à faire de + spécial.</para> + + <para><makevar>MANCOMPRESSED</makevar> est automatiquement définie + à <literal>yes</literal> si <makevar>USE_IMAKE</makevar> est + définie et que <makevar>NO_INSTALL_MANPAGES</makevar> ne l'est + pas, et à <literal>no</literal> sinon. Vous n'avez pas à + la définir explicitement, à moins que la valeur par + défaut ne convienne pas à votre logiciel à + porter.</para> + + <para>Si votre logiciel à porter installe ses pages de manuel + ailleurs que dans <makevar>PREFIX</makevar>, vous pouvez utiliser + <makevar>MANPREFIX</makevar> pour l'indiquer. Si ce sont seulement + certaines pages de manuel qui ne doivent pas être + installées dans le répertoire habituel, comme c'est le + cas pour certains modules portés Perl, vous pouvez définir + des répertoires individualisés pour les pages de manuel + avec <makevar>MAN<replaceable>section</replaceable>PREFIX</makevar> + (où <replaceable>sect</replaceable> est une valeur de + <literal>1-9</literal>, ou <literal>L</literal> ou + <literal>N</literal>).</para> + + <para>Si vos pages de manuel vont dans des sous-répertoires + dépendant de la langue, définissez les noms de ces langues + dans <makevar>MANLANG</makevar>. La valeur par défaut de cette + variable est <literal>""</literal> (i.e., Anglais seulement).</para> + + <para>Voici un exemple qui rassemble tout cela :</para> + + <programlisting> +MAN1= foo.1 +MAN3= bar.3 +MAN4= baz.4 +MANLANG= "" ja +MAN3PREFIX= ${PREFIX}/share/foobar +MANCOMPRESSED= yes</programlisting> + + <para>Ce qui veut dire que six fichiers sont installés par ce + logiciel porté :</para> + + <programlisting> +${PREFIX}/man/man1/foo.1.gz +${PREFIX}/man/ja/man1/foo.1.gz +${PREFIX}/share/foobar/man/man3/bar.3.gz +${PREFIX}/share/foobar/man/ja/man3/bar.3.gz +${PREFIX}/man/man4/baz.4.gz +${PREFIX}/man/ja/man4/baz.4.gz</programlisting> + </sect2> + + <sect2> + <title>Les logiciels portés qui ont besoin de Motif</title> + + <para>Il y a de nombreux programmes qui ont besoin d'une bibliothèque + Motif pour compiler (disponible auprès de plusieurs distributeurs + commerciaux, et dont il existe un clone libre, qui est capable de faire + fonctionner pas mal d'applications, dans + <filename>x11-toolkits/lesstif</filename>). Comme c'est un boîte + à outils très utilisée et que ses licences + autorisent habituellement la redistribution de binaires si la + bibliothèque est liée statiquement, nous avons + prévu un mécanisme pour gérer les logiciels + portés qui ont besoin de Motif de façon à pouvoir + facilement compiler des binaires soit liés dynamiquement (pour + ceux qui utilisent le catalogue des logiciels portés) ou + statiquement (pour ceux qui distribuent des paquetages).</para> + + <sect3> + <title><makevar>REQUIRES_MOTIF</makevar></title> + + <para>Si votre logiciel à porter a besoin de Motif, + définissez cette variable dans le + <filename>Makefile</filename>. cela empéchera que ceux qui + ne disposent pas de Motif puissent ne serait-ce qu'essayer de + compiler votre logiciel.</para> + </sect3> + + <sect3> + <title><makevar>MOTIFLIB</makevar></title> + + <para>Cette variable sera définie par + <filename>bsd.port.mk</filename> pour référencer la + version appropriée de la bibliothèque Motif. Ajoutez + s'il vous plaît un + correctif - <foreignphrase>patch</foreignphrase> - au + source pour qu'il utilise cette variable chaque fois que la + bibliothèque Motif est référencé dans le + <filename>Makefile</filename> ou le + <filename>Imakefile</filename>.</para> + + <para>Il y a deux cas de figure courants :</para> + + <itemizedlist> + <listitem> + <para>Si le logiciel à porter désigne la + bibliothèque Motif avec <literal>-lXm</literal> dans son + <filename>Makefile</filename> ou <filename>Imakefile</filename>, + remplacez-le simplement par + <literal>${MOTIFLIB}</literal>,</para> + </listitem> + + <listitem> + <para>Si le logiciel à porter utilise + <literal>XmClientLibs</literal> dans son + <filename>Imakefile</filename>, remplacez-le par + <literal>${MOTIFLIB} ${XTOOLLIB} + ${XLIB}</literal>.</para> + </listitem> + </itemizedlist> + + <para>Remarquez que la variable <makevar>MOTIFLIB</makevar> est + (habituellement) remplacée par + <literal>-L/usr/X11R6/lib -lXm</literal> ou + <literal>/usr/X11R6/lib/libXm.a</literal>, il n'y a donc pas besoin + d'y inclure le <literal>-L</literal> ou <literal>-l</literal>.</para> + </sect3> + </sect2> + + <sect2> + <title>Polices X11</title> + + <para>Si votre logiciel à porter installe des polices de + caractères pour le Système X Window, mettez-les dans + <filename><makevar>X11BASE</makevar>/lib/X11/fonts/local</filename>. + Ce répertoire est une nouveauté de XFree86 version 3.3.3. + S'il n'existe pas, créez-le s'il vous plaît et + émettez un message pour suggérer à l'utilisateur de passer à la version 3.3.3, ou ultérieure, de XFree86, ou + ajoutez au moins ce répertoire aux chemins d'accès aux + polices de caractères dans + <filename>/etc/XF86Config</filename>.</para> + </sect2> + + <sect2> + <title>Fichiers “Info”</title> + + <para>La nouvelle version de <application>texinfo</application> (depuis + 2.2.2-RELEASE) comporte un utilitaire appelé + <command>install-info</command> pour ajouter ou supprimer des + entrées dans le fichier <filename>dir</filename>. Si votre + logiciel à porter installe des documents “info”, + suivez s'il vous plaît les instructions ci-dessous pour que votre + logiciel porté/précompilé mette correctement + à jour le fichier + <filename><makevar>PREFIX</makevar>/info/dir</filename> de + l'utilisateur. (Excusez-moi de la longueur de cette section, mais il + est impératif d'assembler correctement ensemble tous les fichiers + “info;”. Si c'est proprement fait, il en résultera + une <emphasis>belle</emphasis> édition, accordez-moi donc s'il + vous plaît votre attention.)</para> + + <para>Voici ce que vous devez en premier lieu savoir (pour porter un + logiciel) :<footnote><para>Traduction :</para> + <screen>&prompt.user; <userinput>install-info --help</userinput> +install-info [OPTION]... [INFO-FILE [DIR-FILE]] + Installe INFO-FILE dans le répertoire “Info” DIR-FILE. + +Options: +--delete supprime les entrées existantes dans INFO-FILE; + n'insère aucune nouvelle entrée. + : +--entry=TEXT Insère un entrée pour le répertoire “Info;”. + : +--section=SEC Ajoute les entrées de ce fichier à la section SEC de ce répertoire. :</screen></footnote></para> + + <screen>&prompt.user; <userinput>install-info --help</userinput> +install-info [OPTION]... [INFO-FILE [DIR-FILE]] + Install INFO-FILE in the Info directory file DIR-FILE. + +Options: +--delete Delete existing entries in INFO-FILE; + don't insert any new entries. + : +--entry=TEXT Insert TEXT as an Info directory entry. + : +--section=SEC Put this file's entries in section SEC of the directory. :</screen> + + <note> + <para>Ce programme n'installe en fait <emphasis>pas</emphasis> de + fichiers “info”; il ne fait qu'insérer ou supprimer + des entrées au fichier <filename>dir</filename>.</para> + </note> + + <para>Voici une procédure en sept étapes pour adapter les + logiciels à porter pour qu'ils utilisent + <command>install-info</command>. Je prendrais comme exemple + <filename>editors/emacs</filename> :</para> + + <procedure> + <step> + <para>Consultez les sources <application>texinfo</application> et + construisez un fichier de mise à jour qui insère + des instructions <literal>@dircategory</literal> et + <literal>@direntry</literal> aux fichiers où il n'y en a pas. + Voici un extrait de mon + “<foreignphrase>patch</foreignphrase>” :</para> + + <programlisting> +--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995 ++++ ./man/vip.texi Tue May 20 01:28:33 1997 +@@ -2,6 +2,10 @@ + + @setfilename ../info/vip + @settitle VIP ++@dircategory The Emacs editor and associated tools ++@direntry ++* VIP: (vip). A VI-emulation for Emacs. ++@end direntry + + @iftex + @finalout + : + </programlisting> + + <para>Cela doit pouvoir se passer d'explications. De nombreux auteurs + mettent dans leur arborescence des sources un fichier + <filename>dir</filename> qui contient toutes les entrées dont + vous avez besoin, regardez donc à droite et à gauche + avant de le créer vous-même. Veillez aussi à + consulter les entrées pour les logiciels en rapport avec le + voˆtre, pour que vos noms de sections et indentations soient en + cohérence (nous recommandons de mettre les libellés + après la quatrième position de tabulation).</para> + + <note> + <para>Remarquez que vous ne pouvez mettre qu'une entrée + “info” par fichier, à cause d'un bogue + dans <command>install-info --delete</command>, qui ne supprime + que la première entrée de la section + <literal>@direntry</literal> si vous en indiquez plusieurs.</para> + </note> + + <para>Vous pouvez donner les entrées <literal>dir</literal> + comme arguments à <command>install-info</command> + (<option>--section</option> et <option>--entry</option>) au lieu de + rectifier les sources de <application>texinfo</application>. Je ne + trouve pas que cela soit une bonne idée parce que vous devez + répéter la même information à trois + endroits différents (<filename>Makefile</filename> et + <literal>@exec</literal>/<literal>@unexec</literal> de + <filename>PLIST</filename>; voyez plus bas). Néanmoins, si + vous avez des fichiers “info” en Japonais (ou + codés sur plusieurs octets), vous devrez utiliser les + paramètres supplémentaires + d'<command>install-info</command> parce que + <command>makeinfo</command> ne sait pas gérer ces sources + <application>texinfo</application>. (Consultez le + <filename>Makefile</filename> et <filename>PLIST</filename> de + <filename>japanese/skk</filename> pour avoir un exemple de la + manière de procéder.)</para> + </step> + + <step> + <para>Retournez dans le répertoire de votre logiciel + porté, faites un <command>make clean; make</command> et + vérifiez que les fichiers “info” sont + régénérés à partir des sources + <application>texinfo</application>. Comme ces derniers sont plus + récents que les fichiers “info”, ils doivent + être reconstruits par le <command>make</command>; mais de + nombreux <filename>Makefile</filename>s ne comportent pas les + dépendances correctes pour les fichiers “info”. + Dans le cas d'<command>emacs</command>, j'ai dû rectifier le + <filename>Makefile.in</filename> principal pour qu'il aille dans le + sous-répertoire <filename>man</filename> pour reconstruire + les pages “info” :</para> + + <programlisting> +--- ./Makefile.in.org Mon Aug 19 21:12:19 1996 ++++ ./Makefile.in Tue Apr 15 00:15:28 1997 +@@ -184,7 +184,7 @@ + # Sous-répertoires à reconstruire récursivement. `lisp' n'est pas inclus + # parce que les fichiers lisp compilés font partie de la distribution + # et que vous ne pouvez pas les recompiler sans installer d'abord Emacs +-SUBDIR = lib-src src ++SUBDIR = lib-src src man + + # makefile des sous-répertoires listés dans $SUBDIR. + SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile +--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996 ++++ ./man/Makefile.in Tue Apr 15 00:29:52 1997 +@@ -66,6 +66,7 @@ + ${srcdir}/gnu1.texi \ + ${srcdir}/glossary.texi + ++all: info + info: $(INFO_TARGETS) + + dvi: $(DVI_TARGETS) + </programlisting> + + <para>La deuxième modification est nécessaire parce que + la cible par défaut dans le sous-répertoire + <filename>man</filename> s'appelle <maketarget>info</maketarget>, + alors que le <filename>Makefile</filename> veut exécuter la + cible <maketarget>all</maketarget>. J'ai aussi supprimé + l'installation du fichier “info” parce que nous en + avons déjà un de même nom dans + <filename>/usr/share/info</filename> (cette correction + n'apparaît pas dans l'exemple).</para> + </step> + + <step> + <para>Si le fichier <filename>dir</filename> est installé par + des instructions quelque part dans le <filename>Makefile</filename>, + supprimez-les. Votre logiciel à porter ne doit pas le faire. + Supprimez aussi toutes les autres commandes qui + “saliraient” le fichier <filename>dir</filename>.</para> + + <programlisting> +--- ./Makefile.in.org Mon Aug 19 21:12:19 1996 ++++ ./Makefile.in Mon Apr 14 23:38:07 1997 +@@ -368,14 +368,8 @@ + if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \ + then \ + (cd ${infodir}; \ +- if [ -f dir ]; then \ +- if [ ! -f dir.old ]; then mv -f dir dir.old; \ +- else mv -f dir dir.bak; fi; \ +- fi; \ + cd ${srcdir}/info ; \ +- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \ +- (cd $${thisdir}; chmod a+r ${infodir}/dir); \ + for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \ + (cd $${thisdir}; \ + ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \ + chmod a+r ${infodir}/$$f); \ + </programlisting> + </step> + + <step> + <para>(Cette étape n'est nécessaire que si vous modifiez + un logiciel porté déjà existant.) Consultez + <filename>pkg/PLIST</filename> et supprimez tout ce qui essaye + d'appliquer des rectificatifs à + <filename>info/dir</filename>. Cela peut se produire dans + <filename>pkg/INSTALL</filename> ou un autre fichier, faites donc + une recherche détaillée :</para> + + <programlisting> +Index: pkg/PLIST +=================================================================== +RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v +retrieving revision 1.15 +diff -u -r1.15 PLIST +--- PLIST 1997/03/04 08:04:00 1.15 ++++ PLIST 1997/04/15 06:32:12 +@@ -15,9 +15,6 @@ + man/man1/emacs.1.gz + man/man1/etags.1.gz + man/man1/ctags.1.gz +-@unexec cp %D/info/dir %D/info/dir.bak +-info/dir +-@unexec cp %D/info/dir.bak %D/info/dir + info/cl + info/cl-1 + info/cl-2 + </programlisting> + </step> + + <step> + <para>Ajoutez une cible <maketarget>post-install</maketarget> au + <filename>Makefile</filename> pour créer un fichier + <filename>dir</filename> s'il n'y en a pas. Appelez aussi + <maketarget>install-info</maketarget> pour les fichiers + “info” installés :</para> + + <programlisting> +Index: Makefile +=================================================================== +RCS file: /usr/cvs/ports/editors/emacs/Makefile,v +retrieving revision 1.26 +diff -u -r1.26 Makefile +--- Makefile 1996/11/19 13:14:40 1.26 ++++ Makefile 1997/05/20 10:25:09 1.28 +@@ -20,5 +20,11 @@ + post-install: + .for file in emacs-19.34 emacsclient etags ctags b2m + strip ${PREFIX}/bin/${file} + .endfor ++ if [ ! -f ${PREFIX}/info/dir ]; then \ ++ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \ ++ fi ++.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode ++ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir ++.endfor + + .include <bsd.port.mk> + </programlisting> + + <para>N'utilisez rien d'autre que + <filename>/usr/share/info/dir</filename> et la commande ci-dessus + pour créer un nouveau fichier “info”. J'ai en + fait ajouté les trois premières lignes du rectificatif + ci-dessus à <filename>bsd.port.mk</filename> pour le cas + o` vous ne l'auriez pas fait par vous-même dans + <filename>PLIST</filename>.</para> + </step> + + <step> + <para>Editez <filename>PLIST</filename> et ajoutez les instructions + <literal>@exec</literal> ainsi que <literal>@unexec</literal> + équivalentes pour <command>pkg_delete</command>. Vous n'avez + pas besoin de supprimer <filename>info/dir</filename> avec + <literal>@unexec</literal> :</para> + + <programlisting> +Index: pkg/PLIST +=================================================================== +RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v +retrieving revision 1.15 +diff -u -r1.15 PLIST +--- PLIST 1997/03/04 08:04:00 1.15 ++++ PLIST 1997/05/20 10:25:12 1.17 +@@ -16,7 +14,15 @@ + man/man1/etags.1.gz + man/man1/ctags.1.gz ++@unexec install-info --delete %D/info/emacs %D/info/dir + : ++@unexec install-info --delete %D/info/ccmode %D/info/dir + info/cl + info/cl-1 +@@ -87,6 +94,18 @@ + info/viper-3 + info/viper-4 ++@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir ++@exec install-info %D/info/emacs %D/info/dir + : ++@exec install-info %D/info/ccmode %D/info/dir + libexec/emacs/19.34/i386--freebsd/cvtmail + libexec/emacs/19.34/i386--freebsd/digest-doc + </programlisting> + + <note> + <para>Les commandes <literal>@unexec install-info --delete</literal> + doivent être placées avant les fichiers + “info” eux-mêmes pour qu'elles puissent lire + les fichiers. Il faut aussi placer les commandes + <literal>@exec install-info</literal> après les fichiers + “info” et la commande <literal>@exec</literal> qui + crée le fichier <filename>dir</filename> file.</para> + </note> + </step> + + <step> + <para><link linkend="porting-testing">Testez</link> et admirez votre + oeuvre. <!-- smiley --><emphasis>:)</emphasis>. Vérifiez le + fichier <filename>dir</filename> avant et après chaque + étape.</para> + </step> + </procedure> + </sect2> + + <sect2> + <title>Le sous répertoire <filename>pkg/</filename></title> + + <para>Il y a quelques astuces dont je n'ai pas encore parlé + à propos du sous-répertoire <filename>pkg/</filename> qui + sont parfois utiles.</para> + + <sect3 id="porting-message"> + <title><filename>MESSAGE</filename></title> + + <para>Si vous avez besoin d'afficher un message lors de l'installation, + vous pouvez le mettre dans <filename>pkg/MESSAGE</filename>. Cette + fonctionnalité sert souvent à informer des étapes + d'installation qui doivent être effectuées après + <command>pkg_add</command> ou pour afficher des informations à + propos de la licence.</para> + + <note> + <para>Il n'y a pas besoin d'ajouter le fichier + <filename>pkg/MESSAGE</filename> à + <filename>pkg/PLIST</filename>. D'autre part, il ne sera pas + affiché automatiquement si l'utilisateur installe le logiciel + porté au lieu du logiciel précompilé, vous + devriez donc probablement l'afficher vous-même depuis la cible + <maketarget>post-install</maketarget>.</para> + </note> + </sect3> + + <sect3> + <title><filename>INSTALL</filename></title> + + <para>S'il faut exécuter des commandes lors de l'installation du + logiciel précompilé avec <command>pkg_add</command>, + vous pouvez le faire avec la procédure + <filename>pkg/INSTALL</filename>. Cette procédure sera + automatiquement ajoutée au paquetage et exécutée + deux fois par <command>pkg_add</command>. La première fois sous + la forme <literal>INSTALL ${PKGNAME} PRE-INSTALL</literal> et + la seconde fois sous la forme + <literal>INSTALL ${PKGNAME} POST-INSTALL</literal>. Vous pouvez + tester <literal>$2</literal> pour savoir comment la + procédure a été appelée. La variable + d'environnement <envar>PKG_PREFIX</envar> contient le chemin + d'accès au répertoire d'installation du logiciel. + Reportez-vous aux pages de manuel de &man.pkg.add.1; pour plus + d'informations.</para> + + <note> + <para>Cette procédure n'est pas exécutée + automatiquement si le logiciel porté est installé avec + <command>make install</command>. Si vous avez besoin qu'elle le + soit, vous devrez l'appeler explicitement depuis le + <filename>Makefile</filename> du logiciel porté.</para> + </note> + </sect3> + + <sect3> + <title><filename>REQ</filename></title> + + <para>Si votre logiciel à porter doit déterminer s'il doit + être installé ou non, vous pouvez créer une + procédure + <filename>pkg/REQ</filename> - “requis”. Elle + sera appelée automatiquement lors de l'installation et de la + désinstallation pour décider s'il faut ou non effectuer + l'opération.</para> + </sect3> + + <sect3 id="porting-plist"> + <title>Modifier <filename>PLIST</filename> sur la base de variables + du <command>make</command></title> + + <para>Certains logiciels portés, en particulier les logiciels + <literal>p5-...</literal>, doivent modifier leur + <filename>PLIST</filename> selon les options avec lesquelles ils sont + configurés (ou la version de perl, dans le cas des logiciels + <literal>p5-...</literal>). Pour rendre les choses plus faciles, + toutes les occurrences de <literal>%%OSREL%%</literal>, + <literal>%%PERL_VER%%</literal> et <literal>%%PERL_VERSION%%</literal> + dans la <filename>PLIST</filename> seront remplacées par les + valeurs appropriées. La valeur de <literal>%%OSREL%%</literal> + est le numéro de version du système d'exploitation + (e.g., <literal>2.2.7</literal>). <literal>%%PERL_VERSION%%</literal> + est le numéro de version complet de perl (e.g., + <literal>5.00502</literal>) et <literal>%%PERL_VER%%</literal> est le + numéro de version de perl, sans le niveau de + “<foreignphrase>patch</foreignphrase>” (e.g., + <literal>5.005</literal>).</para> + + <para>Si vous avez besoin d'autres substitutions, vous pouvez renseigner + la variable <makevar>PLIST_SUB</makevar> avec une liste de doublets + <literal><replaceable>VAR</replaceable>=<replaceable>VALUE</replaceable></literal> + et toutes les occurrences de + <literal>%%<replaceable>VAR</replaceable>%%</literal> seront + remplacées par <replaceable>VALUE</replaceable> dans la + <filename>PLIST</filename>.</para> + + <para>Par exemple, si votre logiciel à porter installe de + nombreux fichiers dans un sous-répertoire différent + selon la version, vous pouvez mettre quelque chose comme :</para> + + <programlisting> +OCTAVE_VERSION= 2.0.13 +PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} + </programlisting> + + <para>dans le <filename>Makefile</filename> et utiliser + <literal>%%OCTAVE_VERSION%%</literal> chaque fois que la version + apparaît dans la <filename>PLIST</filename>. De cette + façon, lorsque vous mettez à jour le logiciel, vous + n'aurez pas à modifier des douzaines (dans certains cas, des + centaines) de lignes dans la <filename>PLIST</filename>.</para> + + <para>Cette substitution (de même que l'ajout des + <link linkend="porting-manpages">pages de manuel</link>) est faite + entre les cibles <maketarget>do-install</maketarget> et + <maketarget>post-install</maketarget>, en lisant + <makevar>PLIST</makevar> et en écrivant dans + <makevar>TMPPLIST</makevar> (par défaut : + <filename><makevar>WRKDIR</makevar>/.PLIST.mktmp</filename>). Si votre + logiciel à porter construit <makevar>PLIST</makevar> à + la volée, faites-le alors dans ou avant + <maketarget>do-install</maketarget>. De plus, si votre logiciel a + besoin de modifier le fichier obtenu, faites-le dans + <maketarget>post-install</maketarget> et dans un fichier appelé + <makevar>TMPPLIST</makevar>.</para> + </sect3> + + <sect3> + <title id="porting-pkgsubdir">Changer les noms des fichiers du + sous-répertoire <filename>pkg</filename></title> + + <para>Tous les noms de fichier du sous-répertoire + <filename>pkg</filename> sont définis par des variables, vous + pouvez donc les changer dans votre <filename>Makefile</filename> si + besoin est. C'est particulièrement utile si vous partager le + même sous-répertoire <filename>pkg</filename> entre + plusieurs logiciels portés ou devez écrire dans l'un + de ces fichiers (voyez la section + <link linkend="porting-wrkdir">Ecrire ailleurs que dans + <makevar>WRKDIR</makevar></link> pour savoir pourquoi c'est une + mauvaise idée d'écrire directement dans le + sous-répertoire <filename>pkg</filename>.</para> + + <para>Voici la liste de ces variables et leurs valeurs par + défaut :</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Variable</entry> + <entry>Valeur par défaut</entry> + </row> + </thead> + + <tbody> + <row> + <entry><makevar>COMMENT</makevar></entry> + <entry><literal>${PKGDIR}/DESCR</literal></entry> + </row> + + <row> + <entry><makevar>DESCR</makevar></entry> + <entry><literal>${PKGDIR}/DESCR</literal></entry> + </row> + + <row> + <entry><makevar>PLIST</makevar></entry> + <entry><literal>${PKGDIR}/PLIST</literal></entry> + </row> + + <row> + <entry><makevar>PKGINSTALL</makevar></entry> + <entry><literal>${PKGDIR}/PKGINSTALL</literal></entry> + </row> + + <row> + <entry><makevar>PKGDEINSTALL</makevar></entry> + <entry><literal>${PKGDIR}/PKGDEINSTALL</literal></entry> + </row> + + <row> + <entry><makevar>PKGREQ</makevar></entry> + <entry><literal>${PKGDIR}/REQ</literal></entry> + </row> + + <row> + <entry><makevar>PKGMESSAGE</makevar></entry> + <entry><literal>${PKGDIR}/MESSAGE</literal></entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Modifiez s'il vous plaît ces variables plutôt que de + surcharger <makevar>PKG_ARGS</makevar>. Si vous modifiez + <makevar>PKG_ARGS</makevar>, ces fichiers ne seront pas correctement + installés dans <filename>/var/db/pkg</filename> lors de + l'installation sous forme de logiciel porté.</para> + </sect3> + </sect2> + + <sect2> + <title>Problèmes de licence</title> + + <para>Certains logiciels ont des licences qui imposent des restrictions ou + peuvent violer la loi. (Le brevet de PKP sur la cryptographie ` + clé publique et ITAR - exportation de logiciel de + cryptographie - pour ne citer que deux exemples). Ce que nous + pouvons en faire varie beaucoup, selon les termes exacts de leurs + licences respectives.</para> + + <note> + <para>Il est de votre responsabilité, pour le logiciel que vous + porter, de lire les termes de la licence et de vous assurer que le + projet FreeBSD ne pourra pas être accusé de les violer en + redistribuant le source ou les binaires compilés que ce soit + par ftp ou sur CD-ROM. En cas de doute, contactez-la &a.ports;.</para> + </note> + + <para>Il y a deux variables que vous pouvez définir dans le + <filename>Makefile</filename> pour gérer les situations qui se + produisent souvent :</para> + + <orderedlist> + <listitem> + <para>Si le logiciel à porter a une licence de type “non + commercialisable” affectez à la variable + <makevar>NO_CDROM</makevar> une chaîne de caractères + expliquant pourquoi. Nous vérifierons que ces logiciels + ne soient pas sur le CD-ROM au moment de la parution. Les archives + du source et le paquetage seront cependant disponibles par + ftp.</para> + </listitem> + + <listitem> + <para>S'il faut recompiler le logiciel porté sur chaque site, + ou si le logiciel précompilé ne peut pas être + redistribué du fait de sa licence, affectez à la + variable <makevar>NO_PACKAGE</makevar> une chaîne de + caractères expliquant pourquoi. Nous vérifierons que + ces logiciels précompilés ne soient pas sur le site + ftp ni sur le CD-ROM au moment de la parution. Les archives du + source seront cependant disponibles sur les deux.</para> + </listitem> + + <listitem> + <para>S'il y a des restrictions légales à l'utilisation + du logiciel (e.g., cryptographie) ou que la licence est du type + “pas d'usage commercial”, affectez à la variable + <makevar>RESTRICTED</makevar> une chaîne de caractères + expliquant pourquoi. Pour ces logiciels, ni les archives du source + ni le logiciel précompilé ne seront même + disponibles sur nos sites ftp.</para> + </listitem> + </orderedlist> + + <note> + <para>La Licence Publique Générale + GNU - <foreignphrase>GNU General Public License + (GPL)</foreignphrase>, version 1 et 2, ne pose normalement pas de + problème pour les logiciels portés.</para> + </note> + + <note> + <para>Si vous êtes + “<foreignphrase>committer</foreignphrase>”, veillez + à mettre aussi à jour le fichier + <filename>ports/LEGAL</filename>.</para> + </note> + </sect2> + + <sect2> + <title>Mises à jour</title> + + <para>Si vous constatez qu'un logiciel porté n'est pas + synchronisé avec la plus récente version des auteurs + originaux, vérifiez d'abord que vous avez la dernière + version du logiciel porté. Vous la trouverez dans le + répertoire <filename>ports/ports-current</filename> des sites + miroir ftp.</para> + + <para>Envoyez ensuite un courrier électronique au responsable de + la maintenance, s'il est mentionné dans le + <filename>Makefile</filename> du logiciel. Il est peut-être + déjà en train de travailler sur la mise à jour, ou + a une bonne raison de ne pas la faire (par exemple à cause de + problèmes de stabilité de la nouvelle version).</para> + + <para>Si le responsable de la maintenance vous demande de mettre le + logiciel à jour ou s'il n'y a tout simplement pas de responsable, + faites cette mise à jour et envoyez un delta récursif + (soit contextuel soit unifié, mais les responsables de + l'arborescence des logiciels portés préfèrent le + format unifié) entre les anciens et les nouveaux + répertoires du logiciel (e.g., si votre répertoire + modifié s'appelle <filename>superedit</filename> et l'original + tel que dans notre arborescence <filename>superedit.bak</filename>, + envoyez nous alors le résultat de + <command>diff -ruN superedit.bak superedit</command>). + Contrôlez-le s'il vous plaît pour vérifier que toutes + les modifications sont cohérentes. La meilleure façon de + nous l'envoyer est de l'inclure dans un &man.send-pr.1; + (catégorie <literal>ports</literal>). Précisez s'il vous + plaît quels sont les fichiers ajoutés et supprimés, + parce qu'il faut explicitement les indiquez à CVS au moment de le + mise à jour. Si le delta fait plus de 20Ko, compressez-le et + codez-le avec <application>uuencode</application>; sinon, incluez-le + seulement tel quel dans le PR.</para> + + <para>Une fois encore, utilisez s'il vous plaît &man.diff.1; et non + &man.shar.1; pour nous envoyer les mises à jour des logiciels + portés.</para> + </sect2> + + <sect2> + <title><anchor id="porting-dads">A faire à ne pas faire</title> + + <para>Voici une liste de ce qu'il faut habituellement faire ou + éviter lors d'un portage. Vous devriez utiliser cette liste + pour valider votre propre portage et vous pouvez aussi contrôler + les logiciels que d'autres ont soumis dans la base des données + des rapports d'incidents. Transmettez tous vos commentaires au sujet des + logiciels portés dans la rubrique + <link linkend="contrib-general">Rapports d'incidents et commentaires + généraux - <foreignphrase>Bug Reports and + General Commentary</foreignphrase></link>. Validez les logiciels + portés mentionnés dans la base nous permettra de les + intégrer plus rapidement et prouvera en même temps que vous + savez ce que vous faites.</para> + + <sect3> + <title>Nettoyez les binaires</title> + + <para>Supprimez les informations + inutiles - <foreignphrase>strip</foreignphrase> - des + binaires. Si c'est déjà fait par le source d'origine, + tant mieux; sinon ajoutez une règle à la cible + <maketarget>post-install</maketarget> pour le faire vous-même. + Voici un example :</para> + + <programlisting> +post-install: + strip ${PREFIX}/bin/xdl + </programlisting> + + <para>Utilisez la commande &man.file.1; sur l'exécutable + installé pour voir s'il est déjà nettoyé. + Si elle ne vous répond pas <literal>not stripped</literal>, + c'est déjà fait.</para> + </sect3> + + <sect3> + <title>macros-instruction INSTALL_*</title> + + <para>Utilisez les macros-instructions fournies par + <filename>bsd.port.mk</filename> pour être sûr que les + droits sur les fichiers sont correctement gérés par vos + cibles <maketarget>*-install</maketarget>. Ce sont :</para> + + <itemizedlist> + <listitem> + <para><makevar>INSTALL_PROGRAM</makevar> pour installer les binaires + exécutables,</para> + </listitem> + + <listitem> + <para><makevar>INSTALL_SCRIPT</makevar> pour installer les + procédures exécutables,</para> + </listitem> + + <listitem> + <para><makevar>INSTALL_DATA</makevar> pour installer les + données partageables,</para> + </listitem> + + <listitem> + <para><makevar>INSTALL_MAN</makevar> pour installer les pages de + manuel et autres documentations (cela ne compresse rien).</para> + </listitem> + </itemizedlist> + + <para>Ces macros-instructions sont essentiellement composées + d'une commande <command>install</command> avec les options + appropriées. Vous trouverez plus bas un exemple de leur + utilisation.</para> + </sect3> + + <sect3 id="porting-wrkdir"> + <title><makevar>WRKDIR</makevar></title> + + <para>N'écrivez rien en dehors de <makevar>WRKDIR</makevar>. + <makevar>WRKDIR</makevar> est le seul endroit où vous + êtes sûr de pouvoir écrire pendant la + compilation d'un logiciel porté (reportez-vous à la + section <link linkend="ports-cd">compiler les logiciels portés + depuis un CD-ROM</link> pour avoir un example de compilation de + logiciels portés dans une arborescence en lecture seule). + example of building ports from a read-only tree). S'il vous faut + modifier un fichier dans <makevar>PKGDIR</makevar>, faites-le en + <link linkend="porting-pkgsubdir">redéfinissant une + variable</link>, non en l'écrasant.</para> + </sect3> + + <sect3> + <title><makevar>WRKDIRPREFIX</makevar></title> + + <para>Veillez à utiliser <makevar>WRKDIRPREFIX</makevar>. + Cela ne concerne pas la plupart des logiciels portés. Mais, + en particulier si vous faites référence au + <makevar>WRKDIR</makevar> d'un autre logiciel, notez que la + référence correcte est + <filename><makevar>WRKDIRPREFIX</makevar><makevar>PORTSDIR</makevar>/<replaceable>sous-répertoire</replaceable>/<replaceable>nom</replaceable>/work</filename> + et non <filename><makevar>PORTSDIR</makevar>/<replaceable>sous-répertoire</replaceable>/<replaceable>nom</replaceable>/work</filename> + ou <filename><makevar>.CURDIR</makevar>/../../<replaceable>sous-répertoire</replaceable>/<replaceable>nom</replaceable>/work</filename> + ou autre chose encore.</para> + + <para>Par ailleurs, si vous définissez vous-même + <makevar>WRKDIR</makevar>, veillez à bien le faire commencer + par <literal>${WKRDIRPREFIX}${.CURDIR}</literal>.</para> + </sect3> + + <sect3 id="porting-versions"> + <title>Distinguer les systèmes d'exploitation et leurs + versions</title> + + <para>Vous pouvez tomber sur du code qui doit être modifié + ou compilé conditionnellement selon la version d'Unix sur + laquelle il s'exécutera. Si vous avez besoin de faire ce type + de modifications du code ou de mettre en place une compilation + conditionelle, veillez à ce que vos modifications soient aussi + générales que possible, de sorte que nous puissions + rétroporter le code sur les systèmes FreeBSD 1.x et le + porter sur les autres systèmes BSD tels que 4.4BSD du CSRG, + BSD/386, 386BSD, NetBSD et OpenBSD.</para> + + <para>La solution appropriée pour distinguer 4.3BSD/Reno(1990) et + les versions ultérieures de BSD est d'utiliser la + macro-instruction <literal>BSD</literal> définie dans + <filename><sys/param.h></filename>. Avec de la chance, ce + fichier est déjà inclus; si ce n'est pas le cas, + ajoutez :</para> + + <programlisting> +#if (defined(__unix__) || defined(unix)) && !defined(USG) +#include <sys/param.h> +#endif + </programlisting> + + <para>à l'endroit voulu dans le fichier <filename>.c</filename>. + Nous estimons que tous les systèmes qui définissent ces + deux symboles disposent d'un <filename>sys/param.h</filename>. Si vous + tombez sur un système pour lequel ce n'est pas le cas, nous + aimerions le savoir. Envoyez un courrier électronique à + la &a.ports;.</para> + + <para>L'autre moyen est d'utiliser le style GNU + <application>autoconf</application> de faire ce genre de + choses :</para> + + <programlisting> +#ifdef HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif + </programlisting> + + <para>N'oubliez pas d'ajouter <literal>-DHAVE_SYS_PARAM_H</literal> + à <makevar>CFLAGS</makevar> dans le + <filename>Makefile</filename> dans ce cas.</para> + + <para>Une fois que vous avez inclus + <filename>sys/param.h</filename> vous pouvez utiliser :</para> + + <programlisting> +#if (defined(BSD) && (BSD >= 199103)) + </programlisting> + + <para>pour savoir si le code est compilé sur un système + basé sur 4.3 Net2 ou sur une version ultérieure (e.g., + FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 et + antérieurs).</para> + + <para>Utilisez :</para> + + <programlisting> +#if (defined(BSD) && (BSD >= 199306)) + </programlisting> + + <para>pour savoir si le code est compilé sur un système + basé sur 4.4 ou sur une version ultérieure (e.g., + FreeBSD 2.x, 4.4, NetBSD 1.0, 386BSD, BSD/386 2.0 et + ultérieurs).</para> + + <para>La macro-instruction <literal>BSD</literal> prend la valeur + <literal>199506</literal> lorsque le code est basé sur + 4.4BSD-Lite2. Ceci n'est donné qu'à titre d'information + et ne doit pas être utilisé pour distinguer les versions + de FreeBSD basées sur 4.4-Lite de celles qui ont + intégré les modifications introduites avec + 4.4-Lite2. Il faut utiliser pour cela la macro-instruction + <literal>__FreeBSD__</literal>.</para> + + <para>Utilisez avec modération :</para> + + <itemizedlist> + <listitem> + <para><literal>__FreeBSD__</literal> est définie dans toutes + les versions de FreeBSD. Utilisez-la si vos modifications + ne concernent <emphasis>que</emphasis> FreeBSD. Des trucs de + portage tel que remplacer <function>strerror()</function> + par <literal>sys_errlist[]</literal> sont propres aux + systèmes Berkeley, et non à FreeBSD.</para> + </listitem> + + <listitem> + <para>Sous FreeBSD 2.x, <literal>__FreeBSD__</literal> prend la + valeur <literal>2</literal>. Dans les versions antérieures, + elle vaut <literal>1</literal>. Les versions suivantes + l'augmenteront pour qu'elle soit égale à leur + numéro de version majeure.</para> + </listitem> + + <listitem> + <para>Si vous avez besoin de faire la différence entre un + système FreeBSD 2.x et un système 3.x, la bonne + manière de faire est normalement d'utiliser les + macros-instructions <literal>BSD</literal> décrites plus + haut. S'il y a effectivement des modifications spécifiques + à FreeBSD (une option particulière pour une + bibliothèque partiagée avec <command>ld</command>), + vous pouvez alors à juste titre utiliser + <literal>__FreeBSD__</literal> et + <literal>#if __FreeBSD__ > 1</literal> pour tester s'il s'agit + d'un système FreeBSD 2.x ou ultérieur. Si vous + avez besoin d'une particularisation plus fine des systèmes + FreeBSD à partir de 2.0-release, vous pouvez vous servir + de :</para> + + <programlisting> +#if __FreeBSD__ >= 2 +#include <osreldate.h> +# if __FreeBSD_version >= 199504 + /* code propre à la version 2.0.5 et ultérieures */ +# endif +#endifi + </programlisting> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Version de FreeBSD</entry> + <entry><literal>__FreeBSD_version</literal></entry> + </row> + </thead> + + <tbody> + <row> + <entry>2.0-RELEASE</entry> + <entry>119411</entry> + </row> + + <row> + <entry>2.1-CURRENTs</entry> + <entry>199501, 199503</entry> + </row> + + <row> + <entry>2.0.5-RELEASE</entry> + <entry>199504</entry> + </row> + + <row> + <entry>2.2-CURRENT avant 2.1</entry> + <entry>199508</entry> + </row> + + <row> + <entry>2.1.0-RELEASE</entry> + <entry>199511</entry> + </row> + + <row> + <entry>2.2-CURRENT aprè 2.1.5</entry> + <entry>199512</entry> + </row> + + <row> + <entry>2.1.5-RELEASE</entry> + <entry>199607</entry> + </row> + + <row> + <entry>2.2-CURRENT aprés 2.1.6</entry> + <entry>199608</entry> + </row> + + <row> + <entry>2.1.6-RELEASE</entry> + <entry>199612</entry> + </row> + + <row> + <entry>2.1.7-RELEASE</entry> + <entry>199612</entry> + </row> + + <row> + <entry>2.2-RELEASE</entry> + <entry>220000</entry> + </row> + + <row> + <entry>2.2.1-RELEASE</entry> + <entry>220000 (pas de changement)</entry> + </row> + + <row> + <entry>2.2-STABLE after 2.2.1-RELEASE</entry> + <entry>220000 (pas de changement)</entry> + </row> + + <row> + <entry>2.2-STABLE après introduction de + texinfo-3.9</entry> + <entry>221001</entry> + </row> + + <row> + <entry>2.2-STABLE après introduction de top</entry> + <entry>221002</entry> + </row> + + <row> + <entry>2.2.2-RELEASE</entry> + <entry>222000</entry> + </row> + + <row> + <entry>2.2-STABLE après 2.2.2-RELEASE</entry> + <entry>222001</entry> + </row> + + <row> + <entry>2.2.5-RELEASE</entry> + <entry>225000</entry> + </row> + + <row> + <entry>2.2-STABLE après 2.2.5-RELEASE</entry> + <entry>225001</entry> + </row> + + <row> + <entry>2.2-STABLE après fusion avec + ldconfig -R</entry> + <entry>225002</entry> + </row> + + <row> + <entry>2.2.6-RELEASE</entry> + <entry>226000</entry> + </row> + + <row> + <entry>2.2.7-RELEASE</entry> + <entry>227000</entry> + </row> + + <row> + <entry>2.2-STABLE après 2.2.7-RELEASE</entry> + <entry>227001</entry> + </row> + + <row> + <entry>2.2-STABLE après modification de + <citerefentry><refentrytitle>semctl</refentrytitle> + <manvolnum>2</manvolnum></citerefentry></entry> + <entry>227002</entry> + </row> + + <row> + <entry>2.2.8-RELEASE</entry> + <entry>228000</entry> + </row> + + <row> + <entry>2.2-STABLE après 2.2.8-RELEASE</entry> + <entry>228001</entry> + </row> + + <row> + <entry>3.0-CURRENT avant modification de + <citerefentry><refentrytitle>mount</refentrytitle> + <manvolnum>2</manvolnum></citerefentry></entry> + <entry>300000</entry> + </row> + + <row> + <entry>3.0-CURRENT après modification de + <citerefentry><refentrytitle>mount</refentrytitle> + <manvolnum>2</manvolnum></citerefentry> change</entry> + <entry>300002</entry> + </row> + + <row> + <entry>3.0-CURRENT après modification des + arguments de ioctl</entry> + <entry>300003</entry> + </row> + + <row> + <entry>3.0-CURRENT après conversions au format + ELF</entry> + <entry>300004</entry> + </row> + + <row> + <entry>3.0-RELEASE</entry> + <entry>300005</entry> + </row> + + <row> + <entry>3.0-CURRENT après 3.0-RELEASE</entry> + <entry>300006</entry> + </row> + + <row> + <entry>3.0-STABLE après introduction de la + branche 4.x</entry> + <entry>300007</entry> + </row> + + <row> + <entry>3.1-RELEASE</entry> + <entry>310000</entry> + </row> + + <row> + <entry>3.1-STABLE après 3.1-RELEASE</entry> + <entry>310001</entry> + </row> + + <row> + <entry>4.0-CURRENT après introduction de la + branche 4.x</entry> + <entry>400000</entry> + </row> + + </tbody> + </tgroup> + </informaltable> + </listitem> + </itemizedlist> + + <note> + <para>Remarquz que 2.2-stable s'identifie parfois elle-même + comme “2.2.5-stable” après la 2.2.5-release. La + clé était autrefois l'année suivie du mois, + mais nous avons décidé d'en changer pour un + système plus explicite constitué des numéros de + versions majeure et mineure à partir de la 2.2. Cela parce + que le développement parallèle sur plusieurs + branches rendait impossible le classement des versions simplement + par leur date effective de livraison. Si vous portez aujourd'hui + un logiciel, vous n'avez pas à vous soucier des anciennes + versions <literal>-current</literal>s; elles ne sont + mentionnées ici qu'à titre de + référence.</para> + </note> + + <para>Dans les centaines de logiciels qui ont été + portés, il n'y a qu'un ou deux cas où il fallait + effectivement utiliser <literal>__FreeBSD__</literal>. Ce n'est pas + parce qu'un portage antérieur n'a pas été bien + fait et s'en est servi à tort qu'il faut + perséverer.</para> + </sect3> + + <sect3> + <title>Mettre quelque chose après + <filename>bsd.port.mk</filename></title> + + <para>Ne mettez rien après la ligne <literal>.include + <bsd.port.mk></literal>. Cela peut être le plus souvent + évité en incluant + <filename>bsd.port.pre.mk</filename> quelque part au milieu de votre + <filename>Makefile</filename> et + <filename>bsd.port.post.mk</filename> à la fin.</para> + + <note> + <para>Vous devez inclure soit le couple + <filename>pre.mk</filename>/<filename>post.mk</filename> soit + <filename>bsd.port.mk</filename> uniquement; ne mélangez + pas les deux.</para> + </note> + + <para><filename>bsd.port.pre.mk</filename> ne définit que + quelques variables, qui peuvent être testées dans le + <filename>Makefile</filename>, <filename>bsd.port.post.mk</filename> + prend en charge tout le reste.</para> + + <para>Voici quelques unes des variables importantes qui sont + définies dans <filename>bsd.port.pre.mk</filename> (ce n'est + pas une liste exhaustive, reportez-vous s'il vous plaît à + <filename>bsd.port.mk</filename> pour avoir une liste + complète).</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Variable</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <entry><makevar>ARCH</makevar></entry> + <entry>L'architecture sous le même forme que le + résultat de <command>uname -m</command> (e.g., + <literal>i386</literal>)</entry> + </row> + + <row> + <entry><makevar>OPSYS</makevar></entry> + <entry>Le système d'exploitation, sous le même + forme que le résultat de la commande + <command>uname -s</command> (e.g., + <literal>FreeBSD</literal>)</entry> + </row> + + <row> + <entry><makevar>OSREL</makevar></entry> + <entry>La version du système d'exploitation (e.g., + <literal>2.1.5</literal> ou + <literal>2.2.7</literal>)</entry> + </row> + + <row> + <entry><makevar>OSVERSION</makevar></entry> + <entry>La version sous forme numérique du système + d'exploitation, identique à + <link linkend="porting-versions"><literal>__FreeBSD_version</literal></link>.</entry> + </row> + + <row> + <entry><makevar>PORTOBJFORMAT</makevar></entry> + <entry>Le format “objet” du système + (<literal>aout</literal> or <literal>elf</literal>)</entry> + </row> + + <row> + <entry><makevar>LOCALBASE</makevar></entry> + <entry>La racine de l'arborescence “locale” (e.g., + <literal>/usr/local/</literal>)</entry> + </row> + + <row> + <entry><makevar>X11BASE</makevar></entry> + <entry>La racine de l'arborescence “X11” (e.g., + <literal>/usr/X11R6</literal>)</entry> + </row> + + <row> + <entry><makevar>PREFIX</makevar></entry> + <entry>Où le logiciel s'installe lui-même + (Reportez-vous à la section + <link linkend="porting-prefix"><makevar>PREFIX</makevar></link> + pour plus d'informations).</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <note> + <para>Si vous avez besoin de définir les variables + <makevar>USE_IMAKE</makevar>, <makevar>USE_X_PREFIX</makevar> ou + <makevar>MASTERDIR</makevar>, faites-le avant d'inclure + <filename>bsd.port.pre.mk</filename>.</para> + </note> + + <para>Voici quelques exemples de ce que vous pouvez mettre après + <filename>bsd.port.pre.mk</filename> :</para> + + <programlisting> +# il est inutile de compiler lang/perl5 si perl5 fait déjà partie du système +.if ${OSVERSION} > 300003 +BROKEN= perl fait partie du système +.endif + +# un seule numéro de version de bibliothèque partagée en ELF +.if ${PORTOBJFORMAT} == "elf" +TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} +.else +TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} +.endif + +# le logiciel fait déjà les liens pour ELF, mais pas pour a.out +post-install: +.if ${PORTOBJFORMAT} == "aout" + ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so +.endif + </programlisting> + </sect3> + + <sect3> + <title>Installer des documentations supplémentaires</title> + + <para>Si votre logiciel à porter est accompagné d'autres + documentations que les habituelles pages de manuel ou + “info”, que vous trouvez utiles, installez-les dans + <filename><makevar>PREFIX</makevar>/share/doc</filename>. + Vous pouvez le faire de même, comme expliqué plus haut + avec la cible <maketarget>post-install</maketarget>.</para> + + <para>Créez un nouveau sous-répertoire pour votre logiciel + à porter. Le nom de ce sous-répertoire devrait faire + référence à son contenu. Cela signifie la plupart + du temps que ce sera le <makevar>PKGNAME</makevar> sans le + numéro de version. Si vous pensez toutefois que l'utilisateur + voudra peut-être installer différentes versions du + logiciel, utilisez alors le <makevar>PKGNAME</makevar> complet.</para> + + <para>Paramétrez l'installation en utilisant la variable + <makevar>NOPORTDOCS</makevar> pour que les utilisateurs puissent ne + pas installer ces documentations, en se servant de + <filename>/etc/make.conf</filename>, s'ils le souhaitent, comme + suit :</para> + + <programlisting> +post-install: +.if !defined(NOPORTDOCS) + ${MKDIR}${PREFIX}/share/doc/xv + ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv +.endif + </programlisting> + + <para>N'oubliez pas de les ajouter aussi à + <filename>pkg/PLIST</filename> ! (Ne vous souciez pas ici de + <makevar>NOPORTDOCS</makevar>; il n'y a aujourd'hui aucun moyen pour + que les procédures d'installation des logiciels + précompilés lisent les variables de + <filename>/etc/make.conf</filename>.)</para> + + <para>Vous pouvez aussi vous servir du fichier + <filename>pkg/MESSAGE</filename> pour afficher des messages à + l'installation. Reportez-vous à la section sur l'utilisation + de + <link linkend="porting-message"><filename>pkg/MESSAGE</filename></link> + pour plus d'informations.</para> + + <note> + <para>Il n'y a pas besoin d'ajouter <filename>MESSAGE</filename> + à <filename>pkg/PLIST</filename>.</para> + </note> + </sect3> + + <sect3> + <title><makevar>DIST_SUBDIR</makevar></title> + + <para>Evitez que votre logiciel n'encombre + <filename>/usr/ports/distfiles</filename>. S'il doit rapatrier de + nombreux fichiers ou comporte un fichier dont le nom est + déjà utilisé par un autre logiciel (e.g., + <filename>Makefile</filename>), donnez à + <makevar>DIST_SUBDIR</makevar> le nom du logiciel + (<makevar>PKGNAME</makevar> sans le numéro de version devrait + faire l'affaire). Cela modifiera <makevar>DISTDIR</makevar> de + <filename>/usr/ports/distfiles</filename> par défaut, en + <filename>/usr/ports/distfiles/<makevar>DIST_SUBDIR</makevar></filename> + et mettra effectivement tout ce dont a besoin votre logiciel à + porter dans ce sous-répertoire. </para> + + <para>Le sous-répertoire du même nom sur le site principal + de secours <filename>ftp.freebsd.org</filename> sera aussi + consulté (Positionner explicitement <makevar>DISTDIR</makevar> + dans votre <makevar>Makefile</makevar> n'aboutira pas au même + résultat, utilisez s'il vous plaît + <makevar>DIST_SUBDIR</makevar>.)</para> + + <note> + <para>Cela n'a pas d'effet sur les <makevar>MASTER_SITES</makevar> que + vous définissez dans votre + <filename>Makefile</filename>.</para> + </note> + </sect3> + + <sect3> + <title>Informations sur le paquetage</title> + + <para>Ne mettez pas les informations sur le paquetage, i.e. + <filename>COMMENT</filename>, <filename>DESCR</filename> et + <filename>PLIST</filename> dans <filename>pkg</filename>.</para> + + <note> + <para>Notez bien que ces fichiers ne sont plus utilisés + uniquement pour la version précompilée et sont + maintenant <emphasis>indispensables</emphasis>, même si la + variable <makevar>NO_PACKAGE</makevar> est définie.</para> + </note> + </sect3> + + <sect3> + <title>Chaînes RCS</title> + + <para>Ne mettez pas les chaînes RCS dans les fichiers de mise + à niveau - <foreignphrase>patches</foreignphrase>. + CVS les modifiera quand nous mettrons les fichiers dans l'arborescence + des logiciels portés et de nouveau lorsque nous les + extrairons ensuite et les mises à jour échouerons. Les + chaînes RCS sont encadrées par des caractères + “dollar” (<literal>$</literal>), et commencent + typiquement par <literal>$Id</literal> ou + <literal>$RCS</literal>.</para> + </sect3> + + <sect3> + <title>“diff” récursifs</title> + + <para>Il est bien d'utiliser la récursivité + (<option>-r</option>) avec <command>diff</command> pour + générer les fichiers de mise à jour, mais + examinez s'il vous plaît le résultat pour vous assurer + qu'il n'est pas pollué par trop de choses inutiles. En + particulier, les deltas entre fichiers dupliqués pour + sauvegarder la version originale, les <filename>Makefile</filename>s + alors que le logiciel à porter utilise + <command>Imake</command> ou GNU <command>configure</command>, etc., + sont inutiles et doivent être supprimés. Si vous avez + dû modifier <filename>configure.in</filename> et utiliser + <command>autoconf</command> pour mettre à jour + <command>configure</command>, n'incluez pas le delta pour + <command>configure</command> (il contient souvent plusieurs centaines + de lignes !) ; définissez + <literal>USE_AUTOCONF=yes</literal> et donnez les deltas pour + <filename>configure.in</filename>.</para> + + <para>Si vous avez par ailleurs eu à supprimer un fichier, vous + pouvez le faire avec la cible <maketarget>post-extract</maketarget> + plutôt qu'en vous servant du fichier de mise à jour. Une + fois que le delta vous convient, découpez-le s'il vous + plaît pour qu'il y ait un fichier de mise à jour pour + chaque fichier source.</para> + </sect3> + + <sect3 id="porting-prefix"> + <title><makevar>PREFIX</makevar></title> + + <para>Faites en sorte que votre logiciel s'installe sous l'arborescence + <makevar>PREFIX</makevar>. (Cette variable prend la valeur de + <makevar>LOCALBASE</makevar> (par défaut + <filename>/usr/local</filename>), à moins que + <makevar>USE_X_PREFIX</makevar> ou <makevar>USE_IMAKE</makevar> ne + soient définies, auquel cas ce sera <makevar>X11BASE</makevar> + (par défaut <filename>/usr/X11R6</filename>).)</para> + + <para>Le fait de ne coder nulle part en dur + <filename>/usr/local</filename> ou <filename>/usr/X11R6</filename> + dans le source rend le portage plus souple et facilite son adaptation + aux besoins d'autres sites. Pour les logiciels X qui se servent de + <command>imake</command>, c'est automatique; dans les autres cas, il + suffit souvent de faire en sorte que <filename>/usr/local</filename> + (ou <filename>/usr/X11R6</filename> pour les logiciels X qui + n'utilisent pas <command>imake</command>) soit remplacé par la + valeur de <makevar>PREFIX</makevar> dans les différentes + procédures et <filename>Makefile</filename>s du logiciel, + puisque cette variable est toujours transmise à chaque + étape du processus de compilation et d'installation.</para> + + <para>N'utilisez pas <makevar>USE_X_PREFIX</makevar> à mois d'en + avoir vraiment besoin (i.e., l'édition de liens utilise les + bibliothèques X ou vous avez besoin de faire + référence à des fichiers de + <makevar>X11BASE</makevar>).</para> + + <para>La variable <makevar>PREFIX</makevar> peut être + redéfinie dans votre <filename>Makefile</filename> ou dans + l'environnement de l'utilisateur. Il est néanmoins fortement + déconseillé de la définir explicitement dans les + <filename>Makefile</filename>s de logiciels.</para> + + <para>Utilisez aussi les variables précédentes pour faire + référence à des programmes ou fichiers d'autres + logiciels portés et non en donnant les chemins d'accès + complets. Par exemple, si votre logiciel a besoin que la + macro-instruction <literal>PAGER</literal> donne le chemin + d'accès à <command>less</command>, utilisez + l'indicateur :</para> + + <programlisting> +-DPAGER=\"${PREFIX}/bin/less\" + </programlisting> + + <para>du compilateur, ou :</para> + + <programlisting> +-DPAGER=\"${LOCALBASE}/bin/less\" + </programlisting> + + <para>si c'est un logiciel X, au lieu de + <literal>-DPAGER=\"/usr/local/bin/less\"</literal>. Cela aura plus de + chances de marcher si votre administrateur système a + déplacé toute l'arborescence + <filename>/usr/local</filename> ailleurs.</para> + </sect3> + + <sect3> + <title>Sous-répertoires</title> + + <para>Essayez de faire en sorte que le logiciel à porter installe + ses fichiers dans les bons sous-répertoires de + <makevar>PREFIX</makevar>. Certains logiciels regroupent tout dans un + sous-répertoire portant le nom du logiciel, ce qui est + incorrect. De nombreux logiciels mettent aussi tout, sauf les + binaires, fichiers d'en-tête et pages de manuel dans un + sous-répertoire de <filename>lib</filename>, ce qui ne fait pas + bon ménage avec le paradigme BSD. La plupart des fichiers + doivent être déplacés vers : + <filename>etc</filename> (fichiers d'initialisation et de + configuration), <filename>libexec</filename> (exécutables + démarrés par le système), + <filename>sbin</filename> (exécutables pour les + super-utilisateurs/administrateurs), <filename>info</filename> + (documentations au format “info”) ou + <filename>share</filename> (fichiers indépendants de + l'architecture). Reportez-vous aux pages de manuel de &man.hier.7; + pour plus de détails au sujet des règles qui + régissent <filename>/usr</filename>, la plus grande partie + s'applique aussi à <filename>/usr/local</filename>. Les + logiciels en rapport avec les “news” USENET font + exception. Ils peuvent se servir de + <filename><makevar>PREFIX</makevar>/news</filename> pour y mettre + leurs fichiers.</para> + </sect3> + + <sect3 id="porting-cleaning"> + <title>Supprimer les répertoires vides</title> + + <para>Faites en sorte que le logiciel fasse le ménage lors de sa + désinstallation. Cela se fait habituellement en ajoutant des + lignes <literal>@dirrm</literal> pour tous les répertoires + spécifiquement créés par le logiciel. Il faut + supprimer les sous-répertoires avant de supprimer leurs + répertoires parents.</para> + + <programlisting> + : +lib/X11/oneko/pixmaps/cat.xpm +lib/X11/oneko/sounds/cat.au + : +@dirrm lib/X11/oneko/pixmals +@dirrm lib/X11/oneko/sounds +@dirrm lib/X11/oneko</programlisting> + + <para>Il arrive parfois que <literal>@dirrm</literal> émette un + message d'erreur parce que d'autres logiciels partagent le même + sous-répertoire. Vous pouvez invoquer + <command>rmdir</command> depuis <literal>@unexec</literal> pour ne + supprimer que les sous-répertoires vides sans messages + d'avertissement.</para> + + <programlisting> +@unexec rmdir %D/share/doc/gimp 2>/dev/null || true</programlisting> + + <para>Il n'y aura alors ni message d'erreur, ni fin anormale de + <command>pkg_delete</command> même si + <filename><makevar>PREFIX</makevar>/share/doc/gimp</filename> n'est + pas vide parce que d'autres logiciels y ont installé des + fichiers.</para> + </sect3> + + <sect3> + <title><literal>UID</literal>s</title> + + <para>Si votre logiciel a besoin qu'un utilisateur particulier existe + sur le système, appelez <command>pw</command> dans la + procédure <filename>pkg/INSTALL</filename> pour le créer + automatiquement. Voyez <filename>net/cvsup-mirror</filename> pour + avoir un exemple.</para> + + <para>Si votre logiciel à porter a besoin du même + <literal>ID</literal>dentifiant d'utilisateur/groupe qui a servi + à sa compilation quand on installe le paquetage binaire, vous + devez choisir un <literal>UID</literal> libre entre 50 et 99 et + l'enregistrer ci-dessous. Voyez <filename>japanese/Wnn</filename> pour + avoir un exemple.</para> + + <para>Veillez à ne pas utiliser un <literal>UID</literal> + déjà employé par le système ou d'autres + logiciels. Voici la liste des <literal>UID</literal>s entre 50 et + 99.</para> + + <programlisting> +majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent +cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent +gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh +uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico +xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent +pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent +wnn:*:69:7:Wnn:/nonexistent:/nonexistent +ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent +pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh +ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent +alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent +qmaill:*:83:81:QMail user:/var/qmail:/nonexistent +qmaild:*:82:81:QMail user:/var/qmail:/nonexistent +qmailq:*:85:82:QMail user:/var/qmail:/nonexistent +qmails:*:87:82:QMail user:/var/qmail:/nonexistent +qmailp:*:84:81:QMail user:/var/qmail:/nonexistent +qmailr:*:86:82:QMail user:/var/qmail:/nonexistent +msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh</programlisting> + + <para>Signalez s'il vous plaît que vous réservez un + <literal>UID</literal> ou <literal>GID</literal> dans cette plage, + quand vous soumettez un logiciel (ou une mise à niveau). Cela + nous permet de tenir à jour la liste des <literal>ID</literal>s + réservés.</para> + </sect3> + + <sect3> + <title>Faites les choses rationnellement</title> + + <para>Le <filename>Makefile</filename> doit faire des choses simples et + logiques. Si vous pouvez le raccourcir et le rendre plus lisible, + faites-le. Utilisez par exemple un instruction + <literal>.if</literal> de <command>make</command>, au lieu d'un + <literal>if</literal> de l'interpréteur de commandes, ne + redéfinissez pas <maketarget>do-extract</maketarget> si vous + pouvez utiliser <makevar>EXTRACT*</makevar> à la place et + servez-vous de <makevar>GNU_CONFIGURE</makevar> au lieu de + <literal>CONFIGURE_ARGS += --prefix=${PREFIX}</literal>.</para> + </sect3> + + <sect3> + <title>Prennez en compte <makevar>CFLAGS</makevar></title> + + <para>Le logiciel à porter doit prendre en considération + <makevar>CFLAGS</makevar>. Si ce n'est pas le cas, ajoutez s'il vous + plaît <literal>NO_PACKAGE=ignores cflags</literal> au + <filename>Makefile</filename>.</para> + </sect3> + + <sect3> + <title>Fichiers de Configuration</title> + + <para>Si votre logiciel a besoin de fichiers de configuration dans + <filename><makevar>PREFIX</makevar>/etc</filename>, ne les installez + <emphasis>pas</emphasis> et ne les listez pas dans + <filename>pkg/PLIST</filename>. <command>pkg_delete</command> + supprimerait alors des fichiers renseignés avec soin par les + utilisateurs et une réinstallation les + écraserait.</para> + + <para>Au lieu de cela, installez des fichiers d'exemple avec un suffixe + (<filename><replaceable>nom_de_fichier</replaceable>.sample</filename> + fonctionnera bien) et affichez un + <link linkend="porting-message">message</link> pour signaler à + l'utilisateur qu'il devra copier et modifier le fichier pour que le + logiciel soit utilisable.</para> + </sect3> + + <sect3> + <title>Portlint</title> + + <para>Contrôlez votre travail avec + <link linkend="porting-portlint"><command>portlint</command></link> + avant de le soumettre ou de le mettre dans l'arborescence des + sources.</para> + </sect3> + + <sect3> + <title>Retours d'information</title> + + <para>Envoyez vos modifications et mises à niveau à + l'auteur ou au responsable de la maintenance pour qu'il les inclue + dans la prochaine version du code. Cela ne fera que vous faciliter le + travail pour la prochaine fois.</para> + </sect3> + + <sect3> + <title>Divers</title> + + <para>Les fichiers <filename>pkg/DESCR</filename>, + <filename>pkg/COMMENT</filename> et <filename>pkg/PLIST</filename> + doivent chacun être revérifiés. Si vous passez un + logiciel en revue et pensez qu'ils peuvent être mieux + étre mieux écrits, faites-le.</para> + + <para>Ne mettez pas de nouvelles copies de la Licence Publique + Générale GNU - GPL - sur notre + système, s'il vous plaît.</para> + + <para>Notez s'il vous plaît soigneusement toutes les + considérations d'ordre légal. Ne nous laissez pas + distribuer illégalement du logiciel !</para> + </sect3> + + <sect3> + <title>Si vous êtes bloqué…</title> + + <para>Consultez les exemples existants et + <filename>bsd.port.mk</filename> avant de nous poser des + questions ! <!-- smiley --><emphasis>;)</emphasis></para> + + <para>Posez-nous des questions si vous avez des problèmes ! + Ne vous cognez pas la tête contre les murs ! + <!-- smiley --><emphasis>:)</emphasis></para> + </sect3> + </sect2> + + <sect2 id="porting-samplem"> + <title>Un exemple de <filename>Makefile</filename></title> + + <para>Voici un exemple de <filename>Makefile</filename> dont vous pouvez + vous servir pour porter un nouveau logiciel. Veillez à supprimer + les commentaires excédentaires (ceux qui sont entre + crochets) !</para> + + <para>Il est souhaitable que vous respectiez ce format (ordre des + variables, espacements entre sections, etc.). Il est conçu pour + qu'il soit facile de repérer les informations les plus + importantes. Nous vous recommandons d'utiliser + <link linkend="porting-portlint">portlint</link> pour vérifier le + <filename>Makefile</filename>.</para> + + <programlisting> +[l'en-tête...pour qu'il nous soit plus facile d'identifier les logiciels.] +# New ports collection makefile for: xdvi +[l'en-tête de version obligatoire doit être mise à jour + en même temps que le logiciel.] +# Version required: pl18 [des choses du genre "1.5alpha" conviennent aussi] +[C'est la date de création de la première version de ce Makefile. + Ne la modifiez jamais lors d'une mise à jour.] +# Date created: 26 May 1995 +[C'est la personne qui a fait le premier portage sous FreeBSD, en particulier, + celle qui a écrit la première version de ce Makefile. Rappelez-vous + que vous ne devez plus modifier ce nom par la suite.] +# Whom: Satoshi Asami <asami@FreeBSD.ORG> +# +# $Id$ +[ ^^^^ Ce sera automatiquement remplacé par la chaîne RCS par CVS + ensuite, lors de l'intégration à nos archives.] +# + +[Cette section décrit le logiciel et le site d'origine - DISTNAME + viens toujours en premier, suivi de PKGNAME (si nécessaire), CATEGORIES, + puis de MASTER_SITES, qui peut être suivi de MASTER_SITE_SUBDIR. + EXTRACT_SUFX ou DISTFILES peuvent éventuellement être précisés ensuite.] +DISTNAME= xdvi +PKGNAME= xdvi-pl18 +CATEGORIES= print +[N'oubliez pas le “slash” ("/") à la fin ! + si vous ne vous servez pas des macros-instructions MASTER_SITE_*] +MASTER_SITES= ${MASTER_SITE_XCONTRIB} +MASTER_SITE_SUBDIR= applications +[A définir si le source n'est pas au format ".tar.gz"] +EXTRACT_SUFX= .tar.Z + +[Section pour les mises à jour de la distribution -- peut être vide] +PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ +PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz + +[Responsable de la maintenance; *obligatoire* ! C'est la personne + (de préférence avec les droits d'écriture sur l'arborescence + des sources) que les utilisateurs peuvent contacter si questions ou rapports + d'anomalie - ce doit être la personne qui a fait le portage ou quelqu'un + qui peut lui transmettre les questions dans un délai raisonnable. Si vous + ne voulez vraimant pas que votre adresse apparaisse ici, mettez + "ports@FreeBSD.ORG".] +MAINTAINER= asami@FreeBSD.ORG + +[Dépendances -- peuvent être vides] +RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript +LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm + +[Cette section est réservée aux autres variables bsd.port.mk + qui n'ont pas leur place dans les sections précédentes] +[S'il y a des questions lors de la configuration, de la compilation, + de l'installation ...] +IS_INTERACTIVE= yes +[Si l'extraction se fait dans un autre répertoire que ${DISTNAME}...] +WRKSRC= ${WRKDIR}/xdvi-new +[Si les mises à jour de la distribution ne sont pas relatives à ${WRKSRC}, + vous devrez peut-être utiliser cette variable] +PATCH_DIST_STRIP= -p1 +[S'il faut exécuter une procédure "configure" générée par GNU autoconf] +GNU_CONFIGURE= yes +[S'il faut compiler avec GNU make, et non /usr/bin/make, ...] +USE_GMAKE= yes +[Si c'est une application X et qu'il faut utiliser "xmkmf -a" ...] +USE_IMAKE= yes +[et cetera.] + +[Variables non-standard pour les règles qui les suivent] +MY_FAVORITE_RESPONSE= "oui, pour sûr" + +[Les règles particulières, dans l'ordre où faut les appeler] +pre-fetch: + Ouais, il faut récupérer quelque chose + +post-patch: + Génial, j'ai quelque chose à faire après la mise à jour + +pre-install: + et d'autres choses encore après l'installation + +[et l'épilogue] +.include <bsd.port.mk></programlisting> + </sect2> + + <sect2 id="porting-pkgname"> + <title>Noms des paquetages</title> + + <para>Voici les conventions à respecter pour les noms des + paquetages. Cela pour qu'il soit facile de parcourir notre + répertoire des paquetages, parce qu'il y en a déjà + beaucoup et que cela va rebuter les utilisateurs s'ils s'y usent les + yeux !</para> + + <para>Le nom du paquetage doit être de la forme + <filename><replaceable>langue-</replaceable>nom<replaceable>-particularités.de.compilation</replaceable><replaceable>-numéros.de.version</replaceable></filename>.</para> + + <para>Si votre <makevar>DISTNAME</makevar> n'est pas de ce type, + définissez <makevar>PKGNAME</makevar> en respectant ce + format.</para> + + <orderedlist> + <listitem> + <para>FreeBSD essayer d'intégrer les supports des langues + maternelles de ses utilisateurs. Le préfixe + <replaceable>langue-</replaceable> doit être le sigle de deux + lettres défini par la convention ISO-639, si le logiciel + est propre à une langue particulière. Par exemple, + <literal>ja</literal> pour le Japonais, <literal>ru</literal> pour + le Russe, <literal>vi</literal> pour le Vietnamien, + <literal>zh</literal> pour le Chinois, <literal>ko</literal> pour le + Coréen et <literal>de</literal> pour l'Allemand.</para> + </listitem> + + <listitem> + <para>Le <filename>nom</filename> doit toujours être en + minuscules, sauf pour les paquetages particulièrement + importants (qui comportent de nombreux programmes). XFree86 ou + ImageMagick par exemple appartiennent à cette + catégorie. Sinon, mettez le nom (ou au moins la + première lettre) en minuscules. Si les majuscules ont un sens + dans le nom (par exemple pour les noms d'une seule lettre comme + <literal>R</literal> ou <literal>V</literal>), vous pouvez utiliser + des majuscules si vous le souhaitez. Il est de tradition d'appeler + les modules Perl 5 en les faisant précéder de + <literal>p5-</literal> et en remplaçant les deux deux-points + par un tiret; par exemple, le module <literal>Data::Dumper</literal> + devient <literal>p5-Data-Dumper</literal>. S'il y a des + numéros, tirets ou soulignés dans le nom, vous pouvez + aussi les conserver (par exemple, + <literal>kinput2</literal>).</para> + </listitem> + + <listitem> + <para>Si le logiciel peut-être compilé avec + différentes <link linkend="porting-masterdir">valeurs par + défaut codées en dur</link> (ce qui fait d'habitude + partie du nom de répertoire d'une famille de logiciels), les + <replaceable>-particularités.de.compilation</replaceable> + doivent indiquer quelles sont ces valeurs (le tiret n'est pas + obligatoire). On peut donner en exemple la résolution des + polices ou le format de papier.</para> + </listitem> + + <listitem> + <para>La version doit être une suite d'entiers + séparés par des points ou un unique caractère + alphabétique. La seule exception concerne la chaîne + <literal>pl</literal> + (“<foreignphrase>patchlevel</foreignphrase>” - niveau + de mise à jour), qui ne peut être utilisée que + lorsque qu'il n'y a pas de numéros de version majeure et + mineure du logiciel.</para> + </listitem> + </orderedlist> + + <para>Voici quelques exemples (réels) de la manière de + convertir un <makevar>DISTNAME</makevar> en un + <makevar>PKGNAME</makevar> :</para> + + <informaltable frame="none"> + <tgroup cols="3"> + <thead> + <row> + <entry>Nom de la Distribution</entry> + <entry>Nom du Paquetage</entry> + <entry>Raison</entry> + </row> + </thead> + + <tbody> + <row> + <entry>mule-2.2.2.</entry> + <entry>mule-2.2.2</entry> + <entry>Pas de changement nécessaire</entry> + </row> + + <row> + <entry>XFree86-3.1.2</entry> + <entry>XFree86-3.1.2</entry> + <entry>Pas de changement nécessaire</entry> + </row> + + <row> + <entry>EmiClock-1.0.2</entry> + <entry>emiclock-1.0.2</entry> + <entry>Pas de majuscules pour les programmes individuels</entry> + </row> + + <row> + <entry>gmod1.4</entry> + <entry>gmod-1.4</entry> + <entry>Il faut un tiret avant les numéros de + version</entry> + </row> + + <row> + <entry>xmris.4.0.2</entry> + <entry>xmris-4.0.2</entry> + <entry>Il faut un tiret avant les numéros de + version</entry> + </row> + + <row> + <entry>rdist-1.3alpha</entry> + <entry>rdist-1.3a</entry> + <entry>Les chaînes de caractères comme + <literal>alpha</literal> ne sont pas autorisées</entry> + </row> + + <row> + <entry>es-0.9-beta1</entry> + <entry>es-0.9b1</entry> + <entry>Les chaînes de caractères comme + <literal>beta</literal> ne sont pas autorisées</entry> + </row> + + <row> + <entry>v3.3beta021.src</entry> + <entry>tiff-3.3</entry> + <entry>C'était quoi exactement ?</entry> + </row> + + <row> + <entry>tvtwm</entry> + <entry>tvtwm-pl11</entry> + <entry>Il doit toujours y avoir une version</entry> + </row> + + <row> + <entry>piewm</entry> + <entry>piewm-1.0</entry> + <entry>Il doit toujours y avoir une version</entry> + </row> + + <row> + <entry>xvgr-2.10pl1</entry> + <entry>xvgr-2.10.1</entry> + <entry><literal>pl</literal> n'est autorisé que lorsqu'il + n'y a pas de numéro de version majeure/mineure</entry> + </row> + + <row> + <entry>gawk-2.15.6</entry> + <entry>ja-gawk-2.15.6</entry> + <entry>Version Japonaise</entry> + </row> + + <row> + <entry>psutils-1.13</entry> + <entry>psutils-letter-1.13</entry> + <entry>Taille de page en dur à la compilation</entry> + </row> + + <row> + <entry>pkfonts</entry> + <entry>pkfonts300-1.0</entry> + <entry>Paquetage pour les polices 300dpi</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>S'il n'y a nulle part d'information sur la version et qu'il y a peu + de chances que l'auteur sorte une nouvelle version, prennez + <literal>1.0</literal> comme numéro de version (comme pour piewm + ci-dessus). Sinon, posez la question à l'auteur ou servez-vous de + la date + (<literal><replaceable>aa</replaceable>.<replaceable>mm</replaceable>.<replaceable>jj</replaceable></literal>) + comme version.</para> + </sect2> + + <sect2 id="porting-categories"> + <title>Catégories</title> + + <para>Comme vous le savez déjà, les logiciels portés + sont répartis en différentes catégories. Mais, il + est important, pour que cette classification fonctionne, que les + responsables des portages et les utilisateurs comprennent ce qu'est + chaque catégorie et comment nous choisissons la catégorie + dans laquelle nous classons un logiciel.</para> + + <sect3> + <title>Liste actuelle des catégories</title> + + <para>Voici tout d'abord la liste des catégories à ce + jour. Celles qui sont suivies d'une astérisque + (<literal>*</literal>) sont des catégories + <emphasis>virtuelles</emphasis>—il n'y a pas de + sous-répertoires correspondant dans le catalogue des logiciels + portés.</para> + + <note> + <para>Pour les catégories réelles, il y a une ligne de + description dans le fichier <filename>pkg/COMMENT</filename> du + sous-répertoire correspondant (e.g., + <filename>archivers/pkg/COMMENT</filename>).</para> + </note> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Catégorie</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <entry><filename>afterstep*</filename></entry> + <entry>Logiciels pour le gestionnaire de fenêtres + AfterStep</entry> + </row> + + <row> + <entry><filename>archivers</filename></entry> + <entry>Outils d'archivage</entry> + </row> + + <row> + <entry><filename>astro</filename></entry> + <entry>Logiciels d'astronomie</entry> + </row> + + <row> + <entry><filename>audio</filename></entry> + <entry>Son</entry> + </row> + + <row> + <entry><filename>benchmarks</filename></entry> + <entry>Outils de mesure de performances</entry> + </row> + + <row> + <entry><filename>biology</filename></entry> + <entry>Logiciels en rapport avec la biologie</entry> + </row> + + <row> + <entry><filename>cad</filename></entry> + <entry>Conception assistée par ordinateur</entry> + </row> + + <row> + <entry><filename>chinese</filename></entry> + <entry>Support de la langue Chinoise</entry> + </row> + + <row> + <entry><filename>comms</filename></entry> + <entry>Logiciels de communication. Essentiellement des logiciels + qui dialoguent avec votre port série</entry> + </row> + + <row> + <entry><filename>converters</filename></entry> + <entry>Convertisseurs de codes de caractéres</entry> + </row> + + <row> + <entry><filename>databases</filename></entry> + <entry>Bases de données</entry> + </row> + + <row> + <entry><filename>deskutils</filename></entry> + <entry>Ce que l'on avait sur son bureau avant l'invention des + ordinateurs</entry> + </row> + + <row> + <entry><filename>devel</filename></entry> + <entry>Outils de développement. N'y mettez pas de + bibliothèques simplement parce que ce sont des + bibliothèques—à moins qu'elles n'aient + vraiment pas leur place ailleurs, elles ne doivent pas + être dans cette catégorie</entry> + </row> + + <row> + <entry><filename>editors</filename></entry> + <entry>Editeurs généraux. Les éditeurs + spécialisés vont dans la catégorie + correspondante (e.g., un éditeur de formules + mathématiques ira dans + <filename>math</filename>)</entry> + </row> + + <row> + <entry><filename>elisp</filename></entry> + <entry>Logiciels Emacs-lisp</entry> + </row> + + <row> + <entry><filename>emulators</filename></entry> + <entry>Emulateurs d'autres systèmes d'exploitation. Les + émulateurs de terminaux ne rentrent + <emphasis>pas</emphasis> dans cette + catégorie—ceux pour X vont dans + <filename>x11</filename> et les émulateurs en mode + texte dans <filename>comms</filename> ou + <filename>misc</filename>, selon leur fonction exacte</entry> + </row> + + <row> + <entry><filename>games</filename></entry> + <entry>Jeux</entry> + </row> + + <row> + <entry><filename>german</filename></entry> + <entry>Support de la langue Allemande</entry> + </row> + + <row> + <entry><filename>graphics</filename></entry> + <entry>Utilitaires graphiques</entry> + </row> + + <row> + <entry><filename>japanese</filename></entry> + <entry>Support de la langue Japonaise</entry> + </row> + + <row> + <entry><filename>kde*</filename></entry> + <entry>Logiciels qui constituent “<foreignphrase>K Desktop + Environment</foreignphrase>” (kde)</entry> + </row> + + <row> + <entry><filename>korean</filename></entry> + <entry>Support de la langue Coréenne</entry> + </row> + + <row> + <entry><filename>lang</filename></entry> + <entry>Langages de programmation</entry> + </row> + + <row> + <entry><filename>mail</filename></entry> + <entry>Logiciels de courrier électronique</entry> + </row> + + <row> + <entry><filename>math</filename></entry> + <entry>Logiciels de calcul numérique et autres outils + mathématiques</entry> + </row> + + <row> + <entry><filename>mbone</filename></entry> + <entry>Applications MBone</entry> + </row> + + <row> + <entry><filename>misc</filename></entry> + <entry>Utilitaires variés—essentiellement ceux qui + n'ont pas leur place ailleurs. C'est la seul catégorie + qui ne doit pas apparaître en même temps qu'une + autre catégorie non virtuelle. S'il y a + <literal>misc</literal> et autre chose dans votre ligne + <makevar>CATEGORIES</makevar>, cela signifie que vous pouvez + sans risque supprimer <literal>misc</literal> et mettre le + logiciel dans cet autre sous-répertoire</entry> + </row> + + <row> + <entry><filename>net</filename></entry> + <entry>Outils réseau divers</entry> + </row> + + <row> + <entry><filename>news</filename></entry> + <entry>Logiciels pour les listes de discussion USENET</entry> + </row> + + <row> + <entry><filename>offix*</filename></entry> + <entry>Logiciels de la suite OffiX</entry> + </row> + + <row> + <entry><filename>palm</filename></entry> + <entry>Logiciels à utiliser avec la gamme 3Com + Palm(tm)</entry> + </row> + + <row> + <entry><filename>perl5*</filename></entry> + <entry>Logiciels qui nécessitent Perl version 5</entry> + </row> + + <row> + <entry><filename>plan9*</filename></entry> + <entry>Programmes divers de Plan9.</entry> + </row> + + <row> + <entry><filename>print</filename></entry> + <entry>Logiciels d'impression. Les logiciels de publication + (prévisualiseurs, etc.) appartiennent aussi à + cette catégorie</entry> + </row> + + <row> + <entry><filename>python*</filename></entry> + <entry>Logiciels écrits en Python</entry> + </row> + + <row> + <entry><filename>russian</filename></entry> + <entry>Support de la langue Russe</entry> + </row> + + <row> + <entry><filename>security</filename></entry> + <entry>Outils de sécurité</entry> + </row> + + <row> + <entry><filename>shells</filename></entry> + <entry>Interpréteurs de commandes</entry> + </row> + + <row> + <entry><filename>sysutils</filename></entry> + <entry>Utilitaires système</entry> + </row> + + <row> + <entry><filename>tcl75*</filename></entry> + <entry>Logiciels qui nécessitent Tcl 7.5</entry> + </row> + + <row> + <entry><filename>tcl76*</filename></entry> + <entry>Logiciels qui nécessitent Tcl 7.6</entry> + </row> + + <row> + <entry><filename>tcl80*</filename></entry> + <entry>Logiciels qui nécessitent Tcl 8.0</entry> + </row> + + <row> + <entry><filename>tcl81*</filename></entry> + <entry>Logiciels qui nécessitent Tcl 8.1</entry> + </row> + + <row> + <entry><filename>textproc</filename></entry> + <entry>Outils de traitement de texte, sauf les logiciels de + publication assistée par ordinateur, qui vont dans + <filename>print/</filename></entry> + </row> + + <row> + <entry><filename>tk41*</filename></entry> + <entry>Logiciels qui nécessitent Tk 4.1</entry> + </row> + + <row> + <entry><filename>tk42*</filename></entry> + <entry>Logiciels qui nécessitent Tk 4.2</entry> + </row> + + <row> + <entry><filename>tk80*</filename></entry> + <entry>Logiciels qui nécessitent Tk 8.0</entry> + </row> + + <row> + <entry><filename>tk81*</filename></entry> + <entry>Logiciels qui nécessitent Tk 8.1</entry> + </row> + + <row> + <entry><filename>vietnamese</filename></entry> + <entry>Support de la langue Vietnamienne</entry> + </row> + + <row> + <entry><filename>windowmaker*</filename></entry> + <entry>Logiciels pour le gestionnaire de fenêtres + WindowMaker</entry> + </row> + + <row> + <entry><filename>www</filename></entry> + <entry>Logiciels en rapport avec le World Wide Web. Ce qui + concerne le langage HTML a aussi sa place ici</entry> + </row> + + <row> + <entry>x11</entry> + <entry>Le système X window et consorts. Cette + catégorie ne concerne que les logiciels directement en + rapport avec X Window. N'y mettez pas les applications X + ordinaires. Si votre logiciel est une application X, + définissez <makevar>USE_XLIB</makevar> (implicite avec + <makevar>USE_IMAKE</makevar>) et mettez le dans la + catégorie appropriée. Un grand nombre d'entre + eux vont dans les autres catégories + <filename>x11-*</filename> (voir plus bas)</entry> + </row> + + <row> + <entry><filename>x11-clocks</filename></entry> + <entry>Horloges X11</entry> + </row> + + <row> + <entry><filename>x11-fm</filename></entry> + <entry>Gestionnaires de fichiers X11</entry> + </row> + + <row> + <entry><filename>x11-fonts</filename></entry> + <entry>Polices de caractères X11 et outils + associés</entry> + </row> + + <row> + <entry><filename>x11-toolkits</filename></entry> + <entry>Boîtes à outils X11</entry> + </row> + + <row> + <entry><filename>x11-wm</filename></entry> + <entry>Gestionnaires de fenêtres X11</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </sect3> + + <sect3> + <title>Choisir la bonne catégorie</title> + + <para>Comme de nombreuses catégories ont des logiciels en commun, + vous devez souvent décider laquelle sera la catégorie + principale de votre logiciel. Voici une liste de priorités, par + ordre décroissant :</para> + + <itemizedlist> + <listitem> + <para>Les catégories liées à la langue + viennent en premier. Par exemple, si vous installez des polices + X11 Japonaise, alors vous mettrez <literal>japanese x11</literal> + dans votre ligne <makevar>CATEGORIES</makevar>.</para> + </listitem> + + <listitem> + <para>Les catégories les plus spécifiques viennent + avant celles qui le sont moins. Par exemple, un éditeur + HTML doit être listé dans <literal>www + editors</literal>, et non l'inverse. Vous n'avez par ailleurs pas + besoin de mettre <literal>net</literal> si le logiciel appartient + à l'une des catégories <literal>mail</literal>, + <literal>mbone</literal>, <literal>news</literal>, + <literal>security</literal> ou <literal>www</literal>.</para> + </listitem> + + <listitem> + <para><literal>x11</literal> n'est une catégorie secondaire + que lorsque la catégorie principale est une langue + nationale. En particulier, il ne faut pas mettre + <literal>x11</literal> pour les applications X.</para> + </listitem> + + <listitem> + <para>Si votre logiciel ne va vraiment nulle part ailleurs, + mettez-le dans <literal>misc</literal>.</para> + </listitem> + </itemizedlist> + + <para>SI vous n'êtes pas sûr de la catégorie, mettez + s'il vous plaît un commentaire à ce sujet lorsque vous + soumettez votre <command>send-pr</command> pour que nous puissions en + discuter avant de l'intégrer. (Si vous avez l'accès en + écriture, envoyez une note à &a.ports; pour qu'il y ait + discussion au préalable—les nouveaux logiciels sont trop + souvent importés dans la mauvaise catégorie et doivent + être déplacés immédiatement + après.)</para> + </sect3> + </sect2> + + <sect2> + <title>Modifications de ce document et du système des logiciels + portés</title> + + <para>Si vous maintenez de noombreux logiciels portés, vous + devriez vous abonner à &a.ports;. Les modifications importantes + au fonctionnement du catalogue des logiciels portés y seront + annoncées. Vous aurez toujours des informations plus + détaillées sur les dernières modifications en + consultant les + <ulink url="http://www.FreeBSD.ORG/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk">traces + CVS pour bsd.port.mk</ulink>.</para> + </sect2> + + <sect2> + <title>That is It, Folks!</title> + + <para>C'est vraiment un long chapitre, n'est-ce-pas ? Merci de + nous avoir suivi jusqu'ici.</para> + + <para>Vous savons donc maintenant comment porter un logiciel. Allons-y et + convertissons le monde entier en logiciel portés ! C'est la + façon la plus simple de commencer à contribuer au projet + FreeBSD ! <!-- smiley --><emphasis>:)</emphasis></para> + </sect2> + </sect1> +</chapter> +<!-- + Local Variables: + mode: sgml + sgml-declaration: "../chapter.decl" + sgml-indent-data: t + sgml-omittag: nil + sgml-shorttag: nil + sgml-always-quote-attributes: t + sgml-minimize-attributes: max + sgml-parent-document: ("../handbook.sgml" "part" "chapter") + End: +--> + |