diff options
Diffstat (limited to 'buildtools/wafsamba/wafsamba.py')
-rw-r--r-- | buildtools/wafsamba/wafsamba.py | 242 |
1 files changed, 4 insertions, 238 deletions
diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 54c1235ef3..5d5d4e5de3 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -6,189 +6,12 @@ from Configure import conf from Logs import debug from TaskGen import extension -LIB_PATH="shared" - -###################################################### -# this is used as a decorator to make functions only -# run once. Based on the idea from -# http://stackoverflow.com/questions/815110/is-there-a-decorator-to-simply-cache-function-return-values -runonce_ret = {} -def runonce(function): - def wrapper(*args): - if args in runonce_ret: - return runonce_ret[args] - else: - ret = function(*args) - runonce_ret[args] = ret - return ret - return wrapper - - -#################################################### -# some autoconf like helpers, to make the transition -# to waf a bit easier for those used to autoconf -# m4 files -@runonce -@conf -def DEFINE(conf, d, v): - conf.define(d, v, quote=False) - conf.env.append_value('CCDEFINES', d + '=' + str(v)) - -@runonce -def CHECK_HEADER(conf, h): - if conf.check(header_name=h): - conf.env.hlist.append(h) - -@conf -def CHECK_HEADERS(conf, list): - for hdr in list.split(): - CHECK_HEADER(conf, hdr) - -@conf -def CHECK_TYPES(conf, list): - for t in list.split(): - conf.check(type_name=t, header_name=conf.env.hlist) - -@conf -def CHECK_TYPE_IN(conf, t, hdr): - if conf.check(header_name=hdr): - conf.check(type_name=t, header_name=hdr) - -@conf -def CHECK_TYPE(conf, t, alternate): - if not conf.check(type_name=t, header_name=conf.env.hlist): - conf.DEFINE(t, alternate) - -@conf -def CHECK_VARIABLE(conf, v): - hdrs='' - for h in conf.env.hlist: - hdrs += '#include <%s>\n' % h - if conf.check(fragment= - '%s\nint main(void) {void *_x; _x=(void *)&%s; return 0;}\n' % (hdrs, v), - execute=0, - msg="Checking for variable %s" % v): - conf.DEFINE('HAVE_%s' % v.upper(), 1) - -@runonce -def CHECK_FUNC(conf, f): - conf.check(function_name=f, header_name=conf.env.hlist) - - -@conf -def CHECK_FUNCS(conf, list): - for f in list.split(): - CHECK_FUNC(conf, f) - - -################################################# -# return True if a configuration option was found -@conf -def CONFIG_SET(conf, option): - return (option in conf.env) and (conf.env[option] != ()) -Build.BuildContext.CONFIG_SET = CONFIG_SET - - -########################################################### -# check that the functions in 'list' are available in 'library' -# if they are, then make that library available as a dependency -# -# if the library is not available and mandatory==True, then -# raise an error. -# -# If the library is not available and mandatory==False, then -# add the library to the list of dependencies to remove from -# build rules -@conf -def CHECK_FUNCS_IN(conf, list, library, mandatory=False): - if not conf.check(lib=library, uselib_store=library): - conf.ASSERT(not mandatory, - "Mandatory library '%s' not found for functions '%s'" % (library, list)) - # if it isn't a mandatory library, then remove it from dependency lists - LOCAL_CACHE_SET(conf, 'EMPTY_TARGETS', library.upper(), True) - return - for f in list.split(): - conf.check(function_name=f, lib=library, header_name=conf.env.hlist) - conf.env['LIB_' + library.upper()] = library - LOCAL_CACHE_SET(conf, 'TARGET_TYPE', library, 'SYSLIB') - - -################################################# -# write out config.h in the right directory -@conf -def SAMBA_CONFIG_H(conf, path=None): - if os.path.normpath(conf.curdir) != os.path.normpath(os.environ.get('PWD')): - return - if path is None: - conf.write_config_header('config.h', top=True) - else: - conf.write_config_header(path) - - -############################################################## -# setup a configurable path -@conf -def CONFIG_PATH(conf, name, default): - if not name in conf.env: - conf.env[name] = conf.env['PREFIX'] + default - conf.define(name, conf.env[name], quote=True) - -############################################################## -# add some CFLAGS to the command line -@conf -def ADD_CFLAGS(conf, flags): - if not 'EXTRA_CFLAGS' in conf.env: - conf.env['EXTRA_CFLAGS'] = [] - conf.env['EXTRA_CFLAGS'].extend(flags.split()) - - -############################################################## -# work out the current flags. local flags are added first -def CURRENT_CFLAGS(bld, cflags): - if not 'EXTRA_CFLAGS' in bld.env: - list = [] - else: - list = bld.env['EXTRA_CFLAGS']; - ret = cflags.split() - ret.extend(list) - return ret - - -################################################################ -# magic rpath handling -# -# we want a different rpath when installing and when building -# Note that this should really check if rpath is available on this platform -# and it should also honor an --enable-rpath option -def set_rpath(bld): - if Options.is_install: - if bld.env['RPATH_ON_INSTALL']: - bld.env['RPATH'] = ['-Wl,-rpath=%s/lib' % bld.env.PREFIX] - else: - bld.env['RPATH'] = [] - else: - rpath = os.path.normpath('%s/%s' % (bld.env['BUILD_DIRECTORY'], LIB_PATH)) - bld.env.append_value('RPATH', '-Wl,-rpath=%s' % rpath) -Build.BuildContext.set_rpath = set_rpath - - -############################################################# -# return a named build cache dictionary, used to store -# state inside the following functions -@conf -def LOCAL_CACHE(ctx, name): - if name in ctx.env: - return ctx.env[name] - ctx.env[name] = {} - return ctx.env[name] +# bring in the other samba modules +from samba_utils import * +from samba_autoconf import * +LIB_PATH="shared" -############################################################# -# set a value in a local cache -@conf -def LOCAL_CACHE_SET(ctx, cachename, key, value): - cache = LOCAL_CACHE(ctx, cachename) - cache[key] = value ############################################################# # set a value in a local cache @@ -215,24 +38,6 @@ def SET_TARGET_TYPE(ctx, target, value): return True -############################################################# -# a build assert call -@conf -def ASSERT(ctx, expression, msg): - if not expression: - sys.stderr.write("ERROR: %s\n" % msg) - raise AssertionError -Build.BuildContext.ASSERT = ASSERT - -################################################################ -# create a list of files by pre-pending each with a subdir name -def SUBDIR(bld, subdir, list): - ret = '' - for l in list.split(): - ret = ret + subdir + '/' + l + ' ' - return ret -Build.BuildContext.SUBDIR = SUBDIR - ################################################################# # create the samba build environment @conf @@ -260,13 +65,6 @@ def ADD_INIT_FUNCTION(bld, subsystem, init_function): cache[subsystem] += '%s,' % init_function Build.BuildContext.ADD_INIT_FUNCTION = ADD_INIT_FUNCTION -####################################################### -# d1 += d2 -def dict_concat(d1, d2): - for t in d2: - if t not in d1: - d1[t] = d2[t] - ################################################################ # recursively build the dependency list for a target def FULL_DEPENDENCIES(bld, cache, target, chain, path): @@ -788,28 +586,6 @@ def BUILD_SUBDIR(bld, dir): Build.BuildContext.BUILD_SUBDIR = BUILD_SUBDIR -############################################################ -# this overrides the 'waf -v' debug output to be in a nice -# unix like format instead of a python list. -# Thanks to ita on #waf for this -def exec_command(self, cmd, **kw): - import Utils, Logs - _cmd = cmd - if isinstance(cmd, list): - _cmd = ' '.join(cmd) - debug('runner: %s' % _cmd) - if self.log: - self.log.write('%s\n' % cmd) - kw['log'] = self.log - try: - if not kw.get('cwd', None): - kw['cwd'] = self.cwd - except AttributeError: - self.cwd = kw['cwd'] = self.bldnode.abspath() - return Utils.exec_command(cmd, **kw) -Build.BuildContext.exec_command = exec_command - - ########################################################## # add a new top level command to waf def ADD_COMMAND(opt, name, function): @@ -840,13 +616,3 @@ def SET_BUILD_GROUP(bld, group): bld.set_group(group) Build.BuildContext.SET_BUILD_GROUP = SET_BUILD_GROUP - -#import TaskGen, Task -# -#old_post_run = Task.Task.post_run -#def new_post_run(self): -# self.cached = True -# return old_post_run(self) -# -#for y in ['cc', 'cxx']: -# TaskGen.classes[y].post_run = new_post_run |