Hi!
I've started working on a package manager implementation, dubbed
"dorodango"[0]. I post this as a feedback request, not because there's
working code to show yet.
dorodango is/will (ATM) be based upon these concepts, which I hereby put
up for discussion:
- Bundles: A bundle is a ZIP file, containing the actual files (Scheme
libraries, documentation, data, ...) as well as one or more
"sys-def.scm" files containing metadata (see the next point).
There may either be a single such file in the toplevel directory, or
one or more in subdirectories (of depth 1). If a sys-def.scm file is
found in the toplevel, all other potentially considered sys-def.scm
files are ignored.
A bundle may as well be represented by a directory on disk, which is
treated the same way.
- Systems: A system is the "unit of software" dorodango works with. It
has a name (a symbol, possibly along with a namespace tag), and a
version, which may be used to form dependency relationships among
packages.
A system's files are grouped into categories (e.g. (R6RS) libraries,
documentation). Each category contains a set of (relative)
filenames. The actual filenames need not directly correspond to the
filenames of the bundle they are contained in; A system definition may
specify a mapping (see below).
- sys-def.scm files: They contain the name, version, dependencies, file
mapping, etc. for one or more systems, each described by a
`define-system' form, for example:
% cat dorodango/sys-def.scm
(define-system dorodango
(version 0)
(depends spells srfi)
(documentation "doc" ("Readme.txt" -> "README")))
% cat spells/sys-def.scm
(define-system spells
(version 0)
(depends srfi)
(documentation "doc")
(libraries "spells"))
- Destinations: This is where systems get installed to. Each destination
has a root directory and associated rules that map the files from each
category of a system to a certain (sub)directory. For example, for a
per-user configuration, the rules might say:
- Put documentation under "doc/<system-name>-<version>/"
- Put scheme libraries under "libraries"
For distribution packaging, the rules would be different to comply
with the Distribution's policy (and/or FHS):
- Put documentation under
"share/doc/libr6rs-<system-name>-<version>/"
- Put scheme libraries under
"lib/r6rs-libraries"
- Repositories: A directory containing:
- A file describing all available systems (name, version), each along
with the path to the bundle it is contained in.
- The bundle files (or directories) referred to by the above
"inventory".
Commonly, a repository will served via HTTP, but it might as well just
be on a local filesystem.
[0] From Wikipedia <http://en.wikipedia.org/wiki/Dorodango>:
Dorodango is a Japanese art form in which earth and water are
molded to create a delicate shiny sphere, resembling a marble or
billiard ball.
I think the fact that the result of excercising Dorodango is
essentially a "polished mudball", makes this quite suitable a name
for a Package manager ;-)
Start the flames!
Cheers, Rotty
--
Andreas Rottmann -- <http://rotty.yi.org/>