[OE-core] [oe-core][PATCH 04/13] base.bbclass: extract *virtclass_map_dependencies logic from native/nativesdk bbclasses and call it from packageconfig
Martin Jansa
martin.jansa at gmail.com
Wed Mar 21 21:36:09 UTC 2012
* if some package is using PACKAGECONFIG and also BBCLASSEXTEND then it could be called twice
but without this PACKAGECONFIG was adding items to DEPENDS after virtclass handler
so foo-native was depending on bar instead of bar-foo when bar was added by PACKAGECONFIG
see: http://lists.linuxtogo.org/pipermail/openembedded-core/2012-February/017772.html
Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
---
meta/classes/base.bbclass | 77 ++++++++++++++++++++++++++++++++++++---
meta/classes/native.bbclass | 25 +------------
meta/classes/nativesdk.bbclass | 27 +-------------
3 files changed, 73 insertions(+), 56 deletions(-)
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index c8ed544..14efa16 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -223,6 +223,59 @@ def get_layers_branch_rev(d):
s1= layers_branch_rev[i][p1:]
return layers_branch_rev
+def native_virtclass_map_dependencies(d):
+ def map_dependencies(varname, d, suffix = ""):
+ if suffix:
+ varname = varname + "_" + suffix
+ deps = d.getVar(varname, True)
+ if not deps:
+ return
+ deps = bb.utils.explode_deps(deps)
+ newdeps = []
+ for dep in deps:
+ if dep.endswith("-cross"):
+ newdeps.append(dep.replace("-cross", "-native"))
+ elif not dep.endswith("-native"):
+ newdeps.append(dep + "-native")
+ else:
+ newdeps.append(dep)
+ d.setVar(varname, " ".join(newdeps))
+
+ map_dependencies("DEPENDS", d)
+ for pkg in [d.getVar("PN", True), "", "${PN}"]:
+ map_dependencies("RDEPENDS", d, pkg)
+ map_dependencies("RRECOMMENDS", d, pkg)
+ map_dependencies("RSUGGESTS", d, pkg)
+ map_dependencies("RPROVIDES", d, pkg)
+ map_dependencies("RREPLACES", d, pkg)
+
+def nativesdk_virtclass_map_dependencies(d):
+ def map_dependencies(varname, d, suffix = ""):
+ if suffix:
+ varname = varname + "_" + suffix
+ deps = d.getVar(varname, True)
+ if not deps:
+ return
+ deps = bb.utils.explode_deps(deps)
+ newdeps = []
+ for dep in deps:
+ if dep.endswith("-native") or dep.endswith("-cross"):
+ newdeps.append(dep)
+ elif dep.endswith("-gcc-intermediate") or dep.endswith("-gcc-initial") or dep.endswith("-gcc") or dep.endswith("-g++"):
+ newdeps.append(dep + "-crosssdk")
+ elif not dep.endswith("-nativesdk"):
+ newdeps.append(dep.replace("-nativesdk", "") + "-nativesdk")
+ else:
+ newdeps.append(dep)
+ d.setVar(varname, " ".join(newdeps))
+
+ map_dependencies("DEPENDS", d)
+ #for pkg in (d.getVar("PACKAGES", True).split() + [""]):
+ # map_dependencies("RDEPENDS", d, pkg)
+ # map_dependencies("RRECOMMENDS", d, pkg)
+ # map_dependencies("RSUGGESTS", d, pkg)
+ # map_dependencies("RPROVIDES", d, pkg)
+ # map_dependencies("RREPLACES", d, pkg)
addhandler base_eventhandler
python base_eventhandler() {
@@ -293,8 +346,10 @@ do_build () {
:
}
-python () {
- import exceptions, string, re
+addhandler packageconfig_handler
+python packageconfig_handler () {
+ if not isinstance(e, bb.event.RecipePreFinalise):
+ return
# Handle PACKAGECONFIG
#
@@ -302,14 +357,14 @@ python () {
#
# PACKAGECONFIG ?? = "<default options>"
# PACKAGECONFIG[foo] = "--enable-foo,--disable-foo,foo_depends,foo_runtime_depends"
- pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
+ pkgconfigflags = e.data.getVarFlags("PACKAGECONFIG") or {}
if pkgconfigflags:
- pkgconfig = (d.getVar('PACKAGECONFIG', True) or "").split()
+ pkgconfig = (e.data.getVar('PACKAGECONFIG', True) or "").split()
def appendVar(varname, appends):
if not appends:
return
- varname = d.expand(varname)
- d.appendVar(varname, " " + " ".join(appends))
+ varname = e.data.expand(varname)
+ e.data.appendVar(varname, " " + " ".join(appends))
extradeps = []
extrardeps = []
@@ -332,6 +387,16 @@ python () {
appendVar('DEPENDS', extradeps)
appendVar('RDEPENDS_${PN}', extrardeps)
appendVar('EXTRA_OECONF', extraconf)
+ classextend = e.data.getVar('BBCLASSEXTEND', True) or ""
+ pn = e.data.getVar("PN", True)
+ if "native" in classextend and pn.endswith("-native"):
+ native_virtclass_map_dependencies(e.data)
+ if "nativesdk" in classextend and pn.endswith("-nativesdk"):
+ nativesdk_virtclass_map_dependencies(e.data)
+}
+
+python () {
+ import exceptions, string, re
# If PRINC is set, try and increase the PR value by the amount specified
princ = d.getVar('PRINC', True)
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass
index ffab971..7ef3684 100644
--- a/meta/classes/native.bbclass
+++ b/meta/classes/native.bbclass
@@ -112,30 +112,7 @@ python native_virtclass_handler () {
if not pn.endswith("-native"):
return
- def map_dependencies(varname, d, suffix = ""):
- if suffix:
- varname = varname + "_" + suffix
- deps = d.getVar(varname, True)
- if not deps:
- return
- deps = bb.utils.explode_deps(deps)
- newdeps = []
- for dep in deps:
- if dep.endswith("-cross"):
- newdeps.append(dep.replace("-cross", "-native"))
- elif not dep.endswith("-native"):
- newdeps.append(dep + "-native")
- else:
- newdeps.append(dep)
- d.setVar(varname, " ".join(newdeps))
-
- map_dependencies("DEPENDS", e.data)
- for pkg in [e.data.getVar("PN", True), "", "${PN}"]:
- map_dependencies("RDEPENDS", e.data, pkg)
- map_dependencies("RRECOMMENDS", e.data, pkg)
- map_dependencies("RSUGGESTS", e.data, pkg)
- map_dependencies("RPROVIDES", e.data, pkg)
- map_dependencies("RREPLACES", e.data, pkg)
+ native_virtclass_map_dependencies(e.data)
provides = e.data.getVar("PROVIDES", True)
for prov in provides.split():
diff --git a/meta/classes/nativesdk.bbclass b/meta/classes/nativesdk.bbclass
index ceec53e..af8f9ef 100644
--- a/meta/classes/nativesdk.bbclass
+++ b/meta/classes/nativesdk.bbclass
@@ -72,32 +72,7 @@ python () {
if not pn.endswith("-nativesdk"):
return
- def map_dependencies(varname, d, suffix = ""):
- if suffix:
- varname = varname + "_" + suffix
- deps = d.getVar(varname, True)
- if not deps:
- return
- deps = bb.utils.explode_deps(deps)
- newdeps = []
- for dep in deps:
- if dep.endswith("-native") or dep.endswith("-cross"):
- newdeps.append(dep)
- elif dep.endswith("-gcc-intermediate") or dep.endswith("-gcc-initial") or dep.endswith("-gcc") or dep.endswith("-g++"):
- newdeps.append(dep + "-crosssdk")
- elif not dep.endswith("-nativesdk"):
- newdeps.append(dep.replace("-nativesdk", "") + "-nativesdk")
- else:
- newdeps.append(dep)
- d.setVar(varname, " ".join(newdeps))
-
- map_dependencies("DEPENDS", d)
- #for pkg in (d.getVar("PACKAGES", True).split() + [""]):
- # map_dependencies("RDEPENDS", d, pkg)
- # map_dependencies("RRECOMMENDS", d, pkg)
- # map_dependencies("RSUGGESTS", d, pkg)
- # map_dependencies("RPROVIDES", d, pkg)
- # map_dependencies("RREPLACES", d, pkg)
+ nativesdk_virtclass_map_dependencies(d)
provides = d.getVar("PROVIDES", True)
for prov in provides.split():
--
1.7.8.5
More information about the Openembedded-core
mailing list