summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-10-20 18:11:31 +1100
committerAndrew Tridgell <tridge@samba.org>2010-10-21 19:03:23 +1100
commitc0878cfb615d35fc3a62e45fa9ecab7f178ecb3c (patch)
tree765d8cf469c50f2bf4cb736890344f2d8e8a252b
parent14081efcc07e02a479ed3121a2359b9dd766a378 (diff)
downloadsamba-c0878cfb615d35fc3a62e45fa9ecab7f178ecb3c.tar.gz
samba-c0878cfb615d35fc3a62e45fa9ecab7f178ecb3c.tar.bz2
samba-c0878cfb615d35fc3a62e45fa9ecab7f178ecb3c.zip
waf: rework expand_subsystem_deps()
make the variable names a lot clearer, and restrict the expansion of subsystem deps to object style subsystems and modules. If a subsystem or a module is built as a library then we don't need to expand the dependencies across that boundary Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>
-rw-r--r--buildtools/wafsamba/samba_deps.py54
1 files changed, 36 insertions, 18 deletions
diff --git a/buildtools/wafsamba/samba_deps.py b/buildtools/wafsamba/samba_deps.py
index 2492a4c233..22d4efd6ad 100644
--- a/buildtools/wafsamba/samba_deps.py
+++ b/buildtools/wafsamba/samba_deps.py
@@ -47,30 +47,48 @@ Build.BuildContext.EXPAND_ALIAS = EXPAND_ALIAS
def expand_subsystem_deps(bld):
'''expand the reverse dependencies resulting from subsystem
- attributes of modules'''
- subsystems = LOCAL_CACHE(bld, 'INIT_FUNCTIONS')
+ attributes of modules. This is walking over the complete list
+ of declared subsystems, and expands the samba_deps_extended list for any
+ module<->subsystem dependencies'''
+
+ subsystem_list = LOCAL_CACHE(bld, 'INIT_FUNCTIONS')
aliases = LOCAL_CACHE(bld, 'TARGET_ALIAS')
targets = LOCAL_CACHE(bld, 'TARGET_TYPE')
- for s in subsystems:
- if s in aliases:
- s = aliases[s]
- bld.ASSERT(s in targets, "Subsystem target %s not declared" % s)
- type = targets[s]
+ for subsystem_name in subsystem_list:
+ if subsystem_name in aliases:
+ subsystem_name = aliases[subsystem_name]
+ bld.ASSERT(subsystem_name in targets, "Subsystem target %s not declared" % subsystem_name)
+ type = targets[subsystem_name]
if type == 'DISABLED' or type == 'EMPTY':
continue
- t = bld.name_to_obj(s, bld.env)
- for d in subsystems[s]:
- type = targets[d['TARGET']]
- if type != 'DISABLED' and type != 'EMPTY':
- bld.ASSERT(t is not None,
- "Subsystem target %s for %s (%s) not found" % (s, d['TARGET'], type))
- t.samba_deps_extended.append(d['TARGET'])
- t2 = bld.name_to_obj(d['TARGET'], bld.env)
- t2.samba_includes_extended.extend(t.samba_includes_extended)
- t2.samba_deps_extended.extend(t.samba_deps_extended)
- t.samba_deps_extended = unique_list(t.samba_deps_extended)
+ # for example,
+ # subsystem_name = dcerpc_server (a subsystem)
+ # subsystem = dcerpc_server (a subsystem object)
+ # module_name = rpc_epmapper (a module within the dcerpc_server subsystem)
+ # module = rpc_epmapper (a module object within the dcerpc_server subsystem)
+
+ subsystem = bld.name_to_obj(subsystem_name, bld.env)
+ for d in subsystem_list[subsystem_name]:
+ module_name = d['TARGET']
+ module_type = targets[module_name]
+ if module_type in ['DISABLED', 'EMPTY']:
+ continue
+ bld.ASSERT(subsystem is not None,
+ "Subsystem target %s for %s (%s) not found" % (subsystem_name, module_name, module_type))
+ if module_type in ['SUBSYSTEM']:
+ # if a module is a plain object type (not a library) then the
+ # subsystem it is part of needs to have it as a dependency, so targets
+ # that depend on this subsystem get the modules of that subsystem
+ subsystem.samba_deps_extended.append(module_name)
+ module = bld.name_to_obj(module_name, bld.env)
+ module.samba_includes_extended.extend(subsystem.samba_includes_extended)
+ if targets[subsystem_name] in ['SUBSYSTEM']:
+ # if a subsystem is a plain object type (not a library) then any modules
+ # in that subsystem need to depend on the subsystem
+ module.samba_deps_extended.extend(subsystem.samba_deps_extended)
+ subsystem.samba_deps_extended = unique_list(subsystem.samba_deps_extended)