projman/hlp/fr/tcl/pkg_mkindex.htm

59 lines
12 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>pkg_mkIndex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commandes Internes Tcl</b></H3></div>
<HR ALIGN="center">
<div><b>NOM</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">pkg_mkIndex - Construit un index pour le chargement automatique des packages
</div><br>
<div><b>SYNTAXE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>pkg_mkIndex ?</b><i>-lazy</i>? ?<i>-load pkgPat</i>? ?<i>-verbose</i>? <i>dir</i> ?<i>pattern pattern ...</i>?<br>
</div><br>
<div><b>DESCRIPTION</b></div> <br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>Pkg_mkIndex</b> est une fonction utilitaire qui fait partie de la biblioth<74>que standard Tcl. Elle est utilis<69>e pour cr<63>er des fichiers index qui permettent aux packages <20> <20>tre charg<72>s automatiquement quand des commandes <b>package require</b> sont ex<65>cut<75>es. Pour utiliser <b>pkg_mkIndex</b>, suivre ces <20>tapes:
<DL>
<DT>&#91;1]</DT><DD>Cr<EFBFBD>er le(s) package(s). Chaque package peut consister en un ou plusieurs fichiers script Tcl ou fichiers binaires. Les fichiers binaires doivent <20>tre compatibles pour le chargement avec la commande <A HREF="134.htm"><b>load</b></A> avec un seul argument; par exemple, si le fichier est <b>test.so</b> il doit <20>tre possible de charger ce fichier avec la commande <b>load test.so</b>. Chaque fichier script doit contenir une commande <b>package provide</b> pour d<>clarer le package et son num<75>ro de version, et chaque fichier binaire doit contenir un appel <20> <A HREF="59.htm"><b>Tcl_PkgProvide</b></A>. </DD>
<DT>&#91;2]</DT><DD>Cr<EFBFBD>er l'index en appelant <b>pkg_mkIndex</b>. L'argument <i>dir</i> donne le nom d'un r<>pertoire et chaque argument <i>pattern</i> est un mod<6F>le <A HREF="119.htm"><b>glob</b></A>-style qui choisit les scripts ou fichiers binaires dans <i>dir</i>. Le mod<6F>le par d<>faut est <b>*.tcl</b> et <b>*.&#91;info </b><b>sharedlibextension]</b>. <br>
<b>Pkg_mkIndex</b> cr<63>era un fichier <b>pkgIndex.tcl</b> dans <i>dir</i> avec l'information de package au sujet de tous les fichiers donn<6E>s par les arguments<i> pattern</i>. Ceci est fait par chargement de chaque fichier dans un interpr<70>teur esclave et constatation de quels packages et nouvelles commandes apparaissent (c'est pourquoi il est essentiel d'avoir des commandes <b>package provide</b> ou un appel <20> <A HREF="59.htm"><b>Tcl_PkgProvide</b></A> dans le fichier, comme d<>crit plus haut). Si vous avez un package divis<69> en scripts et fichiers binaires, ou si vous avez des d<>pendances entre les fichiers, vous pouvez utiliser l'option <b>-</b><A HREF="134.htm"><b>load</b></A> ou ajuster l'ordre dans lequel <b>pkg_mkIndex</b> traite les fichiers. Voir CAS COMPLEXES ci-dessous.
</DD>
<DT>&#91;3]</DT><DD>Installer le package dans un sous r<>pertoire d'un des r<>pertoires donn<6E>s par la variable<b> tcl_pkgPath</b>. Si <b>&#36;tcl_pkgPath</b> contient plus d'un r<>pertoire, les packages d<>pendants de la machine (ex., ceux qui contient libraries partag<61>es binaires) doivent normalement <20>tre install<6C>s sous le premier r<>pertoire et les packages ind<6E>pendants de la machine (ex., ceux qui contiennent seulement des scripts Tcl) seront install<6C>s sous le second r<>pertoire. Le sous r<>pertoire doit inclure le script du package et/ou les fichiers binaires aussi bien que le fichier<b> pkgIndex.tcl</b>. Tant que le package est install<6C> dans un sous r<>pertoire d'un r<>pertoire de <b>&#36;tcl_pkgPath</b> il sera automatiquement trouv<75> pendant les commandes<b> package require</b>. <br>
Si vous installez le package nulle part ailleurs, alors vous devez vous assurer que le r<>pertoire contenant le package est dans la variable globale <b>auto_path</b> ou un sous r<>pertoire imm<6D>diat d'un des r<>pertoires de <b>auto_path</b>. <b>Auto_path</b> contient une liste de r<>pertoires qui sont recherch<63> par le auto-loader et le package loader; qui par d<>faut inclut <b>&#36;tcl_pkgPath</b>. Le package loader v<>rifie aussi tous les sous r<>pertoire des r<>pertoires dans <b>auto_path</b>. Vous pouvez ajouter un r<>pertoire <20> <b>auto_path</b> explicitement dans votre application, ou vous pouvez ajouter le r<>pertoire <20> votre variable d'environnement<b> TCLLIBPATH</b>: si cette variable d'environnement est pr<70>sente, Tcl initialise <b>auto_path</b> avec pendant le d<>marrage de l'application. </DD>
<DT>&#91;4]</DT><DD>Une fois les <20>tapes pr<70>cedentes accomplies, tout ce que vous avez besoin de faire pour utiliser le package est d'appeler <b>package require</b>. Par exemple, si les versions 2.1, 2.3, et 3.1 du package <b>Test</b> ont <20>t<EFBFBD> index<65>es par <b>pkg_mkIndex</b>, la commande <b>package require Test</b> rendra la version 3.1 disponible et la commande <b>package </b><b>require-exact Test 2.1</b> rendra la version 2.1 disponible. Il peut y avoir de nombreuses versions d'un package dans les fichiers d'index de <b>auto_path</b>, mais seulement un sera actuellement charg<72> dans un interpr<70>teur donn<6E>, en se basant sur le premier appel de <b>package require</b>. Diff<66>rentes versions d'un package peuvent <20>tre charg<72>es dans diff<66>rents interpr<70>teurs.
</DD>
</DL>
</div><br>
<div><b>OPTIONS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les commutateurs optionnels sont:
<DL>
<DT><b>-lazy</b></DT><DD>L'index g<>n<EFBFBD>r<EFBFBD> retardera le chargement du package jusqu'<27> l'utilisation d'une des commandes fourni par le package, au lieu de le charger imm<6D>diatement avec <b>package require</b>.
</DD>
<DT><b>-load </b><i>pkgPat</i></DT><DD>Le processus d'index prechargera tous les packages existants dans l'interpr<70>teur courant et correspondants <20> <i>pkgPat</i> dans l'interpr<70>teur esclave utilis<69> pour g<>n<EFBFBD>rer l' index. La correspondance de mod<6F>le utilise les r<>gles de cha<68>ne de correspondance. Voir CAS COMPLEXES ci-dessous.
</DD>
<DT><b>-verbose</b></DT><DD>G<EFBFBD>n<EFBFBD>re une sortie pendant le processus d'indexage. La sortie se fait via la fonction<b> tclLog</b>, qui par d<>faut affiche sur stderr.
</DD>
<DT><b>--</b></DT><DD>Termine les flags, dans les cas ou <i>dir</i> commence avec un tiret.
</DD>
</DL>
</div><br>
<div><b>PACKAGES ET AUTO-LOADER</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les utilit<69>s de gestion de package font double emploi avec l'auto-loader, dans le sens ou ils pr<70>parent tous les deux les fichiers <20> <20>tre charg<72>s <20> la demande. N<>anmoins, la gestion package est un m<>canisme de plus haut niveau qui utilise l'auto-loader pour la derni<6E>re <20>tape dans le processus de chargement. Il est g<>n<EFBFBD>ralement meilleur d'indexer un package avec <b>pkg_mkIndex</b> plut<75>t que <A HREF="129.htm"><b>auto_mkindex</b></A> parce que le m<>canisme de package fournit un contr<74>le de version: plusieurs versions d'un package peuvent <20>tre rendues disponibles dans les fichiers d'index, avec diff<66>rentes applications utilisant diff<66>rentes versions bas<61>es sur des commandes<b> package require</b>. Au contraire, <A HREF="129.htm"><b>auto_mkindex</b></A> ne reconna<6E>t pas les versions donc il peut seulement g<>rer une seule version de chaque package. Ce n'est probablement pas une bonne id<69>e d'indexer un package donn<6E> avec <b>pkg_mkIndex</b> et <A HREF="129.htm"><b>auto_mkindex</b></A>. Si vous utilisez <b>pkg_mkIndex</b> pour indexer un package, ses commandes ne peuvent pas appel<65>es jusqu'a ce que <b>package require</b> ait <20>t<EFBFBD> utilis<69> pour choisir une version; au contraire, les packages index<65>s avec <A HREF="129.htm"><b>auto_mkindex</b></A> peuvent <20>tre utilis<69>s imm<6D>diatement car il n'y a pas de contr<74>le de version.
</div> <br>
<div><b>COMMENT CA MARCHE ?</b></div> <br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>Pkg_mkIndex</b> depend de la commande<b> package unknown</b>, de la commande<b> package ifneeded</b>, et de l'auto-loader. la premi<6D>re fois qu'une commande <b>package require</b> est appel<65>e, le script <b>package unknown</b> est appel<65>. Ceci est fix<69> par l'initialisation Tcl dans un script qui <20>value tous les fichiers <b>pkgIndex.tcl</b> dans le <b>auto_path</b>. Les fichiers <b>pkgIndex.tcl</b> contiennent des commandes <b>package ifneeded</b> pour chaque version de chaque package disponible; ces commandes appellent <b>package provide</b> pour annoncer la disponibilit<69> du package, et elles <20>crivent l'information d'auto-loader pour charger les fichiers du package. Si le flag <i>-lazy</i> a <20>t<EFBFBD> fourni quand <b>pkgIndex.tcl</b> a <20>t<EFBFBD> g<>n<EFBFBD>r<EFBFBD>, un fichier donn<6E> d'une version donn<6E>s d'un package donn<6E> n'est pas charg<72> jusqu'au premier appel d'une de ses commandes dans l'interpr<70>teur, mais vous pourrez appeler les commandes et elles seront auto-charg<72>es. <br>
</div> <br>
<div><b>CHARGEMENT DIRECT</b></div> <br>
<div ALIGN="LEFT" style="margin-left: 51px;">Certains packages, par exemple packages qui utilisent les namespaces et exportent descommandes ou ceux qui exigent une initialisation sp<73>ciale, peuvent choisir que leurs fichiers package seront charg<72>s imm<6D>diatement <20> <b>package require</b> au lieu de retarder le chargement <20> la premi<6D>re utilisation d'une commande du package. C'est le mode par d<>faut pendant la g<>n<EFBFBD>ration de l'index de package. Ceci peut <20>tre surcharg<72> en specifiant l'argument<i> </i><i>-lazy</i>.
</div><br>
<div><b>CAS COMPLEXES </b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">La plupart des cas complexes de d<>pendances entre scripts et fichiers binaires, et packages divis<69>s entre scripts et fichiers binaires sont g<>r<EFBFBD>es correctement. N<>anmoins, vous pouvez avoir <20> ajuster l'ordre dans lequel les fichiers sont trait<69>s par <b>pkg_mkIndex</b>. Ce probl<62>me est d<>crit en d<>tail ci-dessous. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si chaque script ou fichier contient un package, et que les packages sont contenus dans un seul fichier, alors les choses sont faciles. Vous sp<73>cifiez simplement tous les fichiers <20> indexer dans n'importe quel ordre avec quelques mod<6F>les glob. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">En general, il est OK pour les scripts d'avoir des d<>pendances avec d'autres packages. Si les scripts contiennent des commandes<b> package require</b>, elles sont extraites dans l'interpr<70>teur utilis<69> pour traiter les scripts, donc elles ne causent pas de probl<62>mes. Si les scripts appellent d'autre packages dans le code global, ces appels sont g<>r<EFBFBD>s par une commande<A HREF="174.htm"><b> unknown</b></A>. N<>anmoins, si les scripts font r<>f<EFBFBD>rence <20> des variables d'un autre package dans le code global, cela causera des erreurs. C'est aussi un mauvais style de codage. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si les fichiers binaires ont des d<>pendances avec d'autres packages, les choses peuvent devenir compliqu<71>es parcequ'il n'est pas possible d'extraire des API niveau C telle que <A HREF="59.htm"><b>Tcl_PkgRequire</b></A> en chargeant un fichier binaire. Par exemple, supposez que le package BLT exige Tk, et exprime ceci avec un appel de <A HREF="59.htm"><b>Tcl_PkgRequire</b></A> dans sa routine<b> Blt_Init</b>. Pour supporter ceci, vous devez ex<65>cuter <b>pkg_mkIndex</b> dans un interpr<70>teur qui aura charg<72> Tk . Vous pouvez accomplir ceci avec l'option<b> -</b><A HREF="134.htm"><b>load</b></A><i>pkgPat</i>. Si vous sp<73>cifiez cette option, <b>pkg_mkIndex</b> chargera tous les packages list<73>s par <b>info loaded</b> et qui correspondent <20> <i>pkgPat</i> dans l'interpr<70>teur utilis<69> pour traiter les fichiers. Dans la plupart des cas ceci satisfera l'appel <20> <A HREF="59.htm"><b>Tcl_PkgRequire</b></A> fait par les fichiers binaires. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si vous indexez deux fichiers binaires et qu'un d<>pend de l'autre, vous devez sp<73>cifier celui qui a les d<>pendances en dernier. De cette fa<66>on, celui sans d<>pendances sera charg<72> et index<65>, et alors le package qu'il fournit sera disponible quand le second fichier sera trait<69>. Vous pouvez aussi avoir besoin de charger le premier package dans un interpr<70>teur temporaire utilis<69> pour cr<63>er l'index en utilisant le flag <A HREF="134.htm"><b>-load</b></A>; vous pourrez sp<73>cifier des mod<6F>les package qui ne sont pas encore charg<72>s. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si vous avez un package qui est divis<69> en scripts et fichiers binaires, alors vous devez <20>viter le flag <A HREF="134.htm"><b>-load</b></A>. Le probl<62>me est que si vous chargez un package avant de calculer l'index, il masque tout autre fichier qui fait partie du m<>me package. Si vous devez utiliser <A HREF="134.htm"><b>-load</b></A>, alors vous devez sp<73>cifier les scripts en premier; autrement le package charg<72> du fichier binaire peut masquer le package d<>fini par les scripts. </div><br>
<div>Derni<EFBFBD>re r<>vision: 8.3</div>
<br>
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A>&nbsp;&nbsp;<A HREF="145.htm"><b>Pr<EFBFBD>c<EFBFBD>dent</b></A>&nbsp;&nbsp;<A HREF="147.htm"><b>Suivant</b></A></div>
</BODY></HTML>