|
Tcl Dev Kit User Guide |
|
[
Main Table Of Contents
| Table Of Contents
| Keyword Index
]
teapot-md(n) 1.0 tpm "TEA Package Management"
teapot-md - TEApot Meta Data Specification
TABLE OF CONTENTS
DESCRIPTION
Fundamental format
Embedded Format
Meta data storage
Zip Archives
Tcl Modules
Starkits and Starpacks
Profiles
Keywords with predefined semantics
Entity references
Backward compatibility
Example entity references
BUGS, IDEAS, FEEDBACK
SEE ALSO
KEYWORDS
COPYRIGHT
This document specifies the basic syntax of teapot meta data, the
embedding of meta data into various types of files, and the set of
standard keywords used by ActiveState, including their meaning.
The basic format of TEApot meta data is that of a Tcl script in the form
| |
ENTITY name version
Meta keyword1 word ...
Meta keyword2 word ...
Meta keyword3 word ...
...
|
The format allows the description of more than one entity within the
stored meta data, by simply storing several of the text blocks shown
above in the same file. This is required if and only if a single file
is used to hold the meta data of several entities sharing a single
directory.
In the above pseudo-example, ENTITY is a placeholder for the actual
command starting the description of an entity, which is either Package,
Profile, or Application, for the description of packages, profiles,
and applications respectively. It starts the block of meta data describing
the named and versioned entity. The block ends at either the next entity
command, or the end of the file, whichever comes first.
The actual meta data for the entity is defined by the sequence of
Meta commands and their arguments. The value associated with the
keyword is the list of words coming after it. Any
keyword may also occur multiple times in Meta commands. In that
case its value is the concatenation of all lists associated with the
individual occurrences. If, for example, the meta data is stored as
| |
Meta KEY word1 word2 ...
Meta KEY word1' word2' ...'
...''
|
then the actual value for KEY is
| |
[list word1 word2 ... word1' word2' ...' ...'']
|
As a second example, the values resulting from the definitions
| |
Meta Require {Tcl 8.2} {md5 2} struct::list
|
and
| |
Meta Require {Tcl 8.2}
Meta Require {md5 2}
Meta Require struct::list
|
are identical.
Another important issue is the case-sensitivity of keywords. They are
not.
Case-sensitive keywords imply that, for example, Description
and description can have different meanings and usage. No
use-case could be thought of where such a distinction makes
sense. Therefore the system will not make any distinctions based on
letter-case.
On the other hand, the values associated with the keywords are
case-sensitive.
The format described above is also called the external meta
data format.
The second format is for the embedding of meta data into tcl scripts.
In this format, all the commands of the fundamental format are
put into Tcl comments, with one command per line, and the whole block is
bracketed by the markers # @@ Meta Begin and
# @@ Meta End.
Our example is for a simple Tcllib package:
| |
# @@ Meta Begin
# Package comm 4.4.1
# Meta category Remote communication
# Meta description A remote communication facility for Tcl (7.6, 8.0,
# Meta description and later)
# Meta platform tcl
# Meta require {Tcl 8}
# @@ Meta End
|
For zip archives containing a teapot package the meta data is stored
in the file "teapot.txt" in the archive, using the fundamental
format as documented above. For compatibility with older incarnations
of the teapot system a copy of the meta data is also stored in the
per-archive comment of the zip archive.
Our example is for Iwidgets:
| |
Package Iwidgets 4.0.2
Meta category Widget set
Meta description This set of mega-widgets delivers many new, general
Meta description purpose widgets like option menus, combo boxes,
Meta description selection boxes, and various dialogs whose
Meta description counterparts are found in Motif and Windows.
Meta platform tcl
Meta require {Itcl 3.2}
Meta require {Itk 3.2}
Meta require {Tcl 8.0}
Meta require {Tk 8.0}
Meta subject iwidgets widget toolkit Tk megawidget {[incr Tcl]}
Meta subject {[incr Tk]}
Meta summary A megawidget set based on {[incr Tcl]} and {[incr Tk]}
|
In Tcl Modules the meta data is stored using the embedded
format documented above.
Starkits are in essence Tcl Modules with a Metakit filesystem attached
at the rear. The meta data is searched first in the header, as if it
were a regular Tcl Module. Only if nothing was found in the header is the
attached filesystem inspected as well. In that case a file "teapot.txt"
is sought in the top directory of the filesystem, and it has to
contain the meta data using the external format.
For a starpack the same procedure is followed, except that finding the
meta data in the binary header is highly unlikely. It is possible
however, if the C code of the runtime embedded the information in a
string constant.
Profiles are packages whose functionality is irrelevant and ignored.
Only their meta data is used. As such their minimal representation is
as a Tcl Module without actual code and containing only the meta data,
using the embedded format. They are used by the TEApot system to define
named collections of packages and applications.
A profile is detected by the presence of the marker keyword
Profile. The value of this keyword is irrelevant and ignored,
only its (non-)presence counts.
Examples of profiles would be all of Tcllib, or the whole of ActiveTcl.
The semantics of the keywords listed below are defined by the TEAPOT
system and the provided applications. In other words, the TEAPOT
applications rely on them being used by packagers as specified.
- Autopath
-
This information is optional. It represents an advanced feature of the
package generator, teapot-pkg. Its manpage explains more.
- Category
-
The value is interpreted as a string describing the Subject
of the entity in a one-line sentence instead of a list of key-phrases.
As such it is similar to Summary. The string is created by
joining the words of the list.
- Description
-
The value is interpreted as a string describing the entity in
free-form. The string is created by joining the words of the list.
This is the information returned by teacup describe.
- Entity
-
Reserved. This keyword is used by repositories to reflect the
type of the entity the meta data is for into the meta data itself.
Anything a user may have stored under this will be lost. This enables
repository users to search by entity via the general search facility.
- EntrySource
-
Their value is a list of paths containing the files in the package,
relative to the package directory, which are
sourced to activate the functionality of the package. This is
information for the package generator, teapot-pkg. Its
manpage explains more.
- EntryLoad
-
Their value is a list of paths containing the files in the package,
relative to the package directory, which are loaded
to activate the functionality of the package. This is
information for the package generator, teapot-pkg. Its
manpage explains more.
- EntryKeep
-
The value of this keyword is irrelevant and ignored. The presence of
this keyword instructs the package generator, teapot-pkg, to
keep an existing package index file ("pkgIndex.tcl") instead of
generating one. Its manpage explains more.
- EntryTclCommand
-
The value of this keyword is the actual load command of the package.
The presence of this keyword instructs the package generator,
teapot-pkg. to not generate a load command of its own. Its
manpage explains more.
- Excluded
-
This information is optional. When present it is a list of glob
patterns specifying which files to not include in the package. This is
information for the package generator, teapot-pkg. Its
manpage explains more.
- Included
-
The information is optional. When present it is a list of glob
patterns which specify which files should be included into the list of
files for the package. This is information for the package generator,
teapot-pkg. Its manpage explains more.
- InitPrefix
-
This information is optional. It represents an advanced feature of the
package generator, teapot-pkg. Its manpage explains more.
- Name
-
Reserved. This keyword is used by repositories to reflect the
name of the entity the meta data is for into the meta data itself.
Anything a user may have stored under this will be lost. This enables
repository users to search by name via the general search facility.
- Platform
-
The value is interpreted as a string naming the architecture the
entity is for. This is a value as
generated by the command platform::identify provided by the
package platform. Using the value tcl indicates that
the entity is written in pure Tcl, without any binary parts.
This keyword has to be present in the meta data to fully identify the
entity. It cannot be left out.
- Profile
-
Deprecated. In older releases of teapot a profile was a package
with this keyword present in its meta. This form is still recognized,
however the recommended form is to identify profiles through the use
of Profile as their entity type.
The actual value of this keyword is irrelevant. Only the
(non-)presence of the keyword has meaning. If the keyword is present
the entity (should be a package) is a Profile, i.e. a package
without actual code, and only requirements. Such packages are not
installed, and only used in dependency-resolution.
- Recommend
-
The value is interpreted as a list of entity references, with each
word one reference. The referencing entity is operational without
them, however it may be better, faster, etc. when they are present.
The format of these references is specified in section
Entity references
- Require
-
The value is interpreted as a list of entity references, with each
word one reference. The referenced entities are required for the
referencing entity to be operational.
The format of these references is specified in section
Entity references
- Subject
-
The value is a list of key-phrases for use in an index.
- Summary
-
The value is interpreted as a free form string containing a brief,
one-line description of the package, suitable for brief listings
and tables of contents. The string is created by joining the words
of the list.
- tcl_findLibrary/force
-
This information is optional. It represents an advanced feature of the
package generator, teapot-pkg. Its manpage explains more.
- Version
-
Reserved. This keyword is used by repositories to reflect the
version of the entity the meta data is for into the meta data itself.
Anything a user may have stored under this will be lost.This enables
repository users to search by version via the general search facility.
An entity reference is a list of the general form
| |
name ?requirement?... ?-option value?...
|
with the name, requirements and all options and values each one word
of the list. The smallest possible form is a list containing just the
name as its first and only element.
Each requirement between name and options is a short form for
"-require requirement", and the value has the same syntax as the value
for the option. Using this form allows the specification of requirements
using the same syntax as specified in TIP 268.
Especially when no further options are required.
The recognized options are
- -archglob globpattern
-
If specified multiple times only the last value is relevant.
The value is a glob-pattern. The Platform information of a
candidate package has to match this pattern to be valid and used.
- -exact bool
-
Backward compatibility option. The value is a boolean flag indicating
if the exact version of the package is requested or not. True
requests an exact version. For the details see the section
Backward compatibility.
- -is entity
-
If specified multiple times only the last value is relevant. If not
specified at all the value defaults to package.
The value is either package or application,
specifying the type of the referenced entity.
- -platform name
-
If specified multiple times only the last value is relevant.
The value has to be one of unix, windows, or
macosx. The reference is valid if and only if the variable
tcl_platform(platform) on the client performing the reference
resolution contains the same value.
In other words, this option is a guard, and makes the reference
conditional on the platform of the client. I.e. the referenced
packages is needed if and only if the platform is correct.
An actual use case is Tcllib's autoproxy package. It
requires the package registry for its operation, but this is
valid only for windows.
This is specified in the meta data of autoproxy as
| |
Meta Require {registry -platform windows}
|
A windows client will follow the reference. All other clients will
ignore it.
- -require req
-
If specified multiple times the acceptable set of versions is the
union of the specified ranges.
The value specifies the range of versions which are acceptable. It is
a list of one or two elements, specifying the min and max versions for
the range. The maximum is exclusive, i.e. it is the first version
which is not acceptable anymore. Note that the recognized forms are
the same forms which are accepted by the builtin command
package require
- X.y
-
This is equivalent to {-require X.y-(X+1)}. All versions since X.y are
acceptable, until the next major version, i.e. X+1.
- MIN-MAX
-
The acceptable range begins at version MIN and ends at version MAX,
exclusive.
- MIN-
-
The acceptable range starts at version MIN and there is no maximum.
It can also be said that the maximum is infinity.
- {MIN MAX}
-
Deprecated. See "MIN-MAX".
- {MIN {}}
-
Deprecated. See "MIN-".
- -version v
-
Backward compatibility option. The value is a version number, the
version of the package which has been requested. For the details see
the section Backward compatibility.
.
For backward compatibility a reference may contain the options
-version and -exact to simulate the older forms of
package require statements. They are translated internally to
- -version X.y -exact 1
-
=> -require {X.y X.(y+1)}
This means that exactness is only to the level of granularity
specified, and below that we are free to choose unexact.
- -version X.y -exact 0
-
=> -require {X.y {}}
- -version X.y
-
=> -require {X.y {}}
- FOO
-
This refers to package FOO (The entity-type defaults to package).
Any version is acceptable.
- FOO -is application
-
This refers to application FOO. Any version is acceptable.
- FOO -version 2.1
-
- FOO -require 2.1
-
- FOO 2.1
-
Package FOO is asked for, at least version 2.1 or higher, but not as high
as version 3.
- FOO -version 2.1.1 -exact true
-
- FOO -require 2.1.1-2.1.1
-
- FOO 2.1.1-2.1.1
-
Version 2.1.1 of package FOO is asked for. Note that version 2.1.1.2,
2.1.1.6, etc. are all valid. The exactness is only to the level
specified. Below that the versions are allowed to vary.
- FOO -require 4.3-4.5
-
- FOO 4.3-4.5
-
Acceptable versions of package FOO are 4.3 and higher, and have to be
below version 4.5.
- FOO -require 4.8-
-
- FOO 4.8-
-
Versions 4.8 and higher of package FOO are acceptable, with no upper limit.
- FOO -require 4.3-4.5 -require 4.7
-
- FOO 4.3-4.5 4.7
-
Versions 4.3 and higher, and below 4.5 are acceptable, as are version 4.7
and higher, and below version 5. This accepts everything between versions
4.3 and 5, except for all versions between 4.5 and 4.7 (exclusive).
- FOO -archglob *-sparc
-
This references all versions of package FOO which are for a sparc based
system, independent of operating system.
This document will undoubtedly contain bugs and other problems.
Please report such at the
ActiveState ActiveTcl Bug Tracker.
The relevant component is teapot.
Please also report any ideas for enhancements you may have for either
application and/or documentation.
teacup, teapot, teapot-admin, teapot-pkg
TEA, TEAPOT, archive, development, generation, meta data, package management, packager, syntax
Copyright © 2007 ActiveState Software Inc.
|