guile-user
[Top][All Lists]
Advanced

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

Re: Where to install files?


From: Neil Jerram
Subject: Re: Where to install files?
Date: Tue, 11 Oct 2005 19:42:55 +0100
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

Greg Troxel <address@hidden> writes:

> I concur with most of your comments, but would like to make a
> metapoint: various OS/distributions/packaging systems have rules about
> what goes where, and guile should be such that it can be made to
> behave 'right' for these varying definitions of right.  I think this
> is implicit in your comments, but wanted to raise it explicitly.

Yes, thanks.  This is exactly what was in my mind too, but I didn't
make that clear.

Basically, when I'm using a distribution (Debian in my case), I like
to do things as much as possible in the way that that distribution
designed.  And I would hope that distributions are broad-minded (or
control-freak!) enough to have a policy on where
non-distribution-managed stuff should go.

> All that said, most packaging systems (pkgsrc, FreeBSD ports, typical
> Linux) put all programs under the same prefix, so using "guile's
> prefix" vs "our prefix" amounts to the same thing.  So it's only
> non-distribution-managed that's an issue.

Yes, exactly.  And the non-distribution-managed part is foremost in my
mind right now, because the load-path issue just came up with someone
installing my guile-debugging package, which is so far only available
as a tarball.

> My own view is that a package configured with --prefix=/usr/foo should
> install files only under /usr/foo.  This leads me with guile to want
> to extend load-path to include guile directories in other prefixes.

On this point I think I disagree with you.  I think there is value in
forcing all packages to be loaded - or at least bootstrapped - from a
known load-path that is defined by the Guile installation.

Note that this doesn't _force_ all Scheme files to go under one of the
load-path locations.  A big application like Gnucash could put a
bootstrap file like this in one of the standard locations ...

(define-module (gnucash))

(set! %load-path (cons "/opt/gnucash" %load-path))

(use-modules (gnucash account)
             (gnucash ui)
             ...)

... and then all its other Scheme files under /opt/gnucash.

IMO this is good because everything is explicit and there is a nice
trail for the investigative free software developer to follow when
they want to understand how stuff works.

>   (5) location of the system init file (e.g. /etc/guile/1.6/init.scm,
>       default=init.scm)
>
> Using --sysconfdir to specify this is/would be nice, and would make it
> easy to hook in a new prefix.

I'm sure you're right, but what is it that defines sysconfdir, and
where can I read about how it behaves?

>   Guile's guile.m4 currently provides GUILE_SITE_DIR, but that feels
>   wrong to me both because it doesn't handle the (2)/(3) distinction
>   above, and because of the /site ending - I think of site as being for
>   code put there by the local sysadmin, not for code from packages at
>   all.
>
> I agree, but really we need three levels:
>   pkgsrc [wrong word, but distribution-managed]
>   site   [managed for a group of machines]
>   local  [just this machine]

Are you sure you're not a plant in the audience?  Your levels idea
connects perfectly with a generalization of the scheme I described
yesterday, which occurred to me after posting:

- At Guile configuration time, we allow the builder to specify an
  arbitrary set of load path directories, each with a tag and a
  description, something (semantically speaking) like this:

  '(("/usr/share/guile/1.6"
     "1.6"
     "Install location for Guile 1.6's own Scheme files")

    ("/usr/share/guile/site"
     "site"
     "Install location for site-specific Scheme files")

    ("/opt/gnome/guile"
     "gnome"
     "Install location for GNOME-related Scheme files")

    ("/usr/local/share/guile"
     "local"
     "Version-independent non-distribution-managed Scheme files")

    ("/usr/local/share/guile/1.6"
     "local-1.6"
     "1.6-dependent non-distribution-managed Scheme files"))

- Guile would always then initialize its %load-path to the union of
  all these locations.

- guile.m4 would provide a --with-guile-scheme-dir=TAG option to
  ./configure, which would set GUILE_SCHEME_DIR to the location for
  TAG, and a macro

    GUILE_SCHEME(default-tag)

  which a package would put in its configure.in, with default-tag
  specifying the tag to use if --with-guile-scheme-dir is not
  specified.

  --with-guile-scheme-dir could also specify a directory explicitly.

Actually it may not be necessary to specify the location list above at
Guile configuration time; the list could perhaps go into init.scm, or
another init file (in sysconfdir) which is always read, even if Guile
is given a -no-init-file option.

> With respect to /usr/local, I believe that guile should by default
> only look in its own prefix.  Whether /usr/local should be searched
> e.g by programs in /usr is a distribution-specific decision.  It may
> be worthwhile to have a configure argument to add prefixes whose guile
> directories should be searched, so that
>
>   ./configure --prefix=/usr/pkg --searchprefix=/usr/bar 
> --searchprefix=/usr/baz
>
> would result in a guile installed in /usr/pkg that not only looks in
> /usr/pkg/share/guile/1.6 but also /usr/bar/share/guile/1.6.

Yes; I think this is equivalent to what I've just described, though.

> It might also be nice to have a run-time method to 
>
>   guile-configer --addsearchprefix=/usr/bar
>
> so that someone building another package to /usr/bar can invoke this
> on the system guile to hook in the new path.

In my view the behaviour that this allows is sufficiently covered by
the combination of

- being able to edit init.scm (or other init file, per comment above)

- the bootstrapping approach described above.

So I don't think we need this as well, at least not in the core
mechanism.  (A distribution or sysadmin could choose to implement this
for their distribution/systems by organizing their init.scm
appropriately.)

Regards,
     Neil





reply via email to

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