Description: add all arginfo and fix build with PHP 8
Author: Remi Collet <remi@remirepo.net>
Origin: https://git.remirepo.net/cgit/rpms/php/php-geos.git/tree/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch
Bug: https://git.osgeo.org/gitea/geos/php-geos/issues/26

--- /dev/null
+++ b/arginfo.h
@@ -0,0 +1,319 @@
+/* commonly used ones */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_void, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_geom, 0, 0, 1)
+    ZEND_ARG_INFO(0, geom)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_num, 0, 0, 1)
+    ZEND_ARG_INFO(0, num)
+ZEND_END_ARG_INFO()
+
+/* function arginfo */
+
+#define arginfo_GEOSVersion              arginfo_void
+
+#define arginfo_GEOSPolygonize           arginfo_geom
+#define arginfo_GEOSLineMerge            arginfo_geom
+
+#ifdef HAVE_GEOS_SHARED_PATHS
+ZEND_BEGIN_ARG_INFO_EX(arginfo_GEOSSharedPaths, 0, 0, 2)
+    ZEND_ARG_INFO(0, geom1)
+    ZEND_ARG_INFO(0, geom2)
+ZEND_END_ARG_INFO()
+#endif
+
+#ifdef HAVE_GEOS_RELATE_PATTERN_MATCH
+ZEND_BEGIN_ARG_INFO_EX(arginfo_GEOSRelateMatch, 0, 0, 2)
+    ZEND_ARG_INFO(0, maxtric)
+    ZEND_ARG_INFO(0, pattern)
+ZEND_END_ARG_INFO()
+#endif
+
+/* GEOSGeometry methods arginfo */
+
+#define arginfo_Geometry_construct       arginfo_void
+
+#define arginfo_Geometry_toString        arginfo_void
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_project, 0, 0, 1)
+    ZEND_ARG_INFO(0, geom)
+    ZEND_ARG_INFO(0, normalized)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_interpolate, 0, 0, 1)
+    ZEND_ARG_INFO(0, dist)
+    ZEND_ARG_INFO(0, normalized)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_buffer, 0, 0, 1)
+    ZEND_ARG_INFO(0, dist)
+    ZEND_ARG_INFO(0, style)
+ZEND_END_ARG_INFO()
+
+#ifdef HAVE_GEOS_OFFSET_CURVE
+#define arginfo_Geometry_offsetCurve     arginfo_Geometry_buffer
+#endif
+
+#define arginfo_Geometry_envelope        arginfo_void
+
+#define arginfo_Geometry_intersection    arginfo_geom
+
+#define arginfo_Geometry_convexHull      arginfo_void
+
+#define arginfo_Geometry_difference      arginfo_geom
+
+#define arginfo_Geometry_symDifference   arginfo_geom
+
+#define arginfo_Geometry_boundary        arginfo_void
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_union, 0, 0, 0)
+    ZEND_ARG_INFO(0, geom)
+ZEND_END_ARG_INFO()
+
+#define arginfo_Geometry_pointOnSurface  arginfo_void
+
+#define arginfo_Geometry_centroid        arginfo_void
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_relate, 0, 0, 1)
+    ZEND_ARG_INFO(0, geom)
+    ZEND_ARG_INFO(0, pattern)
+ZEND_END_ARG_INFO()
+
+#ifdef HAVE_GEOS_RELATE_BOUNDARY_NODE_RULE
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_relateBoundaryNodeRule, 0, 0, 2)
+    ZEND_ARG_INFO(0, geom)
+    ZEND_ARG_INFO(0, rule)
+ZEND_END_ARG_INFO()
+#endif
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_simplify, 0, 0, 1)
+    ZEND_ARG_INFO(0, tolerance)
+    ZEND_ARG_INFO(0, preserveTopology)
+ZEND_END_ARG_INFO()
+
+#define arginfo_Geometry_normalize       arginfo_void
+
+#ifdef HAVE_GEOS_GEOM_SET_PRECISION
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_setPrecision, 0, 0, 1)
+    ZEND_ARG_INFO(0, gridsize)
+    ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+#endif
+
+#ifdef HAVE_GEOS_GEOM_GET_PRECISION
+#define arginfo_Geometry_getPrecision    arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_GEOM_EXTRACT_UNIQUE_POINTS
+#define arginfo_Geometry_extractUniquePoints arginfo_void
+#endif
+
+#define arginfo_Geometry_disjoint        arginfo_geom
+
+#define arginfo_Geometry_touches         arginfo_geom
+
+#define arginfo_Geometry_intersects      arginfo_geom
+
+#define arginfo_Geometry_crosses         arginfo_geom
+
+#define arginfo_Geometry_within          arginfo_geom
+
+#define arginfo_Geometry_contains        arginfo_geom
+
+#define arginfo_Geometry_overlaps        arginfo_geom
+
+#ifdef HAVE_GEOS_COVERS
+#define arginfo_Geometry_covers          arginfo_geom
+#endif
+
+#ifdef HAVE_GEOS_COVERED_BY
+#define arginfo_Geometry_coveredBy       arginfo_geom
+#endif
+
+#define arginfo_Geometry_equals          arginfo_geom
+
+#define arginfo_Geometry_equalsExact     arginfo_geom
+
+#define arginfo_Geometry_isEmpty         arginfo_void
+
+#ifdef HAVE_GEOS_IS_VALID_DETAIL
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_checkValidity, 0, 0, 0)
+    ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+#endif
+
+#define arginfo_Geometry_isSimple        arginfo_void
+
+#define arginfo_Geometry_isRing          arginfo_void
+
+#define arginfo_Geometry_hasZ            arginfo_void
+
+
+#ifdef HAVE_GEOS_IS_CLOSED
+#define arginfo_Geometry_isClosed        arginfo_void
+#endif
+
+#define arginfo_Geometry_typeName        arginfo_void
+
+#define arginfo_Geometry_typeId          arginfo_void
+
+#define arginfo_Geometry_getSRID         arginfo_void
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_setSRID, 0, 0, 0)
+    ZEND_ARG_INFO(0, srid)
+ZEND_END_ARG_INFO()
+
+#define arginfo_Geometry_numGeometries   arginfo_void
+
+#define arginfo_Geometry_geometryN       arginfo_num
+
+#define arginfo_Geometry_numInteriorRings arginfo_void
+
+#ifdef HAVE_GEOS_GEOM_GET_NUM_POINTS
+#define arginfo_Geometry_numPoints       arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_GEOM_GET_X
+#define arginfo_Geometry_getX            arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_GEOM_GET_Y
+#define arginfo_Geometry_getY            arginfo_void
+#endif
+
+#define arginfo_Geometry_interiorRingN   arginfo_num
+
+#define arginfo_Geometry_exteriorRing    arginfo_void
+
+#define arginfo_Geometry_numCoordinates  arginfo_void
+
+#define arginfo_Geometry_dimension       arginfo_void
+
+#ifdef HAVE_GEOS_GEOM_GET_COORDINATE_DIMENSION
+#define arginfo_Geometry_coordinateDimension arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_GEOM_GET_POINT_N
+#define arginfo_Geometry_pointN          arginfo_num
+#endif
+
+#ifdef HAVE_GEOS_GEOM_GET_START_POINT
+#define arginfo_Geometry_startPoint      arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_GEOM_GET_END_POINT
+#define arginfo_Geometry_endPoint        arginfo_void
+#endif
+
+#define arginfo_Geometry_area            arginfo_void
+
+#define arginfo_Geometry_length          arginfo_void
+
+#define arginfo_Geometry_distance        arginfo_geom
+
+#define arginfo_Geometry_hausdorffDistance arginfo_geom
+
+#ifdef HAVE_GEOS_SNAP
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_snapTo, 0, 0, 2)
+    ZEND_ARG_INFO(0, geom)
+    ZEND_ARG_INFO(0, tolerance)
+ZEND_END_ARG_INFO()
+#endif
+
+#ifdef HAVE_GEOS_NODE
+#define arginfo_Geometry_node            arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_DELAUNAY_TRIANGULATION
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_delaunayTriangulation, 0, 0, 0)
+    ZEND_ARG_INFO(0, tolerance)
+    ZEND_ARG_INFO(0, edgeonly)
+ZEND_END_ARG_INFO()
+#endif
+
+#ifdef HAVE_GEOS_VORONOI_DIAGRAM
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_voronoiDiagram, 0, 0, 0)
+    ZEND_ARG_INFO(0, tolerance)
+    ZEND_ARG_INFO(0, edgeonly)
+    ZEND_ARG_INFO(0, extent)
+ZEND_END_ARG_INFO()
+#endif
+
+#ifdef HAVE_GEOS_CLIP_BY_RECT
+ZEND_BEGIN_ARG_INFO_EX(arginfo_Geometry_clipByRect, 0, 0, 4)
+    ZEND_ARG_INFO(0, xmin)
+    ZEND_ARG_INFO(0, ymin)
+    ZEND_ARG_INFO(0, xmax)
+    ZEND_ARG_INFO(0, ymax)
+ZEND_END_ARG_INFO()
+#endif
+
+/* GEOSWKBReader methods arginfo */
+
+#define arginfo_WKBReader_construct      arginfo_void
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_WKBReader_read, 0, 0, 1)
+    ZEND_ARG_INFO(0, wkb)
+ZEND_END_ARG_INFO()
+
+#define arginfo_WKBReader_readHEX        arginfo_WKBReader_read
+
+/* GEOSWKTReader methods arginfo */
+
+#define arginfo_WKTReader_construct      arginfo_void
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_WKTReader_read, 0, 0, 1)
+    ZEND_ARG_INFO(0, wkt)
+ZEND_END_ARG_INFO()
+
+/* GEOSWKTWriter methods arginfo */
+
+#define arginfo_WKTWriter_construct      arginfo_void
+
+#define arginfo_WKTWriter_write          arginfo_geom
+
+#ifdef HAVE_GEOS_WKT_WRITER_SET_TRIM
+#define arginfo_WKTWriter_setTrim        arginfo_num
+#endif
+
+#ifdef HAVE_GEOS_WKT_WRITER_SET_ROUNDING_PRECISION
+#define arginfo_WKTWriter_setRoundingPrecision arginfo_num
+#endif
+
+#ifdef HAVE_GEOS_WKT_WRITER_SET_OUTPUT_DIMENSION
+#define arginfo_WKTWriter_setOutputDimension   arginfo_num
+#endif
+
+#ifdef HAVE_GEOS_WKT_WRITER_GET_OUTPUT_DIMENSION
+#define arginfo_WKTWriter_getOutputDimension arginfo_void
+#endif
+
+#ifdef HAVE_GEOS_WKT_WRITER_SET_OLD_3D
+ZEND_BEGIN_ARG_INFO_EX(arginfo_WKTWriter_setOld3D, 0, 0, 1)
+    ZEND_ARG_INFO(0, bval)
+ZEND_END_ARG_INFO()
+#endif
+
+/* GEOSWKTWriter methods arginfo */
+
+#define arginfo_WKBWriter_construct          arginfo_void
+
+#define arginfo_WKBWriter_getOutputDimension arginfo_void
+
+#define arginfo_WKBWriter_setOutputDimension arginfo_num
+
+#define arginfo_WKBWriter_getByteOrder       arginfo_void
+
+#define arginfo_WKBWriter_setByteOrder       arginfo_num
+
+#define arginfo_WKBWriter_setIncludeSRID     arginfo_num
+
+#define arginfo_WKBWriter_getIncludeSRID     arginfo_void
+
+#define arginfo_WKBWriter_write              arginfo_geom
+
+#define arginfo_WKBWriter_writeHEX           arginfo_geom
+
--- a/geos.c
+++ b/geos.c
@@ -32,6 +32,7 @@
 
 /* Own stuff */
 #include "php_geos.h"
+#include "arginfo.h"
 
 static ZEND_DECLARE_MODULE_GLOBALS(geos);
 static PHP_GINIT_FUNCTION(geos);
@@ -84,18 +85,23 @@ PHP_FUNCTION(GEOSRelateMatch);
 
 
 static zend_function_entry geos_functions[] = {
-    PHP_FE(GEOSVersion, NULL)
-    PHP_FE(GEOSPolygonize, NULL)
-    PHP_FE(GEOSLineMerge, NULL)
+    PHP_FE(GEOSVersion, arginfo_GEOSVersion)
+    PHP_FE(GEOSPolygonize, arginfo_GEOSPolygonize)
+    PHP_FE(GEOSLineMerge, arginfo_GEOSLineMerge)
 
 #   ifdef HAVE_GEOS_SHARED_PATHS
-    PHP_FE(GEOSSharedPaths, NULL)
+    PHP_FE(GEOSSharedPaths, arginfo_GEOSSharedPaths)
 #   endif
 
 #   ifdef HAVE_GEOS_RELATE_PATTERN_MATCH
-    PHP_FE(GEOSRelateMatch, NULL)
+    PHP_FE(GEOSRelateMatch, arginfo_GEOSRelateMatch)
 #   endif
+
+#ifdef PHP_FE_END
+    PHP_FE_END
+#else
     {NULL, NULL, NULL}
+#endif
 };
 
 zend_module_entry geos_module_entry = {
@@ -428,142 +434,142 @@ PHP_METHOD(Geometry, clipByRect);
 #endif
 
 static zend_function_entry Geometry_methods[] = {
-    PHP_ME(Geometry, __construct, NULL, 0)
-    PHP_ME(Geometry, __toString, NULL, 0)
-    PHP_ME(Geometry, project, NULL, 0)
-    PHP_ME(Geometry, interpolate, NULL, 0)
-    PHP_ME(Geometry, buffer, NULL, 0)
+    PHP_ME(Geometry, __construct, arginfo_Geometry_construct, 0)
+    PHP_ME(Geometry, __toString, arginfo_Geometry_toString, 0)
+    PHP_ME(Geometry, project, arginfo_Geometry_project, 0)
+    PHP_ME(Geometry, interpolate, arginfo_Geometry_interpolate, 0)
+    PHP_ME(Geometry, buffer, arginfo_Geometry_buffer, 0)
 
 #   ifdef HAVE_GEOS_OFFSET_CURVE
-    PHP_ME(Geometry, offsetCurve, NULL, 0)
+    PHP_ME(Geometry, offsetCurve, arginfo_Geometry_offsetCurve, 0)
 #   endif
 
-    PHP_ME(Geometry, envelope, NULL, 0)
-    PHP_ME(Geometry, intersection, NULL, 0)
-    PHP_ME(Geometry, convexHull, NULL, 0)
-    PHP_ME(Geometry, difference, NULL, 0)
-    PHP_ME(Geometry, symDifference, NULL, 0)
-    PHP_ME(Geometry, boundary, NULL, 0)
-    PHP_ME(Geometry, union, NULL, 0)
-    PHP_ME(Geometry, pointOnSurface, NULL, 0)
-    PHP_ME(Geometry, centroid, NULL, 0)
-    PHP_ME(Geometry, relate, NULL, 0)
+    PHP_ME(Geometry, envelope, arginfo_Geometry_envelope, 0)
+    PHP_ME(Geometry, intersection, arginfo_Geometry_intersection, 0)
+    PHP_ME(Geometry, convexHull, arginfo_Geometry_convexHull, 0)
+    PHP_ME(Geometry, difference, arginfo_Geometry_difference, 0)
+    PHP_ME(Geometry, symDifference, arginfo_Geometry_symDifference, 0)
+    PHP_ME(Geometry, boundary, arginfo_Geometry_boundary, 0)
+    PHP_ME(Geometry, union, arginfo_Geometry_union, 0)
+    PHP_ME(Geometry, pointOnSurface, arginfo_Geometry_pointOnSurface, 0)
+    PHP_ME(Geometry, centroid, arginfo_Geometry_centroid, 0)
+    PHP_ME(Geometry, relate, arginfo_Geometry_relate, 0)
 
 #   ifdef HAVE_GEOS_RELATE_BOUNDARY_NODE_RULE
-    PHP_ME(Geometry, relateBoundaryNodeRule, NULL, 0)
+    PHP_ME(Geometry, relateBoundaryNodeRule, arginfo_Geometry_relateBoundaryNodeRule, 0)
 #   endif
 
-    PHP_ME(Geometry, simplify, NULL, 0)
-    PHP_ME(Geometry, normalize, NULL, 0)
+    PHP_ME(Geometry, simplify, arginfo_Geometry_simplify, 0)
+    PHP_ME(Geometry, normalize, arginfo_Geometry_normalize, 0)
 
 #   ifdef HAVE_GEOS_GEOM_SET_PRECISION
-    PHP_ME(Geometry, setPrecision, NULL, 0)
+    PHP_ME(Geometry, setPrecision, arginfo_Geometry_setPrecision, 0)
 #   endif
 
 #   if HAVE_GEOS_GEOM_GET_PRECISION
-    PHP_ME(Geometry, getPrecision, NULL, 0)
+    PHP_ME(Geometry, getPrecision, arginfo_Geometry_getPrecision, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_GEOM_EXTRACT_UNIQUE_POINTS
-    PHP_ME(Geometry, extractUniquePoints, NULL, 0)
+    PHP_ME(Geometry, extractUniquePoints, arginfo_Geometry_extractUniquePoints, 0)
 #   endif
 
-    PHP_ME(Geometry, disjoint, NULL, 0)
-    PHP_ME(Geometry, touches, NULL, 0)
-    PHP_ME(Geometry, intersects, NULL, 0)
-    PHP_ME(Geometry, crosses, NULL, 0)
-    PHP_ME(Geometry, within, NULL, 0)
-    PHP_ME(Geometry, contains, NULL, 0)
-    PHP_ME(Geometry, overlaps, NULL, 0)
+    PHP_ME(Geometry, disjoint, arginfo_Geometry_disjoint, 0)
+    PHP_ME(Geometry, touches, arginfo_Geometry_touches, 0)
+    PHP_ME(Geometry, intersects, arginfo_Geometry_intersects, 0)
+    PHP_ME(Geometry, crosses, arginfo_Geometry_crosses, 0)
+    PHP_ME(Geometry, within, arginfo_Geometry_within, 0)
+    PHP_ME(Geometry, contains, arginfo_Geometry_contains, 0)
+    PHP_ME(Geometry, overlaps, arginfo_Geometry_overlaps, 0)
 
 #   ifdef HAVE_GEOS_COVERS
-    PHP_ME(Geometry, covers, NULL, 0)
+    PHP_ME(Geometry, covers, arginfo_Geometry_covers, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_COVERED_BY
-    PHP_ME(Geometry, coveredBy, NULL, 0)
+    PHP_ME(Geometry, coveredBy, arginfo_Geometry_coveredBy, 0)
 #   endif
 
-    PHP_ME(Geometry, equals, NULL, 0)
-    PHP_ME(Geometry, equalsExact, NULL, 0)
-    PHP_ME(Geometry, isEmpty, NULL, 0)
+    PHP_ME(Geometry, equals, arginfo_Geometry_equals, 0)
+    PHP_ME(Geometry, equalsExact, arginfo_Geometry_equalsExact, 0)
+    PHP_ME(Geometry, isEmpty, arginfo_Geometry_isEmpty, 0)
 
 #   ifdef HAVE_GEOS_IS_VALID_DETAIL
-    PHP_ME(Geometry, checkValidity, NULL, 0)
+    PHP_ME(Geometry, checkValidity, arginfo_Geometry_checkValidity, 0)
 #   endif
 
-    PHP_ME(Geometry, isSimple, NULL, 0)
-    PHP_ME(Geometry, isRing, NULL, 0)
-    PHP_ME(Geometry, hasZ, NULL, 0)
+    PHP_ME(Geometry, isSimple, arginfo_Geometry_isSimple, 0)
+    PHP_ME(Geometry, isRing, arginfo_Geometry_isRing, 0)
+    PHP_ME(Geometry, hasZ, arginfo_Geometry_hasZ, 0)
 
 #   ifdef HAVE_GEOS_IS_CLOSED
-    PHP_ME(Geometry, isClosed, NULL, 0)
+    PHP_ME(Geometry, isClosed, arginfo_Geometry_isClosed, 0)
 #   endif
 
-    PHP_ME(Geometry, typeName, NULL, 0)
-    PHP_ME(Geometry, typeId, NULL, 0)
-    PHP_ME(Geometry, getSRID, NULL, 0)
-    PHP_ME(Geometry, setSRID, NULL, 0)
-    PHP_ME(Geometry, numGeometries, NULL, 0)
-    PHP_ME(Geometry, geometryN, NULL, 0)
-    PHP_ME(Geometry, numInteriorRings, NULL, 0)
+    PHP_ME(Geometry, typeName, arginfo_Geometry_typeName, 0)
+    PHP_ME(Geometry, typeId, arginfo_Geometry_typeId, 0)
+    PHP_ME(Geometry, getSRID, arginfo_Geometry_getSRID, 0)
+    PHP_ME(Geometry, setSRID, arginfo_Geometry_setSRID, 0)
+    PHP_ME(Geometry, numGeometries, arginfo_Geometry_numGeometries, 0)
+    PHP_ME(Geometry, geometryN, arginfo_Geometry_geometryN, 0)
+    PHP_ME(Geometry, numInteriorRings, arginfo_Geometry_numInteriorRings, 0)
 
 #   ifdef HAVE_GEOS_GEOM_GET_NUM_POINTS
-    PHP_ME(Geometry, numPoints, NULL, 0)
+    PHP_ME(Geometry, numPoints, arginfo_Geometry_numPoints, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_GEOM_GET_X
-    PHP_ME(Geometry, getX, NULL, 0)
+    PHP_ME(Geometry, getX, arginfo_Geometry_getX, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_GEOM_GET_Y
-    PHP_ME(Geometry, getY, NULL, 0)
+    PHP_ME(Geometry, getY, arginfo_Geometry_getY, 0)
 #   endif
 
-    PHP_ME(Geometry, interiorRingN, NULL, 0)
-    PHP_ME(Geometry, exteriorRing, NULL, 0)
-    PHP_ME(Geometry, numCoordinates, NULL, 0)
-    PHP_ME(Geometry, dimension, NULL, 0)
+    PHP_ME(Geometry, interiorRingN, arginfo_Geometry_interiorRingN, 0)
+    PHP_ME(Geometry, exteriorRing, arginfo_Geometry_exteriorRing, 0)
+    PHP_ME(Geometry, numCoordinates, arginfo_Geometry_numCoordinates, 0)
+    PHP_ME(Geometry, dimension, arginfo_Geometry_dimension, 0)
 
 #   ifdef HAVE_GEOS_GEOM_GET_COORDINATE_DIMENSION
-    PHP_ME(Geometry, coordinateDimension, NULL, 0)
+    PHP_ME(Geometry, coordinateDimension, arginfo_Geometry_coordinateDimension, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_GEOM_GET_POINT_N
-    PHP_ME(Geometry, pointN, NULL, 0)
+    PHP_ME(Geometry, pointN, arginfo_Geometry_pointN, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_GEOM_GET_START_POINT
-    PHP_ME(Geometry, startPoint, NULL, 0)
+    PHP_ME(Geometry, startPoint, arginfo_Geometry_startPoint, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_GEOM_GET_END_POINT
-    PHP_ME(Geometry, endPoint, NULL, 0)
+    PHP_ME(Geometry, endPoint, arginfo_Geometry_endPoint, 0)
 #   endif
 
-    PHP_ME(Geometry, area, NULL, 0)
-    PHP_ME(Geometry, length, NULL, 0)
-    PHP_ME(Geometry, distance, NULL, 0)
-    PHP_ME(Geometry, hausdorffDistance, NULL, 0)
+    PHP_ME(Geometry, area, arginfo_Geometry_area, 0)
+    PHP_ME(Geometry, length, arginfo_Geometry_length, 0)
+    PHP_ME(Geometry, distance, arginfo_Geometry_distance, 0)
+    PHP_ME(Geometry, hausdorffDistance, arginfo_Geometry_hausdorffDistance, 0)
 
 #   if HAVE_GEOS_SNAP
-    PHP_ME(Geometry, snapTo, NULL, 0)
+    PHP_ME(Geometry, snapTo, arginfo_Geometry_snapTo, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_NODE
-    PHP_ME(Geometry, node, NULL, 0)
+    PHP_ME(Geometry, node, arginfo_Geometry_node, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_DELAUNAY_TRIANGULATION
-    PHP_ME(Geometry, delaunayTriangulation, NULL, 0)
+    PHP_ME(Geometry, delaunayTriangulation, arginfo_Geometry_delaunayTriangulation, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_VORONOI_DIAGRAM
-    PHP_ME(Geometry, voronoiDiagram, NULL, 0)
+    PHP_ME(Geometry, voronoiDiagram, arginfo_Geometry_voronoiDiagram, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_CLIP_BY_RECT
-    PHP_ME(Geometry, clipByRect, NULL, 0)
+    PHP_ME(Geometry, clipByRect, arginfo_Geometry_clipByRect, 0)
 #   endif
 
     {NULL, NULL, NULL}
@@ -2347,8 +2353,8 @@ PHP_METHOD(WKTReader, __construct);
 PHP_METHOD(WKTReader, read);
 
 static zend_function_entry WKTReader_methods[] = {
-    PHP_ME(WKTReader, __construct, NULL, 0)
-    PHP_ME(WKTReader, read, NULL, 0)
+    PHP_ME(WKTReader, __construct, arginfo_WKTReader_construct, 0)
+    PHP_ME(WKTReader, read, arginfo_WKTReader_read, 0)
     {NULL, NULL, NULL}
 };
 
@@ -2457,27 +2463,27 @@ PHP_METHOD(WKTWriter, setOld3D);
 #endif
 
 static zend_function_entry WKTWriter_methods[] = {
-    PHP_ME(WKTWriter, __construct, NULL, 0)
-    PHP_ME(WKTWriter, write, NULL, 0)
+    PHP_ME(WKTWriter, __construct, arginfo_WKTWriter_construct, 0)
+    PHP_ME(WKTWriter, write, arginfo_WKTWriter_write, 0)
 
 #   ifdef HAVE_GEOS_WKT_WRITER_SET_TRIM
-    PHP_ME(WKTWriter, setTrim, NULL, 0)
+    PHP_ME(WKTWriter, setTrim, arginfo_WKTWriter_setTrim, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_WKT_WRITER_SET_ROUNDING_PRECISION
-    PHP_ME(WKTWriter, setRoundingPrecision, NULL, 0)
+    PHP_ME(WKTWriter, setRoundingPrecision, arginfo_WKTWriter_setRoundingPrecision, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_WKT_WRITER_SET_OUTPUT_DIMENSION
-    PHP_ME(WKTWriter, setOutputDimension, NULL, 0)
+    PHP_ME(WKTWriter, setOutputDimension, arginfo_WKTWriter_setOutputDimension, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_WKT_WRITER_GET_OUTPUT_DIMENSION
-    PHP_ME(WKTWriter, getOutputDimension, NULL, 0)
+    PHP_ME(WKTWriter, getOutputDimension, arginfo_WKTWriter_getOutputDimension, 0)
 #   endif
 
 #   ifdef HAVE_GEOS_WKT_WRITER_SET_OLD_3D
-    PHP_ME(WKTWriter, setOld3D, NULL, 0)
+    PHP_ME(WKTWriter, setOld3D, arginfo_WKTWriter_setOld3D, 0)
 #   endif
 
     {NULL, NULL, NULL}
@@ -2665,15 +2671,15 @@ PHP_METHOD(WKBWriter, write);
 PHP_METHOD(WKBWriter, writeHEX);
 
 static zend_function_entry WKBWriter_methods[] = {
-    PHP_ME(WKBWriter, __construct, NULL, 0)
-    PHP_ME(WKBWriter, getOutputDimension, NULL, 0)
-    PHP_ME(WKBWriter, setOutputDimension, NULL, 0)
-    PHP_ME(WKBWriter, getByteOrder, NULL, 0)
-    PHP_ME(WKBWriter, setByteOrder, NULL, 0)
-    PHP_ME(WKBWriter, getIncludeSRID, NULL, 0)
-    PHP_ME(WKBWriter, setIncludeSRID, NULL, 0)
-    PHP_ME(WKBWriter, write, NULL, 0)
-    PHP_ME(WKBWriter, writeHEX, NULL, 0)
+    PHP_ME(WKBWriter, __construct, arginfo_WKBWriter_construct, 0)
+    PHP_ME(WKBWriter, getOutputDimension, arginfo_WKBWriter_getOutputDimension, 0)
+    PHP_ME(WKBWriter, setOutputDimension, arginfo_WKBWriter_setOutputDimension, 0)
+    PHP_ME(WKBWriter, getByteOrder, arginfo_WKBWriter_getByteOrder, 0)
+    PHP_ME(WKBWriter, setByteOrder, arginfo_WKBWriter_setByteOrder, 0)
+    PHP_ME(WKBWriter, getIncludeSRID, arginfo_WKBWriter_getIncludeSRID, 0)
+    PHP_ME(WKBWriter, setIncludeSRID, arginfo_WKBWriter_setIncludeSRID, 0)
+    PHP_ME(WKBWriter, write, arginfo_WKBWriter_write, 0)
+    PHP_ME(WKBWriter, writeHEX, arginfo_WKBWriter_writeHEX, 0)
     {NULL, NULL, NULL}
 };
 
@@ -2904,9 +2910,9 @@ PHP_METHOD(WKBReader, read);
 PHP_METHOD(WKBReader, readHEX);
 
 static zend_function_entry WKBReader_methods[] = {
-    PHP_ME(WKBReader, __construct, NULL, 0)
-    PHP_ME(WKBReader, read, NULL, 0)
-    PHP_ME(WKBReader, readHEX, NULL, 0)
+    PHP_ME(WKBReader, __construct, arginfo_WKBReader_construct, 0)
+    PHP_ME(WKBReader, read, arginfo_WKBReader_read, 0)
+    PHP_ME(WKBReader, readHEX, arginfo_WKBReader_readHEX, 0)
     {NULL, NULL, NULL}
 };
 
--- a/php_geos.h
+++ b/php_geos.h
@@ -48,6 +48,15 @@ extern zend_module_entry geos_module_ent
 #define GEOS_G(v) (geos_globals.v)
 #endif
 
+/* for PHP 8 */
+#ifndef TSRMLS_D
+#define TSRMLS_D void
+#define TSRMLS_DC
+#define TSRMLS_C
+#define TSRMLS_CC
+#define TSRMLS_FETCH()
+#endif
+
 ZEND_BEGIN_MODULE_GLOBALS(geos)
 GEOSContextHandle_t handle;
 ZEND_END_MODULE_GLOBALS(geos)
--- a/tests/002_WKTWriter.phpt
+++ b/tests/002_WKTWriter.phpt
@@ -25,6 +25,8 @@ class WKTWriterTest extends GEOSTest
             $this->assertTrue(FALSE); # this is just to fail if we get here
         } catch (Exception $e) {
             $this->assertContains('expects parameter 1', $e->getMessage());
+        } catch (Error $e) {
+            $this->assertContains('Argument #1', $e->getMessage());
         }
 
         $g = $reader->read('POINT(6 7)');
--- a/tests/003_WKTReader.phpt
+++ b/tests/003_WKTReader.phpt
@@ -99,6 +99,8 @@ class WKTReaderTest extends GEOSTest
         } catch (Exception $e) {
             $this->assertContains('expects exactly 1 parameter',
                                   $e->getMessage());
+        } catch (Error $e) {
+            $this->assertContains('expects exactly 1 parameter', $e->getMessage());
         }
     }
 }
--- a/tests/004_WKBWriter.phpt
+++ b/tests/004_WKBWriter.phpt
@@ -140,6 +140,8 @@ class WKBWriterTest extends GEOSTest
             $this->assertTrue(false);
         } catch (ErrorException $e) {
             $this->assertContains('expects parameter 1 to be object, int', $e->getMessage());
+        } catch (Error $e) {
+            $this->assertContains('Argument #1', $e->getMessage());
         }
     }
 
@@ -152,7 +154,9 @@ class WKBWriterTest extends GEOSTest
             $this->assertTrue(false);
         } catch (ErrorException $e) {
             $this->assertContains('expects parameter 1 to be object, int', $e->getMessage());
-        }
+        } catch (Error $e) {
+            $this->assertContains('Argument #1', $e->getMessage());
+	    }
     }
 }
 
