python read_manifest () {
	import sys, bb.manifest
	mfn = bb.data.getVar("MANIFEST", d, 1)
	if os.access(mfn, os.R_OK):
		# we have a manifest, so emit do_stage and do_populate_pkgs,
		# and stuff some additional bits of data into the metadata store
		mfile = file(mfn, "r")
		manifest = bb.manifest.parse(mfile, d)
		if not manifest:
			return

		bb.data.setVar('manifest', manifest, d)
}

python parse_manifest () {
		manifest = bb.data.getVar("manifest", d)
		if not manifest:
			return
		for func in ("do_populate_staging", "do_populate_pkgs"):
			value = bb.manifest.emit(func, manifest, d)
			if value:
				bb.data.setVar("manifest_" + func, value, d)
				bb.data.delVarFlag("manifest_" + func, "python", d)
				bb.data.delVarFlag("manifest_" + func, "fakeroot", d)
				bb.data.setVarFlag("manifest_" + func, "func", 1, d)
		packages = []
		for l in manifest:
			if "pkg" in l and l["pkg"] is not None:
				packages.append(l["pkg"])
		bb.data.setVar("PACKAGES", " ".join(packages), d)
}

python __anonymous () {
	try:
		bb.build.exec_func('read_manifest', d)
		bb.build.exec_func('parse_manifest', d)
	except exceptions.KeyboardInterrupt:
		raise
	except Exception, e:
		bb.error("anonymous function: %s" % e)
		pass
}

#python do_populate_staging () {
#	if not bb.data.getVar('manifest', d):
#		bb.build.exec_func('do_emit_manifest', d)
#	if bb.data.getVar('do_stage', d):
#		bb.build.exec_func('do_stage', d)
#	else:
#		bb.build.exec_func('manifest_do_populate_staging', d)
#}

#addtask populate_pkgs after do_compile
#python do_populate_pkgs () {
#	if not bb.data.getVar('manifest', d):
#		bb.build.exec_func('do_emit_manifest', d)
#	bb.build.exec_func('manifest_do_populate_pkgs', d)
#	bb.build.exec_func('package_do_shlibs', d)
#}

addtask emit_manifest
python do_emit_manifest () {
#	FIXME: emit a manifest here
#	1) adjust PATH to hit the wrapper scripts
	wrappers = bb.which(bb.data.getVar("BBPATH", d, 1), 'build/install', 0)
	path = (bb.data.getVar('PATH', d, 1) or '').split(':')
	path.insert(0, os.path.dirname(wrappers))
	bb.data.setVar('PATH', ':'.join(path), d)
#	2) exec_func("do_install", d)
	bb.build.exec_func('do_install', d)
#	3) read in data collected by the wrappers
	print("Got here2 213")
	bb.build.exec_func('read_manifest', d)
#	4) mangle the manifest we just generated, get paths back into
#	   our variable form
#	5) write it back out
#	6) re-parse it to ensure the generated functions are proper
	bb.build.exec_func('parse_manifest', d)
}