[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: The load path

From: Greg Troxel
Subject: Re: The load path
Date: 14 Nov 2004 09:05:37 -0500
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3

Neil Jerram <address@hidden> writes:

> - it seems to me there isn't a strong need for extra prefixes: the
> point about .../1.6 versus .../site is to provide a distinction
> between code installed by the Guile install itself, and code installed
> by third parties; so $additional_prefix/share/guile/1.6 would usually
> be pointless and unused

The situation tha motivates this comment is e.g. when one installs
guile with --prefix=/usr/pkg (perhaps as part of pkgsrc, so it's semi
part of the OS), and then installs some guile module "foo bar" as
--prefix=/usr/y0 (not choosing /usr/pkg because every file in /usr/pkg
is supposed to be registered as part of the pkg db).  Then, one wants
to be able to (use-modules (foo bar)) in guile without fuss.  the foo
bar module source is nominally expecting to install in the same prefix
as guile, so it might have installed things in either
$prefix/share/guile or $prefix/share/guile/site.  (If it's not ok to
install in the former, a) please point me to the docs that say this
and b) explain why it's in the load path :-)

So, in the general case, to suppport packages in /usr/y0, one needs to
add /usr/y0/share/guile and /usr/y0/share/guile/site to %load-path -
the "standard" locations within the load path.
/usr/y0/share/guile/1.6 would be for _parts of guile_, and I agree
that this makes no sense for alternate prefixes.

I view 'site' as being a directory that can be shared among a group of
admin'd machines, but really it's like site-lisp in emacs and thus
local.  I put things in /usr/pkg/share/guile (no site) when they are
packaged rather than local.

> - in the case where one explicitly wants to include the non-site
> directory of another Guile installation (dangerous though this
> sounds!), one can do so by listing it as an "actual directory"; also
> note that if one is doing such strange things, the $effective_version
> of the other Guile install might be different from the one being
> configured, so the prefix approach wouldn't help anyway.

Sure, and I agree that this is odd.

> >It would also be nice to be able to include $prefix/lib/guile/site, so
> >that packages intended for guile ttn-1.4 work without needing a
> >symlink into share.

> Out of interest, can you expand on this? What kind of file is
> installed there, and is that the only thing needed to make ttn-guile
> packages work?

Sorry, I was too brief and used the wrong word.

ttn's guile supports binary modules (which I think are a cool thing,
despite also seeing the merits of the arguments that one should use a
scheme shim to load them and export symbols).  These are deprecated in
guile 1.6, but I really hope they don't go away, because it would make
guile-pg (PostgreSQL interface with automatic type conversion - very
spiffy) harder to use under the upcoming 1.8, and I don't see the harm
in leaving them as a deprecated feature.  Because these modules are
shlibs, rather than scheme, they are arch-dependent and can't go in
$prefix/share, and in ttn-guile they belong in LIBSITE_DIR, which is
normally $prefix/lib/guile/site:

> l -R /usr/pkg/lib/guile/site/
total 1
drwxr-xr-x  2 root  wheel  512 Nov 13 10:44 database

total 144
lrwxr-xr-x  1 root  wheel     11 Nov 13 10:43 ->
-r--r--r--  1 root  wheel   2806 Nov 13 10:43 postgres-col-defs.scm
-r--r--r--  1 root  wheel   9882 Nov 13 10:43 postgres-meta.scm
-r--r--r--  1 root  wheel   3644 Nov 13 10:43 postgres-resx.scm
-r--r--r--  1 root  wheel  24073 Nov 13 10:43 postgres-table.scm
-r--r--r--  1 root  wheel  11345 Nov 13 10:43 postgres-types.scm
-rw-r--r--  1 root  wheel  43368 Nov 13 10:43 postgres.a
-rwxr-xr-x  1 root  wheel    898 Nov 13 10:43
lrwxr-xr-x  1 root  wheel     17 Nov 13 10:43 ->
lrwxr-xr-x  1 root  wheel     17 Nov 13 10:43 ->
-rwxr-xr-x  1 root  wheel  47248 Nov 13 10:43

This is in ttn-guile's %load-path, but not in 1.6.  So, I symlinked
/usr/pkg/lib/guile/site/database into /usr/pkg/share/guile/site in the
pkgsrc entry for guile-pg:

> l /usr/pkg/share/guile/site/database
lrwxr-xr-x  1 root  wheel  32 Nov 13 10:43 /usr/pkg/share/guile/site/database 
-> ../../../lib/guile/site/database

This is a bit hackish, but was simpler and more self-contained than
adding a patch to guile's pkgsrc entry or trying to make guile-pg
install things someplace else.  (In general, pkgsrc entries try to
munge upstream software as little as possible, or at least that's my
philosophy for it.)

        Greg Troxel <address@hidden>

reply via email to

[Prev in Thread] Current Thread [Next in Thread]