208 lines
6.5 KiB
C
208 lines
6.5 KiB
C
|
/* Python 2.x/3.x compatibility tools (internal)
|
||
|
*/
|
||
|
#ifndef PGCOMPAT_INTERNAL_H
|
||
|
#define PGCOMPAT_INTERNAL_H
|
||
|
|
||
|
#include "include/pgcompat.h"
|
||
|
|
||
|
#if PY_MAJOR_VERSION >= 3
|
||
|
|
||
|
#define PY3 1
|
||
|
|
||
|
/* Define some aliases for the removed PyInt_* functions */
|
||
|
#define PyInt_Check(op) PyLong_Check(op)
|
||
|
#define PyInt_FromString PyLong_FromString
|
||
|
#define PyInt_FromLong PyLong_FromLong
|
||
|
#define PyInt_FromSize_t PyLong_FromSize_t
|
||
|
#define PyInt_FromSsize_t PyLong_FromSsize_t
|
||
|
#define PyInt_AsLong PyLong_AsLong
|
||
|
#define PyInt_AsSsize_t PyLong_AsSsize_t
|
||
|
#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
|
||
|
#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
|
||
|
#define PyInt_AS_LONG PyLong_AS_LONG
|
||
|
#define PyNumber_Int PyNumber_Long
|
||
|
/* Int and Long are identical in Py3 so only check one */
|
||
|
#define INT_CHECK(op) PyLong_Check(op)
|
||
|
|
||
|
/* Weakrefs flags changed in 3.x */
|
||
|
#define Py_TPFLAGS_HAVE_WEAKREFS 0
|
||
|
|
||
|
/* Module init function returns new module instance. */
|
||
|
#define MODINIT_RETURN(x) return x
|
||
|
#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC PyInit_##mod_name (void)
|
||
|
#define DECREF_MOD(mod) Py_DECREF (mod)
|
||
|
|
||
|
/* Text interface. Use unicode strings. */
|
||
|
#define Text_Type PyUnicode_Type
|
||
|
#define Text_Check PyUnicode_Check
|
||
|
|
||
|
#ifndef PYPY_VERSION
|
||
|
#define Text_FromLocale(s) PyUnicode_DecodeLocale((s), "strict")
|
||
|
#else /* PYPY_VERSION */
|
||
|
/* workaround: missing function for pypy */
|
||
|
#define Text_FromLocale PyUnicode_FromString
|
||
|
#endif /* PYPY_VERSION */
|
||
|
|
||
|
#define Text_FromUTF8 PyUnicode_FromString
|
||
|
#define Text_FromUTF8AndSize PyUnicode_FromStringAndSize
|
||
|
#define Text_FromFormat PyUnicode_FromFormat
|
||
|
#define Text_GetSize PyUnicode_GetSize
|
||
|
#define Text_GET_SIZE PyUnicode_GET_SIZE
|
||
|
|
||
|
/* Binary interface. Use bytes. */
|
||
|
#define Bytes_Type PyBytes_Type
|
||
|
#define Bytes_Check PyBytes_Check
|
||
|
#define Bytes_Size PyBytes_Size
|
||
|
#define Bytes_AsString PyBytes_AsString
|
||
|
#define Bytes_AsStringAndSize PyBytes_AsStringAndSize
|
||
|
#define Bytes_FromStringAndSize PyBytes_FromStringAndSize
|
||
|
#define Bytes_FromFormat PyBytes_FromFormat
|
||
|
#define Bytes_AS_STRING PyBytes_AS_STRING
|
||
|
#define Bytes_GET_SIZE PyBytes_GET_SIZE
|
||
|
#define Bytes_AsDecodeObject PyBytes_AsDecodedObject
|
||
|
|
||
|
#define Object_Unicode PyObject_Str
|
||
|
|
||
|
#define IsTextObj(x) (PyUnicode_Check(x) || PyBytes_Check(x))
|
||
|
|
||
|
/* Renamed builtins */
|
||
|
#define BUILTINS_MODULE "builtins"
|
||
|
#define BUILTINS_UNICODE "str"
|
||
|
#define BUILTINS_UNICHR "chr"
|
||
|
|
||
|
/* Defaults for unicode file path encoding */
|
||
|
#define UNICODE_DEF_FS_CODEC Py_FileSystemDefaultEncoding
|
||
|
#if defined(MS_WIN32)
|
||
|
#define UNICODE_DEF_FS_ERROR "replace"
|
||
|
#else
|
||
|
#define UNICODE_DEF_FS_ERROR "surrogateescape"
|
||
|
#endif
|
||
|
|
||
|
#else /* #if PY_MAJOR_VERSION >= 3 */
|
||
|
|
||
|
#define PY3 0
|
||
|
|
||
|
/* Check both Int and Long in PY2 */
|
||
|
#define INT_CHECK(op) (PyInt_Check(op) || PyLong_Check(op))
|
||
|
|
||
|
/* Module init function returns nothing. */
|
||
|
#define MODINIT_RETURN(x) return
|
||
|
#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC init##mod_name (void)
|
||
|
#define DECREF_MOD(mod)
|
||
|
|
||
|
/* Text interface. Use ascii strings. */
|
||
|
#define Text_Type PyString_Type
|
||
|
#define Text_Check PyString_Check
|
||
|
#define Text_FromLocale PyString_FromString
|
||
|
#define Text_FromUTF8 PyString_FromString
|
||
|
#define Text_FromUTF8AndSize PyString_FromStringAndSize
|
||
|
#define Text_FromFormat PyString_FromFormat
|
||
|
#define Text_GetSize PyString_GetSize
|
||
|
#define Text_GET_SIZE PyString_GET_SIZE
|
||
|
|
||
|
/* Binary interface. Use ascii strings. */
|
||
|
#define Bytes_Type PyString_Type
|
||
|
#define Bytes_Check PyString_Check
|
||
|
#define Bytes_Size PyString_Size
|
||
|
#define Bytes_AsString PyString_AsString
|
||
|
#define Bytes_AsStringAndSize PyString_AsStringAndSize
|
||
|
#define Bytes_FromStringAndSize PyString_FromStringAndSize
|
||
|
#define Bytes_FromFormat PyString_FromFormat
|
||
|
#define Bytes_AS_STRING PyString_AS_STRING
|
||
|
#define Bytes_GET_SIZE PyString_GET_SIZE
|
||
|
#define Bytes_AsDecodedObject PyString_AsDecodedObject
|
||
|
|
||
|
#define Object_Unicode PyObject_Unicode
|
||
|
|
||
|
/* Renamed builtins */
|
||
|
#define BUILTINS_MODULE "__builtin__"
|
||
|
#define BUILTINS_UNICODE "unicode"
|
||
|
#define BUILTINS_UNICHR "unichr"
|
||
|
|
||
|
/* Defaults for unicode file path encoding */
|
||
|
#define UNICODE_DEF_FS_CODEC Py_FileSystemDefaultEncoding
|
||
|
#define UNICODE_DEF_FS_ERROR "strict"
|
||
|
|
||
|
#endif /* #if PY_MAJOR_VERSION >= 3 */
|
||
|
|
||
|
#define PY2 (!PY3)
|
||
|
|
||
|
#define MODINIT_ERROR MODINIT_RETURN (NULL)
|
||
|
|
||
|
/* Module state. These macros are used to define per-module macros.
|
||
|
* v - global state variable (Python 2.x)
|
||
|
* s - global state structure (Python 3.x)
|
||
|
*/
|
||
|
#define PY2_GETSTATE(v) (&(v))
|
||
|
#define PY3_GETSTATE(s, m) ((struct s *) PyModule_GetState (m))
|
||
|
|
||
|
/* Pep 3123: Making PyObject_HEAD conform to standard C */
|
||
|
#if !defined(Py_TYPE)
|
||
|
#define Py_TYPE(o) (((PyObject *)(o))->ob_type)
|
||
|
#define Py_REFCNT(o) (((PyObject *)(o))->ob_refcnt)
|
||
|
#define Py_SIZE(o) (((PyVarObject *)(o))->ob_size)
|
||
|
#endif
|
||
|
|
||
|
/* Encode a unicode file path */
|
||
|
#define Unicode_AsEncodedPath(u) \
|
||
|
PyUnicode_AsEncodedString ((u), UNICODE_DEF_FS_CODEC, UNICODE_DEF_FS_ERROR)
|
||
|
|
||
|
#define RELATIVE_MODULE(m) ("." m)
|
||
|
|
||
|
#define HAVE_OLD_BUFPROTO PY2
|
||
|
|
||
|
#if !defined(PG_ENABLE_OLDBUF) /* allow for command line override */
|
||
|
#if HAVE_OLD_BUFPROTO
|
||
|
#define PG_ENABLE_OLDBUF 1
|
||
|
#else
|
||
|
#define PG_ENABLE_OLDBUF 0
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
|
||
|
#define Py_TPFLAGS_HAVE_NEWBUFFER 0
|
||
|
#endif
|
||
|
|
||
|
#ifndef Py_TPFLAGS_HAVE_CLASS
|
||
|
#define Py_TPFLAGS_HAVE_CLASS 0
|
||
|
#endif
|
||
|
|
||
|
#ifndef Py_TPFLAGS_CHECKTYPES
|
||
|
#define Py_TPFLAGS_CHECKTYPES 0
|
||
|
#endif
|
||
|
|
||
|
#if PY_VERSION_HEX >= 0x03020000
|
||
|
#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \
|
||
|
PySlice_GetIndicesEx(slice, length, start, stop, step, slicelength)
|
||
|
#else
|
||
|
#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \
|
||
|
PySlice_GetIndicesEx((PySliceObject *)(slice), length, \
|
||
|
start, stop, step, slicelength)
|
||
|
#endif
|
||
|
|
||
|
#if defined(SDL_VERSION_ATLEAST)
|
||
|
#if (SDL_VERSION_ATLEAST(2, 0, 0)) && !(SDL_VERSION_ATLEAST(2, 0, 5))
|
||
|
/* These functions require SDL 2.0.5 or greater.
|
||
|
|
||
|
https://wiki.libsdl.org/SDL_SetWindowResizable
|
||
|
*/
|
||
|
void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable);
|
||
|
int SDL_GetWindowOpacity(SDL_Window *window, float *opacity);
|
||
|
int SDL_SetWindowOpacity(SDL_Window *window, float opacity);
|
||
|
int SDL_SetWindowModalFor(SDL_Window *modal_window, SDL_Window *parent_window);
|
||
|
int SDL_SetWindowInputFocus(SDL_Window *window);
|
||
|
SDL_Surface * SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth,
|
||
|
Uint32 format);
|
||
|
#endif
|
||
|
#endif /* defined(SDL_VERSION_ATLEAST) */
|
||
|
|
||
|
// Currently needed to build scrap.c, event.c, display.c
|
||
|
// with Windows SDK 10.0.18362.0 and SDL1 build
|
||
|
#ifdef _MSC_VER
|
||
|
#ifndef WINDOWS_IGNORE_PACKING_MISMATCH
|
||
|
#define WINDOWS_IGNORE_PACKING_MISMATCH
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#endif /* ~PGCOMPAT_INTERNAL_H */
|