doc: Explain our build systems for Samba 4.0
[samba.git] / BUILD_SYSTEMS.txt
1 BUILDING SAMBA 4.0
2 (which build system to use and why)
3 ===================================
4
5 The waf build
6 -------------
7
8 Samba 4.0 ships with a new build system, based on waf.  A background to
9 this build system can be found at https://wiki.samba.org/index.php/Waf
10
11 This is the build system that is used when you run ./configure && make
12 in the top level of a Samba 4.0 release tree.
13
14 For the vast majority of our users, this is the build system you should
15 use.  It supports parallel and incremental builds, and builds the whole
16 Samba suite, the file server, the print server, the NT4 domain
17 controller, winbind, the AD Domain Controller, the client libraries and
18 the python libraries.  
19
20 A key feature for many of our distributors and OEMs is that despite the
21 range of additional features, the resulting binaries and libraries are
22 substantially smaller, because we use shared libraries extensively. 
23
24 For distributions that have a requirement to use the system-supplied
25 Kerberos library, we support building against a Heimdal or system MIT
26 Kerberos library, provided the version is recent enough (otherwise we
27 will use our internal version of Heimdal).  Please note that builds
28 with MIT krb5 support will not have AD DC features.
29
30 By the time of the first release candidate, we will finish renaming
31 the binaries that we ship so that where we provide a tool under a name
32 that was used in Samba 3.x, it continues to behave in the same way it
33 always has.  This will ensure that our change in build system does not
34 impact on our user's ability to use Samba as they always have.
35
36 For developers, this build system backs a comprehensive 'make test',
37 which provides code coverage of around 48% of our code by line:
38 https://build.samba.org/lcov/data/coverage/samba_4_0_test/
39
40 This build system also implements important features such as ABI
41 checking (which protects you as users from accidental changes to our
42 published libraries), symbol versions and dependency checked incremental
43 rebuilds after header-file changes. 
44
45 The waf build also assists developers by providing fully-linked binaries
46 that run from bin/ without needing to set LD_LIBRARY_PATH. 
47
48 For users who do not have python installed on their systems, we provide
49 a install_with_python.sh script, which will install a local copy of
50 python sufficient to run the build system, without impacting on the rest
51 of the system.  
52
53 Within this requirement, we expect that this build will run on all our
54 supported platforms, and will actively deal with any portability issues
55 that users can bring to our attention. 
56
57 For all these reasons, we highly recommend this new build system to all
58 our users, for whatever purpose you want to put Samba to.
59
60 The autoconf build
61 ------------------
62
63 For a small number of users, the requirement to have access to Python
64 2.4 and perl will be unacceptable, and for these users we continue to
65 provide the 'autoconf' build system used in Samba 3.x under the
66 source3/.  This will build fewer parts of Samba, but should not be seen
67 as 'the file server build' (typical file server deployments should use
68 the top level build), but as a measure provided with limited features
69 for systems and organisations unable to meet the requirements for the
70 new build system.
71
72 If you do need to use the autoconf build system, please let us know:
73 both why you cannot use the 'waf' build in the top level, and what
74 features of the source3 build that you require.  We need this
75 information to assess the continuing demand for this parallel
76 infrastructure, and to determine which features need to remain available
77 in both build systems.
78
79 Optional Libraries
80 ------------------
81
82 To assist users and distributors to build Samba with the full feature
83 set, by the first release candidate the build system will abort if our
84 dependent libraries and their header files are not found on the target
85 system.  This will mean for example, that xattr, acl and ldap headers
86 must be installed for the default build to complete.  The configure
87 system will check for these headers, and the error message will
88 indicate:
89  - the required header and library
90  - the option (such as --without-acl-support) that can be specified to
91    skip this requirement, and
92  - the feature (ACL support optional for file servers, mandatory for AD
93    Domain Controller) being skipped. 
94
95 This will assist users and in particular distributors in building fully
96 functional packages, while allowing those on systems truly without these
97 facilities to continue to build Samba after careful consideration.