]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
makeopcodetargets.py: we need to import Lib/opcode.py
authorVictor Stinner <victor.stinner@gmail.com>
Sat, 26 Mar 2016 00:04:37 +0000 (01:04 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Sat, 26 Mar 2016 00:04:37 +0000 (01:04 +0100)
Issue #20021: use importlib.machinery to import Lib/opcode.py and not an opcode
module coming from somewhere else. makeopcodetargets.py is part of the Python
build process and it is run by an external Python program, not the built Python
program.

Patch written by Serhiy Storchaka.

Python/makeopcodetargets.py

index 7a57a0631bad5a8f2317d7c4f545839e0f1b9123..023c9e6c9f1adc1ce9d1e4223f77f90cfde6729b 100755 (executable)
@@ -3,14 +3,34 @@
 (for compilers supporting computed gotos or "labels-as-values", such as gcc).
 """
 
-import opcode
 import os
 import sys
 
 
+try:
+    from importlib.machinery import SourceFileLoader
+except ImportError:
+    import imp
+
+    def find_module(modname):
+        """Finds and returns a module in the local dist/checkout.
+        """
+        modpath = os.path.join(
+            os.path.dirname(os.path.dirname(__file__)), "Lib")
+        return imp.load_module(modname, *imp.find_module(modname, [modpath]))
+else:
+    def find_module(modname):
+        """Finds and returns a module in the local dist/checkout.
+        """
+        modpath = os.path.join(
+            os.path.dirname(os.path.dirname(__file__)), "Lib", modname + ".py")
+        return SourceFileLoader(modname, modpath).load_module()
+
+
 def write_contents(f):
     """Write C code contents to the target file object.
     """
+    opcode = find_module('opcode')
     targets = ['_unknown_opcode'] * 256
     for opname, op in opcode.opmap.items():
         targets[op] = "TARGET_%s" % opname