From 9a243a791b2ebc2ca31ec109fd097e43463b30e7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 19 Mar 2010 18:07:39 +1100 Subject: build: rename samba_includes.py to samba_optimisation.py --- buildtools/wafsamba/samba_includes.py | 138 ---------------------------- buildtools/wafsamba/samba_optimisation.py | 144 ++++++++++++++++++++++++++++++ buildtools/wafsamba/wafsamba.py | 2 +- 3 files changed, 145 insertions(+), 139 deletions(-) delete mode 100644 buildtools/wafsamba/samba_includes.py create mode 100644 buildtools/wafsamba/samba_optimisation.py (limited to 'buildtools/wafsamba') diff --git a/buildtools/wafsamba/samba_includes.py b/buildtools/wafsamba/samba_includes.py deleted file mode 100644 index 8174bfffe5..0000000000 --- a/buildtools/wafsamba/samba_includes.py +++ /dev/null @@ -1,138 +0,0 @@ -# a includes processing tool to speed up include path calculations - -from TaskGen import feature, before, after -import preproc -import os - -kak = {} -@feature('cc', 'cxx') -@after('apply_type_vars', 'apply_lib_vars', 'apply_core') -def apply_incpaths(self): - lst = [] - # TODO move the uselib processing out of here - for lib in self.to_list(self.uselib): - for path in self.env['CPPPATH_' + lib]: - if not path in lst: - lst.append(path) - if preproc.go_absolute: - for path in preproc.standard_includes: - if not path in lst: - lst.append(path) - - for path in self.to_list(self.includes): - if not path in lst: - if preproc.go_absolute or path[0] != '/': #os.path.isabs(path): - lst.append(path) - else: - self.env.prepend_value('CPPPATH', path) - - for path in lst: - node = None - if path[0] == '/': # os.path.isabs(path): - if preproc.go_absolute: - node = self.bld.root.find_dir(path) - elif path[0] == '#': - node = self.bld.srcnode - if len(path) > 1: - try: - node = kak[path] - except KeyError: - kak[path] = node = node.find_dir(path[1:]) - else: - try: - node = kak[(self.path.id, path)] - except KeyError: - kak[(self.path.id, path)] = node = self.path.find_dir(path) - - if node: - self.env.append_value('INC_PATHS', node) - -cac = {} -@feature('cc') -@after('apply_incpaths') -def apply_obj_vars_cc(self): - """after apply_incpaths for INC_PATHS""" - env = self.env - app = env.append_unique - cpppath_st = env['CPPPATH_ST'] - - lss = env['_CCINCFLAGS'] - - global cac - - # local flags come first - # set the user-defined includes paths - for i in env['INC_PATHS']: - - try: - lss.extend(cac[i.id]) - except KeyError: - - cac[i.id] = [cpppath_st % i.bldpath(env), cpppath_st % i.srcpath(env)] - lss.extend(cac[i.id]) - - env['_CCINCFLAGS'] = lss - # set the library include paths - for i in env['CPPPATH']: - app('_CCINCFLAGS', cpppath_st % i) - -import Node, Environment - -def vari(self): - return "default" -Environment.Environment.variant = vari - -def variant(self, env): - if not env: return 0 - elif self.id & 3 == Node.FILE: return 0 - else: return "default" -Node.Node.variant = variant - - -import TaskGen, Task - -def create_task(self, name, src=None, tgt=None): - task = Task.TaskBase.classes[name](self.env, generator=self) - if src: - task.set_inputs(src) - if tgt: - task.set_outputs(tgt) - return task -TaskGen.task_gen.create_task = create_task - -def hash_constraints(self): - a = self.attr - sum = hash((str(a('before', '')), - str(a('after', '')), - str(a('ext_in', '')), - str(a('ext_out', '')), - self.__class__.maxjobs)) - return sum -Task.TaskBase.hash_constraints = hash_constraints - - -# import cc -# from TaskGen import extension -# import Utils - -# @extension(cc.EXT_CC) -# def c_hook(self, node): -# task = self.create_task('cc', node, node.change_ext('.o')) -# try: -# self.compiled_tasks.append(task) -# except AttributeError: -# raise Utils.WafError('Have you forgotten to set the feature "cc" on %s?' % str(self)) - -# bld = self.bld -# try: -# dc = bld.dc -# except AttributeError: -# dc = bld.dc = {} - -# if task.outputs[0].id in dc: -# raise Utils.WafError('Samba, you are doing it wrong %r %s %s' % (task.outputs, task.generator, dc[task.outputs[0].id].generator)) -# else: -# dc[task.outputs[0].id] = task - -# return task - diff --git a/buildtools/wafsamba/samba_optimisation.py b/buildtools/wafsamba/samba_optimisation.py new file mode 100644 index 0000000000..d95ddaaa81 --- /dev/null +++ b/buildtools/wafsamba/samba_optimisation.py @@ -0,0 +1,144 @@ +# This file contains waf optimisations for Samba + +# most of these optimisations are possible because of the restricted build environment +# that Samba has. For example, Samba doesn't attempt to cope with Win32 paths during the +# build, and Samba doesn't need build varients + +# overall this makes some build tasks quite a bit faster + +from TaskGen import feature, before, after +import preproc +import os + +kak = {} +@feature('cc', 'cxx') +@after('apply_type_vars', 'apply_lib_vars', 'apply_core') +def apply_incpaths(self): + lst = [] + # TODO move the uselib processing out of here + for lib in self.to_list(self.uselib): + for path in self.env['CPPPATH_' + lib]: + if not path in lst: + lst.append(path) + if preproc.go_absolute: + for path in preproc.standard_includes: + if not path in lst: + lst.append(path) + + for path in self.to_list(self.includes): + if not path in lst: + if preproc.go_absolute or path[0] != '/': #os.path.isabs(path): + lst.append(path) + else: + self.env.prepend_value('CPPPATH', path) + + for path in lst: + node = None + if path[0] == '/': # os.path.isabs(path): + if preproc.go_absolute: + node = self.bld.root.find_dir(path) + elif path[0] == '#': + node = self.bld.srcnode + if len(path) > 1: + try: + node = kak[path] + except KeyError: + kak[path] = node = node.find_dir(path[1:]) + else: + try: + node = kak[(self.path.id, path)] + except KeyError: + kak[(self.path.id, path)] = node = self.path.find_dir(path) + + if node: + self.env.append_value('INC_PATHS', node) + +cac = {} +@feature('cc') +@after('apply_incpaths') +def apply_obj_vars_cc(self): + """after apply_incpaths for INC_PATHS""" + env = self.env + app = env.append_unique + cpppath_st = env['CPPPATH_ST'] + + lss = env['_CCINCFLAGS'] + + global cac + + # local flags come first + # set the user-defined includes paths + for i in env['INC_PATHS']: + + try: + lss.extend(cac[i.id]) + except KeyError: + + cac[i.id] = [cpppath_st % i.bldpath(env), cpppath_st % i.srcpath(env)] + lss.extend(cac[i.id]) + + env['_CCINCFLAGS'] = lss + # set the library include paths + for i in env['CPPPATH']: + app('_CCINCFLAGS', cpppath_st % i) + +import Node, Environment + +def vari(self): + return "default" +Environment.Environment.variant = vari + +def variant(self, env): + if not env: return 0 + elif self.id & 3 == Node.FILE: return 0 + else: return "default" +Node.Node.variant = variant + + +import TaskGen, Task + +def create_task(self, name, src=None, tgt=None): + task = Task.TaskBase.classes[name](self.env, generator=self) + if src: + task.set_inputs(src) + if tgt: + task.set_outputs(tgt) + return task +TaskGen.task_gen.create_task = create_task + +def hash_constraints(self): + a = self.attr + sum = hash((str(a('before', '')), + str(a('after', '')), + str(a('ext_in', '')), + str(a('ext_out', '')), + self.__class__.maxjobs)) + return sum +Task.TaskBase.hash_constraints = hash_constraints + + +# import cc +# from TaskGen import extension +# import Utils + +# @extension(cc.EXT_CC) +# def c_hook(self, node): +# task = self.create_task('cc', node, node.change_ext('.o')) +# try: +# self.compiled_tasks.append(task) +# except AttributeError: +# raise Utils.WafError('Have you forgotten to set the feature "cc" on %s?' % str(self)) + +# bld = self.bld +# try: +# dc = bld.dc +# except AttributeError: +# dc = bld.dc = {} + +# if task.outputs[0].id in dc: +# raise Utils.WafError('Samba, you are doing it wrong %r %s %s' % (task.outputs, task.generator, dc[task.outputs[0].id].generator)) +# else: +# dc[task.outputs[0].id] = task + +# return task + diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index c0d428e507..f17f1a0c57 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -6,7 +6,7 @@ from Configure import conf from Logs import debug # bring in the other samba modules -from samba_includes import * +from samba_optimisation import * from samba_utils import * from samba_autoconf import * from samba_patterns import * -- cgit