<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Feb 11, 2018 02:34, "Robert Yang" <<a href="mailto:liezhi.yang@windriver.com">liezhi.yang@windriver.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Joshua,<br>
<br>
This one causes the following 2 recipes failed to build:<br>
<br>
meta-openembedded/meta-network<wbr>ing/recipes-support/libtalloc/<a href="http://libtalloc_2.1.10.bb" target="_blank"><wbr>libtalloc_2.1.10.bb</a>:do_<wbr>configure<br>
meta-openembedded/meta-network<wbr>ing/recipes-support/libtdb/<wbr>libtdb_1.3.15.bb:do_configure<br>
<br>
The error messages are similar:<br>
<br>
File: '/usr/lib/python3.4/subprocess<wbr>.py', lineno: 1457, function: _execute_child<br>
1453: # The error must be from chdir(cwd).<br>
1454: err_msg += ': ' + repr(cwd)<br>
1455: else:<br>
1456: err_msg += ': ' + repr(orig_executable)<br>
*** 1457: raise child_exception_type(errno_num<wbr>, err_msg)<br>
1458: raise child_exception_type(err_msg)<br>
1459:<br>
1460:<br>
1461: def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,<br>
Exception: FileNotFoundError: [Errno 2] No such file or directory: '/path/to/tmp-glibc/work/i586-<wbr>wrs-linux/libtdb/1.3.15-r0/tdb<wbr>-1.3.15/waf'<font color="#888888"><br>
<br>
// Robert</font></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">Forgot to reply all.</div><div dir="auto"><br></div><div dir="auto">I will look into this shortly, I think I know want needs to be done.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="elided-text"><br>
<br>
On 02/01/2018 03:49 AM, Joshua Watt wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
waf requires that the current working directory be the project root (in<br>
this case ${S} when it is invoked. The check to get the waf version was<br>
being executed as a prefunc for do_configure, which meant it was<br>
executed before the current working directory was switched to ${S}, and<br>
thus would fail with some recipes. Fix this by changing to ${S} before<br>
executing "waf --version"<br>
<br>
Signed-off-by: Joshua Watt <<a href="mailto:JPEWhacker@gmail.com" target="_blank">JPEWhacker@gmail.com</a>><br>
---<br>
meta/classes/waf.bbclass | 19 ++++++++++---------<br>
1 file changed, 10 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/meta/classes/waf.bbclass b/meta/classes/waf.bbclass<br>
index c3e744e5dec..bdbdc56767c 100644<br>
--- a/meta/classes/waf.bbclass<br>
+++ b/meta/classes/waf.bbclass<br>
@@ -26,16 +26,17 @@ def get_waf_parallel_make(d):<br>
return ""<br>
python waf_preconfigure() {<br>
+ import subprocess<br>
from distutils.version import StrictVersion<br>
- srcsubdir = d.getVar('S')<br>
- wafbin = os.path.join(srcsubdir, 'waf')<br>
- status, result = oe.utils.getstatusoutput(wafbi<wbr>n + " --version")<br>
- if status != 0:<br>
- bb.warn("Unable to execute waf --version, exit code %d. Assuming waf version without bindir/libdir support." % status)<br>
- return<br>
- version = result.split()[1]<br>
- if StrictVersion(version) >= StrictVersion("1.8.7"):<br>
- d.setVar("WAF_EXTRA_CONF", "--bindir=${bindir} --libdir=${libdir}")<br>
+ subsrcdir = d.getVar('S')<br>
+ wafbin = os.path.join(subsrcdir, 'waf')<br>
+ try:<br>
+ result = subprocess.check_output([wafbi<wbr>n, '--version'], cwd=subsrcdir, stderr=subprocess.STDOUT)<br>
+ version = result.decode('utf-8').split()<wbr>[1]<br>
+ if StrictVersion(version) >= StrictVersion("1.8.7"):<br>
+ d.setVar("WAF_EXTRA_CONF", "--bindir=${bindir} --libdir=${libdir}")<br>
+ except subprocess.CalledProcessError as e:<br>
+ bb.warn("Unable to execute waf --version, exit code %d. Assuming waf version without bindir/libdir support." % e.returncode)<br>
}<br>
do_configure[prefuncs] += "waf_preconfigure"<br>
<br>
</blockquote>
</div></blockquote></div><br></div></div></div>