aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Blundell <philb@gnu.org>2004-11-28 11:57:07 +0000
committerPhil Blundell <philb@gnu.org>2004-11-28 11:57:07 +0000
commiteece1ffe92678310dd7103076f6f3597ab4199a4 (patch)
tree2399fd370df76531a8d7c8cceb7bfd387567b651
parent4d679fc4c8fc54e7f5c28b0eba92880557b437b9 (diff)
downloadbitbake-eece1ffe92678310dd7103076f6f3597ab4199a4.tar.gz
add 'oemake -s' option to dump out a table of latest and preferred versions for all packages
-rw-r--r--bin/oemake107
1 files changed, 106 insertions, 1 deletions
diff --git a/bin/oemake b/bin/oemake
index fa22f38eb..46fa7da60 100644
--- a/bin/oemake
+++ b/bin/oemake
@@ -71,6 +71,9 @@ Default OEFILES are the .oe files in the current directory.""" )
parser.add_option( "-d", "--disable-psyco", help = "disable using the psyco just-in-time compiler (not recommended)",
action = "store_true", dest = "disable_psyco", default = False )
+ parser.add_option( "-s", "--show-versions", help = "show current and preferred versions of all packages",
+ action = "store_true", dest = "show_versions", default = False )
+
options, args = parser.parse_args( args )
return options, args[1:]
@@ -143,6 +146,103 @@ def try_build(fn, virtual):
__building_list.remove(fn)
__build_path.remove(pathstr)
+def showVersions():
+ pkg_pn = {}
+ preferred_versions = {}
+ latest_versions = {}
+
+ for p in make.pkgdata.keys():
+ pn = oe.data.getVar('PN', make.pkgdata[p], 1)
+ if not pkg_pn.has_key(pn):
+ pkg_pn[pn] = []
+ pkg_pn[pn].append(p)
+
+ # Sort by priority
+ for pn in pkg_pn.keys():
+ files = pkg_pn[pn]
+ priorities = {}
+ for f in files:
+ priority = oefile_priority[f]
+ if not priorities.has_key(priority):
+ priorities[priority] = []
+ priorities[priority].append(f)
+ p_list = priorities.keys()
+ p_list.sort(lambda a, b: a - b)
+ pkg_pn[pn] = []
+ for p in p_list:
+ pkg_pn[pn] = [ priorities[p] ] + pkg_pn[pn]
+
+ # If there is a PREFERRED_VERSION, find the highest-priority oefile providing that
+ # version. If not, find the latest version provided by an oefile in the
+ # highest-priority set.
+ for pn in pkg_pn.keys():
+ preferred_file = None
+
+ preferred_v = oe.data.getVar('PREFERRED_VERSION_%s' % pn, make.cfg, 1)
+ if preferred_v:
+ preferred_r = None
+ m = re.match('(.*)_(.*)', preferred_v)
+ if m:
+ preferred_v = m.group(1)
+ preferred_r = m.group(2)
+
+ for file_set in pkg_pn[pn]:
+ for f in file_set:
+ the_data = make.pkgdata[f]
+ pv = oe.data.getVar('PV', the_data, 1)
+ pr = oe.data.getVar('PR', the_data, 1)
+ if preferred_v == pv and (preferred_r == pr or preferred_r == None):
+ preferred_file = f
+ preferred_ver = (pv, pr)
+ break
+ if preferred_file:
+ break
+ if preferred_r:
+ pv_str = '%s-%s' % (preferred_v, preferred_r)
+ else:
+ pv_str = preferred_v
+ if preferred_file is None:
+ oe.note("preferred version %s of %s not available" % (pv_str, pn))
+ else:
+ oe.debug(1, "selecting %s as PREFERRED_VERSION %s of package %s" % (preferred_file, pv_str, pn))
+
+ # get highest priority file set
+ files = pkg_pn[pn][0]
+ latest = None
+ latest_p = 0
+ latest_f = None
+ for f in files:
+ the_data = make.pkgdata[f]
+ pv = oe.data.getVar('PV', the_data, 1)
+ pr = oe.data.getVar('PR', the_data, 1)
+ dp = int(oe.data.getVar('DEFAULT_PREFERENCE', the_data, 1) or "0")
+
+ if (latest is None) or ((latest_p == dp) and (make.vercmp(latest, (pv, pr)) < 0)) or (dp > latest_p):
+ latest = (pv, pr)
+ latest_f = f
+ latest_p = dp
+ if preferred_file is None:
+ preferred_file = latest_f
+ preferred_ver = latest
+
+ preferred_versions[pn] = (preferred_ver, preferred_file)
+ latest_versions[pn] = (latest, latest_f)
+
+ pkg_list = pkg_pn.keys()
+ pkg_list.sort()
+
+ for p in pkg_list:
+ pref = preferred_versions[p]
+ latest = latest_versions[p]
+
+ if pref != latest:
+ prefstr = pref[0][0] + "-" + pref[0][1]
+ else:
+ prefstr = ""
+
+ print "%-30s %20s %20s" % (p, latest[0][0] + "-" + latest[0][1],
+ prefstr)
+
def buildPackage(item):
fn = None
@@ -490,7 +590,7 @@ if __name__ == "__main__":
oepkgs = oe.data.getVar('OEPKGS', make.cfg, 1)
if oepkgs:
pkgs_to_build = oepkgs.split()
- if not pkgs_to_build:
+ if not pkgs_to_build and not make.options.show_versions:
print "Nothing to build. Use 'oemake world' to build everything."
sys.exit(0)
@@ -520,8 +620,13 @@ if __name__ == "__main__":
if make.options.parse_only:
print "Requested parsing .oe files only. Exiting."
sys.exit(0)
+
build_depgraph()
+ if make.options.show_versions:
+ showVersions()
+ sys.exit(0)
+
if 'world' in pkgs_to_build:
pkgs_to_build.remove('world')
for t in __world_target: