[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