summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/packages/Python/lldbsuite/test/python_api/lldbutil/TestSwigVersion.py28
-rw-r--r--lldb/scripts/Python/modify-python-lldb.py23
-rw-r--r--lldb/scripts/lldb.swig15
3 files changed, 44 insertions, 22 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/python_api/lldbutil/TestSwigVersion.py b/lldb/packages/Python/lldbsuite/test/python_api/lldbutil/TestSwigVersion.py
new file mode 100644
index 00000000000..58e47d9a79f
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/python_api/lldbutil/TestSwigVersion.py
@@ -0,0 +1,28 @@
+"""
+Test that we embed the swig version into the lldb module
+"""
+
+from __future__ import print_function
+
+"""
+import os
+import time
+import re
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test import lldbutil
+"""
+from lldbsuite.test.lldbtest import *
+
+class SwigVersionTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+ NO_DEBUG_INFO_TESTCASE = True
+
+ def test(self):
+ self.assertTrue(getattr(lldb, "swig_version"))
+ self.assertIsInstance(lldb.swig_version, tuple)
+ self.assertEqual(len(lldb.swig_version), 3)
+ self.assertGreaterEqual(lldb.swig_version[0], 1)
+ for v in lldb.swig_version:
+ self.assertGreaterEqual(v, 0)
diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py
index cb911eed047..20f5dddaf8e 100644
--- a/lldb/scripts/Python/modify-python-lldb.py
+++ b/lldb/scripts/Python/modify-python-lldb.py
@@ -45,11 +45,6 @@ else:
# print "output_name is '" + output_name + "'"
#
-# Version string
-#
-version_line = "swig_version = %s"
-
-#
# Residues to be removed.
#
c_endif_swig = "#endif"
@@ -338,7 +333,6 @@ init_pattern = re.compile("^ def __init__\(self.*\):")
isvalid_pattern = re.compile("^ def IsValid\(")
# These define the states of our finite state machine.
-EXPECTING_VERSION = 0
NORMAL = 1
DEFINING_ITERATOR = 2
DEFINING_EQUALITY = 4
@@ -364,9 +358,8 @@ lldb_iter_defined = False
# The FSM, in all possible states, also checks the current input for IsValid()
# definition, and inserts a __nonzero__() method definition to implement truth
# value testing and the built-in operation bool().
-state = EXPECTING_VERSION
+state = NORMAL
-swig_version_tuple = None
for line in content.splitlines():
# Handle the state transition into CLEANUP_DOCSTRING state as it is possible
# to enter this state from either NORMAL or DEFINING_ITERATOR/EQUALITY.
@@ -383,20 +376,6 @@ for line in content.splitlines():
else:
state |= CLEANUP_DOCSTRING
- if state == EXPECTING_VERSION:
- # We haven't read the version yet, read it now.
- if swig_version_tuple is None:
- match = version_pattern.search(line)
- if match:
- v = match.group(1)
- swig_version_tuple = tuple(map(int, (v.split("."))))
- elif not line.startswith('#'):
- # This is the first non-comment line after the header. Inject the
- # version
- new_line = version_line % str(swig_version_tuple)
- new_content.add_line(new_line)
- state = NORMAL
-
if state == NORMAL:
match = class_pattern.search(line)
# Inserts lldb_helpers and the lldb_iter() definition before the first
diff --git a/lldb/scripts/lldb.swig b/lldb/scripts/lldb.swig
index e8553d075d4..1cfa2718eb4 100644
--- a/lldb/scripts/lldb.swig
+++ b/lldb/scripts/lldb.swig
@@ -66,6 +66,21 @@ import os
import six
%}
+
+// Include the version of swig that was used to generate this interface.
+%define EMBED_VERSION(VERSION)
+%pythoncode%{
+# SWIG_VERSION is written as a single hex number, but the components of it are
+# meant to be interpreted in decimal. So, 0x030012 is swig 3.0.12, and not
+# 3.0.18.
+def _to_int(hex):
+ return hex // 0x10 % 0x10 * 10 + hex % 0x10
+swig_version = (_to_int(VERSION // 0x10000), _to_int(VERSION // 0x100), _to_int(VERSION))
+del _to_int
+%}
+%enddef
+EMBED_VERSION(SWIG_VERSION)
+
%include "./Python/python-typemaps.swig"
/* C++ headers to be included. */
OpenPOWER on IntegriCloud