Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / src / nas,5.n2.os.2 / lib / python / man / mann / pkg_mkIndex.n
CommitLineData
86530b38
AT
1'\"
2'\" Copyright (c) 1996 Sun Microsystems, Inc.
3'\"
4'\" See the file "license.terms" for information on usage and redistribution
5'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
6'\"
7'\" RCS: @(#) $Id: pkgMkIndex.n,v 1.14 2003/02/25 23:58:09 dgp Exp $
8'\"
9'\" The definitions below are for supplemental macros used in Tcl/Tk
10'\" manual entries.
11'\"
12'\" .AP type name in/out ?indent?
13'\" Start paragraph describing an argument to a library procedure.
14'\" type is type of argument (int, etc.), in/out is either "in", "out",
15'\" or "in/out" to describe whether procedure reads or modifies arg,
16'\" and indent is equivalent to second arg of .IP (shouldn't ever be
17'\" needed; use .AS below instead)
18'\"
19'\" .AS ?type? ?name?
20'\" Give maximum sizes of arguments for setting tab stops. Type and
21'\" name are examples of largest possible arguments that will be passed
22'\" to .AP later. If args are omitted, default tab stops are used.
23'\"
24'\" .BS
25'\" Start box enclosure. From here until next .BE, everything will be
26'\" enclosed in one large box.
27'\"
28'\" .BE
29'\" End of box enclosure.
30'\"
31'\" .CS
32'\" Begin code excerpt.
33'\"
34'\" .CE
35'\" End code excerpt.
36'\"
37'\" .VS ?version? ?br?
38'\" Begin vertical sidebar, for use in marking newly-changed parts
39'\" of man pages. The first argument is ignored and used for recording
40'\" the version when the .VS was added, so that the sidebars can be
41'\" found and removed when they reach a certain age. If another argument
42'\" is present, then a line break is forced before starting the sidebar.
43'\"
44'\" .VE
45'\" End of vertical sidebar.
46'\"
47'\" .DS
48'\" Begin an indented unfilled display.
49'\"
50'\" .DE
51'\" End of indented unfilled display.
52'\"
53'\" .SO
54'\" Start of list of standard options for a Tk widget. The
55'\" options follow on successive lines, in four columns separated
56'\" by tabs.
57'\"
58'\" .SE
59'\" End of list of standard options for a Tk widget.
60'\"
61'\" .OP cmdName dbName dbClass
62'\" Start of description of a specific option. cmdName gives the
63'\" option's name as specified in the class command, dbName gives
64'\" the option's name in the option database, and dbClass gives
65'\" the option's class in the option database.
66'\"
67'\" .UL arg1 arg2
68'\" Print arg1 underlined, then print arg2 normally.
69'\"
70'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
71'\"
72'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
73.if t .wh -1.3i ^B
74.nr ^l \n(.l
75.ad b
76'\" # Start an argument description
77.de AP
78.ie !"\\$4"" .TP \\$4
79.el \{\
80. ie !"\\$2"" .TP \\n()Cu
81. el .TP 15
82.\}
83.ta \\n()Au \\n()Bu
84.ie !"\\$3"" \{\
85\&\\$1 \\fI\\$2\\fP (\\$3)
86.\".b
87.\}
88.el \{\
89.br
90.ie !"\\$2"" \{\
91\&\\$1 \\fI\\$2\\fP
92.\}
93.el \{\
94\&\\fI\\$1\\fP
95.\}
96.\}
97..
98'\" # define tabbing values for .AP
99.de AS
100.nr )A 10n
101.if !"\\$1"" .nr )A \\w'\\$1'u+3n
102.nr )B \\n()Au+15n
103.\"
104.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
105.nr )C \\n()Bu+\\w'(in/out)'u+2n
106..
107.AS Tcl_Interp Tcl_CreateInterp in/out
108'\" # BS - start boxed text
109'\" # ^y = starting y location
110'\" # ^b = 1
111.de BS
112.br
113.mk ^y
114.nr ^b 1u
115.if n .nf
116.if n .ti 0
117.if n \l'\\n(.lu\(ul'
118.if n .fi
119..
120'\" # BE - end boxed text (draw box now)
121.de BE
122.nf
123.ti 0
124.mk ^t
125.ie n \l'\\n(^lu\(ul'
126.el \{\
127.\" Draw four-sided box normally, but don't draw top of
128.\" box if the box started on an earlier page.
129.ie !\\n(^b-1 \{\
130\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
131.\}
132.el \}\
133\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
134.\}
135.\}
136.fi
137.br
138.nr ^b 0
139..
140'\" # VS - start vertical sidebar
141'\" # ^Y = starting y location
142'\" # ^v = 1 (for troff; for nroff this doesn't matter)
143.de VS
144.if !"\\$2"" .br
145.mk ^Y
146.ie n 'mc \s12\(br\s0
147.el .nr ^v 1u
148..
149'\" # VE - end of vertical sidebar
150.de VE
151.ie n 'mc
152.el \{\
153.ev 2
154.nf
155.ti 0
156.mk ^t
157\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
158.sp -1
159.fi
160.ev
161.\}
162.nr ^v 0
163..
164'\" # Special macro to handle page bottom: finish off current
165'\" # box/sidebar if in box/sidebar mode, then invoked standard
166'\" # page bottom macro.
167.de ^B
168.ev 2
169'ti 0
170'nf
171.mk ^t
172.if \\n(^b \{\
173.\" Draw three-sided box if this is the box's first page,
174.\" draw two sides but no top otherwise.
175.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
176.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177.\}
178.if \\n(^v \{\
179.nr ^x \\n(^tu+1v-\\n(^Yu
180\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
181.\}
182.bp
183'fi
184.ev
185.if \\n(^b \{\
186.mk ^y
187.nr ^b 2
188.\}
189.if \\n(^v \{\
190.mk ^Y
191.\}
192..
193'\" # DS - begin display
194.de DS
195.RS
196.nf
197.sp
198..
199'\" # DE - end display
200.de DE
201.fi
202.RE
203.sp
204..
205'\" # SO - start of list of standard options
206.de SO
207.SH "STANDARD OPTIONS"
208.LP
209.nf
210.ta 5.5c 11c
211.ft B
212..
213'\" # SE - end of list of standard options
214.de SE
215.fi
216.ft R
217.LP
218See the \\fBoptions\\fR manual entry for details on the standard options.
219..
220'\" # OP - start of full description for a single option
221.de OP
222.LP
223.nf
224.ta 4c
225Command-Line Name: \\fB\\$1\\fR
226Database Name: \\fB\\$2\\fR
227Database Class: \\fB\\$3\\fR
228.fi
229.IP
230..
231'\" # CS - begin code excerpt
232.de CS
233.RS
234.nf
235.ta .25i .5i .75i 1i
236..
237'\" # CE - end code excerpt
238.de CE
239.fi
240.RE
241..
242.de UL
243\\$1\l'|0\(ul'\\$2
244..
245.TH pkg_mkIndex n 8.3 Tcl "Tcl Built-In Commands"
246.BS
247'\" Note: do not modify the .SH NAME line immediately below!
248.SH NAME
249pkg_mkIndex \- Build an index for automatic loading of packages
250.SH SYNOPSIS
251.nf
252.VS 8.3.0
253\fBpkg_mkIndex ?\fI\-direct\fR? ?\fI\-lazy\fR? ?\fI\-load pkgPat\fR? ?\fI\-verbose\fR? \fIdir\fR ?\fIpattern pattern ...\fR?
254.VE
255.fi
256.BE
257
258.SH DESCRIPTION
259.PP
260\fBPkg_mkIndex\fR is a utility procedure that is part of the standard
261Tcl library.
262It is used to create index files that allow packages to be loaded
263automatically when \fBpackage require\fR commands are executed.
264To use \fBpkg_mkIndex\fR, follow these steps:
265.IP [1]
266Create the package(s).
267Each package may consist of one or more Tcl script files or binary files.
268Binary files must be suitable for loading with the \fBload\fR command
269with a single argument; for example, if the file is \fBtest.so\fR it must
270be possible to load this file with the command \fBload test.so\fR.
271Each script file must contain a \fBpackage provide\fR command to declare
272the package and version number, and each binary file must contain
273a call to \fBTcl_PkgProvide\fR.
274.IP [2]
275Create the index by invoking \fBpkg_mkIndex\fR.
276The \fIdir\fR argument gives the name of a directory and each
277\fIpattern\fR argument is a \fBglob\fR-style pattern that selects
278script or binary files in \fIdir\fR.
279.VS 8.0.3
280The default pattern is \fB*.tcl\fR and \fB*.[info sharedlibextension]\fR.
281.VE
282.br
283\fBPkg_mkIndex\fR will create a file \fBpkgIndex.tcl\fR in \fIdir\fR
284with package information about all the files given by the \fIpattern\fR
285arguments.
286It does this by loading each file into a slave
287interpreter and seeing what packages
288and new commands appear (this is why it is essential to have
289\fBpackage provide\fR commands or \fBTcl_PkgProvide\fR calls
290in the files, as described above).
291If you have a package split among scripts and binary files,
292or if you have dependencies among files,
293you may have to use the \fB\-load\fP option
294or adjust the order in which \fBpkg_mkIndex\fR processes
295the files. See COMPLEX CASES below.
296
297.IP [3]
298Install the package as a subdirectory of one of the directories given by
299the \fBtcl_pkgPath\fR variable. If \fB$tcl_pkgPath\fR contains more
300than one directory, machine-dependent packages (e.g., those that
301contain binary shared libraries) should normally be installed
302under the first directory and machine-independent packages (e.g.,
303those that contain only Tcl scripts) should be installed under the
304second directory.
305The subdirectory should include
306the package's script and/or binary files as well as the \fBpkgIndex.tcl\fR
307file. As long as the package is installed as a subdirectory of a
308directory in \fB$tcl_pkgPath\fR it will automatically be found during
309\fBpackage require\fR commands.
310.br
311If you install the package anywhere else, then you must ensure that
312the directory containing the package is in the \fBauto_path\fR global variable
313or an immediate subdirectory of one of the directories in \fBauto_path\fR.
314\fBAuto_path\fR contains a list of directories that are searched
315by both the auto-loader and the package loader; by default it
316includes \fB$tcl_pkgPath\fR.
317The package loader also checks all of the subdirectories of the
318directories in \fBauto_path\fR.
319You can add a directory to \fBauto_path\fR explicitly in your
320application, or you can add the directory to your \fBTCLLIBPATH\fR
321environment variable: if this environment variable is present,
322Tcl initializes \fBauto_path\fR from it during application startup.
323.IP [4]
324Once the above steps have been taken, all you need to do to use a
325package is to invoke \fBpackage require\fR.
326For example, if versions 2.1, 2.3, and 3.1 of package \fBTest\fR
327have been indexed by \fBpkg_mkIndex\fR, the command
328\fBpackage require Test\fR will make version 3.1 available
329and the command \fBpackage require \-exact Test 2.1\fR will
330make version 2.1 available.
331There may be many versions of a package in the various index files
332in \fBauto_path\fR, but only one will actually be loaded in a given
333interpreter, based on the first call to \fBpackage require\fR.
334Different versions of a package may be loaded in different
335interpreters.
336
337.SH OPTIONS
338The optional switches are:
339.TP 15
340\fB\-direct\fR
341The generated index will implement direct loading of the package
342upon \fBpackage require\fR. This is the default.
343.TP 15
344\fB\-lazy\fR
345The generated index will manage to delay loading the package until the
346use of one of the commands provided by the package, instead of loading
347it immediately upon \fBpackage require\fR.
348.TP 15
349\fB\-load \fIpkgPat\fR
350The index process will pre-load any packages that exist in the
351current interpreter and match \fIpkgPat\fP into the slave interpreter used to
352generate the index. The pattern match uses string match rules, but without
353making case distinctions.
354See COMPLEX CASES below.
355.TP 15
356\fB\-verbose\fR
357Generate output during the indexing process. Output is via
358the \fBtclLog\fP procedure, which by default prints to stderr.
359.TP 15
360\fB\-\-\fR
361End of the flags, in case \fIdir\fP begins with a dash.
362
363.SH "PACKAGES AND THE AUTO-LOADER"
364.PP
365The package management facilities overlap somewhat with the auto-loader,
366in that both arrange for files to be loaded on-demand.
367However, package management is a higher-level mechanism that uses
368the auto-loader for the last step in the loading process.
369It is generally better to index a package with \fBpkg_mkIndex\fR
370rather than \fBauto_mkindex\fR because the package mechanism provides
371version control: several versions of a package can be made available
372in the index files, with different applications using different
373versions based on \fBpackage require\fR commands.
374In contrast, \fBauto_mkindex\fR does not understand versions so
375it can only handle a single version of each package.
376It is probably not a good idea to index a given package with both
377\fBpkg_mkIndex\fR and \fBauto_mkindex\fR.
378If you use \fBpkg_mkIndex\fR to index a package, its commands cannot
379be invoked until \fBpackage require\fR has been used to select a
380version; in contrast, packages indexed with \fBauto_mkindex\fR
381can be used immediately since there is no version control.
382
383.SH "HOW IT WORKS"
384.PP
385\fBPkg_mkIndex\fR depends on the \fBpackage unknown\fR command,
386the \fBpackage ifneeded\fR command, and the auto-loader.
387The first time a \fBpackage require\fR command is invoked,
388the \fBpackage unknown\fR script is invoked.
389This is set by Tcl initialization to a script that
390evaluates all of the \fBpkgIndex.tcl\fR files in the
391\fBauto_path\fR.
392The \fBpkgIndex.tcl\fR files contain \fBpackage ifneeded\fR
393commands for each version of each available package; these commands
394invoke \fBpackage provide\fR commands to announce the
395availability of the package, and they setup auto-loader
396information to load the files of the package.
397.VS 8.3
398If the \fI\-lazy\fR flag was provided when the \fBpkgIndex.tcl\fR
399was generated,
400.VE
401a given file of a given version of a given package isn't
402actually loaded until the first time one of its commands
403is invoked.
404Thus, after invoking \fBpackage require\fR you may
405not see the package's commands in the interpreter, but you will be able
406to invoke the commands and they will be auto-loaded.
407
408.VS 8.3
409.SH "DIRECT LOADING"
410.PP
411Some packages, for instance packages which use namespaces and export
412commands or those which require special initialization, might select
413that their package files be loaded immediately upon \fBpackage require\fR
414instead of delaying the actual loading to the first use of one of the
415package's command. This is the default mode when generating the package
416index. It can be overridden by specifying the \fI\-lazy\fR argument.
417.VE
418
419.SH "COMPLEX CASES"
420Most complex cases of dependencies among scripts
421and binary files, and packages being split among scripts and
422binary files are handled OK. However, you may have to adjust
423the order in which files are processed by \fBpkg_mkIndex\fR.
424These issues are described in detail below.
425.PP
426If each script or file contains one package, and packages
427are only contained in one file, then things are easy.
428You simply specify all files to be indexed in any order
429with some glob patterns.
430.PP
431In general, it is OK for scripts to have dependencies on other
432packages.
433If scripts contain \fBpackage require\fP commands, these are
434stubbed out in the interpreter used to process the scripts,
435so these do not cause problems.
436If scripts call into other packages in global code,
437these calls are handled by a stub \fBunknown\fP command.
438However, if scripts make variable references to other package's
439variables in global code, these will cause errors. That is
440also bad coding style.
441.PP
442If binary files have dependencies on other packages, things
443can become tricky because it is not possible to stub out
444C-level APIs such as \fBTcl_PkgRequire\fP API
445when loading a binary file.
446For example, suppose the BLT package requires Tk, and expresses
447this with a call to \fBTcl_PkgRequire\fP in its \fBBlt_Init\fP routine.
448To support this, you must run \fBpkg_mkIndex\fR in an interpreter that
449has Tk loaded. You can achieve this with the
450\fB\-load \fIpkgPat\fR option. If you specify this option,
451\fBpkg_mkIndex\fR will load any packages listed by
452\fBinfo loaded\fP and that match \fIpkgPat\fP
453into the interpreter used to process files.
454In most cases this will satisfy the \fBTcl_PkgRequire\fP calls
455made by binary files.
456.PP
457If you are indexing two binary files and one depends on the other,
458you should specify the one that has dependencies last.
459This way the one without dependencies will get loaded and indexed,
460and then the package it provides
461will be available when the second file is processed.
462You may also need to load the first package into the
463temporary interpreter used to create the index by using
464the \fB\-load\fP flag;
465it won't hurt to specify package patterns that are not yet loaded.
466.PP
467If you have a package that is split across scripts and a binary file,
468then you should avoid the \fB\-load\fP flag. The problem is that
469if you load a package before computing the index it masks any
470other files that provide part of the same package.
471If you must use \fB\-load\fP,
472then you must specify the scripts first; otherwise the package loaded from
473the binary file may mask the package defined by the scripts.
474
475.SH "SEE ALSO"
476package(n)
477
478.SH KEYWORDS
479auto-load, index, package, version