From: Victor Stinner Date: Sat, 26 Mar 2016 00:04:37 +0000 (+0100) Subject: makeopcodetargets.py: we need to import Lib/opcode.py X-Git-Tag: v3.6.0a1~322 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ca9dbc7d880ac6e5e1df3219e34670b18998a346;p=thirdparty%2FPython%2Fcpython.git makeopcodetargets.py: we need to import Lib/opcode.py 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. --- diff --git a/Python/makeopcodetargets.py b/Python/makeopcodetargets.py index 7a57a0631bad..023c9e6c9f1a 100755 --- a/Python/makeopcodetargets.py +++ b/Python/makeopcodetargets.py @@ -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