]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commit
cmake: remove cython 0.29's subinterpreter check
authorTim Serong <tserong@suse.com>
Mon, 17 Dec 2018 11:01:25 +0000 (22:01 +1100)
committerTim Serong <tserong@suse.com>
Mon, 17 Dec 2018 12:27:06 +0000 (23:27 +1100)
commit3bde34af8a84d76744887b2cf10ee4ef36e3925b
treed3cb27f728c1916656190b90a703065a430798f9
parent2efb9ce8a2ec7c23ac55f54711b6d45138037bf7
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 <tserong@suse.com>
cmake/modules/Distutils.cmake