diff options
| -rw-r--r-- | 0003-add-all-arginfo-and-fix-build-with-PHP-8.patch | 747 | ||||
| -rw-r--r-- | 0004-fix-all-zend_parse_parameters-call-to-use-zend_long.patch | 123 | ||||
| -rw-r--r-- | php-geos.spec | 57 | 
3 files changed, 907 insertions, 20 deletions
| diff --git a/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch b/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch new file mode 100644 index 0000000..8d498f9 --- /dev/null +++ b/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch @@ -0,0 +1,747 @@ +From bfef69aca744295719dc8f859005ff83e17ac48c Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@remirepo.net> +Date: Fri, 28 Aug 2020 15:21:36 +0200 +Subject: [PATCH] add all arginfo and fix build with PHP 8 + +--- + arginfo.h                | 319 +++++++++++++++++++++++++++++++++++++++ + geos.c                   | 190 ++++++++++++----------- + php_geos.h               |   9 ++ + tests/002_WKTWriter.phpt |   2 + + tests/003_WKTReader.phpt |   2 + + tests/004_WKBWriter.phpt |   6 +- + 6 files changed, 435 insertions(+), 93 deletions(-) + create mode 100644 arginfo.h + +diff --git a/arginfo.h b/arginfo.h +new file mode 100644 +index 0000000..3bee988 +--- /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 ++ +diff --git a/geos.c b/geos.c +index fc679e8..ffa27b8 100755 +--- 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} + }; +  +diff --git a/php_geos.h b/php_geos.h +index 5350541..0b8fdcb 100644 +--- a/php_geos.h ++++ b/php_geos.h +@@ -48,6 +48,15 @@ extern zend_module_entry geos_module_entry; + #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) +diff --git a/tests/002_WKTWriter.phpt b/tests/002_WKTWriter.phpt +index 6bb7253..3682a3a 100644 +--- 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)'); +diff --git a/tests/003_WKTReader.phpt b/tests/003_WKTReader.phpt +index 7bcbf54..fbd4fb1 100644 +--- 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()); +         } +     } + } +diff --git a/tests/004_WKBWriter.phpt b/tests/004_WKBWriter.phpt +index 3a72e2d..3c13644 100644 +--- 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()); ++	    } +     } + } +  +--  +2.25.4 + diff --git a/0004-fix-all-zend_parse_parameters-call-to-use-zend_long.patch b/0004-fix-all-zend_parse_parameters-call-to-use-zend_long.patch new file mode 100644 index 0000000..14eae9d --- /dev/null +++ b/0004-fix-all-zend_parse_parameters-call-to-use-zend_long.patch @@ -0,0 +1,123 @@ +From fcd7a35c1a9ca109fd50ee2660053423916b491b Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@remirepo.net> +Date: Fri, 28 Aug 2020 15:36:40 +0200 +Subject: [PATCH 2/2] fix all zend_parse_parameters call to use zend_long + +--- + geos.c | 23 ++++++++++++----------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +diff --git a/geos.c b/geos.c +index ffa27b8..0437523 100755 +--- a/geos.c ++++ b/geos.c +@@ -78,6 +78,7 @@ PHP_FUNCTION(GEOSRelateMatch); + # define GEOS_PHP_ADD_ASSOC_ZVAL(a,k,v) add_assoc_zval((a), (k), (v)) + # define GEOS_PHP_HASH_GET_CUR_KEY(s,k,i) zend_hash_get_current_key((s), (k), (i), 0) + # define zend_string char ++# define zend_long long + # define ZSTR_VAL(x) (x) + # define GEOS_PHP_HASH_GET_CUR_DATA(h,d) zend_hash_get_current_data((h),(void**)&(d)) + # define GEOS_PHP_ZVAL zval ** +@@ -1281,7 +1282,7 @@ PHP_METHOD(Geometry, relateBoundaryNodeRule) +     GEOSGeometry *other; +     zval *zobj; +     char* pat; +-    long int bnr = GEOSRELATE_BNR_OGC; ++    zend_long bnr = GEOSRELATE_BNR_OGC; +     char* retStr; +  +     this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +@@ -1342,7 +1343,7 @@ PHP_METHOD(Geometry, setPrecision) + { +     GEOSGeometry *this; +     double gridSize; +-    long int flags = 0; ++    zend_long flags = 0; +     GEOSGeometry *ret; +  +     this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +@@ -1756,7 +1757,7 @@ PHP_METHOD(Geometry, checkValidity) +     zend_bool retBool; +     char *reasonVal = NULL; +     zval *locationVal = NULL; +-    long int flags = 0; ++    zend_long flags = 0; +  +     this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +  +@@ -1929,7 +1930,7 @@ PHP_METHOD(Geometry, getSRID) + PHP_METHOD(Geometry, setSRID) + { +     GEOSGeometry *geom; +-    long int srid; ++    zend_long srid; +  +     geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +  +@@ -1965,7 +1966,7 @@ PHP_METHOD(Geometry, geometryN) +     GEOSGeometry *geom; +     const GEOSGeometry *c; +     GEOSGeometry *cc; +-    long int num; ++    zend_long num; +  +     geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +  +@@ -2064,7 +2065,7 @@ PHP_METHOD(Geometry, interiorRingN) +     GEOSGeometry *geom; +     const GEOSGeometry *c; +     GEOSGeometry *cc; +-    long int num; ++    zend_long num; +  +     geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +  +@@ -2162,7 +2163,7 @@ PHP_METHOD(Geometry, pointN) + { +     GEOSGeometry *geom; +     GEOSGeometry *c; +-    long int num; ++    zend_long num; +  +     geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); +  +@@ -2586,7 +2587,7 @@ PHP_METHOD(WKTWriter, setTrim) + PHP_METHOD(WKTWriter, setRoundingPrecision) + { +     GEOSWKTWriter *writer; +-    long int prec; ++    zend_long prec; +  +     writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); +  +@@ -2607,7 +2608,7 @@ PHP_METHOD(WKTWriter, setRoundingPrecision) + PHP_METHOD(WKTWriter, setOutputDimension) + { +     GEOSWKTWriter *writer; +-    long int dim; ++    zend_long dim; +  +     writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); +  +@@ -2752,7 +2753,7 @@ PHP_METHOD(WKBWriter, getOutputDimension) + PHP_METHOD(WKBWriter, setOutputDimension) + { +     GEOSWKBWriter *writer; +-    long int dim; ++    zend_long dim; +  +     writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); +  +@@ -2851,7 +2852,7 @@ PHP_METHOD(WKBWriter, getByteOrder) + PHP_METHOD(WKBWriter, setByteOrder) + { +     GEOSWKBWriter *writer; +-    long int dim; ++    zend_long dim; +  +     writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); +  +--  +2.25.4 + diff --git a/php-geos.spec b/php-geos.spec index 88ebbc1..c9d5a93 100644 --- a/php-geos.spec +++ b/php-geos.spec @@ -1,11 +1,14 @@  # remirepo spec file for php-geos  # -# Copyright (c) 2016-2018 Remi Collet +# Copyright (c) 2016-2020 Remi Collet  # License: CC-BY-SA  # http://creativecommons.org/licenses/by-sa/4.0/  #  # Please, preserve the changelog entries  # + +%bcond_without tests +  %if 0%{?scl:1}  %global sub_prefix %{scl_prefix}  %scl_package         php-geos @@ -20,11 +23,10 @@  %else  %global ini_name   40-%{pecl_name}.ini  %endif -%global with_tests 0%{!?_without_tests:1}  Name:           %{?sub_prefix}php-%{pecl_name}  Version:        1.0.0 -Release:        11%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release:        17%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}  Summary:        PHP module for GEOS @@ -37,6 +39,10 @@ Source0:        https://git.osgeo.org/gogs/geos/php-geos/archive/%{version}%{?pr  # https://git.osgeo.org/gitea/geos/php-geos/issues/20  Patch0:         0001-fix-test-for-7.3-int-vs-integer.patch  Patch1:         0002-fix-error-message-with-php-7-Wformat-warnings-raised.patch +# https://git.osgeo.org/gitea/geos/php-geos/issues/24 +Patch2:         0003-add-all-arginfo-and-fix-build-with-PHP-8.patch +# https://git.osgeo.org/gitea/geos/php-geos/issues/25 +Patch3:         0004-fix-all-zend_parse_parameters-call-to-use-zend_long.patch  BuildRequires:  %{?dtsprefix}gcc  BuildRequires:  %{?scl_prefix}php-devel @@ -57,27 +63,19 @@ Obsoletes:      %{?scl_prefix}geos-php        <= 3.5.0  Provides:       %{?scl_prefix}geos-php         = 1:%{version}-%{release}  Provides:       %{?scl_prefix}geos-php%{?_isa} = 1:%{version}-%{release} -%if "%{?vendor}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel} +%if "%{?packager}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel}  # Other third party repo stuff -%if "%{php_version}" > "5.6" -Obsoletes:     php56u-%{pecl_name}      <= %{version} -Obsoletes:     php56w-%{pecl_name}      <= %{version} -%endif -%if "%{php_version}" > "7.0" -Obsoletes:     php70u-%{pecl_name}      <= %{version} -Obsoletes:     php70w-%{pecl_name}      <= %{version} -%endif -%if "%{php_version}" > "7.1" -Obsoletes:     php71u-%{pecl_name}      <= %{version} -Obsoletes:     php71w-%{pecl_name}      <= %{version} -%endif  %if "%{php_version}" > "7.2"  Obsoletes:     php72u-%{pecl_name}      <= %{version} -Obsoletes:     php72w-%{pecl_name}      <= %{version}  %endif  %if "%{php_version}" > "7.3" -Obsoletes:     php73u-%{pecl_name}      <= %{version} -Obsoletes:     php73w-%{pecl_name}      <= %{version} +Obsoletes:      php73-%{pecl_name}      <= %{version} +%endif +%if "%{php_version}" > "7.4" +Obsoletes:      php74-%{pecl_name}      <= %{version} +%endif +%if "%{php_version}" > "8.0" +Obsoletes:      php80-%{pecl_name}      <= %{version}  %endif  %endif @@ -99,8 +97,11 @@ Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSIO  mv %{pkg_name} NTS  cd NTS +chmod -x *.c  %patch0 -p1 -b .test  %patch1 -p1 -b .wformat +%patch2 -p1 -b .arginfo +%patch3 -p1 -b .zendlong  sed -e '/PHP_GEOS_VERSION/s/"0.0"/"%{version}%{?prever}"/' -i php_geos.h @@ -167,7 +168,13 @@ install -Dpm 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name}      --modules | grep %{pecl_name}  %endif -%if %{with_tests} +%if %{with tests} +%if 0%{?fedora} >= 32 +# See https://git.osgeo.org/gitea/geos/php-geos/issues/23 +# ignore failing test with geos 3.8 +rm ?TS/tests/001_Geometry.phpt +%endif +  cd NTS  : Upstream test suite for NTS extension  TEST_PHP_EXECUTABLE=%{__php} \ @@ -205,6 +212,16 @@ exit $ret  %changelog +* Wed Sep  2 2020 Remi Collet <remi@remirepo.net> - 1.0.0-17 +- rebuild for PHP 8.0.0beta3 + +* Fri Aug 28 2020 Remi Collet <remi@remirepo.net> - 1.0.0-16 +- oprn https://git.osgeo.org/gitea/geos/php-geos/issues/24 missing arginfo +- open https://git.osgeo.org/gitea/geos/php-geos/issues/25 zend_long usage + +* Thu Aug 20 2020 Remi Collet <remi@remirepo.net> - 1.0.0-15 +- ignore 1 test failing with geos 3.8 +  * Thu Aug 16 2018 Remi Collet <remi@remirepo.net> - 1.0.0-11  - rebuild for 7.3.0beta2 new ABI | 
