#!/usr/bin/env python
APPNAME = 'ldb'
-VERSION = '1.4.0'
-
-blddir = 'bin'
+VERSION = '1.6.3'
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')
+top = '.'
+while not os.path.exists(top+'/buildtools') and len(top.split('/')) < 5:
+ top = top + '/..'
+sys.path.insert(0, top + '/buildtools/wafsamba')
+
+out = 'bin'
-import wafsamba, samba_dist, Utils, Options
+import wafsamba
+from wafsamba import samba_dist, samba_utils
+from waflib import Errors, Options, Logs, Context
+import shutil
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
samba_dist.DIST_FILES('''lib/util/binsearch.h:lib/util/binsearch.h''')
-def set_options(opt):
+def 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.load('python') # options for disabling pyc or pyo compilation
opt.add_option('--without-ldb-lmdb',
help='disable new LMDB backend for LDB',
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.')
+ raise Errors.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.')
+ raise Errors.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)
+ conf.SAMBA_CHECK_PYTHON()
+ conf.SAMBA_CHECK_PYTHON_HEADERS()
# where does the default LIBDIR end up? in conf.env somewhere?
#
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,
- onlyif='talloc tdb tevent',
- implied_deps='replace talloc tdb tevent'):
+ 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,
- onlyif='talloc tdb tevent',
- implied_deps='replace talloc tdb tevent ldb'):
+ dflt_name = 'pyldb-util' + conf.all_envs['default']['PYTHON_SO_ABI_FLAG']
+ if not conf.CHECK_BUNDLED_SYSTEM_PKG(dflt_name,
+ 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,
- 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,
- onlyif='talloc tdb tevent pyldb-util',
- implied_deps='replace talloc tdb tevent'):
+ if conf.CHECK_BUNDLED_SYSTEM_PKG('ldb',
+ minversion=VERSION,
+ maxversion=max_ldb_version_dots,
+ onlyif='talloc tdb tevent %s' % dflt_name,
+ implied_deps='replace talloc tdb tevent'):
conf.define('USING_SYSTEM_LDB', 1)
if not conf.CHECK_CODE('return !(sizeof(size_t) >= 8)',
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 '
+ raise Errors.WafError('--without-ldb-lmdb conflicts '
'with --enable-selftest while '
'building the AD DC')
msg='Checking for lmdb >= 0.9.16 via header check'):
if conf.env.standalone_ldb:
- raise Utils.WafError('ldb build (unless --without-ldb-lmdb) '
+ raise Errors.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 '
+ raise Errors.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.env.HAVE_LMDB = True
conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True)
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)
+ name = bld.pyembed_libname('pyldb-util')
+ bld.SAMBA_LIBRARY(name,
+ deps='replace 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='replace 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.SAMBA_SCRIPT('_ldb_text.py',
+ pattern='_ldb_text.py',
+ installdir='python')
- bld.INSTALL_FILES('${PYTHONARCHDIR}', '_ldb_text.py')
+ bld.INSTALL_FILES('${PYTHONARCHDIR}', '_ldb_text.py')
if not bld.CONFIG_SET('USING_SYSTEM_LDB'):
if bld.is_install:
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',
init_function='ldb_tdb_init',
module_init_name='ldb_init_module',
internal_module=False,
- deps='tdb ldb ldb_key_value',
+ deps='ldb ldb_tdb_int ldb_key_value',
subsystem='ldb')
- bld.SAMBA_LIBRARY('ldb_key_value',
+ bld.SAMBA_LIBRARY('ldb_tdb_int',
+ bld.SUBDIR('ldb_tdb',
+ '''ldb_tdb_wrap.c ldb_tdb.c'''),
+ private_library=True,
+ deps='ldb tdb ldb_key_value ldb_tdb_err_map')
+
+ bld.SAMBA_LIBRARY('ldb_tdb_err_map',
bld.SUBDIR('ldb_tdb',
- '''ldb_tdb.c ldb_search.c ldb_index.c
- ldb_cache.c ldb_tdb_wrap.c'''),
+ '''ldb_tdb_err_map.c '''),
private_library=True,
- deps='tdb ldb')
+ deps='ldb tdb')
+
+ bld.SAMBA_LIBRARY('ldb_key_value',
+ bld.SUBDIR('ldb_key_value',
+ '''ldb_kv.c ldb_kv_search.c ldb_kv_index.c
+ ldb_kv_cache.c'''),
+ private_library=True,
+ deps='tdb ldb ldb_tdb_err_map')
if bld.CONFIG_SET('HAVE_LMDB'):
bld.SAMBA_MODULE('ldb_mdb',
init_function='ldb_ldb_init',
module_init_name='ldb_init_module',
internal_module=False,
- deps='ldb ldb_key_value' + lmdb_deps,
+ deps='ldb ldb_tdb_int ldb_key_value' + lmdb_deps,
subsystem='ldb')
# have a separate subsystem for common/ldb.c, so it can rebuild
deps='cmocka ldb',
install=False)
+ bld.SAMBA_BINARY('test_ldb_dn',
+ source='tests/test_ldb_dn.c',
+ deps='cmocka ldb',
+ install=False)
+
+ bld.SAMBA_BINARY('ldb_match_test',
+ source='tests/ldb_match_test.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\"',
deps='cmocka ldb',
install=False)
+ else:
+ bld.SAMBA_BINARY('ldb_no_lmdb_test',
+ source='tests/ldb_no_lmdb_test.c',
+ 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)
+ test_prefix = "%s/st" % (Context.g_module.out)
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"
+ os.environ['LDB_MODULES_PATH'] = Context.g_module.out + "/modules/ldb"
+ if env.HAVE_LMDB:
+ os.environ['HAVE_LMDB'] = '1'
+ else:
+ os.environ['HAVE_LMDB'] = '0'
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
+ cmd = 'tests/test-tdb.sh %s' % Context.g_module.out
ret = samba_utils.RUN_COMMAND(cmd)
print("testsuite returned %d" % ret)
cmocka_ret = 0
test_exes = ['test_ldb_qsort',
+ 'test_ldb_dn',
'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']
+ 'ldb_match_test']
+
+ if env.HAVE_LMDB:
+ test_exes += ['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']
+ else:
+ test_exes += ['ldb_no_lmdb_test']
for test_exe in test_exes:
- cmd = os.path.join(Utils.g_module.blddir, test_exe)
+ cmd = os.path.join(Context.g_module.out, test_exe)
cmocka_ret = cmocka_ret or samba_utils.RUN_COMMAND(cmd)
sys.exit(ret or pyret or cmocka_ret)