@node LD Version Scripts
@section LD Version Scripts

The @code{lib-symbol-versions} module can be used to add shared
library versioning support.  Currently, only GNU LD and the Solaris
linker supports this.

Version scripts provides information that can be used by GNU/Linux
distribution packaging tools.  For example, Debian has a tool
@code{dpkg-shlibdeps} that can determine the minimal required version
of each dependency (by looking at the symbol list) and stuff the
information into the Debian specific packaging files.

For more information and other uses of version scripts, see Ulrich
Drepper's paper @url{https://www.akkadia.org/drepper/dsohowto.pdf}

You use the module by importing it to your library, and then add the
following lines to the @code{Makefile.am} that builds the library:

@smallexample
if HAVE_LD_VERSION_SCRIPT
libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map
endif
@end smallexample

The version script file format is documented in the GNU LD manual, but
a small example would be:

@smallexample
LIBFOO_1.0 @{
  global:
    libfoo_init; libfoo_doit; libfoo_done;

  local:
    *;
@};
@end smallexample

If you target platforms that do not support linker scripts (i.e., all
platforms that doesn't use GNU LD) you may want to consider a more
portable but less powerful alternative: libtool
@code{-export-symbols}.  It will hide internal symbols from your
library, but will not add ELF versioning symbols.  Your usage would
then be something like:

@smallexample
if HAVE_LD_VERSION_SCRIPT
libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map
else
libfoo_la_LDFLAGS += -export-symbols $(srcdir)/libfoo.sym
endif
@end smallexample

See the Libtool manual for the file syntax, but a small example would
be:

@smallexample
libfoo_init
libfoo_doit
libfoo_done
@end smallexample

To avoid the need for a @code{*.sym} file if your symbols are easily
expressed using a regular expression, you may use
@code{-export-symbols-regex}:

@smallexample
if HAVE_LD_VERSION_SCRIPT
libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map
else
libfoo_la_LDFLAGS += -export-symbols-regex '^libfoo_.*'
endif
@end smallexample

For more discussions about symbol visibility, rather than shared
library versioning, see the @code{visibility} module
(@pxref{Exported Symbols of Shared Libraries}).
