projman/hlp/fr/tcl/pkg_mkindex.htm
2015-10-19 14:27:31 +04:00

59 lines
12 KiB
HTML

<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èque standard Tcl. Elle est utilisée pour créer des fichiers index qui permettent aux packages à être chargés automatiquement quand des commandes <b>package require</b> sont exécutées. Pour utiliser <b>pkg_mkIndex</b>, suivre ces étapes:
<DL>
<DT>&#91;1]</DT><DD>Créer le(s) package(s). Chaque package peut consister en un ou plusieurs fichiers script Tcl ou fichiers binaires. Les fichiers binaires doivent ê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 ê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éro de version, et chaque fichier binaire doit contenir un appel à <A HREF="59.htm"><b>Tcl_PkgProvide</b></A>. </DD>
<DT>&#91;2]</DT><DD>Cré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èle <A HREF="119.htm"><b>glob</b></A>-style qui choisit les scripts ou fichiers binaires dans <i>dir</i>. Le modèle par défaut est <b>*.tcl</b> et <b>*.&#91;info </b><b>sharedlibextension]</b>. <br>
<b>Pkg_mkIndex</b> créera un fichier <b>pkgIndex.tcl</b> dans <i>dir</i> avec l'information de package au sujet de tous les fichiers donnés par les arguments<i> pattern</i>. Ceci est fait par chargement de chaque fichier dans un interpré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 à <A HREF="59.htm"><b>Tcl_PkgProvide</b></A> dans le fichier, comme décrit plus haut). Si vous avez un package divisé 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é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ées binaires) doivent normalement être installés sous le premier répertoire et les packages indépendants de la machine (ex., ceux qui contiennent seulement des scripts Tcl) seront installé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é dans un sous répertoire d'un répertoire de <b>&#36;tcl_pkgPath</b> il sera automatiquement trouvé 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édiat d'un des répertoires de <b>auto_path</b>. <b>Auto_path</b> contient une liste de répertoires qui sont recherché 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 à <b>auto_path</b> explicitement dans votre application, ou vous pouvez ajouter le répertoire à votre variable d'environnement<b> TCLLIBPATH</b>: si cette variable d'environnement est présente, Tcl initialise <b>auto_path</b> avec pendant le démarrage de l'application. </DD>
<DT>&#91;4]</DT><DD>Une fois les étapes pré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 été indexé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é dans un interpréteur donné, en se basant sur le premier appel de <b>package require</b>. Différentes versions d'un package peuvent être chargées dans différents interpré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éré retardera le chargement du package jusqu'à l'utilisation d'une des commandes fourni par le package, au lieu de le charger immé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éteur courant et correspondants à <i>pkgPat</i> dans l'interpréteur esclave utilisé pour générer l' index. La correspondance de modèle utilise les règles de chaîne de correspondance. Voir CAS COMPLEXES ci-dessous.
</DD>
<DT><b>-verbose</b></DT><DD>Génè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és de gestion de package font double emploi avec l'auto-loader, dans le sens ou ils préparent tous les deux les fichiers à être chargés à la demande. Néanmoins, la gestion package est un mécanisme de plus haut niveau qui utilise l'auto-loader pour la dernière étape dans le processus de chargement. Il est généralement meilleur d'indexer un package avec <b>pkg_mkIndex</b> plutôt que <A HREF="129.htm"><b>auto_mkindex</b></A> parce que le mécanisme de package fournit un contrôle de version: plusieurs versions d'un package peuvent être rendues disponibles dans les fichiers d'index, avec différentes applications utilisant différentes versions basées sur des commandes<b> package require</b>. Au contraire, <A HREF="129.htm"><b>auto_mkindex</b></A> ne reconnaît pas les versions donc il peut seulement gérer une seule version de chaque package. Ce n'est probablement pas une bonne idée d'indexer un package donné 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ées jusqu'a ce que <b>package require</b> ait été utilisé pour choisir une version; au contraire, les packages indexés avec <A HREF="129.htm"><b>auto_mkindex</b></A> peuvent être utilisés immédiatement car il n'y a pas de contrô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ère fois qu'une commande <b>package require</b> est appelée, le script <b>package unknown</b> est appelé. Ceci est fixé par l'initialisation Tcl dans un script qui é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é du package, et elles écrivent l'information d'auto-loader pour charger les fichiers du package. Si le flag <i>-lazy</i> a été fourni quand <b>pkgIndex.tcl</b> a été généré, un fichier donné d'une version donnés d'un package donné n'est pas chargé jusqu'au premier appel d'une de ses commandes dans l'interpréteur, mais vous pourrez appeler les commandes et elles seront auto-chargé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éciale, peuvent choisir que leurs fichiers package seront chargés immédiatement à <b>package require</b> au lieu de retarder le chargement à la première utilisation d'une commande du package. C'est le mode par défaut pendant la génération de l'index de package. Ceci peut être surchargé 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és entre scripts et fichiers binaires sont gérées correctement. Néanmoins, vous pouvez avoir à ajuster l'ordre dans lequel les fichiers sont traités par <b>pkg_mkIndex</b>. Ce problè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écifiez simplement tous les fichiers à indexer dans n'importe quel ordre avec quelques modè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éteur utilisé pour traiter les scripts, donc elles ne causent pas de problèmes. Si les scripts appellent d'autre packages dans le code global, ces appels sont gérés par une commande<A HREF="174.htm"><b> unknown</b></A>. Néanmoins, si les scripts font référence à 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é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écuter <b>pkg_mkIndex</b> dans un interpréteur qui aura chargé Tk . Vous pouvez accomplir ceci avec l'option<b> -</b><A HREF="134.htm"><b>load</b></A><i>pkgPat</i>. Si vous spécifiez cette option, <b>pkg_mkIndex</b> chargera tous les packages listés par <b>info loaded</b> et qui correspondent à <i>pkgPat</i> dans l'interpréteur utilisé pour traiter les fichiers. Dans la plupart des cas ceci satisfera l'appel à <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écifier celui qui a les dépendances en dernier. De cette façon, celui sans dépendances sera chargé et indexé, et alors le package qu'il fournit sera disponible quand le second fichier sera traité. Vous pouvez aussi avoir besoin de charger le premier package dans un interpréteur temporaire utilisé pour créer l'index en utilisant le flag <A HREF="134.htm"><b>-load</b></A>; vous pourrez spécifier des modèles package qui ne sont pas encore chargés. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si vous avez un package qui est divisé en scripts et fichiers binaires, alors vous devez éviter le flag <A HREF="134.htm"><b>-load</b></A>. Le problè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écifier les scripts en premier; autrement le package chargé du fichier binaire peut masquer le package défini par les scripts. </div><br>
<div>Derniè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écédent</b></A>&nbsp;&nbsp;<A HREF="147.htm"><b>Suivant</b></A></div>
</BODY></HTML>