--- python.eclass +++ python.eclass @@ -774,6 +774,7 @@ import sys EPYTHON_re = re.compile(r"^python(\d+\.\d+)$") +python_shebang_re = re.compile(r"^#!.*python") EOF if [[ "$?" != "0" ]]; then @@ -841,13 +842,27 @@ fi cat << EOF >> "${file}" -os.environ["PYTHON_SCRIPT_NAME"] = sys.argv[0] -target_executable = "%s-%s" % (os.path.realpath(sys.argv[0]), PYTHON_ABI) -if not os.path.exists(target_executable): - sys.stderr.write("'%s' does not exist\n" % target_executable) +wrapper_script_path = os.path.realpath(sys.argv[0]) +target_executable_path = "%s-%s" % (wrapper_script_path, PYTHON_ABI) +os.environ["GENTOO_PYTHON_WRAPPER_SCRIPT_PATH"] = sys.argv[0] +os.environ["GENTOO_PYTHON_TARGET_SCRIPT_PATH"] = target_executable_path +if not os.path.exists(target_executable_path): + sys.stderr.write("'%s' does not exist\n" % target_executable_path) sys.exit(1) -os.execv(target_executable, sys.argv) +target_executable = open(target_executable_path, "rb") +target_executable_first_line = target_executable.readline() +if not isinstance(target_executable_first_line, str): + # Python 3 + target_executable_first_line = target_executable_first_line.decode("utf_8", "replace") + +python_shebang_matched = python_shebang_re.match(target_executable_first_line) +target_executable.close() + +if python_shebang_matched: + os.execv(wrapper_script_path, sys.argv) +else: + os.execv(target_executable_path, sys.argv) EOF if [[ "$?" != "0" ]]; then die "${FUNCNAME}(): Generation of '$1' failed"