150 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			150 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>СИНТАКСИС</h2>
 | ||
| 
 | ||
|     <pre>
 | ||
|       <strong>pkg_mkIndex</strong> <em>dir</em> <em>pattern</em> ?<em>pattern</em> <em>pattern</em>...?
 | ||
|     </pre>
 | ||
| 
 | ||
|     <h2>ОПИСАНИЕ</h2> 
 | ||
| 
 | ||
|     <p>Процедура <strong>pkg_mkIndex</strong> представляет собой утилиту для
 | ||
|       работы с Tcl-библиотеками. Она обеспечивает создание индексных
 | ||
|       файлов, необходимых для автоматической загрузки пакетов, когда в
 | ||
|       приложении встречается команда <strong><a href=
 | ||
|       package.html#require>package require</a></strong>. Для создания
 | ||
|       автоматически загружаемых пакетов необходимо выполнить следующие
 | ||
|       действия:</p>
 | ||
|     <ul>
 | ||
|       <li>Создать один или несколько пакетов. Каждый пакет может
 | ||
| 	состоять из одного или больше файлов с 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</strong>
 | ||
| 	<strong>provide</strong></a> с именем пакета и версией. Каждый бинарный
 | ||
| 	файл должен содержать вызов процедуры <strong>Tcl_PkgProvide</strong>.
 | ||
|       </li>
 | ||
| 
 | ||
|       <li>Создать индексные файлы с помощью команды
 | ||
| 	<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</strong>
 | ||
| 	<strong>provide</strong></a> или вызов <strong>Tcl_PkgProvide)</strong>.</li>
 | ||
| 
 | ||
|       <li>Установить пакет как подкаталог одного из каталогов,
 | ||
| 	перечисленных в переменной <strong>tcl_pkgPath</strong>. Если в списке
 | ||
| 	<strong></strong> больше одного каталога, то бинарные файлы
 | ||
| 	с разделяемыми библиотеками обычно устанавливаются в первом
 | ||
| 	каталоге, а библиотеки Tcl-скриптов - во втором. В этих
 | ||
| 	каталогах должны также находиться файлы <strong>pkgIndex.tcl</strong>.
 | ||
| 	Пока пакеты будут размещаться в подкаталогах каталогов,
 | ||
| 	перечисленных в переменной <strong>tcl_pkgPath</strong>, этого будет
 | ||
| 	достаточно для их автоматической загрузки при выполнении
 | ||
| 	команды <a href=package.html#require><strong>package</strong>
 | ||
| 	<strong>require</strong></a>.</li>
 | ||
| 
 | ||
|     <li>Если вы установили пакеты в каких-либо других каталогах, то
 | ||
| 	необходимо, чтобы эти каталоги содержались в переменной
 | ||
| 	<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> при
 | ||
| 	запуске приложения.</li>
 | ||
| 
 | ||
|       <li><p>Если перечисленные выше шаги выполнены, то для
 | ||
| 	  использования необходимого пакета достаточно выполнить в
 | ||
| 	  приложении команду <strong><a href=package.html#require>
 | ||
| 	  package require</a></strong>. Если, например, версии 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>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|     
 | ||
|     <h2>ЗАГРУЗЧИК ПАКЕТОВ И АВТОЗАГРУЗЧИК</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>,
 | ||
|       и <strong>auto_mkindex</strong>, поскольку в этом случае трудно
 | ||
|       контролировать, какой из механизмов загрузки пакета сработает
 | ||
|       первым, и, соответственно, какая версия пакета будет загружена.
 | ||
|     </p>
 | ||
| 
 | ||
|     <h2>КАК ЖЕ ЭТО РАБОТАЕТ?</h2> 
 | ||
| 
 | ||
|     <p>При первом вызове команды <a
 | ||
|       href=package.html#require><strong>package</strong> <strong>require</strong></a>
 | ||
|       исполняется скрипт <a href=package.html#unknown><strong>package</strong>
 | ||
|       <strong>unknown</strong></a>. При инициализации Tcl-скрипт <a
 | ||
|       href=package.html#unknown><strong>package</strong> <strong>unknown</strong></a>
 | ||
|       задается таким образом, что он выполняет все файлы
 | ||
|       <strong>pkgIndex.tcl</strong> в каталогах <strong>auto_path.</strong> Эти файлы
 | ||
|       содержат команды <a href= package.html#ifneeded><strong>package</strong>
 | ||
|       <strong>ifneeded</strong></a> для каждой доступной версии каждого
 | ||
|       доступного пакета. Эти команды в свою очередь вызывают команды
 | ||
|       <strong><a href= package.html#provide>package provide</a></strong>,
 | ||
|       которые объявляют данные версии доступными. Кроме того, они
 | ||
|       формируют необходимую исходную информацию для
 | ||
|       автозагрузчика. Данный файл данной версии данного пакета реально
 | ||
|       загружается только тогда, когда вызывается первая из
 | ||
|       содержащихся в нем команд.  Таким образом, после выполнения
 | ||
|       команды <a href= package.html#require><strong>package</strong>
 | ||
|       <strong>require</strong></a> вы не увидите команд пакета в интерпретаторе,
 | ||
|       но, тем не менее, вы сможете их вызвать и при этом они
 | ||
|       загрузятся автоматически.</p>
 | ||
|   </body>
 | ||
| </html>
 | ||
| 
 | 
