<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 20, 2015, at 10:43 AM, Pavel Labath <<a href="mailto:labath@google.com" class="">labath@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hi Enrico,<br class=""><br class="">Could you explain what was the motivation behind this change?<br class=""><br class=""></div></div></blockquote><div><br class=""></div><div>As per title of the commit, in a process that is using a standard c++ library other than libc++, these tests are noise - of course the libc++ tests aren’t gonna pass if you don’t have libc++</div><br class=""><blockquote type="cite" class=""><div class=""><div class="">I am asking because, I have just learned that this commit has caused<br class="">all libc++ tests to be skipped on linux*, silently decreasing test<br class="">coverage on linux. I would like to replace this with some other<br class="">mechanism, which is not prone to accidental silent skips, like a<br class="">dotest flag to skip libc++ or something, but I'd like to understand<br class="">the original motivation first.<br class=""><br class="">pl<br class=""><br class="">* the problem seems to be that on linux, we do not have the list of<br class="">modules until we actually start the process, so this code will not<br class="">find the library, as it runs before that. </div></div></blockquote><div><br class=""></div><div>The solution might then be to run the process, and then skip_if_library_missing</div><div>I think we avoid trying to compile the test inferior entirely if we can’t find libc++ however, so you might first want to check if a.out exists at all, and only then proceed all the way to the first breakpoint being hit</div><br class=""><blockquote type="cite" class=""><div class=""><div class="">If is considered a bug then<br class="">we can look into that separately, but I'd still like to avoid these<br class="">kinds of skips.<br class=""><br class=""></div></div></blockquote><div><br class=""></div><div>What I am trying to avoid here is getting useless noise in build automation where test cases proclaim their failure, which however tells us nothing of value as the issue is simply “libc++ not available” vs. “data formatters broken”</div><div>That is an ability I would strongly like to preserve</div><br class=""><blockquote type="cite" class=""><div class=""><div class=""><br class="">On 18 September 2015 at 21:12, Enrico Granata via lldb-commits<br class=""><<a href="mailto:lldb-commits@lists.llvm.org" class="">lldb-commits@lists.llvm.org</a>> wrote:<br class=""><blockquote type="cite" class="">Author: enrico<br class="">Date: Fri Sep 18 15:12:52 2015<br class="">New Revision: 248028<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=248028&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=248028&view=rev</a><br class="">Log:<br class="">Make libc++ tests skip themselves if libc++ is not actually loaded in the target<br class=""><br class=""><br class="">Modified:<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/iterator/TestDataFormatterLibccIterator.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/unordered/TestDataFormatterUnordered.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py<br class="">    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py<br class="">    lldb/trunk/test/lldbutil.py<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py Fri Sep 18 15:12:52 2015<br class="">@@ -36,6 +36,8 @@ class InitializerListTestCase(TestBase):<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class=""><br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class="">+<br class="">         bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line."))<br class=""><br class="">         self.runCmd("run", RUN_SUCCEEDED)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/iterator/TestDataFormatterLibccIterator.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/iterator/TestDataFormatterLibccIterator.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/iterator/TestDataFormatterLibccIterator.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/iterator/TestDataFormatterLibccIterator.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/iterator/TestDataFormatterLibccIterator.py Fri Sep 18 15:12:52 2015<br class="">@@ -37,6 +37,8 @@ class LibcxxIteratorDataFormatterTestCas<br class="">         """Test that libc++ iterators format properly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class=""><br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class="">+<br class="">         lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1)<br class=""><br class="">         self.runCmd("run", RUN_SUCCEEDED)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py Fri Sep 18 15:12:52 2015<br class="">@@ -2,7 +2,7 @@<br class=""> Test lldb data formatter subsystem.<br class=""> """<br class=""><br class="">-import os, time<br class="">+import os, time, re<br class=""> import unittest2<br class=""> import lldb<br class=""> from lldbtest import *<br class="">@@ -39,6 +39,8 @@ class LibcxxListDataFormatterTestCase(Te<br class="">     def data_formatter_commands(self):<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class="">+<br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class=""><br class="">         lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1)<br class="">         lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line2, num_expected_locations=-1)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py Fri Sep 18 15:12:52 2015<br class="">@@ -35,6 +35,8 @@ class LibcxxMapDataFormatterTestCase(Tes<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class=""><br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class="">+<br class="">         bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line."))<br class=""><br class="">         self.runCmd("run", RUN_SUCCEEDED)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py Fri Sep 18 15:12:52 2015<br class="">@@ -34,6 +34,8 @@ class LibcxxMultiMapDataFormatterTestCas<br class="">     def data_formatter_commands(self):<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class="">+<br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class=""><br class="">         bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line."))<br class=""><br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py Fri Sep 18 15:12:52 2015<br class="">@@ -34,6 +34,8 @@ class LibcxxMultiSetDataFormatterTestCas<br class="">     def data_formatter_commands(self):<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class="">+<br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class=""><br class="">         bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line."))<br class=""><br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py Fri Sep 18 15:12:52 2015<br class="">@@ -34,6 +34,8 @@ class LibcxxSetDataFormatterTestCase(Tes<br class="">     def data_formatter_commands(self):<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class="">+<br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class=""><br class="">         bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line."))<br class=""><br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py Fri Sep 18 15:12:52 2015<br class="">@@ -38,6 +38,8 @@ class LibcxxStringDataFormatterTestCase(<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class=""><br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class="">+<br class="">         lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1)<br class=""><br class="">         self.runCmd("run", RUN_SUCCEEDED)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/unordered/TestDataFormatterUnordered.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/unordered/TestDataFormatterUnordered.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/unordered/TestDataFormatterUnordered.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/unordered/TestDataFormatterUnordered.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/unordered/TestDataFormatterUnordered.py Fri Sep 18 15:12:52 2015<br class="">@@ -39,6 +39,8 @@ class LibcxxUnorderedDataFormatterTestCa<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class=""><br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class="">+<br class="">         lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line.")<br class=""><br class="">         self.runCmd("run", RUN_SUCCEEDED)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py Fri Sep 18 15:12:52 2015<br class="">@@ -37,6 +37,8 @@ class LibcxxVBoolDataFormatterTestCase(T<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class=""><br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class="">+<br class="">         lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1)<br class=""><br class="">         self.runCmd("run", RUN_SUCCEEDED)<br class=""><br class="">Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py (original)<br class="">+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py Fri Sep 18 15:12:52 2015<br class="">@@ -34,6 +34,8 @@ class LibcxxVectorDataFormatterTestCase(<br class="">     def data_formatter_commands(self):<br class="">         """Test that that file and class static variables display correctly."""<br class="">         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br class="">+<br class="">+        lldbutil.skip_if_library_missing(self, self.target(), lldbutil.PrintableRegex("libc\+\+"))<br class=""><br class="">         bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "break here"))<br class=""><br class=""><br class="">Modified: lldb/trunk/test/lldbutil.py<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbutil.py?rev=248028&r1=248027&r2=248028&view=diff" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbutil.py?rev=248028&r1=248027&r2=248028&view=diff</a><br class="">==============================================================================<br class="">--- lldb/trunk/test/lldbutil.py (original)<br class="">+++ lldb/trunk/test/lldbutil.py Fri Sep 18 15:12:52 2015<br class="">@@ -7,6 +7,7 @@ They can also be useful for general purp<br class=""> import lldb<br class=""> import os, sys<br class=""> import StringIO<br class="">+import re<br class=""><br class=""> # ===================================================<br class=""> # Utilities for locating/checking executable programs<br class="">@@ -957,3 +958,38 @@ def get_signal_number(signal_name):<br class="">                 return signal_number<br class="">     # No remote platform; fall back to using local python signals.<br class="">     return getattr(signal, signal_name)<br class="">+<br class="">+class PrintableRegex(object):<br class="">+    def __init__(self, text):<br class="">+        self.regex = re.compile(text)<br class="">+        self.text = text<br class="">+<br class="">+    def match(self, str):<br class="">+        return self.regex.match(str)<br class="">+<br class="">+    def __str__(self):<br class="">+        return "%s" % (self.text)<br class="">+<br class="">+    def __repr__(self):<br class="">+        return "re.compile(%s) -> %s" % (self.text, self.regex)<br class="">+<br class="">+def skip_if_callable(test, callable, reason):<br class="">+    if callable(test) == True:<br class="">+        test.skipTest(reason)<br class="">+        return True<br class="">+    return False<br class="">+<br class="">+def skip_if_library_missing(test, target, library):<br class="">+    def find_library(target, library):<br class="">+        for module in target.modules:<br class="">+            filename = module.file.GetFilename()<br class="">+            if isinstance(library, str):<br class="">+                if library == filename:<br class="">+                    return False<br class="">+            elif hasattr(library, 'match'):<br class="">+                if library.match(filename):<br class="">+                    return False<br class="">+        return True<br class="">+    def find_library_callable(test):<br class="">+        return find_library(target, library)<br class="">+    return skip_if_callable(test, find_library_callable, "could not find library matching '%s' in target %s" % (library, target))<br class=""><br class=""><br class="">_______________________________________________<br class="">lldb-commits mailing list<br class=""><a href="mailto:lldb-commits@lists.llvm.org" class="">lldb-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits<br class=""></blockquote></div></div></blockquote></div><br class=""><div class="">
<div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class="Apple-interchange-newline">Thanks,</div><div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><i class="">- Enrico</i><br class="">📩 egranata@<font color="#ff2600" class=""></font>.com ☎️ 27683</div>
</div>
<br class=""></body></html>