samba_version.py: avoid inefficient string concatenations
[samba.git] / third_party / wscript
1 #!/usr/bin/env python
2
3 import os
4 import sys
5 import samba_git
6 from waflib import Options, Errors
7
8 # work out what python external libraries we need to install
9 external_pkgs = {
10     "iso8601": "pyiso8601/iso8601",
11     }
12
13
14 def find_third_party_module(conf, module, package):
15     conf.COMPOUND_START("Checking for third party Python module %s" % module)
16     try:
17         __import__(module)
18     except ImportError:
19         pass
20     else:
21         # Installed on the system
22         conf.COMPOUND_END("system")
23
24     old_path = sys.path
25     try:
26         sys.path.append(os.path.join(conf.path.abspath(), os.path.dirname(package)))
27         try:
28             __import__(module)
29         except ImportError:
30             if samba_git.has_submodules(conf.srcnode.abspath()):
31                 raise Errors.WafError("""\
32 Unable to find Python module '%s'. Please install the system package or check \
33 out the relevant submodule by running 'git submodule update --init'.
34 """ % module)
35             else:
36                 raise Errors.WafError("""\
37 Unable to find Python module '%s'. Please install the system package or place a copy in
38 %s.
39 """ % (module, package))
40         else:
41             conf.COMPOUND_END("bundled")
42     finally:
43         sys.path = old_path
44
45
46 def configure(conf):
47     for module, package in external_pkgs.items():
48         find_third_party_module(conf, module, package)
49     conf.RECURSE('cmocka')
50     conf.RECURSE('popt')
51     conf.RECURSE('aesni-intel')
52     if conf.CONFIG_GET('ENABLE_SELFTEST'):
53         conf.RECURSE('socket_wrapper')
54         conf.RECURSE('nss_wrapper')
55         conf.RECURSE('resolv_wrapper')
56         conf.RECURSE('uid_wrapper')
57         if Options.options.with_pam:
58             conf.RECURSE('pam_wrapper')
59
60
61 def build(bld):
62     if not bld.env.disable_python:
63         list = []
64
65         for module, package in external_pkgs.items():
66             try:
67                 __import__(module)
68             except ImportError:
69                 list.append(package)
70
71         for e in list:
72             bld.INSTALL_WILDCARD('${PYTHONARCHDIR}/samba/third_party', e + '/**/*', flat=False,
73                                  exclude='*.pyc', trim_path=os.path.dirname(e))
74
75         bld.SAMBA_GENERATOR('third_party_init_py',
76                             rule='touch ${TGT}',
77                             target='empty_file')
78
79         bld.INSTALL_FILES('${PYTHONARCHDIR}/samba/third_party', 'empty_file', destname='__init__.py')
80
81     bld.RECURSE('cmocka')
82     bld.RECURSE('popt')
83     bld.RECURSE('aesni-intel')
84     if bld.CONFIG_GET('SOCKET_WRAPPER'):
85         bld.RECURSE('socket_wrapper')
86     if bld.CONFIG_GET('NSS_WRAPPER'):
87         bld.RECURSE('nss_wrapper')
88     if bld.CONFIG_GET('RESOLV_WRAPPER'):
89         bld.RECURSE('resolv_wrapper')
90     if bld.CONFIG_GET('UID_WRAPPER'):
91         bld.RECURSE('uid_wrapper')
92     if bld.CONFIG_GET('PAM_WRAPPER'):
93         bld.RECURSE('pam_wrapper')