mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 04:10:18 +02:00
96 lines
4.6 KiB
Text
96 lines
4.6 KiB
Text
-*-text-*-
|
|
Guile Packaging Guide
|
|
Copyright (C) 2002,2004 Free Software Foundation, Inc.
|
|
|
|
Permission is granted to anyone to make or distribute verbatim copies
|
|
of this document as received, in any medium, provided that the
|
|
copyright notice and permission notice are preserved,
|
|
and that the distributor grants the recipient permission
|
|
for further redistribution as permitted by this notice.
|
|
|
|
Permission is granted to distribute modified versions
|
|
of this document, or of portions of it,
|
|
under the above conditions, provided also that they
|
|
carry prominent notices stating who last changed them,
|
|
and that any new or changed statements about the activities
|
|
of the Free Software Foundation are approved by the Foundation.
|
|
|
|
|
|
This guide will eventually include comprehensive recommendations for
|
|
packaging Guile. Since the guide is still being developed, if you're
|
|
planning to package guile for a distribution, say via .debs, .rpms,
|
|
etc., please ask questions on the Guile development list at
|
|
guile-devel@gnu.org. Packaging Guile in a way that makes future
|
|
system upgrades go smoothly and allows multiple major versions of
|
|
Guile to coexist peacefully can be tricky. Some initial care in this
|
|
regard can save a lot of work later on.
|
|
|
|
Below is an initial set of issues that are important to consider, and
|
|
again, you're always welcome to consult guile-devel. We should be
|
|
able to help with any issues that haven't made it here yet.
|
|
|
|
Libraries:
|
|
----------
|
|
|
|
Under most packaging systems, it can be very important to package
|
|
each shared library in a separate package. However, Guile follows
|
|
some conventions that make it's requirements somewhat different. In
|
|
order to explain the situaion, we'll first give a brief explanation
|
|
of the general issue, followed by a description of how Guile
|
|
differs.
|
|
|
|
For most projects providing shared libraries, it can be important to
|
|
place each library in a separate package and to put the the
|
|
library's major version number in the name of the package. For
|
|
example, rather than libguile.deb or libguile.rpm, you might have
|
|
libguile9.deb or libguile9.rpm. This makes it possible for you or
|
|
someone else to provide a libguile10 package later that can
|
|
peacefully coexist with libguile9. This means that applications
|
|
that were compiled against libguile9 can continue to function even
|
|
when some new version of Guile providing libguile10 is installed.
|
|
|
|
If you put more than one library in a package, say libfoo.so.10 and
|
|
libbar.so.10, and then in the next release, the upstream developers
|
|
increment libfoo to libfoo.so.11, but leave libbar alone, then you
|
|
have a problem. Your next library package will conflict with the
|
|
previous one because both will contain libbar.so.10 (presuming that
|
|
your packaging system considers duplicate files an error). This
|
|
means that the old and new library packages cannot be installed
|
|
simultaneously, and of course, if the new library package is
|
|
installed, and the old one is removed, any software that was linked
|
|
against libbar.so.10 will now be broken until it is recompiled. On
|
|
the other hand, if libfoo and libbar had been in separate packages,
|
|
there would have been no problem.
|
|
|
|
However, Guile is somewhat unusual because it promises to increment
|
|
all of the major versions of all of its shared libraries with the
|
|
start of every new stable series (i.e. at release 1.6.0, 1.8.0,
|
|
etc.) and Guile also promises that there will be no backward
|
|
incompatibilities for libraries released during a stable series
|
|
(i.e. when going from 1.6.X to 1.6.Y). This means that unlike many
|
|
other projects, it is actually safe to place all of Guile's shared
|
|
libraries in one package. For example, Debian places all of the
|
|
shared libraries in a guile-1.6-libs package.
|
|
|
|
Executables:
|
|
------------
|
|
|
|
It is suggested that the executables be versioned somehow so that
|
|
more than one version of guile can be installed at the same time.
|
|
This is something that we may eventually address more fully
|
|
upstream, but for now, you may want to name the executables
|
|
according to the version and then provide some way for symlinks to
|
|
be installed from /usr/bin/guile, etc. that point to the actual
|
|
executables. i.e.:
|
|
|
|
/usr/bin/guile -> /usr/bin/guile-1.6
|
|
etc.
|
|
|
|
Debian, for example would handle these symlinks via the
|
|
update-alternatives mechanism so that the local admin would be able
|
|
to control which version of Guile was the default.
|
|
|
|
Of course for this to be a really solid approach, we should be
|
|
naming things this way upstream and should either use the versioned
|
|
names in scripts, i.e. #!/usr/bin/guile-1.6, or have some other way
|
|
to make sure the script gets the version of guile it needs.
|