summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2013-02-18 13:19:50 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-02-19 08:36:54 -0800
commit0a2662a48eaf0487db043c348e2834bb9cdd0466 (patch)
tree0f040f1db818c5054b0e807fe173d80d9c2b45a6
parent41437aaac0cfc6f931d3b2974d380f20ec01f6e8 (diff)
downloadopenembedded-core-0a2662a48eaf0487db043c348e2834bb9cdd0466.tar.gz
openembedded-core-0a2662a48eaf0487db043c348e2834bb9cdd0466.tar.bz2
openembedded-core-0a2662a48eaf0487db043c348e2834bb9cdd0466.zip
devshell.bbclass: Allow running devshell and fakeroot together
Currently its hard to run a devshell complete with fakeroot context. This patch allows the fakeroot flag on the task to do this, as with any other task. Since we may need to start X terminal applications, we need to only start the fakeroot session on the final command, hence the hoops this code jumps through. As always with fakeroot, you can break out and run a command without the fake permissions with syntax like "PSEUDO_UNLOAD=1 <command>" [YOCTO #3374] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/devshell.bbclass19
-rw-r--r--meta/classes/terminal.bbclass5
2 files changed, 23 insertions, 1 deletions
diff --git a/meta/classes/devshell.bbclass b/meta/classes/devshell.bbclass
index ddb6e55303..a780118a12 100644
--- a/meta/classes/devshell.bbclass
+++ b/meta/classes/devshell.bbclass
@@ -1,10 +1,27 @@
inherit terminal
+DEVSHELL = "${SHELL}"
+
python do_devshell () {
- oe_terminal(d.getVar('SHELL', True), 'OpenEmbedded Developer Shell', d)
+ oe_terminal(d.getVar('DEVSHELL', True), 'OpenEmbedded Developer Shell', d)
}
addtask devshell after do_patch
do_devshell[dirs] = "${S}"
do_devshell[nostamp] = "1"
+
+# devshell and fakeroot/pseudo need careful handling since only the final
+# command should run under fakeroot emulation, any X connection should
+# be done as the normal user. We therfore carefully construct the envionment
+# manually
+python () {
+ if d.getVarFlag("do_devshell", "fakeroot"):
+ d.prependVar("DEVSHELL", "pseudo ")
+ fakeenv = d.getVar("FAKEROOTENV", True).split()
+ for f in fakeenv:
+ k = f.split("=")
+ d.setVar(k[0], k[1])
+ d.appendVar("OE_TERMINAL_EXPORTS", " " + k[0])
+ d.delVarFlag("do_devshell", "fakeroot")
+}
diff --git a/meta/classes/terminal.bbclass b/meta/classes/terminal.bbclass
index d5a6277896..8cebad4162 100644
--- a/meta/classes/terminal.bbclass
+++ b/meta/classes/terminal.bbclass
@@ -25,6 +25,11 @@ def oe_terminal(command, title, d):
if value is not None:
os.environ[export] = str(value)
env[export] = str(value)
+ if export == "PSEUDO_DISABLED":
+ if "PSEUDO_UNLOAD" in os.environ:
+ del os.environ["PSEUDO_UNLOAD"]
+ if "PSEUDO_UNLOAD" in env:
+ del env["PSEUDO_UNLOAD"]
# Add in all variables from the user's original environment which
# haven't subsequntly been set/changed