]> granicus.if.org Git - postgis/commitdiff
Added GEOS_VERNUM macro and protected GEOS 3.0/3.1 functionality behind it.
authorPaul Ramsey <pramsey@cleverelephant.ca>
Fri, 28 Mar 2008 19:25:16 +0000 (19:25 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Fri, 28 Mar 2008 19:25:16 +0000 (19:25 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@2743 b70326c6-7e19-0410-871a-916f4a2858ee

ChangeLog
Makefile.config.in
configure.in
lwgeom/Makefile
lwgeom/lwgeom_geos_c.c
lwgeom/lwpostgis.sql.in

index e2a40487353682b7519626b8a3032a3f46c127bb..3bf33bd43666abdd6ff256803e66c92be3074124 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-03-28 Paul Ramsey <pramsey@cleverelephant.ca>
+
+        * Makefile.config.in, configure.in, lwgeom/Makefile, 
+          lwgeom/lwpostgis.sql.in, lwgeom/lwgeom_geos_c.c
+          Changed GEOS version checking to use geos-config, and
+          set a GEOS_VERNUM macro that compresses the version string
+          into an integer: 2.2.1 = 22, 3.1.1 = 31, etc.
+        * Placed GEOS 3.0 and 3.1 dependent functions into 
+          appropriate macro blocks.
+
 2008-02-12 Paul Ramsey <pramsey@cleverelephant.ca>
 
        * lwgeom/lwgeom_geos_c.c, lwgeom/lwpostgis.sql.in: Add in hook to 
index 0a27f8b36c419aee23ced522bb923d60ac56b4e5..c052e09a54798791e04e595145cd404793c67c3e 100644 (file)
@@ -36,6 +36,7 @@ PROJ_LIBDIR=@PROJ_LIBDIR@
 USE_GEOS=@USE_GEOS@
 GEOS_DIR=@GEOS_DIR@
 GEOS_LDFLAGS=@GEOS_LDFLAGS@
+GEOS_VERNUM=@GEOS_VERNUM@
 
 #
 # Set USE_JTS to 1 if you have libjts installed. 
@@ -156,36 +157,11 @@ endif
 
 #---------------------------------------------------------------
 # Test the version string and set the USE_VERSION macro
-# appropriately.
-#
-VERSION=$(shell $(PGCONFIG) --version)
-ifneq ($(findstring 7.1,$(VERSION)),)
-       USE_VERSION=71
-else
-       ifneq ($(findstring 7.2,$(VERSION)),)
-               USE_VERSION=72
-       else
-               ifneq ($(findstring 7.3,$(VERSION)),)
-                       USE_VERSION=73
-               else
-                       ifneq ($(findstring 7.4,$(VERSION)),)
-                               USE_VERSION=74
-                       else
-                               ifneq ($(findstring 8.0,$(VERSION)),)
-                                       USE_VERSION=80
-                               else
-                                       ifneq ($(findstring 8.1,$(VERSION)),)
-                                               USE_VERSION=81
-                                       else
-                        ifneq ($(findstring 8.2,$(VERSION)),)
-                                               USE_VERSION=82
-                        else
-                                                   USE_VERSION=83
-                        endif
-                                       endif
-                               endif
-                       endif
-               endif
-       endif
-endif
+# appropriately. eg:
+# 
+# pg_config --version => PostgreSQL 8.3.1
+#
+PG_VERSION_MAJOR=$(shell $(PGCONFIG) --version | cut -f2 -d' ' | cut -f1 -d.)
+PG_VERSION_MINOR=$(shell $(PGCONFIG) --version | cut -f2 -d' ' | cut -f2 -d.)
+USE_VERSION=$(PG_VERSION_MAJOR)$(PG_VERSION_MINOR)
 
index 4b90dba5f5af1d61a6be6e5aa09a45a6699602d7..d76581595c9bf2fa8744c4d9727255d6e0bf8076 100644 (file)
@@ -117,9 +117,11 @@ dnl
 AC_SUBST(USE_GEOS)
 AC_SUBST(GEOS_DIR)
 AC_SUBST(GEOS_LDFLAGS)
+AC_SUBST(GEOS_VERNUM)
 USE_GEOS=0
 GEOS_DIR=
 GEOS_LDFLAGS=
+GEOS_VERNUM=10
 
 AC_PATH_PROG([GEOSCONFIG], [geos-config])
 if test -n "$GEOSCONFIG"; then
@@ -145,9 +147,10 @@ AC_ARG_WITH(geos,
 )
 
 if test $USE_GEOS -gt 0; then
-       GEOS_DIR=`$GEOSCONFIG --prefix`
 
+       GEOS_DIR=`$GEOSCONFIG --prefix`
        GEOS_LDFLAGS=`$GEOSCONFIG --ldflags 2> /dev/null`
+
        if test x"$GEOS_LDFLAGS" = "x"; then
                # older geos-config versions did not
                # support the --ldflags switch, we'll
@@ -157,42 +160,18 @@ if test $USE_GEOS -gt 0; then
        fi
 
        GEOS_MAJOR=`$GEOSCONFIG --version | cut -d. -f1`
-       if test "$GEOS_MAJOR" = "@GEOS_VERSION@"; then
-               GEOS_MAJOR=1
-               GEOS_MINOR=0
-       else
-               GEOS_MINOR=`$GEOSCONFIG --version | cut -d. -f2`
+       GEOS_MINOR=`$GEOSCONFIG --version | cut -d. -f2`
+       GEOS_VERNUM=`expr $GEOS_MAJOR "*" 10`
+       GEOS_VERNUM=`expr $GEOS_VERNUM "+" $GEOS_MINOR`
+
+       # GEOS >= 3.0.0 always has CAPI, however only GEOS >= 2.2.0 has CAPI support
+       # so abort if CAPI support is not available.
+       if test $GEOS_VERNUM -lt 22; then
+               AC_MSG_ERROR([PostGIS version >= 1.2.0 requires GEOS version >= 2.2.0]) 
        fi
 
-    # GEOS >= 3.0.0 always has CAPI, however only GEOS >= 2.2.0 has CAPI support
-    # so abort if CAPI support is not available.
-       if test $GEOS_MAJOR -lt 3; then
-           if test $GEOS_MAJOR -eq 2 -a $GEOS_MINOR -lt 2; then
-            AC_MSG_ERROR([PostGIS version >= 1.2.0 requires GEOS version >= 2.2.0]) 
-        else
-            # Make sure we abort for all other versions of GEOS
-            if test $GEOS_MAJOR -lt 2; then
-                AC_MSG_ERROR([PostGIS version >= 1.2.0 requires GEOS version >= 2.2.0])
-            fi
-        fi
-    fi
 fi
 
-AC_ARG_WITH(geos-libdir,
-[  --with-geos-libdir=PATH path to GEOS libdir
-                          [[taken from geos-config by default]]],
-[
-case "$with_geos_libdir" in
-       no|yes)
-               AC_MSG_ERROR([Invalid argument to --with-geos-libdir])
-               ;;
-       *)
-               GEOS_LDFLAGS=-L${with_geos_libdir}
-               ;;
-esac
-], with_geos_libdir=no)
-
-
 AC_SUBST(USE_PROJ)
 AC_SUBST(PROJ_DIR)
 AC_SUBST(PROJ_LIBDIR)
index 946611a04dd113c785e2d074f8491e9699b4d8c1..5aa7a5c1015fb67f8545c5ed99679942e6ccc5e5 100644 (file)
@@ -38,6 +38,7 @@ override CFLAGS += -DPOSTGIS_BUILD_DATE='"$(POSTGIS_BUILD_DATE)"'
 JTS_OBJ=lwgeom_nojts.o
 ifeq ($(USE_GEOS),1)
        CSTAR_FLAGS += -DUSE_GEOS
+       CSTAR_FLAGS += -DGEOS_VERNUM=$(GEOS_VERNUM)
        GEOS_RULES=
        CSTAR_FLAGS += -I$(GEOS_DIR)/include 
        GEOS_WRAPPER=
index 68d677ed15513a9023e7703b9e09308113538dee..8b85bff2d544f41f2212d8b0c7625c95e6a4151a 100644 (file)
@@ -752,6 +752,8 @@ Datum convexhull(PG_FUNCTION_ARGS)
 
 }
 
+#if GEOS_VERNUM >= 30 
+
 PG_FUNCTION_INFO_V1(topologypreservesimplify);
 Datum topologypreservesimplify(PG_FUNCTION_ARGS)
 {
@@ -828,6 +830,7 @@ Datum topologypreservesimplify(PG_FUNCTION_ARGS)
 
        PG_RETURN_POINTER(result);
 }
+#endif
 
 PG_FUNCTION_INFO_V1(buffer);
 Datum buffer(PG_FUNCTION_ARGS)
@@ -3673,8 +3676,7 @@ Datum intersectsPrepared(PG_FUNCTION_ARGS);
 /*
  * GEOS prepared geometry is only available from GEOS 3.1 onwards
  */
-#if ( GEOS_VERSION_MAJOR > 3 || (GEOS_VERSION_MAJOR == 3 && GEOS_VERSION_MINOR >= 1) ) 
-/* #if ( GEOS_CAPI_VERSION_MAJOR > 1 || (GEOS_CAPI_VERSION_MAJOR == 1 && GEOS_CAPI_VERSION_MINOR >= 5) ) */
+#if GEOS_VERNUM >= 31
 #define PREPARED_GEOM 1
 #endif
 
index 0f0f56971ba04b7e1ba0569b8373d9960aa6f619..6aedc91bd13b47b25f0c84a8775185f8e111f2e0 100644 (file)
@@ -4073,13 +4073,13 @@ CREATE CAST (geometry AS bytea) WITH FUNCTION ST_bytea(geometry) AS IMPLICIT;
 ---------------------------------------------------------------
 
 -- Deprecation in 1.2.3
-CREATEFUNCTION simplify(geometry, float8)
+CREATEFUNCTION Simplify(geometry, float8)
    RETURNS geometry
    AS '@MODULE_FILENAME@', 'LWGEOM_simplify2d'
    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
 -- Availability: 1.2.2
-CREATEFUNCTION ST_simplify(geometry, float8)
+CREATEFUNCTION ST_Simplify(geometry, float8)
    RETURNS geometry
    AS '@MODULE_FILENAME@', 'LWGEOM_simplify2d'
    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
@@ -4137,13 +4137,13 @@ CREATEFUNCTION ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8)
    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
 -- Deprecation in 1.2.3
-CREATEFUNCTION segmentize(geometry, float8)
+CREATEFUNCTION Segmentize(geometry, float8)
        RETURNS geometry
        AS '@MODULE_FILENAME@', 'LWGEOM_segmentize2d'
        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
 -- Availability: 1.2.2
-CREATEFUNCTION ST_segmentize(geometry, float8)
+CREATEFUNCTION ST_Segmentize(geometry, float8)
        RETURNS geometry
        AS '@MODULE_FILENAME@', 'LWGEOM_segmentize2d'
        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
@@ -4264,11 +4264,14 @@ CREATEFUNCTION ST_ConvexHull(geometry)
     AS '@MODULE_FILENAME@','convexhull'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
+#if GEOS_VERNUM >= 30
+-- Requires GEOS >= 3.0.0
 -- Availability: 1.3.3
 CREATEFUNCTION ST_SimplifyPreserveTopology(geometry, float8)
     RETURNS geometry
     AS '@MODULE_FILENAME@','topologypreservesimplify'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+#endif
 
 -- Deprecation in 1.2.3
 CREATEFUNCTION difference(geometry,geometry)
@@ -4490,7 +4493,7 @@ CREATEFUNCTION ST_Within(geometry,geometry)
     LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
 
 -- Deprecation in 1.2.3
-CREATEFUNCTION contains(geometry,geometry)
+CREATEFUNCTION Contains(geometry,geometry)
    RETURNS boolean
    AS '@MODULE_FILENAME@'
    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
@@ -4508,6 +4511,7 @@ CREATEFUNCTION ST_Contains(geometry,geometry)
     AS 'SELECT $1 && $2 AND _ST_Contains($1,$2)'
     LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
 
+#if GEOS_VERNUM >= 30
 -- Availability: 1.2.2
 CREATEFUNCTION _ST_CoveredBy(geometry,geometry)
    RETURNS boolean
@@ -4532,6 +4536,7 @@ CREATEFUNCTION ST_Covers(geometry,geometry)
    RETURNS boolean
    AS 'SELECT $1 && $2 AND _ST_Covers($1,$2)'
    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+#endif
 
 -- Deprecation in 1.2.3
 CREATEFUNCTION overlaps(geometry,geometry)
@@ -4642,65 +4647,69 @@ CREATEFUNCTION ST_Equals(geometry,geometry)
 -- requires GEOS 3.1.0-CAPI-1.5.0 or better
 -----------------------------------------------------------------------
 
+#if GEOS_VERNUM >= 31
+
+-- Availability: 1.4.0
 CREATEFUNCTION _ST_ContainsPrepared(geometry,geometry,integer)
     RETURNS boolean
     AS '@MODULE_FILENAME@','containsPrepared'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
--- Availability: 1.3.3
+-- Availability: 1.4.0
 -- Inlines index magic
 CREATEFUNCTION ST_Contains(geometry,geometry,integer)
     RETURNS boolean
     AS 'SELECT $1 && $2 AND _ST_ContainsPrepared($1,$2,$3)'
     LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
 
-       
+-- Availability: 1.4.0
 CREATEFUNCTION _ST_ContainsProperlyPrepared(geometry,geometry,integer)
     RETURNS boolean
     AS '@MODULE_FILENAME@','containsProperlyPrepared'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
--- Availability: 1.3.3
+-- Availability: 1.4.0
 -- Inlines index magic
 CREATEFUNCTION ST_ContainsProperly(geometry,geometry,integer)
     RETURNS boolean
     AS 'SELECT $1 && $2 AND _ST_ContainsProperlyPrepared($1,$2,$3)'
     LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
 
-       
--- Availability: 1.3.3
+-- Availability: 1.4.0
 -- Added for completeness, and to make testing ST_ContainsProperlyPrepared easier
 CREATE OR REPLACE FUNCTION ST_ContainsProperly(geometry,geometry)
     RETURNS boolean
     AS 'SELECT $1 && $2 AND ST_relate($1,$2,''T**FF*FF*'')'
     LANGUAGE 'SQL' IMMUTABLE; 
-
        
+-- Availability: 1.4.0
 CREATEFUNCTION _ST_CoversPrepared(geometry,geometry,integer)
     RETURNS boolean
     AS '@MODULE_FILENAME@','coversPrepared'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-       
--- Availability: 1.3.3
+       
+-- Availability: 1.4.0
 -- Inlines index magic
 CREATEFUNCTION ST_Covers(geometry,geometry,integer)
     RETURNS boolean
     AS 'SELECT $1 && $2 AND _ST_CoversPrepared($1,$2,$3)'
     LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
 
-       
+Availability: 1.4.0
 CREATEFUNCTION _ST_IntersectsPrepared(geometry,geometry,integer)
     RETURNS boolean
     AS '@MODULE_FILENAME@','intersectsPrepared'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-       
--- Availability: 1.3.3
+       
+-- Availability: 1.4.0
 -- Inlines index magic
 CREATEFUNCTION ST_Intersects(geometry,geometry,integer)
     RETURNS boolean
     AS 'SELECT $1 && $2 AND _ST_IntersectsPrepared($1,$2,$3)'
     LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
 
+#endif
+
 -----------------------------------------------------------------------
 -- SVG OUTPUT
 -----------------------------------------------------------------------