1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-15 23:24:37 +03:00
samba-mirror/wscript
Alexander Bokovoy 4291fdcf39 waf: move krb5 checks to a separate waf file
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>
2012-04-23 16:38:43 -04:00

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)