mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
a33a78c302
By calling talloc_set_memlimit() we can now set a max memory limit for a whole talloc hierarchy. ANy attempt to allocate memory beyond the max allowed for the whole hierarchy wil cause an allocation failure. Stealing memory correctly accounts for used memory in the old and the new hierarchy but exceeding the memory limit in the new parent will not cause a failure.
155 lines
5.2 KiB
Python
155 lines
5.2 KiB
Python
#!/usr/bin/env python
|
|
|
|
APPNAME = 'talloc'
|
|
VERSION = '2.0.8'
|
|
|
|
|
|
blddir = 'bin'
|
|
|
|
import Logs
|
|
import os, sys
|
|
|
|
# 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 sys
|
|
sys.path.insert(0, srcdir+"/buildtools/wafsamba")
|
|
import wafsamba, samba_dist, Options
|
|
|
|
# setup what directories to put in a tarball
|
|
samba_dist.DIST_DIRS('lib/talloc:. lib/replace:lib/replace buildtools:buildtools')
|
|
|
|
|
|
def set_options(opt):
|
|
opt.BUILTIN_DEFAULT('replace')
|
|
opt.PRIVATE_EXTENSION_DEFAULT('talloc', noextension='talloc')
|
|
opt.RECURSE('lib/replace')
|
|
opt.add_option('--enable-talloc-compat1',
|
|
help=("Build talloc 1.x.x compat library [False]"),
|
|
action="store_true", dest='TALLOC_COMPAT1', default=False)
|
|
if opt.IN_LAUNCH_DIR():
|
|
opt.add_option('--disable-python',
|
|
help=("disable the pytalloc module"),
|
|
action="store_true", dest='disable_python', default=False)
|
|
|
|
|
|
def configure(conf):
|
|
conf.RECURSE('lib/replace')
|
|
|
|
conf.env.standalone_talloc = conf.IN_LAUNCH_DIR()
|
|
|
|
conf.env.disable_python = getattr(Options.options, 'disable_python', False)
|
|
|
|
if not conf.env.standalone_talloc:
|
|
if conf.CHECK_BUNDLED_SYSTEM_PKG('talloc', minversion=VERSION,
|
|
implied_deps='replace'):
|
|
conf.define('USING_SYSTEM_TALLOC', 1)
|
|
if conf.CHECK_BUNDLED_SYSTEM_PKG('pytalloc-util', minversion=VERSION,
|
|
implied_deps='talloc replace'):
|
|
conf.define('USING_SYSTEM_PYTALLOC_UTIL', 1)
|
|
|
|
conf.env.TALLOC_COMPAT1 = Options.options.TALLOC_COMPAT1
|
|
|
|
conf.CHECK_XSLTPROC_MANPAGES()
|
|
|
|
if not conf.env.disable_python:
|
|
# also disable if we don't have the python libs installed
|
|
conf.find_program('python', var='PYTHON')
|
|
conf.check_tool('python')
|
|
conf.check_python_version((2,4,2))
|
|
conf.SAMBA_CHECK_PYTHON_HEADERS(mandatory=False)
|
|
if not conf.env.HAVE_PYTHON_H:
|
|
Logs.warn('Disabling pytalloc-util as python devel libs not found')
|
|
conf.env.disable_python = True
|
|
|
|
conf.SAMBA_CONFIG_H()
|
|
|
|
conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
|
|
|
|
|
|
def build(bld):
|
|
bld.RECURSE('lib/replace')
|
|
|
|
if bld.env.standalone_talloc:
|
|
bld.env.PKGCONFIGDIR = '${LIBDIR}/pkgconfig'
|
|
bld.env.TALLOC_VERSION = VERSION
|
|
private_library = False
|
|
|
|
# should we also install the symlink to libtalloc1.so here?
|
|
bld.SAMBA_LIBRARY('talloc-compat1-%s' % (VERSION),
|
|
'compat/talloc_compat1.c',
|
|
public_deps='talloc',
|
|
soname='libtalloc.so.1',
|
|
pc_files=[],
|
|
public_headers=[],
|
|
enabled=bld.env.TALLOC_COMPAT1)
|
|
|
|
bld.SAMBA_BINARY('talloc_testsuite',
|
|
'testsuite_main.c testsuite.c',
|
|
deps='talloc',
|
|
install=False)
|
|
|
|
else:
|
|
private_library = True
|
|
|
|
if not bld.CONFIG_SET('USING_SYSTEM_TALLOC'):
|
|
|
|
bld.SAMBA_LIBRARY('talloc',
|
|
'talloc.c',
|
|
deps='replace',
|
|
abi_directory='ABI',
|
|
abi_match='talloc* _talloc*',
|
|
hide_symbols=True,
|
|
vnum=VERSION,
|
|
public_headers='talloc.h',
|
|
pc_files='talloc.pc',
|
|
public_headers_install=not private_library,
|
|
private_library=private_library,
|
|
manpages='talloc.3')
|
|
|
|
if not bld.CONFIG_SET('USING_SYSTEM_PYTALLOC_UTIL') and not bld.env.disable_python:
|
|
bld.SAMBA_LIBRARY('pytalloc-util',
|
|
source='pytalloc_util.c',
|
|
public_deps='talloc',
|
|
pyembed=True,
|
|
vnum=VERSION,
|
|
hide_symbols=True,
|
|
abi_directory='ABI',
|
|
abi_match='pytalloc_*',
|
|
private_library=private_library,
|
|
public_headers='pytalloc.h',
|
|
pc_files='pytalloc-util.pc'
|
|
)
|
|
bld.SAMBA_PYTHON('pytalloc',
|
|
'pytalloc.c',
|
|
deps='talloc pytalloc-util',
|
|
enabled=True,
|
|
realname='talloc.so')
|
|
|
|
def test(ctx):
|
|
'''run talloc testsuite'''
|
|
import Utils, samba_utils
|
|
cmd = os.path.join(Utils.g_module.blddir, 'talloc_testsuite')
|
|
ret = samba_utils.RUN_COMMAND(cmd)
|
|
print("testsuite returned %d" % ret)
|
|
sys.exit(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)
|
|
|
|
|
|
def pydoctor(ctx):
|
|
'''build python apidocs'''
|
|
cmd='PYTHONPATH=bin/python pydoctor --project-name=talloc --project-url=http://talloc.samba.org/ --make-html --docformat=restructuredtext --introspect-c-modules --add-module bin/python/talloc.*'
|
|
print("Running: %s" % cmd)
|
|
os.system(cmd)
|