diff --git a/wscript b/wscript
index 4fff2b73b88fa51ba4ba2247e1d79006f00884d4..b22e3a2e9f528a898e26b463854d839453e03e00 100644
--- a/wscript
+++ b/wscript
@@ -8,24 +8,31 @@ from waflib.extras.test_base import summary
 from waflib.extras.symwaf2ic import get_toplevel_path
 from waflib.extras.symwaf2ic import describe_project
 
-_dependencies = [
-        {'project': 'sctrltp'},
-        {'project': 'rant'},
-        {'project': 'hate'},
-        {'project': 'hwdb'},
-        {'project': 'code-format'},
-        {'project': 'logger'},
-        {'project': 'visions-slurm', 'branch': 'production'},
-        {'project': 'flange'},
-        {'project': 'lib-rcf'},
-        {'project': 'bss-hw-params'},
-        {'project': 'nhtl-extoll'},
-    ]
-
 
 def depends(dep):
-    for dependency in _dependencies:
-        dep(**dependency)
+    dep('sctrltp')
+    dep('rant')
+    dep('hate')
+    dep('hwdb')
+    dep('code-format')
+    dep('logger')
+    dep('visions-slurm', branch='production')
+    dep('flange')
+    dep('lib-rcf')
+    dep('bss-hw-params')
+    dep('nhtl-extoll')
+
+    def recurse(deps, name, alldeps):
+        for subname in deps[name]:
+            if subname not in alldeps:
+                alldeps.add(subname)
+                recurse(deps, subname, alldeps)
+    alldeps = set()
+    recurse(dep.dependencies, dep.path.abspath(), alldeps)
+
+    global _dependencies
+    _dependencies = set(
+        ctx.replace(dep.toplevel.abspath() + "/", "").split("/")[0] for ctx  in alldeps)
 
 
 def options(opt):
@@ -74,7 +81,7 @@ def configure(conf):
          'error':   '4',
          'fatal':   '5'}[conf.options.hxcomm_loglevel],
         'HXCOMM_REPO_STATE="' + "; ".join([
-            describe_project(conf, dep['project']).replace('"', '\\"') for dep in _dependencies] +
+            describe_project(conf, dep).replace('"', '\\"') for dep in _dependencies] +
             [describe_project(conf, 'hxcomm').replace('"', '\\"') + '"'])
     ]
     conf.env.CXXFLAGS_HXCOMM = [
@@ -262,7 +269,7 @@ def build(bld):
     if bld.env.build_with_quiggeldy:
         use_quiggeldy = ["hxcomm", "BOOST4QUIGGELDY", "PTHREAD"] + use_munge
 
-        project_states = "\\n".join(sorted(map(lambda d: "* " + bld.describe_project(d["project"]), _dependencies)))
+        project_states = "\\n".join(sorted(map(lambda d: "* " + bld.describe_project(d), _dependencies)))
         quiggeldy_version_string = "* {}\\n{}".format(
             bld.describe_project("hxcomm"), project_states)