mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
52efa79653
Samba is not compatible with new versions of ldb (except release versions) Other users would not notice the breakages, but Samba makes many more assuptions about the LDB internals than any other package. (Specifically, LDB 1.2 and 1.4 broke builds against released Samba versions) BUG: https://bugzilla.samba.org/show_bug.cgi?id=13519 Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
586 lines
24 KiB
Python
586 lines
24 KiB
Python
#!/usr/bin/env python
|
|
|
|
APPNAME = 'ldb'
|
|
VERSION = '1.4.0'
|
|
|
|
blddir = 'bin'
|
|
|
|
import sys, os
|
|
import Logs
|
|
|
|
# find the buildtools directory
|
|
srcdir = '.'
|
|
while not os.path.exists(srcdir+'/buildtools') and len(srcdir.split('/')) < 5:
|
|
srcdir = srcdir + '/..'
|
|
sys.path.insert(0, srcdir + '/buildtools/wafsamba')
|
|
|
|
import wafsamba, samba_dist, Utils, Options
|
|
|
|
samba_dist.DIST_DIRS('''lib/ldb:. lib/replace:lib/replace lib/talloc:lib/talloc
|
|
lib/tdb:lib/tdb lib/tdb:lib/tdb lib/tevent:lib/tevent
|
|
third_party/popt:third_party/popt
|
|
third_party/cmocka:third_party/cmocka
|
|
buildtools:buildtools third_party/waf:third_party/waf''')
|
|
|
|
samba_dist.DIST_FILES('''lib/util/binsearch.h:lib/util/binsearch.h''')
|
|
|
|
def set_options(opt):
|
|
opt.BUILTIN_DEFAULT('replace')
|
|
opt.PRIVATE_EXTENSION_DEFAULT('ldb', noextension='ldb')
|
|
opt.RECURSE('lib/tdb')
|
|
opt.RECURSE('lib/tevent')
|
|
opt.RECURSE('lib/replace')
|
|
opt.tool_options('python') # options for disabling pyc or pyo compilation
|
|
|
|
opt.add_option('--without-ldb-lmdb',
|
|
help='disable new LMDB backend for LDB',
|
|
action='store_true', dest='without_ldb_lmdb', default=False)
|
|
|
|
|
|
def configure(conf):
|
|
conf.RECURSE('lib/tdb')
|
|
conf.RECURSE('lib/tevent')
|
|
|
|
if conf.CHECK_FOR_THIRD_PARTY():
|
|
conf.RECURSE('third_party/popt')
|
|
conf.RECURSE('third_party/cmocka')
|
|
else:
|
|
if not conf.CHECK_POPT():
|
|
raise Utils.WafError('popt development packages have not been found.\nIf third_party is installed, check that it is in the proper place.')
|
|
else:
|
|
conf.define('USING_SYSTEM_POPT', 1)
|
|
|
|
if not conf.CHECK_CMOCKA():
|
|
raise Utils.WafError('cmocka development package have not been found.\nIf third_party is installed, check that it is in the proper place.')
|
|
else:
|
|
conf.define('USING_SYSTEM_CMOCKA', 1)
|
|
|
|
conf.RECURSE('lib/replace')
|
|
conf.find_program('python', var='PYTHON')
|
|
conf.find_program('xsltproc', var='XSLTPROC')
|
|
conf.check_tool('python')
|
|
conf.check_python_version((2,4,2))
|
|
conf.SAMBA_CHECK_PYTHON_HEADERS(mandatory=not conf.env.disable_python)
|
|
|
|
# where does the default LIBDIR end up? in conf.env somewhere?
|
|
#
|
|
conf.CONFIG_PATH('LDB_MODULESDIR', conf.SUBST_ENV_VAR('MODULESDIR') + '/ldb')
|
|
|
|
conf.env.standalone_ldb = conf.IN_LAUNCH_DIR()
|
|
|
|
if not conf.env.standalone_ldb:
|
|
max_ldb_version = [int(x) for x in VERSION.split(".")]
|
|
max_ldb_version[2] = 999
|
|
max_ldb_version_dots = "%d.%d.%d" % tuple(max_ldb_version)
|
|
|
|
if conf.env.disable_python:
|
|
if conf.CHECK_BUNDLED_SYSTEM_PKG('ldb',
|
|
minversion=VERSION,
|
|
maxversion=max_ldb_version_dots,
|
|
onlyif='talloc tdb tevent',
|
|
implied_deps='replace talloc tdb tevent'):
|
|
conf.define('USING_SYSTEM_LDB', 1)
|
|
else:
|
|
using_system_pyldb_util = True
|
|
if not conf.CHECK_BUNDLED_SYSTEM_PKG('pyldb-util',
|
|
minversion=VERSION,
|
|
maxversion=max_ldb_version_dots,
|
|
onlyif='talloc tdb tevent',
|
|
implied_deps='replace talloc tdb tevent ldb'):
|
|
using_system_pyldb_util = False
|
|
|
|
# We need to get a pyldb-util for all the python versions
|
|
# we are building for
|
|
if conf.env['EXTRA_PYTHON']:
|
|
name = 'pyldb-util' + conf.all_envs['extrapython']['PYTHON_SO_ABI_FLAG']
|
|
if not conf.CHECK_BUNDLED_SYSTEM_PKG(name,
|
|
minversion=VERSION,
|
|
maxversion=max_ldb_version_dots,
|
|
onlyif='talloc tdb tevent',
|
|
implied_deps='replace talloc tdb tevent ldb'):
|
|
using_system_pyldb_util = False
|
|
|
|
if using_system_pyldb_util:
|
|
conf.define('USING_SYSTEM_PYLDB_UTIL', 1)
|
|
|
|
if conf.CHECK_BUNDLED_SYSTEM_PKG('ldb',
|
|
minversion=VERSION,
|
|
maxversion=max_ldb_version_dots,
|
|
onlyif='talloc tdb tevent pyldb-util',
|
|
implied_deps='replace talloc tdb tevent'):
|
|
conf.define('USING_SYSTEM_LDB', 1)
|
|
|
|
if not conf.CHECK_CODE('return !(sizeof(size_t) >= 8)',
|
|
"HAVE_64_BIT_SIZE_T_FOR_LMDB",
|
|
execute=True,
|
|
msg='Checking for a 64-bit host to '
|
|
'support lmdb'):
|
|
Logs.warn("--without-ldb-lmdb implied as this "
|
|
"host is not 64-bit")
|
|
|
|
if not conf.env.standalone_ldb and \
|
|
not Options.options.without_ad_dc and \
|
|
conf.CONFIG_GET('ENABLE_SELFTEST'):
|
|
Logs.warn("NOTE: Some AD DC parts of selftest will fail")
|
|
|
|
conf.env.REQUIRE_LMDB = False
|
|
else:
|
|
if conf.env.standalone_ldb:
|
|
if Options.options.without_ldb_lmdb:
|
|
conf.env.REQUIRE_LMDB = False
|
|
else:
|
|
conf.env.REQUIRE_LMDB = True
|
|
elif Options.options.without_ad_dc:
|
|
conf.env.REQUIRE_LMDB = False
|
|
else:
|
|
if Options.options.without_ldb_lmdb:
|
|
if not Options.options.without_ad_dc and \
|
|
conf.CONFIG_GET('ENABLE_SELFTEST'):
|
|
raise Utils.WafError('--without-ldb-lmdb conflicts '
|
|
'with --enable-selftest while '
|
|
'building the AD DC')
|
|
|
|
conf.env.REQUIRE_LMDB = False
|
|
else:
|
|
conf.env.REQUIRE_LMDB = True
|
|
|
|
|
|
if conf.CONFIG_SET('USING_SYSTEM_LDB'):
|
|
v = VERSION.split('.')
|
|
conf.DEFINE('EXPECTED_SYSTEM_LDB_VERSION_MAJOR', int(v[0]))
|
|
conf.DEFINE('EXPECTED_SYSTEM_LDB_VERSION_MINOR', int(v[1]))
|
|
conf.DEFINE('EXPECTED_SYSTEM_LDB_VERSION_RELEASE', int(v[2]))
|
|
|
|
if conf.env.standalone_ldb:
|
|
conf.CHECK_XSLTPROC_MANPAGES()
|
|
|
|
# we need this for the ldap backend
|
|
if conf.CHECK_FUNCS_IN('ber_flush ldap_open ldap_initialize', 'lber ldap', headers='lber.h ldap.h'):
|
|
conf.env.ENABLE_LDAP_BACKEND = True
|
|
|
|
# we don't want any libraries or modules to rely on runtime
|
|
# resolution of symbols
|
|
if not sys.platform.startswith("openbsd"):
|
|
conf.ADD_LDFLAGS('-Wl,-no-undefined', testflags=True)
|
|
|
|
# if lmdb support is enabled then we require lmdb
|
|
# is present, build the mdb back end and enable lmdb support in
|
|
# the tools.
|
|
if conf.env.REQUIRE_LMDB and \
|
|
not conf.CONFIG_SET('USING_SYSTEM_LDB'):
|
|
if not conf.CHECK_CFG(package='lmdb',
|
|
args='"lmdb >= 0.9.16" --cflags --libs',
|
|
msg='Checking for lmdb >= 0.9.16',
|
|
mandatory=False):
|
|
if not conf.CHECK_CODE('''
|
|
#if MDB_VERSION_MAJOR == 0 \
|
|
&& MDB_VERSION_MINOR <= 9 \
|
|
&& MDB_VERSION_PATCH < 16
|
|
#error LMDB too old
|
|
#endif
|
|
''',
|
|
'HAVE_GOOD_LMDB_VERSION',
|
|
headers='lmdb.h',
|
|
msg='Checking for lmdb >= 0.9.16 via header check'):
|
|
|
|
if conf.env.standalone_ldb:
|
|
raise Utils.WafError('ldb build (unless --without-ldb-lmdb) '
|
|
'requires '
|
|
'lmdb 0.9.16 or later')
|
|
elif not Options.options.without_ad_dc:
|
|
raise Utils.WafError('Samba AD DC and --enable-selftest '
|
|
'requires '
|
|
'lmdb 0.9.16 or later')
|
|
|
|
if conf.CHECK_FUNCS_IN('mdb_env_create', 'lmdb', headers='lmdb.h'):
|
|
conf.DEFINE('HAVE_LMDB', '1')
|
|
|
|
|
|
conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True)
|
|
|
|
conf.SAMBA_CONFIG_H()
|
|
|
|
conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
|
|
|
|
def build(bld):
|
|
bld.RECURSE('lib/tevent')
|
|
|
|
if bld.CHECK_FOR_THIRD_PARTY():
|
|
bld.RECURSE('third_party/popt')
|
|
bld.RECURSE('third_party/cmocka')
|
|
|
|
bld.RECURSE('lib/replace')
|
|
bld.RECURSE('lib/tdb')
|
|
|
|
if bld.env.standalone_ldb:
|
|
if not 'PACKAGE_VERSION' in bld.env:
|
|
bld.env.PACKAGE_VERSION = VERSION
|
|
bld.env.PKGCONFIGDIR = '${LIBDIR}/pkgconfig'
|
|
private_library = False
|
|
else:
|
|
private_library = True
|
|
# we're not currently linking against the ldap libs, but ldb.pc.in
|
|
# has @LDAP_LIBS@
|
|
bld.env.LDAP_LIBS = ''
|
|
|
|
LDB_MAP_SRC = bld.SUBDIR('ldb_map',
|
|
'ldb_map.c ldb_map_inbound.c ldb_map_outbound.c')
|
|
|
|
COMMON_SRC = bld.SUBDIR('common',
|
|
'''ldb_modules.c ldb_ldif.c ldb_parse.c ldb_msg.c ldb_utf8.c
|
|
ldb_debug.c ldb_dn.c ldb_match.c ldb_options.c ldb_pack.c
|
|
ldb_attributes.c attrib_handlers.c ldb_controls.c qsort.c''')
|
|
|
|
bld.SAMBA_MODULE('ldb_ldap', 'ldb_ldap/ldb_ldap.c',
|
|
init_function='ldb_ldap_init',
|
|
module_init_name='ldb_init_module',
|
|
deps='talloc lber ldap ldb',
|
|
enabled=bld.env.ENABLE_LDAP_BACKEND,
|
|
internal_module=False,
|
|
subsystem='ldb')
|
|
|
|
if bld.PYTHON_BUILD_IS_ENABLED():
|
|
if not bld.CONFIG_SET('USING_SYSTEM_PYLDB_UTIL'):
|
|
for env in bld.gen_python_environments(['PKGCONFIGDIR']):
|
|
|
|
name = bld.pyembed_libname('pyldb-util')
|
|
bld.SAMBA_LIBRARY(name,
|
|
deps='ldb',
|
|
source='pyldb_util.c',
|
|
public_headers=('' if private_library else 'pyldb.h'),
|
|
public_headers_install=not private_library,
|
|
vnum=VERSION,
|
|
private_library=private_library,
|
|
pc_files='pyldb-util.pc',
|
|
pyembed=True,
|
|
enabled=bld.PYTHON_BUILD_IS_ENABLED(),
|
|
abi_directory='ABI',
|
|
abi_match='pyldb_*')
|
|
|
|
if not bld.CONFIG_SET('USING_SYSTEM_LDB'):
|
|
bld.SAMBA_PYTHON('pyldb', 'pyldb.c',
|
|
deps='ldb ' + name,
|
|
realname='ldb.so',
|
|
cflags='-DPACKAGE_VERSION=\"%s\"' % VERSION)
|
|
|
|
# Do only install this file as part of the Samba build if we do not
|
|
# use the system libldb!
|
|
if not bld.CONFIG_SET('USING_SYSTEM_PYLDB_UTIL'):
|
|
for env in bld.gen_python_environments(['PKGCONFIGDIR']):
|
|
bld.SAMBA_SCRIPT('_ldb_text.py',
|
|
pattern='_ldb_text.py',
|
|
installdir='python')
|
|
|
|
bld.INSTALL_FILES('${PYTHONARCHDIR}', '_ldb_text.py')
|
|
|
|
if not bld.CONFIG_SET('USING_SYSTEM_LDB'):
|
|
if bld.is_install:
|
|
modules_dir = bld.EXPAND_VARIABLES('${LDB_MODULESDIR}')
|
|
else:
|
|
# when we run from the source directory, we want to use
|
|
# the current modules, not the installed ones
|
|
modules_dir = os.path.join(os.getcwd(), 'bin/modules/ldb')
|
|
|
|
abi_match = '!ldb_*module_ops !ldb_*backend_ops ldb_*'
|
|
|
|
ldb_headers = ('include/ldb.h include/ldb_errors.h '
|
|
'include/ldb_module.h include/ldb_handlers.h')
|
|
|
|
bld.SAMBA_LIBRARY('ldb',
|
|
COMMON_SRC + ' ' + LDB_MAP_SRC,
|
|
deps='tevent LIBLDB_MAIN replace',
|
|
includes='include',
|
|
public_headers=('' if private_library else ldb_headers),
|
|
public_headers_install=not private_library,
|
|
pc_files='ldb.pc',
|
|
vnum=VERSION,
|
|
private_library=private_library,
|
|
manpages='man/ldb.3',
|
|
abi_directory='ABI',
|
|
abi_match = abi_match)
|
|
|
|
# generate a include/ldb_version.h
|
|
def generate_ldb_version_h(t):
|
|
'''generate a vscript file for our public libraries'''
|
|
|
|
tgt = t.outputs[0].bldpath(t.env)
|
|
|
|
v = t.env.LDB_VERSION.split('.')
|
|
|
|
f = open(tgt, mode='w')
|
|
try:
|
|
f.write('#define LDB_VERSION "%s"\n' % t.env.LDB_VERSION)
|
|
f.write('#define LDB_VERSION_MAJOR %d\n' % int(v[0]))
|
|
f.write('#define LDB_VERSION_MINOR %d\n' % int(v[1]))
|
|
f.write('#define LDB_VERSION_RELEASE %d\n' % int(v[2]))
|
|
finally:
|
|
f.close()
|
|
return
|
|
t = bld.SAMBA_GENERATOR('ldb_version.h',
|
|
rule=generate_ldb_version_h,
|
|
dep_vars=['LDB_VERSION'],
|
|
target='include/ldb_version.h',
|
|
public_headers='include/ldb_version.h',
|
|
public_headers_install=not private_library)
|
|
t.env.LDB_VERSION = VERSION
|
|
|
|
|
|
bld.SAMBA_MODULE('ldb_paged_results',
|
|
'modules/paged_results.c',
|
|
init_function='ldb_paged_results_init',
|
|
module_init_name='ldb_init_module',
|
|
internal_module=False,
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_asq',
|
|
'modules/asq.c',
|
|
init_function='ldb_asq_init',
|
|
module_init_name='ldb_init_module',
|
|
internal_module=False,
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_server_sort',
|
|
'modules/sort.c',
|
|
init_function='ldb_server_sort_init',
|
|
internal_module=False,
|
|
module_init_name='ldb_init_module',
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_paged_searches',
|
|
'modules/paged_searches.c',
|
|
init_function='ldb_paged_searches_init',
|
|
internal_module=False,
|
|
module_init_name='ldb_init_module',
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_rdn_name',
|
|
'modules/rdn_name.c',
|
|
init_function='ldb_rdn_name_init',
|
|
internal_module=False,
|
|
module_init_name='ldb_init_module',
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_sample',
|
|
'tests/sample_module.c',
|
|
init_function='ldb_sample_init',
|
|
internal_module=False,
|
|
module_init_name='ldb_init_module',
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_skel',
|
|
'modules/skel.c',
|
|
init_function='ldb_skel_init',
|
|
internal_module=False,
|
|
module_init_name='ldb_init_module',
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_sqlite3',
|
|
'sqlite3/ldb_sqlite3.c',
|
|
init_function='ldb_sqlite3_init',
|
|
internal_module=False,
|
|
module_init_name='ldb_init_module',
|
|
enabled=False,
|
|
deps='ldb',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_MODULE('ldb_tdb',
|
|
bld.SUBDIR('ldb_tdb',
|
|
'''ldb_tdb_init.c'''),
|
|
init_function='ldb_tdb_init',
|
|
module_init_name='ldb_init_module',
|
|
internal_module=False,
|
|
deps='tdb ldb ldb_key_value',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_LIBRARY('ldb_key_value',
|
|
bld.SUBDIR('ldb_tdb',
|
|
'''ldb_tdb.c ldb_search.c ldb_index.c
|
|
ldb_cache.c ldb_tdb_wrap.c'''),
|
|
private_library=True,
|
|
deps='tdb ldb')
|
|
|
|
if bld.CONFIG_SET('HAVE_LMDB'):
|
|
bld.SAMBA_MODULE('ldb_mdb',
|
|
bld.SUBDIR('ldb_mdb',
|
|
'''ldb_mdb_init.c'''),
|
|
init_function='ldb_mdb_init',
|
|
module_init_name='ldb_init_module',
|
|
internal_module=False,
|
|
deps='ldb ldb_key_value ldb_mdb_int',
|
|
subsystem='ldb')
|
|
|
|
bld.SAMBA_LIBRARY('ldb_mdb_int',
|
|
bld.SUBDIR('ldb_mdb',
|
|
'''ldb_mdb.c '''),
|
|
private_library=True,
|
|
deps='ldb lmdb ldb_key_value')
|
|
lmdb_deps = ' ldb_mdb_int'
|
|
else:
|
|
lmdb_deps = ''
|
|
|
|
|
|
bld.SAMBA_MODULE('ldb_ldb',
|
|
bld.SUBDIR('ldb_ldb',
|
|
'''ldb_ldb.c'''),
|
|
init_function='ldb_ldb_init',
|
|
module_init_name='ldb_init_module',
|
|
internal_module=False,
|
|
deps='ldb ldb_key_value' + lmdb_deps,
|
|
subsystem='ldb')
|
|
|
|
# have a separate subsystem for common/ldb.c, so it can rebuild
|
|
# for install with a different -DLDB_MODULESDIR=
|
|
bld.SAMBA_SUBSYSTEM('LIBLDB_MAIN',
|
|
'common/ldb.c',
|
|
deps='tevent tdb',
|
|
includes='include',
|
|
cflags=['-DLDB_MODULESDIR=\"%s\"' % modules_dir])
|
|
|
|
LDB_TOOLS='ldbadd ldbsearch ldbdel ldbmodify ldbedit ldbrename'
|
|
for t in LDB_TOOLS.split():
|
|
bld.SAMBA_BINARY(t, 'tools/%s.c' % t, deps='ldb-cmdline ldb',
|
|
manpages='man/%s.1' % t)
|
|
|
|
# ldbtest doesn't get installed
|
|
bld.SAMBA_BINARY('ldbtest', 'tools/ldbtest.c', deps='ldb-cmdline ldb',
|
|
install=False)
|
|
|
|
if bld.CONFIG_SET('HAVE_LMDB'):
|
|
lmdb_deps = ' lmdb'
|
|
else:
|
|
lmdb_deps = ''
|
|
# ldbdump doesn't get installed
|
|
bld.SAMBA_BINARY('ldbdump',
|
|
'tools/ldbdump.c',
|
|
deps='ldb-cmdline ldb' + lmdb_deps,
|
|
install=False)
|
|
|
|
bld.SAMBA_LIBRARY('ldb-cmdline',
|
|
source='tools/ldbutil.c tools/cmdline.c',
|
|
deps='ldb dl popt',
|
|
private_library=True)
|
|
|
|
bld.SAMBA_BINARY('ldb_tdb_mod_op_test',
|
|
source='tests/ldb_mod_op_test.c',
|
|
cflags='-DTEST_BE=\"tdb\"',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_tdb_guid_mod_op_test',
|
|
source='tests/ldb_mod_op_test.c',
|
|
cflags='-DTEST_BE=\"tdb\" -DGUID_IDX=1',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_tdb_kv_ops_test',
|
|
source='tests/ldb_kv_ops_test.c',
|
|
cflags='-DTEST_BE=\"tdb\"',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_tdb_test',
|
|
source='tests/ldb_tdb_test.c',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_msg_test',
|
|
source='tests/ldb_msg.c',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('test_ldb_qsort',
|
|
source='tests/test_ldb_qsort.c',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
if bld.CONFIG_SET('HAVE_LMDB'):
|
|
bld.SAMBA_BINARY('ldb_mdb_mod_op_test',
|
|
source='tests/ldb_mod_op_test.c',
|
|
cflags='-DTEST_BE=\"mdb\" -DGUID_IDX=1 '
|
|
+ '-DTEST_LMDB=1',
|
|
deps='cmocka ldb lmdb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_lmdb_test',
|
|
source='tests/ldb_lmdb_test.c',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_lmdb_size_test',
|
|
source='tests/ldb_lmdb_size_test.c',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
bld.SAMBA_BINARY('ldb_mdb_kv_ops_test',
|
|
source='tests/ldb_kv_ops_test.c',
|
|
cflags='-DTEST_BE=\"mdb\"',
|
|
deps='cmocka ldb',
|
|
install=False)
|
|
|
|
def test(ctx):
|
|
'''run ldb testsuite'''
|
|
import Utils, samba_utils, shutil
|
|
env = samba_utils.LOAD_ENVIRONMENT()
|
|
ctx.env = env
|
|
|
|
if not env.HAVE_LMDB:
|
|
raise Utils.WafError('make test called, but ldb was built '
|
|
'--without-ldb-lmdb')
|
|
|
|
test_prefix = "%s/st" % (Utils.g_module.blddir)
|
|
shutil.rmtree(test_prefix, ignore_errors=True)
|
|
os.makedirs(test_prefix)
|
|
os.environ['TEST_DATA_PREFIX'] = test_prefix
|
|
os.environ['LDB_MODULES_PATH'] = Utils.g_module.blddir + "/modules/ldb"
|
|
samba_utils.ADD_LD_LIBRARY_PATH('bin/shared')
|
|
samba_utils.ADD_LD_LIBRARY_PATH('bin/shared/private')
|
|
|
|
cmd = 'tests/test-tdb.sh %s' % Utils.g_module.blddir
|
|
ret = samba_utils.RUN_COMMAND(cmd)
|
|
print("testsuite returned %d" % ret)
|
|
|
|
tmp_dir = os.path.join(test_prefix, 'tmp')
|
|
if not os.path.exists(tmp_dir):
|
|
os.mkdir(tmp_dir)
|
|
pyret = samba_utils.RUN_PYTHON_TESTS(
|
|
['tests/python/api.py', 'tests/python/index.py'],
|
|
extra_env={'SELFTEST_PREFIX': test_prefix})
|
|
print("Python testsuite returned %d" % pyret)
|
|
|
|
cmocka_ret = 0
|
|
test_exes = ['test_ldb_qsort',
|
|
'ldb_msg_test',
|
|
'ldb_tdb_mod_op_test',
|
|
'ldb_tdb_guid_mod_op_test',
|
|
'ldb_msg_test',
|
|
'ldb_tdb_kv_ops_test',
|
|
'ldb_tdb_test',
|
|
'ldb_mdb_mod_op_test',
|
|
'ldb_lmdb_test',
|
|
# we don't want to run ldb_lmdb_size_test (which proves we can
|
|
# fit > 4G of data into the DB), it would fill up the disk on
|
|
# many of our test instances
|
|
'ldb_mdb_kv_ops_test']
|
|
|
|
for test_exe in test_exes:
|
|
cmd = os.path.join(Utils.g_module.blddir, test_exe)
|
|
cmocka_ret = cmocka_ret or samba_utils.RUN_COMMAND(cmd)
|
|
|
|
sys.exit(ret or pyret or cmocka_ret)
|
|
|
|
def dist():
|
|
'''makes a tarball for distribution'''
|
|
samba_dist.dist()
|
|
|
|
def reconfigure(ctx):
|
|
'''reconfigure if config scripts have changed'''
|
|
import samba_utils
|
|
samba_utils.reconfigure(ctx)
|