summaryrefslogtreecommitdiff
path: root/doc/devel/libtool.dox
blob: d5cb374708de1bc538de49bc1d71c58084cd88fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
@page libtool Build with libtool

@section libtoolBuild

4.4.0 introduces the dynamic library build option. It uses Gnu autotools
and in particular libtool but is fully backward compatible.

The Gnu autoreconf which is a driver for other autotools: it runs
autoconf (building configure from configure.ac), autoheader (creating
the AC_CONFIG_HEADERS file, includes/config.h for ISC DHC), aclocal
(building aclocal.m4 script), automake (creating .in files from .am files),
libtoolize (adding libtool support when enabled in configure.ac) and
autopoint (for gettext which is not used by ISC DHCP).

Static libraries are built using the same setup as in previous versions.
This enforces strict backward compatibility and is the default option
so users who do not want dynamic libraries have nothing different to do.
(In other words changes for the support of dynamic libraries is invisible
for legacy users).

Dynamic libraries are handled by libtool, and therefore require a few
extra steps before invoking configure. For users not reading the
documentation but still wanting dynamic libraries "--enable-libtool"
is accepted even without these extra steps (cp configure.ac+lt configure.ac;
autoreconf -i) in a recovery procedure (invoking config+lt script)
but not in a very robust way. Note libtool allows you to build static
libraries: there is nothing to make this impossible but as the
recommend way to build static libraries does not use libtool it is
neither recommended nor supported.

The autoreconf input file is configure.ac. There are four versions of this:

 - configure.ac-base which has code for legacy and libtool options

 - configure.ac-lt which has only the legacy option with recovery
  when --with-libtool is given. Note it is not included in the
  distribution as its configure.ac copy is

 - configure.ac+lt which has the libool code and defaults to --with-libtool

 - configure.ac which is either configure.ac-lt in the distribution and
  configure.ac+lt when copied by the user at the first step for dynamic
  libraries or by the config+lt recovery script

Three scripts manage legacy and libtool options:

 - util/lt.pl which extracts configure.ac-lt and configure.ac+lt from
  configure.ac-base

 - util/regen.sh which invokes util/lt.pl and copies configure.ac-lt
  to configure.ac and run autoconf. The correct way for developers to
  update the configure system is to update configure.ac-base and
  to call util/regen.sh

 - config+lt which is the recovery script. As it can be called in place
  of configure it must be executable (i.e. -rwxr-xr-x rights) in
  the distribution.
  To perform the reverse recovery, i.e. from libtool to legacy options,
  the simplest (and most reliable) way is to simply clean the build
  directory and to restart from the initial step, i.e., to extract
  the distribution.

Automake uses different names for library related variables if libtool
is used or not for some Makefile's the procedure is a bit complex.

Usually the source Makefile is Makefile.am. Automake is run before
the distribution build to generate Makefile.in and at configuration
time the config.status script is invoked at the end of ./configure
on AC_CONFIG_FILES to substitute @xxx@ variables into Makefile.

ISC DHCP uses an extra step with a postconfig phase at the end
of ./configure which invokes automake and reruns config.status
giving a chain with Makefile.am.in, Makefile.am, Makefile.in and
Makefile

*/