On Wed, 17 Sep 2003 12:18:59 -0700, "Steven E. Harris" <seharris@...> wrote:
> Edi Weitz <edi@...> writes:
> > Make sure all your ".system" files are in places where MK:DEFSYSTEM
> > can find them - see the variable MK:*CENTRAL-REGISTRY*.
> I've noticed that my ".system" files are all over the place, so
> MK:*CENTRAL-REGISTRY* has to grow in order to find each of
> them. Three observations make me think I'm doing something
> wrong. First, the name "central registry" suggests that maybe
> there's supposed to be one place where all these ".system" files
> live, not many places. Next, that mk:oos does not accept a path as
> an argument and only looks in MK:*CENTRAL-REGISTRY* forces one to
> keep adding entries to the registry. Finally, the source-pathname
> directive would be useless if the ".system" file is always in the
> same directory as the source it describes, for the path would then
> be obvious.
> Does this mean that one usually plucks the ".system" file out of a
> source bundle and puts in some special place (noted by
> MK:*CENTRAL-REGISTRY*) for convenient loading? If not, why must one
> "register" a path to the file, then give just the file basename to
> mk:oos, rather than just letting mk:oos accept the full path?
The usual way seems to be that the file in your central registry is a
symbolic link to your "real" system definition. This has the effect
that if you update your source directory the central registry will be
updated as well.
A technique you'll sometimes see is
(make-pathname :name nil :type nil :version nil
:defaults (parse-namestring *load-truename*)))
This'll help you if you don't want to hard-code the source-pathname
into your system definition and most (if not all) implementations[*]
will do what you expect with respect to the symbolic link (although
there's no guarantee for that in the ANSI spec) - at least on
[*] For AllegroCL you'll need to have the latest patches loaded.