![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
GNU Smalltalk includes a packaging system which allows one to file in components (often called goodies in Smalltalk lore) without caring of whether they need other goodies to be loaded first.
The packaging system is implemented by a Smalltalk class,
PackageLoader, which looks for information about packages in
various places:
Each of this directories can contain package descriptions in an
XML file named (guess what) `packages.xml', as well as standalone
packages in files named `*.star' (short for Smalltalk
archive). Later in this section you will find information about
gst-package, a program that helps you create `.star' files.
There are two ways to load something using the packaging system. The
first way is to use the PackageLoader's fileInPackage: and
fileInPackages: methods. For example:
PackageLoader fileInPackages: #('DBD-MySQL' 'DBD-SQLite').
PackageLoader fileInPackage: 'Sockets'.
|
The second way is to use the `gst-load' script which is installed together with the virtual machine. For example, you can do:
gst-load DBD-MySQL DBD-SQLite DBI
and GNU Smalltalk will automatically file in:
Notice how DBI has already been loaded.
Then it will save the Smalltalk image, and finally exit.
`gst-load' supports several options:
gst-load
won't exit.
To provide support for this system, you have to give away with your GNU Smalltalk goodies a small file (usually called `package.xml') which looks like this:
<package> <name>DBD-SQLite</name> <namespace>DBI.SQLite</namespace> <!-- The |
Other tags exist:
url
gst-package.
library
GTK
package registers the GTK+ library in this way, so that the
bindings can use them.
callout
start
%1 is replaced
with either nil or a String literal.
stop
%1 is replaced
with either nil or a String literal.
test
file, filein and sunit) but not name.
provides
Browser
is created pointing to the default browser (VisualGST), but
both browsers use provides so that if the old BLOX browser
is in the image, loading Browser will have no effect.
To install your package, you only have to do
gst-package path/to/package.xml |
gst-package is a Smalltalk script which will create
a `.star' archive in the current image directory, with the
files specified in the file, filein and
built-file tags. By default the package is
placed in the system-wide package directory; you can use the option
`--target-directory' to create the `.star' file elsewhere.
Instead of a local `package.xml' file, you can give:
URL to such a file. The file
will be downloaded if necessary, and copied to the target directory;
url tag in the file
will be used to find a source code repository (git or
svn) or as a redirect to another `package.xml' file.
There is also a short form for specifying `package.xml' file on GNU Smalltalk's web site, so that the following two commands are equivalent:
gst-package http://smalltalk.gnu.org/project/Iliad/package.xml
gst-package --download Iliad
|
When downloading remote `package.xml' files, gst-package
also performs a special check to detect multiple packages in the same
repository. If the following conditions are met:
package has a prerequisite
package-subpackage;
then the `subpackage/package.xml' will be installed as well.
gst-package does not check if the file actually defines a
package with the correct name, but this may change in future versions.
Alternatively, gst-package can be used to create a skeleton
GNU style source tree. This includes a `configure.ac' that will
find the installation path of GNU Smalltalk, and a `Makefile.am'
to support all the standard Makefile targets (including make
install and make dist). To do so, go in the directory that
is to become the top of the source tree and type.
gst-package --prepare path1/package.xml path2/package.xml |
In this case the generated configure script and Makefile will use more
features of gst-package, which are yet to be documented.
The GNU Smalltalk makefile similarly uses gst-package to install
packages and to prepare the distribution tarballs.
The rest of this chapter discusses some of the packages provided with GNU Smalltalk.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |