188 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
 | ||
| <html>
 | ||
|   <head>
 | ||
|     <title>pkg_mkIndex</title>
 | ||
|   </head>
 | ||
|   <body>
 | ||
| 
 | ||
|     <h1>pkg_mkIndex</h1>
 | ||
| 
 | ||
|     <p>Создает индексный файл для автоматической загрузки пакета.</p>
 | ||
| 
 | ||
|     <h2><a name=СИНТАКСИС></a>СИНТАКСИС</h2> 
 | ||
| 
 | ||
|     <pre>
 | ||
|       <strong>pkg_mkIndex</strong> <em>dir pattern</em> ?<em>pattern pattern...</em>?
 | ||
|     </pre>
 | ||
| 
 | ||
|     <h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2> 
 | ||
| 
 | ||
|     <p>Процедура <strong>pkg_mkIndex</strong> представляет собой
 | ||
|       утилиту для работы с Tcl-библиотеками. Она обеспечивает создание
 | ||
|       индексных файлов, необходимых для автоматической загрузки
 | ||
|       пакетов, когда в приложении встречается команда <a href=
 | ||
|       package.html#require><strong>package require</strong></a>. Для
 | ||
|       создания автоматически загружаемых пакетов необходимо выполнить
 | ||
|       следующие действия:</p>
 | ||
| 
 | ||
|     <table>
 | ||
| 	<tr>
 | ||
| 	  <td>[1]</td>
 | ||
| 
 | ||
| 	  <td>Создать один или несколько пакетов. Каждый пакет может
 | ||
| 	    состоять из одного или больше файлов с Tcl-скриптами или
 | ||
| 	    из бинарных файлов. Бинарные файлы должны быть пригодны
 | ||
| 	    для их загрузки с помощью команды <a href=
 | ||
| 	    load.html><strong>load</strong></a> с единственным
 | ||
| 	    аргументом -именем файла. Например, если в пакет входит
 | ||
| 	    файл <strong>test.so</strong>, он должен загружаться
 | ||
| 	    командой <strong>load test.so</strong>. Каждый файл
 | ||
| 	    Tcl-скриптов должен содержать команду <a href=
 | ||
| 	    package.html#provide><strong>package
 | ||
| 	    provide</strong></a> с именем пакета и версией. Каждый
 | ||
| 	    бинарный файл должен содержать вызов процедуры
 | ||
| 	    <strong>Tcl_PkgProvide</strong>.
 | ||
| 	  </td>
 | ||
| 	</tr>
 | ||
| 	<tr>
 | ||
| 	  <td>[2]</td>
 | ||
| 
 | ||
| 	  <td>Создать индексные файлы с помощью команды
 | ||
| 	    <strong>pkg_mkIndex</strong>.  Аргумент <em>dir</em>
 | ||
| 	    указывает имя каталога, в котором лежат файлы пакета, а
 | ||
| 	    шаблоны <em>pattern</em>, которые могут содержать
 | ||
| 	    специальные символы, как в команде <a href=
 | ||
| 	    glob.html><strong>glob</strong></a>, указывают на файлы
 | ||
| 	    в этом каталоге.  Команда <strong>pkg_mkIndex</strong>
 | ||
| 	    создаст в каталоге <em>dir</em> файл
 | ||
| 	    <strong>pkgIndex.tcl</strong>, содержащий информацию обо
 | ||
| 	    всех файлах пакета, заданных с помощью аргументов
 | ||
| 	    <em>pattern</em>. Для этого загружаются все файлы пакета,
 | ||
| 	    и определяется, какие новые пакеты и какие новые процедуры
 | ||
| 	    появились (поэтому в каждом файле пакета и должна быть
 | ||
| 	    команда <a href= package.html#provide><strong>package
 | ||
| 	    provide</strong></a> или вызов
 | ||
| 	    <strong>Tcl_PkgProvide</strong>).
 | ||
| 	  </td>
 | ||
| 	</tr>
 | ||
| 
 | ||
| 	<tr>
 | ||
| 	  <td>[3]</td>
 | ||
| 
 | ||
| 	  <td>Установить пакет как подкаталог одного из каталогов,
 | ||
| 	    перечисленных в переменной
 | ||
| 	    <strong>tcl_pkgPath</strong>. Если в списке
 | ||
| 	    <strong></strong> больше одного каталога, то
 | ||
| 	    бинарные файлы с разделяемыми библиотеками обычно
 | ||
| 	    устанавливаются в первом каталоге, а библиотеки
 | ||
| 	    Tcl-скриптов . во втором. В этих каталогах должны также
 | ||
| 	    находиться файлы <strong>pkgIndex.tcl</strong>. Пока
 | ||
| 	    пакеты будут размещаться в подкаталогах каталогов,
 | ||
| 	    перечисленных в переменной <strong>tcl_pkgPath</strong>,
 | ||
| 	    этого будет достаточно для их автоматической загрузки при
 | ||
| 	    выполнении команды <a href=
 | ||
| 	    package.html#require><strong>package
 | ||
| 	    require</strong></a>.
 | ||
| 	  </td>
 | ||
| 
 | ||
| 	<tr>
 | ||
| 	  <td>[4]</td>
 | ||
| 
 | ||
| 	  <td>Если вы установили пакеты в каких-либо других каталогах,
 | ||
| 	    то необходимо, чтобы эти каталоги содержались в переменной
 | ||
| 	    <strong>auto_path</strong> или были бы непосредственными
 | ||
| 	    подкаталогами одного из содержащихся там
 | ||
| 	    каталогов. Переменная <strong>auto_path</strong> содержит
 | ||
| 	    список каталогов, которые просматриваются как
 | ||
| 	    автозагрузчиком, так и загрузчиком пакетов. По умолчанию
 | ||
| 	    он включает <strong></strong>. Загрузчик
 | ||
| 	    пакетов также просматривает и подкаталоги каталогов,
 | ||
| 	    включенных в <strong>auto_path</strong>. Пользователь
 | ||
| 	    может в явном виде включить в приложении необходимые
 | ||
| 	    каталоги в <strong>auto_path.</strong> А можно включить
 | ||
| 	    эти каталоги в переменную окружения
 | ||
| 	    <strong>TCLLIBPATH</strong>.  Если она существует, то
 | ||
| 	    используется для инициализации переменной
 | ||
| 	    <strong>auto_path</strong> при запуске приложения.
 | ||
| 	  </td>
 | ||
| 	</tr>
 | ||
|     </table>
 | ||
| 
 | ||
|     <p>Если перечисленные выше шаги выполнены, то для использования
 | ||
|       необходимого пакета достаточно выполнить в приложении команду <a
 | ||
|       href=package.html#require><strong>package
 | ||
|       require</strong></a>. Если, например, версии 2.1, 2.3 и 3.1
 | ||
|       пакета <strong>Test</strong> проиндексированы и хранятся в
 | ||
|       соответствующих каталогах, то команда</p>
 | ||
| 
 | ||
|     <pre>
 | ||
|       package require Test
 | ||
|     </pre>
 | ||
| 
 | ||
|     <p>загрузит версию 3.1. А команда</p>
 | ||
| 
 | ||
|     <pre>
 | ||
|       package require -exact Test 2.1
 | ||
|     </pre>
 | ||
| 
 | ||
|     <p>загрузит версию 2.1. В различных каталогах могут храниться
 | ||
|       много версий одного и того же пакета, но в данный интерпретатор
 | ||
|       может быть загружена только одна из них . та, которая будет
 | ||
|       затребована первой. Однако, в различных интерпретаторах одного
 | ||
|       приложения могут быть загружены различные версии одного и того
 | ||
|       же пакета.</p>
 | ||
| 
 | ||
|     <h2><a name=ЗАГРУЗЧИК_ПАКЕТОВ_И_АВТОЗАГРУЗЧИК></a>ЗАГРУЗЧИК ПАКЕТОВ И АВТОЗАГРУЗЧИК</h2> 
 | ||
| 
 | ||
|     <p>Автозагрузчик и загрузчик пакетов во многом имеют сходные
 | ||
|       возможности, поскольку и тот, и другой предназначены для
 | ||
|       загрузки файлов по требованию. Однако загрузчик файлов
 | ||
|       представляет собой механизм более высокого уровня, который
 | ||
|       использует автозагрузчик на последнем шаге процесса
 | ||
|       загрузки. Как правило, предпочтительнее индексировать пакеты с
 | ||
|       помощью команды <a
 | ||
|       href=pkg_mkIndex.html><strong>pkg_mkIndex</strong></a>, чем с
 | ||
|       помощью команды <strong>auto_mkindex</strong>, поскольку это
 | ||
|       обеспечивает подключение механизма версий. Вы можете иметь
 | ||
|       несколько версий одного и того же пакета и, более того,
 | ||
|       использовать в различных приложениях различные версии. Напротив,
 | ||
|       <strong>auto_mkindex</strong> позволяет работать с единственной
 | ||
|       версией пакета. Скорее всего, не стоит создавать индексы для
 | ||
|       пакета с помощью и <a
 | ||
|       href=pkg_mkIndex.html><strong>pkg_mkIndex</strong></a>, и <a
 | ||
|       href=><strong>auto_mkindex</strong></a>, поскольку в этом
 | ||
|       случае трудно контролировать, какой из механизмов загрузки
 | ||
|       пакета сработает первым, и, соответственно, какая версия пакета
 | ||
|       будет загружена.</p>
 | ||
| 
 | ||
|     <h2><a name=КАК_ЖЕ_ЭТО_РАБОТАЕТ></a>КАК ЖЕ ЭТО РАБОТАЕТ?</h2> 
 | ||
| 
 | ||
|     <p>При первом вызове команды <a href=
 | ||
| 	package.html#require><strong>package require</strong></a>
 | ||
| 	исполняется скрипт <a
 | ||
| 	href=package.html#unknown><strong>package
 | ||
| 	unknown</strong></a>. При инициализации Tcl-скрипт <a href=
 | ||
| 	package.html#unknown><strong>package unknown</strong></a>
 | ||
| 	задается таким образом, что он выполняет все файлы
 | ||
| 	<strong>pkgIndex.tcl</strong> в каталогах <a
 | ||
| 	href=><strong>auto_path</strong></a>. Эти файлы содержат
 | ||
| 	команды <a href=package.html#ifneeded><strong>package
 | ||
| 	ifneeded</strong></a> для каждой доступной версии каждого
 | ||
| 	доступного пакета. Эти команды в свою очередь вызывают команды
 | ||
| 	<a href= package.html#provide><strong>package
 | ||
| 	provide</strong></a>, которые объявляют данные версии
 | ||
| 	доступными. Кроме того, они формируют необходимую исходную
 | ||
| 	информацию для автозагрузчика. Данный файл данной версии
 | ||
| 	данного пакета реально загружается только тогда, когда
 | ||
| 	вызывается первая из содержащихся в нем команд. Таким образом,
 | ||
| 	после выполнения команды <a href=
 | ||
| 	package.html#require><strong>package require</strong></a> вы
 | ||
| 	не увидите команд пакета в интерпретаторе, но, тем не менее,
 | ||
| 	вы сможете их вызвать и при этом они загрузятся
 | ||
| 	автоматически.</p>
 | ||
|   </body>
 | ||
| </html>
 | ||
| 
 | ||
| 
 | ||
| 
 | 
