From: Phil Blundell Date: Sun, 28 Nov 2004 11:57:07 +0000 (+0000) Subject: add 'oemake -s' option to dump out a table of latest and preferred versions for all... X-Git-Tag: 1.0~64 X-Git-Url: http://code.vuplus.com/gitweb/?a=commitdiff_plain;h=eece1ffe92678310dd7103076f6f3597ab4199a4;p=vuplus_bitbake add 'oemake -s' option to dump out a table of latest and preferred versions for all packages --- diff --git a/bin/oemake b/bin/oemake index fa22f38..46fa7da 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: