[pkg-fgfs-crew] r118 - /simgear/trunk/debian/deps.py
ovek at users.alioth.debian.org
ovek at users.alioth.debian.org
Tue Jan 11 02:40:27 UTC 2011
Author: ovek
Date: Tue Jan 11 02:40:26 2011
New Revision: 118
URL: http://svn.debian.org/wsvn/pkg-fgfs/?sc=1&rev=118
Log:
Made debian/deps.py know a lot more about circular dependencies.
Modified:
simgear/trunk/debian/deps.py
Modified: simgear/trunk/debian/deps.py
URL: http://svn.debian.org/wsvn/pkg-fgfs/simgear/trunk/debian/deps.py?rev=118&op=diff
==============================================================================
--- simgear/trunk/debian/deps.py (original)
+++ simgear/trunk/debian/deps.py Tue Jan 11 02:40:26 2011
@@ -39,8 +39,11 @@
else:
defs[toks[0]] = sof
+sodeps = {}
for sof in sofiles:
if not sof.startswith('simgear/'):
+ continue
+ if sof == "simgear/nasal/libsgnasal.so":
continue
dp = {}
miss = []
@@ -65,16 +68,85 @@
odp.sort()
edp.sort()
deps = sdp + odp + edp
-
- print "%s: %s" % (sof, sof[:-3] + ".a"),
+ sodeps[sof] = deps
if debug:
+ print "%s:" % sof,
for dep in deps:
s = dp[dep]
print "%s [%s]" % (dep, " ".join(s)),
print
- print
- else:
- print " ".join(deps)
+
+if debug:
+ print
+
+ruledrops = {}
+for line in open("debian/sorules"):
+ if line.startswith("# "):
+ idx = line.find(": dropped ")
+ if idx != -1:
+ sof = line[2:idx]
+ deps = line[idx+10:].rstrip().split(", ")
+ ruledrops[sof] = deps
+
+def shorten(sof):
+ idx = sof.rfind("/lib")
+ return sof[idx+4:-3]
+
+def check_cycle(robj, obj, visit):
+ if obj in visit:
+ if obj == robj:
+ return [shorten(obj)], []
+ else:
+ return [], []
+ deps = sodeps.get(obj)
+ drop = ruledrops.get(shorten(obj))
+ cycles = []
+ drops = []
+ if deps is None:
+ return cycles, drops
+ rvisit = visit + [obj]
+ for dep in deps:
+ rcycles, rdrops = check_cycle(robj, dep, rvisit)
+ if rcycles:
+ if drop is not None and shorten(dep) in drop:
+ drops.append(shorten(dep))
+ else:
+ for cycle in rcycles:
+ cycles.append(shorten(obj) + " <= " + cycle)
+ return cycles, drops
+
+def apply_drop(deps, drop):
+ rdeps = []
+ for dep in deps:
+ if shorten(dep) not in drop:
+ rdeps.append(dep)
+ return rdeps
+
+cycles = []
+sodrops = {}
+for sof in sofiles:
+ if not sodeps.has_key(sof):
+ continue
+ rcycles, rdrops = check_cycle(sof, sof, [])
+ cycles.extend(rcycles)
+ if rdrops:
+ sodrops[sof] = rdrops
+ sodeps[sof] = apply_drop(sodeps[sof], rdrops)
+
+if len(cycles):
+ print "Unresolved circular dependencies:"
+ for cycle in cycles:
+ print cycle
+ print
+
+for sof in sofiles:
+ if not sodeps.has_key(sof):
+ continue
+ deps = sodeps[sof]
+ if sodrops.has_key(sof):
+ print "# %s: dropped %s" % (shorten(sof), ", ".join(sodrops[sof]))
+ print "%s: %s" % (sof, sof[:-3] + ".a"),
+ print " ".join(deps)
# if len(miss):
# print " Undefined:", " ".join(miss)
More information about the pkg-fgfs-crew
mailing list