diff --git a/tests/run/extern_include_order.srctree b/tests/run/extern_include_order.srctree new file mode 100644 index 0000000000000000000000000000000000000000..c5f1866af1f58ed88246573d97d89f3470a81999 --- /dev/null +++ b/tests/run/extern_include_order.srctree @@ -0,0 +1,55 @@ +PYTHON setup.py build_ext --inplace +PYTHON -c "import a" +PYTHON -c "import b" + +######## setup.py ######## + +from Cython.Build import cythonize +from distutils.core import setup + +setup( + ext_modules = cythonize("*.pyx"), +) + +######## a.pxd ######## + +cdef extern from "a_early.h": + ctypedef int my_int + +cdef extern from "a_late.h": + my_int square_value_plus_one() + +cdef my_int my_value "my_value" + +cdef my_int square "square"(my_int x) + +######## a.pyx ######## + +my_value = 10 + +cdef my_int square "square"(my_int x): + return x * x + +assert square_value_plus_one() == 101 + +# Square must be explicitly used for its proto to be generated. +cdef my_int use_square(x): + return square(x) + +######## a_early.h ######## + +typedef int my_int; + +######## a_late.h ######## + +static my_int square_value_plus_one() { + return square(my_value) + 1; +} + +######## b.pyx ######## + +cimport a + +# Likewise, a.square must be explicitly used. +assert a.square(a.my_value) + 1 == 101 +assert a.square_value_plus_one() == 101