Support PyString_AsString() in Python 3 < 3.3
authorMichael Pratt <michael@pratt.im>
Fri, 8 Nov 2013 04:37:52 +0000 (23:37 -0500)
committerarc <arc@cthulhu.lan>
Fri, 8 Nov 2013 04:47:33 +0000 (23:47 -0500)
In Python 3, version 3.3+, PyUnicode_AsUTF8() provides similar
functionality to Python 2's PyString_AsString().

In older versions of Python 3, there is no public function to provide
the same functionality.  However, the "internal" _PyUnicode_AsString()
does provide that functionality, so use it to replace
PyString_AsString().

With this patch, cv2 should compile for Python 3.[0-2].

modules/python/src2/pycompat.hpp

index c473fff..f4ebea6 100644 (file)
 // Python3 strings are unicode, these defines mimic the Python2 functionality.
 #define PyString_Check PyUnicode_Check
 #define PyString_FromString PyUnicode_FromString
-#define PyString_AsString PyUnicode_AsUTF8
 #define PyString_FromStringAndSize PyUnicode_FromStringAndSize
 #define PyString_Size PyUnicode_GET_SIZE
+
+// PyUnicode_AsUTF8 isn't available until Python 3.3
+#if (PY_VERSION_HEX < 0x03030000)
+#define PyString_AsString _PyUnicode_AsString
+#else
+#define PyString_AsString PyUnicode_AsUTF8
+#endif
 #endif
 
 #endif // END HEADER GUARD