summaryrefslogtreecommitdiff
path: root/third_party/wscript
blob: 3185f90b7968e49a7ef36d390464ece415e4dae3 (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env python

import os
import sys
import samba_git
from waflib import Options, Errors

# work out what python external libraries we need to install
external_pkgs = {
    "iso8601": "pyiso8601/iso8601",
    }


def find_third_party_module(conf, module, package):
    conf.COMPOUND_START("Checking for third party Python module %s" % module)
    try:
        __import__(module)
    except ImportError:
        pass
    else:
        # Installed on the system
        conf.COMPOUND_END("system")

    old_path = sys.path
    try:
        sys.path.append(os.path.join(conf.path.abspath(), os.path.dirname(package)))
        try:
            __import__(module)
        except ImportError:
            if samba_git.has_submodules(conf.srcnode.abspath()):
                raise Errors.WafError("""\
Unable to find Python module '%s'. Please install the system package or check \
out the relevant submodule by running 'git submodule update --init'.
""" % module)
            else:
                raise Errors.WafError("""\
Unable to find Python module '%s'. Please install the system package or place a copy in
%s.
""" % (module, package))
        else:
            conf.COMPOUND_END("bundled")
    finally:
        sys.path = old_path


def configure(conf):
    for module, package in external_pkgs.items():
        find_third_party_module(conf, module, package)
    conf.RECURSE('cmocka')
    conf.RECURSE('popt')
    conf.RECURSE('aesni-intel')
    if conf.CONFIG_GET('ENABLE_SELFTEST'):
        conf.RECURSE('socket_wrapper')
        conf.RECURSE('nss_wrapper')
        conf.RECURSE('resolv_wrapper')
        conf.RECURSE('uid_wrapper')
        if Options.options.with_pam:
            conf.RECURSE('pam_wrapper')


def build(bld):
    if not bld.env.disable_python:
        list = []

        for module, package in external_pkgs.items():
            try:
                __import__(module)
            except ImportError:
                list.append(package)

        for e in list:
            bld.INSTALL_WILDCARD('${PYTHONARCHDIR}/samba/third_party', e + '/**/*', flat=False,
                                 exclude='*.pyc', trim_path=os.path.dirname(e))

        bld.SAMBA_GENERATOR('third_party_init_py',
                            rule='touch ${TGT}',
                            target='empty_file')

        bld.INSTALL_FILES('${PYTHONARCHDIR}/samba/third_party', 'empty_file', destname='__init__.py')

    bld.RECURSE('cmocka')
    bld.RECURSE('popt')
    bld.RECURSE('aesni-intel')
    if bld.CONFIG_GET('SOCKET_WRAPPER'):
        bld.RECURSE('socket_wrapper')
    if bld.CONFIG_GET('NSS_WRAPPER'):
        bld.RECURSE('nss_wrapper')
    if bld.CONFIG_GET('RESOLV_WRAPPER'):
        bld.RECURSE('resolv_wrapper')
    if bld.CONFIG_GET('UID_WRAPPER'):
        bld.RECURSE('uid_wrapper')
    if bld.CONFIG_GET('PAM_WRAPPER'):
        bld.RECURSE('pam_wrapper')