diff options
author | Armin Rigo <arigo@tunes.org> | 2018-08-24 18:11:29 +0200 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2018-08-24 18:11:29 +0200 |
commit | bd807bad1d35b26114afa4b13766580ab0986a37 (patch) | |
tree | 8fce42acd40dfd6a6f6737bcc676b8352ccf1593 | |
parent | 456880f229564ffa55ad6763e9bafaabbcaefc4a (diff) | |
download | cffi-bd807bad1d35b26114afa4b13766580ab0986a37.tar.gz |
Redo 164e526a5515 and 14ce6985e1c3.
-rw-r--r-- | cffi/_cffi_include.h | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/cffi/_cffi_include.h b/cffi/_cffi_include.h index 4f8ef82..6711428 100644 --- a/cffi/_cffi_include.h +++ b/cffi/_cffi_include.h @@ -7,11 +7,44 @@ we can learn about Py_DEBUG from pyconfig.h, but it is unclear if the same works for the other two macros. Py_DEBUG implies them, but not the other way around. + + The implementation is messy (issue #350): on Windows, with _MSC_VER, + we have to define Py_LIMITED_API even before including pyconfig.h. + In that case, we guess what pyconfig.h will do to the macros above, + and check our guess after the #include. + + Note that on Windows, with CPython 3.x, you need virtualenv version + >= 16.0.0. Older versions don't copy PYTHON3.DLL. As a workaround + you can remove the definition of Py_LIMITED_API here. + + See also 'py_limited_api' in cffi/setuptools_ext.py. */ #if !defined(_CFFI_USE_EMBEDDING) && !defined(Py_LIMITED_API) -# include <pyconfig.h> -# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) -# define Py_LIMITED_API +# ifdef _MSC_VER +# if !defined(_DEBUG) && !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) +# define Py_LIMITED_API +# endif +# include <pyconfig.h> + /* sanity-check: Py_LIMITED_API will cause crashes if any of these + are also defined. Normally, the Python file PC/pyconfig.h does not + cause any of these to be defined, with the exception that _DEBUG + causes Py_DEBUG. Double-check that. */ +# ifdef Py_LIMITED_API +# if defined(Py_DEBUG) +# error "pyconfig.h unexpectedly defines Py_DEBUG, but Py_LIMITED_API is set" +# endif +# if defined(Py_TRACE_REFS) +# error "pyconfig.h unexpectedly defines Py_TRACE_REFS, but Py_LIMITED_API is set" +# endif +# if defined(Py_REF_DEBUG) +# error "pyconfig.h unexpectedly defines Py_REF_DEBUG, but Py_LIMITED_API is set" +# endif +# endif +# else +# include <pyconfig.h> +# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) +# define Py_LIMITED_API +# endif # endif #endif |