From 7c35b9ca70684cc515e93cd2232ce1338e667fe1 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 17 Mar 2010 11:48:44 +1100 Subject: build: an optimisation for includes file handling This optimisation makes waf include file handling more efficient --- buildtools/wafsamba/samba_includes.py | 76 +++++++++++++++++++++++++++++++++++ buildtools/wafsamba/wafsamba.py | 3 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 buildtools/wafsamba/samba_includes.py (limited to 'buildtools/wafsamba') diff --git a/buildtools/wafsamba/samba_includes.py b/buildtools/wafsamba/samba_includes.py new file mode 100644 index 0000000000..3331713f80 --- /dev/null +++ b/buildtools/wafsamba/samba_includes.py @@ -0,0 +1,76 @@ +# 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 not os.path.isabs(path): + lst.append(path) + else: + self.env.prepend_value('CPPPATH', path) + + for path in lst: + node = None + if 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'] + + global cac + + # local flags come first + # set the user-defined includes paths + for i in env['INC_PATHS']: + + try: + app('_CCINCFLAGS', cac[i.id]) + except KeyError: + cac[i.id] = [cpppath_st % i.bldpath(env), cpppath_st % i.srcpath(env)] + app('_CCINCFLAGS', cac[i.id]) + + # set the library include paths + for i in env['CPPPATH']: + app('_CCINCFLAGS', cpppath_st % i) + + + diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 302e0676b1..194aa58b25 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -1,11 +1,12 @@ # a waf tool to add autoconf-like macros to the configure section # and for SAMBA_ macros for building libraries, binaries etc -import Build, os, Options, Task, Utils +import Build, os, Options, Task, Utils, cc from Configure import conf from Logs import debug # bring in the other samba modules +from samba_includes import * from samba_utils import * from samba_autoconf import * from samba_patterns import * -- cgit