1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00
samba-mirror/ctdb/wscript
Thomas Nagy 71a168eb2b build:wafsamba: Set the default installation prefix for Waf 1.8
These changes enable the default installation prefix settings to
take effect in both Waf 1.5 and 1.8 with no additional code changes.

Signed-off-by: Thomas Nagy <tnagy@waf.io>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
2015-09-29 11:59:20 +02:00

799 lines
31 KiB
Python
Executable File

#!/usr/bin/env python
APPNAME = 'ctdb'
blddir = 'bin'
import sys, os
# 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, Options, Logs, Utils
import samba_utils, samba_version
env = samba_utils.LOAD_ENVIRONMENT()
if os.path.isfile('./VERSION'):
vdir = '.'
elif os.path.isfile('../VERSION'):
vdir = '..'
else:
Logs.error("VERSION file not found")
version = samba_version.samba_version_file('%s/VERSION' % vdir, vdir, env)
VERSION = version.STRING.replace('-', '.')
default_prefix = Options.default_prefix = '/usr/local'
samba_dist.DIST_DIRS('''ctdb:. lib/replace:lib/replace lib/talloc:lib/talloc
lib/tevent:lib/tevent lib/tdb:lib/tdb
lib/socket_wrapper:lib/socket_wrapper
third_party/popt:third_party/popt
lib/util:lib/util lib/tdb_wrap:lib/tdb_wrap
lib/ccan:lib/ccan libcli/util:libcli/util
buildtools:buildtools third_party/waf:third_party/waf''')
manpages = [
'ctdb.1',
'ctdb.7',
'ctdbd.1',
'ctdbd.conf.5',
'ctdbd_wrapper.1',
'ctdb-statistics.7',
'ctdb-tunables.7',
'ltdbtool.1',
'onnode.1',
'ping_pong.1'
]
def set_options(opt):
opt.PRIVATE_EXTENSION_DEFAULT('ctdb')
opt.RECURSE('lib/replace')
opt.RECURSE('lib/util')
opt.RECURSE('lib/talloc')
opt.RECURSE('lib/tevent')
opt.RECURSE('lib/tdb')
opt.add_option('--enable-infiniband',
help=("Turn on infiniband support (default=no)"),
action="store_true", dest='ctdb_infiniband', default=False)
opt.add_option('--enable-pmda',
help=("Turn on PCP pmda support (default=no)"),
action="store_true", dest='ctdb_pmda', default=False)
opt.add_option('--with-logdir',
help=("Path to log directory"),
action="store", dest='ctdb_logdir', default=None)
opt.add_option('--with-socketpath',
help=("path to CTDB daemon socket"),
action="store", dest='ctdb_sockpath', default=None)
def configure(conf):
# CTDB relies on nested event loops
conf.env.TEVENT_DEPRECATED = 1
# No need to build python bindings for talloc/tevent/tdb
if conf.IN_LAUNCH_DIR():
conf.env.standalone_ctdb = True
Options.options.disable_python = True
conf.RECURSE('lib/replace')
if conf.env.standalone_ctdb:
conf.SAMBA_CHECK_PERL(mandatory=True)
conf.SAMBA_CHECK_PYTHON(mandatory=True, version=(2,5,0))
conf.SAMBA_CHECK_PYTHON_HEADERS(mandatory=True)
if conf.CHECK_FOR_THIRD_PARTY():
conf.RECURSE('third_party/popt')
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)
conf.RECURSE('lib/util')
conf.RECURSE('lib/talloc')
conf.RECURSE('lib/tevent')
conf.RECURSE('lib/tdb')
if conf.env.standalone_ctdb or conf.CONFIG_GET('ENABLE_SELFTEST'):
conf.RECURSE('lib/socket_wrapper')
conf.CHECK_HEADERS('sched.h')
conf.CHECK_HEADERS('procinfo.h')
if sys.platform.startswith('aix') and not conf.CHECK_FUNCS('thread_setsched'):
Logs.error('Need thread_setsched() on AIX')
sys.exit(1)
elif not conf.CHECK_FUNCS('sched_setscheduler'):
Logs.error('Need sched_setscheduler()')
sys.exit(1)
conf.CHECK_FUNCS('mlockall')
if not conf.CHECK_VARIABLE('ETIME', headers='errno.h'):
conf.DEFINE('ETIME', 'ETIMEDOUT')
if sys.platform.startswith('linux'):
conf.SET_TARGET_TYPE('pcap', 'EMPTY')
else:
if not conf.CHECK_HEADERS('pcap.h'):
Logs.error('Need libpcap')
sys.exit(1)
if not conf.CHECK_FUNCS_IN('pcap_open_live', 'pcap', headers='pcap.h'):
Logs.error('Need libpcap')
sys.exit(1)
if not conf.CHECK_FUNCS_IN('backtrace backtrace_symbols', 'execinfo',
checklibc=True, headers='execinfo.h'):
Logs.error('backtrace support not available')
have_pmda = False
if Options.options.ctdb_pmda:
pmda_support = True
if not conf.CHECK_HEADERS('pcp/pmapi.h pcp/impl.h pcp/pmda.h',
together=True):
pmda_support = False
if not conf.CHECK_FUNCS_IN('pmProgname', 'pcp'):
pmda_support = False
if not conf.CHECK_FUNCS_IN('pmdaDaemon', 'pcp_pmda'):
pmda_support = False
if pmda_support:
have_pmda = True
else:
Logs.error("PMDA support not available")
if have_pmda:
Logs.info('Building with PMDA support')
conf.define('HAVE_PMDA', 1)
conf.env.CTDB_PMDADIR = os.path.join(conf.env.LOCALSTATEDIR,
'lib/pcp/pmdas/ctdb')
have_infiniband = False
if Options.options.ctdb_infiniband:
ib_support = True
if not conf.CHECK_HEADERS('infiniband/verbs.h rdma/rdma_cma.h'):
ib_support = False
if not conf.CHECK_FUNCS_IN('ibv_create_qp', 'ibverbs'):
ib_support = False
if not conf.CHECK_FUNCS_IN('rdma_connect', 'rdmacm'):
ib_support = False
if ib_support:
have_infiniband = True
else:
Logs.error("Infiniband support not available")
if have_infiniband:
Logs.info('Building with Infiniband support')
conf.define('HAVE_INFINIBAND', 1)
conf.define('USE_INFINIBAND', 1)
conf.env.CTDB_BINDIR = os.path.join(conf.env.EXEC_PREFIX, 'bin')
conf.env.CTDB_ETCDIR = os.path.join(conf.env.SYSCONFDIR, 'ctdb')
conf.env.CTDB_VARDIR = os.path.join(conf.env.LOCALSTATEDIR, 'lib/ctdb')
conf.env.CTDB_RUNDIR = os.path.join(conf.env.LOCALSTATEDIR, 'run/ctdb')
if Options.options.ctdb_logdir:
conf.env.CTDB_LOGDIR = Options.options.ctdb_logdir
else:
conf.env.CTDB_LOGDIR = os.path.join(conf.env.LOCALSTATEDIR, 'log')
if Options.options.ctdb_sockpath:
conf.env.CTDB_SOCKPATH = Options.options.ctdb_sockpath
else:
conf.env.CTDB_SOCKPATH = os.path.join(conf.env.CTDB_RUNDIR,
'ctdbd.socket')
conf.ADD_CFLAGS('''-DCTDB_HELPER_BINDIR=\"%s\"
-DLOGDIR=\"%s\"
-DSOCKPATH=\"%s\"
-DCTDB_ETCDIR=\"%s\"
-DCTDB_VARDIR=\"%s\"
-DCTDB_RUNDIR=\"%s\"''' % (
conf.env.CTDB_BINDIR,
conf.env.CTDB_LOGDIR,
conf.env.CTDB_SOCKPATH,
conf.env.CTDB_ETCDIR,
conf.env.CTDB_VARDIR,
conf.env.CTDB_RUNDIR))
conf.env.CTDB_TEST_DATADIR = os.path.join(conf.env.EXEC_PREFIX,
'share/ctdb-tests')
conf.env.CTDB_TEST_LIBDIR = os.path.join(conf.env.LIBDIR, 'ctdb-tests')
# Allow unified compilation and separate compilation of utilities
# to find includes
if not conf.env.standalone_ctdb:
conf.ADD_EXTRA_INCLUDES('#ctdb/include')
else:
if srcdir == '.':
# Building from tarball
conf.ADD_EXTRA_INCLUDES('#include')
conf.ADD_EXTRA_INCLUDES('#include/internal')
else:
# Building standalone CTDB from within Samba tree
conf.ADD_EXTRA_INCLUDES('#ctdb/include')
conf.ADD_EXTRA_INCLUDES('#ctdb/include/internal')
conf.ADD_EXTRA_INCLUDES('#ctdb')
conf.ADD_EXTRA_INCLUDES('#lib #lib/replace')
conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True)
conf.DEFINE('SAMBA_UTIL_CORE_ONLY', 1, add_to_cflags=True)
conf.SAMBA_CONFIG_H()
def build(bld):
if bld.env.standalone_ctdb:
# enable building of public headers in the build tree
bld.env.build_public_headers = 'include/public'
version_h = samba_utils.os_path_relpath(os.path.join(Options.launch_dir,
"version.h"),
bld.curdir)
if bld.env.standalone_ctdb:
ctdb_mkversion = '../packaging/mkversion.sh'
t = bld.SAMBA_GENERATOR('ctdb-version-header',
target='include/ctdb_version.h',
rule='%s ${TGT} %s' % (ctdb_mkversion, VERSION),
dep_vars=['VERSION'])
t.env.VERSION = VERSION
t = bld.SAMBA_GENERATOR('ctdb-samba-version-header',
target=version_h,
rule='printf "#include \\"ctdb_version.h\\" \\n#define SAMBA_VERSION_STRING CTDB_VERSION_STRING\\n" > ${TGT}',
dep_vars=['VERSION'])
t.env.VERSION = VERSION
else:
t = bld.SAMBA_GENERATOR('ctdb-samba-version-header',
target='include/ctdb_version.h',
rule='printf "#include \\"%s\\" \\n#define CTDB_VERSION_STRING SAMBA_VERSION_STRING\\n" > ${TGT}' % version_h,
dep_vars=['VERSION'])
t.env.VERSION = VERSION
bld.RECURSE('lib/replace')
if bld.CHECK_FOR_THIRD_PARTY():
bld.RECURSE('third_party/popt')
bld.RECURSE('lib/tdb_wrap')
bld.RECURSE('lib/util')
bld.RECURSE('lib/talloc')
bld.RECURSE('lib/tevent')
bld.RECURSE('lib/tdb')
if bld.env.standalone_ctdb or bld.CONFIG_GET('SOCKET_WRAPPER'):
bld.RECURSE('lib/socket_wrapper')
if bld.env.standalone_ctdb:
# In a combined build is implemented, CTDB will wanted to
# build against samba-util rather than samba-util-core.
# Similarly, other Samba subsystems expect samba-util. So,
# for a standalone build, just define a fake samba-util
# subsystem that pulls in samba-util-core.
bld.SAMBA_SUBSYSTEM('samba-util',
source='',
deps='samba-util-core')
bld.SAMBA_SUBSYSTEM('ctdb-tcp',
source=bld.SUBDIR('tcp',
'tcp_connect.c tcp_init.c tcp_io.c'),
includes='include include/internal',
deps='replace tdb talloc tevent')
ib_deps = ''
if bld.env.HAVE_INFINIBAND:
bld.SAMBA_SUBSYSTEM('ctdb-ib',
source=bld.SUBDIR('ib',
'''ibwrapper.c ibw_ctdb.c
ibw_ctdb_init.c'''),
includes='include include/internal',
deps='replace')
ib_deps = ' ctdb-ib rdmacm ibverbs'
bld.SAMBA_SUBSYSTEM('ctdb-common',
source=bld.SUBDIR('common',
'''ctdb_io.c ctdb_util.c ctdb_ltdb.c
ctdb_message.c cmdline.c rb_tree.c
system_common.c ctdb_fork.c'''),
includes='include include/internal common .',
deps='replace popt talloc tevent tdb popt')
bld.SAMBA_SUBSYSTEM('ctdb-common-util',
source=bld.SUBDIR('common',
'system_util.c ctdb_logging.c'),
includes='include include/internal',
deps='replace tevent tdb')
if sys.platform.startswith('linux'):
CTDB_SYSTEM_SRC = bld.SUBDIR('common', 'system_linux.c')
elif sys.platform.startswith('aix'):
CTDB_SYSTEM_SRC = bld.SUBDIR('common', 'system_aix.c')
elif sys.platform.startswith('freebsd'):
CTDB_SYSTEM_SRC = bld.SUBDIR('common', 'system_freebsd.c')
elif sys.platform == 'kfreebsd':
CTDB_SYSTEM_SRC = bld.SUBDIR('common', 'system_kfreebsd.c')
elif sys.platform == 'gnu':
CTDB_SYSTEM_SRC = bld.SUBDIR('common', 'system_gnu.c')
else:
Logs.error("Platform %s not supported" % sys.platform)
bld.SAMBA_SUBSYSTEM('ctdb-system',
source=CTDB_SYSTEM_SRC,
includes='include include/internal',
deps='replace talloc tevent tdb pcap')
bld.SAMBA_SUBSYSTEM('ctdb-client',
source=bld.SUBDIR('client', 'ctdb_client.c'),
includes='include include/internal',
public_headers='include/ctdb_client.h',
deps='''replace popt talloc tevent tdb
samba-util tdb-wrap''')
bld.SAMBA_SUBSYSTEM('ctdb-server',
source='server/ctdbd.c ' +
bld.SUBDIR('server',
'''ctdb_daemon.c ctdb_recoverd.c
ctdb_recover.c ctdb_freeze.c
ctdb_tunables.c ctdb_monitor.c
ctdb_server.c ctdb_control.c
ctdb_call.c ctdb_ltdb_server.c
ctdb_traverse.c eventscript.c
ctdb_takeover.c ctdb_serverids.c
ctdb_persistent.c ctdb_keepalive.c
ctdb_logging.c
ctdb_logging_syslog.c
ctdb_logging_file.c
ctdb_uptime.c
ctdb_vacuum.c ctdb_banning.c
ctdb_statistics.c
ctdb_update_record.c
ctdb_lock.c'''),
includes='include include/internal',
public_headers='''include/ctdb_version.h
include/ctdb.h
include/ctdb_private.h
include/ctdb_protocol.h
include/ctdb_typesafe_cb.h''',
deps='replace popt talloc tevent tdb talloc_report')
bld.SAMBA_BINARY('ctdbd',
source='',
deps='''ctdb-server ctdb-client ctdb-common
ctdb-common-util ctdb-system ctdb-tcp''' +
ib_deps,
install_path='${SBINDIR}',
manpages='ctdbd.1')
bld.SAMBA_BINARY('ctdb',
source='tools/ctdb.c tools/ctdb_vacuum.c',
deps='''ctdb-client ctdb-common ctdb-common-util
ctdb-system''',
includes='include include/internal',
install_path='${BINDIR}',
manpages='ctdb.1')
bld.SAMBA_BINARY('ltdbtool',
source='tools/ltdbtool.c',
includes='include',
deps='tdb',
install_path='${BINDIR}',
manpages='ltdbtool.1')
bld.SAMBA_BINARY('ctdb_lock_helper',
source='server/ctdb_lock_helper.c',
deps='samba-util ctdb-common-util talloc tdb',
includes='include include/internal',
install_path='${BINDIR}')
bld.SAMBA_BINARY('ctdb_event_helper',
source='server/ctdb_event_helper.c',
includes='include include/internal',
deps='samba-util ctdb-common-util replace tdb',
install_path='${BINDIR}')
bld.SAMBA_GENERATOR('ctdb-smnotify-h',
source='utils/smnotify/smnotify.x',
target='utils/smnotify/smnotify.h',
rule='rpcgen -h ${SRC} > ${TGT}')
xdr_buf_hack = 'sed -e "s@^\([ \t]*register int32_t \*buf\);@\\1 = buf;@"'
bld.SAMBA_GENERATOR('ctdb-smnotify-x',
source='utils/smnotify/smnotify.x',
target='utils/smnotify/gen_xdr.c',
rule='rpcgen -c ${SRC} | ' + xdr_buf_hack + ' > ${TGT}')
bld.SAMBA_GENERATOR('ctdb-smnotify-c',
source='utils/smnotify/smnotify.x',
target='utils/smnotify/gen_smnotify.c',
rule='rpcgen -l ${SRC} > ${TGT}')
bld.SAMBA_BINARY('smnotify',
source=bld.SUBDIR('utils/smnotify',
'smnotify.c gen_smnotify.c gen_xdr.c'),
deps='ctdb-smnotify-h ctdb-smnotify-c ctdb-smnotify-x popt',
includes='utils utils/smnotify',
install_path='${BINDIR}')
bld.SAMBA_BINARY('ping_pong',
source='utils/ping_pong/ping_pong.c',
deps='',
install_path='${BINDIR}',
manpages='ping_pong.1')
if bld.env.HAVE_PMDA:
bld.SAMBA_BINARY('pmdactdb',
source='utils/pmda/pmda_ctdb.c',
includes='include include/internal',
deps='''ctdb-client ctdb-common ctdb-system
ctdb-common-util pcp_pmda pcp''',
install_path='${CTDB_PMDADIR}')
bld.INSTALL_FILES('${CTDB_PMDADIR}', 'utils/pmda/Install',
destname='Install')
bld.INSTALL_FILES('${CTDB_PMDADIR}', 'utils/pmda/Remove',
destname='Remove')
bld.INSTALL_FILES('${CTDB_PMDADIR}', 'utils/pmda/pmns',
destname='pmns')
bld.INSTALL_FILES('${CTDB_PMDADIR}', 'utils/pmda/domain.h',
destname='domain.h')
bld.INSTALL_FILES('${CTDB_PMDADIR}', 'utils/pmda/help',
destname='help')
bld.INSTALL_FILES('${CTDB_PMDADIR}', 'utils/pmda/README',
destname='README')
sed_expr1 = 's|/usr/local/var/lib/ctdb|%s|g' % (bld.env.CTDB_VARDIR)
sed_expr2 = 's|/usr/local/etc/ctdb|%s|g' % (bld.env.CTDB_ETCDIR)
sed_expr3 = 's|/usr/local/var/log|%s|g' % (bld.env.CTDB_LOGDIR)
sed_expr4 = 's|/usr/local/var/run/ctdb|%s|g' % (bld.env.CTDB_RUNDIR)
sed_expr5 = 's|/usr/local/sbin|%s|g' % (bld.env.SBINDIR)
sed_cmdline = '-e "%s" -e "%s" -e "%s" -e "%s" -e "%s"' % \
(sed_expr1, sed_expr2, sed_expr3, sed_expr4, sed_expr5)
for f in manpages:
x = '%s.xml' % (f)
bld.SAMBA_GENERATOR(x,
source=os.path.join('doc', x),
target=x,
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
if 'XSLTPROC_MANPAGES' in bld.env and bld.env['XSLTPROC_MANPAGES']:
bld.MANPAGES('''onnode.1 ctdbd_wrapper.1 ctdbd.conf.5
ctdb.7 ctdb-statistics.7 ctdb-tunables.7''',
True)
else:
for m in manpages:
bld.SAMBA_GENERATOR(m,
source=os.path.join("doc", m),
target=m,
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
bld.INSTALL_FILES('${MANDIR}/man%s' % m[-1], m)
bld.SAMBA_GENERATOR('ctdb-onnode',
source='tools/onnode',
target='onnode',
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
bld.INSTALL_FILES('${BINDIR}', 'onnode',
destname='onnode', chmod=0755)
bld.SAMBA_GENERATOR('ctdb-diagnostics',
source='tools/ctdb_diagnostics',
target='ctdb_diagnostics',
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
bld.INSTALL_FILES('${BINDIR}', 'ctdb_diagnostics',
destname='ctdb_diagnostics', chmod=0755)
bld.SAMBA_GENERATOR('ctdbd-wrapper',
source='config/ctdbd_wrapper',
target='ctdbd_wrapper',
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
bld.INSTALL_FILES('${SBINDIR}', 'ctdbd_wrapper',
destname='ctdbd_wrapper', chmod=0755)
def SUBDIR_MODE_callback(arg, dirname, fnames):
for f in fnames:
fl = os.path.join(dirname, f)
if os.path.isdir(fl) or os.path.islink(fl):
continue
mode = os.lstat(fl).st_mode & 0777
if arg['trim_path']:
fl = samba_utils.os_path_relpath(fl, arg['trim_path'])
arg['file_list'].append([fl, mode])
def SUBDIR_MODE(path, trim_path=None):
pd = {'trim_path': trim_path, 'file_list': []}
os.path.walk(path, SUBDIR_MODE_callback, pd)
return pd['file_list']
etc_subdirs = [
'events.d',
'nfs-checks.d'
]
if bld.env.standalone_ctdb:
configdir = 'config'
else:
configdir = 'ctdb/config'
for t in etc_subdirs:
files = SUBDIR_MODE('%s/%s' % (configdir, t), trim_path=configdir)
for fmode in files:
bld.INSTALL_FILES(bld.env.CTDB_ETCDIR, 'config/%s' % fmode[0],
destname=fmode[0], chmod=fmode[1])
bld.SAMBA_GENERATOR('ctdb-functions',
source='config/functions',
target='functions',
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
bld.INSTALL_FILES(bld.env.CTDB_ETCDIR, 'functions', destname='functions')
etc_scripts = [
'ctdb-crash-cleanup.sh',
'debug-hung-script.sh',
'debug_locks.sh',
'gcore_trace.sh',
'nfs-linux-kernel-callout',
'notify.sh',
'statd-callout'
]
for t in etc_scripts:
bld.INSTALL_FILES(bld.env.CTDB_ETCDIR, 'config/%s' % t,
destname=t, chmod=0755)
bld.SAMBA_GENERATOR('ctdb-sudoers',
source='config/ctdb.sudoers',
target='ctdb.sudoers',
rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
bld.INSTALL_FILES('${SYSCONFDIR}/sudoers.d', 'ctdb.sudoers',
destname='ctdb')
bld.INSTALL_FILES('${CTDB_ETCDIR}/notify.d', 'config/notify.d.README',
destname='README')
bld.install_dir(bld.env.CTDB_LOGDIR)
bld.install_dir(bld.env.CTDB_RUNDIR)
bld.install_dir(bld.env.CTDB_VARDIR)
sed_expr = 's/@PACKAGE_VERSION@/%s/g' % VERSION
t = bld.SAMBA_GENERATOR('ctdb-pc',
source='ctdb.pc.in',
target='ctdb.pc',
rule='sed -e "%s" ${SRC} > ${TGT}' % sed_expr,
dep_vars=['VERSION'])
t.env.VERSION = VERSION
bld.INSTALL_FILES('${LIBDIR}/pkgconfig', 'ctdb.pc')
# Test binaries
ctdb_tests = [
'rb_test',
'ctdb_bench',
'ctdb_fetch',
'ctdb_fetch_one',
'ctdb_fetch_readonly_once',
'ctdb_fetch_readonly_loop',
'ctdb_trackingdb_test',
'ctdb_update_record',
'ctdb_update_record_persistent',
'ctdb_store',
'ctdb_traverse',
'ctdb_randrec',
'ctdb_persistent',
'ctdb_porting_tests',
'ctdb_transaction',
'ctdb_lock_tdb'
]
for target in ctdb_tests:
src = 'tests/src/' + target + '.c'
bld.SAMBA_BINARY(target,
source=src,
includes='include include/internal',
deps='''ctdb-client ctdb-common ctdb-common-util
ctdb-system''',
install_path='${CTDB_TEST_LIBDIR}')
bld.SAMBA_BINARY('ctdb_takeover_tests',
source='tests/src/ctdb_takeover_tests.c',
deps='''replace popt tdb tevent talloc ctdb-system
samba-util tdb-wrap talloc_report''' +
ib_deps,
includes='include include/internal',
install_path='${CTDB_TEST_LIBDIR}')
bld.SAMBA_BINARY('ctdb_functest',
source='tests/src/ctdb_functest.c',
deps='''replace tdb tevent talloc popt ctdb-system
samba-util tdb-wrap''',
includes='include include/internal',
install_path='${CTDB_TEST_LIBDIR}')
bld.SAMBA_BINARY('ctdb_stubtest',
source='tests/src/ctdb_test.c',
deps='''replace tdb tevent talloc popt ctdb-system
samba-util tdb-wrap''',
includes='include include/internal',
install_path='${CTDB_TEST_LIBDIR}')
if bld.env.HAVE_INFINIBAND:
bld.SAMBA_BINARY('ibwrapper_test',
source='ib/ibwrapper_test.c',
includes='include include/internal',
deps='''replace talloc ctdb-client ctdb-common
ctdb-system''' +
ib_deps,
install_path='${CTDB_TEST_LIBDIR}')
test_subdirs = [
'complex',
'events.d',
'eventscripts',
'onnode',
'simple',
'takeover',
'tool'
]
for t in test_subdirs:
files = SUBDIR_MODE('tests/%s' % t, trim_path='tests')
for fmode in files:
bld.INSTALL_FILES(bld.env.CTDB_TEST_DATADIR, 'tests/%s' % fmode[0],
destname=fmode[0], chmod=fmode[1])
# Install tests/scripts directory without test_wrap
test_scripts = [
'common.sh',
'integration.bash',
'unit.sh'
]
for t in test_scripts:
bld.INSTALL_FILES(bld.env.CTDB_TEST_DATADIR,
os.path.join('tests/scripts', t),
destname=os.path.join('scripts', t))
sed_expr = 's@^TEST_SCRIPTS_DIR=.*@&\\nexport TEST_BIN_DIR=\"%s\"@' % (
bld.env.CTDB_TEST_LIBDIR)
bld.SAMBA_GENERATOR('ctdb-test-wrap',
source='tests/scripts/test_wrap',
target='test_wrap',
rule='sed -e "%s" ${SRC} > ${TGT}' % sed_expr)
bld.INSTALL_FILES(bld.env.CTDB_TEST_DATADIR+"/scripts", 'test_wrap',
destname='test_wrap', chmod=0755)
sed_expr1 = 's@^test_dir=.*@test_dir=%s\\nexport TEST_BIN_DIR=\"%s\"@' % (
bld.env.CTDB_TEST_DATADIR, bld.env.CTDB_TEST_LIBDIR)
sed_expr2 = 's@^\(export CTDB_TESTS_ARE_INSTALLED\)=false@\\1=true@'
bld.SAMBA_GENERATOR('ctdb-test-runner',
source='tests/run_tests.sh',
target='ctdb_run_tests.sh',
rule='sed -e "%s" -e "%s" ${SRC} > ${TGT}' % (
sed_expr1, sed_expr2))
bld.INSTALL_FILES('${BINDIR}', 'ctdb_run_tests.sh',
destname='ctdb_run_tests', chmod=0755)
bld.symlink_as(os.path.join(bld.env.BINDIR, 'ctdb_run_cluster_tests'),
'ctdb_run_tests')
test_eventscript_links = [
'events.d',
'functions',
'nfs-checks.d',
'nfs-linux-kernel-callout',
'statd-callout'
]
test_link_dir = os.path.join(bld.env.CTDB_TEST_DATADIR,
'eventscripts/etc-ctdb')
for t in test_eventscript_links:
bld.symlink_as(os.path.join(test_link_dir, t),
os.path.join(bld.env.CTDB_ETCDIR, t))
# Tests that use onnode need to overwrite link to in-tree
# functions file when installed
bld.symlink_as(os.path.join(bld.env.CTDB_TEST_DATADIR, 'onnode/functions'),
os.path.join(bld.env.CTDB_ETCDIR, 'functions'))
bld.symlink_as(os.path.join(bld.env.CTDB_TEST_DATADIR, 'simple/functions'),
os.path.join(bld.env.CTDB_ETCDIR, 'functions'))
# Need a link to nodes file because $CTDB_BASE is overridden
bld.symlink_as(os.path.join(bld.env.CTDB_TEST_DATADIR, 'simple/nodes'),
os.path.join(bld.env.CTDB_ETCDIR, 'nodes'))
def testonly(ctx):
cmd = 'tests/run_tests.sh -V tests/var'
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('tests exited with exit status %d' % ret)
sys.exit(ret)
def test(ctx):
import Scripting
Scripting.commands.append('build')
Scripting.commands.append('testonly')
def autotest(ctx):
ld = 'LD_PRELOAD=%s/bin/shared/libsocket-wrapper.so' % os.getcwd()
cmd = '%s tests/run_tests.sh -e -S -C' % ld
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('autotest exited with exit status %d' % ret)
sys.exit(ret)
def show_version(ctx):
print VERSION
def dist():
samba_dist.DIST_FILES('VERSION:VERSION', extend=True)
t = 'include/ctdb_version.h'
cmd = 'packaging/mkversion.sh %s %s' % (t, VERSION)
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('Command "%s" failed with exit status %d' % (cmd, ret))
sys.exit(ret)
samba_dist.DIST_FILES('ctdb/%s:%s' % (t, t), extend=True)
t = 'ctdb.spec'
sed_expr1 = 's/@VERSION@/%s/g' % VERSION
sed_expr2 = 's/@RELEASE@/%s/g' % '1'
cmd = 'sed -e "%s" -e "%s" packaging/RPM/ctdb.spec.in > %s' % (
sed_expr1, sed_expr2, t)
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('Command "%s" failed with exit status %d' % (cmd, ret))
sys.exit(ret)
samba_dist.DIST_FILES('ctdb/%s:%s' % (t, t), extend=True)
cmd = 'make -C doc'
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('Command "%s" failed with exit status %d' % (cmd, ret))
sys.exit(ret)
for t in manpages:
samba_dist.DIST_FILES('ctdb/doc/%s:doc/%s' % (t, t), extend=True)
samba_dist.DIST_FILES('ctdb/doc/%s.html:doc/%s.html' % (t, t),
extend=True)
samba_dist.dist()
def rpmonly(ctx):
opts = os.getenv('RPM_OPTIONS') or ''
cmd = 'rpmbuild -ta --clean --rmsource %s ctdb-%s.tar.gz' % (opts, VERSION)
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('rpmbuild exited with exit status %d' % ret)
sys.exit(ret)
def rpm(ctx):
import Scripting
Scripting.commands.append('dist')
Scripting.commands.append('rpmonly')
def ctags(ctx):
"build 'tags' file using ctags"
import Utils
source_root = os.path.dirname(Utils.g_module.root_path)
cmd = 'ctags $(find %s -name "*.[ch]")' % source_root
print("Running: %s" % cmd)
ret = samba_utils.RUN_COMMAND(cmd)
if ret != 0:
print('ctags failed with exit status %d' % ret)
sys.exit(ret)