<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 15, 2015 at 7:43 AM, Ed Bartosh <span dir="ltr">&lt;<a href="mailto:ed.bartosh@linux.intel.com" target="_blank">ed.bartosh@linux.intel.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":1kl" class="a3s" style="overflow:hidden">Enabled processing of environment variables in bblayers paths using<br>
<span class="il">bitbake</span> apporved_variables API.<br>
<br>
Enabled processing of ~ if HOME environment variable is approved.<br>
<br>
Signed-off-by: Ed Bartosh &lt;<a href="mailto:ed.bartosh@linux.intel.com">ed.bartosh@linux.intel.com</a>&gt;<br>
---<br>
 <span class="il">bitbake</span>/lib/<span class="il">bb</span>/cookerdata.py | 6 ++++++<br>
 1 file changed, 6 insertions(+)<br>
<br>
diff --git a/<span class="il">bitbake</span>/lib/<span class="il">bb</span>/cookerdata.py b/<span class="il">bitbake</span>/lib/<span class="il">bb</span>/cookerdata.py<br>
index 6c11a60..05b3986 100644<br>
--- a/<span class="il">bitbake</span>/lib/<span class="il">bb</span>/cookerdata.py<br>
+++ b/<span class="il">bitbake</span>/lib/<span class="il">bb</span>/cookerdata.py<br>
@@ -25,6 +25,7 @@<br>
 import os, sys<br>
 from functools import wraps<br>
 import logging<br>
+import string<br>
 import <span class="il">bb</span><br>
 from <span class="il">bb</span> import data<br>
 import <span class="il">bb</span>.parse<br>
@@ -269,8 +270,13 @@ <span class="il">class</span> CookerDataBuilder(object):<br>
             layers = (data.getVar(&#39;BBLAYERS&#39;, True) or &quot;&quot;).split()<br>
<br>
             data = <span class="il">bb</span>.data.createCopy(data)<br>
+            approved = dict((var, data.getVar(var, True)) \<br>
+                                  for var in <span class="il">bb</span>.utils.approved_variables())<br>
             for layer in layers:<br>
                 parselog.debug(2, &quot;Adding layer %s&quot;, layer)<br>
+                layer = string.Template(layer).safe_substitute(approved)<br>
+                if &#39;HOME&#39; in approved:<br>
+                    layer = os.path.expanduser(layer)<br>
                 data.setVar(&#39;LAYERDIR&#39;, layer)<br>
                 data = parse_config_file(os.path.join(layer, &quot;<span class="il">conf</span>&quot;, &quot;layer.<span class="il">conf</span>&quot;), data)<br>
                 data.expandVarref(&#39;LAYERDIR&#39;)</div></blockquote></div><br>Why the use of string.Template here? We already have a variable expansion mechanism.<br>-- <br><div class="gmail_signature">Christopher Larson<br>clarson at kergoth dot com<br>Founder - BitBake, OpenEmbedded, OpenZaurus<br>Maintainer - Tslib<br>Senior Software Engineer, Mentor Graphics</div>
</div></div>