From: Tim Serong Date: Mon, 17 Dec 2018 11:01:25 +0000 (+1100) Subject: cmake: remove cython 0.29's subinterpreter check X-Git-Tag: v13.2.7~272^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=627f149ad6fd04489df350f25dabcbac4e73803f;p=ceph.git cmake: remove cython 0.29's subinterpreter check cython 0.29 introduced a check which prevents multiple python subinterpreters from loading the same module: https://github.com/cython/cython/commit/7e27c7c Unfortunately, this completely breaks ceph-mgr. Until we can figure out a better long term solution, this commit removes cython's subinterpreter check, via some careful abuse of the C preprocessor. This works because when cython is invoked, it first generates some C code, then compiles it. We know it's going to generate C code including: int __Pyx_check_single_interpreter(void) { ... } and: if (__Pyx_check_single_interpreter()) return NULL; So, we can do the following: #define void0 dead_function(void) #define __Pyx_check_single_interpreter(ARG)=ARG ## 0 This replaces the call to __Pyx_check_single_interpreter() with a literal 0, removing the subinterpreter check. The void0 dead_function(void) thing is necessary because the __Pyx_check_single_interpreter() macro also clobbers that function definition, so we need to make sure it's replaced with something that works as a function definition. Fixes: https://tracker.ceph.com/issues/37472 Signed-off-by: Tim Serong (cherry picked from commit 3bde34af8a84d76744887b2cf10ee4ef36e3925b) Conflicts: cmake/modules/Distutils.cmake - mimic doesn't have the immediately preceding ccache stuff --- diff --git a/cmake/modules/Distutils.cmake b/cmake/modules/Distutils.cmake index d6e9f3817c3d..19de89f97f25 100644 --- a/cmake/modules/Distutils.cmake +++ b/cmake/modules/Distutils.cmake @@ -34,6 +34,9 @@ endfunction(distutils_install_module) function(distutils_add_cython_module name src) get_property(compiler_launcher GLOBAL PROPERTY RULE_LAUNCH_COMPILE) get_property(link_launcher GLOBAL PROPERTY RULE_LAUNCH_LINK) + # This little bit of magic wipes out __Pyx_check_single_interpreter() + list(APPEND cflags -D'void0=dead_function\(void\)') + list(APPEND cflags -D'__Pyx_check_single_interpreter\(ARG\)=ARG \#\# 0') set(PY_CC \"${compiler_launcher} ${CMAKE_C_COMPILER}\") set(PY_CXX \"${compiler_launcher} ${CMAKE_CXX_COMPILER}\") set(PY_LDSHARED \"${link_launcher} ${CMAKE_C_COMPILER} -shared\")