mirror of
https://github.com/samba-team/samba.git
synced 2025-01-15 23:24:37 +03:00
4291fdcf39
With PROCESS_SEPARATE_RULE in wafsamba it is now possible to simplify configuration and checks for MIT/Heimdal Kerberos implementations. 1. Move MIT krb5 checks from source3/wscript to wscript_configure_krb5 2. Make sure they are called same way (--with-mit-krb5-checks) 3. If no configure checks identified MIT krb5 in system (or were disabled), make sure Heimdal build is selected, embedded (default) or system-provided. This makes logic of configuration unchanged for Heimdal builds but adds less hacky way to use MIT krb5 builds. The latter does not work yet as we need to untangle more subsystems from HDB/Heimdal-specific details but lays out a foundation for that. Signed-off-by: Simo Sorce <idra@samba.org>
231 lines
7.8 KiB
Python
Executable File
231 lines
7.8 KiB
Python
Executable File
#! /usr/bin/env python
|
|
|
|
srcdir = '.'
|
|
blddir = 'bin'
|
|
|
|
APPNAME='samba'
|
|
VERSION=None
|
|
|
|
import sys, os
|
|
sys.path.insert(0, srcdir+"/buildtools/wafsamba")
|
|
import wafsamba, Options, samba_dist, Scripting, Utils, samba_version
|
|
|
|
|
|
samba_dist.DIST_DIRS('.')
|
|
samba_dist.DIST_BLACKLIST('.gitignore .bzrignore')
|
|
|
|
# install in /usr/local/samba by default
|
|
Options.default_prefix = '/usr/local/samba'
|
|
|
|
def set_options(opt):
|
|
opt.BUILTIN_DEFAULT('NONE')
|
|
opt.PRIVATE_EXTENSION_DEFAULT('samba4')
|
|
opt.RECURSE('lib/replace')
|
|
opt.RECURSE('dynconfig')
|
|
opt.RECURSE('lib/ldb')
|
|
opt.RECURSE('selftest')
|
|
opt.RECURSE('source4/lib/tls')
|
|
opt.RECURSE('lib/nss_wrapper')
|
|
opt.RECURSE('lib/socket_wrapper')
|
|
opt.RECURSE('lib/uid_wrapper')
|
|
opt.RECURSE('pidl')
|
|
opt.RECURSE('source3')
|
|
opt.RECURSE('lib/util')
|
|
|
|
gr = opt.option_group('developer options')
|
|
gr.add_option('--enable-build-farm',
|
|
help='enable special build farm options',
|
|
action='store_true', dest='BUILD_FARM')
|
|
|
|
opt.tool_options('python') # options for disabling pyc or pyo compilation
|
|
# enable options related to building python extensions
|
|
|
|
|
|
def configure(conf):
|
|
version = samba_version.load_version(env=conf.env)
|
|
|
|
conf.DEFINE('CONFIG_H_IS_FROM_SAMBA', 1)
|
|
conf.DEFINE('_SAMBA_BUILD_', version.MAJOR, add_to_cflags=True)
|
|
conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True)
|
|
|
|
if Options.options.developer:
|
|
conf.ADD_CFLAGS('-DDEVELOPER -DDEBUG_PASSWORD')
|
|
conf.env.DEVELOPER = True
|
|
|
|
# this enables smbtorture.static for s3 in the build farm
|
|
conf.env.BUILD_FARM = Options.options.BUILD_FARM or os.environ.get('RUN_FROM_BUILD_FARM')
|
|
|
|
conf.ADD_EXTRA_INCLUDES('#include/public #source4 #lib #source4/lib #source4/include #include #lib/replace')
|
|
|
|
conf.RECURSE('lib/replace')
|
|
|
|
conf.find_program('python', var='PYTHON', mandatory=True)
|
|
conf.find_program('perl', var='PERL', mandatory=True)
|
|
conf.find_program('xsltproc', var='XSLTPROC')
|
|
|
|
# enable tool to build python extensions
|
|
conf.check_tool('python')
|
|
conf.check_python_version((2,4,2))
|
|
conf.SAMBA_CHECK_PYTHON_HEADERS(mandatory=True)
|
|
|
|
if sys.platform == 'darwin' and not conf.env['HAVE_ENVIRON_DECL']:
|
|
# Mac OSX needs to have this and it's also needed that the python is compiled with this
|
|
# otherwise you face errors about common symbols
|
|
if not conf.CHECK_SHLIB_W_PYTHON("Checking if -fno-common is needed"):
|
|
conf.ADD_CFLAGS('-fno-common')
|
|
if not conf.CHECK_SHLIB_W_PYTHON("Checking if -undefined dynamic_lookup is not need"):
|
|
conf.env.append_value('shlib_LINKFLAGS', ['-undefined', 'dynamic_lookup'])
|
|
|
|
if sys.platform == 'darwin':
|
|
conf.ADD_LDFLAGS('-framework CoreFoundation')
|
|
|
|
if int(conf.env['PYTHON_VERSION'][0]) >= 3:
|
|
raise Utils.WafError('Python version 3.x is not supported by Samba yet')
|
|
|
|
conf.RECURSE('dynconfig')
|
|
conf.RECURSE('lib/ldb')
|
|
if Options.options.with_mit_krb5_checks:
|
|
conf.PROCESS_SEPARATE_RULE('krb5')
|
|
# Only process heimdal_build for non-MIT KRB5 builds
|
|
# When MIT KRB5 checks are done as above, conf.env.KRB5_VENDOR will be set
|
|
# to the lowcased output of 'krb5-config --vendor'.
|
|
# If it is not set or the output is 'heimdal', we are dealing with
|
|
# system-provided or embedded Heimdal build
|
|
if conf.CONFIG_GET('KRB5_VENDOR') in (None, 'heimdal'):
|
|
conf.RECURSE('source4/heimdal_build')
|
|
conf.RECURSE('source4/lib/tls')
|
|
conf.RECURSE('source4/ntvfs/sysdep')
|
|
conf.RECURSE('lib/util')
|
|
conf.RECURSE('lib/ccan')
|
|
conf.RECURSE('lib/zlib')
|
|
conf.RECURSE('lib/util/charset')
|
|
conf.RECURSE('source4/auth')
|
|
conf.RECURSE('lib/nss_wrapper')
|
|
conf.RECURSE('nsswitch')
|
|
conf.RECURSE('lib/socket_wrapper')
|
|
conf.RECURSE('lib/uid_wrapper')
|
|
conf.RECURSE('lib/popt')
|
|
conf.RECURSE('lib/subunit/c')
|
|
conf.RECURSE('libcli/smbreadline')
|
|
conf.RECURSE('lib/crypto')
|
|
conf.RECURSE('pidl')
|
|
conf.RECURSE('selftest')
|
|
conf.RECURSE('source3')
|
|
conf.RECURSE('lib/addns')
|
|
|
|
conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
|
|
|
|
# gentoo always adds this. We want our normal build to be as
|
|
# strict as the strictest OS we support, so adding this here
|
|
# allows us to find problems on our development hosts faster.
|
|
# It also results in faster load time.
|
|
|
|
if sys.platform != "openbsd4":
|
|
conf.env.asneeded_ldflags = conf.ADD_LDFLAGS('-Wl,--as-needed', testflags=True)
|
|
|
|
if not conf.CHECK_NEED_LC("-lc not needed"):
|
|
conf.ADD_LDFLAGS('-lc', testflags=False)
|
|
|
|
# we don't want PYTHONDIR in config.h, as otherwise changing
|
|
# --prefix causes a complete rebuild
|
|
del(conf.env.defines['PYTHONDIR'])
|
|
del(conf.env.defines['PYTHONARCHDIR'])
|
|
|
|
if not conf.CHECK_CODE('#include "tests/summary.c"',
|
|
define='SUMMARY_PASSES',
|
|
addmain=False,
|
|
execute=True,
|
|
msg='Checking configure summary'):
|
|
raise Utils.WafError('configure summary failed')
|
|
|
|
conf.SAMBA_CONFIG_H('include/config.h')
|
|
|
|
|
|
def etags(ctx):
|
|
'''build TAGS file using etags'''
|
|
import Utils
|
|
source_root = os.path.dirname(Utils.g_module.root_path)
|
|
cmd = 'etags $(find %s -name "*.[ch]" | egrep -v \.inst\.)' % source_root
|
|
print("Running: %s" % cmd)
|
|
os.system(cmd)
|
|
|
|
def ctags(ctx):
|
|
"build 'tags' file using ctags"
|
|
import Utils
|
|
source_root = os.path.dirname(Utils.g_module.root_path)
|
|
cmd = 'ctags --python-kinds=-i $(find %s -name "*.[ch]" | grep -v "*_proto\.h" | egrep -v \.inst\.) $(find %s -name "*.py")' % (source_root, source_root)
|
|
print("Running: %s" % cmd)
|
|
os.system(cmd)
|
|
|
|
# putting this here enabled build in the list
|
|
# of commands in --help
|
|
def build(bld):
|
|
'''build all targets'''
|
|
samba_version.load_version(env=bld.env, is_install=bld.is_install)
|
|
pass
|
|
|
|
|
|
def pydoctor(ctx):
|
|
'''build python apidocs'''
|
|
bp = os.path.abspath('bin/python')
|
|
mpaths = {}
|
|
for m in ['talloc', 'tdb', 'ldb']:
|
|
f = os.popen("PYTHONPATH=%s python -c 'import %s; print %s.__file__'" % (bp, m, m), 'r')
|
|
try:
|
|
mpaths[m] = f.read().strip()
|
|
finally:
|
|
f.close()
|
|
cmd='PYTHONPATH=%s pydoctor --introspect-c-modules --project-name=Samba --project-url=http://www.samba.org --make-html --docformat=restructuredtext --add-package bin/python/samba --add-module %s --add-module %s --add-module %s' % (
|
|
bp, mpaths['tdb'], mpaths['ldb'], mpaths['talloc'])
|
|
print("Running: %s" % cmd)
|
|
os.system(cmd)
|
|
|
|
|
|
def pep8(ctx):
|
|
'''run pep8 validator'''
|
|
cmd='PYTHONPATH=bin/python pep8 -r bin/python/samba'
|
|
print("Running: %s" % cmd)
|
|
os.system(cmd)
|
|
|
|
|
|
def wafdocs(ctx):
|
|
'''build wafsamba apidocs'''
|
|
from samba_utils import recursive_dirlist
|
|
os.system('pwd')
|
|
list = recursive_dirlist('../buildtools/wafsamba', '.', pattern='*.py')
|
|
|
|
cmd='PYTHONPATH=bin/python pydoctor --project-name=wafsamba --project-url=http://www.samba.org --make-html --docformat=restructuredtext'
|
|
print(list)
|
|
for f in list:
|
|
cmd += ' --add-module %s' % f
|
|
print("Running: %s" % cmd)
|
|
os.system(cmd)
|
|
|
|
|
|
def dist():
|
|
'''makes a tarball for distribution'''
|
|
samba_version.load_version(env=None)
|
|
samba_dist.dist()
|
|
|
|
def distcheck():
|
|
'''test that distribution tarball builds and installs'''
|
|
samba_version.load_version(env=None)
|
|
import Scripting
|
|
d = Scripting.distcheck
|
|
d(subdir='source4')
|
|
|
|
def wildcard_cmd(cmd):
|
|
'''called on a unknown command'''
|
|
from samba_wildcard import run_named_build_task
|
|
run_named_build_task(cmd)
|
|
|
|
def main():
|
|
from samba_wildcard import wildcard_main
|
|
wildcard_main(wildcard_cmd)
|
|
Scripting.main = main
|
|
|
|
def reconfigure(ctx):
|
|
'''reconfigure if config scripts have changed'''
|
|
import samba_utils
|
|
samba_utils.reconfigure(ctx)
|