<!--
     The FreeBSD Documentation Project
     The FreeBSD French Documentation Project

     $FreeBSD$
     Original revision: n.nn
-->

    <chapter id="ports">
      <title>Installer des applications du &ldquo;Catalogue des logiciels 
        port&eacute;s&rdquo;</title>
      
      <para><emphasis>Contribution de James Raynard.</emphasis></para>
      &trans.a.haby;
      
      <para>Le catalogue des logiciels port&eacute;s de FreeBSD vous permet de
        compiler et d'installer une grande vari&eacute;t&eacute; d'applications avec 
        un minimum d'efforts.</para>
      
      <para>Malgr&eacute; toutes les d&eacute;clarations exag&eacute;r&eacute;es sur les standards ouverts,
        faire fonctionner un programme sur diff&eacute;rentes versions d'Unix
        peut en r&eacute;alit&eacute; &ecirc;tre fastidieux et d&eacute;licat, comme tous ceux qui
        ont essay&eacute; le savent. Vous aurez peut-&ecirc;tre la chance d'arriver
        &agrave; compiler, installer o&ugrave; il faut et ex&eacute;cuter sans incident le
        programme que vous voulez &ldquo;tel quel&rdquo;, mais c'est
        malheureusement assez rare. Dans la plupart des cas, vous devrez
        vous creuser un peu la t&ecirc;te, et il y a un certain nombre de programmes
        qui vous donneront pr&eacute;maturement des cheveux blancs, ou m&ecirc;me une
        calvitie chronique...</para>
     
      <para>Certaines distributions de logiciels ont r&eacute;solu ce probl&egrave;me
        en fournissant des proc&eacute;dures de configuration. Certaines sont tr&egrave;s
        sophistiqu&eacute;es, mais ont une f&acirc;cheuse tendance &agrave; vous annoncer 
        triomphalement que votre syst&egrave;me est d'une esp&egrave;ce dont vous n'avez
        jamais entendu parler et &agrave; vous poser un tas de questions qui 
        ressemblent plus &agrave; un examen de programmation syst&egrave;me Unix.
	<literal>(La fonction gethitlist de votre syst&egrave;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&acirc;ce au catalogue des logiciels port&eacute;s, tout le
        travail p&eacute;nible a d&eacute;j&agrave; &eacute;t&eacute; 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&eacute;s?</title>
	
	<para>Le syst&egrave;me FreeBSD de base comporte une grande vari&eacute;t&eacute; d'outils
          et d'utilitaires syst&egrave;me, mais de nombreux logiciels d'usage
          courant n'en font pas partie, et il y a de bonnes raisons &agrave; 
          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
                 &eacute;diteur bas&eacute; sur Lisp, par exemple.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Certains programmes sont trop sp&eacute;cialis&eacute;s pour faire partie
                du syst&egrave;me de base (Conception Assist&eacute;e par Ordinateur, bases de                donn&eacute;es).</para>
	    </listitem>
	    
	    <listitem>
	      <para>Les programmes de la cat&eacute;gorie &ldquo;Je devrais y jeter
                un coup d'oeil quand j'aurais cinq minutes&rdquo;, et qui n'ont
                rien d'indispensable (certains langages, peut-&ecirc;tre).</para> 
	    </listitem>
	    
	    <listitem>
	      <para>Les programmes qui sont bien trop amusants pour &ecirc;tre fournis
                avec un syst&egrave;me d'exploitation s&eacute;rieux comme FreeBSD ;-)</para>
	    </listitem>
	    
	    <listitem>
	      <para>Peut importe la quantit&eacute; de programmes fournis de base,
                les gens en veulent toujours plus, et il faut d&eacute;finir une 
                s&eacute;paration quelque part (sans quoi les distributions de FreeBSD 
                deviendraient absolument &eacute;normes).</para>
	    </listitem>
	    
	  </orderedlist>
	
	<para>Il serait &eacute;videmment irr&eacute;aliste d'attendre que chacun porte
          ses programmes favoris &agrave; la main (sans mentionner la quantit&eacute;
          invraisemblable de travail refait &agrave; chaque fois), le Projet
          FreeBSD a donc mis en place une m&eacute;thode ing&eacute;nieuse d'utilisation
          d'outils standard pour automatiser le processus.</para>
	
	<para>C'est, au passage, une excellente illustration de la 
          &ldquo;mani&egrave;re Unix&rdquo; de faire en combinant un jeu
          d'outils simples mais souples pour arriver &agrave; un m&eacute;canisme
          tr&egrave;s puissant.</para>
	
      </sect1>
      
      <sect1>
	<title>Comment fonctionne le catalogue des logiciels port&eacute;s?</title>
	
	<para>Les logiciels sont typiquement distribu&eacute;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'&ecirc;tre), avec peut-&ecirc;tre aussi
          une proc&eacute;dure de configuration.</para>
	
	<para>Le sc&eacute;nario standard consiste &agrave; t&eacute;l&eacute;charger l'archive par FTP,
          l'extraire quelque part, parcourir les instructions, faire les
          modifications qui vous paraissent n&eacute;cessaires, lancer la proc&eacute;dure
          de configuration pour mettre tout au point et utiliser la commande
	  <command>make</command> habituelle pour compiler et installer le
          programme &agrave; partir du source.</para>
	
	<para>Les logiciels port&eacute;s de FreeBSD utilisent toujours le m&eacute;canisme 
          des archives, mais se servent d'un 
          <link linkend="ports-skeleton">squelette</link> qui renferme
	  la &ldquo;connaissance&rdquo; n&eacute;cessaire pour pouvoir obtenir un
          logiciel utilisable sous FreeBSD, plut&ocirc;t que d'attendre de 
          l'utilisateur qu'il se d&eacute;brouille. Ils comportent aussi leurs
          propres 
          <link linkend="ports-makefile"><filename>Makefile</filename>s</link>, 
          de sorte que presque tous les logiciels port&eacute;s se compilent et 
          s'installent de la m&ecirc;me fa&ccedil;on.</para>
	
	<para>Si vous regardez le squelette pour un logiciel port&eacute; (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&eacute;rez y trouver toutes sortes de techniques 
           d'avant-garde, vous serez d&eacute;&ccedil;u par les quelques fichiers et 
           r&eacute;pertoires sans &eacute;clat que vous y verrez. (Nous parlerons bient&ocirc;t de
           la fa&ccedil;on de <link linkend="ports-getting">Se procurer un logiciel 
           port&eacute;</link>).</para>
	
	<para>Je vous entends d'ici: &ldquo;Comment diable cela peut-il arriver
          &agrave; faire quoi que ce soit? Le code source n'y est m&ecirc;me 
          pas!&rdquo;</para>
	
	<para>Ne craignez rien, aimable lecteur, tout va s'&eacute;clairer 
          (esp&eacute;rons-le). Examinons ce qui se passe lorsque nous essayons 
          d'installer un logiciel port&eacute;. J'ai choisi 
	  <application>ElectricFence</application>, un bon outil pour les
          d&eacute;veloppeurs, car son squelette est plus explicite que la 
          plupart.</para>
	
	<note>
	  <para>Si vous essayez de le faire chez vous, vous devez &ecirc;tre 
          super-utilisateur.</para>
	</note>
	
	<informalexample>
	  <screen>&prompt.root; <userinput>cd /usr/ports/devel/ElectricFence</userinput>
&prompt.root; <userinput>make install</userinput>
&gt;&gt; Checksum OK for ElectricFence-2.0.5.tar.gz.
===&gt;  Extracting for ElectricFence-2.0.5
===&gt;  Patching for ElectricFence-2.0.5
===&gt;  Applying FreeBSD patches for ElectricFence-2.0.5
===&gt;  Configuring for ElectricFence-2.0.5
===&gt;  Building for ElectricFence-2.0.5
[une tonne de r&eacute;sultats de compilation...]
===&gt;  Installing for ElectricFence-2.0.5
===&gt;  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
===&gt;  Compressing manual pages for ElectricFence-2.0.5
===&gt;  Registering installation for ElectricFence-2.0.5</screen>
	</informalexample>
	
	<para>Pour &eacute;viter la confusion, je n'ai pas donn&eacute; les r&eacute;sultats de la
          compilation.</para>
	
	<para>Si vous avez essay&eacute; de votre c&ocirc;t&eacute;, vous avez peut-&ecirc;tre obtenu au
          d&eacute;but quelque chose du genre:</para>
	
	  <informalexample id="ports-fetch">
	    <screen>&prompt.root; <userinput>make install</userinput>
&gt;&gt; ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
&gt;&gt; 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&eacute; de le t&eacute;l&eacute;charger
          pour pouvoir continuer son travail. J'avais d&eacute;j&agrave; 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&ocirc;le</link> sur le fichier d'archive pour s'assurer qu'il
                a bien &eacute;t&eacute; r&eacute;cup&eacute;r&eacute;, et non accidentellement tronqu&eacute;, 
                t&eacute;l&eacute;charg&eacute; en mode ASCII, ou bombard&eacute; de neutrinos pendant le 
                transfert.</para>
	    </step>
	    
	    <step>
	      <para>Extraire l'archive dans un r&eacute;pertoire temporaire.</para>
	    </step>
	    
	    <step>
	      <para>Appliquer les 
                <link linkend="ports-patch">&ldquo;patches&rdquo;</link>&nbsp;-&nbsp;mises 
                &agrave; jour&nbsp;-&nbsp;n&eacute;cessaires &agrave; la compilation et &agrave; l'ex&eacute;cution
                sous FreeBSD.</para>
	    </step>
	    
	    <step>
	      <para>Lancer les proc&eacute;dures de configuration n&eacute;cessaires &agrave; la
                compilation et r&eacute;pondre correctement aux questions 
                pos&eacute;es.</para>
	    </step>
	    
	    <step>
	      <para>(Finalement!) Compiler le code.</para>
	    </step>
	    
	    <step>
	      <para>Installer le programme ex&eacute;cutable et les autres fichiers
		qui vont avec, pages de manuel, etc. dans un sous-r&eacute;pertoire de
		<filename>/usr/local</filename>, o&ugrave; ils ne se m&eacute;langeront pas
                avec vos programmes syst&egrave;me. Cela garantit aussi que tous les 
                logiciels port&eacute;s soient au m&ecirc;me endroit, au lieu d'&ecirc;tre 
                &eacute;parpill&eacute;s &agrave; droite et &agrave; gauche sur votre syst&egrave;me.</para>
	    </step>
	    
	    <step>
	      <para>Enregistrez l'installation dans une base de donn&eacute;es. Si vous
                ne voulez pas conserver le programme par la suite, vous pourrez 
                le <link linkend="ports-remove">d&eacute;sinstaller</link> proprement 
                de votre syst&egrave;me.</para>
	    </step>
	    
	  </procedure>
	
	<para>Parcourez les r&eacute;sultats de <command>make</command> et voyez si
          vous retrouvez ces diff&eacute;rentes &eacute;tapes. Si vous n'&eacute;tiez pas encore
          impressionn&eacute;, vous devriez l'&ecirc;tre maintenant!</para>
	
      </sect1>
      
      <sect1 id="ports-getting">
	<title>Se procurer un logiciel port&eacute; pour FreeBSD</title>
	
	<para>Il y a deux fa&ccedil;ons d'obtenir la version port&eacute;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&eacute;s depuis le CD-ROM</title>
	  
	  <para>Si vous avez r&eacute;pondu oui &agrave; la question &ldquo;Do you want to 
            link the ports collection to your 
            CD-ROM?&rdquo;&nbsp;-&nbsp;&ldquo;Voulez-vous cr&eacute;er un lien
            symbolique sur le catalogue des logiciels port&eacute;s du 
            CD-ROM?&rdquo;&nbsp;-&nbsp;pendant la configuration de 
            l'installation de FreeBSD, le programme aura d&eacute;j&agrave; effectu&eacute; &agrave; votre
            place les &eacute;tapes pr&eacute;liminaires.</para>
	  
	  <para>Sinon, v&eacute;rifiez que le CD-ROM <emphasis>FreeBSD</emphasis> est
            bien dans le lecteur et mont&eacute; 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&eacute;canisme d'installation puisse trouver
            les archives (il s'attend &agrave; ce qu'elles soient dans le r&eacute;pertoire
	    <filename>/usr/ports/distfiles</filename>, c'est la raison pour
            laquelle nous avons cr&eacute;&eacute; un lien symbolique du r&eacute;pertoire 
            d'archive du CD-ROM sur ce r&eacute;pertoire).</para>
	  
	  <para>Supposons maintenant que nous voulions installer le programme
            <application>gnats</application> qui se trouve dans le r&eacute;pertoire
            des bases de donn&eacute;es. Voici comment nous proc&eacute;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&eacute;rieusement les bases de donn&eacute;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 &ldquo;.&rdquo; &agrave; la fin de la 
            commande <command>cp</command>, ce n'est pas une erreur. C'est une
            &ldquo;Unixerie&rdquo; qui veut dire: &ldquo;le r&eacute;pertoire 
            courant&rdquo;) et le syst&egrave;me d'installation des logiciels port&eacute;s
            compilera et installera automatiquement tous les logiciels de
            base de donn&eacute;es disponibles!</para>
	  
	  <para>Si cette m&eacute;thode ne vous convient pas, voici une fa&ccedil;on 
            enti&egrave;rement diff&eacute;rente de faire:</para>
	  
	  <para>Cr&eacute;ez une &ldquo;arborescence de liens&rdquo; 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&ugrave; vous avez de la place, cr&eacute;ez-y un r&eacute;pertoire et 
            placez-vous dans ce r&eacute;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&egrave;s complet au r&eacute;pertoire
            <filename>ports</filename> du CD-ROM et un &ldquo;.&rdquo; (le
            r&eacute;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&eacute;s directement 
            &agrave; partir du CD-ROM en le faisant depuis l'arborescence de liens que
            vous venez de cr&eacute;er.</para>
	  
	  <para>Remarquez que les sources d'origine de certains logiciels ne
            peuvent &ecirc;tre fournis sur le CD-ROM, pour des questions de licence.
            Dans ce cas, vous devrez vous reporter &agrave; la section
	    <link linkend="ports-inet">Installer de logiciels port&eacute;s via
              une connexion Internet</link>.</para>
	  
	</sect2>
	
	<sect2 id="ports-inet">
	  <title>Installer des logiciels port&eacute;s via une connexion 
            Internet</title>
	  
	  <para>Si vous n'avez pas de CD-ROM, ou voulez &ecirc;tre s&ucirc;r d'avoir
            la toute derni&egrave;re version d'un logiciel, vous devrez 
            t&eacute;l&eacute;charger le <link linkend="ports-skeleton">squelette</link> 
            associ&eacute; au logiciel port&eacute;. Cela peut para&icirc;tre une combine
            pleine d'emb&ucirc;ches, mais c'est en r&eacute;alit&eacute; tr&egrave;s
            simple.</para>
	  
	  <para>Le secret est que le serveur FTP FreeBSD peut vous g&eacute;n&eacute;rer
            des <link linkend="ports-tarball">archives</link> &agrave; la vol&eacute;e. Voici
            comment cela fonctionne, avec toujours comme exemple le programme
            <application>gnats</application> du r&eacute;pertoire des bases de donn&eacute;es
            (les textes entre crochets sont des commentaires. Ne le tapez pas
            si vous essayez cela de votre c&ocirc;t&eacute;!):</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 &eacute;lectronique quand on vous demande un mot de passe. N'oubliez
pas d'utiliser le mode binaire (appel&eacute; aussi 'image')!]
<prompt>&gt;</prompt> <userinput>cd /pub/FreeBSD/ports/databases</userinput>
<prompt>&gt;</prompt> <userinput>get gnats.tar</userinput>
[archive et r&eacute;cup&egrave;re le squelette de gnats]
<prompt>&gt;</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&eacute;s comme &agrave; 
            l'ordinaire au serveur FTP et sommes all&eacute;s dans son sous-r&eacute;pertoire
            des bases de donn&eacute;es. Quand nous lui
            avons donn&eacute; la commande <command>get gnats.tar</command>, le serveur
            FTP a cr&eacute;&eacute; une <link linkend="ports-tarball">archive</link> du
            r&eacute;pertoire gnats &agrave; notre usage.</para>
	  
	  <para>Nous avons alors extrait de cette archive le squelette pour
            gnats qu'elle contenait et sommes all&eacute;s dans le r&eacute;pertoire gnats
            pour compiler et installer le logiciel. Comme nous l'avons expliqu&eacute;
	    <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&eacute;l&eacute;charg&eacute; une avant de l'extraire, de la
            mettre &agrave; jour et de la compiler.</para>
	  
	  <para>Essayons maintenant quelque chose de plus ambitieux. Au lieu
            de r&eacute;cup&eacute;rer un seul squelette, r&eacute;cup&eacute;rons un sous-r&eacute;pertoire
            complet, par exemple, tous les squelettes pour les bases de donn&eacute;es
            du catalogue des logiciels port&eacute;s. La fa&ccedil;on de proc&eacute;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 &eacute;lectronique quand on vous demande un mot de passe. N'oubliez
pas d'utiliser le mode binaire (appel&eacute; aussi 'image')!]
<prompt>&gt;</prompt> <userinput>cd /pub/FreeBSD/ports</userinput>
<prompt>&gt;</prompt> <userinput>get databases.tar</userinput>
[archive et r&eacute;cup&egrave;re les squelettes pour les bases de donn&eacute;es]
<prompt>&gt;</prompt> <userinput>quit</userinput>
&prompt.root; <userinput>tar xf databases.tar</userinput>
[extrait les squelettes de toutes les bases de donn&eacute;es]
&prompt.root; <userinput>cd databases</userinput>
&prompt.root; <userinput>make install</userinput>
[compile et installe les logiciels de base de donn&eacute;es port&eacute;s]</screen>
	  </informalexample>
	  
	  <para>Avec une demi-douzaine de commandes &eacute;l&eacute;mentaires, nous
            disposons maintenant d'un &eacute;ventail de logiciels de base de
            donn&eacute;es sur notre machine FreeBSD. La seule diff&eacute;rence avec
            l'installation d'un seul logiciel est que nous avons r&eacute;cup&eacute;r&eacute;
            et compil&eacute; d'un seul coup tout un r&eacute;pertoire de programmes.
            Impressionnant, non?</para>
	  
	  <para>Si vous envisagez d'installer de nombreux logiciels port&eacute;s, cela
            vaut probablement la peine de t&eacute;l&eacute;charger tous les r&eacute;pertoires du
            catalogue.</para>
	  
	</sect2>
      </sect1>
      
      <sect1 id="ports-skeleton">
	<title>Les squelettes</title>
	
	<para>Une bande de programmeurs compulsifs qui ont oubli&eacute; de manger 
          lors d'une tentative d&eacute;sesp&eacute;r&eacute;e de respecter une &eacute;ch&eacute;ance? Des choses
          d&eacute;sagr&eacute;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&eacute;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&eacute;cisent comment le logiciel doit &ecirc;tre compil&eacute; et install&eacute;. 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
#
# &#36;Id&#36;
#

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 &lt;bsd.port.mk&gt;</programlisting>
	  
	  <para>Les lignes qui commencent par un &ldquo;#&rdquo; sont des
            commentaires &agrave; l'intention des lecteurs humains (comme dans la
            plupart des proc&eacute;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&eacute;sent, c'est un outil pour les 
            d&eacute;veloppeurs.</para>
	  
	  <para><literal>MASTER_SITES</literal> est l'URL(s) du site FTP 
            principal, d'o&ugrave; sera t&eacute;l&eacute;charg&eacute; 
            l'<link linkend="ports-tarball">archive</link>, si elle n'est
            pas disponible sur la machine locale. C'est un site consid&eacute;r&eacute;
            comme fiable, normalement celui de la distribution officielle
            (dans la mesure o&ugrave; un logiciel peut &ecirc;tre 
            &ldquo;officiellement&rdquo; distribu&eacute; sur l'Internet).</para>
	  
	  <para><literal>MAINTAINER</literal> est l'adresse &eacute;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 &lt;bsd.port.mk&gt;</literal> indique que les
            autres directives et commandes n&eacute;cessaires se trouvent dans le 
            fichier g&eacute;n&eacute;rique <filename>bsd.port.mk</filename>. Comme ce sont
            les m&ecirc;mes pour tous les logiciels port&eacute;s, il n'y a pas de raison
            de les dupliquer &agrave; chaque fois, elles sont donc enregistr&eacute;es dans un
	    fichier standard.</para>
	  
	  <para>Ce n'est probablement pas l'endroit o&ugrave; expliquer en d&eacute;tail 
            comment le <filename>Makefile</filename> fonctionne; il suffit de
            pr&eacute;ciser que la ligne qui commence par <literal>MAN3</literal> 
            garantit que les pages de manuel d'ElectricFence seront compress&eacute;es
            apr&egrave;s installation, pour &eacute;conomiser votre pr&eacute;cieux espace disque. Le
            logiciel d'origine ne d&eacute;finissait pas de cible 
	    <maketarget>install</maketarget>, les trois lignes qui commencent &agrave;
	    <maketarget>do-install</maketarget> veillent &agrave; ce que les fichiers
            g&eacute;n&eacute;r&eacute;s soient bien plac&eacute;s l&agrave; o&ugrave; il faut.</para>
	  
	</sect2>
	
	<sect2>
	  <title>Le r&eacute;pertoire <filename>files</filename></title>
	  
	  <para>Le fichier qui contient la <link linkend="ports-checksum">somme
            de contr&ocirc;le</link> pour ce logiciel s'appelle 
	    <filename>md5</filename>, du nom de l'algorithme MD5 utilis&eacute; pour
            la calculer. Il se trouve dans un r&eacute;pertoire au nom quelque peu
            trompeur de <filename>files</filename>.</para>
	  
	  <para>Ce r&eacute;pertoire peut aussi contenir divers fichiers n&eacute;cessaires 
            au portage et qui n'ont pas de raison particuli&egrave;re
            d'&ecirc;tre ailleurs.</para>
	  
	</sect2>
	
	<sect2>
	  <title>Le r&eacute;pertoire <filename>patches</filename></title>
	  
	  <para>Ce r&eacute;pertoire contient les <link linkend="ports-patch">mises &agrave;
            niveau</link> qu'il faut appliquer pour que tout fonctionne
            correctement sous FreeBSD.</para>
	  
	</sect2>
	
	<sect2>
	  <title>Le r&eacute;pertoire <filename>pkg</filename></title>
	  
	  <para>Ce r&eacute;pertoire contient trois fichiers assez utiles:</para>
	  
	    <itemizedlist>
	      
	      <listitem>
		<para><filename>COMMENT</filename>&nbsp;-&nbsp;une description
                  en une seule ligne du logiciel.</para>
	      </listitem>
	      
	      <listitem>
		<para><filename>DESCR</filename>&nbsp;-&nbsp;une description
                  plus d&eacute;taill&eacute;e.</para>
	      </listitem>
	      
	      <listitem>
		<para><filename>PLIST</filename>&nbsp;-&nbsp;la liste de tous 
                  les fichiers qui seront cr&eacute;&eacute;s quand le logiciel sera 
                  install&eacute;.</para>
	      </listitem>
	      
	    </itemizedlist>
	  
	</sect2>
      </sect1>
      
      <sect1 id="ports-troubleshooting">
	<title>Que faire quand un portage &eacute;choue?</title>
	
	<para>Oh. Il y a quatre (4) choses que vous pouvez faire :</para>
	
	  <orderedlist>
	    
	    <listitem>
	      <para>Corriger le probl&egrave;me vous-m&ecirc;me. Vous trouverez des d&eacute;tails
                techniques sur le m&eacute;canisme des portages &agrave; la section
 	       <link linkend="porting">Faire vous-m&ecirc;me un portage</link>.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Rousp&eacute;ter. Cela ne se fait <emphasis>que</emphasis> par
                courrrier &eacute;lectronique! adressez-vous &agrave; la &a.ports; et pr&eacute;cisez
                s'il vous pla&icirc;t le nom et la version du logiciel, sur quel site
                vous avez r&eacute;cup&eacute;r&eacute; 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&eacute;thode la plus facile pour
                la plupart des gens&nbsp;-&nbsp;il y a bien peu de programmes
                du catalogue qui soient vraiment essentiels!</para>
	    </listitem>
	    
	    <listitem>
	      <para>R&eacute;cup&eacute;rer la version pr&eacute;compil&eacute;e sur un serveur ftp. Le 
                catalogue de r&eacute;f&eacute;rence des logiciels pr&eacute;compil&eacute;s se trouve
                sur le serveur FTP de FreeBSD dans le r&eacute;pertoire des
		<ulink 
                 url="ftp://ftp.FreeBSD.org/pub/FreeBSD/packages/">logiciels
                pr&eacute;compil&eacute;s</ulink>, bien que nous souhaiterions 
                s'il vous pla&icirc;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&egrave;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&eacute;compil&eacute; sur
                votre syst&egrave;me.</para>
	    </listitem>
	    
	  </orderedlist>
	
      </sect1>
      
      <sect1>
	<title>Quelques questions et leurs r&eacute;ponses</title>
	
	  <itemizedlist>
	    
	    <listitem>
	      <para>Q. Je pensais que cela allait &ecirc;tre une discussion sur les
		modems??!</para>
	      
	      <para>R. Ah. Vous pensiez peut-&ecirc;tre aux &ldquo;ports&rdquo;
                s&eacute;rie sur la face arri&egrave;re de votre ordinateur. Nous utilisons 
                ici le terme 
               &ldquo;port&rdquo;&nbsp;-&nbsp;logiciels port&eacute;s&nbsp;-&nbsp;pour
                parler du r&eacute;sultat du &ldquo;portage&rdquo; d'un logiciel d'une
                version d'Unix &agrave; une autre. (Les informaticiens ont la f&acirc;cheuse
                habitude d'employer le m&ecirc;me mot pour parler de choses 
                diff&eacute;rentes.)</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Je pensais qu'il fallait utiliser des 
                &ldquo;paquetages&rdquo; pour installer des logiciels
                suppl&eacute;mentaires.</para>
	      
	      <para>R. Oui, c'est habituellement la fa&ccedil;on la plus rapide et la
                plus facile de le faire.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Pourquoi alors se pr&eacute;occuper de logiciels port&eacute;s?</para>
	      
	      <para>R. Il y a plusieurs raisons:</para>
	      
		<orderedlist>
		  
		  <listitem>
		    <para>Les licences de certains logiciels stipulent qu'ils 
                      doivent &ecirc;tre distribu&eacute;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&eacute;orie) le lire pour y rep&eacute;rer d'&eacute;ventuels 
                      probl&egrave;mes.</para>
		  </listitem>
		  
		  <listitem>
		    <para>Si vous avez des corrections/&eacute;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&eacute;rentes de celles qu'a utilis&eacute;es la personne
                      qui a construit le 
                      &ldquo;paquetage&rdquo;&nbsp;-&nbsp;certains ont des
                      opinions bien arr&ecirc;t&eacute;es sur la mani&egrave;re dont il faut 
                      optimiser, sur le fait qu'il faut ou non disposer de
                      versions d&eacute;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&egrave;me, le modifier, en emprunter des
                      morceaux (si la licence le permet, bien s&ucirc;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 
                &ldquo;patch&rdquo;&nbsp;-&nbsp;mise &agrave; jour?</para>
	      
	      <para>R. Un &ldquo;patch&rdquo; est (habituellement) un petit 
                fichier qui pr&eacute;cise comment passer d'une version &agrave; une autre. Il
                contient du texte qui dit, par exemple, des choses comme
                &ldquo;effacez la ligne 23&rdquo;, &ldquo;ajoutez ces deux 
                lignes apr&egrave;s la ligne 468&rdquo; ou &ldquo;modifiez comme suit
                la ligne 197&rdquo;. On appelle aussi cela un 
                &ldquo;diff&rdquo; parce qu'il est g&eacute;n&eacute;r&eacute; avec un programme
                du m&ecirc;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&ecirc;me <filename>.tgz</filename>
		si vous voulez utiliser ces noms de fichiers avec un syst&egrave;mes
                de fichiers DOS).</para>
	      
	      <para>C'est essentiellement une arborescence de r&eacute;pertoires qui a 
                &eacute;t&eacute; archiv&eacute;e en un seul fichier (<filename>.tar</filename>) et
                &eacute;ventuellement compress&eacute; (<filename>.gz</filename>). Cette
                technique &eacute;tait &agrave; l'origine utilis&eacute;e pour les
		&ldquo;<emphasis>T</emphasis>ape&rdquo;&nbsp;-&nbsp;bande&nbsp;-&nbsp;&ldquo;<emphasis>AR</emphasis>chives&rdquo;
                (d'o&ugrave; le nom <command>tar</command>), mais c'est une m&eacute;thode 
                tr&egrave;s utilis&eacute;e pour distribuer du code source sur 
                l'Internet.</para>
	      
	      <para>Vous pouvez avoir la liste des fichiers qu'elles 
                contiennent, ou m&ecirc;me les extraire vous-m&ecirc;me, avec le programme
                Unix standard <command>tar</command>, qui fait partie du syst&egrave;me
                FreeBSD de base, comme ceci:</para>
	      
	      <informalexample>
		<screen>&prompt.user; <userinput>tar tvzf foobar.tar.gz</userinput> # conna&icirc;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&eacute;pertoire courant
&prompt.user; <userinput>tar tvf foobar.tar</userinput>     # conna&icirc;tre le contenu de foobar.tar
&prompt.user; <userinput>tar xvf foobar.tar</userinput>     # extraire le contenu de foobar.tar dans le r&eacute;pertoire courant
		</screen>
	      </informalexample>
	    </listitem>
	    
	    <listitem>
	      <para><anchor id="ports-checksum"> Q. Et une somme de 
                contr&ocirc;le?</para>
	      
	      <para>R. C'est un nombre calcul&eacute; en additionnant tout ce que 
                contient le fichier. Si un caract&egrave;re change, la somme de 
                contr&ocirc;le n'est plus la m&ecirc;me, et une simple comparaison vous
                permettra de rep&eacute;rer la diff&eacute;rence. (En pratique, le calcul
                est un peu plus compliqu&eacute; pour pouvoir rep&eacute;rer des probl&egrave;mes
                comme les permutations de caract&egrave;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&eacute;s depuis 
                le CD-ROM</link> et &ccedil;a a march&eacute; sans probl&egrave;me jusqu'&agrave; ce que
                j'essaie d'installer <command>kermit</command></para>

		<informalexample>
		  <screen>&prompt.root; <userinput>make install</userinput>
&gt;&gt; cku190.tar.gz doesn't seem to exist on this system.
&gt;&gt; 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&eacute;?</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&eacute;cup&eacute;rez vous-m&ecirc;me&nbsp;-&nbsp;d&eacute;sol&eacute;! Vous avez tous ces
                messages d'erreur parce que vous n'&eacute;tiez pas alors connect&eacute; &agrave;
                l'Internet. Une fois que vous l'avez t&eacute;l&eacute;charg&eacute; &agrave; partir de l'un
                des sites mentionn&eacute;s, vous pouvez recommencer l'installation
                (essayez et choisissez le site le plus proche, pour &eacute;conomiser 
                votre temps et de la bande passante);</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Je l'ai fait, mais quand j'ai essay&eacute; de la mettre
                dans <filename>/usr/ports/distfiles</filename>, j'ai eu des
                erreurs &agrave; propos de permissions que je n'avais pas.</para>
	      
	      <para>R. Le m&eacute;canisme des logiciels port&eacute;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&egrave;me des logiciels port&eacute;s ne fonctionne-t-il 
                qu'avec <filename>/usr/ports</filename>? Mon administrateur 
                syst&egrave;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&eacute;canisme des logiciels port&eacute;s de travailler dans
                d'autres r&eacute;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&ucirc;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&egrave;rement
                sur la page, mais je suis s&ucirc;r que vous avez compris le 
                principe).</para>
	      
	      <para>Si vous ne voulez pas avoir &agrave; retaper tout cela &agrave; chaque
                fois que vous installez un logiciel (et pour &ecirc;tre honn&ecirc;te,
                pourquoi le feriez-vous?), c'est une bonne id&eacute;e de d&eacute;finir
                ces deux variables dans votre environnement par d&eacute;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&egrave;me pour ne pas avoir &agrave; 
                attendre la fin du t&eacute;l&eacute;chargement chaque fois que j'installe un
                logiciel. y-a-t-il une fa&ccedil;on simple de tout r&eacute;cup&eacute;rer d'un 
                coup?</para>
	      
	      <para>R. Pour r&eacute;cup&eacute;rer toutes les archives du catalogue des
                logiciels port&eacute;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&eacute;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&nbsp;-&nbsp;bon, je suppose que vous 
                avez d&eacute;j&agrave; devin&eacute;.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Je sais qu'il est probablement plus rapide de r&eacute;cup&eacute;rer
                les archives de sites miroir FreeBSD proches. Y'a-t-il un moyen 
                de dire au m&eacute;canisme de s'adresser &agrave; d'autres serveurs que ceux
                list&eacute;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&egrave;s que
                les sites list&eacute;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&eacute;l&eacute;charger.</para>
	      
	      <para>R. <command>make fetch-list</command> affichera la liste des
                fichiers n&eacute;cessaires pour installer un logiciel port&eacute;.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Y-a-t il un moyen de faire en sorte que le logiciel ne
                soit pas compil&eacute;. Je veux modifier les sources avant de le
                compiler et c'est fastidieux de surveiller ce qui ce passe &agrave;
                chaque fois et de toujours taper Ctrl-C.</para>
	      
	      <para>R. <command>make extract</command> ne fait que r&eacute;cup&eacute;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&eacute; avant que j'ai pu v&eacute;rifier que les mises &agrave; 
                jour aient &eacute;t&eacute; correctement appliqu&eacute;es. Y-a-t-il un &eacute;quivalent
                de <command>make extract</command>, pour les mises &agrave; 
                jour?</para>
	      
	      <para>A. Oui, <command>make patch</command> est ce qu'il vous 
                faut. Vous trouverez peut-&ecirc;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&egrave;mes. Est-ce exact? Comment puis-je &ecirc;tre s&ucirc;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&eacute;e avec FreeBSD 2.1.0 et 2.1.5), l'option 
                <option>-O2</option> pouvait g&eacute;n&eacute;rer du code bogu&eacute;, &agrave; moins que
                vous n'utilisiez en m&ecirc;me temps l'option
		<option>-fno-strength-reduce</option>. (La plupart des logiciels
                port&eacute;s n'utilisent pas l'option <option>-O2</option>). Vous
		<emphasis>devriez</emphasis> pouvoir pr&eacute;ciser au compilateur les
                options &agrave; utiliser avec quelque chose comme:</para>
	      
	      <informalexample>
		<screen>&prompt.root; <userinput>make CFLAGS='-O2 -fno-strength-reduce' install</userinput></screen>
	      </informalexample>
	      
	      <para>ou en &eacute;ditant <filename>/etc/make.conf</filename>, mais tous
                les logiciels port&eacute;s n'en tiennent malheureusement pas compte.
                Le plus s&ucirc;r est d'utiliser <command>make configure</command>, 
                puis d'aller dans le r&eacute;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&eacute;pertoires avec
                chacun leurs <filename>Makefile</filename>s.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Il y a tellement de logiciels port&eacute;s qu'il est difficile
                de trouver celui que je veux. Y-a-t-il quelque part une liste 
                des logiciels port&eacute;s?</para>
	      
	      <para>R. Regardez dans le fichier <filename>INDEX</filename> 
                du r&eacute;pertoire <filename>/usr/ports</filename>.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. J'ai install&eacute; le logiciel <literal>foo</literal> mais le
                m&eacute;canisme s'est soudainement interrompu et a commenc&eacute; &agrave; 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>&nbsp;-&nbsp;par
                exemple, si <literal>foo</literal> utilise des graphiques, 
                <literal>bar</literal> peut comporter une biblioth&egrave;que avec des
                sous-programmes graphiques utiles. Ou bien 
                <literal>bar</literal> est un outil n&eacute;cessaire &agrave; la compilation
                du logiciel <literal>foo</literal>.</para>
	    </listitem>
	    
	    <listitem>
	      <para><anchor id="ports-remove">Q. J'ai install&eacute; 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&ugrave; il a mis tous les fichiers. Des 
                indications?</para>
	      
	      <para>R. Pas de probl&egrave;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&icirc;tre le num&eacute;ro de version pour 
                utiliser cette commande. Vous ne vous attendez s&eacute;rieusement pas
                &agrave; 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&eacute;thode de piano, l'interpr&eacute;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&eacute;s occupe apparemment &eacute;norm&eacute;ment de place. Est-il possible
                d'y faire du m&eacute;nage?</para>
	      
	      <para>R. Oui, si vous avez install&eacute; un programme et &ecirc;tes &agrave; peu
                pr&egrave;s certain que vous n'aurez plus besoin des sources, il est
                inutile de les garder. La meilleure fa&ccedil;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&eacute;pertoires et supprimera tout
                ce qui se rapporte aux logiciels sauf les squelettes.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. J'ai essay&eacute;, mais il reste toujours toutes ces archives,
                quelque soit le nom que vous leur donniez, dans le r&eacute;pertoire
		<filename>distfiles</filename>. Puis-je aussi les 
                effacer?</para>
	      
	      <para>R. Oui, si vous &ecirc;tes s&ucirc;r d'en avez termin&eacute; avec elles, vous
                pouvez aussi les supprimer.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. J'aime avoir quantit&eacute; 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&eacute;, mais comme je pensais que cela allait
                prendre beaucoup de temps, j'ai laiss&eacute; la machine telle quelle
                et je suis all&eacute; me coucher. Ce matin, quand j'ai jet&eacute; une coup
                d'oeil &agrave; l'ordinateur, je n'avais que trois logiciels et demi 
                install&eacute;s. Quelque chose s'est-il mal pass&eacute;?</para>
	      
	      <para>R. Non, le probl&egrave;me est que certains logiciels ont des
                questions &agrave; vous poser auxquelles ils ne peuvent r&eacute;pondre &agrave;
                votre place (par exemple, &ldquo;Voulez-vous imprimer au format
                A4 ou au format l&eacute;gal US?&rdquo;) et il faut donc que quelqu'un
                y r&eacute;ponde sur le moment.</para>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Je ne veux pas passer toute la journ&eacute;e plant&eacute; devant 
                l'&eacute;cran. Une meilleure id&eacute;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&eacute;s, mais nous
                l'avons un peu modifi&eacute; pour nos besoins propres. Y-a-t-il un 
                moyen de faire notre propre &ldquo;paquetage&rdquo; pour le
                distribuer plus facilement sur nos sites?</para>
	      
	      <para>R. Pas de probl&egrave;me, si vous savez comment g&eacute;n&eacute;rer les
                &ldquo;patches&rdquo; 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 &agrave; jour]
&prompt.root; <userinput>cd ../..</userinput>
&prompt.root; <userinput>make package</userinput></screen>
	      </informalexample>
	    </listitem>
	    
	    <listitem>
	      <para>Q. Ce syst&egrave;me des logiciels port&eacute;s est vraiment g&eacute;nial. Je
                d&eacute;sesp&egrave;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&eacute;pertoire des
                  <ulink url="file://localhost/usr/share/mk/"><filename>makefile</filename>s.</ulink></para>

	      <note>
		<para>Cette lecture est d&eacute;conseill&eacute;e &agrave; ceux que les proc&eacute;dures 
                  de commandes compliqu&eacute;es rebutent...)</para>
	      </note>
	    </listitem>
	    
	  </itemizedlist>
	
      </sect1>

      <sect1 id="porting">
        <title>** Faire vous-m&ecirc;me un portage</title>
	  
        <para><emphasis>Contribution de &a.jkh;, &a.gpalmer;, &a.asami;
          &a.obrien; et &a.hoek;. 28 Ao&ucirc;t 1996.</emphasis></para>

	<para>Donc, vous voulez faire vous-m&ecirc;me votre propre portage?
	  G&eacute;nial!</para>
	
	  <para>Voici quelques indications sur la fa&ccedil;on de cr&eacute;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&eacute;. Reportez-vous s'il vous pla&icirc;t &agrave; ce fichier pour avoir plus
            de d&eacute;tails sur le fonctionnement interne du catalogue des logiciels
            port&eacute;s. M&ecirc;me si vous n'&eacute;crivez pas tous les jours des 
            <filename>Makefile</filename>s, il est pas mal comment&eacute;, et vous
            en apprendrez malgr&eacute; tout beaucoup de choses.</para>
	  
	<note>
	  <para>Seule une partie des variables surchargeables 
	    (<makevar><replaceable>VAR</replaceable></makevar>) est d&eacute;crite
	    dans ce document. La plupart (sinon toutes) sont explicit&eacute;es au   
	    d&eacute;but de <filename>bsd.port.mk</filename>. Ce fichier utilise des
            tabulations non standard. <application>Emacs</application> et
	    <application>Vim</application> devraient reconna&icirc;tre cette 
            configuration au chargement du fichier. <command>vi</command> ou
            <command>ex</command> peuvent &ecirc;tre configur&eacute;s avec la valeur
            ad&eacute;quate apr&egrave;s avoir charg&eacute; 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&eacute;cup&eacute;rer le fichier d'archive d'origine et 
              mettez-le dans <makevar>DISTDIR</makevar>, par d&eacute;faut c'est le
	      r&eacute;pertoire <filename>/usr/ports/distfiles</filename>.</para>
	    
	    <note>
	      <para>Nous supposerons dans ce qui suit que le source a compil&eacute;
                &ldquo;tel quel&rdquo;, i.e., il n'y a absolument pas eu de 
                modification &agrave; y apporter pour qu'il tourne sur votre machine 
                FreeBSD. Si vous avez d&ucirc; changer quelque chose, vous devrez 
                aussi vous reporter &agrave; la section suivante.</para>
	    </note>
	    
	    <sect3>
	      <title>Ecrire le <filename>Makefile</filename></title>
	      
	      <para>Le <filename>Makefile</filename> minimal ressemblera &agrave;
                ceci&nbsp;:</para>
	      
	      <programlisting>
# Nouveau makefile du catalogue pour: oneko
# Version correspondante:             1.1b
# Date de cr&eacute;ation:                   5 D&eacute;cembre 1994
# Par:                                asami
#
# &#36;Id&#36;
#
       
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 &lt;bsd.port.mk&gt;</programlisting>
	      
	      <para>Voyez si vous y comprenez quelque chose. Ne vous occupez
                pas de la ligne <literal>&#36;Id&#36;</literal>, elle sera
                automatiquement renseign&eacute;e par CVS quand le logiciel sera
                import&eacute; dans notre arborescence principale des logiciels
                port&eacute;s. Vous trouverez un exemple plus d&eacute;taill&eacute; &agrave; la section
		<link linkend="porting-samplem">Exemple de 
                Makefile</link>.</para>
	      
	    </sect3>
	    
	    <sect3>
	      <title>Cr&eacute;er les fichiers de description</title>
	      
	      <para>Il y a trois fichiers de description indispensables &agrave;
                chaque logiciel port&eacute;, qu'il soit ou non pr&eacute;compil&eacute;. Ce sont
                les fichiers <filename>COMMENT</filename>,
		<filename>DESCR</filename> et <filename>PLIST</filename>,
		du sous-r&eacute;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&icirc;t</emphasis>, n'incluez pas le nom
                   du logiciel (ni son num&eacute;ro de version) dans le commentaire.
                   Voici un exemple&nbsp;:</para>

		  <programlisting>
Un chat poursuit une souris &agrave; travers l'&eacute;cran.</programlisting>
		
	      </sect4>
	      
	      <sect4>
		<title><filename>DESCR</filename></title>
		
		<para>C'est une description plus longue du logiciel. Un &agrave;
                  quelques paragraphes, expliquant succintement ce qu'il
                  fait, suffisent.</para>

		<note>
		  <para>Ce <emphasis>n'est pas</emphasis> un manuel, ni
                  une description d&eacute;taill&eacute;e de la mani&egrave;re de compiler et
                  d'utiliser le logiciel. Faites 
                  <emphasis>s'il vous pla&icirc;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&eacute;es (e.g., les
                  pages de manuel sont justifi&eacute;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&eacute; de signer en fin de fichier, comme
                  suit:</para>
		
		<programlisting>
C'est le portage de &ldquo;oneko&rdquo;, le chat qui poursuit la pauvre souris
sur tout l'&eacute;cran.
&nbsp;:
(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&eacute;s pour ce
                  logiciel. On l'appelle aussi &ldquo;liste de paquetage&rdquo;
                  parce que le &ldquo;paquetage&rdquo; sera g&eacute;n&eacute;r&eacute; en archivant
                  tous les fichiers de cette liste. Les chemins d'acc&egrave;s sont
                  relatifs &agrave; <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&eacute;tails sur la &ldquo;liste de 
                  paquetage&rdquo;.</para>

	      <note>
		<para>Vous devez lister tous les fichiers, mais pas les noms
                  des r&eacute;pertoires. Par contre, s'il y a des r&eacute;pertoires cr&eacute;&eacute;s
                  &agrave; l'installation, veillez &agrave; ajouter les lignes
		  <literal>@dirrm</literal> n&eacute;cessaires pour qu'ils soient
                  d&eacute;truits si le logiciel est d&eacute;sinstall&eacute;.</para>

		<para>Il est recommand&eacute; de lister les fichiers dans l'ordre
                  alphab&eacute;tique. Cela facilite beaucoup les contr&ocirc;les lors des
                  mises &agrave; jour.</para>
	      </note>
	      </sect4>
	    </sect3>
	    
	    <sect3>
	      <title>Cr&eacute;er le fichier pour la somme de contr&ocirc;le</title>
	      
	      <para>Tapez simplement <command>make makesum</command>.
		Les r&egrave;gles de construction des logiciels port&eacute;s g&eacute;n&egrave;reront
                automatiquement le fichier 
                <filename>files/md5</filename>.</para>
	      
	    </sect3>
	    
	    <sect3 id="porting-testing">
	      <title>Tester le portage</title>
	      
	      <para>Vous devez v&eacute;rifiez que les r&egrave;gles de construction du 
                logiciel port&eacute; font exactement ce que vous voulez. Voici
                les points importants &agrave; contr&ocirc;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 &ecirc;tre install&eacute; plusieurs fois de suite
                  en utilisant la cible 
                  <maketarget>reinstall</maketarget>.</para>
	      </listitem>

	      <listitem>
		<para>Le m&eacute;canisme de portage du logiciel 
                  <link linkend="porting-cleaning">fait le m&eacute;nage</link> 
                  lors de la d&eacute;sinstallation.</para>
	      </listitem>
	    </itemizedlist>

	    <procedure>
	      <title>Ordre de test recommand&eacute;</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&eacute;rifiez qu'il n'y a aucun message d'avertissement
              aux &eacute;tapes <maketarget>package</maketarget> et
	      <maketarget>deinstall</maketarget>. Apr&egrave;s l'&eacute;tape 3, v&eacute;rifiez
              que tous les r&eacute;pertoires cr&eacute;&eacute;s ont bien &eacute;t&eacute; d&eacute;truits. Essayez
              aussi d'utilisez le logiciel apr&egrave;s l'&eacute;tape 4, pour vous assurer
              qu'il fonctionne correctement apr&egrave;s installation sous forme 
              de &ldquo;paquetage&rdquo;.</para>
	    </sect3>

	  <sect3 id="porting-portlint">
	    <title>V&eacute;rifier votre portage avec 
              <command>portlint</command></title>

	    <para>Utilisez s'il vous pla&icirc;t la commande 
              <command>portlint</command> pour contr&ocirc;ler que votre portage
              se conforme &agrave; nos recommandations. 
	      Le programme <command>portlint</command> fait partie du catalogue
              des logiciels port&eacute;s.  En particulier, vous devriez v&eacute;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 &agrave; lire la section <link
	      linkend="porting-dads">A faire et &agrave; ne pas 
              faire</link>.</para>
	  
	      <para>Maintenant que vous &ecirc;tes satisfait de votre portage, la
                seule chose qui reste &agrave; faire est de le mettre dans 
                l'arborescence principale des logiciels port&eacute;s de FreeBSD
                de fa&ccedil;on &agrave; ce que tout le monde en profite. Nous n'avons
                pas besoin de votre r&eacute;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&eacute;sultat de la commande <command>shar `find r&eacute;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&eacute;n&eacute;raux</link> pour plus 
                d'informations sur <citerefentry>
		  <refentrytitle>send-pr</refentrytitle>
	      <manvolnum>1</manvolnum>
	      </citerefentry>.) Si le logiciel port&eacute; non compress&eacute; fait plus de 
                20KB, vous devrez en faire une archive compress&eacute;e et utiliser
	        <citerefentry><refentrytitle>uuencode</refentrytitle>
	        <manvolnum>1</manvolnum>
	    </citerefentry> avant de l'inclure dans le rapport (les archives
                &ldquo;tar&rdquo; &ldquo;uuencod&eacute;es&rdquo; sont admises m&ecirc;me
                si le rapport de bogue fait moins de 20KB, quoique non 
                souhait&eacute;es dans ce cas). Veillez &agrave; classer le rapport dans la 
                cat&eacute;gorie
	        <literal>ports</literal>&nbsp;-&nbsp;&ldquo;portages&rdquo; et
                la classe
	        <literal>change-request</literal>&nbsp;-&nbsp;&ldquo;demande
                de modification&rdquo;. (Ne classez pas le rapport
  	      <literal>confidential</literal>&nbsp;-&nbsp;&ldquo;confidentiel&rdquo;&nbsp;!)</para>

	  <para>Encore une fois, <emphasis>n'incluez pas la distribution 
            originale du source, le r&eacute;pertoire <filename>work</filename> ni le
            &ldquo;paquetage&rdquo; construit avec <command>make
		package</command></emphasis>.</para>

	    <note>
	      <para>Dans le pass&eacute;, nous demandions que les soumissions de
                logiciels port&eacute;s passent par notre site ftp
		(<hostid role="fqdn">ftp.freebsd.org</hostid>). Ce n'est plus
                souhaitable parce que l'acc&egrave;s en lecture est interdit sur le
                r&eacute;pertoire <filename>incoming/</filename> de ce site du fait
                de la trop grande quantit&eacute; de logiciels pirat&eacute;s qui y 
                atterrissaient.</para>
	    </note>
	    
	  <para>Nous regarderons votre portage, vous contacterons si n&eacute;cessaire,
            et le mettrons dans l'arborescence. Votre nom appara&icirc;tra aussi dans
            la liste des &ldquo;Autres collaborateurs de FreeBSD&rdquo; du
            manuel FreeBSD et dans d'autres fichiers. G&eacute;nial, 
            non?!? <!-- smiley -->:)</para>
	      
	    </sect3>
	  </sect2>
	  
	  <sect2>
	    <title>Portage &eacute;volu&eacute;</title>
	    
	    <para>Bon, ce n'&eacute;tait en fait pas si simple, et il a fallu
              modifier le code pour que le portage fonctionne. Dans cette
              section, nous allons expliquer, &eacute;tape par &eacute;tape, comment faire
              dans ce cas pour appliquer le paradigme des logiciels 
              port&eacute;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&eacute;pertoire de votre logiciel port&eacute;. Ouvrir le fichier
		<filename>bsd.port.mk</filename> dans une autre fen&ecirc;tre
                pendant que vous lisez ceci vous en facilitera la
                compr&eacute;hension.</para>
	      
	      <para>Ne vous inqui&eacute;tez pas si vous ne comprenez pas compl&egrave;tement
                ce que fait <filename>bsd.port.mk</filename>, peu de gens y
		arrivent... <!-- smiley --><emphasis>:&gt;</emphasis></para>
	      
		<procedure>
		  
		  <step>
		    <para>La cible <maketarget>fetch</maketarget> est ex&eacute;cut&eacute;e.
                      La cible <maketarget>fetch</maketarget> est charg&eacute;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 &agrave; l'URL
		      <makevar>MASTER_SITES</makevar>, d&eacute;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&ugrave; nous avons mis les archives
                      valid&eacute;es, &agrave; titre de copie de secours. Elle essayera alors
                      de rapatrier le fichier de la distribution avec
                      <makevar>FETCH</makevar>, en pr&eacute;sumant que la machine
                      qui fait la demande a un acc&egrave;s direct &agrave; l'Internet. En
                      cas de succ&egrave;s, le fichier est sauvegard&eacute; dans 
                      <makevar>DISTDIR</makevar> pour la suite, et le traitement
                      peut continuer.</para>
		  </step>
		  
		  <step>
		    <para>La cible <maketarget>extract</maketarget> est ensuite
                      ex&eacute;cut&eacute;e. Elle cherche le fichier de distribution de votre
                      portage (typiquement une archive cr&eacute;&eacute;e par 
                      <command>tar</command> et compress&eacute;e avec 
                      <command>gzip</command>) dans
		      <makevar>DISTDIR</makevar> et en extrait le contenu dans
                      un sous-r&eacute;pertoire temporaire d&eacute;fini par
		      <makevar>WRKDIR</makevar>
		      (par d&eacute;faut <filename>work</filename>).</para>
		  </step>
		  
		  <step>
		    <para>La cible suivante est <maketarget>patch</maketarget>.
                      Dans un premier temps, tous les fichiers de mise &agrave; jour 
                      d&eacute;finis dans <makevar>PATCHFILES</makevar> sont appliqu&eacute;s.
                      Ensuite, s'il y a des fichiers de mise &agrave; jour dans
		      <makevar>PATCHDIR</makevar> (le sous-r&eacute;pertoire
		      <filename>patches</filename> par d&eacute;faut), ils sont
                      appliqu&eacute;s, dans l'ordre alphab&eacute;tique cette fois-ci.</para>
		  </step>
		  
		  <step>
		    <para>Vient ensuite <maketarget>configure</maketarget> qui
                      peut faire l'une des op&eacute;rations suivantes:</para>
		      
		      <orderedlist>
			
			<listitem>
			  <para>Si elle existe, ex&eacute;cuter la proc&eacute;dure
			    <filename>scripts/configure</filename>.</para>
			</listitem>
			
			<listitem>
			  <para>Si <makevar>HAS_CONFIGURE</makevar> ou
			    <makevar>GNU_CONFIGURE</makevar>
			    est d&eacute;finie, ex&eacute;cuter
		<filename><makevar>WRKSRC</makevar>/configure</filename>.</para>
			</listitem>
			
			<listitem>
			  <para>Si <makevar>USE_IMAKE</makevar> est d&eacute;finie,
			    ex&eacute;cuter <makevar>XMKMF</makevar>
			    (par d&eacute;faut: <command>xmkmf
			      -a</command>).</para>
			</listitem>
			
		      </orderedlist>
		      
		  </step>
		  
		  <step>
		    <para>La derni&egrave;re cible est 
                      <maketarget>build</maketarget>. Elle passe dans le
                      sous-r&eacute;pertoire de travail du portage 
                      (<makevar>WRKSRC</makevar>) et se charge de la
                      compilation. Si la variable <makevar>USE_GMAKE</makevar> 
                      est d&eacute;finie, la commande <command>make</command> GNU est
                      utilis&eacute;e, sinon c'est la commande <command>make</command>
		      du syst&egrave;me qui est employ&eacute;e.</para>
		  </step>
		  
		</procedure>
	      
	      <para>Ce sont les op&eacute;rations par d&eacute;faut. Vous pouvez en plus 
                d&eacute;finir des cibles
		<maketarget>pre-<replaceable>quelque_chose</replaceable></maketarget> 
                ou <maketarget>post-<replaceable>quelque_chose</replaceable></maketarget>, 
                ou mettre des proc&eacute;dures du m&ecirc;me nom dans le sous-r&eacute;pertoire
		<filename>scripts</filename>, et elles pr&eacute;c&eacute;deront ou suivront
                les op&eacute;rations par d&eacute;faut.</para>
	      
	      <para>Par exemple, si vous avez d&eacute;fini une cible
                <maketarget>post-extract</maketarget> dans votre
		<filename>Makefile</filename>, et cr&eacute;&eacute; un fichier
                <filename>pre-build</filename> dans le sous-r&eacute;pertoire
		<filename>scripts</filename>, la cible
		<maketarget>post-extract</maketarget> sera invoqu&eacute;e apr&egrave;s
                l'op&eacute;ration habituelle d'extraction et la proc&eacute;dure
		<filename>pre-build</filename> ex&eacute;cut&eacute;e avant d'appliquer les
                r&egrave;gles de compilation par d&eacute;faut. Il est recommand&eacute; d'utiliser
                des cibles dans le <filename>Makefile</filename> si les actions
                sont suffisamment &eacute;l&eacute;mentaires, car il est alors plus facile &agrave;
                quelqu'un d'autre de voir quelles sont les op&eacute;rations
                suppl&eacute;mentaires effectu&eacute;es lors du portage.</para>
	      
	      <para>Les op&eacute;rations par d&eacute;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&eacute;finies par la cible
		<maketarget>do-extract</maketarget>. Si la cible par d&eacute;faut ne
                vous convient pas, vous pouvez r&eacute;definir 
		<maketarget>do-<replaceable>quelque_chose</replaceable></maketarget>
		dans votre <filename>Makefile</filename>.</para>

	      <note>
		<para>Les cibles &ldquo;principales&rdquo; (e.g., <maketarget>extract</maketarget>, <maketarget>configure</maketarget>, etc.) ne font rien 
                 d'autre que de s'assurer que les &eacute;tapes qui les pr&eacute;c&egrave;dent se
                 sont bien d&eacute;roul&eacute;es et appellent les vrais cibles ou
                 proc&eacute;dures. Elles ne doivent donc pas &ecirc;tre modifi&eacute;es. Si vous
                 voulez changer la m&eacute;thode d'extraction, red&eacute;finissez
		 <maketarget>do-extract</maketarget>, mais ne modifiez pas
		 <maketarget>extract</maketarget>&nbsp;!</para>
	      </note>
	      
	      <para>Maintenant que vous avez compris ce qui se passe quand 
                l'utilisateur tape <command>make</command>, passons en revue
   	        les &eacute;tapes conseill&eacute;es pour cr&eacute;er le portage parfait.</para>
	      
	    </sect3>
	    
	    <sect3>
	      <title>Obtenez les sources d'origine</title>
	      
	      <para>R&eacute;cup&eacute;rez les sources d'origine (normalement) sous forme
                d'archive compress&eacute;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&egrave;re main</emphasis> si vous le
                pouvez.</para>
	      
	      <para>Si vous ne trouvez pas de site ftp/http correctement
                accessible sur le r&eacute;seau, ou ne trouvez que des sites qui
                utilisent des formats non standard, vous voudrez peut-&ecirc;tre
                mettre une copie sur un serveur ftp ou http fiable que vous
                contr&ocirc;lez (e.g., votre page personnelle). Veillez &agrave; d&eacute;finir
	        <makevar>MASTER_SITES</makevar> pour refl&eacute;ter ce choix.</para>

	    <para>Si vous ne trouvez aucun endroit ad&eacute;quat et fiable o&ugrave; mettre
              la distribution (si vous y &ecirc;tes autoris&eacute;, vous pouvez la mettre
              dans votre sous-r&eacute;pertoire <filename>public_html/</filename> sur
	      <hostid>freefall</hostid>), nous pouvons en dernier ressort
              &ldquo;l'accueillir&rdquo; nous-m&ecirc;me en la mettant dans
              <filename>ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/LOCAL_PORTS/</filename>. 
              D&eacute;finissez cette adresse dans
	      <makevar>MASTER_SITE_LOCAL</makevar>. Adressez un courrier
              &eacute;lectronique &agrave; la &a.ports;, si vous n'&ecirc;tes pas s&ucirc;r de ce qu'il
              faut faire.</para>

	    <para>Si la distribution est fr&eacute;quemment modifi&eacute;e sans raison
              valable, envisagez de la recopier sur votre page personnelle et
              listez-la en premier dans <makevar>MASTER_SITES</makevar>. Cela
              &eacute;vitera que les utilisateurs aient des erreurs 
              &ldquo;<errorname>checksum mismatch</errorname>&rdquo;
              sur les sommes de contr&ocirc;le, et r&eacute;duira aussi
              le travail des personnes charg&eacute;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&eacute; que vous ayez une sauvegarde sur 
              votre site et qu'elle soit mentionn&eacute;e en second lieu dans
	      <makevar>MASTER_SITES</makevar>.</para>
	    
	      <para>S'il faut d'autres &ldquo;patches&rdquo; disponibles sur
                l'Internet pour ce portage, r&eacute;cup&eacute;rez-les aussi et mettez-les
                dans <makevar>DISTDIR</makevar>. Ce n'est pas un probl&egrave;me s'ils
                proviennent d'autres sites que la distribution de base, nous
                pouvons g&eacute;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&eacute;pertoire
                priv&eacute; et faites-y les modifications n&eacute;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&ocirc;t automatiser ces
                op&eacute;rations. Tout, y compris suppressions, ajouts et 
                modifications de fichiers doit pouvoir &ecirc;tre fait par des
                proc&eacute;dures ou fichiers de mise &agrave; jour une fois que vous aurez
                termin&eacute; le portage.</para>
                 
	      <para>Si le portage demande l'intervention ou des choix de 
                l'utilisateur &agrave; la compilation ou &agrave; l'installation, vous
                devriez jeter un oeil aux proc&eacute;dures classiques
                <application>Configure</application> de Larry Wall, et peut-&ecirc;tre
                faire quelque chose du m&ecirc;me genre. L'objectif du nouveau
                catalogue des logiciels port&eacute;s est que chaque logiciel soit
                aussi &ldquo;pr&ecirc;t-a-l'emploi&rdquo; que possible pour
                l'utilisateur final, tout en utilisant le minimum d'espace
		disque.</para>

	      <note>
		<para>Sauf si vous le pr&eacute;cisez explicitement, tous les fichiers
                  de mise &agrave; jour, proc&eacute;dures et fichiers que vous aurez cr&eacute;&eacute;s
                  et introduits comme contribution au catalogue des logiciels
                  port&eacute;s sont suppos&eacute;s couverts par les conditions standard
		  de copyright BSD.</para>
	      </note>
	    </sect3>
	    
	    <sect3>
	      <title>Modifications</title>
	      
	      <para>Les fichiers ajout&eacute;s ou modifi&eacute;s pendant la mise au point 
                du portage peuvent &ecirc;tre identifi&eacute;s avec un 
                <command>diff</command> r&eacute;cursif pour g&eacute;n&eacute;rer ensuite les
                fichiers de mise &agrave; 
                jour&nbsp;-&nbsp;<foreignphrase>patches</foreignphrase>. Chaque
                ensemble de mise &agrave; jour que vous souhaitez appliquer doit
                &ecirc;tre rassembl&eacute; dans un fichier
		<filename>patch-<replaceable>xx</replaceable></filename>, o&ugrave;
		<replaceable>xx</replaceable> correspond au rang de cette 
                mise &agrave; jour dans la s&eacute;quence d'application de ces 
                modifications&nbsp;-&nbsp;elles sont trait&eacute;es en 
		<emphasis>ordre alphab&eacute;tique</emphasis>, donc
		<literal>aa</literal> d'abord, <literal>ab</literal> en second
                et ainsi de suite. Ces fichiers doivent &ecirc;tre plac&eacute;s dans
		<makevar>PATCHDIR</makevar>, d'o&ugrave; ils seront automatiquement
                appliqu&eacute;s. Toutes les modifications doivent &ecirc;tre relatives &agrave;
		<makevar>WRKSRC</makevar> (c'est habituellement le r&eacute;pertoire
                o&ugrave; l'archive s'extrait elle-m&ecirc;me, et o&ugrave; se fera la 
                compilation). Pour simplifier les corrections et les mises &agrave; 
                niveau, vous devriez &eacute;viter d'avoir plus d'un fichier de mise
                &agrave; jour s'appliquant au m&ecirc;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 &agrave; votre
                proc&eacute;dure <filename>configure</filename> et enregistrez-la dans
                le sous-r&eacute;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&eacute;dures
		<filename>pre-configure</filename> ou
		<filename>post-configure</filename>.</para>
	      
	    </sect3>
	    
	    <sect3>
	      <title>Interactions avec l'utilisateur</title>
	      
	      <para>Si vos proc&eacute;dures de compilation, configuration ou 
                installation ont besoin d'interagir avec l'utilisateur, 
                d&eacute;finissez la variable <makevar>IS_INTERACTIVE</makevar> dans
                votre <filename>Makefile</filename>. Cela permettra aux
		&ldquo;compilations de nuits&rdquo; d'ignorer le logiciel
                que vous avez port&eacute;, si l'utilisateur d&eacute;finit dans son
                environnement la variable <envar>BATCH</envar> (s'il d&eacute;finit
		la variable <envar>INTERACTIVE</envar>, 
                <emphasis>seuls</emphasis> les logiciels port&eacute;s pour lesquels
                il faut des r&eacute;ponses de l'utilisateur sont compil&eacute;s).</para>

	    <para>Il est aussi recommand&eacute;, s'il y a des r&eacute;ponses par d&eacute;faut
              raisonnables &agrave; vos questions, de tester la variable
	      <makevar>PACKAGE_BUILDING</makevar> et de d&eacute;sactiver la partie
              interactive de la proc&eacute;dure si cette variable est d&eacute;finie. Cela 
              permet de compiler les &ldquo;paquetages&rdquo; 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&eacute;rons &agrave; 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&icirc;t l'ordre
        des variables et des sections de ce mod&egrave;le pour que votre
        portage soit plus facile &agrave; lire pour les autres.</para>
	    
      <para>Envisageons maintenant les probl&egrave;mes suivants en
        s&eacute;quence au fur et &agrave; mesure que vous mettez au point
        votre nouveau Makefile&nbsp;:</para>
      
      <sect3>
	<title>Le source original</title>
	
	<para>Se trouve-t-il dans <makevar>DISTDIR</makevar> sous forme standard
          d'archive compress&eacute;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&eacute; de non-conformit&eacute; du fichier de distribution
          de votre logiciel &agrave; porter. (Le cas le plus fr&eacute;quent est
	  <literal>EXTRACT_SUFX=.tar.Z</literal>, quand l'archive est 
          compress&eacute;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&eacute;er votre
          propre cible <maketarget>do-extract</maketarget> pour surcharger la
          cible par d&eacute;faut, bien que ce ne soit que rarement, sinon
          jamais, n&eacute;cessaire.</para>
      </sect3>
      
      <sect3>
	<title><makevar>DISTNAME</makevar></title>
	
	<para>Vous devez affecter &agrave; <makevar>DISTNAME</makevar> le nom de
          fichier de votre logiciel &agrave; porter. Les r&egrave;gles par
          d&eacute;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&egrave;gles par d&eacute;faut veulent aussi que l(es) 
          archive(s) soi(en)t extraite(s) dans un sous-r&eacute;pertoire 
          appel&eacute; <filename>work/<makevar>DISTNAME</makevar></filename>, 
          e.g., <filename>work/foozolix-1.0/</filename>.</para>
	      
	<para>Toutes ces conventions peuvent bien s&ucirc;r &ecirc;tre
          surcharg&eacute;es; ce sont simplement les valeurs par d&eacute;faut
          qui font gagner le plus de temps. Pour un logiciel &agrave; porter
          pour lequel il y a plusieurs fichiers de distribution, 
          d&eacute;finissez simplement explicitement 
          <makevar>DISTFILES</makevar>. S'il n'y a qu'un sous-ensemble de
	  <makevar>DISTFILES</makevar> qui est effectivement constitu&eacute;
          d'archives extractibles, d&eacute;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&eacute;rieur.</para> 
      </sect3> 

      <sect3> 
        <title><makevar>PKGNAME</makevar></title> 

        <para>Si <makevar>DISTNAME</makevar> n'est pas conforme &agrave; nos
          <link linkend="porting-pkgname">recommandations pour un bon nom de
          paquetage</link>, vous devriez affecter &agrave; la variable
          <makevar>PKGNAME</makevar> une meilleure valeur. Reportez-vous aux
          recommandations mentionn&eacute;es ci-dessus pour plus de 
          d&eacute;tails.</para>
      </sect3>
      
      <sect3>
	<title><makevar>CATEGORIES</makevar></title>
	
	<para>Quand un paquetage est cr&eacute;e, il est mis dans
	  <filename>/usr/ports/packages/All</filename> et des liens sont
          d&eacute;finis dans un ou plusieurs sous-r&eacute;pertoires de
	  <filename>/usr/ports/packages</filename>. Les noms de ces 
          sous-r&eacute;pertoires sont sp&eacute;cifi&eacute;s par la
          variable <makevar>CATEGORIES</makevar>. L'objectif est de faciliter
          la vie de l'utilisateur qui erre dans la quantit&eacute; de
          paquetages sur le site ftp ou le CD-ROM. Jettez un oeil s'il vous
          pla&icirc;t aux 
          <link linkend="porting-categories">cat&eacute;gories</link> 
          existantes et choisissez celles qui conviennent &agrave; votre 
          logiciel &agrave; porter.</para>

	<para>Cette liste d&eacute;termina aussi o&ugrave; le logiciel sera
          import&eacute; dans l'arborescence du catalogue des logiciels
          port&eacute;s Si vous y mentionnez plus d'une cat&eacute;gorie, les
          fichiers iront dans le sous-r&eacute;pertoire de m&ecirc;me nom que la
          premi&egrave;re de ces cat&eacute;gories. Reportez-vous &agrave; la
          section <link linkend="porting-categories">Cat&eacute;gories</link> 
          pour plus d'informations sur la mani&egrave;re de s&eacute;lectionner
          les bonnes cat&eacute;gories.</para>

	<para>Si votre logiciel &agrave; porter appartient vraiment &agrave; une
          autre cat&eacute;gorie que celles qui sont d&eacute;j&agrave;
          d&eacute;finies, vous pouvez m&ecirc;me cr&eacute;er une nouvelle
          cat&eacute;gorie. Dans ce cas, envoyez s'il vous pla&icirc;t un
          courrier &eacute;lectronique &agrave; la &a.ports; pour proposer la
          cr&eacute;ation d'une nouvelle cat&eacute;gorie.</para>

	<note>
	  <para>Il n'y a pas de contr&ocirc;le des noms de cat&eacute;gorie.
            <command>make paquetage</command> cr&eacute;era sans sourcillier un
            nouveau sous-r&eacute;pertoire si vous orthographiez mal le nom de
            la cat&eacute;gorie, soyez donc prudent&nbsp;!</para>
	</note>
      </sect3>
      
      <sect3>
	<title><makevar>MASTER_SITES</makevar></title>
	
	<para>Indiquez le r&eacute;pertoire de l'&ldquo;URL&rdquo; ftp/http 
          o&ugrave; se trouve l'archive originale dans
	  <makevar>MASTER_SITES</makevar>. N'oubliez pas le &ldquo;slash&rdquo;
	  final (<filename>/</filename>)&nbsp;!</para>
	      
	<para>Les macros-instructions <command>make</command> essayerons
          d'utiliser cette valeur pour r&eacute;cup&eacute;rer le fichier de
          distribution avec <makevar>FETCH</makevar>, si elles ne le trouvent
          pas sur votre syst&egrave;me.</para>
	      
	<para>Il est conseill&eacute; de mentionner plusieurs sites dans cette
          liste, si possible sur des continents diff&eacute;rents. Cela 
          constituera un garde-fou contre les probl&egrave;mes du r&eacute;seau
          mondial, et nous envisageons m&ecirc;me d'ajouter la 
          d&eacute;termination automatique du site de r&eacute;f&eacute;rence 
          le plus proche, pour aller y chercher la distribution&nbsp;!</para>
	      
	<para>Si l'archive d'origine se trouve sur l'une des archives classiques          suivantes&nbsp;: X-contrib, GNU, Perl CPAN, TeX CTAN ou Linux Sunsite,
          vous pouvez y faire r&eacute;f&eacute;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 &agrave;
	  <makevar>MASTER_SITE_SUBDIR</makevar> le chemin d'acc&egrave;s au
          fichier dans l'archive. En voici un exemple&nbsp;:</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 &agrave; la place ses sites miroir favoris pour ces
          archives.</para>
      </sect3>
      
      <sect3 id="porting-patchfiles">
	<title><makevar>PATCHFILES</makevar></title>
	
	<para>Si votre logiciel &agrave; porter a besoin de 
          correctifs&nbsp;-&nbsp;<foreignphrase>patches</foreignphrase>&nbsp;-&nbsp;disponibles  
          via ftp ou http, affectez &agrave; <makevar>PATCHFILES</makevar> les
          noms des fichiers et &agrave; <makevar>PATCH_SITES</makevar> 
          l'&ldquo;URL&rdquo; du r&eacute;pertoire o&ugrave; ils se trouvent (le
          format est le m&ecirc;me que pour
          <makevar>MASTER_SITES</makevar>).</para>
	
	<para>Si le correctif ne s'applique pas &agrave; la racine de 
          l'arborescence des sources (i.e., <makevar>WKRSRC</makevar>) parce 
          qu'il contient des chemins d'acc&egrave;s suppl&eacute;mentaires,
          d&eacute;finissez <makevar>PATCH_DIST_STRIP</makevar> en
          cons&eacute;quence. Par exemple, si tous les noms de fichiers dans le
          correctif sont pr&eacute;c&eacute;d&eacute;s de
	  <literal>foozolix-1.0/</literal>, configurez alors
	  <literal>PATCH_DIST_STRIP=-p1</literal>.</para>
	      
	<para>Ne vous inqui&eacute;tez pas si les correctifs sont 
          compress&eacute;s, ils seront automatiquement 
          d&eacute;compress&eacute;s si les noms des fichiers se terminent par
	  <filename>.gz</filename> ou <filename>.Z</filename>.</para>
	      
	<para>Si le correctif est distribu&eacute; avec d'autres fichiers, de la
          documentation par exemple, sous forme d'archive compress&eacute;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 &agrave; 
          <makevar>DISTFILES</makevar> et <makevar>MASTER_SITES</makevar>. Puis,
          appliquez le correctif depuis la cible 
          <maketarget>pre-patch</maketarget>, soit en y ex&eacute;cutant la 
          commande <command>patch</command>, soit en copiant le correctif dans 
          le r&eacute;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&ecirc;me temps
            que le source de base, il n'est donc pas n&eacute;cessaire de
            l'extraire explicitement si elle est normalement compress&eacute;e
            avec
            <citerefentry><refentrytitle>gzip</refentrytitle> <manvolnum>1</manvolnum></citerefentry>
            ou
            <citerefentry><refentrytitle>compress</refentrytitle> <manvolnum>1</manvolnum></citerefentry>. 
            Si vous le faites n&eacute;anmoins, faites attention &agrave;
            ne rien &eacute;craser de ce qui existe dans le r&eacute;pertoire.
            Et n'oubliez pas non plus d'ajouter une commande pour supprimer le 
            correctif recopi&eacute; &agrave; la cible
	    <maketarget>pre-clean</maketarget>.</para>
	</note>
      </sect3>
      
      <sect3>
	<title><makevar>MAINTAINER</makevar></title>
	      
	<para>Indiquez ici votre adresse &eacute;lectronique. S'il vous 
          pla&icirc;t. <!-- smiley --><emphasis>:)</emphasis></para>
	
	<para>Pour une description d&eacute;taill&eacute; de la 
          responsabilit&eacute; du charg&eacute; de la maintenance, 
          reportez-vous &agrave; la section
	  <link linkend="policies-maintainer">MAINTAINER des
	  <filename>Makefile</filename>s</link>.</para>
      </sect3>
      
      <sect3>
	<title>D&eacute;pendances</title>
	
	<para>De nombreux logiciels port&eacute;s d&eacute;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&eacute;d&eacute;finies pour les cas les
          plus courants, et quelques autres pour contr&ocirc;ler le comportement
          vis-&agrave;-vis des d&eacute;pendances.</para>
	
	<sect4>
	  <title><makevar>LIB_DEPENDS</makevar></title>
	  
	  <para>Cette variable d&eacute;finit les biblioth&egrave;ques
            partag&eacute;es dont d&eacute;pend le logiciel &agrave; porter.
            C'est une liste de tuples
	    <replaceable>bibloth&egrave;que</replaceable>:<replaceable>r&eacute;pertoire</replaceable><optional><replaceable>:cible</replaceable></optional>
	    o&ugrave; <replaceable>biblioth&egrave;que</replaceable> est
            le nom de la biblioth&egrave;que partag&eacute;e, 
            <replaceable>r&eacute;pertoire</replaceable> est le nom du 
            r&eacute;pertoire o&ugrave; la trouver si elle n'est pas 
            encore install&eacute;e et <replaceable>cible</replaceable> celui de
            la cible &agrave; ex&eacute;cuter dans ce r&eacute;pertoire. Par
	    exemple&nbsp:</para>
          <programlisting> 
LIB_DEPENDS=   jpeg\\.9\\.:${PORTSDIR}/graphics/jpeg:install
          </programlisting>
          <para>cherchera une biblioth&egrave;que partag&eacute;e
            <literal>jpeg</literal> avec le num&eacute;ro de version majeure 9
            et descendra dans le sous-r&eacute;pertoire
	    <filename>graphics/jpeg</filename> de l'arborescence du catalogue
            des logiciels port&eacute;s pour la compiler et l'installer, s'il ne
            la trouve pas. La <replaceable>cible</replaceable> peut &ecirc;tre
            omise si elle est &eacute;gale &agrave;
	    <makevar>DEPENDS_TARGET</makevar> (dont la valeur par d&eacute;faut
	    est <literal>install</literal>).</para>

	  <note>
	    <para><replaceable>biblioth&egrave;que</replaceable> est 
              pass&eacute; en argument &agrave; 
              <command>ldconfig -r | grep -wF</command>. Cette variable ne doit
              pas comporter d'expression r&eacute;guli&egrave;re.</para>
	  </note>
	  
	  <para>La d&eacute;pendance est v&eacute;rifi&eacute;e deux fois, une
            premi&egrave;re fois depuis la cible 
            <maketarget>extract</maketarget> et ensuite par la cible 
            <maketarget>install</maketarget>. Le nom de la d&eacute;pendance est
            aussi enregistr&eacute; dans le paquetage de sorte que 
            <command>pkg_add</command> l'installe automatiquement si elle n'est
            pas disponible sur le syst&egrave;me de l'utilisateur.</para>
	</sect4>
	
	<sect4>
	  <title><makevar>RUN_DEPENDS</makevar></title>
	  
	  <para>Cette variable d&eacute;finit quels ex&eacute;cutables et 
            fichiers doivent &ecirc;tre pr&eacute;sents pour pouvoir utiliser le
            logiciel port&eacute;. C'est une liste de tuples
            <replaceable>chemin d'acc&egrave;s</replaceable>:<replaceable>r&eacute;pertoire</replaceable><optional><replaceable>:cible</replaceable></optional>
	    o&ugrave; <replaceable>chemin d'acc&egrave;s</replaceable> est le 
            nom de l'ex&eacute;cutable ou du fichier,
	    <replaceable>r&eacute;pertoire</replaceable> est le 
            r&eacute;pertoire o&ugrave; le trouver s'il n'est pas encore
            install&eacute; et <replaceable>cible</replaceable> est la cible 
            &agrave; ex&eacute;cuter dans ce r&eacute;pertoire. Si
	    <replaceable>chemin d'acc&egrave;s</replaceable> commence par un
            &ldquo;<foreignphrase>slash</foreignphrase>
	    (<literal>/</literal>), il est trait&eacute; comme un fichier et son
            existence est test&eacute;e avec <command>test -e</command>&nbsp;; 
            sinon, on suppose que c'est un ex&eacute;cutable, et c'est la 
            commande <command>which -s</command> qui est utilis&eacute;e pour 
            voir si le programme existe dans les chemins d'acc&egrave;s par 
            d&eacute;faut de l'utilisateur.</para>

	  <para>Par exemple&nbsp;:</para>
	    
	    <programlisting>
RUN_DEPENDS=   ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wish8.0:${PORTSDIR}/x11-toolkits/tk80</programlisting>
	    
	  <para>regardera si le fichier ou le r&eacute;pertoire
	    <filename>/usr/local/etc/innd</filename> existe, et le compilera et
            l'installera dans le sous-r&eacute;pertoiree 
            <filename>news/inn</filename> de l'arborescence du catalogue des
            logiciels port&eacute;s s'il ne le trouve pas. Il s'assurera aussi
            de la pr&eacute;sence d'un ex&eacute;cutable appel&eacute;
	    <command>wish8.0</command> dans vos chemins d'acc&egrave;s par
            d&eacute;faut, et ira dans le sous-r&eacute;pertoire
	    <filename>x11-toolkits/tk80</filename> de l'arborescence du 
            catalogue des logiciels port&eacute;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&eacute;cutable&nbsp;; si un programme n'est pas &agrave; la 
              place normale o&ugrave; on s'attend &agrave; le trouver dans les 
              chemins d'acc&egrave;s par d&eacute;faut de l'utilisateur, il faut
              utiliser son nom complet depuis la racine.</para>
	  </note>
	  
	  <para>La d&eacute;pendance est v&eacute;rifi&eacute;e par la cible
	    <maketarget>install</maketarget>. Le nom de la d&eacute;pendance est
            aussi enregistr&eacute; dans le paquetage de sorte que 
            <command>pkg_add</command> l'installe automatiquement si elle n'est
            pas disponible sur le syst&egrave;me de l'utilisateur.  La 
            <replaceable>cible</replaceable> peut &ecirc;tre omise si elle est 
            &eacute;gale &agrave; <makevar>DEPENDS_TARGET</makevar>.</para> 
	</sect4>
	
	<sect4>
	  <title><makevar>BUILD_DEPENDS</makevar></title>
	  
	  <para>Cette variable d&eacute;finit quels ex&eacute;cutables et
            fichiers sont n&eacute;cessaires pour installer le logiciel. Comme
	    <makevar>RUN_DEPENDS</makevar>, c'est une liste de tuples
	    <replaceable>chemin d'acc&egrave;s</replaceable>:<replaceable>r&eacute;pertoire</replaceable><optional><replaceable>:cible</replaceable></optional>.
            Par exemple&nbsp;:</para>
          <programlisting> 
BUILD_DEPENDS=   unzip:${PORTSDIR}/archivers/unzip
          </programlisting> 
          <para>recherchera un ex&eacute;cutable appel&eacute;
	    <command>unzip</command> et ira dans le sous-r&eacute;pertoire 
            <filename>archivers/unzip</filename> de l'arborescence du
            catalogue des logiciels port&eacute;s pour le compiler et
            l'installer s'il ne le trouve pas.</para> 

	  <note>
	    <para>&ldquo;installer&rdquo; recouvre ici tout le processus, de 
              l'extraction &agrave; la compilation. La d&eacute;pendance est
              v&eacute;rifi&eacute;e par la cible 
              <maketarget>extract</maketarget>. La 
              <replaceable>cible</replaceable> peut &ecirc;tre omise si elle
              est &eacute;gale &agrave; 
              <makevar>DEPENDS_TARGET</makevar>.</para>
	  </note>
	</sect4>
	
	<sect4>
	  <title><makevar>FETCH_DEPENDS</makevar></title>
	  
	  <para>Cette variable d&eacute;finit quels ex&eacute;cutables le 
            logiciel a besoin de r&eacute;cup&eacute;rer. Comme les deux
            pr&eacute;c&eacute;dentes, c'est une liste de tuples
	    <replaceable>chemin d'acc&egrave;s</replaceable>:<replaceable>r&eacute;pertoire</replaceable><optional><replaceable>:cible</replaceable></optional>.
            Par exemple&nbsp;:</para>
	  <programlisting> 
FETCH_DEPENDS=   ncftp2:${PORTSDIR}/net/ncftp2
          </programlisting> 
          <para>recherchera un ex&eacute;cutable appel&eacute;
	    <command>ncftp2</command> et descendera dans le 
            sous-r&eacute;pertoire <filename>net/ncftp2</filename> de 
            l'arborescence du catalogue des logiciels port&eacute;s pour le 
            compiler et l'installer s'il ne le trouve pas.</para>
		
	  <para>La d&eacute;pendance est v&eacute;rifi&eacute;e par la cible
	    <maketarget>fetch</maketarget>. La <replaceable>cible</replaceable>
            peut &ecirc;tre omise si elle est &eacute;gale &agrave;
            <makevar>DEPENDS_TARGET</makevar>.</para>
	</sect4>
	
	<sect4>
	  <title><makevar>DEPENDS</makevar></title>
	  
	  <para>S'il y a une d&eacute;pendance qui ne rentre pas dans les quatre
            cat&eacute;gories pr&eacute;c&eacute;dentes ou si votre logiciel
            &agrave; porter a besoin que les sources d'un autre logiciel soient
            install&eacute;s en plus de ce logiciel lui-m&ecirc;me, 
            utilisez cette variable.  C'est une liste de
	    <replaceable>r&eacute;pertoire</replaceable><optional><replaceable>:cible</replaceable></optional>,
            puisqu'il n'y a rien &agrave; v&eacute;rifier, &agrave; l'inverse 
            des quatre pr&eacute;c&eacute;dentes. La 
            <replaceable>cible</replaceable> peut &ecirc;tre omise si elle est 
            &eacute;gale &agrave; <makevar>DEPENDS_TARGET</makevar>.</para>
	</sect4>
	
	<sect4>
	  <title>Variables pr&eacute;d&eacute;finies</title>
	  
	  <para>Utilisez <literal>USE_XLIB=yes</literal> si votre logiciel 
            &agrave; porter a besoin que le syst&egrave;me <application>X
            Window</application> soit install&eacute; (c'est implicite avec
	    <makevar>USE_IMAKE</makevar>). Utilisez
	    <literal>USE_GMAKE=yes</literal> si votre logiciel &agrave; porter a
            besoin de GNU <command>make</command> au lieu de BSD 
            <command>make</command>. Utilisez
            <literal>USE_AUTOCONF=yes</literal> si votre logiciel &agrave; 
            porter a besoin que GNU <command>autoconf</command> soit
            ex&eacute;cut&eacute;. Utilisez <literal>USE_QT=yes</literal> si 
            votre logiciel utilise la bo&icirc;te &agrave; outils
	    <application>Qt</application>. Utilisez 
            <literal>USE_PERL5=yes</literal> si votre logiciel &agrave; porter a
            besoin de la version 5 du langage perl. (Cette derni&egrave;re 
            variable est particuli&egrave;rement importante parce que certaines
            versions de FreeBSD comportent perl 5 install&eacute; de base, mais
            d'autres non.)</para>
	</sect4>
	
	<sect4>
	  <title>Notes &agrave; propos des d&eacute;pendances</title>
	  
	  <para>Comme indiqu&eacute; plus haut, la cible &agrave; appeler par
            d&eacute;faut quand il y a un d&eacute;pendance requise est
	    <maketarget>DEPENDS_TARGET</maketarget>. Sa valeur par d&eacute;faut
            est <literal>install</literal>. C'est une variable utilisateur. Elle
            n'est jamais d&eacute;finie dans le <filename>Makefile</filename>
            d'un logiciel &agrave; porter. Si votre logiciel &agrave; porter a 
            besoin qu'une d&eacute;pendance soit g&eacute;r&eacute;e d'une 
            fa&ccedil;on particuli&egrave;re, utilisez la partie
	    <literal>:cible</literal> des variables <makevar>*_DEPENDS</makevar>
            au lieu de red&eacute;finir 
            <makevar>DEPENDS_TARGET</makevar>.</para>

	  <para>Quand vous tapez <command>make clean</command>, les 
            d&eacute;pendances sont aussi purg&eacute;es. Si vous ne voulez pas
            qu'il en soit ainsi, d&eacute;finissez la variable
	    <makevar>NOCLEANDEPENDS</makevar> dans votre environnement.</para>

	  <para>Pour d&eacute;pendre sans condition d'un autre logiciel 
            port&eacute;, 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&eacute;. Vous pouvez aussi
            avec cette cible &eacute;conomiser du temps de compilation. Par
            exemple&nbsp;:</para>

          <programlisting>
BUILD_DEPENDS=   /nonexistent:${PORTSDIR}/graphics/jpeg:extract
          </programlisting>
 
          <para>ira toujours dans le r&eacute;pertoire du logiciel port&eacute;
            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&eacute;faut l'installation) d'autres
            logiciels port&eacute;s et la d&eacute;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> &agrave; la place&mdash;au moins 
            votre intention sera claire.</para>
	</sect4>
      </sect3>
      
      <sect3>
	<title>M&eacute;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&eacute;mentaires &agrave; <command>configure</command> (la liste
          d'arguments par d&eacute;faut est
          <literal>--prefix=&dollar;{PREFIX}</literal> pour GNU
	  <command>configure</command> et elle est vide pour les autres versions
          de <command>configure</command>), d&eacute;finissez ces arguments
          compl&eacute;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&eacute;cution
	  d'<command>autoconf</command> avant celle de 
          <command>configure</command>.</para>
	      
	<para>Si votre paquetage est une application X qui g&eacute;n&egrave;re
          des <filename>Makefile</filename>s &agrave; partir 
          d'<filename>Imakefile</filename>s avec <command>imake</command>, 
          positionnez alors <literal>USE_IMAKE=yes</literal>. A l'&eacute;tape
          de configuration, la commande <command>xmkmf -a</command> sera
          automatiquement ex&eacute;cut&eacute;e. Si l'option
	  <option>-a</option> pose une probl&egrave;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&eacute;finir
	  <literal>NO_INSTALL_MANPAGES=yes</literal>. De plus, l'auteur 
          d'origine du logiciel devrait &ecirc;tre &ldquo;fusill&eacute;&rdquo;.
	  <!-- smiley --><emphasis>:&gt;</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&eacute;finissez en cons&eacute;quence 
	  <makevar>ALL_TARGET</makevar>. Il en va de m&ecirc:me pour
	  <maketarget>install</maketarget> et
	  <makevar>INSTALL_TARGET</makevar>.</para>
      </sect3>
    </sect2>
    
    <sect2>
      <title>Consid&eacute;rations particuli&egrave;res</title>
      
      <para>Il y a quelques autres points &agrave; prendre en compte lorsque
        vous portez un logiciel. Cette section d&eacute;taille les plus
        fr&eacute;quemment rencontr&eacute;s.</para>

      <sect3>
	<title><command>ldconfig</command></title>
	
	<para>Si votre portage installe une biblioth&egrave;que partag&eacute;e,
          ajoutez une cible <maketarget>post-install</maketarget> &agrave; votre
	  <filename>Makefile</filename> qui ex&eacute;cute 
          <literal>&dollar;{LDCONFIG} -m</literal> sur le r&eacute;pertoire 
          o&ugrave; la nouvelle biblioth&egrave;que est install&eacute;e
	  (habituellement <filename><makevar>PREFIX</makevar>/lib</filename>) 
          pour l'enregistrer dans le cache de biblioth&egrave;que
          partag&eacute;e.</para> 
		  
	<para>Ajoutez aussi une ligne <literal>@exec /sbin/ldconfig -m</literal>
	  et la ligne <literal>@unexec /sbin/ldconfig -R</literal> 
          correspondante &agrave; votre fichier <filename>pkg/PLIST</filename> 
          de fa&ccedil;on &agrave; ce que l'utilisateur qui installe le
          paquetage puisse utiliser imm&eacute;diatement la biblioth&egrave;que
          partag&eacute;e et qu'&agrave; la d&eacute;sinstallation, le 
          syst&egrave;me sache que la biblioth&egrave;que n'est plus l&agrave;.
          Ces lignes doivent suivre imm&eacute;diatement celle qui concerne la
          biblioth&egrave;que partag&eacute;e elle-m&ecirc;me, comme 
          dans&nbsp;:</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
          &agrave; votre <filename>Makefile</filename> ou &agrave; votre
          <filename>pkg/PLIST</filename>. Cela r&eacute;initialisera le cache de
          biblioth&egrave;que partag&eacute;e avec le contenu de
	  <filename>/usr/lib</filename> uniquement, et v&eacute;rolera
          royalement la machine de l'utilisateur (&ldquo;A l'aide, xinit ne
          fonctionne plus depuis que j'ai install&eacute; ce logiciel
          port&eacute;&nbsp;!). Quiconque commet ce crime sera fusill&eacute;
          et d&eacute;coup&eacute; en 65.536 morceaux avec un couteau 
          rouill&eacute;, son foie sera d&eacute;chiquet&eacute; par une bande
          de corbeaux et il r&ocirc;tira &eacute;ternellement au tr&eacute;fonds
          de l'enfer (pas n&eacute;cessairement dans cet ordre&hellip;)</para>
      </sect3>
    </sect2>
    
    <sect2>
      <title>Support ELF</title>
      
      <para>Comme FreeBSD passe &agrave; ELF peu de temps apr&egrave; 
        3.0-release, il faut convertir de nombreux ports qui compilent des
        bibloth&egrave;ques partag&eacute;es pour qu'ils supportent ELF. Cette
        t&acirc;che est compliqu&eacute;e par le fait qu'un syst&egrave;me 3.0
        peut s'ex&eacute;cuter &agrave; 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&eacute;s a.out
        pour qu'ils supportent &agrave; la fois la compilation en a.out et 
        ELF.</para>

      <para>Certains points cit&eacute;s ne s'appliquent qu'&agrave; la
        conversion elle-m&ecirc;me. Ils resteront mentionn&eacute;s
        n&eacute;anmoins quelque temps pour le cas o&ugrave; vous tomberiez sur 
        un ancien logiciel port&eacute; que vous voulez mettre &agrave; 
        niveau.</para>

      <sect3>
	<title>Mettre de c&ocirc;t&eacute; les biblioth&egrave;ques 
          a.out</title>
	
	<para>Les biblioth&egrave;ques a.out doivent &ecirc;tre 
          d&eacute;plac&eacute;es de <filename>/usr/local/lib</filename> et 
          autres vers un sous-r&eacute;pertoire <filename>aout</filename>. (Si
          vous ne les mettez pas de c&ocirc;t&eacute;, les logiciels 
          port&eacute;s ELF les &eacute;craseront sans sourciller.)
	  La cible <maketarget>move-aout-libs</maketarget> du
	  <filename>src/Makefile</filename> de 3.0-current (appel&eacute; par
	  <maketarget>aout-to-elf</maketarget>) le fera pour vous. Elle ne
          d&eacute;placera que les biblioth&egrave;ques a.out, il n'y a donc pas
          de risque &agrave; l'appeler sur un syst&egrave;me o&ugrave; il y a
          &agrave; la fois des biblioth&egrave;ques ELF et a.out dans les
          r&eacute;pertoires standard.</para>
      </sect3>
      
      <sect3>
	<title>Format</title>
	
	<para>L'arborescence du catalogue des logiciels port&eacute;s compilera
          les paquetages au format utilis&eacute; par la machine, 
          c'est-&agrave;-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&eacute;placent les biblioth&egrave;ques
          a.out dans un sous-r&eacute;pertoire, la compilation des 
          biblioth&egrave;ques a.out ne sera plus support&eacute;. (i.e., cela 
          peut encore marcher si vous savez ce que vous faites, mais vous devrez
          vous d&eacute;brouiller par vous-m&ecirc;me.)</para>

	<note>
	  <para>Si un logiciel port&eacute; ne fonctionne qu'en a.out, affectez
            &agrave; <makevar>BROKEN_ELF</makevar> une cha&icirc;ne de
            caract&egrave;res qui d&eacute;crive pourquoi. Ces logiciels ne 
            seront pas g&eacute;n&eacute;r&eacute;s &agrave; la compilation sur
            un syst&egrave;me ELF.</para>
	</note>
      </sect3>
      
      <sect3>
	<title><makevar>PORTOBJFORMAT</makevar></title>
	
	<para><filename>bsd.port.mk</filename> affectera &agrave;
	  <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&eacute;e
	  &agrave; <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&eacute;finie par la ligne suivante de
	  <filename>bsd.port.mk</filename>&nbsp;:</para>
	  
	<programlisting>
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout</programlisting>
          
	<para>Le processus de compilation des logiciels port&eacute;s devrait
          toujours utiliser cette variable pour d&eacute;cider de ce qu'il faut
          faire. Cependant, si la proc&eacute;dure 
          <filename>configure</filename> associ&eacute;e 
          d&eacute;tecte d&eacute;j&agrave; automatiquement un syst&egrave;me 
          ELF, il n'est pas n&eacute;cessaire de se r&eacute;f&eacute;rer 
          &agrave; <makevar>PORTOBJFORMAT</makevar>.</para>
      </sect3>
      
      <sect3>
	<title>Compilation des biblioth&egrave;ques partag&eacute;es</title>
	
	<para>Ce qui suit d&eacute;crit les diff&eacute;rences de gestion des 
          biblioth&egrave;ques partag&eacute;es entre les formats ELF et
	  a.out.</para>
	
	<itemizedlist>
	  <listitem>
	    <para>Versions de biblioth&egrave;ques partag&eacute;es</para>
	    
	    <para>Une biblioth&egrave;que partag&eacute;e ELF doit s'appeler
	      <filename>libfoo.so.<replaceable>M</replaceable></filename>,
	      o&ugrave; <replaceable>M</replaceable> est un unique num&eacute;ro
              de version et une biblioth&egrave;que partag&eacute;e a.out doit 
              s'appeler
              <filename>libfoo.so.<replaceable>M</replaceable>.<replaceable>N</replaceable></filename>,
	      o&ugrave; <replaceable>M</replaceable> est le num&eacute;ro de
              version majeure et
	      <replaceable>N</replaceable> celui de version mineure.
	      Ne confondez pas&nbsp;; n'installez <emphasis>jamais</emphasis> de
              biblioth&egrave;que partag&eacute;e ELF appel&eacute;e
	      <filename>libfoo.so.<replaceable>N</replaceable>.<replaceable>M</replaceable></filename>
	      ou de biblioth&egrave;que partag&eacute;e A.out (ou de lien 
              symbolique dessus) appel&eacute;e
	      <filename>libfoo.so.<replaceable>N</replaceable></filename>.</para>
	  </listitem>
	  
	  <listitem>
	    <para>Ligne de commande de l'&eacute;diteur de liens</para>
	    
	    <para>En supposant que <command>cc -shared</command> 
              soit utilis&eacute; plut&ocirc;t que <command>ld</command> 
              directement, la seule diff&eacute;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&eacute;finir un lien symbolique de
	  <filename>libfoo.so</filename> vers
	  <filename>libfoo.so.<replaceable>N</replaceable></filename> pour que
          les &eacute;diteurs de liens ELF s'y retrouvent. Comme il doit 
          &ecirc;tre aussi mentionn&eacute; dans 
	  <filename>PLIST</filename>, cela ne posera pas de probl&egrave;me dans
          le cas de a.out (pour certains logiciels port&eacute;s, il faut
          m&ecirc;me que ce lien existe pour l'&eacute;dition de liens
          dynamiques), vous devriez d&eacute;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&eacute;s sont &agrave; modifier pour supprimer les num&eacute;ros
          de versions mineures de <makevar>LIB_DEPENDS</makevar>, ainsi que le
          support des expressions r&eacute;quli&egrave;res (e.g., 
          <literal>foo\\.1\\.\\(33|40\\)</literal> devient
	  <literal>foo.2</literal>.) La correspondance sera effectu&eacute;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&egrave;ques partag&eacute;es si leur num&eacute;ro de version
          mineure a.out est z&eacute;ro et les noms longs (a.out) dans le cas 
          contraire. <filename>bsd.port.mk</filename> ajoutera automatiquement 
          le <literal>.0</literal> &agrave; la fin des noms courts de 
          biblioth&egrave;ques partag&eacute;es si 
          <makevar>PORTOBJFORMAT</makevar> vaut <literal>aout</literal>, et
          supprimera le num&eacute;ro de version mineure des noms longs si
	  <makevar>PORTOBJFORMAT</makevar> vaut <literal>elf</literal>.</para>

	<para>Au cas o&ugrave; vous auriez vraiment besoin d'installer des
          biblioth&egrave;ques partag&eacute;es avec deux num&eacute;ros de
          version sur un syst&egrave;me ELF ou avec un seul num&eacute;ro de
          version sur un syst&egrave;me a.out (par exemple, pour les logiciels
          port&eacute;s qui installent des biblioth&egrave;ques pour la
          compatibilit&eacute; avec d'autres syst&egrave;mes d'exploitation),
          d&eacute;finissez la variable <makevar>NO_FILTER_SHLIBS</makevar>.
          Cela inhibera le m&eacute;canisme de modification de
	  <filename>PLIST</filename> d&eacute;crit au paragraphe 
          pr&eacute;c&eacute;dent.</para>
      </sect3>
      
      <sect3>
	<title><literal>ldconfig</literal></title>
	
	<para>La ligne <literal>ldconfig</literal> des 
          <filename>Makefile</filename>s doit contenir&nbsp;:</para>
	
	<programlisting>
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....
        </programlisting>

	<para>Dans <filename>PLIST</filename>, il doit y avoir&nbsp;:</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&eacute;e en fonction du format
          du paquetage et non du format par d&eacute;faut sur le 
          syst&egrave;me.</para>
      </sect3>
    </sect2>
    
    <sect2 id="porting-masterdir">
      <title><makevar>MASTERDIR</makevar></title>
      
      <para>Si votre logiciel port&eacute; a besoin de g&eacute;n&eacute;rer des
        versions l&eacute;g&egrave;rement diff&eacute;rentes des paquetages en
        fonction de la valeur d'une variable (la r&eacute;solution ou le format
        de page par exemple), cr&eacute;ez un sous-r&eacute;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&eacute;s. Vous aurez normalement besoin d'un
	<filename>Makefile</filename> tr&egrave;s court dans tous les
        sous-r&eacute;pertoires &agrave; l'exception d'un seul. Dans ces
	<filename>Makefile</filename>s, vous pouvez utiliser la variable
	<makevar>MASTERDIR</makevar> pour indiquer le r&eacute;pertoire 
        o&ugrave; se trouvent le reste des fichiers. Utilisez aussi une variable
        pour une partie de
	<link linkend="porting-pkgname"><makevar>PKGNAME</makevar></link> de
        fa&ccedil;on &agrave; ce que les paquetages aient des noms
	diff&eacute;rents.</para>

      <para>Cela sera plus clair avec un exemple. C'est un extrait de
	<filename>japanese/xdvi300/Makefile</filename>&nbsp;:</para>
      
      <programlisting>
PKGNAME=       ja-xdvi${RESOLUTION}-17
 :
# default
RESOLUTION?=   300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${RESOLUTION} != 300 && ${RESOLUTION} != 400
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@${ECHO} "Erreur: valeur incorrecte pour RESOLUTION: \"${RESOLUTION}\"" 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@${ECHO} "Les valeurs acceptables sont : 118, 240, 300 (par d&eacute;faut) et 400." 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@${FALSE}
.endif</programlisting>

      <para><filename>japanese/xdvi300</filename> contient aussi les fichiers
        de &ldquo;<foreignphrase>patches</foreignphrase>&rdquo;, paquetages, 
        etc. Si vous y tapez <command>make</command>, la valeur de la
        r&eacute;solution sera prise par d&eacute;faut (300) et le logiciel
        port&eacute; compilera normalement.</para>

      <para>Poue les autres r&eacute;solutions, voici le
	<filename>xdvi118/Makefile</filename> 
        <emphasis>complet</emphasis>&nbsp;:</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&eacute;finition de <makevar>MASTERDIR</makevar> dit &agrave;
	<filename>bsd.port.mk</filename> que le jeu de sous-r&eacute;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&eacute; sera
        compil&eacute; avec une r&eacute;solution de 118.</para>
    </sect2>

    <sect2>
      <title>Versions des bibloth&egrave;ques partag&eacute;es</title>
      
      <para>Lisez tout d'abord s'il vous pla&icirc;t nos
        <link linkend="policies-shlib">Instructions &agrave; propos des versions
        de biblioth&egrave;ques partag&eacute;es</link> pour savoir comment
        g&eacute;rer de fa&ccedil;on g&eacute;n&eacute;rale les versions de
        biblioth&egrave;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&egrave;s important que ces d&eacute;tails soient
        attentivement examin&eacute;s, parce que nous nous trouvons dans une
        situation assez particuli&egrave;re dans laquelle nous devons faire
        cohabiter des douzaines de logiciels potentiellement incompatibles. 
        Les importations &agrave; la va-vite de logiciels ont pos&eacute; dans
        le pass&eacute; de gros probl&egrave;mes en ce qui concerne les
        biblioth&egrave;ques partag&eacute;es (vous &ecirc;tes vous jamais
        demand&eacute; pourquoi le num&eacute;ro de version de la 
        biblioth&egrave;que partag&eacute;e <filename>jpeg-6b</filename>
        &eacute;tait 0.9?). En cas de doute, envoyez un message &agrave; 
        &a.ports;. La plupart du temps, votre t&acirc;che se limitera &agrave;
        d&eacute;terminer la bonne version de biblioth&egrave;que 
        partag&eacute;e et &agrave; appliquer les bonnes mises &agrave; 
        niveau&nbsp;-&nbsp;<foreignphrase>patches</foreignphrase>&nbsp;-&nbsp;pour
        l'impl&eacute;menter.</para>

      <para>N&eacute;anmoins, s'il y a une biblioth&egrave;que port&eacute;e qui
        n'est qu'une m&ecirc;me version de la m&ecirc;me biblioth&egrave;que
        partag&eacute;e d&eacute;j&agrave; pr&eacute;sente au catalogue, la 
        situation est beaucoup plus complexe.  Bri&egrave;vement, 
        l'impl&eacute;mentation sous FreeBSD ne permet pas &agrave; 
        l'utilisateur de pr&eacute;ciser &agrave; l'&eacute;diteur de liens avec
        quelle version de biblioth&egrave;que partag&eacute;e effectuer 
        l'&eacute;dition de liens (l'&eacute;diteur de liens choisira toujours
        le num&eacute;ro de version le plus &eacute;lev&eacute;). Cela signifie
        que, s'il y a sur le syst&egrave;me une 
        <filename>libfoo.so.3.2</filename> et une
	<filename>libfoo.so.4.0</filename>, il n'y a aucun moyen de dire 
        &agrave; l'&eacute;diteur de liens qu'une application donn&eacute;e
        doit &ecirc;tre li&eacute;e avec <filename>libfoo.so.3.2</filename>. 
        c'est totalement masqu&eacute; au moment de l'&eacute;dition de liens.
        Dans ce cas, il n'y a qu'une seule solution, renommer la
	<emphasis>base</emphasis> du nom de la biblioth&egrave;que 
        partag&eacute;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 &ecirc;tre li&eacute;es avec d'autres logiciels 
        port&eacute;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 &agrave;
	<filename>pkg/PLIST</filename> (cela signifie que vous ne devez 
	<emphasis>pas</emphasis> lister les pages de manuel dans 
	<filename>PLIST</filename>&mdash;reportez-vous &agrave; la section
        <link linkend="porting-plist">Modifier <filename>PLIST</filename> sur 
        la base des variables du <literal>make</literal></link> pour plus de 
        d&eacute;tails). Cela provoquera aussi la compression ou la 
        d&eacute;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 &ecirc;tre 
        compress&eacute;es &agrave; 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&eacute;es d&eacute;j&agrave; compress&eacute;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 &agrave; faire de
	sp&eacute;cial.</para>

      <para><makevar>MANCOMPRESSED</makevar> est automatiquement d&eacute;finie
        &agrave; <literal>yes</literal> si <makevar>USE_IMAKE</makevar> est 
        d&eacute;finie et que <makevar>NO_INSTALL_MANPAGES</makevar> ne l'est
        pas, et &agrave; <literal>no</literal> sinon. Vous n'avez pas &agrave;
        la d&eacute;finir explicitement, &agrave; moins que la valeur par
        d&eacute;faut ne convienne pas &agrave; votre logiciel &agrave; 
        porter.</para>

      <para>Si votre logiciel &agrave; 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 &ecirc;tre 
        install&eacute;es dans le r&eacute;pertoire habituel, comme c'est le
        cas pour certains modules port&eacute;s Perl, vous pouvez d&eacute;finir
        des r&eacute;pertoires individualis&eacute;s pour les pages de manuel
	avec <makevar>MAN<replaceable>section</replaceable>PREFIX</makevar> 
        (o&ugrave; <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&eacute;pertoires 
        d&eacute;pendant de la langue, d&eacute;finissez les noms de ces langues
	dans <makevar>MANLANG</makevar>. La valeur par d&eacute;faut de cette
	variable est <literal>""</literal> (i.e., Anglais seulement).</para>
	  
      <para>Voici un exemple qui rassemble tout cela&nbsp;:</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&eacute;s par ce
        logiciel port&eacute;&nbsp;:</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&eacute;s qui ont besoin de Motif</title>
      
      <para>Il y a de nombreux programmes qui ont besoin d'une biblioth&egrave;que 
        Motif pour compiler (disponible aupr&egrave;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&icirc;te
        &agrave; outils tr&egrave;s utilis&eacute;e et que ses licences
        autorisent habituellement la redistribution de binaires si la
        biblioth&egrave;que est li&eacute;e statiquement, nous avons 
        pr&eacute;vu un m&eacute;canisme pour g&eacute;rer les logiciels 
        port&eacute;s qui ont besoin de Motif de fa&ccedil;on &agrave; pouvoir
        facilement compiler des binaires soit li&eacute;s dynamiquement (pour
        ceux qui utilisent le catalogue des logiciels port&eacute;s) ou
        statiquement (pour ceux qui distribuent des paquetages).</para>
	  
      <sect3>
	<title><makevar>REQUIRES_MOTIF</makevar></title>
	
	<para>Si votre logiciel &agrave; porter a besoin de Motif, 
          d&eacute;finissez cette variable dans le 
          <filename>Makefile</filename>. cela emp&eacute;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&eacute;finie par
          <filename>bsd.port.mk</filename> pour r&eacute;f&eacute;rencer la
          version appropri&eacute;e de la biblioth&egrave;que Motif. Ajoutez
          s'il vous pla&icirc;t un 
          correctif&nbsp;-&nbsp;<foreignphrase>patch</foreignphrase>&nbsp;-&nbsp;au 
          source pour qu'il utilise cette variable chaque fois que la 
          biblioth&egrave;que Motif est r&eacute;f&eacute;renc&eacute; dans le 
          <filename>Makefile</filename> ou le 
          <filename>Imakefile</filename>.</para>

	<para>Il y a deux cas de figure courants&nbsp;:</para>
	
	<itemizedlist>
	  <listitem>
	    <para>Si le logiciel &agrave; porter d&eacute;signe la 
              biblioth&egrave;que Motif avec <literal>-lXm</literal> dans son 
              <filename>Makefile</filename> ou <filename>Imakefile</filename>, 
              remplacez-le simplement par
	      <literal>&dollar;{MOTIFLIB}</literal>,</para>
	  </listitem>
	  
	  <listitem>
	    <para>Si le logiciel &agrave; porter utilise 
              <literal>XmClientLibs</literal> dans son
	      <filename>Imakefile</filename>, remplacez-le par
	      <literal>&dollar;{MOTIFLIB} &dollar;{XTOOLLIB}
		&dollar;{XLIB}</literal>.</para>
	  </listitem>
	</itemizedlist>
	
	<para>Remarquez que la variable <makevar>MOTIFLIB</makevar> est 
          (habituellement) remplac&eacute;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 &agrave; porter installe des polices de 
        caract&egrave;res pour le Syst&egrave;me X Window, mettez-les dans
	<filename><makevar>X11BASE</makevar>/lib/X11/fonts/local</filename>.
        Ce r&eacute;pertoire est une nouveaut&eacute; de XFree86 version 3.3.3.
        S'il n'existe pas, cr&eacute;ez-le s'il vous pla&icirc;t et 
        &eacute;mettez un message pour sugg&eacute;rer &agrave; l'utilisateur de        passer &agrave; la version 3.3.3, ou ult&eacute;rieure, de XFree86, ou
        ajoutez au moins ce r&eacute;pertoire aux chemins d'acc&egrave;s aux
        polices de caract&egrave;res dans 
        <filename>/etc/XF86Config</filename>.</para>
    </sect2>

    <sect2>
      <title>Fichiers &ldquo;Info&rdquo;</title>
      
      <para>La nouvelle version de <application>texinfo</application> (depuis
        2.2.2-RELEASE) comporte un utilitaire appel&eacute;
	<command>install-info</command> pour ajouter ou supprimer des
        entr&eacute;es dans le fichier <filename>dir</filename>. Si votre 
        logiciel &agrave; porter installe des documents &ldquo;info&rdquo;, 
        suivez s'il vous pla&icirc;t les instructions ci-dessous pour que votre
        logiciel port&eacute;/pr&eacute;compil&eacute; mette correctement 
        &agrave; 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&eacute;ratif d'assembler correctement ensemble tous les fichiers
        &ldquo;info;&rdquo;. Si c'est proprement fait, il en r&eacute;sultera
        une <emphasis>belle</emphasis> &eacute;dition, accordez-moi donc s'il
        vous pla&icirc;t votre attention.)</para>

       <para>Voici ce que vous devez en premier lieu savoir (pour porter un 
         logiciel)&nbsp;:<footnote><para>Traduction&nbsp;:</para>
       <screen>&prompt.user; <userinput>install-info --help</userinput>
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
  Installe INFO-FILE dans le r&eacute;pertoire &ldquo;Info&rdquo; DIR-FILE.

Options:
--delete          supprime les entr&eacute;es existantes dans INFO-FILE;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n'ins&egrave;re aucune nouvelle entr&eacute;e.
&nbsp;:
--entry=TEXT      Ins&egrave;re un entr&eacute;e pour le r&eacute;pertoire &ldquo;Info;&rdquo;.
&nbsp;:
--section=SEC     Ajoute les entr&eacute;es de ce fichier &agrave; la section SEC de ce r&eacute;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;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don't insert any new entries.
&nbsp;:
--entry=TEXT      Insert TEXT as an Info directory entry.
&nbsp;:
--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 &ldquo;info&rdquo;; il ne fait qu'ins&eacute;rer ou supprimer
          des entr&eacute;es au fichier <filename>dir</filename>.</para>
      </note>
      
      <para>Voici une proc&eacute;dure en sept &eacute;tapes pour adapter les
        logiciels &agrave; porter pour qu'ils utilisent
	<command>install-info</command>. Je prendrais comme exemple
	<filename>editors/emacs</filename>&nbsp;:</para>
	    
      <procedure>
	<step>
	  <para>Consultez les sources <application>texinfo</application> et
            construisez un fichier de mise &agrave; jour qui ins&egrave;re
            des instructions <literal>@dircategory</literal> et 
            <literal>@direntry</literal> aux fichiers o&ugrave; il n'y en a pas.
            Voici un extrait de mon 
            &ldquo;<foreignphrase>patch</foreignphrase>&rdquo;&nbsp;:</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 @@
             
&nbsp;@setfilename ../info/vip
&nbsp;@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip).          A VI-emulation for Emacs.
+@end direntry
             
&nbsp;@iftex
&nbsp;@finalout
&nbsp;:
          </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&eacute;es dont
            vous avez besoin, regardez donc &agrave; droite et &agrave; gauche
            avant de le cr&eacute;er vous-m&ecirc;me. Veillez aussi &agrave;
            consulter les entr&eacute;es pour les logiciels en rapport avec le
            vo&circ;tre, pour que vos noms de sections et indentations soient en
            coh&eacute;rence (nous recommandons de mettre les libell&eacute;s 
            apr&egrave;s la quatri&egrave;me position de tabulation).</para> 
		
	  <note>
	    <para>Remarquez que vous ne pouvez mettre qu'une entr&eacute;e 
              &ldquo;info&rdquo; par fichier, &agrave; cause d'un bogue 
	      dans <command>install-info --delete</command>, qui ne supprime
              que la premi&egrave;re entr&eacute;e de la section
	      <literal>@direntry</literal> si vous en indiquez plusieurs.</para>
	  </note>
	  
	  <para>Vous pouvez donner les entr&eacute;es <literal>dir</literal> 
	    comme arguments &agrave; <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&eacute;e parce que vous devez 
            r&eacute;p&eacute;ter la m&ecirc;me information &agrave; trois
            endroits diff&eacute;rents (<filename>Makefile</filename> et
	    <literal>@exec</literal>/<literal>@unexec</literal> de
	    <filename>PLIST</filename>; voyez plus bas). N&eacute;anmoins, si
            vous avez des fichiers &ldquo;info&rdquo; en Japonais (ou 
            cod&eacute;s sur plusieurs octets), vous devrez utiliser les 
            param&egrave;tres suppl&eacute;mentaires 
            d'<command>install-info</command> parce que
	    <command>makeinfo</command> ne sait pas g&eacute;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&egrave;re de proc&eacute;der.)</para>
	</step>
	
	<step>
	  <para>Retournez dans le r&eacute;pertoire de votre logiciel 
            port&eacute;, faites un <command>make clean; make</command> et 
            v&eacute;rifiez que les fichiers &ldquo;info&rdquo; sont 
            r&eacute;g&eacute;n&eacute;r&eacute;s &agrave; partir des sources 
            <application>texinfo</application>. Comme ces derniers sont plus 
            r&eacute;cents que les fichiers &ldquo;info&rdquo;, ils doivent 
            &ecirc;tre reconstruits par le <command>make</command>; mais de 
            nombreux <filename>Makefile</filename>s ne comportent pas les 
            d&eacute;pendances correctes pour les fichiers &ldquo;info&rdquo;. 
            Dans le cas d'<command>emacs</command>, j'ai d&ucirc; rectifier le
	    <filename>Makefile.in</filename> principal pour qu'il aille dans le
            sous-r&eacute;pertoire <filename>man</filename> pour reconstruire 
	    les pages &ldquo;info&rdquo;&nbsp;:</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 @@
&nbsp;# Sous-r&eacute;pertoires &agrave; reconstruire r&eacute;cursivement.  `lisp' n'est pas inclus
&nbsp;# parce que les fichiers lisp compil&eacute;s font partie de la distribution
&nbsp;# et que vous ne pouvez pas les recompiler sans installer d'abord Emacs
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
             
&nbsp;# makefile des sous-r&eacute;pertoires list&eacute;s dans $SUBDIR.
&nbsp;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 @@
&nbsp;${srcdir}/gnu1.texi \
&nbsp;${srcdir}/glossary.texi
             
+all: info
&nbsp;info: $(INFO_TARGETS)
             
&nbsp;dvi: $(DVI_TARGETS)
          </programlisting>
		  
	  <para>La deuxi&egrave;me modification est n&eacute;cessaire parce que
            la cible par d&eacute;faut dans le sous-r&eacute;pertoire 
            <filename>man</filename> s'appelle <maketarget>info</maketarget>, 
            alors que le <filename>Makefile</filename> veut ex&eacute;cuter la 
            cible <maketarget>all</maketarget>. J'ai aussi supprim&eacute; 
            l'installation du fichier &ldquo;info&rdquo; parce que nous en
            avons d&eacute;j&agrave; un de m&ecirc;me nom dans
	    <filename>/usr/share/info</filename> (cette correction 
            n'appara&icirc;t pas dans l'exemple).</para>
	</step>
	
	<step>
	  <para>Si le fichier <filename>dir</filename> est install&eacute; par
            des instructions quelque part dans le <filename>Makefile</filename>,
            supprimez-les. Votre logiciel &agrave; porter ne doit pas le faire.
            Supprimez aussi toutes les autres commandes qui 
            &ldquo;saliraient&rdquo; 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 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cd ${infodir};  \
-          if [ -f dir ]; then \
-            if [ ! -f dir.old ]; then mv -f dir dir.old; \
-            else mv -f dir dir.bak; fi; \
-          fi; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd ${srcdir}/info ; \
-          (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
-          (cd $${thisdir}; chmod a+r ${infodir}/dir); \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cd $${thisdir}; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chmod a+r ${infodir}/$$f); \
          </programlisting>
	</step>
		
	<step>
	  <para>(Cette &eacute;tape n'est n&eacute;cessaire que si vous modifiez
            un logiciel port&eacute; d&eacute;j&agrave; existant.) Consultez
            <filename>pkg/PLIST</filename> et supprimez tout ce qui essaye 
            d'appliquer des rectificatifs &agrave; 
            <filename>info/dir</filename>. Cela peut se produire dans
	    <filename>pkg/INSTALL</filename> ou un autre fichier, faites donc
            une recherche d&eacute;taill&eacute;e&nbsp;:</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 @@
&nbsp;man/man1/emacs.1.gz
&nbsp;man/man1/etags.1.gz
&nbsp;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
&nbsp;info/cl
&nbsp;info/cl-1
&nbsp;info/cl-2
          </programlisting>
	</step>
	
	<step>
	  <para>Ajoutez une cible <maketarget>post-install</maketarget> au
	    <filename>Makefile</filename>  pour cr&eacute;er un fichier
            <filename>dir</filename> s'il n'y en a pas. Appelez aussi
	    <maketarget>install-info</maketarget> pour les fichiers 
            &ldquo;info&rdquo; install&eacute;s&nbsp;:</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 @@
&nbsp;post-install:
&nbsp;.for file in emacs-19.34 emacsclient etags ctags b2m
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strip ${PREFIX}/bin/${file}
&nbsp;.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
             
&nbsp;.include &lt;bsd.port.mk&gt; 
          </programlisting>
		
	  <para>N'utilisez rien d'autre que 
            <filename>/usr/share/info/dir</filename> et la commande ci-dessus
            pour cr&eacute;er un nouveau fichier &ldquo;info&rdquo;. J'ai en
            fait ajout&eacute; les trois premi&egrave;res lignes du rectificatif
            ci-dessus &agrave; <filename>bsd.port.mk</filename> pour le cas
            o&grave; vous ne l'auriez pas fait par vous-m&ecirc;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> 
            &eacute;quivalentes pour <command>pkg_delete</command>. Vous n'avez
            pas besoin de supprimer <filename>info/dir</filename> avec
	    <literal>@unexec</literal>&nbsp;:</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 @@
&nbsp;man/man1/etags.1.gz
&nbsp;man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
&nbsp;:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
&nbsp;info/cl
&nbsp;info/cl-1
@@ -87,6 +94,18 @@
&nbsp;info/viper-3
&nbsp;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
&nbsp;:
+@exec install-info %D/info/ccmode %D/info/dir
&nbsp;libexec/emacs/19.34/i386--freebsd/cvtmail
&nbsp;libexec/emacs/19.34/i386--freebsd/digest-doc
          </programlisting>

	  <note>
	    <para>Les commandes <literal>@unexec install-info --delete</literal>
              doivent &ecirc;tre plac&eacute;es avant les fichiers 
              &ldquo;info&rdquo; eux-m&ecirc;mes pour qu'elles puissent lire
              les fichiers. Il faut aussi placer les commandes
	      <literal>@exec install-info</literal> apr&egrave;s les fichiers
              &ldquo;info&rdquo; et la commande <literal>@exec</literal> qui
              cr&eacute;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&eacute;rifiez le
            fichier <filename>dir</filename> avant et apr&egrave;s chaque
            &eacute;tape.</para>
	</step>
      </procedure>
    </sect2>

    <sect2>
      <title>Le sous r&eacute;pertoire <filename>pkg/</filename></title>
      
      <para>Il y a quelques astuces dont je n'ai pas encore parl&eacute; 
        &agrave; propos du sous-r&eacute;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&eacute; sert souvent &agrave; informer des &eacute;tapes
          d'installation qui doivent &ecirc;tre effectu&eacute;es apr&egrave;s
	  <command>pkg_add</command> ou pour afficher des informations &agrave;
          propos de la licence.</para>

	<note>
	  <para>Il n'y a pas besoin d'ajouter le fichier 
            <filename>pkg/MESSAGE</filename> &agrave; 
            <filename>pkg/PLIST</filename>. D'autre part, il ne sera pas 
            affich&eacute; automatiquement si l'utilisateur installe le logiciel
            port&eacute; au lieu du logiciel pr&eacute;compil&eacute;, vous 
            devriez donc probablement l'afficher vous-m&ecirc;me depuis la cible
	    <maketarget>post-install</maketarget>.</para>
	</note>
      </sect3>
      
      <sect3>
	<title><filename>INSTALL</filename></title>
	
	<para>S'il faut ex&eacute;cuter des commandes lors de l'installation du
          logiciel pr&eacute;compil&eacute; avec <command>pkg_add</command>,
          vous pouvez le faire avec la proc&eacute;dure
	  <filename>pkg/INSTALL</filename>. Cette proc&eacute;dure sera
          automatiquement ajout&eacute;e au paquetage et ex&eacute;cut&eacute;e
          deux fois par <command>pkg_add</command>. La premi&egrave;re fois sous
          la forme <literal>INSTALL &dollar;{PKGNAME} PRE-INSTALL</literal> et
          la seconde fois sous la forme  
          <literal>INSTALL &dollar;{PKGNAME} POST-INSTALL</literal>. Vous pouvez
          tester <literal>&dollar;2</literal> pour savoir comment la
          proc&eacute;dure a &eacute;t&eacute; appel&eacute;e. La variable
          d'environnement <envar>PKG_PREFIX</envar> contient le chemin 
          d'acc&egrave;s au r&eacute;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&eacute;dure n'est pas ex&eacute;cut&eacute;e 
            automatiquement si le logiciel port&eacute; est install&eacute; 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&eacute;.</para>
	</note>
      </sect3>
      
      <sect3>
	<title><filename>REQ</filename></title>
	
	<para>Si votre logiciel &agrave; porter doit d&eacute;terminer s'il doit
          &ecirc;tre install&eacute; ou non, vous pouvez cr&eacute;er une
          proc&eacute;dure 
          <filename>pkg/REQ</filename>&nbsp;-&nbsp;&ldquo;requis&rdquo;. Elle
          sera appel&eacute;e automatiquement lors de l'installation et de la
          d&eacute;sinstallation pour d&eacute;cider s'il faut ou non effectuer
          l'op&eacute;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&eacute;s, en particulier les logiciels
          <literal>p5-...</literal>, doivent modifier leur 
          <filename>PLIST</filename> selon les options avec lesquelles ils sont
          configur&eacute;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&eacute;es par les
          valeurs appropri&eacute;es. La valeur de <literal>%%OSREL%%</literal> 
          est le num&eacute;ro de version du syst&egrave;me d'exploitation 
          (e.g., <literal>2.2.7</literal>). <literal>%%PERL_VERSION%%</literal>
          est le num&eacute;ro de version complet de perl (e.g., 
          <literal>5.00502</literal>) et <literal>%%PERL_VER%%</literal> est le
          num&eacute;ro de version de perl, sans le niveau de 
          &ldquo;<foreignphrase>patch</foreignphrase>&rdquo; (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&eacute;es par <replaceable>VALUE</replaceable> dans la
	  <filename>PLIST</filename>.</para>
	  
	<para>Par exemple, si votre logiciel &agrave; porter installe de 
          nombreux fichiers dans un sous-r&eacute;pertoire diff&eacute;rent 
          selon la version, vous pouvez mettre quelque chose comme&nbsp;:</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&icirc;t dans la <filename>PLIST</filename>. De cette 
          fa&ccedil;on, lorsque vous mettez &agrave; jour le logiciel, vous 
          n'aurez pas &agrave; modifier des douzaines (dans certains cas, des
          centaines) de lignes dans la <filename>PLIST</filename>.</para>
	  
	<para>Cette substitution (de m&ecirc;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 &eacute;crivant dans
          <makevar>TMPPLIST</makevar> (par d&eacute;faut&nbsp;:
	  <filename><makevar>WRKDIR</makevar>/.PLIST.mktmp</filename>). Si votre
          logiciel &agrave; porter construit <makevar>PLIST</makevar> &agrave;
          la vol&eacute;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&eacute;
	  <makevar>TMPPLIST</makevar>.</para>
      </sect3>
      
      <sect3>
	<title id="porting-pkgsubdir">Changer les noms des fichiers du 
          sous-r&eacute;pertoire <filename>pkg</filename></title>
	
	<para>Tous les noms de fichier du sous-r&eacute;pertoire 
          <filename>pkg</filename> sont d&eacute;finis par des variables, vous
          pouvez donc les changer dans votre <filename>Makefile</filename> si
          besoin est. C'est particuli&egrave;rement utile si vous partager le
          m&ecirc;me sous-r&eacute;pertoire <filename>pkg</filename> entre 
          plusieurs logiciels port&eacute;s ou devez &eacute;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&eacute;e d'&eacute;crire directement dans le 
          sous-r&eacute;pertoire <filename>pkg</filename>.</para>

	<para>Voici la liste de ces variables et leurs valeurs par 
          d&eacute;faut&nbsp;:</para>

	<informaltable frame="none">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>Variable</entry>
		<entry>Valeur par d&eacute;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&icirc;t ces variables plut&ocirc;t que de
          surcharger <makevar>PKG_ARGS</makevar>. Si vous modifiez
	  <makevar>PKG_ARGS</makevar>, ces fichiers ne seront pas correctement
	  install&eacute;s dans <filename>/var/db/pkg</filename> lors de 
          l'installation sous forme de logiciel port&eacute;.</para>
      </sect3>
    </sect2>

    <sect2>
      <title>Probl&egrave;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 &grave;
        cl&eacute; publique et ITAR&nbsp;-&nbsp;exportation de logiciel de
        cryptographie&nbsp;-&nbsp;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&eacute;, pour le logiciel que vous
          porter, de lire les termes de la licence et de vous assurer que le
          projet FreeBSD ne pourra pas &ecirc;tre accus&eacute; de les violer en
          redistribuant le source ou les binaires compil&eacute;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&eacute;finir dans le
        <filename>Makefile</filename> pour g&eacute;rer les situations qui se
        produisent souvent&nbsp;:</para>
	    
      <orderedlist>
	<listitem>
	  <para>Si le logiciel &agrave; porter a une licence de type &ldquo;non
            commercialisable&rdquo; affectez &agrave; la variable 
            <makevar>NO_CDROM</makevar> une cha&icirc;ne de caract&egrave;res
            expliquant pourquoi. Nous v&eacute;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&eacute; sur chaque site, 
            ou si le logiciel pr&eacute;compil&eacute; ne peut pas &ecirc;tre 
            redistribu&eacute; du fait de sa licence, affectez &agrave; la 
            variable <makevar>NO_PACKAGE</makevar> une cha&icirc;ne de 
            caract&egrave;res expliquant pourquoi. Nous v&eacute;rifierons que
            ces logiciels pr&eacute;compil&eacute;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&eacute;gales &agrave; l'utilisation
            du logiciel (e.g., cryptographie) ou que la licence est du type
            &ldquo;pas d'usage commercial&rdquo;, affectez &agrave; la variable
	    <makevar>RESTRICTED</makevar> une cha&icirc;ne de caract&egrave;res
            expliquant pourquoi. Pour ces logiciels, ni les archives du source
            ni le logiciel pr&eacute;compil&eacute; ne seront m&ecirc;me
            disponibles sur nos sites ftp.</para>
	</listitem>
      </orderedlist>
      
      <note>
	<para>La Licence Publique G&eacute;n&eacute;rale 
          GNU&nbsp;-&nbsp;<foreignphrase>GNU General Public License 
          (GPL)</foreignphrase>, version 1 et 2, ne pose normalement pas de
          probl&egrave;me pour les logiciels port&eacute;s.</para>
      </note>
      
      <note>
	<para>Si vous &ecirc;tes 
          &ldquo;<foreignphrase>committer</foreignphrase>&rdquo;, veillez 
          &agrave; mettre aussi &agrave; jour le fichier
	  <filename>ports/LEGAL</filename>.</para>
      </note>
    </sect2>
    
    <sect2>
      <title>Mises &agrave; jour</title>
      
      <para>Si vous constatez qu'un logiciel port&eacute; n'est pas 
        synchronis&eacute; avec la plus r&eacute;cente version des auteurs 
        originaux, v&eacute;rifiez d'abord que vous avez la derni&egrave;re 
        version du logiciel port&eacute;. Vous la trouverez dans le 
        r&eacute;pertoire <filename>ports/ports-current</filename> des sites
        miroir ftp.</para>
	    
      <para>Envoyez ensuite un courrier &eacute;lectronique au responsable de
        la maintenance, s'il est mentionn&eacute; dans le 
        <filename>Makefile</filename> du logiciel. Il est peut-&ecirc;tre
        d&eacute;j&agrave; en train de travailler sur la mise &agrave; jour, ou
        a une bonne raison de ne pas la faire (par exemple &agrave; cause de
        probl&egrave;mes de stabilit&eacute; de la nouvelle version).</para>
	    
      <para>Si le responsable de la maintenance vous demande de mettre le
        logiciel &agrave; jour ou s'il n'y a tout simplement pas de responsable,
        faites cette mise &agrave; jour et envoyez un delta r&eacute;cursif 
        (soit contextuel soit unifi&eacute;, mais les responsables de 
        l'arborescence des logiciels port&eacute;s pr&eacute;f&egrave;rent le 
        format unifi&eacute;) entre les anciens et les nouveaux 
        r&eacute;pertoires du logiciel (e.g., si votre r&eacute;pertoire 
        modifi&eacute; s'appelle <filename>superedit</filename> et l'original 
        tel que dans notre arborescence <filename>superedit.bak</filename>, 
        envoyez nous alors le r&eacute;sultat de 
        <command>diff -ruN superedit.bak superedit</command>). 
        Contr&ocirc;lez-le s'il vous pla&icirc;t pour v&eacute;rifier que toutes
        les modifications sont coh&eacute;rentes. La meilleure fa&ccedil;on de 
        nous l'envoyer est de l'inclure dans un &man.send-pr.1; 
        (cat&eacute;gorie <literal>ports</literal>). Pr&eacute;cisez s'il vous 
        pla&icirc;t quels sont les fichiers ajout&eacute;s et supprim&eacute;s,
        parce qu'il faut explicitement les indiquez &agrave; CVS au moment de le
        mise &agrave; 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&icirc;t &man.diff.1; et non
        &man.shar.1; pour nous envoyer les mises &agrave; jour des logiciels
	port&eacute;s.</para>
    </sect2>

    <sect2>
      <title><anchor id="porting-dads">A faire &agrave; ne pas faire</title>
      
      <para>Voici une liste de ce qu'il faut habituellement faire ou 
        &eacute;viter lors d'un portage. Vous devriez utiliser cette liste
        pour valider votre propre portage et vous pouvez aussi contr&ocirc;ler
        les logiciels que d'autres ont soumis dans la base des donn&eacute;es 
        des rapports d'incidents. Transmettez tous vos commentaires au sujet des
        logiciels port&eacute;s dans la rubrique
	<link linkend="contrib-general">Rapports d'incidents et commentaires
        g&eacute;n&eacute;raux&nbsp;-&nbsp;<foreignphrase>Bug Reports and 
        General Commentary</foreignphrase></link>. Validez les logiciels
        port&eacute;s mentionn&eacute;s dans la base nous permettra de les
        int&eacute;grer plus rapidement et prouvera en m&ecirc;me temps que vous
        savez ce que vous faites.</para>
      
      <sect3>
	<title>Nettoyez les binaires</title>
	
	<para>Supprimez les informations 
          inutiles&nbsp;-&nbsp;<foreignphrase>strip</foreignphrase>&nbsp;-&nbsp;des 
          binaires. Si c'est d&eacute;j&agrave; fait par le source d'origine, 
          tant mieux; sinon ajoutez une r&egrave;gle &agrave; la cible 
          <maketarget>post-install</maketarget> pour le faire vous-m&ecirc;me.
          Voici un example&nbsp;:</para>

	<programlisting>
post-install:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strip ${PREFIX}/bin/xdl
        </programlisting>

	<para>Utilisez la commande &man.file.1; sur l'ex&eacute;cutable
          install&eacute; pour voir s'il est d&eacute;j&agrave; nettoy&eacute;.
	  Si elle ne vous r&eacute;pond pas <literal>not stripped</literal>, 
          c'est d&eacute;j&agrave; fait.</para>
      </sect3>
	
      <sect3>
	<title>macros-instruction INSTALL_*</title>
	
	<para>Utilisez les macros-instructions fournies par
          <filename>bsd.port.mk</filename> pour &ecirc;tre s&ucirc;r que les 
          droits sur les fichiers sont correctement g&eacute;r&eacute;s par vos
          cibles <maketarget>*-install</maketarget>. Ce sont&nbsp;:</para>
	    
	<itemizedlist>
	  <listitem>
	    <para><makevar>INSTALL_PROGRAM</makevar> pour installer les binaires
	      ex&eacute;cutables,</para>
	  </listitem>
	  
	  <listitem>
	    <para><makevar>INSTALL_SCRIPT</makevar> pour installer les 
              proc&eacute;dures ex&eacute;cutables,</para>
	  </listitem>
	  
	  <listitem>
	    <para><makevar>INSTALL_DATA</makevar> pour installer les 
              donn&eacute;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&eacute;es 
          d'une commande <command>install</command> avec les options
          appropri&eacute;es. Vous trouverez plus bas un exemple de leur
          utilisation.</para>
      </sect3>
      
      <sect3 id="porting-wrkdir">
	<title><makevar>WRKDIR</makevar></title>
	
	<para>N'&eacute;crivez rien en dehors de <makevar>WRKDIR</makevar>.
          <makevar>WRKDIR</makevar> est le seul endroit o&ugrave; vous 
          &ecirc;tes s&ucirc;r de pouvoir &eacute;crire pendant la
          compilation d'un logiciel port&eacute; (reportez-vous &agrave; la
          section <link linkend="ports-cd">compiler les logiciels port&eacute;s
          depuis un CD-ROM</link> pour avoir un example de compilation de 
          logiciels port&eacute;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&eacute;finissant une 
          variable</link>, non en l'&eacute;crasant.</para>
      </sect3>
      
      <sect3>
	<title><makevar>WRKDIRPREFIX</makevar></title>
	
	<para>Veillez &agrave; utiliser <makevar>WRKDIRPREFIX</makevar>.
          Cela ne concerne pas la plupart des logiciels port&eacute;s. Mais,
          en particulier si vous faites r&eacute;f&eacute;rence au
	  <makevar>WRKDIR</makevar> d'un autre logiciel, notez que la
	  r&eacute;f&eacute;rence correcte est
	  <filename><makevar>WRKDIRPREFIX</makevar><makevar>PORTSDIR</makevar>/<replaceable>sous-r&eacute;pertoire</replaceable>/<replaceable>nom</replaceable>/work</filename> 
          et non <filename><makevar>PORTSDIR</makevar>/<replaceable>sous-r&eacute;pertoire</replaceable>/<replaceable>nom</replaceable>/work</filename> 
          ou <filename><makevar>.CURDIR</makevar>/../../<replaceable>sous-r&eacute;pertoire</replaceable>/<replaceable>nom</replaceable>/work</filename> 
          ou autre chose encore.</para>
	
	<para>Par ailleurs, si vous d&eacute;finissez vous-m&ecirc;me 
          <makevar>WRKDIR</makevar>, veillez &agrave; bien le faire commencer
          par <literal>&dollar;{WKRDIRPREFIX}&dollar;{.CURDIR}</literal>.</para>
      </sect3>
      
      <sect3 id="porting-versions">
	<title>Distinguer les syst&egrave;mes d'exploitation et leurs
          versions</title>
	
	<para>Vous pouvez tomber sur du code qui doit &ecirc;tre modifi&eacute;
          ou compil&eacute; conditionnellement selon la version d'Unix sur 
          laquelle il s'ex&eacute;cutera. Si vous avez besoin de faire ce type
          de modifications du code ou de mettre en place une compilation 
          conditionelle, veillez &agrave; ce que vos modifications soient aussi
          g&eacute;n&eacute;rales que possible, de sorte que nous puissions
          r&eacute;troporter le code sur les syst&egrave;mes FreeBSD 1.x et le 
          porter sur les autres syst&egrave;mes BSD tels que 4.4BSD du CSRG, 
          BSD/386, 386BSD, NetBSD et OpenBSD.</para>
	  
	<para>La solution appropri&eacute;e pour distinguer 4.3BSD/Reno(1990) et
          les versions ult&eacute;rieures de BSD est d'utiliser la 
          macro-instruction <literal>BSD</literal> d&eacute;finie dans
	  <filename>&lt;sys/param.h&gt;</filename>. Avec de la chance, ce 
          fichier est d&eacute;j&agrave; inclus; si ce n'est pas le cas,
          ajoutez&nbsp;:</para>
	    
	<programlisting>
#if (defined(__unix__) || defined(unix)) &amp;&amp; !defined(USG)
#include &lt;sys/param.h&gt;
#endif
        </programlisting>
	    
	<para>&agrave; l'endroit voulu dans le fichier <filename>.c</filename>.
          Nous estimons que tous les syst&egrave;mes qui d&eacute;finissent ces
          deux symboles disposent d'un <filename>sys/param.h</filename>. Si vous
          tombez sur un syst&egrave;me pour lequel ce n'est pas le cas, nous
          aimerions le savoir. Envoyez un courrier &eacute;lectronique &agrave;
          la &a.ports;.</para>
	    
	<para>L'autre moyen est d'utiliser le style GNU 
          <application>autoconf</application> de faire ce genre de 
          choses&nbsp;:</para>
	    
	<programlisting>
#ifdef HAVE_SYS_PARAM_H
#include &lt;sys/param.h&gt;
#endif
        </programlisting>
	    
	<para>N'oubliez pas d'ajouter <literal>-DHAVE_SYS_PARAM_H</literal>
	  &agrave; <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&nbsp;:</para>
	    
	<programlisting>
#if (defined(BSD) &amp;&amp; (BSD &gt;= 199103))
        </programlisting>
	    
	<para>pour savoir si le code est compil&eacute; sur un syst&egrave;me
          bas&eacute; sur 4.3 Net2 ou sur une version ult&eacute;rieure (e.g.,
	  FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 et 
          ant&eacute;rieurs).</para>
	    
	<para>Utilisez&nbsp;:</para>
	    
	<programlisting>
#if (defined(BSD) &amp;&amp; (BSD &gt;= 199306))
        </programlisting>
	    
	<para>pour savoir si le code est compil&eacute; sur un syst&egrave;me
          bas&eacute; sur 4.4 ou sur une version ult&eacute;rieure (e.g.,
	  FreeBSD 2.x, 4.4, NetBSD 1.0, 386BSD, BSD/386 2.0 et 
          ult&eacute;rieurs).</para>
	    
	<para>La macro-instruction <literal>BSD</literal> prend la valeur
	  <literal>199506</literal> lorsque le code est bas&eacute; sur
          4.4BSD-Lite2. Ceci n'est donn&eacute; qu'&agrave; titre d'information
          et ne doit pas &ecirc;tre utilis&eacute; pour distinguer les versions
          de FreeBSD bas&eacute;es sur 4.4-Lite de celles qui ont 
          int&eacute;gr&eacute; les modifications introduites avec 
          4.4-Lite2. Il faut utiliser pour cela la macro-instruction
	  <literal>__FreeBSD__</literal>.</para>
	    
	<para>Utilisez avec mod&eacute;ration&nbsp;:</para>
	
	<itemizedlist>
	  <listitem>
	    <para><literal>__FreeBSD__</literal> est d&eacute;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&egrave;mes Berkeley, et non &agrave; FreeBSD.</para>
	  </listitem>
	  
	  <listitem>
	    <para>Sous FreeBSD 2.x, <literal>__FreeBSD__</literal> prend la
              valeur <literal>2</literal>. Dans les versions ant&eacute;rieures,
              elle vaut <literal>1</literal>. Les versions suivantes 
              l'augmenteront pour qu'elle soit &eacute;gale &agrave; leur
              num&eacute;ro de version majeure.</para>
	  </listitem>
	  
	  <listitem>
	    <para>Si vous avez besoin de faire la diff&eacute;rence entre un
              syst&egrave;me FreeBSD 2.x et un syst&egrave;me 3.x, la bonne
              mani&egrave;re de faire est normalement d'utiliser les
              macros-instructions <literal>BSD</literal> d&eacute;crites plus
              haut. S'il y a effectivement des modifications sp&eacute;cifiques
              &agrave; FreeBSD (une option particuli&egrave;re pour une
              biblioth&egrave;que partiag&eacute;e avec <command>ld</command>),
              vous pouvez alors &agrave; juste titre utiliser
	      <literal>__FreeBSD__</literal> et 
              <literal>#if __FreeBSD__ &gt; 1</literal> pour tester s'il s'agit
              d'un syst&egrave;me FreeBSD 2.x ou ult&eacute;rieur. Si vous
              avez besoin d'une particularisation plus fine des syst&egrave;mes
              FreeBSD &agrave; partir de 2.0-release, vous pouvez  vous servir
              de&nbsp;:</para>
		    
	    <programlisting>
#if __FreeBSD__ &gt;= 2
#include &lt;osreldate.h&gt;
#    if __FreeBSD_version &gt;= 199504
         /* code propre &agrave; la version 2.0.5 et ult&eacute;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&egrave; 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&eacute;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&egrave;s introduction de
                      texinfo-3.9</entry>
		    <entry>221001</entry>
		  </row>
		  
		  <row>
		    <entry>2.2-STABLE apr&egrave;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&egrave;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&egrave;s 2.2.5-RELEASE</entry>
		    <entry>225001</entry>
		  </row>
		  
		  <row>
		    <entry>2.2-STABLE apr&egrave;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&egrave;s 2.2.7-RELEASE</entry>
		    <entry>227001</entry>
		  </row>
		  
		  <row>
		    <entry>2.2-STABLE apr&egrave;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&egrave;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&egrave;s modification de
                      <citerefentry><refentrytitle>mount</refentrytitle>
                      <manvolnum>2</manvolnum></citerefentry> change</entry>
		    <entry>300002</entry>
		  </row>
		  
		  <row>
		    <entry>3.0-CURRENT apr&egrave;s modification des
                      arguments de ioctl</entry>
		    <entry>300003</entry>
		  </row>
		  
		  <row>
		    <entry>3.0-CURRENT apr&egrave;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&egrave;s 3.0-RELEASE</entry>
		    <entry>300006</entry>
		  </row>
		  
		  <row>
		    <entry>3.0-STABLE apr&egrave;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&egrave;s 3.1-RELEASE</entry>
		    <entry>310001</entry>
		  </row>
		  
		  <row>
		    <entry>4.0-CURRENT apr&egrave;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&ecirc;me 
            comme &ldquo;2.2.5-stable&rdquo; apr&egrave;s la 2.2.5-release. La
            cl&eacute; &eacute;tait autrefois l'ann&eacute;e suivie du mois,
            mais nous avons d&eacute;cid&eacute; d'en changer pour un 
            syst&egrave;me plus explicite constitu&eacute; des num&eacute;ros de
            versions majeure et mineure &agrave; partir de la 2.2. Cela parce
            que le d&eacute;veloppement parall&egrave;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 &agrave; vous soucier des anciennes
            versions <literal>-current</literal>s; elles ne sont 
            mentionn&eacute;es ici qu'&agrave; titre de
            r&eacute;f&eacute;rence.</para>
	</note>
	
	<para>Dans les centaines de logiciels qui ont &eacute;t&eacute;
          port&eacute;s, il n'y a qu'un ou deux cas o&ugrave; il fallait 
          effectivement utiliser <literal>__FreeBSD__</literal>. Ce n'est pas 
          parce qu'un portage ant&eacute;rieur n'a pas &eacute;t&eacute; bien 
          fait et s'en est servi &agrave; tort qu'il faut 
          pers&eacute;verer.</para>
      </sect3>
      
      <sect3>
	<title>Mettre quelque chose apr&egrave;s
	  <filename>bsd.port.mk</filename></title>

	<para>Ne mettez rien apr&egrave;s la ligne <literal>.include
	  &lt;bsd.port.mk&gt;</literal>. Cela peut &ecirc;tre le plus souvent 
          &eacute;vit&eacute; en incluant 
          <filename>bsd.port.pre.mk</filename> quelque part au milieu de votre
	  <filename>Makefile</filename> et
	  <filename>bsd.port.post.mk</filename> &agrave; 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&eacute;langez
            pas les deux.</para>
	</note>
	
	<para><filename>bsd.port.pre.mk</filename> ne d&eacute;finit que 
          quelques variables, qui peuvent &ecirc;tre test&eacute;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&eacute;finies dans <filename>bsd.port.pre.mk</filename> (ce n'est 
          pas une liste exhaustive, reportez-vous s'il vous pla&icirc;t &agrave;
	  <filename>bsd.port.mk</filename> pour avoir une liste 
          compl&egrave;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&ecirc;me forme que le
                  r&eacute;sultat de  <command>uname -m</command> (e.g., 
                  <literal>i386</literal>)</entry>
	      </row>
	      
	      <row>
		<entry><makevar>OPSYS</makevar></entry>
		<entry>Le syst&egrave;me d'exploitation, sous le m&ecirc;me 
                  forme que le r&eacute;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&egrave;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&eacute;rique du syst&egrave;me
                  d'exploitation, identique &agrave;
		  <link linkend="porting-versions"><literal>__FreeBSD_version</literal></link>.</entry>
	      </row>
	      
	      <row>
		<entry><makevar>PORTOBJFORMAT</makevar></entry>
		<entry>Le format &ldquo;objet&rdquo; du syst&egrave;me
		  (<literal>aout</literal> or <literal>elf</literal>)</entry>
	      </row>
	      
	      <row>
		<entry><makevar>LOCALBASE</makevar></entry>
		<entry>La racine de l'arborescence &ldquo;locale&rdquo; (e.g.,
		  <literal>/usr/local/</literal>)</entry>
	      </row>
	      
	      <row>
		<entry><makevar>X11BASE</makevar></entry>
		<entry>La racine de l'arborescence &ldquo;X11&rdquo; (e.g.,
		  <literal>/usr/X11R6</literal>)</entry>
	      </row>
	      
	      <row>
		<entry><makevar>PREFIX</makevar></entry>
		<entry>O&ugrave; le logiciel s'installe lui-m&ecirc;me 
                  (Reportez-vous &agrave; 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&eacute;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&egrave;s
	  <filename>bsd.port.pre.mk</filename>&nbsp;:</para>
	
	<programlisting>
# il est inutile de compiler lang/perl5 si perl5 fait d&eacute;j&agrave; partie du syst&egrave;me
.if ${OSVERSION} > 300003
BROKEN= perl fait partie du syst&egrave;me
.endif

# un seule num&eacute;ro de version de biblioth&egrave;que partag&eacute;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&eacute;j&agrave; les liens pour ELF, mais pas pour a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endif
        </programlisting>
      </sect3>
      
      <sect3>
	<title>Installer des documentations suppl&eacute;mentaires</title>
	
	<para>Si votre logiciel &agrave; porter est accompagn&eacute; d'autres
          documentations que les habituelles pages de manuel ou 
          &ldquo;info&rdquo;, que vous trouvez utiles, installez-les dans
	  <filename><makevar>PREFIX</makevar>/share/doc</filename>.
	  Vous pouvez le faire de m&ecirc;me, comme expliqu&eacute; plus haut 
          avec la cible <maketarget>post-install</maketarget>.</para>
	      
	<para>Cr&eacute;ez un nouveau sous-r&eacute;pertoire pour votre logiciel
          &agrave; porter. Le nom de ce sous-r&eacute;pertoire devrait faire
          r&eacute;f&eacute;rence &agrave; son contenu. Cela signifie la plupart
          du temps que ce sera le <makevar>PKGNAME</makevar> sans le 
          num&eacute;ro de version. Si vous pensez toutefois que l'utilisateur
          voudra peut-&ecirc;tre installer diff&eacute;rentes versions du
          logiciel, utilisez alors le <makevar>PKGNAME</makevar> complet.</para>
	      
	<para>Param&eacute;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&nbsp;:</para>

	<programlisting>
post-install:
.if !defined(NOPORTDOCS)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${MKDIR}${PREFIX}/share/doc/xv
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endif
        </programlisting>
	      
	<para>N'oubliez pas de les ajouter aussi &agrave;
          <filename>pkg/PLIST</filename>&nbsp;!  (Ne vous souciez pas ici de
          <makevar>NOPORTDOCS</makevar>; il n'y a aujourd'hui aucun moyen pour
          que les proc&eacute;dures d'installation des logiciels 
          pr&eacute;compil&eacute;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 &agrave;
          l'installation. Reportez-vous &agrave; 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> 
            &agrave; <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&eacute;j&agrave; utilis&eacute; par un autre logiciel (e.g.,
	  <filename>Makefile</filename>), donnez &agrave;
          <makevar>DIST_SUBDIR</makevar> le nom du logiciel
          (<makevar>PKGNAME</makevar> sans le num&eacute;ro de version devrait
          faire l'affaire). Cela modifiera <makevar>DISTDIR</makevar> de
	  <filename>/usr/ports/distfiles</filename> par d&eacute;faut, en
	  <filename>/usr/ports/distfiles/<makevar>DIST_SUBDIR</makevar></filename>
          et mettra effectivement tout ce dont a besoin votre logiciel &agrave;
          porter dans ce sous-r&eacute;pertoire. </para>
	      
	<para>Le sous-r&eacute;pertoire du m&ecirc;me nom sur le site principal
          de secours <filename>ftp.freebsd.org</filename> sera aussi 
          consult&eacute; (Positionner explicitement <makevar>DISTDIR</makevar> 
          dans votre <makevar>Makefile</makevar> n'aboutira pas au m&ecirc;me
          r&eacute;sultat, utilisez s'il vous pla&icirc;t
	  <makevar>DIST_SUBDIR</makevar>.)</para>
	
	<note>
	  <para>Cela n'a pas d'effet sur les <makevar>MASTER_SITES</makevar> que
	    vous d&eacute;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&eacute;s 
            uniquement pour la version pr&eacute;compil&eacute;e et sont 
            maintenant <emphasis>indispensables</emphasis>, m&ecirc;me si la 
            variable <makevar>NO_PACKAGE</makevar> est d&eacute;finie.</para>
	</note>
      </sect3>
      
      <sect3>
	<title>Cha&icirc;nes RCS</title>
	
	<para>Ne mettez pas les cha&icirc;nes RCS dans les fichiers de mise 
          &agrave; niveau&nbsp;-&nbsp;<foreignphrase>patches</foreignphrase>.
          CVS les modifiera quand nous mettrons les fichiers dans l'arborescence
          des logiciels port&eacute;s et de nouveau lorsque nous les 
          extrairons ensuite et les mises &agrave; jour &eacute;chouerons. Les
          cha&icirc;nes RCS sont encadr&eacute;es par des caract&egrave;res 
          &ldquo;dollar&rdquo; (<literal>&#36;</literal>), et commencent 
          typiquement par <literal>&#36;Id</literal> ou 
          <literal>&#36;RCS</literal>.</para>
      </sect3>
      
      <sect3>
	<title>&ldquo;diff&rdquo; r&eacute;cursifs</title>
	
	<para>Il est bien d'utiliser la r&eacute;cursivit&eacute; 
          (<option>-r</option>) avec <command>diff</command> pour 
          g&eacute;n&eacute;rer les fichiers de mise &agrave; jour, mais 
          examinez s'il vous pla&icirc;t le r&eacute;sultat pour vous assurer 
          qu'il n'est pas pollu&eacute; par trop de choses inutiles. En 
          particulier, les deltas entre fichiers dupliqu&eacute;s pour 
          sauvegarder la version originale, les <filename>Makefile</filename>s
          alors que le logiciel &agrave; porter utilise
	  <command>Imake</command> ou GNU <command>configure</command>, etc.,
          sont inutiles et doivent &ecirc;tre supprim&eacute;s. Si vous avez
          d&ucirc; modifier <filename>configure.in</filename> et utiliser
	  <command>autoconf</command> pour mettre &agrave; jour
	  <command>configure</command>, n'incluez pas le delta pour
	  <command>configure</command> (il contient souvent plusieurs centaines
          de lignes&nbsp;!)&nbsp;; d&eacute;finissez 
          <literal>USE_AUTOCONF=yes</literal> et donnez les deltas pour 
          <filename>configure.in</filename>.</para>

	<para>Si vous avez par ailleurs eu &agrave; supprimer un fichier, vous
          pouvez le faire avec la cible <maketarget>post-extract</maketarget> 
          plut&ocirc;t qu'en vous servant du fichier de mise &agrave; jour. Une
          fois que le delta vous convient, d&eacute;coupez-le s'il vous 
          pla&icirc;t pour qu'il y ait un fichier de mise &agrave; 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&eacute;faut
	  <filename>/usr/local</filename>), &agrave; moins que 
	  <makevar>USE_X_PREFIX</makevar> ou <makevar>USE_IMAKE</makevar> ne
	  soient d&eacute;finies, auquel cas ce sera <makevar>X11BASE</makevar>
          (par d&eacute;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&eacute; par la
          valeur de <makevar>PREFIX</makevar> dans les diff&eacute;rentes 
          proc&eacute;dures et <filename>Makefile</filename>s du logiciel,
          puisque cette variable est toujours transmise &agrave; chaque
	  &eacute;tape du processus de compilation et d'installation.</para>

	<para>N'utilisez pas <makevar>USE_X_PREFIX</makevar> &agrave; mois d'en 
          avoir vraiment besoin (i.e., l'&eacute;dition de liens utilise les
          biblioth&egrave;ques X ou vous avez besoin de faire 
          r&eacute;f&eacute;rence &agrave; des fichiers de 
          <makevar>X11BASE</makevar>).</para>
	  
	<para>La variable <makevar>PREFIX</makevar> peut &ecirc;tre 
          red&eacute;finie dans votre <filename>Makefile</filename> ou dans 
          l'environnement de l'utilisateur. Il est n&eacute;anmoins fortement 
          d&eacute;conseill&eacute; de la d&eacute;finir explicitement dans les
	  <filename>Makefile</filename>s de logiciels.</para>
	      
	<para>Utilisez aussi les variables pr&eacute;c&eacute;dentes pour faire
          r&eacute;f&eacute;rence &agrave; des programmes ou fichiers d'autres
          logiciels port&eacute;s et non en donnant les chemins d'acc&egrave;s
          complets. Par exemple, si votre logiciel a besoin que la
          macro-instruction <literal>PAGER</literal> donne le chemin 
          d'acc&egrave;s &agrave; <command>less</command>, utilisez 
          l'indicateur&nbsp;:</para>

        <programlisting>
-DPAGER=\"&#36;{PREFIX}/bin/less\"
        </programlisting>

	<para>du compilateur, ou&nbsp;:</para>

	<programlisting>
-DPAGER=\"&#36;{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&egrave;me a
          d&eacute;plac&eacute; toute l'arborescence 
          <filename>/usr/local</filename> ailleurs.</para>
      </sect3>
      
      <sect3>
	<title>Sous-r&eacute;pertoires</title>
	
	<para>Essayez de faire en sorte que le logiciel &agrave; porter installe
          ses fichiers dans les bons sous-r&eacute;pertoires de
	  <makevar>PREFIX</makevar>. Certains logiciels regroupent tout dans un
          sous-r&eacute;pertoire portant le nom du logiciel, ce qui est 
          incorrect. De nombreux logiciels mettent aussi tout, sauf les 
          binaires, fichiers d'en-t&ecirc;te et pages de manuel dans un 
          sous-r&eacute;pertoire de <filename>lib</filename>, ce qui ne fait pas
          bon m&eacute;nage avec le paradigme BSD. La plupart des fichiers 
          doivent &ecirc;tre d&eacute;plac&eacute;s vers&nbsp;: 
	  <filename>etc</filename> (fichiers d'initialisation et de 
          configuration), <filename>libexec</filename> (ex&eacute;cutables
          d&eacute;marr&eacute;s par le syst&egrave;me), 
          <filename>sbin</filename> (ex&eacute;cutables pour les 
          super-utilisateurs/administrateurs), <filename>info</filename>
	  (documentations au format &ldquo;info&rdquo;) ou
          <filename>share</filename> (fichiers ind&eacute;pendants de
	  l'architecture). Reportez-vous aux pages de manuel de &man.hier.7; 
          pour plus de d&eacute;tails au sujet des r&egrave;gles qui 
	  r&eacute;gissent <filename>/usr</filename>, la plus grande partie
          s'applique aussi &agrave; <filename>/usr/local</filename>. Les
          logiciels en rapport avec les &ldquo;news&rdquo; 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&eacute;pertoires vides</title>
	
	<para>Faites en sorte que le logiciel fasse le m&eacute;nage lors de sa
          d&eacute;sinstallation. Cela se fait habituellement en ajoutant des
          lignes <literal>@dirrm</literal> pour tous les r&eacute;pertoires
          sp&eacute;cifiquement cr&eacute;&eacute;s par le logiciel. Il faut
          supprimer les sous-r&eacute;pertoires avant de supprimer leurs
          r&eacute;pertoires parents.</para>

	<programlisting>
&nbsp;:	    
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
&nbsp;:
@dirrm lib/X11/oneko/pixmals
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/oneko</programlisting>

	<para>Il arrive parfois que <literal>@dirrm</literal> &eacute;mette un
          message d'erreur parce que d'autres logiciels partagent le m&ecirc;me
          sous-r&eacute;pertoire. Vous pouvez invoquer
	  <command>rmdir</command> depuis <literal>@unexec</literal> pour ne 
          supprimer que les sous-r&eacute;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&ecirc;me si
	  <filename><makevar>PREFIX</makevar>/share/doc/gimp</filename> n'est 
          pas vide parce que d'autres logiciels y ont install&eacute; 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&egrave;me, appelez <command>pw</command> dans la 
          proc&eacute;dure <filename>pkg/INSTALL</filename> pour le cr&eacute;er
          automatiquement. Voyez <filename>net/cvsup-mirror</filename> pour 
          avoir un exemple.</para>

	<para>Si votre logiciel &agrave; porter a besoin du m&ecirc;me
          <literal>ID</literal>dentifiant d'utilisateur/groupe qui a servi 
          &agrave; 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 &agrave; ne pas utiliser un <literal>UID</literal> 
          d&eacute;j&agrave; employ&eacute; par le syst&egrave;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&icirc;t que vous r&eacute;servez un
          <literal>UID</literal> ou <literal>GID</literal> dans cette plage,
          quand vous soumettez un logiciel (ou une mise &agrave; niveau). Cela
          nous permet de tenir &agrave; jour la liste des <literal>ID</literal>s
          r&eacute;serv&eacute;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&eacute;teur de commandes, ne
          red&eacute;finissez pas <maketarget>do-extract</maketarget> si vous
          pouvez utiliser <makevar>EXTRACT*</makevar> &agrave; la place et 
          servez-vous de <makevar>GNU_CONFIGURE</makevar> au lieu de 
          <literal>CONFIGURE_ARGS += --prefix=&dollar;{PREFIX}</literal>.</para>
      </sect3>
      
      <sect3>
	<title>Prennez en compte <makevar>CFLAGS</makevar></title>
	
	<para>Le logiciel &agrave; porter doit prendre en consid&eacute;ration
          <makevar>CFLAGS</makevar>. Si ce n'est pas le cas, ajoutez s'il vous 
          pla&icirc;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&eacute;s avec soin par les
          utilisateurs et une r&eacute;installation les 
          &eacute;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 &agrave;
          l'utilisateur qu'il devra copier et modifier le fichier pour que le
          logiciel soit utilisable.</para>
      </sect3>
      
      <sect3>
	<title>Portlint</title>
	
	<para>Contr&ocirc;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 &agrave; niveau &agrave; 
          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 &ecirc;tre rev&eacute;rifi&eacute;s. Si vous passez un
          logiciel en revue et pensez qu'ils peuvent &ecirc;tre mieux 
          &eacute;tre mieux &eacute;crits, faites-le.</para>

	<para>Ne mettez pas de nouvelles copies de la Licence Publique
         G&eacute;n&eacute;rale GNU&nbsp;-&nbsp;GPL&nbsp;-&nbsp;sur notre 
         syst&egrave;me, s'il vous pla&icirc;t.</para>
	
	<para>Notez s'il vous pla&icirc;t soigneusement toutes les 
          consid&eacute;rations d'ordre l&eacute;gal. Ne nous laissez pas
          distribuer ill&eacute;galement du logiciel&nbsp;!</para>
      </sect3>
	
      <sect3>
	<title>Si vous &ecirc;tes bloqu&eacute;&hellip;</title>
	
	<para>Consultez les exemples existants et 
          <filename>bsd.port.mk</filename> avant de nous poser des 
          questions&nbsp;!  <!-- smiley --><emphasis>;)</emphasis></para>
	      
	<para>Posez-nous des questions si vous avez des probl&egrave;mes&nbsp;!
          Ne vous cognez pas la t&ecirc;te contre les murs&nbsp;!
	  <!-- 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 &agrave; supprimer
        les commentaires exc&eacute;dentaires (ceux qui sont entre 
        crochets)&nbsp;!</para>
	    
      <para>Il est souhaitable que vous respectiez ce format (ordre des 
        variables, espacements entre sections, etc.). Il est con&ccedil;u pour
        qu'il soit facile de rep&eacute;rer les informations les plus 
        importantes. Nous vous recommandons d'utiliser
	<link linkend="porting-portlint">portlint</link> pour v&eacute;rifier le
	<filename>Makefile</filename>.</para>
      
      <programlisting>
[l'en-t&ecirc;te...pour qu'il nous soit plus facile d'identifier les logiciels.]
# New ports collection makefile for:   xdvi
[l'en-t&ecirc;te de version obligatoire doit &ecirc;tre mise &agrave; jour 
&nbsp;en m&ecirc;me temps que le logiciel.]
# Version required:    pl18 [des choses du genre "1.5alpha" conviennent aussi]
[C'est la date de cr&eacute;ation de la premi&egrave;re version de ce Makefile. 
&nbsp;Ne la modifiez jamais lors d'une mise &agrave; jour.]
# Date created:                26 May 1995
[C'est la personne qui a fait le premier portage sous FreeBSD, en particulier,
&nbsp;celle qui a &eacute;crit la premi&egrave;re version de ce Makefile. Rappelez-vous
&nbsp;que vous ne devez plus modifier ce nom par la suite.]
# Whom:                        Satoshi Asami &lt;asami@FreeBSD.ORG&gt;
#
# &#36;Id&#36;
[ ^^^^ Ce sera automatiquement remplac&eacute; par la cha&icirc;ne RCS par CVS
&nbsp;ensuite, lors de l'int&eacute;gration &agrave; nos archives.]
#
       
[Cette section d&eacute;crit le logiciel et le site d'origine - DISTNAME
&nbsp;viens toujours en premier, suivi de PKGNAME (si n&eacute;cessaire), CATEGORIES,
&nbsp;puis de MASTER_SITES, qui peut &ecirc;tre suivi de MASTER_SITE_SUBDIR.
&nbsp;EXTRACT_SUFX ou DISTFILES peuvent &eacute;ventuellement &ecirc;tre pr&eacute;cis&eacute;s ensuite.]
DISTNAME=      xdvi
PKGNAME=       xdvi-pl18
CATEGORIES=    print
[N'oubliez pas le &ldquo;slash&rdquo; ("/") &agrave; la fin&nbsp;! 
&nbsp;si vous ne vous servez pas des macros-instructions MASTER_SITE_*]
MASTER_SITES=  ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
[A d&eacute;finir si le source n'est pas au format ".tar.gz"]
EXTRACT_SUFX=  .tar.Z
       
[Section pour les mises &agrave; jour de la distribution -- peut &ecirc;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*&nbsp;! C'est la personne 
&nbsp;(de pr&eacute;f&eacute;rence avec les droits d'&eacute;criture sur l'arborescence
&nbsp;des sources) que les utilisateurs peuvent contacter si questions ou rapports
&nbsp;d'anomalie - ce doit &ecirc;tre la personne qui a fait le portage ou quelqu'un
&nbsp;qui peut lui transmettre les questions dans un d&eacute;lai raisonnable. Si vous
&nbsp;ne voulez vraimant pas que votre adresse apparaisse ici, mettez
&nbsp;"ports@FreeBSD.ORG".]
MAINTAINER=    asami@FreeBSD.ORG
       
[D&eacute;pendances -- peuvent &ecirc;tre vides]
RUN_DEPENDS=   gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS=   Xpm.5:${PORTSDIR}/graphics/xpm
       
[Cette section est r&eacute;serv&eacute;e aux autres variables bsd.port.mk
&nbsp;qui n'ont pas leur place dans les sections pr&eacute;c&eacute;dentes]
[S'il y a des questions lors de la configuration, de la compilation,
&nbsp;de l'installation ...]
IS_INTERACTIVE=        yes
[Si l'extraction se fait dans un autre r&eacute;pertoire que ${DISTNAME}...]
WRKSRC=                ${WRKDIR}/xdvi-new
[Si les mises &agrave; jour de la distribution ne sont pas relatives &agrave; ${WRKSRC}, 
&nbsp;vous devrez peut-&ecirc;tre utiliser cette variable]
PATCH_DIST_STRIP=      -p1
[S'il faut ex&eacute;cuter une proc&eacute;dure "configure" g&eacute;n&eacute;r&eacute;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&egrave;gles qui les suivent]
MY_FAVORITE_RESPONSE=  "oui, pour s&ucirc;r"
       
[Les r&egrave;gles particuli&egrave;res, dans l'ordre o&ugrave; faut les appeler]
pre-fetch:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ouais, il faut r&eacute;cup&eacute;rer quelque chose
       
post-patch:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G&eacute;nial, j'ai quelque chose &agrave; faire apr&egrave;s la mise &agrave; jour
       
pre-install:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et d'autres choses encore apr&egrave;s l'installation
       
[et l'&eacute;pilogue]
.include &lt;bsd.port.mk&gt;</programlisting>
    </sect2>
    
    <sect2 id="porting-pkgname">
      <title>Noms des paquetages</title>
      
      <para>Voici les conventions &agrave; respecter pour les noms des
        paquetages. Cela pour qu'il soit facile de parcourir notre 
        r&eacute;pertoire des paquetages, parce qu'il y en a d&eacute;j&agrave;
        beaucoup et que cela va rebuter les utilisateurs s'ils s'y usent les
        yeux&nbsp;!</para>
      
      <para>Le nom du paquetage doit &ecirc;tre de la forme
	<filename><replaceable>langue-</replaceable>nom<replaceable>-particularit&eacute;s.de.compilation</replaceable><replaceable>-num&eacute;ros.de.version</replaceable></filename>.</para>
	    
      <para>Si votre <makevar>DISTNAME</makevar> n'est pas de ce type, 
        d&eacute;finissez <makevar>PKGNAME</makevar> en respectant ce
        format.</para>
      
      <orderedlist>
	<listitem>
	  <para>FreeBSD essayer d'int&eacute;grer les supports des langues
            maternelles de ses utilisateurs. Le pr&eacute;fixe
	    <replaceable>langue-</replaceable> doit &ecirc;tre le sigle de deux
            lettres d&eacute;fini par la convention ISO-639, si le logiciel
            est propre &agrave; une langue particuli&egrave;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&eacute;en et <literal>de</literal> pour l'Allemand.</para>
	</listitem>
	
	<listitem>
	  <para>Le <filename>nom</filename> doit toujours &ecirc;tre en
            minuscules, sauf pour les paquetages particuli&egrave;rement
            importants (qui comportent de nombreux programmes). XFree86 ou
            ImageMagick par exemple appartiennent &agrave; cette 
            cat&eacute;gorie. Sinon, mettez le nom (ou au moins la 
            premi&egrave;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&eacute;c&eacute;der de
	    <literal>p5-</literal> et en rempla&ccedil;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&eacute;ros, tirets ou soulign&eacute;s dans le nom, vous pouvez
            aussi les conserver (par exemple, 
            <literal>kinput2</literal>).</para>
	</listitem>
	
	<listitem>
	  <para>Si le logiciel peut-&ecirc;tre compil&eacute; avec 
            diff&eacute;rentes <link linkend="porting-masterdir">valeurs par 
            d&eacute;faut cod&eacute;es en dur</link> (ce qui fait d'habitude
            partie du nom de r&eacute;pertoire d'une famille de logiciels), les
	    <replaceable>-particularit&eacute;s.de.compilation</replaceable> 
            doivent indiquer quelles sont ces valeurs (le tiret n'est pas
            obligatoire). On peut donner en exemple la r&eacute;solution des 
            polices ou le format de papier.</para>
	</listitem>
	
	<listitem>
	  <para>La version doit &ecirc;tre une suite d'entiers 
            s&eacute;par&eacute;s par des points ou un unique caract&egrave;re
            alphab&eacute;tique. La seule exception concerne la cha&icirc;ne
	    <literal>pl</literal> 
            (&ldquo;<foreignphrase>patchlevel</foreignphrase>&rdquo;&nbsp;-&nbsp;niveau 
            de mise &agrave; jour), qui ne peut &ecirc;tre utilis&eacute;e que
            lorsque qu'il n'y a pas de num&eacute;ros de version majeure et
            mineure du logiciel.</para>
	</listitem>
      </orderedlist>
      
      <para>Voici quelques exemples (r&eacute;els) de la mani&egrave;re de
	convertir un <makevar>DISTNAME</makevar> en un 
	<makevar>PKGNAME</makevar>&nbsp;:</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&eacute;cessaire</entry>
	    </row>
	    
	    <row>
	      <entry>XFree86-3.1.2</entry>
	      <entry>XFree86-3.1.2</entry>
	      <entry>Pas de changement n&eacute;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&eacute;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&eacute;ros de 
                version</entry>
	    </row>
	    
	    <row>
	      <entry>rdist-1.3alpha</entry>
	      <entry>rdist-1.3a</entry>
	      <entry>Les cha&icirc;nes de caract&egrave;res comme
                <literal>alpha</literal> ne sont pas autoris&eacute;es</entry>
	    </row>
	    
	    <row>
	      <entry>es-0.9-beta1</entry>
	      <entry>es-0.9b1</entry>
	      <entry>Les cha&icirc;nes de caract&egrave;res comme
                <literal>beta</literal> ne sont pas autoris&eacute;es</entry>
	    </row>
	    
	    <row>
	      <entry>v3.3beta021.src</entry>
	      <entry>tiff-3.3</entry>
	      <entry>C'&eacute;tait quoi exactement&nbsp;?</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&eacute; que lorsqu'il
                n'y a pas de num&eacute;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 &agrave; 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&eacute;ro de version (comme pour piewm
        ci-dessus). Sinon, posez la question &agrave; 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&eacute;gories</title>
      
      <para>Comme vous le savez d&eacute;j&agrave;, les logiciels port&eacute;s
        sont r&eacute;partis en diff&eacute;rentes cat&eacute;gories. Mais, il
        est important, pour que cette classification fonctionne, que les
        responsables des portages et les utilisateurs comprennent ce qu'est 
        chaque cat&eacute;gorie et comment nous choisissons la cat&eacute;gorie
        dans laquelle nous classons un logiciel.</para>

      <sect3>
	<title>Liste actuelle des cat&eacute;gories</title>
	
	<para>Voici tout d'abord la liste des cat&eacute;gories &agrave; ce 
          jour. Celles qui sont suivies d'une ast&eacute;risque
          (<literal>*</literal>) sont des cat&eacute;gories 
	  <emphasis>virtuelles</emphasis>&mdash;il n'y a pas de 
          sous-r&eacute;pertoires correspondant dans le catalogue des logiciels
          port&eacute;s.</para>
	
	<note>
	  <para>Pour les cat&eacute;gories r&eacute;elles, il y a une ligne de
            description dans le fichier <filename>pkg/COMMENT</filename> du
	    sous-r&eacute;pertoire correspondant (e.g.,
	    <filename>archivers/pkg/COMMENT</filename>).</para>
	</note>
	
	<informaltable frame="none">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>Cat&eacute;gorie</entry>
		<entry>Description</entry>
	      </row>
	    </thead>
	    
	    <tbody>
	      <row>
		<entry><filename>afterstep*</filename></entry>
		<entry>Logiciels pour le gestionnaire de fen&ecirc;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&eacute;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&eacute;rie</entry>
	      </row>
	      
	      <row>
		<entry><filename>converters</filename></entry>
		<entry>Convertisseurs de codes de caract&eacute;res</entry>
	      </row>
	      
	      <row>
		<entry><filename>databases</filename></entry>
		<entry>Bases de donn&eacute;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&eacute;veloppement. N'y mettez pas de
                  biblioth&egrave;ques simplement parce que ce sont des
                  biblioth&egrave;ques&mdash;&agrave; moins qu'elles n'aient
                  vraiment pas leur place ailleurs, elles ne doivent pas 
                  &ecirc;tre dans cette cat&eacute;gorie</entry>
	      </row>
	      
	      <row>
		<entry><filename>editors</filename></entry>
		<entry>Editeurs g&eacute;n&eacute;raux. Les &eacute;diteurs 
                  sp&eacute;cialis&eacute;s vont dans la cat&eacute;gorie
                  correspondante (e.g., un &eacute;diteur de formules 
                  math&eacute;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&egrave;mes d'exploitation. Les
                  &eacute;mulateurs de terminaux ne rentrent 
                  <emphasis>pas</emphasis> dans cette 
                  cat&eacute;gorie&mdash;ceux pour X vont dans 
		  <filename>x11</filename> et les &eacute;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 &ldquo;<foreignphrase>K Desktop
                  Environment</foreignphrase>&rdquo; (kde)</entry>
	      </row>
	      
	      <row>
		<entry><filename>korean</filename></entry>
		<entry>Support de la langue Cor&eacute;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 &eacute;lectronique</entry>
	      </row>

	      <row>
		<entry><filename>math</filename></entry>
		<entry>Logiciels de calcul num&eacute;rique et autres outils
                  math&eacute;matiques</entry>
	      </row>
	      
	      <row>
		<entry><filename>mbone</filename></entry>
		<entry>Applications MBone</entry>
	      </row>
	      
	      <row>
		<entry><filename>misc</filename></entry>
		<entry>Utilitaires vari&eacute;s&mdash;essentiellement ceux qui
                  n'ont pas leur place ailleurs. C'est la seul cat&eacute;gorie
                  qui ne doit pas appara&icirc;tre en m&ecirc;me temps qu'une
                  autre cat&eacute;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&eacute;pertoire</entry>
	      </row>
	      
	      <row>
		<entry><filename>net</filename></entry>
		<entry>Outils r&eacute;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 &agrave; utiliser avec la gamme 3Com 
                  Palm(tm)</entry>
	      </row>
	      
	      <row>
		<entry><filename>perl5*</filename></entry>
		<entry>Logiciels qui n&eacute;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&eacute;visualiseurs, etc.) appartiennent aussi &agrave;
                  cette cat&eacute;gorie</entry>
	      </row>
	      
	      <row>
		<entry><filename>python*</filename></entry>
		<entry>Logiciels &eacute;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&eacute;curit&eacute;</entry>
	      </row>
	      
	      <row>
		<entry><filename>shells</filename></entry>
		<entry>Interpr&eacute;teurs de commandes</entry>
	      </row>
	      
	      <row>
		<entry><filename>sysutils</filename></entry>
		<entry>Utilitaires syst&egrave;me</entry>
	      </row>
	      
	      <row>
		<entry><filename>tcl75*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tcl 7.5</entry>
	      </row>
	      
	      <row>
		<entry><filename>tcl76*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tcl 7.6</entry>
	      </row>
	      
	      <row>
		<entry><filename>tcl80*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tcl 8.0</entry>
	      </row>
	      
	      <row>
		<entry><filename>tcl81*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tcl 8.1</entry>
	      </row>
	      
	      <row>
		<entry><filename>textproc</filename></entry>
		<entry>Outils de traitement de texte, sauf les logiciels de
                  publication assist&eacute;e par ordinateur, qui vont dans
		  <filename>print/</filename></entry>
	      </row>
	      
	      <row>
		<entry><filename>tk41*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tk 4.1</entry>
	      </row>
	      
	      <row>
		<entry><filename>tk42*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tk 4.2</entry>
	      </row>
	      
	      <row>
		<entry><filename>tk80*</filename></entry>
		<entry>Logiciels qui n&eacute;cessitent Tk 8.0</entry>
	      </row>
	      
	      <row>
		<entry><filename>tk81*</filename></entry>
		<entry>Logiciels qui n&eacute;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&ecirc;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&egrave;me X window et consorts. Cette 
                  cat&eacute;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&eacute;finissez <makevar>USE_XLIB</makevar> (implicite avec
		  <makevar>USE_IMAKE</makevar>) et mettez le dans la
                  cat&eacute;gorie appropri&eacute;e. Un grand nombre d'entre
                  eux vont dans les autres cat&eacute;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&egrave;res X11 et outils
                  associ&eacute;s</entry>
	      </row>
	      
	      <row>
		<entry><filename>x11-toolkits</filename></entry>
		<entry>Bo&icirc;tes &agrave; outils X11</entry>
	      </row>
	      
	      <row>
		<entry><filename>x11-wm</filename></entry>
		<entry>Gestionnaires de fen&ecirc;tres X11</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>
      </sect3>

      <sect3>
	<title>Choisir la bonne cat&eacute;gorie</title>
	
	<para>Comme de nombreuses cat&eacute;gories ont des logiciels en commun,
          vous devez souvent d&eacute;cider laquelle sera la cat&eacute;gorie 
          principale de votre logiciel. Voici une liste de priorit&eacute;s, par
          ordre d&eacute;croissant&nbsp;:</para>
	
	<itemizedlist>
	  <listitem>
	    <para>Les cat&eacute;gories li&eacute;es &agrave; 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&eacute;gories les plus sp&eacute;cifiques viennent 
              avant celles qui le sont moins. Par exemple, un &eacute;diteur 
              HTML doit &ecirc;tre list&eacute; 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
              &agrave; l'une des cat&eacute;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&eacute;gorie secondaire
              que lorsque la cat&eacute;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'&ecirc;tes pas s&ucirc;r de la cat&eacute;gorie, mettez
          s'il vous pla&icirc;t un commentaire &agrave; ce sujet lorsque vous
          soumettez votre <command>send-pr</command> pour que nous puissions en
          discuter avant de l'int&eacute;grer. (Si vous avez l'acc&egrave;s en
          &eacute;criture, envoyez une note &agrave; &a.ports; pour qu'il y ait
          discussion au pr&eacute;alable&mdash;les nouveaux logiciels sont trop
          souvent import&eacute;s dans la mauvaise cat&eacute;gorie et doivent
          &ecirc;tre d&eacute;plac&eacute;s imm&eacute;diatement 
          apr&egrave;s.)</para>
      </sect3>
    </sect2>
    
    <sect2>
      <title>Modifications de ce document et du syst&egrave;me des logiciels
        port&eacute;s</title>
      
      <para>Si vous maintenez de noombreux logiciels port&eacute;s, vous 
        devriez vous abonner &agrave; &a.ports;. Les modifications importantes 
        au fonctionnement du catalogue des logiciels port&eacute;s y seront 
        annonc&eacute;es. Vous aurez toujours des informations plus 
        d&eacute;taill&eacute;es sur les derni&egrave;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&nbsp;? 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&eacute;s&nbsp;! C'est la
        fa&ccedil;on la plus simple de commencer &agrave; contribuer au projet
        FreeBSD&nbsp;!  <!-- 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: 
-->       

