#4018: GRASS ctypes fail with Python 3.7.6+ ----------------------------+--------------------------------- Reporter: mmetz | Owner: grass-dev@… Type: defect | Status: new Priority: critical | Milestone: 7.8.3 Component: Python ctypes | Version: git-releasebranch78 Resolution: | Keywords: ctypes CPU: All | Platform: All ----------------------------+---------------------------------
Comment (by mmetz): The main change is that for Python 3.7.6+ [https://docs.python.org/3/library/ctypes.html#structures-and-unions unions and structures with bit-fields should always be passed to functions by pointer]. The GRASS ctypes generator uses a custom [https://github.com/OSGeo/grass/blob/master/lib/python/ctypes/preamble.py#L289 class String] which is a union, which needs to be passed to functions as a pointer for Python 3.7.6+. Instead of using the custom class String, we could use the [https://docs.python.org/3/library/ctypes.html#fundamental-data-types fundamental data type c_char_p]. This works with Python 3.7.6 and Python 3.7.5, but not with Python 3.8.1. In some cases Python 3.8.1 complains about a `TypeError`, e.g. for C macros like {{{ #define GRASS_VERSION_STRING "@(#) 7.9.dev (2020)" }}} Maybe these C macros must be of ctype `POINTER(c_char)` which does not make sense because such a pointer would/should return only the first character pointed to by `POINTER(c_char)`. The important change in handling ctypes has been introduced with Python 3.7.6. The different behaviour of Python 3.7.6 and Python 3.8.1 regarding ctypes, particularly pointers to a '\0' terminated array of characters is right now a mystery. I have a patch for the GRASS ctypes generator that works with Python 3.7.5 and 3.7.6, i.e. before and after the important change in ctypes handling has been introduced in Python, and another patch for the GRASS ctypes generator that works with Python 3.8.1, but not with Python 3.7.x. Therefore I regard my patches as dirty hacks and am looking forward to any advice on how to correctly generate fully compatible ctypes. Or even better, [https://github.com/davidjamesca/ctypesgen ctypesgen] fixes these problems soon and we can use an updated version of ctypesgen. -- Ticket URL: <https://trac.osgeo.org/grass/ticket/4018#comment:1> GRASS GIS <https://grass.osgeo.org>
_______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-dev