#!/usr/bin/python

import portage, portage_const, os, string

mykeys = {}

for line in portage.grabfile(portage.settings["PORTDIR"]+"/profiles/profiles.desc"):
	arch, path, status = line.split()

	groups = [arch]
	if status == "dev": groups += ["~" + arch]
	profiledir = portage.settings["PORTDIR"]+"/profiles/" + path

	portage.profiledir = profiledir
	portage.groups = groups
	myconfig = portage.config(config_profile_path = profiledir, config_incrementals = portage_const.INCREMENTALS)
	myconfig["ARCH"] = arch
	portage.do_vartree(myconfig)
	myconfig.regenerate()
	portage.portdb = portage.portdbapi(portage.settings["PORTDIR"], myconfig)
	portage.db["/"]["porttree"] = portage.portagetree("/", myconfig.getvirtuals("/"))

	for atom in myconfig.packages:
		if atom[0] == "*":
			mykey = portage.dep_getkey(atom[1:])
			if not mykeys.has_key(mykey):
				mykeys[mykey] = {}
			if not mykeys[mykey].has_key(arch+"-"+status):
				mykeys[mykey][arch+"-"+status] = []
			match = portage.db["/"]["porttree"].dbapi.xmatch("bestmatch-visible", atom[1:])
			if not match in mykeys[mykey][arch+"-"+status]:
				mykeys[mykey][arch+"-"+status].append(match)

for key in mykeys:
	print key+":"
	for arch in mykeys[key]:
		print "\t"+arch+": "+string.join(mykeys[key][arch], ", ")
