diff options
Diffstat (limited to 'fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml')
-rw-r--r-- | fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml | 5197 |
1 files changed, 0 insertions, 5197 deletions
diff --git a/fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml deleted file mode 100644 index 461ba197cb..0000000000 --- a/fr_FR.ISO8859-1/books/handbook/ports/chapter.sgml +++ /dev/null @@ -1,5197 +0,0 @@ -<!-- - 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: ---> - |