[racket-dev] Racket should install libracket3m-X.Y.Z.so as libracket3m.so.X.Y.Z

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Sep 16 12:24:55 EDT 2013

At Mon, 16 Sep 2013 18:10:34 +0200, Juan Francisco Cantero Hurtado wrote:
> On 09/11/13 10:42, Juan Francisco Cantero Hurtado wrote:
> > The standard on modern unix systems is to name the shared libraries with
> > this pattern: "lib" + name + ".so." + major version + "." + minor
> > version. Racket uses libracket-5.3.6.so. It isn't correct.
> >
> > -rwxr-xr-x  1 root  wheel   9.0M Aug 17 04:28
> > /usr/local/lib/libracket3m-5.3.6.so
> > -rw-r--r--  1 root  wheel  14.3M Aug 17 04:28 /usr/local/lib/libracket3m.a
> > -rw-r--r--  1 root  wheel   852B Aug 17 04:28 /usr/local/lib/libracket3m.la
> > lrwxr-xr-x  1 root  wheel    20B Aug 17 05:51
> > /usr/local/lib/libracket3m.so -> libracket3m-5.3.6.so
> >
> > Look some examples. libpng on OpenBSD:
> >
> > lrwxr-xr-x  1 root  wheel    10B Sep 10 19:30 /usr/local/lib/libpng.a ->
> > libpng16.a
> > -rw-r--r--  1 root  bin     720B Aug 17 02:22 /usr/local/lib/libpng.la
> > lrwxr-xr-x  1 root  wheel    16B Sep 10 19:30
> > /usr/local/lib/libpng.so.17.0 -> libpng16.so.17.0
> > -rw-r--r--  1 root  bin     1.2M Aug 17 02:22 /usr/local/lib/libpng16.a
> > -rw-r--r--  1 root  bin     730B Aug 17 02:22 /usr/local/lib/libpng16.la
> > -rw-r--r--  1 root  bin     703K Aug 17 02:22
> > /usr/local/lib/libpng16.so.17.0
> >
> > libarchive on Gentoo:
> >
> > lrwxrwxrwx 1 root root     20 May 10 09:12 /usr/lib/libarchive.so ->
> > libarchive.so.13.1.2
> > lrwxrwxrwx 1 root root     20 May 10 09:12 /usr/lib/libarchive.so.13 ->
> > libarchive.so.13.1.2
> > -rwxr-xr-x 1 root root 723968 May 10 09:12 /usr/lib/libarchive.so.13.1.2
> >
> >
> > Also you should add some easy setting to change the suffix X.Y.Z of the
> > lib. Some projects use variables in configure or the main makefile. The
> > version of the libs is unrelated to the version of the software. On
> > OpenBSD we change the numbers, so we can control when the dependencies
> > require an update.
> >
> 
> Any comment about this?. Basically, I need to rename 
> libracket3m-5.3.6.so to libracket3m.so.0.0. I've searched where are the 
> version numbers in the makefiles and configure but I've not found it.

It's set via `configure`. See line 1408 in 

  racket/src/racket/configure.ac

which uses `-release ${plt_lib_version}`

We went with `-release` mode instead of version numbers, because we
didn't want to try to track of binary compatibility at the
shared-library level.

As you say, release versions don't necessarily have anything to do with
library versions, and it's almost certainly the case that libraries for
different v5.x releases cannot be substituted for each other (e.g., the
value of `scheme_char_string_type` is likely to shift). It would make
sense to simply introduce a new shared-library major version for every
release.

Overall, we haven't tried to provide shared-library versions mostly
because the libracket shared library doesn't seem all that useful. I'm
happy to accept patches to the `configure` script so that you can
configure the library name, though.


Posted on the dev mailing list.