[bitbake-devel] bitbake: Show base multiconfig environment

Submitted by Joshua Watt on May 22, 2019, 7:56 p.m. | Patch ID: 161521

Details

Message ID 20190522195650.15359-1-JPEWhacker@gmail.com
State New
Headers show

Commit Message

Joshua Watt May 22, 2019, 7:56 p.m.
Adds support to the 'bitbake -e' command so that it can display the base
environment for a multiconfig. It was previously possible to get the
base environment for the main environment by running "bitbake -e", but
there was no support for getting the base environment for a multiconfig
without specifying a recipe. A user can now print the base environment
for the multiconfig "foo" by running:

 $ bitbake -e multiconfig:foo

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 bitbake/lib/bb/cooker.py | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

Patch hide | download patch | download mbox

diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 33697a71d5e..d183abab6dc 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -495,6 +495,7 @@  class BBCooker:
         """
         fn = None
         envdata = None
+        mc = ''
         if not pkgs_to_build:
             pkgs_to_build = []
 
@@ -503,6 +504,12 @@  class BBCooker:
             self.enableDataTracking()
             self.reset()
 
+        def mc_base(p):
+            if p.startswith('multiconfig:'):
+                s = p.split(':')
+                if len(s) == 2:
+                    return s[1]
+            return None
 
         if buildfile:
             # Parse the configuration here. We need to do it explicitly here since
@@ -513,18 +520,16 @@  class BBCooker:
             fn = self.matchFile(fn)
             fn = bb.cache.realfn2virtual(fn, cls, mc)
         elif len(pkgs_to_build) == 1:
-            ignore = self.data.getVar("ASSUME_PROVIDED") or ""
-            if pkgs_to_build[0] in set(ignore.split()):
-                bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0])
+            mc = mc_base(pkgs_to_build[0])
+            if not mc:
+                ignore = self.data.getVar("ASSUME_PROVIDED") or ""
+                if pkgs_to_build[0] in set(ignore.split()):
+                    bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0])
 
-            taskdata, runlist = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True)
+                taskdata, runlist = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True)
 
-            mc = runlist[0][0]
-            fn = runlist[0][3]
-        else:
-            envdata = self.data
-            data.expandKeys(envdata)
-            parse.ast.runAnonFuncs(envdata)
+                mc = runlist[0][0]
+                fn = runlist[0][3]
 
         if fn:
             try:
@@ -533,6 +538,12 @@  class BBCooker:
             except Exception as e:
                 parselog.exception("Unable to read %s", fn)
                 raise
+        else:
+            if not mc in self.databuilder.mcdata:
+                bb.fatal('Not multiconfig named "%s" found' % mc)
+            envdata = self.databuilder.mcdata[mc]
+            data.expandKeys(envdata)
+            parse.ast.runAnonFuncs(envdata)
 
         # Display history
         with closing(StringIO()) as env:

Comments

Joshua Watt May 29, 2019, 3:37 p.m.
Ping

On 5/22/19 2:56 PM, Joshua Watt wrote:
> Adds support to the 'bitbake -e' command so that it can display the base
> environment for a multiconfig. It was previously possible to get the
> base environment for the main environment by running "bitbake -e", but
> there was no support for getting the base environment for a multiconfig
> without specifying a recipe. A user can now print the base environment
> for the multiconfig "foo" by running:
>
>   $ bitbake -e multiconfig:foo
>
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> ---
>   bitbake/lib/bb/cooker.py | 31 +++++++++++++++++++++----------
>   1 file changed, 21 insertions(+), 10 deletions(-)
>
> diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
> index 33697a71d5e..d183abab6dc 100644
> --- a/bitbake/lib/bb/cooker.py
> +++ b/bitbake/lib/bb/cooker.py
> @@ -495,6 +495,7 @@ class BBCooker:
>           """
>           fn = None
>           envdata = None
> +        mc = ''
>           if not pkgs_to_build:
>               pkgs_to_build = []
>   
> @@ -503,6 +504,12 @@ class BBCooker:
>               self.enableDataTracking()
>               self.reset()
>   
> +        def mc_base(p):
> +            if p.startswith('multiconfig:'):
> +                s = p.split(':')
> +                if len(s) == 2:
> +                    return s[1]
> +            return None
>   
>           if buildfile:
>               # Parse the configuration here. We need to do it explicitly here since
> @@ -513,18 +520,16 @@ class BBCooker:
>               fn = self.matchFile(fn)
>               fn = bb.cache.realfn2virtual(fn, cls, mc)
>           elif len(pkgs_to_build) == 1:
> -            ignore = self.data.getVar("ASSUME_PROVIDED") or ""
> -            if pkgs_to_build[0] in set(ignore.split()):
> -                bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0])
> +            mc = mc_base(pkgs_to_build[0])
> +            if not mc:
> +                ignore = self.data.getVar("ASSUME_PROVIDED") or ""
> +                if pkgs_to_build[0] in set(ignore.split()):
> +                    bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0])
>   
> -            taskdata, runlist = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True)
> +                taskdata, runlist = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True)
>   
> -            mc = runlist[0][0]
> -            fn = runlist[0][3]
> -        else:
> -            envdata = self.data
> -            data.expandKeys(envdata)
> -            parse.ast.runAnonFuncs(envdata)
> +                mc = runlist[0][0]
> +                fn = runlist[0][3]
>   
>           if fn:
>               try:
> @@ -533,6 +538,12 @@ class BBCooker:
>               except Exception as e:
>                   parselog.exception("Unable to read %s", fn)
>                   raise
> +        else:
> +            if not mc in self.databuilder.mcdata:
> +                bb.fatal('Not multiconfig named "%s" found' % mc)
> +            envdata = self.databuilder.mcdata[mc]
> +            data.expandKeys(envdata)
> +            parse.ast.runAnonFuncs(envdata)
>   
>           # Display history
>           with closing(StringIO()) as env: