+def packages_from_source(act, tree):
+ (rc, output) = subprocess_cooked(['dh_listpackages'],
+ stdout=subprocess.PIPE, cwd=tree.read(True))
+ if rc: badpkg('failed to parse packages built from source, code %d' % rc)
+
+ # filter out empty lines
+ packages = [p for p in output.split() if p]
+
+ # filter out udebs
+ control_af = RelativeInputFile(act.what+'-control',
+ tree, 'debian/control')
+ for st in read_stanzas(control_af):
+ if 'Package' not in st:
+ # source stanza
+ continue
+ if 'Xc-package-type' in st:
+ try:
+ packages.remove(st['Package'][0][1])
+ except ValueError:
+ pass
+
+ return packages
+