[Lldb-commits] [lldb] r285542 - [Test Suite] Pull generateSource into lldbtest
Chris Bieneman via lldb-commits
lldb-commits at lists.llvm.org
Tue Nov 8 10:05:05 PST 2016
I pushed an attempted fix in r286254.
I wonder if this is a difference between python 2.7 and 3. The comprehension should capture everything, as should the eval call. I wonder if one of those captures less in python 3 compared to python 2.7.
Hopefully my patch will resolve the issue for you.
-Chris
> On Nov 8, 2016, at 7:37 AM, Zachary Turner <zturner at google.com> wrote:
>
>
>
> On Sun, Oct 30, 2016 at 9:57 PM Chris Bieneman via lldb-commits <lldb-commits at lists.llvm.org <mailto:lldb-commits at lists.llvm.org>> wrote:
>
> Modified: lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py?rev=285542&r1=285541&r2=285542&view=diff <http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py?rev=285542&r1=285541&r2=285542&view=diff>
> ==============================================================================
> --- lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py (original)
> +++ lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py Sun Oct 30 23:48:19 2016
> @@ -1848,6 +1848,33 @@ class TestBase(Base):
> folder = os.path.dirname(folder)
> continue
>
> + def generateSource(self, source):
> + template = source + '.template'
> + temp = os.path.join(os.getcwd(), template)
> + with open(temp, 'r') as f:
> + content = f.read()
> +
> + public_api_dir = os.path.join(
> + os.environ["LLDB_SRC"], "include", "lldb", "API")
> +
> + # Look under the include/lldb/API directory and add #include statements
> + # for all the SB API headers.
> + public_headers = os.listdir(public_api_dir)
> + # For different platforms, the include statement can vary.
> + if self.hasDarwinFramework():
> + include_stmt = "'#include <%s>' % os.path.join('LLDB', header)"
> + else:
> + include_stmt = "'#include <%s>' % os.path.join(public_api_dir, header)"
> + list = [eval(include_stmt) for header in public_headers if (
> + header.startswith("SB") and header.endswith(".h"))]
> + includes = '\n'.join(list)
> + new_content = content.replace('%include_SB_APIs%', includes)
> + src = os.path.join(os.getcwd(), source)
> + with open(src, 'w') as f:
> + f.write(new_content)
> +
> + self.addTearDownHook(lambda: os.remove(src))
> +
>
> The non hasDarwinFramework codepath is broken here, and I don't believe it to be a Windows specific issue. I'm getting the following error in multiple tests.
>
> Traceback (most recent call last):
> File "C:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\functionalities\plugins\commands\TestPluginCommands.py", line 23, in setUp
> self.generateSource('plugin.cpp')
> File "C:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\lldbtest.py", line 1868, in generateSource
> list = [eval(include_stmt) for header in public_headers if (
> File "C:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\lldbtest.py", line 1869, in <listcomp>
> header.startswith("SB") and header.endswith(".h"))]
> File "<string>", line 1, in <module>
> NameError: name 'public_api_dir' is not defined
> Config=i686-C:\src\llvmbuild\ninja_release\bin\clang.exe
>
> I'm hypothesizing that the problem is that from inside of a list comprehension, your set of locals is not the same as outside of the list comprehension, and so the eval statement does not see the variable `public_api_dir`. Is there any way you could provide a fix for this?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20161108/8625afa8/attachment-0001.html>
More information about the lldb-commits
mailing list