summaryrefslogtreecommitdiff
path: root/buildtools/wafsamba/samba_optimisation.py
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-03-19 18:07:39 +1100
committerAndrew Tridgell <tridge@samba.org>2010-04-06 20:26:54 +1000
commit9a243a791b2ebc2ca31ec109fd097e43463b30e7 (patch)
treea4bb1e33fb6f9e8cea55ed8a207d1d9652eaf450 /buildtools/wafsamba/samba_optimisation.py
parent8caac7a1a32c69474dd8b74d1ab8181c8f6c74f0 (diff)
downloadsamba-9a243a791b2ebc2ca31ec109fd097e43463b30e7.tar.gz
samba-9a243a791b2ebc2ca31ec109fd097e43463b30e7.tar.bz2
samba-9a243a791b2ebc2ca31ec109fd097e43463b30e7.zip
build: rename samba_includes.py to samba_optimisation.py
Diffstat (limited to 'buildtools/wafsamba/samba_optimisation.py')
-rw-r--r--buildtools/wafsamba/samba_optimisation.py144
1 files changed, 144 insertions, 0 deletions
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
+