Commit 0578cb68 authored by Stefan Behnel's avatar Stefan Behnel

Fix PGO wrapper code and file path handling in Py2.

parent 7419d794
...@@ -345,13 +345,20 @@ class CythonMagics(Magics): ...@@ -345,13 +345,20 @@ class CythonMagics(Magics):
pgo_module_name = '_pgo_' + module_name pgo_module_name = '_pgo_' + module_name
pgo_wrapper_c_file = os.path.join(lib_dir, pgo_module_name + '.c') pgo_wrapper_c_file = os.path.join(lib_dir, pgo_module_name + '.c')
with io.open(pgo_wrapper_c_file, 'w', encoding='utf-8') as f: with io.open(pgo_wrapper_c_file, 'w', encoding='utf-8') as f:
f.write(textwrap.dedent(""" f.write(textwrap.dedent(u"""
#include "Python.h" #include "Python.h"
#if PY_MAJOR_VERSION < 3 #if PY_MAJOR_VERSION < 3
extern PyMODINIT_FUNC init%(module_name)s(void); extern PyMODINIT_FUNC init%(module_name)s(void);
PyMODINIT_FUNC init%(pgo_module_name)s(void); /*proto*/ PyMODINIT_FUNC init%(pgo_module_name)s(void); /*proto*/
PyMODINIT_FUNC init%(pgo_module_name)s(void) { PyMODINIT_FUNC init%(pgo_module_name)s(void) {
init%(module_name)s(); PyObject *sys_modules;
init%(module_name)s(); if (PyErr_Occurred()) return;
sys_modules = PyImport_GetModuleDict(); /* borrowed, no exception, "never" fails */
if (sys_modules) {
PyObject *module = PyDict_GetItemString(sys_modules, "%(module_name)s"); if (!module) return;
PyDict_SetItemString(sys_modules, "%(pgo_module_name)s", module);
Py_DECREF(module);
}
} }
#else #else
extern PyMODINIT_FUNC PyInit_%(module_name)s(void); extern PyMODINIT_FUNC PyInit_%(module_name)s(void);
...@@ -477,16 +484,19 @@ class CythonMagics(Magics): ...@@ -477,16 +484,19 @@ class CythonMagics(Magics):
add_pgo_flags = self._add_pgo_flags add_pgo_flags = self._add_pgo_flags
if pgo_step_name: if pgo_step_name:
base_build_ext = _build_ext
class _build_ext(_build_ext): class _build_ext(_build_ext):
def build_extensions(self): def build_extensions(self):
add_pgo_flags(self, pgo_step_name, temp_dir) add_pgo_flags(self, pgo_step_name, temp_dir)
super(_build_ext, self).build_extensions() base_build_ext.build_extensions(self)
build_extension = _build_ext(dist) build_extension = _build_ext(dist)
build_extension.finalize_options() build_extension.finalize_options()
if temp_dir: if temp_dir:
temp_dir = py3compat.cast_bytes_py2(temp_dir, encoding=sys.getfilesystemencoding())
build_extension.build_temp = temp_dir build_extension.build_temp = temp_dir
if lib_dir: if lib_dir:
lib_dir = py3compat.cast_bytes_py2(lib_dir, encoding=sys.getfilesystemencoding())
build_extension.build_lib = lib_dir build_extension.build_lib = lib_dir
if extension is not None: if extension is not None:
build_extension.extensions = [extension] build_extension.extensions = [extension]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment