On 2019/12/10 下午5:35, kai.k...@windriver.com wrote:
From: Kai Kang <kai.k...@windriver.com>

There are mutually exclusive PACKAGECONFIGs in recipes. Though it
declares that package configs are exclusive, it can't prevent users to
set them at same time. Extend PACKAGECONFIG to support specifying
conflicted package configs.

Ping.



Signed-off-by: Kai Kang <kai.k...@windriver.com>
---
  meta/classes/base.bbclass | 20 +++++++++++++++++---
  1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 31457f9f12..ef3afdf964 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -390,7 +390,7 @@ python () {
      # These take the form:
      #
      # PACKAGECONFIG ??= "<default options>"
-    # PACKAGECONFIG[foo] = 
"--enable-foo,--disable-foo,foo_depends,foo_runtime_depends,foo_runtime_recommends"
+    # PACKAGECONFIG[foo] = 
"--enable-foo,--disable-foo,foo_depends,foo_runtime_depends,foo_runtime_recommends,foo_conflict_packageconfig"
      pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
      if pkgconfigflags:
          pkgconfig = (d.getVar('PACKAGECONFIG') or "").split()
@@ -437,8 +437,8 @@ python () {
          for flag, flagval in sorted(pkgconfigflags.items()):
              items = flagval.split(",")
              num = len(items)
-            if num > 5:
-                bb.error("%s: PACKAGECONFIG[%s] Only 
enable,disable,depend,rdepend,rrecommend can be specified!"
+            if num > 6:
+                bb.error("%s: PACKAGECONFIG[%s] Only 
enable,disable,depend,rdepend,rrecommend,conflict_packageconfig can be specified!"
                      % (d.getVar('PN'), flag))
if flag in pkgconfig:
@@ -452,6 +452,20 @@ python () {
                      extraconf.append(items[0])
              elif num >= 2 and items[1]:
                      extraconf.append(items[1])
+
+            if num >= 6 and items[5]:
+                conflicts = set(items[5].split())
+                invalid = conflicts.difference(set(pkgconfigflags.keys()))
+                if invalid:
+                    bb.error("%s: PACKAGECONFIG[%s] Invalid conflict package 
config%s '%s' specified."
+                        % (d.getVar('PN'), flag, 's' if len(invalid) > 1 else 
'', ' '.join(invalid)))
+
+                if flag in pkgconfig:
+                    intersec = conflicts.intersection(set(pkgconfig))
+                    if intersec:
+                        bb.fatal("%s: PACKAGECONFIG[%s] Conflict package config%s 
'%s' set in PACKAGECONFIG."
+                            % (d.getVar('PN'), flag, 's' if len(intersec) > 1 
else '', ' '.join(intersec)))
+
          appendVar('DEPENDS', extradeps)
          appendVar('RDEPENDS_${PN}', extrardeps)
          appendVar('RRECOMMENDS_${PN}', extrarrecs)


--
Kai Kang

--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to