libwbclient: Fix wbcListGroups against too small num_entries
[Samba/ekacnet.git] / buildtools / wafsamba / samba_optimisation.py
blob8e8012c9551bf5520ba1ce571a59a21ca5649af7
1 # This file contains waf optimisations for Samba
3 # most of these optimisations are possible because of the restricted build environment
4 # that Samba has. For example, Samba doesn't attempt to cope with Win32 paths during the
5 # build, and Samba doesn't need build varients
7 # overall this makes some build tasks quite a bit faster
9 from TaskGen import feature, after
10 import preproc
12 kak = {}
13 @feature('cc', 'cxx')
14 @after('apply_type_vars', 'apply_lib_vars', 'apply_core')
15 def apply_incpaths(self):
16 lst = []
17 # TODO move the uselib processing out of here
18 for lib in self.to_list(self.uselib):
19 for path in self.env['CPPPATH_' + lib]:
20 if not path in lst:
21 lst.append(path)
22 if preproc.go_absolute:
23 for path in preproc.standard_includes:
24 if not path in lst:
25 lst.append(path)
27 for path in self.to_list(self.includes):
28 if not path in lst:
29 if preproc.go_absolute or path[0] != '/': #os.path.isabs(path):
30 lst.append(path)
31 else:
32 self.env.prepend_value('CPPPATH', path)
34 for path in lst:
35 node = None
36 if path[0] == '/': # os.path.isabs(path):
37 if preproc.go_absolute:
38 node = self.bld.root.find_dir(path)
39 elif path[0] == '#':
40 node = self.bld.srcnode
41 if len(path) > 1:
42 try:
43 node = kak[path]
44 except KeyError:
45 kak[path] = node = node.find_dir(path[1:])
46 else:
47 try:
48 node = kak[(self.path.id, path)]
49 except KeyError:
50 kak[(self.path.id, path)] = node = self.path.find_dir(path)
52 if node:
53 self.env.append_value('INC_PATHS', node)
55 cac = {}
56 @feature('cc')
57 @after('apply_incpaths')
58 def apply_obj_vars_cc(self):
59 """after apply_incpaths for INC_PATHS"""
60 env = self.env
61 app = env.append_unique
62 cpppath_st = env['CPPPATH_ST']
64 lss = env['_CCINCFLAGS']
66 global cac
68 # local flags come first
69 # set the user-defined includes paths
70 for i in env['INC_PATHS']:
72 try:
73 lss.extend(cac[i.id])
74 except KeyError:
76 cac[i.id] = [cpppath_st % i.bldpath(env), cpppath_st % i.srcpath(env)]
77 lss.extend(cac[i.id])
79 env['_CCINCFLAGS'] = lss
80 # set the library include paths
81 for i in env['CPPPATH']:
82 app('_CCINCFLAGS', cpppath_st % i)
84 import Node, Environment
86 def vari(self):
87 return "default"
88 Environment.Environment.variant = vari
90 def variant(self, env):
91 if not env: return 0
92 elif self.id & 3 == Node.FILE: return 0
93 else: return "default"
94 Node.Node.variant = variant
97 import TaskGen, Task
99 def create_task(self, name, src=None, tgt=None):
100 task = Task.TaskBase.classes[name](self.env, generator=self)
101 if src:
102 task.set_inputs(src)
103 if tgt:
104 task.set_outputs(tgt)
105 return task
106 TaskGen.task_gen.create_task = create_task
108 def hash_constraints(self):
109 a = self.attr
110 sum = hash((str(a('before', '')),
111 str(a('after', '')),
112 str(a('ext_in', '')),
113 str(a('ext_out', '')),
114 self.__class__.maxjobs))
115 return sum
116 Task.TaskBase.hash_constraints = hash_constraints
119 # import cc
120 # from TaskGen import extension
121 # import Utils
123 # @extension(cc.EXT_CC)
124 # def c_hook(self, node):
125 # task = self.create_task('cc', node, node.change_ext('.o'))
126 # try:
127 # self.compiled_tasks.append(task)
128 # except AttributeError:
129 # raise Utils.WafError('Have you forgotten to set the feature "cc" on %s?' % str(self))
131 # bld = self.bld
132 # try:
133 # dc = bld.dc
134 # except AttributeError:
135 # dc = bld.dc = {}
137 # if task.outputs[0].id in dc:
138 # raise Utils.WafError('Samba, you are doing it wrong %r %s %s' % (task.outputs, task.generator, dc[task.outputs[0].id].generator))
139 # else:
140 # dc[task.outputs[0].id] = task
142 # return task