diff options
author | Andrew Tridgell <tridge@samba.org> | 2010-03-17 10:58:07 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2010-04-06 20:26:50 +1000 |
commit | e6f7a13a17b30d2a266924d8099c77ea47f4d500 (patch) | |
tree | e3a14507652e6c51a844fb35ccc28515a84ed26e /source4/wscript | |
parent | e4104eb085d579893a5bb5e5ae8ee02804dc7cfd (diff) | |
download | samba-e6f7a13a17b30d2a266924d8099c77ea47f4d500.tar.gz samba-e6f7a13a17b30d2a266924d8099c77ea47f4d500.tar.bz2 samba-e6f7a13a17b30d2a266924d8099c77ea47f4d500.zip |
build: try faster includes processing
Diffstat (limited to 'source4/wscript')
-rw-r--r-- | source4/wscript | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/source4/wscript b/source4/wscript index aecea2df5f..bac4e06aec 100644 --- a/source4/wscript +++ b/source4/wscript @@ -63,3 +63,84 @@ def configure(conf): conf.sub_config('lib/smbreadline') conf.SAMBA_CONFIG_H('include/config.h') + + + +from TaskGen import feature, before, after + +kak = {} +@feature('cc', 'cxx') +@after('apply_type_vars', 'apply_lib_vars', 'apply_core') +def apply_incpaths(self): + """used by the scanner + after processing the uselib for CPPPATH + after apply_core because some processing may add include paths + """ + 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: + try: + #print len(kak.items()) + node = kak[(self.path.id, path)] + except KeyError: + + 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: + node = node.find_dir(path[1:]) + else: + node = self.path.find_dir(path) + + kak[(self.path.id, path)] = node + if node: + self.env.append_value('INC_PATHS', node) + # TODO WAF 1.6 + if USE_TOP_LEVEL: + self.env.append_value('INC_PATHS', self.bld.srcnode) + + + +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) |