1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
## This utility takes the debian directory from an unpacked debian mono source
## tree (e.g. apt-get source mono), parses the *.install files and generates a
## bitbake include file with the file and package lists. It tries to handle -dbg
## packages by creating additional glob patterns for *.mdb and */.debug/*. Most
## of these will not match, but that's fine (I think).
## -- Henryk Plötz <henryk@openmoko.org>
##
##The output looks like:
##FILES_mono-jit-dbg = "/usr/bin/mono*.mdb \
## /usr/bin/mono*/*.mdb"
##FILES_mono-jit = "/usr/bin/mono"
##FILES_mono-gac-dbg = "/usr/bin/gacutil*.mdb \
## /usr/bin/gacutil*/*.mdb \
## /usr/lib/mono/1.0/gacutil.exe*.mdb \
## /usr/lib/mono/1.0/gacutil.exe*/*.mdb"
##FILES_mono-gac = "/usr/bin/gacutil \
## /usr/lib/mono/1.0/gacutil.exe"
## ...
##PACKAGES = "mono-jit-dbg \
## mono-jit \
## mono-gac-dbg \
## mono-gac \
## ...
import os, sys, re
def collect_paths(dir):
paths = {}
os.chdir(dir)
for filename in os.listdir("."):
if filename.endswith(".install"):
fp = file(filename, "r")
lines = fp.readlines()
fp.close()
contents = []
for line in lines:
line = line.strip()
if line.startswith("#"): continue
if line == "": continue
lineparts = line.split()
if lineparts[0].startswith("debian/tmp"):
pattern = lineparts[0][ len("debian/tmp"): ]
if len(lineparts) == 2:
if not pattern.startswith(lineparts[1]):
print >>sys.stderr, "Warning: Apparently I don't fully understand the format in file %s" % filename
elif len(lineparts) > 2:
print >>sys.stderr, "Warning: Apparently I don't fully understand the format in file %s" % filename
contents.append( pattern )
else:
print >>sys.stderr, "Note: Ignoring %s in %s" % (lineparts, filename)
paths[ filename[ :-len(".install") ] ] = contents
return paths
def collect_packages(paths):
# These packages should be populated first (e.g. because their files will otherwise end up
# in other packages)
PACKAGES_FIRST = ("mono-jit", "mono-gac", "mono-mjs", "mono-gmcs", "mono-utils", "mono-doc")
# These should be populated last (because their spec is very broad)
PACKAGES_LAST = ("mono-mcs", "libmono-system1.0-cil", "libmono-system2.0-cil", "libmono1.0-cil", "libmono2.0-cil")
first = []
last = []
packages = paths.keys()
for packagename in PACKAGES_FIRST + PACKAGES_LAST:
if packagename in packages:
packages.remove(packagename)
if packagename in PACKAGES_FIRST:
first.append(packagename)
else:
last.append(packagename)
packagenames = first + packages + last
return packagenames, paths
def debugify(packagenames, paths):
pnames = []
for pkg in packagenames:
if not pkg.endswith("-dbg"):
result = []
for path in paths[pkg]:
if not path.endswith("*"):
result.append(path + "*.mdb")
result.append(path + "*/*.mdb")
else:
result.append(path + ".mdb")
result.append(path + "/*.mdb")
if path.endswith("/"):
result.append(path + ".debug/")
result.append(path + "../.debug/")
paths[pkg + "-dbg"] = result
pnames.append(pkg + "-dbg")
pnames.append(pkg)
return pnames, paths
if __name__ == "__main__":
packagenames, paths = collect_packages( collect_paths(".") )
packagenames, paths = debugify(packagenames, paths)
print "# This is a generated file, please do not edit directly"
print "# Use collect-files.py instead. -- Henryk <henryk@openmoko.org>"
packages = []
for pkg in packagenames:
if not paths[pkg]: continue
print 'FILES_%s = "%s"' % (pkg, " \\\n\t".join(paths[pkg]))
packages.append(pkg)
print
print 'PACKAGES = "%s"' % (" \\\n\t".join(packages))
|