summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-03-17 11:48:44 +1100
committerAndrew Tridgell <tridge@samba.org>2010-04-06 20:26:50 +1000
commit7c35b9ca70684cc515e93cd2232ce1338e667fe1 (patch)
treeb699cfd572d9d1158f79de944701b805a2508bed
parentfb2d78954d1cd73e214589c92de8a05e24ecef14 (diff)
downloadsamba-7c35b9ca70684cc515e93cd2232ce1338e667fe1.tar.gz
samba-7c35b9ca70684cc515e93cd2232ce1338e667fe1.tar.bz2
samba-7c35b9ca70684cc515e93cd2232ce1338e667fe1.zip
build: an optimisation for includes file handling
This optimisation makes waf include file handling more efficient
-rw-r--r--buildtools/wafsamba/samba_includes.py76
-rw-r--r--buildtools/wafsamba/wafsamba.py3
2 files changed, 78 insertions, 1 deletions
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 *