[postgis-commits] svn - r2743 - in trunk: . lwgeom

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Fri Mar 28 12:25:16 PDT 2008


Author: pramsey
Date: 2008-03-28 12:25:16 -0700 (Fri, 28 Mar 2008)
New Revision: 2743

Modified:
   trunk/ChangeLog
   trunk/Makefile.config.in
   trunk/configure.in
   trunk/lwgeom/Makefile
   trunk/lwgeom/lwgeom_geos_c.c
   trunk/lwgeom/lwpostgis.sql.in
Log:
Added GEOS_VERNUM macro and protected GEOS 3.0/3.1 functionality behind it.


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-03-28 18:55:17 UTC (rev 2742)
+++ trunk/ChangeLog	2008-03-28 19:25:16 UTC (rev 2743)
@@ -1,3 +1,13 @@
+2008-03-28 Paul Ramsey <pramsey at 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 at cleverelephant.ca>
 
 	* lwgeom/lwgeom_geos_c.c, lwgeom/lwpostgis.sql.in: Add in hook to 

Modified: trunk/Makefile.config.in
===================================================================
--- trunk/Makefile.config.in	2008-03-28 18:55:17 UTC (rev 2742)
+++ trunk/Makefile.config.in	2008-03-28 19:25:16 UTC (rev 2743)
@@ -36,6 +36,7 @@
 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 @@
 
 #---------------------------------------------------------------
 # Test the version string and set the USE_VERSION macro
-# appropriately.
+# appropriately. eg:
+# 
+# pg_config --version => PostgreSQL 8.3.1
 #
-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
+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)
 

Modified: trunk/configure.in
===================================================================
--- trunk/configure.in	2008-03-28 18:55:17 UTC (rev 2742)
+++ trunk/configure.in	2008-03-28 19:25:16 UTC (rev 2743)
@@ -117,9 +117,11 @@
 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 @@
 )
 
 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 @@
 	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)

Modified: trunk/lwgeom/Makefile
===================================================================
--- trunk/lwgeom/Makefile	2008-03-28 18:55:17 UTC (rev 2742)
+++ trunk/lwgeom/Makefile	2008-03-28 19:25:16 UTC (rev 2743)
@@ -38,6 +38,7 @@
 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=

Modified: trunk/lwgeom/lwgeom_geos_c.c
===================================================================
--- trunk/lwgeom/lwgeom_geos_c.c	2008-03-28 18:55:17 UTC (rev 2742)
+++ trunk/lwgeom/lwgeom_geos_c.c	2008-03-28 19:25:16 UTC (rev 2743)
@@ -752,6 +752,8 @@
 
 }
 
+#if GEOS_VERNUM >= 30 
+
 PG_FUNCTION_INFO_V1(topologypreservesimplify);
 Datum topologypreservesimplify(PG_FUNCTION_ARGS)
 {
@@ -828,6 +830,7 @@
 
 	PG_RETURN_POINTER(result);
 }
+#endif
 
 PG_FUNCTION_INFO_V1(buffer);
 Datum buffer(PG_FUNCTION_ARGS)
@@ -3673,8 +3676,7 @@
 /*
  * 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
 

Modified: trunk/lwgeom/lwpostgis.sql.in
===================================================================
--- trunk/lwgeom/lwpostgis.sql.in	2008-03-28 18:55:17 UTC (rev 2742)
+++ trunk/lwgeom/lwpostgis.sql.in	2008-03-28 19:25:16 UTC (rev 2743)
@@ -4073,13 +4073,13 @@
 ---------------------------------------------------------------
 
 -- 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 @@
    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 @@
     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 @@
     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 @@
     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 @@
    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 @@
 -- 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
 -----------------------------------------------------------------------



More information about the postgis-commits mailing list