summaryrefslogtreecommitdiff
path: root/source4/wscript
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-03-17 10:58:07 +1100
committerAndrew Tridgell <tridge@samba.org>2010-04-06 20:26:50 +1000
commite6f7a13a17b30d2a266924d8099c77ea47f4d500 (patch)
treee3a14507652e6c51a844fb35ccc28515a84ed26e /source4/wscript
parente4104eb085d579893a5bb5e5ae8ee02804dc7cfd (diff)
downloadsamba-e6f7a13a17b30d2a266924d8099c77ea47f4d500.tar.gz
samba-e6f7a13a17b30d2a266924d8099c77ea47f4d500.tar.bz2
samba-e6f7a13a17b30d2a266924d8099c77ea47f4d500.zip
build: try faster includes processing
Diffstat (limited to 'source4/wscript')
-rw-r--r--source4/wscript81
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)