[postgis-commits] svn - r2774 - in trunk: . loader lwgeom macros regress

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Wed May 14 10:10:20 PDT 2008


Author: mcayland
Date: 2008-05-14 10:10:19 -0700 (Wed, 14 May 2008)
New Revision: 2774

Added:
   trunk/loader/Makefile.pgsql2shp.in
   trunk/loader/Makefile.shp2pgsql
   trunk/lwgeom/Makefile.in
   trunk/lwgeom/lwpostgis.sql.in.c
   trunk/lwgeom/sqldefines.h.in
   trunk/macros/
   trunk/macros/ac_proj4_version.m4
   trunk/postgis_config.h.in
   trunk/regress/Makefile.in
Removed:
   trunk/Makefile.config.in
   trunk/config.h.in
   trunk/lwgeom/Makefile.shlib
   trunk/lwgeom/lwpostgis.sql.in
   trunk/regress/Makefile
Modified:
   trunk/HOWTO_RELEASE
   trunk/Version.config
   trunk/autogen.sh
   trunk/configure.in
   trunk/loader/Makefile
   trunk/loader/pgsql2shp.c
   trunk/loader/shp2pgsql.c
   trunk/lwgeom/Makefile
   trunk/lwgeom/liblwgeom.c
   trunk/lwgeom/liblwgeom.h
   trunk/lwgeom/long_xact.sql.in
   trunk/lwgeom/lwgeom_btree.c
   trunk/lwgeom/lwgeom_dump.c
   trunk/lwgeom/lwgeom_estimate.c
   trunk/lwgeom/lwgeom_functions_basic.c
   trunk/lwgeom/lwgeom_geos_c.c
   trunk/lwgeom/lwgeom_gist.c
   trunk/lwgeom/lwgeom_inout.c
   trunk/lwgeom/lwgeom_pg.c
   trunk/lwgeom/lwgeom_pg.h
   trunk/lwgeom/lwgeom_transform.c
   trunk/lwgeom/pgsql_compat.h
   trunk/lwgeom/sqldefines.h
   trunk/lwgeom/sqlmm.sql.in
   trunk/regress/run_test
   trunk/regress/sql-mm-circularstring_expected.in
   trunk/regress/sql-mm-compoundcurve_expected.in
   trunk/regress/sql-mm-curvepoly_expected.in
   trunk/regress/sql-mm-multicurve_expected.in
   trunk/regress/sql-mm-multisurface_expected.in
Log:
Commit new build system based upon PGXS. Due to the large number of changes, please refer to http://postgis.refractions.net/pipermail/postgis-devel/2008-May/003010.html.

Modified: trunk/HOWTO_RELEASE
===================================================================
--- trunk/HOWTO_RELEASE	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/HOWTO_RELEASE	2008-05-14 17:10:19 UTC (rev 2774)
@@ -5,16 +5,16 @@
 Versioning Scheme
 -----------------
 
-Release version is composed by REL_MAJOR_VERSION, REL_MINOR_VERSION
-and REL_MICRO_VERSION components.
+Release version is composed by POSTGIS_MAJOR_VERSION, POSTGIS_MINOR_VERSION
+and POSTGIS_MICRO_VERSION components.
 
-By default only [REL_MICRO_VERSION] increments between releases.
+By default only [POSTGIS_MICRO_VERSION] increments between releases.
 
-[REL_MINOR_VERSION] is incremented (and MICRO set to 0) when minor
+[POSTGIS_MINOR_VERSION] is incremented (and MICRO set to 0) when minor
 additions have been introduced (one or two functions can be considered
 *micro* additions)
 
-[REL_MAJOR_VERSION] is incremented (and MICRO and MINOR set to 0) when
+[POSTGIS_MAJOR_VERSION] is incremented (and MICRO and MINOR set to 0) when
 a dump/reload of existing spatial databases is *REQUIRED* for things
 to work or rather *HIGHLY RECOMMENDED* to get new functionalities.
 

Deleted: trunk/Makefile.config.in
===================================================================
--- trunk/Makefile.config.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/Makefile.config.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,167 +0,0 @@
-#---------------------------------------------------------------
-# Configuration Directives
-#---------------------------------------------------------------
-
-#
-# We recommend that you install the Proj4 and GEOS libraries
-# referenced below to get the most use out of your PostGIS
-# database.
-
-#
-# Set USE_PROJ to 1 for Proj4 reprojection support (recommended)
-#
-# Reprojection allows you to transform coordinate systems
-# in the database with the Transform() function.
-#
-# Download from: http://www.remotesensing.org/proj
-#
-USE_PROJ=@USE_PROJ@
-PROJ_DIR=@PROJ_DIR@
-PROJ_LIBDIR=@PROJ_LIBDIR@
-
-#
-# Set USE_GEOS to 1 for GEOS spatial predicate and operator
-# support (recommended).
-# GEOS installation directory defaults to /usr/local,
-# set GEOS_DIR environment variable to change it.
-#
-# GEOS allows you to do exact topological tests, such as
-# Intersects() and Touches(), as well as geometry operations,
-# such as Buffer(), GeomUnion() and Difference().
-#
-# Download from: http://geos.refractions.net
-#
-# PostGIS >= 1.2.0 requires a CAPI GEOS (GEOS >= 2.2.0)
-#
-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. 
-#
-USE_JTS=@USE_JTS@
-JTS_INCLUDES=@JTS_INCLUDES@
-JTS_LIBDIR=@JTS_LIBDIR@
-
-#
-# Set USE_STATS to 1 for new GiST statistics collection support
-# Note that this support requires additional columns in 
-# GEOMETRY_COLUMNS, so see the list archives for info or
-# install a fresh database using postgis.sql.
-# This option is useless for builds against PGSQL>=80 (stats
-# are always gathered in that case, and you don't need additional
-# columns in geometry_columns).
-#
-USE_STATS=1
-
-#
-# Set AUTOCACHE_BBOX to 0 if you want finer control over
-# bounding box computation and caching for your geometries.
-# If you do, bbox computattion strategies are listed in
-# the file lwgeom/BBOXCACHE_BEHAVIOURS, but don't expect
-# them to be easy nor consistent.
-#
-AUTOCACHE_BBOX=1
-
-#
-# Set USE_ICONV to 1 if you want the loader (shp2pgsql)
-# to support UTF-8 output.
-#
-USE_ICONV=@USE_ICONV@
-ICONV_LDFLAGS=@ICONV_LDFLAGS@
-
-#
-# PGSQL
-#
-PGCONFIG=@PGCONFIG@
-PGFEINCLUDES=@PGFEINCLUDES@
-PGBEINCLUDES=@PGBEINCLUDES@
-PGFELIBS=@PGFELIBS@
-PGBELIBS=@PGBELIBS@
-PORTNAME=@PORTNAME@
-
-#
-# Docbook
-#
-XSLBASE=@XSLBASE@
-XSLTPROC=@XSLTPROC@
-PDFXMLTEX=@PDFXMLTEX@
-DB2PDF=@DB2PDF@
-JW=@JW@
-DOC_RULE=@DOC_RULE@
-
-#
-# Compilers
-#
-CC=@CC@
-CXX=@CXX@
-ELF_SYSTEM=@ELF_SYS@
-
-#
-# Other programs
-#
-PERL=@PERL@
-FLEX=@FLEX@
-YACC=@YACC@
-LN_S=@LN_S@
-INSTALL=@INSTALL@ -c
-PWDREGRESS=@PWDREGRESS@
-INSTALL_DATA=$(INSTALL) -m 644
-INSTALL_BIN=$(INSTALL) -m 755
-INSTALL_LIB=$(INSTALL) -m 755
-INSTALL_SHLIB=$(INSTALL_LIB)
-
-#
-# PATHS
-#
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@bindir@
-datadir=@datadir@
-mandir=@mandir@
-docdir=@docdir@
-libexecdir=@libexecdir@
-libdir=@libdir@
-LPATH=@LPATH@
-
-#
-# DLL 
-#
-DLSUFFIX=@DLSUFFIX@
-DLFLAGS=@DLFLAGS@
-# these are for win32 and cygwin platforms
-DLLTOOL=@DLLTOOL@
-DLLWRAP=@DLLWRAP@
-
-#
-# EXE
-#
-EXE=@EXE@
-
-#
-# HOST OS
-#
-HOST_OS=@HOST_OS@
-
-
-#---------------------------------------------------------------
-# END OF CONFIGURATION
-#---------------------------------------------------------------
-
-# Use JTS instead of GEOS if available
-ifeq ($(USE_JTS),1)
-	USE_GEOS=0
-endif
-
-#---------------------------------------------------------------
-# Test the version string and set the USE_VERSION macro
-# 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)
-

Modified: trunk/Version.config
===================================================================
--- trunk/Version.config	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/Version.config	2008-05-14 17:10:19 UTC (rev 2774)
@@ -3,7 +3,7 @@
 
 # See HOWTO_RELEASE file in SVN for definitions of those three.
 
-REL_MAJOR_VERSION=1
-REL_MINOR_VERSION=3
-REL_MICRO_VERSION=4SVN
+POSTGIS_MAJOR_VERSION=1
+POSTGIS_MINOR_VERSION=4
+POSTGIS_MICRO_VERSION=0
 

Modified: trunk/autogen.sh
===================================================================
(Binary files differ)

Deleted: trunk/config.h.in
===================================================================
--- trunk/config.h.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/config.h.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,3 +0,0 @@
-#undef HAVE_ICONV_H
-#undef USE_GEOS
-#undef USE_JTS

Modified: trunk/configure.in
===================================================================
--- trunk/configure.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/configure.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,625 +1,249 @@
-AC_INIT(README.postgis)
-AC_CONFIG_HEADER(config.h)
+dnl
+dnl PostGIS build system
+dnl
+dnl Written by Mark Cave-Ayland
+dnl
 
-dnl AC_ARG_ENABLE(autoconf, [  --enable-autoconf       really use autoconf],
-dnl  	AC_MSG_RESULT(Using autoconf),
-dnl  	AC_MSG_ERROR([
-dnl  
-dnl  Autoconf-based configuration is not widely tested.
-dnl  If you want to use it anyway specify --enable-autoconf.
-dnl  ])
-dnl  )
+AC_INIT()
+AC_CONFIG_HEADERS([postgis_config.h])
 
 dnl
 dnl Compilers
 dnl
 AC_PROG_CC
+AC_PROG_CPP
 AC_PROG_CXX
-AC_PROG_LN_S
 
 
 dnl
-dnl iconv support (might fail in case of non-default iconv installation)
+dnl Version Information imported from Version.config 
 dnl
-AC_SUBST(USE_ICONV)
-AC_SUBST(ICONV_LDFLAGS)
-ICONV_LDFLAGS=
-USE_ICONV=1
-AC_ARG_WITH(iconv, 
-[  --without-iconv         disable unicode support],
-	if test "$with_iconv" = "no"; then
-		USE_ICONV=0
-	fi
-)
+POSTGIS_MAJOR_VERSION=`cat Version.config | grep POSTGIS_MAJOR_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'`
+POSTGIS_MINOR_VERSION=`cat Version.config | grep POSTGIS_MINOR_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'`
+POSTGIS_MICRO_VERSION=`cat Version.config | grep POSTGIS_MICRO_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'`
 
-if test "$USE_ICONV" = 1; then
-	AC_CHECK_LIB(iconv, iconv_open,
-		USE_ICONV=1
-		ICONV_LDFLAGS=-liconv
-		,
-		AC_CHECK_LIB(iconv, libiconv_open,
-			USE_ICONV=1
-			ICONV_LDFLAGS=-liconv
-			,
-			AC_CHECK_LIB(c, iconv_open,
-				USE_ICONV=1
-				,
-				USE_ICONV=0
-			)
-		)
-	)
-fi
 
-AC_CHECK_HEADERS(iconv.h)
-
-
-
 dnl
-dnl host operating system
+dnl Detect the version of PostgreSQL installed on the system
 dnl
-AC_CANONICAL_HOST
 
-dnl
-dnl Search for pg_config and setup pgsql stuff
-dnl
-AC_SUBST(PGCONFIG)
-PGCONFIG=
-AC_ARG_WITH(pgsql, 
-[  --with-pgsql[[=ARG]]      build for a specific pgsql version
-                          [[ARG=path to pg_config]]],
-	if test "$with_pgsql" != "no" -a "$with_pgsql" != "yes"; then
-		if test ! -f "$with_pgsql"; then
-			AC_MSG_ERROR([Invalid argument to --with-pgsql]);
-		fi
-		PGCONFIG="$with_pgsql"
-	fi
-)
-if test -z "$PGCONFIG"; then
+AC_ARG_WITH([pgconfig], [Specify the path to an alternative pg_config], [PGCONFIG="$withval"], [PGCONFIG=""])
+if test "x$PGCONFIG" = "x"; then
+	dnl PGCONFIG was not specified, so search within the current path
 	AC_PATH_PROG([PGCONFIG], [pg_config])
-fi
-if test -z "$PGCONFIG"; then
-	AC_MSG_ERROR([PostgreSQL is required by PostGIS]);
-fi
-AC_SUBST(PGFEINCLUDES)
-AC_SUBST(PGBEINCLUDES)
-AC_SUBST(PGFELIBS)
-AC_SUBST(PGBELIBS)
-AC_SUBST(PGBIN)
-AC_SUBST(PGTEMPLATE)
-AC_SUBST(LPATH)
-PGFEINCLUDES="-I"`${PGCONFIG} --includedir`
-PGFELIBS="-L"`${PGCONFIG} --libdir`" -lpq " #(1)# `${PGCONFIG} --libs 2> /dev/null`
-#(1)#
-# We don't really want to link to more libs then required, see:
-# http://postgis.refractions.net/pipermail/postgis-devel/2006-May/002124.html
-PGBELIBS="-L"`${PGCONFIG} --libdir`" -lpostgres"
-PGBEINCLUDES="-I"`${PGCONFIG} --includedir-server`
-PGBIN=`${PGCONFIG} --bindir`
 
-dnl
-dnl MingW requires use of pwd -W to give proper Windows (not MingW) paths
-dnl for in-place regression tests
-dnl
-case $host_os in
-	*mingw*)
-		PWDREGRESS="pwd -W"
-		;;
-	*)
-		PWDREGRESS="pwd"
-		;;
-esac
-AC_SUBST(PWDREGRESS)
-
-dnl
-dnl Test for GEOS
-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
-	USE_GEOS=1
-fi
-
-AC_ARG_WITH(geos, 
-[  --with-geos[[=ARG]]       enable spatial predicates and operators using GEOS
-                          [[ARG=path to geos-config]]],
-	if test "$with_geos" = "no"; then
-		USE_GEOS=0
+	dnl If we couldn't find pg_config, display an error
+	if test "x$PGCONFIG" = "x"; then
+		AC_MSG_ERROR([could not find pg_config within the current path. You may need to try re-running configure with a --with-pgconfig parameter.])
+	fi
+else
+	dnl PGCONFIG was specified; display a message to the user
+	if test "x$PGCONFIG" = "xyes"; then
+		AC_MSG_ERROR([you must specify a parameter to --with-pgconfig, e.g. --with-pgconfig=/path/to/pg_config])
 	else
-		if test "$with_geos" != "yes"; then
-			if test ! -f "$with_geos"; then
-	            AC_MSG_ERROR([Invalid argument to --with-geos]);
-			else
-				GEOSCONFIG="$with_geos"
-				USE_GEOS=1
-                AC_MSG_RESULT([Using specified geos-config file: $GEOSCONFIG])
-			fi
+		if test -f $PGCONFIG; then
+			AC_MSG_RESULT([Using user-specified pg_config file: $PGCONFIG])
+		else
+			AC_MSG_ERROR([the user-specified pg_config file $PGCONFIG does not exist])
 		fi
 	fi
-)
+fi
 
-if test $USE_GEOS -gt 0; then
+dnl Extract the version information from pg_config
+dnl Note: we extract the major & minor separately, ensure they are numeric, and then combine to give
+dnl the final version. This is to guard against user error... 
+PGSQL_MAJOR_VERSION=`$PGCONFIG --version | sed 's/[[A-Za-z ]]*//' | cut -d. -f1 | sed 's/[[^0-9]]//g'`	
+PGSQL_MINOR_VERSION=`$PGCONFIG --version | sed 's/[[A-Za-z ]]*//' | cut -d. -f2 | sed 's/[[^0-9]]//g'`	
+POSTGIS_PGSQL_VERSION="$PGSQL_MAJOR_VERSION$PGSQL_MINOR_VERSION"
 
-	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
-		# default to GEOS_DIR/lib in this case.
-		#
-		GEOS_LDFLAGS="-L${GEOS_DIR}/lib"
+dnl Ensure that we are using PostgreSQL >= 8.1
+if test ! "$PGSQL_MAJOR_VERSION" -ge 8; then
+	AC_MSG_ERROR([PostGIS requires PostgreSQL >= 8.1])
+else
+	if test "$PGSQL_MAJOR_VERSION" -eq 8; then
+		if test ! "$PGSQL_MINOR_VERSION" -ge 1; then
+			AC_MSG_ERROR([PostGIS requires PostgreSQL >= 8.1])
+		fi	
 	fi
+fi	
 
-	GEOS_MAJOR=`$GEOSCONFIG --version | cut -d. -f1`
-	GEOS_MINOR=`$GEOSCONFIG --version | cut -d. -f2`
-	GEOS_VERNUM=`expr $GEOS_MAJOR "*" 10`
-	GEOS_VERNUM=`expr $GEOS_VERNUM "+" $GEOS_MINOR`
+dnl Note: We don't need the server-side LDFLAGS or CPPFLAGS because we get these from PGXS 
 
-	# 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
+dnl Extract the linker and include flags for the frontend (for programs that use libpq)
+PGSQL_FE_LDFLAGS=-L`$PGCONFIG --libdir`
+PGSQL_FE_CPPFLAGS=-I`$PGCONFIG --includedir`
 
-fi
+AC_SUBST([PGSQL_FE_LDFLAGS])
+AC_SUBST([PGSQL_FE_CPPFLAGS])
 
-AC_SUBST(USE_PROJ)
-AC_SUBST(PROJ_DIR)
-AC_SUBST(PROJ_LIBDIR)
-USE_PROJ=0
-PROJ_DIR=
-PROJ_LIBDIR=
-AC_PATH_PROG([PROJ], [proj])
-if test -n "$PROJ"; then
-	USE_PROJ=1
-	PROJ_DIR=`dirname ${PROJ}`/..
-	owd=`pwd`; cd ${PROJ_DIR}; PROJ_DIR=`pwd`; cd $owd;
-fi
-AC_ARG_WITH(proj, 
-	[  --with-proj[[=DIR]]       enable reprojection support],
-	if test "$with_proj" = "no"; then
-		USE_PROJ=0
-	else
-		USE_PROJ=1
-		if test "$with_proj" != "yes"; then
-			PROJ_DIR=$with_proj
-		fi
-	fi
-)
-if test $USE_PROJ -gt 0; then
-	if test ! -f $PROJ_DIR/include/projects.h; then
-		AC_MSG_ERROR([Can't find proj dir.]);
-	fi
-	PROJ_LIBDIR=${PROJ_DIR}/lib
-fi
 
-AC_ARG_WITH(proj-libdir,
-[  --with-proj-libdir=PATH path to PROJ4 libdir],
-[
-case "$with_proj_libdir" in
-	no|yes)
-		AC_MSG_ERROR([Invalid argument to --with-proj-libdir])
-		;;
-	*)
-		PROJ_LIBDIR=${with_proj_libdir}
-		;;
-esac
-], with_proj_libdir=no)
+dnl Ensure that we can parse libpq-fe.h
+CPPFLAGS_SAVE="$CPPFLAGS"
+CPPFLAGS="$PGSQL_FE_CPPFLAGS"
+AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([could not find libpq-fe.h])])
+CPPFLAGS="$CPPFLAGS_SAVE"
 
-AC_SUBST(USE_JTS)
-AC_SUBST(JTS_INCLUDES)
-AC_SUBST(JTS_LIBDIR)
-USE_JTS=0
-JTS_INCLUDES=
-JTS_INCLUDES=
-AC_ARG_WITH(jts, 
-[  --with-jts[[=ARG]]        use JTS for spatial predicates and operators
-                          [[ARG=path to jts-config]]],
-	if test "$with_jts" != "no"; then
-		USE_JTS=1
-		if test "$with_jts" != "yes"; then
-			if test ! -f "$with_jts"; then
-	AC_MSG_ERROR([Invalid argument to --with-jts]);
-			else
-				JTSCONFIG=$with_jts
-			fi
-		fi
-	fi
-)
-if test $USE_JTS -gt 0; then
-	if test -z "$JTSCONFIG"; then
-		AC_PATH_PROG([JTSCONFIG], [jts-config])
-		if test -z "$JTSCONFIG"; then
-			AC_MSG_ERROR([Can't find jts-config]);
-		fi
-	fi
-	JTS_INCLUDES=`$JTSCONFIG --includedir`
-	JTS_LIBDIR=`$JTSCONFIG --libdir`
-fi
+dnl Ensure we can link against libpq
+LIBS_SAVE="$LIBS"
+LIBS="$PGSQL_FE_LDFLAGS"
+AC_CHECK_LIB([pq], [PQserverVersion],
+	[],
+	[AC_MSG_ERROR([could not find libpq])],
+	[])
+LIBS="$LIBS_SAVE"
 
-dnl
-dnl Search flex and yacc
-dnl
-AC_SUBST(FLEX)
-AC_PATH_PROG([FLEX], [flex])
-if test -z "$FLEX"; then
-	AC_MSG_ERROR(Can't find 'flex');
-fi
+AC_DEFINE_UNQUOTED([POSTGIS_PGSQL_VERSION], [$POSTGIS_PGSQL_VERSION], [PostgreSQL server version])	
+AC_SUBST([POSTGIS_PGSQL_VERSION])
 
-AC_SUBST(DLLWRAP)
-AC_PATH_PROG([DLLWRAP], [dllwrap])
-AC_SUBST(DLLTOOL)
-AC_PATH_PROG([DLLTOOL], [dlltool])
 
-dnl AC_SUBST(YACC)
-dnl AC_PATH_PROG([YACC], [yacc])
-AC_PROG_YACC
-if test -z "$YACC"; then
-	AC_MSG_ERROR(Can't find 'yacc');
-fi
-
 dnl
-dnl Find 'install'
+dnl Detect the version of GEOS installed on the system
 dnl
-dnl AC_PATH_PROG([INSTALL], [install])
-dnl if test -z "$INSTALL"; then
-dnl 	AC_MSG_ERROR(Can't find 'install');
-dnl fi
-AC_SUBST(INSTALL)
-INSTALL=`pwd`"/install-sh"
 
-dnl
-dnl Search perl
-dnl
-AC_SUBST(PERL)
-AC_PATH_PROG([PERL], [perl])
-if test -z "$PERL"; then
-	AC_MSG_ERROR(Can't find 'perl');
-fi
+AC_ARG_WITH([geosconfig], [Specify the path to an alternative geos-config], [GEOSCONFIG="$withval"], [GEOSCONFIG=""])
+if test "x$GEOSCONFIG" = "x"; then
+	dnl GEOSCONFIG was not specified, so search within the current path
+	AC_PATH_PROG([GEOSCONFIG], [geos-config])
 
-AC_SUBST(docdir)
-docdir='${prefix}/share/doc'
-AC_ARG_WITH(docdir,
-[  --with-docdir=DIR       install the documentation in DIR [[PREFIX/share/doc]]],
-	if test "$with_docdir" = "yes"; then
-		AC_MSG_ERROR([option --with-docdir requires an argument])
+	dnl If we couldn't find geos-config, display an error
+	if test "x$GEOSCONFIG" = "x"; then
+		AC_MSG_ERROR([could not find geos-config within the current path. You may need to try re-running configure with a --with-geosconfig parameter.])
 	fi
-	if test "$with_docdir" != "no"; then
-		docdir="$with_docdir"
+else
+	dnl GEOSCONFIG was specified; display a message to the user
+	if test "x$GEOSCONFIG" = "xyes"; then
+		AC_MSG_ERROR([you must specify a parameter to --with-geosconfig, e.g. --with-geosconfig=/path/to/geos-config])
+	else
+		if test -f $GEOSCONFIG; then
+			AC_MSG_RESULT([Using user-specified geos-config file: $GEOSCONFIG])
+		else
+			AC_MSG_ERROR([the user-specified geos-config file $GEOSCONFIG does not exist])
+		fi	
 	fi
-)
+fi
 
-dnl
-dnl Find 'html/docbook.xsl'
-dnl
-AC_SUBST(XSLBASE)
-XSLBASE=
-AC_ARG_WITH(xsl,
-[  --with-xsl=DIR      Specify the DIR containing html/docbook.xsl stylesheet],
-	if test "$with_xsl" = yes; then
-		AC_MSG_ERROR([option --with-xsl requires an argument])
-	fi
-	if test "$with_xsl" != "no"; then
-		xsl="$with_xsl"
-	fi
-	,
-	SEARCHPATH="
-		/usr/share/sgml/docbook/xsl-stylesheets 
-		/usr/share/xml/docbook/stylesheet/nwalsh
-		/usr/share/sgml/docbook/stylesheet/xsl/nwalsh
-		"
-	for p in ${SEARCHPATH}; do
-		if test -r "${p}"/html/docbook.xsl; then
-			xsl="${p}"
-			break
-		fi
-	done
-)
-XSLBASE="${xsl}"
+dnl Extract the version information from pg_config
+dnl Note: we extract the major & minor separately, ensure they are numeric, and then combine to give
+dnl the final version. This is to guard against user error... 
+GEOS_MAJOR_VERSION=`$GEOSCONFIG --version | cut -d. -f1 | sed 's/[[^0-9]]//g'`
+GEOS_MINOR_VERSION=`$GEOSCONFIG --version | cut -d. -f2 | sed 's/[[^0-9]]//g'`
+POSTGIS_GEOS_VERSION="$GEOS_MAJOR_VERSION$GEOS_MINOR_VERSION"
 
-dnl
-dnl Search for other binaries needed to build docs
-dnl
-AC_PATH_PROG([XSLTPROC], [xsltproc])
-AC_PATH_PROG([PDFXMLTEX], [pdfxmltex])
-AC_PATH_PROG([DB2PDF], [db2pdf])
-AC_PATH_PROG([JW], [jw])
-AC_SUBST(XSLTPROC)
-AC_SUBST(PDFXMLTEX)
-AC_SUBST(JW)
-
-DOC_RULE=requirements_not_met
-if test -n "${XSLBASE}"; then
-	if test -n "${XSLTPROC}"; then
-		DOC_RULE=html/postgis.html
-	else
-		if test -n "${JW}"; then
-			DOC_RULE=jw
+dnl Ensure that we are using GEOS >= 2.2.0 (requires CAPI) 
+if test ! "$GEOS_MAJOR_VERSION" -ge 2; then
+	AC_MSG_ERROR([PostGIS requires GEOS >= 2.2])
+else
+	if test "$GEOS_MAJOR_VERSION" -eq 2; then
+		if test ! "$GEOS_MINOR_VERSION" -ge 2; then
+			AC_MSG_ERROR([PostGIS requires GEOS >= 2.2])
 		fi
 	fi
-fi
-AC_SUBST(DOC_RULE)
+fi	
 
+dnl Extract the linker and include flags 
+GEOS_LDFLAGS=`$GEOSCONFIG --ldflags`
+GEOS_CPPFLAGS=-I`$GEOSCONFIG --includes`
 
-if test $USE_JTS -gt 0; then
-dnl	AC_MSG_RESULT([ GEOS disabled, using JTS.])
-	USE_GEOS=0
-        AC_DEFINE(USE_JTS)
-fi
+dnl Ensure that we can parse geos_c.h
+CPPFLAGS_SAVE="$CPPFLAGS"
+CPPFLAGS="$GEOS_CPPFLAGS"
+AC_CHECK_HEADER([geos_c.h], [], [AC_MSG_ERROR([could not find geos_c.h - you may need to specify the directory of a geos-config file using --with-geosconfig])])
+CPPFLAGS="$CPPFLAGS_SAVE"
 
-if test $USE_GEOS -gt 0; then
-        AC_DEFINE(USE_GEOS)
-fi
+dnl Ensure we can link against libgeos_c
+LIBS_SAVE="$LIBS"
+LIBS="$GEOS_LDFLAGS"
+AC_CHECK_LIB([geos_c], [initGEOS],
+	[],
+	[AC_MSG_ERROR([could not find libgeos_c - you may need to specify the directory of a geos-config file using --with-geosconfig])],
+	[])
+LIBS="$LIBS_SAVE"
 
-#
-# Extract PostgreSQL paths from pg_config
-##
+AC_DEFINE_UNQUOTED([POSTGIS_GEOS_VERSION], [$POSTGIS_GEOS_VERSION], [GEOS library version])	
+AC_SUBST([POSTGIS_GEOS_VERSION])
 
-#
-# Prefix (pg_prefix)
-#
-pg_prefix=/usr/local/pgsql
-pg_eprefix=
-pg_docdir=
-pg_datadir=
-pg_mandir=
-pg_bindir="`${PGCONFIG} --bindir`"
-pg_pkglibdir="`${PGCONFIG} --pkglibdir`"
-for v in `${PGCONFIG} --configure`; do
-	strip=`echo $v | sed "s/'//g"`
-	var=`echo "$strip" | cut -d= -f1`
-	if test "$var" = "--prefix"; then
-		pg_prefix=`echo "$strip" | cut -d= -f2`
-	elif test "$var" = "--exec-prefix"; then
-		pg_eprefix=`echo "$strip" | cut -d= -f2`
-	elif test "$var" = "--docdir"; then
-		pg_docdir=`echo "$strip" | cut -d= -f2`
-	elif test "$var" = "--with-docdir"; then
-		pg_docdir=`echo "$strip" | cut -d= -f2`
-	elif test "$var" = "--datadir"; then
-		pg_datadir=`echo "$strip" | cut -d= -f2`
-	elif test "$var" = "--mandir"; then
-		pg_mandir=`echo "$strip" | cut -d= -f2`
-	elif test "$var" = "--with-template"; then
-		PGTEMPLATE=`echo "$strip" | cut -d= -f2`
-	fi
-done
-#
-# We set these defaults after scan of
-# pg_config --configure to safely expand pg_prefix
-# We need expansion for the 'postgresq' path component
-# addition below (default paths take from pg_config)
-#
-if test -z "$pg_eprefix"; then pg_eprefix=${pg_prefix}; fi
-if test -z "$pg_docdir"; then pg_docdir=${pg_prefix}'/doc'; fi
-if test -z "$pg_datadir"; then pg_datadir=${pg_prefix}'/share'; fi
-if test -z "$pg_mandir"; then pg_mandir=${pg_prefix}'/man'; fi
 
-# Use old layout by default
-use_new_layout=0
+dnl
+dnl Detect the version of PROJ.4 installed
+dnl
 
-if test "$prefix" != 'NONE'; then
-	use_new_layout=1
-fi
+AC_ARG_WITH([projdir], [Specify the directory to an alternative PROJ installation], [PROJDIR="$withval"], [PROJDIR=""])
+if test ! "x$PROJDIR" = "x"; then
+	dnl Make sure that the directory exists 
+	if test "x$PROJDIR" = "xyes"; then
+		AC_MSG_ERROR([you must specifiy a parameter to --with-projdir, e.g. --with-projdir=/path/to])
+	else
+		if test -d "$PROJDIR"; then
+			AC_MSG_RESULT([Using user-specified proj directory: $PROJDIR])
 
-if test "${use_new_layout}" = "1"; then
-	LPATH=$libdir
-else
-
-	#
-	# Use old layout: everything under PGSQL paths
-	# Note: still allow override by user, this is
-	#       done checking each variable against its
-	#	default value, if it has a different
-	#	value do not use PGSQL versions
-	#
-
-	if test "$prefix" = 'NONE'; then
-		prefix=${pg_prefix}
-	fi
-
-	if test "$docdir" = '${prefix}/share/doc'; then
-		docdir=${pg_docdir}
-		#
-		# If docdir contains no 'pgsql' or 'postgres'
-		# add the suffix. This is derived from
-		# PGSQL_SRC/src/Makefile.global
-		#
-		if expr "${docdir}" : ".*/pgsql" > /dev/null ; then :; else
-		if expr "${docdir}" : ".*/postgres" > /dev/null ; then :; else
-			docdir=${docdir}"/postgresql"
+			dnl Add the include directory to PROJ_CPPFLAGS	
+			PROJ_CPPFLAGS="-I$PROJDIR/include"	
+			PROJ_LDFLAGS="-L$PROJDIR/lib"
+		else
+			AC_MSG_ERROR([the --with-projdir directory "$PROJDIR" cannot be found]) 
 		fi
-		fi
-		# Add the "contrib" part
-		docdir=${docdir}"/contrib"
 	fi
-
-	if test "$datadir" = '${prefix}/share'; then
-		datadir=${pg_datadir}
-		#
-		# If datadir contains no 'pgsql' or 'postgres'
-		# add the suffix. This is derived from
-		# PGSQL_SRC/src/Makefile.global
-		#
-		if expr "${datadir}" : ".*/pgsql" > /dev/null ; then :; else
-		if expr "${datadir}" : ".*/postgres" > /dev/null ; then :; else
-			datadir=${datadir}"/postgresql"
-		fi
-		fi
-		# Add the "contrib" part
-		datadir=${datadir}"/contrib"
-	fi
-
-	if test "$mandir" = '${prefix}/man'; then
-		mandir=${pg_mandir}
-	fi
-
-	if test "$bindir" = '${exec_prefix}/bin'; then
-		bindir=${pg_bindir}
-	fi
-
-	if test "$libdir" = '${exec_prefix}/lib'; then
-		libdir=${pg_pkglibdir}
-		LPATH='\$$libdir'
-	else
-		LPATH=$libdir
-	fi
 fi
 
-# --with-template parsing is done in the single
-# pg_config --configure scan above
-AC_MSG_CHECKING([which template to use])
-template=$PGTEMPLATE
+dnl Check that we can find the proj_api.h header file
+CPPFLAGS_SAVE="$CPPFLAGS"
+CPPFLAGS="$PROJ_CPPFLAGS"
+AC_CHECK_HEADER([proj_api.h], [], [AC_MSG_ERROR([could not find proj_api.h - you may need to specify the directory of a PROJ.4 installation using --with-projdir])])	
 
-case $host_os in
-     aix*) template=aix ;;
-    beos*) template=beos ;;
-    bsdi*) template=bsdi ;;
-  cygwin*) template=cygwin ;;
-  darwin*) template=darwin ;;
-    dgux*) template=dgux ;;
- freebsd*) template=freebsd ;;
-    hpux*) template=hpux ;;
-    irix*) template=irix ;;
- linux*|gnu*|k*bsd*-gnu)
-           template=linux ;;
-   mingw*) template=win32 ;;
-  netbsd*) template=netbsd ;;
-nextstep*) template=nextstep ;;
- openbsd*) template=openbsd ;;
-     osf*) template=osf ;;
-     qnx*) template=qnx4 ;;
-     sco*) template=sco ;;
- solaris*) template=solaris ;;
-   sunos*) template=sunos4 ;;
- sysv4.2*)
-        case $host_vendor in
-          univel) template=univel ;;
-        esac ;;
-   sysv4*) template=svr4 ;;
-   sysv5*) template=unixware ;;
-  ultrix*) template=ultrix4 ;;
-esac
+dnl Return the PROJ.4 version number
+AC_PROJ_VERSION([POSTGIS_PROJ_VERSION])
+AC_DEFINE_UNQUOTED([POSTGIS_PROJ_VERSION], [$POSTGIS_PROJ_VERSION], [PROJ library version])
+AC_SUBST([POSTGIS_PROJ_VERSION])
+CPPFLAGS="$CPPFLAGS_SAVE"
 
-  if test x"$template" = x"" ; then
-    AC_MSG_ERROR([[
-*******************************************************************
-PostgreSQL has apparently not been ported to your platform yet.
-To try a manual configuration, look into the src/template directory
-for a similar platform and use the '--with-template=' option.
+dnl Ensure we can link against libproj
+LIBS_SAVE="$LIBS"
+LIBS="$PROJ_LDFLAGS"
+AC_CHECK_LIB([proj], [pj_get_release],
+	[],
+	[AC_MSG_ERROR([could not find libproj - you may need to specify the directory of a PROJ.4 installation using --with-projdir])],
+	[])
+LIBS="$LIBS_SAVE"
 
-Please also contact <pgsql-ports at postgresql.org> to see about
-rectifying this.  Include the above 'checking host system type...'
-line.
-*******************************************************************
-]])
-  fi
 
-AC_MSG_RESULT([$template])
+dnl
+dnl Define version macros
+dnl
 
-PORTNAME=$template
-AC_SUBST(PORTNAME)
+POSTGIS_VERSION="$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION USE_GEOS=1 USE_PROJ=1 USE_STATS=1"
+POSTGIS_LIB_VERSION="$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION.$POSTGIS_MICRO_VERSION"
+POSTGIS_BUILD_DATE=`date -u "+%Y-%m-%d %H:%M:%S"`
+POSTGIS_SCRIPTS_VERSION="$POSTGIS_LIB_VERSION"
 
+AC_DEFINE_UNQUOTED([POSTGIS_VERSION], ["$POSTGIS_VERSION"], [PostGIS version])
+AC_DEFINE_UNQUOTED([POSTGIS_LIB_VERSION], ["$POSTGIS_LIB_VERSION"], [PostGIS library version])
+AC_DEFINE_UNQUOTED([POSTGIS_BUILD_DATE], ["$POSTGIS_BUILD_DATE"], [PostGIS build date])
+AC_DEFINE_UNQUOTED([POSTGIS_SCRIPTS_VERSION], ["$POSTGIS_SCRIPTS_VERSION"], [PostGIS scripts version])
 
-#
-# OS-specific settings
-#
-AC_SUBST(DLSUFFIX)
-AC_SUBST(DLFLAGS)
-AC_SUBST(EXE)
-AC_SUBST(HOST_OS)
+AC_SUBST([POSTGIS_VERSION])
+AC_SUBST([POSTGIS_LIB_VERSION])
+AC_SUBST([POSTGIS_BUILD_DATE])
+AC_SUBST([POSTGIS_SCRIPTS_VERSION])
 
-# host_os is defined by AC_CANONICAL_HOST
-HOST_OS=$host_os
-DLSUFFIX=.so
-DLFLAGS=-shared
-EXE=
-case $host_os in
-	*mingw*)
-		PGBEINCLUDES="$PGBEINCLUDES $PGBEINCLUDES/port/win32"
-		DLSUFFIX=.dll
-		DLFLAGS='${PGBELIBS}'
-		EXE=.exe
-		;;
-	*darwin*)
-		DLFLAGS="-no-cpp-precomp -flat_namespace -undefined suppress -multiply_defined suppress"
-		;;
-esac
 
-# Assume system is ELF if it predefines __ELF__ as 1,
-# otherwise believe host_os based default.
-case $host_os in
-    freebsd1*|freebsd2*) elf=no;;
-    freebsd3*|freebsd4*) elf=yes;;
-esac
+dnl
+dnl Other parameters 
+dnl
 
-AC_EGREP_CPP(yes,
-[#if __ELF__
-  yes
-#endif
-],
-[ELF_SYS=true],
-[if test "X$elf" = "Xyes" ; then
-  ELF_SYS=true
-else
-  ELF_SYS=
-fi])
-AC_SUBST(ELF_SYS)
+dnl Always enable BBOX caching by default
+AC_DEFINE_UNQUOTED([POSTGIS_AUTOCACHE_BBOX], [1], [Enable caching of bounding box within geometries])
 
+dnl Always enable use of ANALYZE statistics by default
+AC_DEFINE_UNQUOTED([POSTGIS_USE_STATS], [1], [Enable use of ANALYZE statistics])
 
 
-AC_OUTPUT(Makefile.config)
+CPPFLAGS="$PGSQL_CPPFLAGS $GEOS_CPPFLAGS $PROJ_CPPFLAGS"
+dnl AC_MSG_RESULT([CPPFLAGS: $CPPFLAGS])
 
-AC_MSG_RESULT([ ])
-AC_MSG_RESULT([ SUMMARY])
-AC_MSG_RESULT([ -------------------------------------------------------])
-AC_MSG_RESULT([ ])
-AC_MSG_RESULT([ HOST_OS: $host_os])
-AC_MSG_RESULT([ ])
-AC_MSG_RESULT([   PGSQL: $PGCONFIG])
+SHLIB_LINK="$PGSQL_LDFLAGS $GEOS_LDFLAGS $PROJ_LDFLAGS -lgeos_c -lproj"
+AC_SUBST([SHLIB_LINK])
+dnl AC_MSG_RESULT([SHLIB_LINK: $SHLIB_LINK])
 
-if test $USE_JTS -gt 0; then
-	AC_MSG_RESULT([     JTS: includedir=$JTS_INCLUDES libdir=$JTS_LIBDIR])
-fi
+dnl Output the relevant files
+AC_OUTPUT([lwgeom/Makefile lwgeom/sqldefines.h loader/Makefile.pgsql2shp regress/Makefile])
 
-# GEOS CAPI information
-if test $USE_GEOS -gt 0; then
-	AC_MSG_RESULT([    GEOS: $GEOSCONFIG (with C-API)])
-    AC_MSG_RESULT([          (ldflags: $GEOS_LDFLAGS)])
-fi
-
-# PROJ.4 information
-if test $USE_PROJ -gt 0; then
-	AC_MSG_RESULT([    PROJ: prefix=$PROJ_DIR libdir=$PROJ_LIBDIR])
-fi
-
-AC_MSG_RESULT([   ICONV: $USE_ICONV $ICONV_LDFLAGS])
-dnl AC_MSG_RESULT([  FLEX:  path=$FLEX])
-dnl AC_MSG_RESULT([  YACC:  path=$YACC])
-
-AC_MSG_RESULT([  ])
-AC_MSG_RESULT([ PORTNAME: $PORTNAME])
-AC_MSG_RESULT([   PREFIX: $prefix])
-AC_MSG_RESULT([  EPREFIX: $exec_prefix])
-AC_MSG_RESULT([      DOC: $docdir])
-AC_MSG_RESULT([     DATA: $datadir])
-AC_MSG_RESULT([      MAN: $mandir])
-AC_MSG_RESULT([      BIN: $bindir])
-if test "$MODULE_INSTALLDIR" = "$LPATH"; then
-	AC_MSG_RESULT([      EXT: $libdir])
-else
-	AC_MSG_RESULT([      EXT: $libdir ($LPATH)])
-fi
-
-AC_MSG_RESULT([ -------------------------------------------------------])
-AC_MSG_RESULT([ ])
-

Modified: trunk/loader/Makefile
===================================================================
--- trunk/loader/Makefile	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/loader/Makefile	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,44 +1,9 @@
-include ../Makefile.config
-
-# Version handling:
-include ../Version.config
-POSTGIS_VERSION = $(REL_MAJOR_VERSION).$(REL_MINOR_VERSION).$(REL_MICRO_VERSION)
-
 #
-# PostGIS Loader Makefile
+# PostGIS PGXS build system
 #
 
-OBJS = shpopen.o dbfopen.o getopt.o
+all:
+%:
+	make -f Makefile.shp2pgsql $@
+	make -f Makefile.pgsql2shp $@
 
-#---------------------------------------------------------------
-
-ifeq ($(USE_ICONV),1)
-	override CFLAGS += -DUSE_ICONV
-	override LDFLAGS += $(ICONV_LDFLAGS)
-endif
-
-override CFLAGS := -g -Wall -I.. $(CFLAGS) -DUSE_VERSION=$(USE_VERSION) -DPOSTGIS_VERSION='"$(POSTGIS_VERSION)"'
-
-all: shp2pgsql$(EXE) pgsql2shp$(EXE)
-
-pgsql2shp.o: pgsql2shp.c
-	$(CC) $(CFLAGS) $(PGFEINCLUDES) -c $<
-
-pgsql2shp$(EXE): $(OBJS) pgsql2shp.o PQunescapeBytea.o
-	$(CC) $(CFLAGS) $(OBJS) PQunescapeBytea.o pgsql2shp.o $(LDFLAGS) $(PGFELIBS) -o $@ 
-
-shp2pgsql$(EXE): $(OBJS) shp2pgsql.o
-	$(CC) $(CFLAGS) $(OBJS) shp2pgsql.o $(LDFLAGS) -o $@ 
-
-install: all
-	@mkdir -p $(DESTDIR)$(bindir)
-	$(INSTALL_BIN) pgsql2shp$(EXE) $(DESTDIR)$(bindir)/pgsql2shp$(EXE)
-	$(INSTALL_BIN) shp2pgsql$(EXE) $(DESTDIR)$(bindir)/shp2pgsql$(EXE)
-
-uninstall:
-	rm -f $(DESTDIR)$(bindir)/pgsql2shp$(EXE)
-	rm -f $(DESTDIR)$(bindir)/shp2pgsql$(EXE)
-
-clean:
-	rm -f $(OBJS) shp2pgsql.o pgsql2shp.o PQunescapeBytea.o shp2pgsql$(EXE) pgsql2shp$(EXE)
-

Added: trunk/loader/Makefile.pgsql2shp.in
===================================================================
--- trunk/loader/Makefile.pgsql2shp.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/loader/Makefile.pgsql2shp.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,22 @@
+#
+# PostGIS PGXS build system
+#
+PROGRAM=pgsql2shp
+
+# List of objects to build
+OBJS=	shpopen.o \
+	dbfopen.o \
+	getopt.o \
+	pgsql2shp.o \
+	PQunescapeBytea.o
+
+# Link against libpq
+PG_CPPFLAGS=@PGSQL_FE_CPPFLAGS@
+PG_LIBS=@PGSQL_FE_LDFLAGS@ -lpq
+
+
+# PGXS information
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+

Added: trunk/loader/Makefile.shp2pgsql
===================================================================
--- trunk/loader/Makefile.shp2pgsql	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/loader/Makefile.shp2pgsql	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,16 @@
+#
+# PostGIS PGXS build system
+#
+PROGRAM=shp2pgsql
+
+# List of objects to build
+OBJS=	shpopen.o \
+	dbfopen.o \
+	getopt.o \
+	shp2pgsql.o
+
+# PGXS information
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+

Modified: trunk/loader/pgsql2shp.c
===================================================================
--- trunk/loader/pgsql2shp.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/loader/pgsql2shp.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -21,6 +21,8 @@
 static char rcsid[] =
   "$Id$";
 
+#include "../postgis_config.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

Modified: trunk/loader/shp2pgsql.c
===================================================================
--- trunk/loader/shp2pgsql.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/loader/shp2pgsql.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -22,7 +22,7 @@
  *
  **********************************************************************/
 
-#include "../config.h"
+#include "../postgis_config.h"
 #include "shapefil.h"
 #include <stdio.h>
 #include <string.h>

Modified: trunk/lwgeom/Makefile
===================================================================
--- trunk/lwgeom/Makefile	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/Makefile	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,172 +1,87 @@
-# Configuration Directives
-include ../Makefile.config
-include ../Version.config
-
-#---------------------------------------------------------------
-# Default missing CXX variable to c++
-# 
-ifndef $(CXX) 
-	CXX = c++
-endif
-
-#---------------------------------------------------------------
-# Shared library parameters.
 #
-NAME=lwgeom
-SHLIB_LINK 	= $(DLFLAGS) 
-
-#---------------------------------------------------------------
-# Postgis version and build date
-#---------------------------------------------------------------
-
-POSTGIS_VERSION = $(REL_MAJOR_VERSION).$(REL_MINOR_VERSION) USE_GEOS=$(USE_GEOS) USE_PROJ=$(USE_PROJ) USE_STATS=$(USE_STATS)
-POSTGIS_LIB_VERSION = $(REL_MAJOR_VERSION).$(REL_MINOR_VERSION).$(REL_MICRO_VERSION)
-POSTGIS_BUILD_DATE := $(shell date -u "+%Y-%m-%d %H:%M:%S")
-SCRIPTS_VERSION=$(POSTGIS_LIB_VERSION)
-
-SQL_FLAGS = -DUSE_VERSION=$(USE_VERSION)
-
-#---------------------------------------------------------------
-
-CSTAR_FLAGS = -Wall -g -O2 -fPIC -fexceptions
-
-override CFLAGS += -DUSE_VERSION=$(USE_VERSION)
-override CFLAGS += -DPOSTGIS_LIB_VERSION='"$(POSTGIS_LIB_VERSION)"'
-override CFLAGS += -DPOSTGIS_VERSION='"$(POSTGIS_VERSION)"'
-override CFLAGS += -DPOSTGIS_SCRIPTS_VERSION='"$(SCRIPTS_VERSION)"'
-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)
-        SQL_FLAGS += -DUSE_GEOS -DGEOS_VERNUM=$(GEOS_VERNUM)
-	GEOS_RULES=
-	CSTAR_FLAGS += -I$(GEOS_DIR)/include 
-	GEOS_WRAPPER=
-	JTS_OBJ=lwgeom_geos_c.o
-	SHLIB_LINK += $(GEOS_LDFLAGS) -lgeos_c
-endif
-
-ifeq ($(USE_JTS),1)
-	CXXFLAGS += -I$(JTS_INCLUDES)
-	CSTAR_FLAGS += -DUSE_JTS
-        SQL_FLAGS += -DUSE_JTS
-	JTS_WRAPPER=lwgeom_jts_wrapper.o
-	JTS_OBJ=lwgeom_jts.o
-	SHLIB_LINK += -lgcj -ljts -lstdc++ -L$(JTS_LIBDIR) 
-endif
-
-ifeq ($(USE_PROJ),1)
-	override CFLAGS += -I$(PROJ_DIR)/include -DUSE_PROJ 
-	SHLIB_LINK += -L$(PROJ_LIBDIR) -lproj
-        SQL_FLAGS += -DUSE_PROJ
-endif
-
-override CFLAGS += $(PGBEINCLUDES) -DAUTOCACHE_BBOX=$(AUTOCACHE_BBOX) 
-
-# memory debug for gcc 2.91, 2.95, 3.0 and 3.1
-# for gcc >= 3.2.2 set GLIBCPP_FORCE_NEW at runtime instead
-#override CXXFLAGS += -D__USE_MALLOC
-
-#---------------------------------------------------------------
-# Add index selectivity to C flags
+# PostGIS PGXS build system
 #
-ifeq ($(USE_STATS),1)
-	override CFLAGS += -DUSE_STATS
-endif
+MODULE_big=lwpostgis
 
-override CFLAGS += $(CSTAR_FLAGS)
-override CXXFLAGS += $(CSTAR_FLAGS)
 
-SA_OBJS=measures.o box2d.o ptarray.o lwgeom_api.o lwgeom.o lwpoint.o lwline.o lwpoly.o lwmpoint.o lwmline.o lwmpoly.o lwcollection.o $(GEOS_WRAPPER) $(JTS_WRAPPER) wktunparse.o lwgparse.o wktparse.tab.o lex.yy.o vsprintf.o
+# Files to be copied to the contrib/ directory
+DATA_built=lwpostgis.sql
+DATA=../spatial_ref_sys.sql
 
-OBJS=$(SA_OBJS) liblwgeom.o lwgeom_pg.o lwgeom_debug.o lwgeom_spheroid.o lwgeom_ogc.o lwgeom_functions_analytic.o $(JTS_OBJ) lwgeom_inout.o lwgeom_estimate.o lwgeom_functions_basic.o lwgeom_gist.o lwgeom_btree.o lwgeom_transform.o stringBuffer.o lwgeom_box.o lwgeom_box3d.o lwgeom_box2dfloat4.o lwgeom_chip.o lwgeom_svg.o lwgeom_gml.o lwgeom_kml.o lwgeom_geojson.o lwgeom_triggers.o lwgeom_dump.o lwgeom_functions_lrs.o long_xact.o lwcurve.o lwcompound.o lwcurvepoly.o lwmcurve.o lwmsurface.o lwgeom_sqlmm.o lwgeom_rtree.o
+# SQL objects (files requiring C pre-processing)
+SQL_OBJS=lwpostgis.sql.in
 
-#OTHERS=y.output lex.yy.c wktparse.tab.c wktparse.tab.h lwpostgis.sql
-OTHERS=y.output postgis_geos_version.h
+# Standalone LWGEOM objects
+SA_OBJS=measures.o \
+	box2d.o \
+	ptarray.o \
+	lwgeom_api.o \
+	lwgeom.o \
+	lwpoint.o \
+	lwline.o \
+	lwpoly.o \
+	lwmpoint.o \
+	lwmline.o \
+	lwmpoly.o \
+	lwcollection.o \
+	lwgeom_geos_c.o \
+	wktunparse.o \
+	lwgparse.o \
+	wktparse.tab.o \
+	lex.yy.o \
+	vsprintf.o	
 
-all: $(GEOS_RULES) ../lwpostgis.sql ../regress/lwpostgis.sql ../lwpostgis_upgrade.sql all-shared-lib 
+# PostgreSQL objects
+PG_OBJS=liblwgeom.o \
+	lwgeom_pg.o \
+	lwgeom_debug.o \
+	lwgeom_spheroid.o \
+	lwgeom_ogc.o \
+	lwgeom_functions_analytic.o \
+	$(JTS_OBJ) \
+	lwgeom_inout.o \
+	lwgeom_estimate.o \
+	lwgeom_functions_basic.o \
+	lwgeom_gist.o \
+	lwgeom_btree.o \
+	lwgeom_transform.o \
+	stringBuffer.o \
+	lwgeom_box.o \
+	lwgeom_box3d.o \
+	lwgeom_box2dfloat4.o \
+	lwgeom_chip.o \
+	lwgeom_svg.o \
+	lwgeom_gml.o \
+	lwgeom_kml.o \
+	lwgeom_geojson.o \
+	lwgeom_triggers.o \
+	lwgeom_dump.o \
+	lwgeom_functions_lrs.o \
+	long_xact.o \
+	lwcurve.o \
+	lwcompound.o \
+	lwcurvepoly.o \
+	lwmcurve.o \
+	lwmsurface.o \
+	lwgeom_sqlmm.o \
+	lwgeom_rtree.o
 
-enable_shared=yes
-include Makefile.shlib
+# Objects to build using PGXS
+OBJS=$(SA_OBJS) $(PG_OBJS)
 
-MODULE_FILENAME = $(LPATH)/lib$(NAME)
-REGRESS_MODULE_FILENAME = $(shell $(PWDREGRESS))/$(shlib)
+# Libraries to link into the module (proj, geos)
+SHLIB_LINK= -L/usr/lib  -lgeos_c -lproj
 
-#---------------------------------------------------------------
-# Makefile targets
+# Extra files to remove during 'make clean'
+EXTRA_CLEAN=$(SQL_OBJS)
 
-wktparse.tab.c: wktparse.y
-	$(YACC) -vd -p lwg_parse_yy wktparse.y
-	mv -f y.tab.c wktparse.tab.c
-	mv -f y.tab.h wktparse.tab.h
+# PGXS information
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
 
 
-lex.yy.c: wktparse.lex wktparse.tab.c
-	$(FLEX) -Plwg_parse_yy -i -f -o'lex.yy.c' wktparse.lex 
+# Generate any .sql.in files from .sql.in.c files by running them through the C pre-processor 
+$(SQL_OBJS): %.in: %.in.c
+	$(CPP) -traditional-cpp $< | grep -v '^#' > $@
 
-lwgeom_jts_wrapper.o: lwgeom_jts_wrapper.cpp
-
-lwgeom_geos_c.o: lwgeom_geos_c.c profile.h
-
-lwgeom_jts.o: lwgeom_jts.c profile.h
-
-lwgeom_nojts.o: lwgeom_nojts.c
-
-lwgeom_functions_basic.o: lwgeom_functions_basic.c profile.h
-
-# Shared library stuff
-
-../lwpostgis_upgrade.sql: ../lwpostgis.sql ../utils/postgis_proc_upgrade.pl
-	$(PERL) ../utils/postgis_proc_upgrade.pl ../lwpostgis.sql > ../lwpostgis_upgrade.sql
-
-../lwpostgis.sql: lwpostgis.sql.in long_xact.sql.in sqlmm.sql.in sqldefines.h 
-	cpp -P -traditional-cpp $(SQL_FLAGS) $< | sed -e 's:@MODULE_FILENAME@:$(MODULE_FILENAME):g;s:@POSTGIS_VERSION@:$(POSTGIS_VERSION):g;s:@POSTGIS_SCRIPTS_VERSION@:$(SCRIPTS_VERSION):g;s/@POSTGIS_BUILD_DATE@/$(POSTGIS_BUILD_DATE)/g' | grep -v '^#' > $@
-
-../regress/lwpostgis.sql: lwpostgis.sql.in long_xact.sql.in sqlmm.sql.in sqldefines.h
-	cpp -P -traditional-cpp $(SQL_FLAGS) $< | sed -e 's#@MODULE_FILENAME@#$(MODULE_FILENAME)#g;s#@POSTGIS_VERSION@#$(POSTGIS_VERSION)#g;s#@POSTGIS_SCRIPTS_VERSION@#$(SCRIPTS_VERSION)#g;s/@POSTGIS_BUILD_DATE@/$(POSTGIS_BUILD_DATE)/g' | grep -v '^#' > $@
-
-install: all install-lib-shared install-lwgeom-scripts
-
-install-lwgeom-scripts:
-	@mkdir -p $(DESTDIR)$(datadir)
-	$(INSTALL_DATA) ../lwpostgis.sql $(DESTDIR)$(datadir)/lwpostgis.sql
-	$(INSTALL_DATA) ../lwpostgis_upgrade.sql $(DESTDIR)$(datadir)/lwpostgis_upgrade.sql
-	$(INSTALL_DATA) ../spatial_ref_sys.sql $(DESTDIR)$(datadir)/spatial_ref_sys.sql
-
-#----------------------------------------------------------
-
-detect_geos_version: 
-	sh ../geos_version.sh $(GEOS_DIR) > postgis_geos_version.h
-
-uninstall-lwgeom-scripts:
-	rm -f $(DESTDIR)$(datadir)/lwpostgis.sql
-	rm -f $(DESTDIR)$(datadir)/lwpostgis_upgrade.sql
-	rm -f $(DESTDIR)$(datadir)/spatial_ref_sys.sql
-
-uninstall: uninstall-lib uninstall-lwgeom-scripts
-
-clean-lwgeom-lib: clean-lib
-
-clean distclean: clean-lwgeom-lib
-	rm -f *.o *.so *.a ../lwpostgis.sql ../lwpostgis_upgrade.sql test $(OTHERS)
-
-maintainer-clean: clean
-	rm  -f lex.yy.c wktparse.tab.c wktparse.tab.h
-
-liblwgeom_sa.o: liblwgeom.c
-	$(CC) -DSTANDALONE -o $@ -c $<
-
-liblwgeom_sa.so: $(SA_OBJS) liblwgeom_sa.o 
-	$(CC) -shared -o $@ $^ 
-
-liblwgeom_sa.a: $(SA_OBJS) liblwgeom_sa.o 
-	$(AR) -rc $@ $^ 
-
-
-test: liblwgeom_sa.so liblwgeom_sa.a test.c
-	$(CC) -Wall -lm -g -o test test.c liblwgeom_sa.a 
-
-tsort:
-	lorder $(SA_OBJS) | tsort

Added: trunk/lwgeom/Makefile.in
===================================================================
--- trunk/lwgeom/Makefile.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/Makefile.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,87 @@
+#
+# PostGIS PGXS build system
+#
+MODULE_big=lwpostgis
+
+
+# Files to be copied to the contrib/ directory
+DATA_built=lwpostgis.sql
+DATA=../spatial_ref_sys.sql
+
+# SQL objects (files requiring C pre-processing)
+SQL_OBJS=lwpostgis.sql.in
+
+# Standalone LWGEOM objects
+SA_OBJS=measures.o \
+	box2d.o \
+	ptarray.o \
+	lwgeom_api.o \
+	lwgeom.o \
+	lwpoint.o \
+	lwline.o \
+	lwpoly.o \
+	lwmpoint.o \
+	lwmline.o \
+	lwmpoly.o \
+	lwcollection.o \
+	lwgeom_geos_c.o \
+	wktunparse.o \
+	lwgparse.o \
+	wktparse.tab.o \
+	lex.yy.o \
+	vsprintf.o	
+
+# PostgreSQL objects
+PG_OBJS=liblwgeom.o \
+	lwgeom_pg.o \
+	lwgeom_debug.o \
+	lwgeom_spheroid.o \
+	lwgeom_ogc.o \
+	lwgeom_functions_analytic.o \
+	$(JTS_OBJ) \
+	lwgeom_inout.o \
+	lwgeom_estimate.o \
+	lwgeom_functions_basic.o \
+	lwgeom_gist.o \
+	lwgeom_btree.o \
+	lwgeom_transform.o \
+	stringBuffer.o \
+	lwgeom_box.o \
+	lwgeom_box3d.o \
+	lwgeom_box2dfloat4.o \
+	lwgeom_chip.o \
+	lwgeom_svg.o \
+	lwgeom_gml.o \
+	lwgeom_kml.o \
+	lwgeom_geojson.o \
+	lwgeom_triggers.o \
+	lwgeom_dump.o \
+	lwgeom_functions_lrs.o \
+	long_xact.o \
+	lwcurve.o \
+	lwcompound.o \
+	lwcurvepoly.o \
+	lwmcurve.o \
+	lwmsurface.o \
+	lwgeom_sqlmm.o \
+	lwgeom_rtree.o
+
+# Objects to build using PGXS
+OBJS=$(SA_OBJS) $(PG_OBJS)
+
+# Libraries to link into the module (proj, geos)
+SHLIB_LINK=@SHLIB_LINK@
+
+# Extra files to remove during 'make clean'
+EXTRA_CLEAN=$(SQL_OBJS)
+
+# PGXS information
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+
+
+# Generate any .sql.in files from .sql.in.c files by running them through the C pre-processor 
+$(SQL_OBJS): %.in: %.in.c
+	$(CPP) -traditional-cpp $< | grep -v '^#' > $@
+

Deleted: trunk/lwgeom/Makefile.shlib
===================================================================
--- trunk/lwgeom/Makefile.shlib	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/Makefile.shlib	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,417 +0,0 @@
-#-------------------------------------------------------------------------
-#
-# Makefile.shlib
-#    Common rules for building shared libraries
-#
-# Copyright (c) 1998, Regents of the University of California
-#
-# IDENTIFICATION
-#    $PostgreSQL: pgsql/src/Makefile.shlib,v 1.90 2004/11/20 21:13:04 tgl Exp $
-#
-#-------------------------------------------------------------------------
-
-# This file should be included by any Postgres module Makefile that
-# wants to build a shared library (if possible for the current
-# platform). A static library is also built from the same object
-# files. Only one library can be built per makefile.
-#
-# Before including this file, the module Makefile must define these
-# variables:
-#
-# NAME                  Name of library to build (no suffix nor "lib" prefix)
-# REL_MAJOR_VERSION      Major version number to use for shared library
-# REL_MINOR_VERSION      Minor version number to use for shared library
-# OBJS                  List of object files to include in library
-# SHLIB_LINK            If shared library relies on other libraries,
-#                       additional stuff to put in its link command
-# (If you want a patchlevel, include it in REL_MINOR_VERSION, e.g., "6.2".)
-#
-# Optional flags when building DLL's (only applicable to win32 and cygwin
-# platforms).
-# DLLTOOL_DEFFLAGS      Additional flags when creating the dll .def file
-# DLLTOOL_LIBFLAGS      Additional flags when creating the lib<module>.a file
-# DLLWRAP_FLAGS         Additional flags to dllwrap
-# DLL_DEFFILE           Use pre-existing .def file instead of auto-generating
-#                       one with all exports in it (win32 only).
-#
-# The module Makefile must also include
-# $(top_builddir)/src/Makefile.global before including this file.
-# (Makefile.global sets PORTNAME and other needed symbols.)
-#
-# This makefile provides the following (phony) targets:
-#
-# all-lib               build the static and shared (if applicable) libraries
-# install-lib           install the libraries into $(libdir)
-# uninstall-lib         remove the libraries from $(libdir)
-# clean-lib             delete the static and shared libraries from the build dir
-#
-# Since `all-lib' is the first rule in this file you probably want to
-# have the `all' target before including this file. In the most simple
-# case it would look like this:
-#
-#     all: all-lib
-#
-# Similarly, the install rule might look like
-#
-#     install: install-lib
-#
-# plus any additional things you want to install. Et cetera.
-#
-# Got that?  Look at src/interfaces/libpq/Makefile for an example.
-#
-# While the linker allows creation of most shared libraries,
-# -Bsymbolic requires resolution of all symbols, making the
-# compiler a better choice for shared library creation on ELF platforms.
-# With the linker, -Bsymbolic requires the crt1.o startup object file.
-# bjm 2001-02-10
-
-
-COMPILER = $(CC) $(CFLAGS)
-LINK.static = $(AR) $(AROPT)
-
-
-
-ifeq ($(enable_shared), yes)
-
-# Default shlib naming convention used by the majority of platforms
-shlib		= lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION).$(REL_MINOR_VERSION)
-shlib_major	= lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION)
-shlib_bare	= lib$(NAME)$(DLSUFFIX)
-
-# For each platform we support shared libraries on, set shlib to the
-# name of the library (if default above is not right), set
-# LINK.shared to the command to link the library,
-# and adjust SHLIB_LINK if necessary.
-
-# Try to keep the sections in some kind of order, folks...
-
-override CFLAGS += $(CFLAGS_SL)
-
-soname = lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION)
-
-ifeq ($(PORTNAME), aix)
-  shlib			= lib$(NAME)$(DLSUFFIX)
-#   SHLIB_LINK		+= -lc
-endif
-
-ifeq ($(PORTNAME), darwin)
-  ifneq ($(REL_MAJOR_VERSION), 0)
-    version_link	:= -compatibility_version $(REL_MAJOR_VERSION) -current_version $(REL_MAJOR_VERSION).$(REL_MINOR_VERSION)
-  endif
-  ifeq ($(DLTYPE), library)
-    # linkable library
-    DLSUFFIX		:= .dylib
-    LINK.shared		= $(COMPILER) -dynamiclib -install_name $(libdir)/lib$(NAME).$(REL_MAJOR_VERSION)$(DLSUFFIX) $(version_link) -multiply_defined suppress
-  else
-    # loadable module (default case)
-    DLSUFFIX		:= .so
-    LINK.shared		= $(COMPILER) -bundle
-  endif
-  shlib			= lib$(NAME).$(REL_MAJOR_VERSION).$(REL_MINOR_VERSION)$(DLSUFFIX)
-  shlib_major		= lib$(NAME).$(REL_MAJOR_VERSION)$(DLSUFFIX)
-endif
-
-ifeq ($(PORTNAME), openbsd)
-  ifdef ELF_SYSTEM
-    LINK.shared		= $(COMPILER) -shared -Wl,-x,-soname,$(soname)
-    SHLIB_LINK		+= -lc
-  else
-    LINK.shared		= $(LD) -x -Bshareable -Bforcearchive
-  endif
-endif
-
-ifeq ($(PORTNAME), bsdi)
-  ifeq ($(DLSUFFIX), .so)
-    LINK.shared		= $(COMPILER) -shared -Wl,-x,-soname,$(soname)
-    SHLIB_LINK		+= -lc
-  endif
-  ifeq ($(DLSUFFIX), .o)
-    LINK.shared		= shlicc -O $(LDREL)
-  endif
-endif
-
-ifeq ($(PORTNAME), freebsd)
-  ifdef ELF_SYSTEM
-    shlib		= lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION)
-    LINK.shared		= $(COMPILER) -shared -Wl,-x,-soname,$(soname)
-  else
-    shlib		= lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION).$(REL_MINOR_VERSION)
-    LINK.shared		= $(LD) -x -Bshareable -Bforcearchive
-  endif
-endif
-
-ifeq ($(PORTNAME), netbsd)
-  ifdef ELF_SYSTEM
-    LINK.shared		= $(COMPILER) -shared -Wl,-x,-soname,$(soname)
-  else
-    LINK.shared		= $(LD) -x -Bshareable -Bforcearchive
-  endif
-endif
-
-ifeq ($(PORTNAME), hpux)
-  shlib			= lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION)
-  ifeq ($(GCC), yes)
-    SHLIB_LINK		+= `$(CC) $(LDFLAGS) -print-libgcc-file-name`
-  endif
-  ifeq ($(with_gnu_ld), yes)
-    LINK.shared		= $(CC) $(LDFLAGS) -shared -Wl,-h -Wl,$(soname)
-  else
-    # can't use the CC-syntax rpath pattern here
-    rpath =
-    ifeq ($(enable_rpath), yes)
-      LINK.shared	= $(LD) +h $(soname) -b +b $(rpathdir)
-    else
-      LINK.shared	= $(LD) +h $(soname) -b
-    endif
-  endif
-endif
-
-ifeq ($(PORTNAME), irix)
-  shlib			= lib$(NAME)$(DLSUFFIX).$(REL_MAJOR_VERSION)
-  LINK.shared		= $(COMPILER) -shared -Wl,-set_version,sgi$(REL_MAJOR_VERSION).$(REL_MINOR_VERSION)
-endif
-
-ifeq ($(PORTNAME), linux)
-  LINK.shared		= $(COMPILER) -shared -Wl,-soname,$(soname)
-endif
-
-ifeq ($(PORTNAME), solaris)
-  ifeq ($(GCC), yes)
-    LINK.shared		= $(CC) -shared
-  else
-    LINK.shared		= $(CC) -G
-  endif
-  ifeq ($(with_gnu_ld), yes)
-    LINK.shared		+= -Wl,-soname,$(soname)
-  else
-    LINK.shared		+= -h $(soname)
-  endif
-endif
-
-ifeq ($(PORTNAME), sunos4)
-  LINK.shared		= $(LD) -assert pure-text -Bdynamic
-endif
- 
-ifeq ($(PORTNAME), osf)
-  LINK.shared		= $(LD) -shared -expect_unresolved '*'
-endif
-
-ifeq ($(PORTNAME), sco)
-  ifeq ($(GCC), yes)
-    LINK.shared		= $(CC) -shared
-  else
-    LINK.shared		= $(CC) -G
-    endif
-  LINK.shared		+= -Wl,-z,text -Wl,-h,$(soname)
-endif
-
-ifeq ($(PORTNAME), svr4)
-  LINK.shared		= $(LD) -G
-endif
-
-ifeq ($(PORTNAME), univel)
-  LINK.shared		= $(LD) -G -z text
-endif
-
-ifeq ($(PORTNAME), unixware)
-  ifeq ($(GCC), yes)
-    LINK.shared		= $(CC) -shared
-  else
-    LINK.shared		= $(CC) -G
-  endif
-  LINK.shared		+= -Wl,-z,text -Wl,-h,$(soname) 
-endif
-
-ifeq ($(PORTNAME), cygwin)
-  shlib			= $(NAME)$(DLSUFFIX)
-  # needed for /contrib modules, not sure why
-  SHLIB_LINK		+= $(LIBS)
-  haslibarule   = yes
-endif
-
-ifeq ($(PORTNAME), win32)
-  shlib			= lib$(NAME)$(DLSUFFIX)
-  haslibarule   = yes
-endif
-
-ifeq ($(PORTNAME), beos)
-  shlib			= lib$(NAME)$(DLSUFFIX)
-  LINK.shared		= $(LD) -nostart
-  SHLIB_LINK		+= -ltermcap -lstdc++.r4 -lbind -lsocket -L/boot/develop/lib/x86
-endif
-
-SHLIB_LINK := $(filter -L%, $(LDFLAGS)) $(SHLIB_LINK)
-ifeq ($(enable_rpath), yes)
-SHLIB_LINK += $(rpath)
-endif
-
-endif # enable_shared
-
-
-
-##
-## BUILD
-##
-
-.PHONY: all-lib all-static-lib all-shared-lib
-
-all-lib: all-static-lib all-shared-lib
-
-all-static-lib: lib$(NAME).a
-
-all-shared-lib: $(shlib)
-
-ifndef LORDER
-MK_NO_LORDER := true
-endif
-
-ifndef haslibarule
-lib$(NAME).a: $(OBJS)
-ifdef MK_NO_LORDER
-	$(LINK.static) $@ $^
-else
-	$(LINK.static) $@ `$(LORDER) $^ | tsort`
-endif
-	$(RANLIB) $@
-endif #haslibarule
-
-ifeq ($(enable_shared), yes)
-
-ifneq ($(PORTNAME), win32)
-ifneq ($(PORTNAME), cygwin)
-ifneq ($(PORTNAME), beos)
-ifneq ($(PORTNAME), aix)
-
-# Normal case
-$(shlib): $(OBJS)
-	$(LINK.shared) $(LDFLAGS_SL) $(OBJS) $(SHLIB_LINK) -o $@
-# If we're using major and minor versions, then make a symlink to major-version-only.
-ifneq ($(shlib), $(shlib_major))
-	rm -f $(shlib_major)
-	$(LN_S) $(shlib) $(shlib_major)
-endif
-# Make sure we have a link to a name without any version numbers
-ifneq ($(shlib), $(shlib_bare))
-	rm -f $(shlib_bare)
-	$(LN_S) $(shlib) $(shlib_bare)
-endif
-
-else # PORTNAME == aix
-
-# AIX case
-$(shlib): lib$(NAME).a
-	$(MKLDEXPORT) lib$(NAME).a > lib$(NAME)$(EXPSUFF)
-	$(COMPILER) $(LDFLAGS_SL) -o $@ $< $(LDFLAGS) $(SHLIB_LINK) -Wl,-bI:$(top_builddir)/src/backend/$(POSTGRES_IMP) -Wl,-bE:lib$(NAME)$(EXPSUFF)
-	
-endif # PORTNAME == aix
-
-else # PORTNAME == beos
-
-# BEOS case
-$(shlib): $(OBJS)
-	ln -fs $(top_srcdir)/src/backend/postgres _APP_
-	$(CC) -Xlinker -soname=$@ $(LDFLAGS_SL) -o $@ _APP_ $(OBJS) $(SHLIB_LINK)
-
-endif # PORTNAME == beos
-
-else # PORTNAME == cygwin
-
-# Cygwin case
-$(shlib) lib$(NAME).a: $(OBJS)
-ifndef DLL_DEFFILE
-	$(DLLTOOL) --export-all $(DLLTOOL_DEFFLAGS) --output-def $(NAME).def $(OBJS)
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(NAME).def $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(NAME).def --output-lib lib$(NAME).a
-else
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(DLL_DEFFILE) --output-lib lib$(NAME).a
-endif
-
-endif # PORTNAME == cygwin
-
-else # PORTNAME == win32
-
-# win32 case
-$(shlib) lib$(NAME).a: $(OBJS)
-ifndef DLL_DEFFILE
-	$(DLLTOOL) --export-all $(DLLTOOL_DEFFLAGS) --output-def $(NAME).def $(OBJS)
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(NAME).def $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(NAME).def --output-lib lib$(NAME).a
-else
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(DLL_DEFFILE) --output-lib lib$(NAME).a
-endif
-
-endif # PORTNAME == win32
-
-endif # enable_shared
-
-
-##
-## INSTALL
-##
-
-.PHONY: install-lib install-lib-static install-lib-shared
-install-lib: install-lib-static install-lib-shared
-
-install-lib-static: lib$(NAME).a
-	$(INSTALL_STLIB) $< $(DESTDIR)$(libdir)/lib$(NAME).a
-ifeq ($(PORTNAME), darwin)
-	cd $(DESTDIR)$(libdir) && \
-	ranlib lib$(NAME).a
-endif
-
-ifeq ($(enable_shared), yes)
-install-lib-shared: $(shlib)
-	$(INSTALL_SHLIB) $< $(DESTDIR)$(libdir)/$(shlib)
-ifneq ($(PORTNAME), cygwin)
-ifneq ($(PORTNAME), win32)
-ifneq ($(shlib), $(shlib_major))
-	cd $(DESTDIR)$(libdir) && \
-	rm -f $(shlib_major) && \
-	$(LN_S) $(shlib) $(shlib_major)
-endif
-ifneq ($(shlib), $(shlib_bare))
-	cd $(DESTDIR)$(libdir) && \
-	rm -f $(shlib_bare) && \
-	$(LN_S) $(shlib) $(shlib_bare)
-endif
-endif # not win32
-endif # not cygwin
-endif # enable_shared
-
-
-##
-## UNINSTALL
-##
-
-.PHONY: uninstall-lib
-uninstall-lib:
-	rm -f $(DESTDIR)$(libdir)/lib$(NAME).a
-ifeq ($(enable_shared), yes)
-	rm -f $(DESTDIR)$(libdir)/$(shlib_bare) \
-	  $(DESTDIR)$(libdir)/$(shlib_major) \
-	  $(DESTDIR)$(libdir)/$(shlib)
-endif # enable_shared
-
-
-##
-## CLEAN
-##
-
-.PHONY: clean-lib
-clean-lib:
-	rm -f lib$(NAME).a
-ifeq ($(enable_shared), yes)
-	rm -f $(shlib_bare) $(shlib_major) $(shlib)
-ifdef EXPSUFF
-	rm -f lib$(NAME)$(EXPSUFF)
-endif
-endif
-ifeq ($(PORTNAME), cygwin)
-	rm -f $(NAME).dll $(NAME).def
-endif
-
-ifeq ($(PORTNAME), win32)
-	rm -f $(NAME).dll $(NAME).def
-endif

Modified: trunk/lwgeom/liblwgeom.c
===================================================================
--- trunk/lwgeom/liblwgeom.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/liblwgeom.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -15,6 +15,8 @@
 #endif
 
 /* Global variables */
+#include "../postgis_config.h"
+
 #if DEFAULT_CONTEXT == CONTEXT_SA
 #include "liblwgeom.h"
 lwallocator lwalloc_var = default_allocator;

Modified: trunk/lwgeom/liblwgeom.h
===================================================================
--- trunk/lwgeom/liblwgeom.h	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/liblwgeom.h	2008-05-14 17:10:19 UTC (rev 2774)
@@ -34,8 +34,10 @@
 typedef void (*lwreporter)(const char* fmt, ...);
 
 #ifndef C_H
+
 typedef unsigned int uint32;
 typedef int int32;
+
 #endif
 
 /*

Modified: trunk/lwgeom/long_xact.sql.in
===================================================================
--- trunk/lwgeom/long_xact.sql.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/long_xact.sql.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -211,12 +211,12 @@
 
 CREATEFUNCTION CheckAuthTrigger()
 	RETURNS trigger AS 
-	'@MODULE_FILENAME@', 'check_authorization'
+	'MODULE_PATHNAME', 'check_authorization'
 	LANGUAGE C;
 
 CREATEFUNCTION GetTransactionID()
 	RETURNS xid AS 
-	'@MODULE_FILENAME@', 'getTransactionID'
+	'MODULE_PATHNAME', 'getTransactionID'
 	LANGUAGE C;
 
 

Modified: trunk/lwgeom/lwgeom_btree.c
===================================================================
--- trunk/lwgeom/lwgeom_btree.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_btree.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -29,10 +29,10 @@
 
 /* #define PGIS_DEBUG */
 
-#if USE_VERSION == 72
+#if POSTGIS_PGSQL_VERSION == 72
 #define BTREE_SRID_MISMATCH_SEVERITY NOTICE
 #else
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 #define BTREE_SRID_MISMATCH_SEVERITY WARNING
 #else
 #define BTREE_SRID_MISMATCH_SEVERITY ERROR

Modified: trunk/lwgeom/lwgeom_dump.c
===================================================================
--- trunk/lwgeom/lwgeom_dump.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_dump.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,7 +1,9 @@
+#include "../postgis_config.h"
+
 /*
  * This only works for PGSQL > 72 
  */
-#if USE_VERSION > 72
+#if POSTGIS_PGSQL_VERSION > 72
 
 #include <math.h>
 #include <float.h>
@@ -307,4 +309,4 @@
 }
 
 
-#endif /* USE_VERSION > 72 */
+#endif /* POSTGIS_PGSQL_VERSION > 72 */

Modified: trunk/lwgeom/lwgeom_estimate.c
===================================================================
--- trunk/lwgeom/lwgeom_estimate.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_estimate.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -29,7 +29,7 @@
 /*#define DEBUG_GEOMETRY_STATS 1*/
 
 
-#if USE_VERSION >= 80
+#if POSTGIS_PGSQL_VERSION >= 80
 
 #include "commands/vacuum.h"
 #include "utils/lsyscache.h"
@@ -82,7 +82,7 @@
 
 static float8 estimate_selectivity(BOX2DFLOAT4 *box, GEOM_STATS *geomstats);
 
-#endif /* USE_VERSION >= 80 */
+#endif /* POSTGIS_PGSQL_VERSION >= 80 */
 
 #define SHOW_DIGS_DOUBLE 15
 #define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 6 + 1 + 3 +1)
@@ -136,7 +136,7 @@
 Datum LWGEOM_gist_sel(PG_FUNCTION_ARGS);
 Datum LWGEOM_gist_joinsel(PG_FUNCTION_ARGS);
 Datum LWGEOM_estimated_extent(PG_FUNCTION_ARGS);
-#if USE_VERSION >= 80
+#if POSTGIS_PGSQL_VERSION >= 80
 Datum LWGEOM_analyze(PG_FUNCTION_ARGS);
 #endif
 
@@ -405,7 +405,7 @@
 		PG_RETURN_NULL() ;
 	}
 
-#if USE_VERSION >= 80
+#if POSTGIS_PGSQL_VERSION >= 80
 	SPIportal = SPI_cursor_open(NULL, SPIplan, NULL, NULL, 1);
 #else
 	SPIportal = SPI_cursor_open(NULL, SPIplan, NULL, NULL);
@@ -765,7 +765,7 @@
 }
 
 
-#if ! REALLY_DO_JOINSEL || USE_VERSION < 80
+#if ! REALLY_DO_JOINSEL || POSTGIS_PGSQL_VERSION < 80
 /*
  * JOIN selectivity in the GiST && operator
  * for all PG versions
@@ -780,7 +780,7 @@
 	PG_RETURN_FLOAT8(DEFAULT_GEOMETRY_JOINSEL);
 }
 
-#else /* REALLY_DO_JOINSEL && USE_VERSION >= 80 */
+#else /* REALLY_DO_JOINSEL && POSTGIS_PGSQL_VERSION >= 80 */
 
 int calculate_column_intersection(BOX2DFLOAT4 *search_box, GEOM_STATS *geomstats1, GEOM_STATS *geomstats2);
 
@@ -817,7 +817,7 @@
 PG_FUNCTION_INFO_V1(LWGEOM_gist_joinsel);
 Datum LWGEOM_gist_joinsel(PG_FUNCTION_ARGS)
 {
-#if USE_VERSION < 81
+#if POSTGIS_PGSQL_VERSION < 81
 	Query *root = (Query *) PG_GETARG_POINTER(0);
 #else
 	PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0);
@@ -881,7 +881,7 @@
 
 	var1 = (Var *)arg1;
 	var2 = (Var *)arg2;
-#if USE_VERSION < 81
+#if POSTGIS_PGSQL_VERSION < 81
 	relid1 = getrelid(var1->varno, root->rtable);
 	relid2 = getrelid(var2->varno, root->rtable);
 #else
@@ -1052,7 +1052,7 @@
 /**************************** FROM POSTGIS ****************/
 
 
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 /*
  * get_restriction_var
  *		Examine the args of a restriction clause to see if it's of the
@@ -1139,7 +1139,7 @@
 
 	double myest;
 
-#ifndef USE_STATS
+#ifndef POSTGIS_USE_STATS
 	PG_RETURN_FLOAT8(DEFAULT_GEOMETRY_SEL);
 #endif
 
@@ -1432,7 +1432,7 @@
 	PG_RETURN_POINTER(box);
 }
 
-#else /* USE_VERSION >= 80 */
+#else /* POSTGIS_PGSQL_VERSION >= 80 */
 
 /*
  * This function returns an estimate of the selectivity
@@ -1693,7 +1693,7 @@
 PG_FUNCTION_INFO_V1(LWGEOM_gist_sel);
 Datum LWGEOM_gist_sel(PG_FUNCTION_ARGS)
 {
-#if USE_VERSION < 81
+#if POSTGIS_PGSQL_VERSION < 81
 	Query *root = (Query *) PG_GETARG_POINTER(0);
 #else
 	PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0);
@@ -1788,7 +1788,7 @@
 	 * Get pg_statistic row
 	 */
 
-#if USE_VERSION < 81
+#if POSTGIS_PGSQL_VERSION < 81
 /*	relid = getrelid(varRelid, root->rtable); */
 	relid = getrelid(self->varno, root->rtable);
 #else
@@ -2626,7 +2626,7 @@
 }
 	
 
-#endif /* USE_VERSION >= 80 */
+#endif /* POSTGIS_PGSQL_VERSION >= 80 */
 
 
 /**********************************************************************

Modified: trunk/lwgeom/lwgeom_functions_basic.c
===================================================================
--- trunk/lwgeom/lwgeom_functions_basic.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_functions_basic.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -180,7 +180,7 @@
 PG_FUNCTION_INFO_V1(postgis_autocache_bbox);
 Datum postgis_autocache_bbox(PG_FUNCTION_ARGS)
 {
-#ifdef AUTOCACHE_BBOX
+#ifdef POSTGIS_AUTOCACHE_BBOX
 	PG_RETURN_BOOL(TRUE);
 #else
 	PG_RETURN_BOOL(FALSE);
@@ -1858,13 +1858,13 @@
 	Datum datum;
 	PG_LWGEOM *geom;
 	ArrayType *result;
-#if USE_VERSION > 72
-# if USE_VERSION == 73
+#if POSTGIS_PGSQL_VERSION > 72
+# if POSTGIS_PGSQL_VERSION == 73
 	Oid oid = getGeometryOID();
-# else  /* USE_VERSION > 73 */
+# else  /* POSTGIS_PGSQL_VERSION > 73 */
 	Oid oid = get_fn_expr_argtype(fcinfo->flinfo, 1);
-# endif /* USE_VERSION > 73 */
-#endif /* USE_VERSION > 72 */
+# endif /* POSTGIS_PGSQL_VERSION > 73 */
+#endif /* POSTGIS_PGSQL_VERSION > 72 */
 
 
 #ifdef PGIS_DEBUG
@@ -1926,10 +1926,10 @@
 		SET_VARSIZE(result, nbytes);
 		result->ndim = 1;
 
-#if USE_VERSION > 72
+#if POSTGIS_PGSQL_VERSION > 72
 		result->elemtype = oid;
 #endif
-#if USE_VERSION > 81
+#if POSTGIS_PGSQL_VERSION > 81
 		result->dataoffset = 0;
 #endif
 		memcpy(ARR_DIMS(result), &nelems, sizeof(int));

Modified: trunk/lwgeom/lwgeom_geos_c.c
===================================================================
--- trunk/lwgeom/lwgeom_geos_c.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_geos_c.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,3 +1,5 @@
+#include "../postgis_config.h"
+
 #include "postgres.h"
 #include "utils/array.h"
 #include "utils/builtins.h"
@@ -3,5 +5,4 @@
 #include "fmgr.h"
 
-
 #include "lwgeom_pg.h"
 #include "liblwgeom.h"
@@ -752,7 +753,7 @@
 
 }
 
-#if GEOS_VERNUM >= 30 
+#if POSTGIS_GEOS_VERSION >= 30 
 
 PG_FUNCTION_INFO_V1(topologypreservesimplify);
 Datum topologypreservesimplify(PG_FUNCTION_ARGS)

Modified: trunk/lwgeom/lwgeom_gist.c
===================================================================
--- trunk/lwgeom/lwgeom_gist.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_gist.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -4,16 +4,19 @@
 #include <stdio.h>
 #include <errno.h>
 
+#include "../postgis_config.h"
+
 #include "postgres.h"
 #include "access/gist.h"
 #include "access/itup.h"
-#if USE_VERSION > 80
+#if POSTGIS_PGSQL_VERSION > 80
 #include "access/skey.h"
 #endif
 #include "fmgr.h"
 #include "utils/elog.h"
 
 #include "liblwgeom.h"
+
 #include "lwgeom_pg.h"
 #include "stringBuffer.h"
 
@@ -542,7 +545,7 @@
 			if (in != (PG_LWGEOM*)DatumGetPointer(entry->key))
 				pfree(in);  /* PG_FREE_IF_COPY */
 
-#if USE_VERSION >= 82
+#if POSTGIS_PGSQL_VERSION >= 82
 			gistentryinit(*retval, PointerGetDatum(rr),
 				entry->rel, entry->page,
 				entry->offset,
@@ -562,7 +565,7 @@
 		elog(NOTICE,"GIST: LWGEOM_gist_compress got a NULL key");
 #endif
 
-#if USE_VERSION >= 82
+#if POSTGIS_PGSQL_VERSION >= 82
 			gistentryinit(*retval, (Datum) 0, entry->rel,
 				entry->page, entry->offset, FALSE);
 #else
@@ -807,7 +810,7 @@
 PG_FUNCTION_INFO_V1(LWGEOM_gist_union);
 Datum LWGEOM_gist_union(PG_FUNCTION_ARGS)
 {
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 	bytea *entryvec = (bytea *) PG_GETARG_POINTER(0);
 #else
  	GistEntryVector	*entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
@@ -822,7 +825,7 @@
 	elog(NOTICE,"GIST: LWGEOM_gist_union called\n");
 #endif
 
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 	numranges = (VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY);
 	cur = (BOX2DFLOAT4 *) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[0].key);
 #else
@@ -837,7 +840,7 @@
 
 	for (i = 1; i < numranges; i++)
 	{
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 		cur = (BOX2DFLOAT4*) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[i].key);
 #else
 		cur = (BOX2DFLOAT4*) DatumGetPointer(entryvec->vector[i].key);
@@ -1030,7 +1033,7 @@
 PG_FUNCTION_INFO_V1(LWGEOM_gist_picksplit);
 Datum LWGEOM_gist_picksplit(PG_FUNCTION_ARGS)
 {
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 	bytea *entryvec = (bytea *) PG_GETARG_POINTER(0);
 #else
   	GistEntryVector	*entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
@@ -1053,7 +1056,7 @@
 
 	posL = posR = posB = posT = 0;
 
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 	maxoff = ((VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY)) - 1;
 	cur = (BOX2DFLOAT4*) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[FirstOffsetNumber].key);
 #else
@@ -1071,7 +1074,7 @@
 	/* find MBR */
 	for (i = OffsetNumberNext(FirstOffsetNumber); i <= maxoff; i = OffsetNumberNext(i))
 	{
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 		cur = (BOX2DFLOAT4*) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[i].key);
 #else
   		cur = (BOX2DFLOAT4 *) DatumGetPointer(entryvec->vector[i].key);
@@ -1111,7 +1114,7 @@
 #ifdef PGIS_DEBUG_GIST6
 elog(NOTICE," AllIsEqual!");
 #endif
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 		cur = (BOX2DFLOAT4*) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[OffsetNumberNext(FirstOffsetNumber)].key);
 #else
   		cur = (BOX2DFLOAT4*) DatumGetPointer(entryvec->vector[OffsetNumberNext(FirstOffsetNumber)].key);
@@ -1167,7 +1170,7 @@
 
 	for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
 	{
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 		cur = (BOX2DFLOAT4*) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[i].key);
 #else
   		cur = (BOX2DFLOAT4*) DatumGetPointer(entryvec->vector[i].key);
@@ -1196,7 +1199,7 @@
 		KBsort *arr = (KBsort*)palloc( sizeof(KBsort) * maxoff );
 		posL = posR = posB = posT = 0;
 		for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) {
-#if USE_VERSION < 80
+#if POSTGIS_PGSQL_VERSION < 80
 			arr[i-1].key = (BOX2DFLOAT4*) DatumGetPointer(((GISTENTRY *) VARDATA(entryvec))[i].key);
 #else
   			arr[i-1].key = (BOX2DFLOAT4*) DatumGetPointer(entryvec->vector[i].key);

Modified: trunk/lwgeom/lwgeom_inout.c
===================================================================
--- trunk/lwgeom/lwgeom_inout.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_inout.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,3 +1,5 @@
+#include "../postgis_config.h"
+
 #include "postgres.h"
 
 #include <math.h>
@@ -13,7 +15,7 @@
 
 #include "fmgr.h"
 #include "utils/elog.h"
-#if USE_VERSION > 73
+#if POSTGIS_PGSQL_VERSION > 73
 # include "lib/stringinfo.h" /* for binary input */
 #endif
 
@@ -37,7 +39,7 @@
 Datum LWGEOM_to_bytea(PG_FUNCTION_ARGS);
 Datum LWGEOM_from_bytea(PG_FUNCTION_ARGS);
 Datum parse_WKT_lwgeom(PG_FUNCTION_ARGS);
-#if USE_VERSION > 73
+#if POSTGIS_PGSQL_VERSION > 73
 Datum LWGEOM_recv(PG_FUNCTION_ARGS);
 Datum LWGEOM_send(PG_FUNCTION_ARGS);
 #endif
@@ -404,7 +406,7 @@
 char
 is_worth_caching_pglwgeom_bbox(const PG_LWGEOM *in)
 {
-#if ! AUTOCACHE_BBOX
+#if ! POSTGIS_AUTOCACHE_BBOX
 	return false;
 #endif
 	if ( TYPE_GETTYPE(in->type) == POINTTYPE ) return false;
@@ -414,7 +416,7 @@
 char
 is_worth_caching_serialized_bbox(const uchar *in)
 {
-#if ! AUTOCACHE_BBOX
+#if ! POSTGIS_AUTOCACHE_BBOX
 	return false;
 #endif
 	if ( TYPE_GETTYPE((uchar)in[0]) == POINTTYPE ) return false;
@@ -424,7 +426,7 @@
 char
 is_worth_caching_lwgeom_bbox(const LWGEOM *in)
 {
-#if ! AUTOCACHE_BBOX
+#if ! POSTGIS_AUTOCACHE_BBOX
 	return false;
 #endif
 	if ( TYPE_GETTYPE(in->type) == POINTTYPE ) return false;
@@ -537,7 +539,7 @@
 }
 
 
-#if USE_VERSION > 73
+#if POSTGIS_PGSQL_VERSION > 73
 /*
  * This function must advance the StringInfo.cursor pointer
  * and leave it at the end of StringInfo.buf. If it fails
@@ -604,7 +606,7 @@
 }
 
 
-#endif /* USE_VERSION > 73 */
+#endif /* POSTGIS_PGSQL_VERSION > 73 */
 
 PG_FUNCTION_INFO_V1(LWGEOM_to_bytea);
 Datum LWGEOM_to_bytea(PG_FUNCTION_ARGS)

Modified: trunk/lwgeom/lwgeom_pg.c
===================================================================
--- trunk/lwgeom/lwgeom_pg.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_pg.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,3 +1,5 @@
+#include "../postgis_config.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -114,7 +116,7 @@
 	size_t size;
 	PG_LWGEOM *result;
 
-#if AUTOCACHE_BBOX
+#if POSTGIS_AUTOCACHE_BBOX
 	if ( ! in->bbox && is_worth_caching_lwgeom_bbox(in) )
 	{
 		lwgeom_addBBOX(in);

Modified: trunk/lwgeom/lwgeom_pg.h
===================================================================
--- trunk/lwgeom/lwgeom_pg.h	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_pg.h	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,6 +1,7 @@
 #ifndef _LWGEOM_PG_H
 #define _LWGEOM_PG_H 1
 
+#include "../postgis_config.h"
 #include "postgres.h"
 #include "utils/geo_decls.h"
 #include "fmgr.h"
@@ -11,7 +12,7 @@
 #define PG_NARGS() (fcinfo->nargs)
 #endif
 
-#if USE_VERSION < 82 
+#if POSTGIS_PGSQL_VERSION < 82 
 #define ARR_OVERHEAD_NONULLS(x) ARR_OVERHEAD((x))
 #endif
 

Modified: trunk/lwgeom/lwgeom_transform.c
===================================================================
--- trunk/lwgeom/lwgeom_transform.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwgeom_transform.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -28,8 +28,8 @@
 Datum transform_geom(PG_FUNCTION_ARGS);
 Datum postgis_proj_version(PG_FUNCTION_ARGS);
 
-/* if USE_PROJECTION undefined, we get a do-nothing transform() function */
-#ifndef USE_PROJ
+/* if POSTGIS_PROJ_VERSION undefined, we get a do-nothing transform() function */
+#ifndef POSTGIS_PROJ_VERSION 
 
 PG_FUNCTION_INFO_V1(transform);
 Datum transform(PG_FUNCTION_ARGS)
@@ -53,7 +53,7 @@
 	PG_RETURN_NULL();
 }
 
-#else /* defined USE_PROJ  */
+#else /* defined POSTGIS_PROJ_VERSION  */
 
 #include "projects.h"
 #include "utils/memutils.h"
@@ -122,13 +122,13 @@
 
 
 /* PJ Hash API */
-#if USE_VERSION == 72
+#if POSTGIS_PGSQL_VERSION == 72
 long mcxt_ptr_hash(void *key, int keysize);
 #endif
-#if USE_VERSION == 73
+#if POSTGIS_PGSQL_VERSION == 73
 uint32 mcxt_ptr_hash(void *key, int keysize);
 #endif
-#if USE_VERSION > 73
+#if POSTGIS_PGSQL_VERSION > 73
 uint32 mcxt_ptr_hash(const void *key, Size keysize);
 #endif
 
@@ -159,7 +159,7 @@
 
 
 /* Memory context definition must match the current version of PostgreSQL */
-#if USE_VERSION == 72
+#if POSTGIS_PGSQL_VERSION == 72
 static MemoryContextMethods PROJ4SRSCacheContextMethods = {
 	NULL,
 	NULL,
@@ -174,7 +174,7 @@
 };
 #endif
 
-#if USE_VERSION == 73 || USE_VERSION == 74
+#if POSTGIS_PGSQL_VERSION == 73 || POSTGIS_PGSQL_VERSION == 74
 static MemoryContextMethods PROJ4SRSCacheContextMethods = {
 	NULL,
 	NULL,
@@ -190,7 +190,7 @@
 };
 #endif
  
-#if USE_VERSION >= 80
+#if POSTGIS_PGSQL_VERSION >= 80
 static MemoryContextMethods PROJ4SRSCacheContextMethods = {
 	NULL,
 	NULL,
@@ -291,13 +291,13 @@
  * has changed over the years....
  */
 
-#if USE_VERSION == 72
+#if POSTGIS_PGSQL_VERSION == 72
 long mcxt_ptr_hash(void *key, int keysize)
 #endif
-#if USE_VERSION == 73
+#if POSTGIS_PGSQL_VERSION == 73
 uint32 mcxt_ptr_hash(void *key, int keysize)
 #endif
-#if USE_VERSION > 73
+#if POSTGIS_PGSQL_VERSION > 73
 uint32 mcxt_ptr_hash(const void *key, Size keysize)
 #endif
 {
@@ -582,7 +582,7 @@
  */
 void SetPROJ4LibPath()
 {
-#if USE_VERSION >= 80
+#if POSTGIS_PGSQL_VERSION >= 80
 	char *path;
 	const char **proj_lib_path;
 

Deleted: trunk/lwgeom/lwpostgis.sql.in
===================================================================
--- trunk/lwgeom/lwpostgis.sql.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwpostgis.sql.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,6343 +0,0 @@
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- 
--- $Id$
---
--- PostGIS - Spatial Types for PostgreSQL
--- http://postgis.refractions.net
--- Copyright 2001-2003 Refractions Research Inc.
---
--- This is free software; you can redistribute and/or modify it under
--- the terms of the GNU General Public Licence. See the COPYING file.
---  
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
---
--- WARNING: Any change in this file must be evaluated for compatibility.
---          Changes cleanly handled by lwpostgis_uptrade.sql are fine,
---	    other changes will require a bump in Major version.
---	    Currently only function replaceble by CREATE OR REPLACE
---	    are cleanly handled.
---
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-#include "sqldefines.h"
-
-BEGIN;
-
--------------------------------------------------------------------
---  HISTOGRAM2D TYPE (lwhistogram2d)
--------------------------------------------------------------------
-
-#if USE_VERSION < 73
-# define HISTOGRAM_IN_REP opaque
-# define HISTOGRAM_OUT_REP opaque
-#else
-# define HISTOGRAM_IN_REP histogram2d
-# define HISTOGRAM_OUT_REP cstring
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION histogram2d_in(HISTOGRAM_OUT_REP)
-	RETURNS HISTOGRAM_IN_REP
-	AS '@MODULE_FILENAME@', 'lwhistogram2d_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_histogram2d_in(HISTOGRAM_OUT_REP)
-	RETURNS HISTOGRAM_IN_REP
-	AS '@MODULE_FILENAME@', 'lwhistogram2d_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION histogram2d_out(HISTOGRAM_IN_REP)
-	RETURNS HISTOGRAM_OUT_REP
-	AS '@MODULE_FILENAME@', 'lwhistogram2d_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_histogram2d_out(HISTOGRAM_IN_REP)
-	RETURNS HISTOGRAM_OUT_REP
-	AS '@MODULE_FILENAME@', 'lwhistogram2d_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE histogram2d (
-	alignment = double,
-	internallength = variable,
-	input = ST_histogram2d_in,
-	output = ST_histogram2d_out,
-	storage = main
-);
-
--------------------------------------------------------------------
---  SPHEROID TYPE
--------------------------------------------------------------------
-
-#if USE_VERSION < 73
-# define SPHEROID_IN_REP opaque
-# define SPHEROID_OUT_REP opaque
-#else
-# define SPHEROID_IN_REP spheroid
-# define SPHEROID_OUT_REP cstring
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION spheroid_in(SPHEROID_OUT_REP)
-	RETURNS SPHEROID_IN_REP
-	AS '@MODULE_FILENAME@','ellipsoid_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_spheroid_in(SPHEROID_OUT_REP)
-	RETURNS SPHEROID_IN_REP
-	AS '@MODULE_FILENAME@','ellipsoid_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION spheroid_out(SPHEROID_IN_REP)
-	RETURNS SPHEROID_OUT_REP
-	AS '@MODULE_FILENAME@','ellipsoid_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_spheroid_out(SPHEROID_IN_REP)
-	RETURNS SPHEROID_OUT_REP
-	AS '@MODULE_FILENAME@','ellipsoid_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE spheroid (
-	alignment = double,
-	internallength = 65,
-	input = ST_spheroid_in,
-	output = ST_spheroid_out
-);
-
--------------------------------------------------------------------
---  GEOMETRY TYPE (lwgeom)
--------------------------------------------------------------------
-
-#if USE_VERSION < 73
-# define GEOMETRY_IN_REP opaque
-# define GEOMETRY_OUT_REP opaque
-#else
-# define GEOMETRY_IN_REP geometry
-# define GEOMETRY_OUT_REP cstring
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_in(GEOMETRY_OUT_REP)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','LWGEOM_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_in(GEOMETRY_OUT_REP)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','LWGEOM_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_out(GEOMETRY_IN_REP)
-        RETURNS cstring
-        AS '@MODULE_FILENAME@','LWGEOM_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_out(GEOMETRY_IN_REP)
-        RETURNS cstring
-        AS '@MODULE_FILENAME@','LWGEOM_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-#if USE_VERSION >= 80
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_analyze(internal)
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_analyze'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_analyze(internal)
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_analyze'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
-#endif
-
-#if USE_VERSION > 73
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_recv(internal)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_recv'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_recv(internal)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_recv'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_send(geometry)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_send'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_send(geometry)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_send'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-#endif
-
-CREATE TYPE geometry (
-        internallength = variable,
-        input = ST_geometry_in,
-        output = ST_geometry_out,
-#if USE_VERSION > 73
-	send = ST_geometry_send,
-	receive = ST_geometry_recv,
-#endif
-	delimiter = ':',
-#if USE_VERSION >= 80
-	analyze = ST_geometry_analyze,
-#endif 
-        storage = main
-);
-
--------------------------------------------
--- Affine transforms
--------------------------------------------
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_affine'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_affine'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION RotateZ(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RotateZ(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION Rotate(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT rotateZ($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Rotate(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT rotateZ($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION RotateX(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RotateX(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION RotateY(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RotateY(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Translate(geometry,float8,float8,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Translate(geometry,float8,float8,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Translate(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT translate($1, $2, $3, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Translate(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT translate($1, $2, $3, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.1.0
--- Deprecation in 1.2.3
-CREATEFUNCTION Scale(geometry,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Scale(geometry,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.0
--- Deprecation in 1.2.3
-CREATEFUNCTION Scale(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT scale($1, $2, $3, 1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Scale(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT scale($1, $2, $3, 1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.0 
--- Deprecation in 1.2.3
-CREATEFUNCTION transscale(geometry,float8,float8,float8,float8)
-        RETURNS geometry
-        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0, 
-		0, 0, 1,  $2 * $4, $3 * $5, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2 
-CREATEFUNCTION ST_transscale(geometry,float8,float8,float8,float8)
-        RETURNS geometry
-        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0, 
-		0, 0, 1,  $2 * $4, $3 * $5, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.1.0
--- Deprecation in 1.2.3
-CREATEFUNCTION shift_longitude(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_longitude_shift'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_shift_longitude(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_longitude_shift'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--------------------------------------------------------------------
---  BOX3D TYPE
--------------------------------------------------------------------
-
-#if USE_VERSION < 73
-# define BOX3D_IN_REP opaque
-# define BOX3D_OUT_REP opaque
-#else
-# define BOX3D_IN_REP box3d
-# define BOX3D_OUT_REP cstring
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d_in(BOX3D_OUT_REP)
-	RETURNS BOX3D_IN_REP
-	AS '@MODULE_FILENAME@', 'BOX3D_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d_out(BOX3D_IN_REP)
-	RETURNS BOX3D_OUT_REP
-	AS '@MODULE_FILENAME@', 'BOX3D_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d_in(BOX3D_OUT_REP)
-	RETURNS BOX3D_IN_REP
-	AS '@MODULE_FILENAME@', 'BOX3D_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d_out(BOX3D_IN_REP)
-	RETURNS BOX3D_OUT_REP
-	AS '@MODULE_FILENAME@', 'BOX3D_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE box3d (
-	alignment = double,
-	internallength = 48,
-	input = ST_box3d_in,
-	output = ST_box3d_out
-);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION xmin(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_xmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_XMin(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_xmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ymin(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_ymin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_YMin(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_ymin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION zmin(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_zmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_ZMin(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_zmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION xmax(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_xmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_XMax(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_xmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ymax(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_ymax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_YMax(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_ymax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION zmax(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_zmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_ZMax(box3d)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','BOX3D_zmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--------------------------------------------------------------------
---  CHIP TYPE
--------------------------------------------------------------------
-
-#if USE_VERSION < 73
-# define CHIP_IN_REP opaque
-# define CHIP_OUT_REP opaque
-#else
-# define CHIP_IN_REP chip
-# define CHIP_OUT_REP cstring
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION chip_in(CHIP_OUT_REP)
-	RETURNS CHIP_IN_REP
-	AS '@MODULE_FILENAME@','CHIP_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-        
--- Availability: 1.2.2
-CREATEFUNCTION ST_chip_in(CHIP_OUT_REP)
-	RETURNS CHIP_IN_REP
-	AS '@MODULE_FILENAME@','CHIP_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION chip_out(CHIP_IN_REP)
-	RETURNS CHIP_OUT_REP
-	AS '@MODULE_FILENAME@','CHIP_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_chip_out(CHIP_IN_REP)
-	RETURNS CHIP_OUT_REP
-	AS '@MODULE_FILENAME@','CHIP_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE chip (
-	alignment = double,
-	internallength = variable,
-	input = ST_chip_in,
-	output = ST_chip_out,
-	storage = extended
-);
-
------------------------------------------------------------------------
--- BOX2D
------------------------------------------------------------------------
-
-
-#if USE_VERSION < 73
-# define BOX2D_IN_REP opaque
-# define BOX2D_OUT_REP opaque
-#else
-# define BOX2D_IN_REP box2d
-# define BOX2D_OUT_REP cstring
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_in(BOX2D_OUT_REP)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_in(BOX2D_OUT_REP)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_out(BOX2D_IN_REP)
-        RETURNS cstring
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_out(BOX2D_IN_REP)
-        RETURNS cstring
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-CREATE TYPE box2d (
-        internallength = 16,
-        input = ST_box2d_in,
-        output = ST_box2d_out,
-        storage = plain
-);
-
----- BOX2D  support functions
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_overleft(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_overleft(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_overright(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_overright' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_overright(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_overright' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_left(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_left' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_left(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_left' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_right(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_right' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_right(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_right' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_contain(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_contain(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_contained(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_contained(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_overlap(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_overlap(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_same(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_same(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_intersects(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_intersects'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_intersects(box2d, box2d) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'BOX2D_intersects'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-
--- lwgeom  operator support functions
-
--------------------------------------------------------------------
--- BTREE indexes
--------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_lt(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_lt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_lt(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_lt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_le(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_le'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_le(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_le'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_gt(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_gt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_gt(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_gt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_ge(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_ge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_ge(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_ge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_eq(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_eq'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_eq(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'lwgeom_eq'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_cmp(geometry, geometry) 
-	RETURNS integer
-	AS '@MODULE_FILENAME@', 'lwgeom_cmp'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_cmp(geometry, geometry) 
-	RETURNS integer
-	AS '@MODULE_FILENAME@', 'lwgeom_cmp'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
---
--- Sorting operators for Btree
---
-
-CREATE OPERATOR < (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_lt,
-   COMMUTATOR = '>', NEGATOR = '>=',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR <= (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_le,
-   COMMUTATOR = '>=', NEGATOR = '>',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR = (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_eq,
-   COMMUTATOR = '=', -- we might implement a faster negator here
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR >= (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_ge,
-   COMMUTATOR = '<=', NEGATOR = '<',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-CREATE OPERATOR > (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_gt,
-   COMMUTATOR = '<', NEGATOR = '<=',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-#if USE_VERSION >= 74
-
-CREATE OPERATOR CLASS btree_geometry_ops
-	DEFAULT FOR TYPE geometry USING btree AS
-	OPERATOR	1	< ,
-	OPERATOR	2	<= ,
-	OPERATOR	3	= ,
-	OPERATOR	4	>= ,
-	OPERATOR	5	> ,
-	FUNCTION	1	geometry_cmp (geometry, geometry);
-
-#endif
-
-
--------------------------------------------------------------------
--- GiST indexes
--------------------------------------------------------------------
--- Deprecation in 1.2.3
-#if USE_VERSION < 73
-CREATEFUNCTION postgis_gist_sel(opaque, oid,  opaque, int4)
-#else
-CREATEFUNCTION postgis_gist_sel (internal, oid, internal, int4)
-#endif
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_gist_sel'
-	LANGUAGE 'C';
-
--- Availability: 1.2.2
-#if USE_VERSION < 73
-CREATEFUNCTION ST_postgis_gist_sel(opaque, oid,  opaque, int4)
-#else
-CREATEFUNCTION ST_postgis_gist_sel (internal, oid, internal, int4)
-#endif
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_gist_sel'
-	LANGUAGE 'C';
-
--- Deprecation in 1.2.3
-#if USE_VERSION == 72
-CREATEFUNCTION postgis_gist_joinsel(opaque, oid,  opaque)
-#elif USE_VERSION == 73
-CREATEFUNCTION postgis_gist_joinsel(internal, oid,  internal)
-#else
-CREATEFUNCTION postgis_gist_joinsel(internal, oid, internal, smallint)
-#endif
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_gist_joinsel'
-	LANGUAGE 'C';
-
--- Availability: 1.2.2
-#if USE_VERSION == 72
-CREATEFUNCTION ST_postgis_gist_joinsel(opaque, oid,  opaque)
-#elif USE_VERSION == 73
-CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid,  internal)
-#else
-CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid, internal, smallint)
-#endif
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_gist_joinsel'
-	LANGUAGE 'C';
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overleft(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overleft(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overright(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overright'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overright(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overright'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overabove(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overabove'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overabove(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overabove'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overbelow(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overbelow'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overbelow(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overbelow'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_left(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_left'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_left(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_left'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_right(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_right'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_right(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_right'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_above(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_above'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_above(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_above'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_below(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_below'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_below(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_below'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_contain(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_contain(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_contained(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_contained(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overlap(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overlap(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_same(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
---Availability: 1.2.2
-CREATEFUNCTION ST_geometry_same(geometry, geometry) 
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- GEOMETRY operators
-
-CREATE OPERATOR << (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_left,
-   COMMUTATOR = '>>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR &< (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overleft,
-   COMMUTATOR = '&>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR <<| (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_below,
-   COMMUTATOR = '|>>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR &<| (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overbelow,
-   COMMUTATOR = '|&>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR && (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overlap,
-   COMMUTATOR = '&&',
-   RESTRICT = ST_postgis_gist_sel, JOIN = ST_postgis_gist_joinsel
-);
-
-CREATE OPERATOR &> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overright,
-   COMMUTATOR = '&<',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR >> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_right,
-   COMMUTATOR = '<<',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR |&> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overabove,
-   COMMUTATOR = '&<|',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR |>> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_above,
-   COMMUTATOR = '<<|',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR ~= (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_same,
-   COMMUTATOR = '~=', 
-   RESTRICT = eqsel, JOIN = eqjoinsel
-);
-
-CREATE OPERATOR @ (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contained,
-   COMMUTATOR = '~',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR ~ (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contain,
-   COMMUTATOR = '@',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
--- gist support functions
-
-#if USE_VERSION < 73
-#define OPAQUE_TYPE opaque
-#else
-#define OPAQUE_TYPE internal
-#endif
-
-CREATEFUNCTION LWGEOM_gist_consistent(OPAQUE_TYPE,geometry,int4) 
-	RETURNS bool 
-	AS '@MODULE_FILENAME@' ,'LWGEOM_gist_consistent'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_compress(OPAQUE_TYPE) 
-	RETURNS OPAQUE_TYPE 
-	AS '@MODULE_FILENAME@','LWGEOM_gist_compress'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_penalty(OPAQUE_TYPE,OPAQUE_TYPE,OPAQUE_TYPE) 
-	RETURNS OPAQUE_TYPE 
-	AS '@MODULE_FILENAME@' ,'LWGEOM_gist_penalty'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_picksplit(OPAQUE_TYPE, OPAQUE_TYPE) 
-	RETURNS OPAQUE_TYPE 
-	AS '@MODULE_FILENAME@' ,'LWGEOM_gist_picksplit'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_union(bytea, OPAQUE_TYPE) 
-	RETURNS OPAQUE_TYPE 
-	AS '@MODULE_FILENAME@' ,'LWGEOM_gist_union'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_same(box2d, box2d, OPAQUE_TYPE) 
-	RETURNS OPAQUE_TYPE 
-	AS '@MODULE_FILENAME@' ,'LWGEOM_gist_same'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_decompress(OPAQUE_TYPE) 
-	RETURNS OPAQUE_TYPE
-	AS '@MODULE_FILENAME@' ,'LWGEOM_gist_decompress'
-	LANGUAGE 'C';
-
--------------------------------------------
--- GIST opclass index binding entries.
--------------------------------------------
-
-#if USE_VERSION == 72
-
---
--- Create opclass index binding entries for PG72
---
-
-INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
-    VALUES (
-        (SELECT oid FROM pg_am WHERE amname = 'gist'),
-        'gist_geometry_ops',
-        (SELECT oid FROM pg_type WHERE typname = 'geometry'),
-        true,
-        (SELECT oid FROM pg_type WHERE typname = 'box2d'));
-
--- drop table rt_ops_tmp;
-
-SELECT o.oid AS opoid, o.oprname
-	INTO TABLE rt_ops_tmp
-	FROM pg_operator o, pg_type t
-	WHERE o.oprleft = t.oid 
-		AND t.typname = 'geometry';
-
--- poly_left
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 1, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '<<';
-
--- poly_overleft
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 2, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '&<';
-
--- poly_overlap
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 3, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '&&';
-
--- poly_overright
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 4, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '&>';
-
--- poly_right
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
-   SELECT opcl.oid, 5, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '>>';
-
--- poly_same
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 6, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '~=';
-
--- poly_contains
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
-   SELECT opcl.oid, 7, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '~';
-
--- poly_contained
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
-   SELECT opcl.oid, 8, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '@';
-
--- poly_overbelow
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
-   SELECT opcl.oid, 9, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '&<|';
-
--- poly_below
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 10, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '<<|';
-
--- poly_above
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 11, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '|>>';
-
--- poly_overabove
-INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
-   SELECT opcl.oid, 12, true, c.opoid
-   FROM pg_opclass opcl, rt_ops_tmp c
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops' 
-      and c.oprname = '|&>';
-
-DROP TABLE rt_ops_tmp;
-
-
--- add the entries to amproc for the support methods
--- note the amprocnum numbers associated with each are specific!
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 1, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_consistent';
-
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 2, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_union';
-
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 3, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_compress';
-
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 4, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_decompress';
-
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 5, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_penalty';
-
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 6, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_picksplit';
-
-INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
-   SELECT opcl.oid, 7, pro.oid
-   FROM pg_opclass opcl, pg_proc pro
-   WHERE
-      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
-      and opcname = 'gist_geometry_ops'
-      and proname = 'lwgeom_gist_same';
-
-#else
-
---
--- Create opclass index bindings for PG>=73
---
-
-CREATE OPERATOR CLASS gist_geometry_ops
-        DEFAULT FOR TYPE geometry USING gist AS
-        OPERATOR        1        << 	RECHECK,
-        OPERATOR        2        &<	RECHECK,
-        OPERATOR        3        &&	RECHECK,
-        OPERATOR        4        &>	RECHECK,
-        OPERATOR        5        >>	RECHECK,
-        OPERATOR        6        ~=	RECHECK,
-        OPERATOR        7        ~	RECHECK,
-        OPERATOR        8        @	RECHECK,
-	OPERATOR	9	 &<|	RECHECK,
-	OPERATOR	10	 <<|	RECHECK,
-	OPERATOR	11	 |>>	RECHECK,
-	OPERATOR	12	 |&>	RECHECK,
-	FUNCTION        1        LWGEOM_gist_consistent (internal, geometry, int4),
-        FUNCTION        2        LWGEOM_gist_union (bytea, internal),
-        FUNCTION        3        LWGEOM_gist_compress (internal),
-        FUNCTION        4        LWGEOM_gist_decompress (internal),
-        FUNCTION        5        LWGEOM_gist_penalty (internal, internal, internal),
-        FUNCTION        6        LWGEOM_gist_picksplit (internal, internal),
-        FUNCTION        7        LWGEOM_gist_same (box2d, box2d, internal);
-
-UPDATE pg_opclass 
-	SET opckeytype = (SELECT oid FROM pg_type 
-                          WHERE typname = 'box2d' 
-                          AND typnamespace = (SELECT oid FROM pg_namespace 
-                                              WHERE nspname=current_schema())) 
-	WHERE opcname = 'gist_geometry_ops' 
-        AND opcnamespace = (SELECT oid from pg_namespace 
-                            WHERE nspname=current_schema());
-	
--- TODO: add btree binding...
-
-#endif
-	
--------------------------------------------
--- other lwgeom functions
--------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION addBBOX(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_addBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_addBBOX(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_addBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION dropBBOX(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_dropBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_dropBBOX(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_dropBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-	
--- Deprecation in 1.2.3
-CREATEFUNCTION getSRID(geometry) 
-	RETURNS int4
-	AS '@MODULE_FILENAME@','LWGEOM_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION getSRID(geometry) 
-	RETURNS int4
-	AS '@MODULE_FILENAME@','LWGEOM_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION getBBOX(geometry)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION getBBOX(geometry)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--------------------------------------------
---- CHIP functions
--------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION srid(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_srid(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION height(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getHeight'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_height(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getHeight'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION factor(chip)
-	RETURNS FLOAT4
-	AS '@MODULE_FILENAME@','CHIP_getFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_factor(chip)
-	RETURNS FLOAT4
-	AS '@MODULE_FILENAME@','CHIP_getFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION width(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getWidth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_width(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getWidth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION datatype(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getDatatype'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_datatype(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getDatatype'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION compression(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getCompression'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_compression(chip)
-	RETURNS int4
-	AS '@MODULE_FILENAME@','CHIP_getCompression'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION setSRID(chip,int4)
-	RETURNS chip
-	AS '@MODULE_FILENAME@','CHIP_setSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION setFactor(chip,float4)
-	RETURNS chip
-	AS '@MODULE_FILENAME@','CHIP_setFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_setFactor(chip,float4)
-	RETURNS chip
-	AS '@MODULE_FILENAME@','CHIP_setFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-------------------------------------------------------------------------
--- DEBUG
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION mem_size(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_mem_size'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_mem_size(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_mem_size'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION summary(geometry)
-	RETURNS text
-	AS '@MODULE_FILENAME@', 'LWGEOM_summary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_summary(geometry)
-	RETURNS text
-	AS '@MODULE_FILENAME@', 'LWGEOM_summary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION npoints(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_npoints'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_npoints(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_npoints'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION nrings(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_nrings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_nrings(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_nrings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-------------------------------------------------------------------------
--- Misures
-------------------------------------------------------------------------
-
--- this is a fake (for back-compatibility)
--- uses 3d if 3d is available, 2d otherwise
--- Deprecation in 1.2.3
-CREATEFUNCTION length3d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_length_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length3d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_length_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION length2d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length2d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATEFUNCTION length(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_length_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: length2d(geometry)
-CREATEFUNCTION ST_Length(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- this is a fake (for back-compatibility)
--- uses 3d if 3d is available, 2d otherwise
--- Deprecation in 1.2.3
-CREATEFUNCTION length3d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length3d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION length_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION length2d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_length2d_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length2d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_length2d_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- this is a fake (for back-compatibility)
--- uses 3d if 3d is available, 2d otherwise
--- Deprecation in 1.2.3
-CREATEFUNCTION perimeter3d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_perimeter_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_perimeter3d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_perimeter_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION perimeter2d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_perimeter2d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION perimeter(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_perimeter_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: perimeter2d(geometry)
-CREATEFUNCTION ST_Perimeter(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- this is an alias for 'area(geometry)'
--- there is nothing such an 'area3d'...
--- Deprecation in 1.2.3
-CREATEFUNCTION area2d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_area2d(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@', 'LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION area(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: area(geometry)
-CREATEFUNCTION ST_Area(geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION distance_spheroid(geometry,geometry,spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_distance_ellipsoid_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_distance_spheroid(geometry,geometry,spheroid)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_distance_ellipsoid_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION distance_sphere(geometry,geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_distance_sphere'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_distance_sphere(geometry,geometry)
-	RETURNS FLOAT8
-	AS '@MODULE_FILENAME@','LWGEOM_distance_sphere'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Minimum distance. 2d only.
--- Deprecation in 1.2.3
-CREATEFUNCTION distance(geometry,geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_mindistance2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: distance(geometry,geometry)
-CREATEFUNCTION ST_Distance(geometry,geometry)
-    RETURNS float8
-    AS '@MODULE_FILENAME@', 'LWGEOM_mindistance2d'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Maximum distance between linestrings. 2d only. Very bogus.
--- Deprecation in 1.2.3
-CREATEFUNCTION max_distance(geometry,geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_maxdistance2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_max_distance(geometry,geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_maxdistance2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION point_inside_circle(geometry,float8,float8,float8)
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_inside_circle_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_point_inside_circle(geometry,float8,float8,float8)
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_inside_circle_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION azimuth(geometry,geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_azimuth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_azimuth(geometry,geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@', 'LWGEOM_azimuth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-------------------------------------------------------------------------
--- MISC
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_2d(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_2d(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_3dz(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_3dz(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- an alias for force_3dz
--- Deprecation in 1.2.3
-CREATEFUNCTION force_3d(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_3d(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_3dm(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_3dm(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_4d(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_4d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_4d(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_4d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_collection(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_collection(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION multi(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_multi'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_multi(geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_force_multi'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collector(geometry, geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collector(geometry, geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collect(geometry, geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collect(geometry, geometry) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE memcollect(
-	sfunc = ST_collect,
-	basetype = geometry,
-	stype = geometry
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_memcollect(
-	sfunc = ST_collect,
-	basetype = geometry,
-	stype = geometry
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geom_accum (geometry[],geometry)
-	RETURNS geometry[]
-	AS '@MODULE_FILENAME@', 'LWGEOM_accum'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geom_accum (geometry[],geometry)
-	RETURNS geometry[]
-	AS '@MODULE_FILENAME@', 'LWGEOM_accum'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE accum (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[]
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_accum (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[]
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collect_garray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_collect_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collect_garray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_collect_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE collect (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_collect_garray
-	);
-
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_collect (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_collect_garray
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION expand(box3d,float8)
-	RETURNS box3d
-	AS '@MODULE_FILENAME@', 'BOX3D_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Expand(box3d,float8)
-	RETURNS box3d
-	AS '@MODULE_FILENAME@', 'BOX3D_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION expand(box2d,float8)
-	RETURNS box2d
-	AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_expand(box2d,float8)
-	RETURNS box2d
-	AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION expand(geometry,float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_expand(geometry,float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION envelope(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_envelope'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- PostGIS equivalent function: envelope(geometry)
-CREATEFUNCTION ST_Envelope(geometry)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@', 'LWGEOM_envelope'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION reverse(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_reverse'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Reverse(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_reverse'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ForceRHR(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_forceRHR_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_ForceRHR(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_forceRHR_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION noop(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_noop'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_noop(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_noop'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION zmflag(geometry)
-	RETURNS smallint
-	AS '@MODULE_FILENAME@', 'LWGEOM_zmflag'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_zmflag(geometry)
-	RETURNS smallint
-	AS '@MODULE_FILENAME@', 'LWGEOM_zmflag'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION hasBBOX(geometry)
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_hasBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availabitily: 1.2.2
-CREATEFUNCTION ST_HasBBOX(geometry)
-	RETURNS bool
-	AS '@MODULE_FILENAME@', 'LWGEOM_hasBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ndims(geometry)
-	RETURNS smallint
-	AS '@MODULE_FILENAME@', 'LWGEOM_ndims'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_NDims(geometry)
-	RETURNS smallint
-	AS '@MODULE_FILENAME@', 'LWGEOM_ndims'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsEWKT(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asEWKT'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsEWKT(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asEWKT'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsEWKB(geometry)
-	RETURNS BYTEA
-	AS '@MODULE_FILENAME@','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsEWKB(geometry)
-	RETURNS BYTEA
-	AS '@MODULE_FILENAME@','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsHEXEWKB(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsHEXEWKB(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsHEXEWKB(geometry, text)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsHEXEWKB(geometry, text)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsEWKB(geometry,text)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsEWKB(geometry,text)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromEWKB(bytea)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOMFromWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromEWKB(bytea)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOMFromWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromEWKT(text)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromEWKT(text)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION cache_bbox()
-        RETURNS trigger
-        AS '@MODULE_FILENAME@'
-        LANGUAGE 'C';
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Cache_BBox()
-	RETURNS trigger
-	AS '@MODULE_FILENAME@','cache_bbox'
-	LANGUAGE 'C';
-
-------------------------------------------------------------------------
--- CONSTRUCTORS
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePoint(float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePoint(float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePoint(float8, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePoint(float8, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePoint(float8, float8, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePoint(float8, float8, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePointM(float8, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION MakePointM(float8, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakeBox2d(geometry, geometry)
-	RETURNS box2d
-	AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeBox2d(geometry, geometry)
-	RETURNS box2d
-	AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakeBox3d(geometry, geometry)
-	RETURNS box3d
-	AS '@MODULE_FILENAME@', 'BOX3D_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeBox3d(geometry, geometry)
-	RETURNS box3d
-	AS '@MODULE_FILENAME@', 'BOX3D_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION makeline_garray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makeline_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeLine_GArray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makeline_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromMultiPoint(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_line_from_mpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineFromMultiPoint(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_line_from_mpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakeLine(geometry, geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makeline'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeLine(geometry, geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makeline'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AddPoint(geometry, geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AddPoint(geometry, geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AddPoint(geometry, geometry, integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AddPoint(geometry, geometry, integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION RemovePoint(geometry, integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_removepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RemovePoint(geometry, integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_removepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION SetPoint(geometry, integer, geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_setpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SetPoint(geometry, integer, geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_setpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE makeline (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = makeline_garray
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_MakeLine (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_makeline_garray
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePolygon(geometry, geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePolygon(geometry, geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePolygon(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePolygon(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION BuildArea(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_buildarea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_BuildArea(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_buildarea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Polygonize_GArray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'polygonize_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Polygonize_GArray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'polygonize_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineMerge(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'linemerge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineMerge(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'linemerge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE Polygonize (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = polygonize_garray
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Polygonize (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_polygonize_garray
-	);
-
-#if USE_VERSION > 72
-
-CREATE TYPE geometry_dump AS (path integer[], geom geometry);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Dump(geometry)
-	RETURNS SETOF geometry_dump
-	AS '@MODULE_FILENAME@', 'LWGEOM_dump'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Dump(geometry)
-	RETURNS SETOF geometry_dump
-	AS '@MODULE_FILENAME@', 'LWGEOM_dump'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION DumpRings(geometry)
-	RETURNS SETOF geometry_dump
-	AS '@MODULE_FILENAME@', 'LWGEOM_dump_rings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_DumpRings(geometry)
-	RETURNS SETOF geometry_dump
-	AS '@MODULE_FILENAME@', 'LWGEOM_dump_rings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-#endif
-
-------------------------------------------------------------------------
-
---
--- Aggregate functions
---
-
--- Deprecation in 1.2.3
-CREATEFUNCTION combine_bbox(box2d,geometry)
-	RETURNS box2d
-	AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Combine_BBox(box2d,geometry)
-	RETURNS box2d
-	AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE Extent(
-	sfunc = ST_combine_bbox,
-	basetype = geometry,
-	stype = box2d
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Extent(
-	sfunc = ST_combine_bbox,
-	basetype = geometry,
-	stype = box2d
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION combine_bbox(box3d,geometry)
-	RETURNS box3d
-	AS '@MODULE_FILENAME@', 'BOX3D_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Combine_BBox(box3d,geometry)
-	RETURNS box3d
-	AS '@MODULE_FILENAME@', 'BOX3D_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE Extent3d(
-	sfunc = combine_bbox,
-	basetype = geometry,
-	stype = box3d
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Extent3d(
-	sfunc = ST_combine_bbox,
-	basetype = geometry,
-	stype = box3d
-	);
-
------------------------------------------------------------------------
--- CREATE_HISTOGRAM2D( <box2d>, <size> )
------------------------------------------------------------------------
---
--- Returns a histgram with 0s in all the boxes.
---
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION create_histogram2d(box2d,int)
-	RETURNS histogram2d
-	AS '@MODULE_FILENAME@','create_lwhistogram2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_create_histogram2d(box2d,int)
-	RETURNS histogram2d
-	AS '@MODULE_FILENAME@','create_lwhistogram2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- BUILD_HISTOGRAM2D( <histogram2d>, <tablename>, <columnname> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION build_histogram2d (histogram2d,text,text)
-	RETURNS histogram2d
-	AS '@MODULE_FILENAME@','build_lwhistogram2d'
-	LANGUAGE 'C' _STABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_build_histogram2d (histogram2d,text,text)
-	RETURNS histogram2d
-	AS '@MODULE_FILENAME@','build_lwhistogram2d'
-	LANGUAGE 'C' _STABLE_STRICT; -- WITH (isstrict);
-
-#if USE_VERSION >= 73
------------------------------------------------------------------------
--- BUILD_HISTOGRAM2D(<histogram2d>,<schema>,<tablename>,<columnname>)
------------------------------------------------------------------------
--- This is a wrapper to the omonimous schema unaware function,
--- thanks to Carl Anderson for the idea.
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION build_histogram2d (histogram2d,text,text,text)
-RETURNS histogram2d
-AS '
-BEGIN
-	EXECUTE ''SET local search_path = ''||$2||'',public'';
-	RETURN public.build_histogram2d($1,$3,$4);
-END
-'
-LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_build_histogram2d (histogram2d,text,text,text)
-RETURNS histogram2d
-AS '
-BEGIN
-	EXECUTE ''SET local search_path = ''||$2||'',public'';
-	RETURN public.build_histogram2d($1,$3,$4);
-END
-'
-LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
-
-#endif
-
------------------------------------------------------------------------
--- EXPLODE_HISTOGRAM2D( <histogram2d>, <tablename> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION explode_histogram2d (histogram2d,text)
-	RETURNS histogram2d
-	AS '@MODULE_FILENAME@','explode_lwhistogram2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_explode_histogram2d (histogram2d,text)
-	RETURNS histogram2d
-	AS '@MODULE_FILENAME@','explode_lwhistogram2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- ESTIMATE_HISTOGRAM2D( <histogram2d>, <box> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION estimate_histogram2d(histogram2d,box2d)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','estimate_lwhistogram2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_estimate_histogram2d(histogram2d,box2d)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','estimate_lwhistogram2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- ESTIMATED_EXTENT( <schema name>, <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION estimated_extent(text,text,text) RETURNS box2d AS
-	'@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS
-	'@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
-
------------------------------------------------------------------------
--- ESTIMATED_EXTENT( <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION estimated_extent(text,text) RETURNS box2d AS
-	'@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_estimated_extent(text,text) RETURNS box2d AS
-	'@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER; 
-
------------------------------------------------------------------------
--- FIND_EXTENT( <schema name>, <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION find_extent(text,text,text) RETURNS box2d AS
-'
-DECLARE
-	schemaname alias for $1;
-	tablename alias for $2;
-	columnname alias for $3;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||schemaname||''"."''||tablename||''"'' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_find_extent(text,text,text) RETURNS box2d AS
-'
-DECLARE
-	schemaname alias for $1;
-	tablename alias for $2;
-	columnname alias for $3;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||schemaname||''"."''||tablename||''"'' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-
------------------------------------------------------------------------
--- FIND_EXTENT( <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION find_extent(text,text) RETURNS box2d AS
-'
-DECLARE
-	tablename alias for $1;
-	columnname alias for $2;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||tablename||''"'' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_find_extent(text,text) RETURNS box2d AS
-'
-DECLARE
-	tablename alias for $1;
-	columnname alias for $2;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||tablename||''"'' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--------------------------------------------------------------------
--- SPATIAL_REF_SYS
--------------------------------------------------------------------
-CREATE TABLE spatial_ref_sys (
-	 srid integer not null primary key,
-	 auth_name varchar(256), 
-	 auth_srid integer, 
-	 srtext varchar(2048),
-	 proj4text varchar(2048) 
-);
-
--------------------------------------------------------------------
--- GEOMETRY_COLUMNS
--------------------------------------------------------------------
-CREATE TABLE geometry_columns (
-	f_table_catalog varchar(256) not null,
-	f_table_schema varchar(256) not null,
-	f_table_name varchar(256) not null,
-	f_geometry_column varchar(256) not null,
-	coord_dimension integer not null,
-	srid integer not null,
-	type varchar(30) not null,
-#if USE_VERSION < 80
-	attrelid oid,
-	varattnum int,
-	stats histogram2d,
-#endif
-	CONSTRAINT geometry_columns_pk primary key ( 
-		f_table_catalog, 
-		f_table_schema, 
-		f_table_name, 
-		f_geometry_column )
-) WITH OIDS;
-
------------------------------------------------------------------------
--- RENAME_GEOMETRY_TABLE_CONSTRAINTS()
------------------------------------------------------------------------
--- This function has been obsoleted for the difficulty in
--- finding attribute on which the constraint is applied.
--- AddGeometryColumn will name the constraints in a meaningful
--- way, but nobody can rely on it since old postgis versions did
--- not do that.
------------------------------------------------------------------------
-CREATEFUNCTION rename_geometry_table_constraints() RETURNS text
-AS 
-'
-SELECT ''rename_geometry_table_constraint() is obsoleted''::text
-'
-LANGUAGE 'SQL' _IMMUTABLE;
-
------------------------------------------------------------------------
--- FIX_GEOMETRY_COLUMNS() 
------------------------------------------------------------------------
--- This function will:
---
---	o try to fix the schema of records with an invalid one
---		(for PG>=73)
---
---	o link records to system tables through attrelid and varattnum
---		(for PG<75)
---
---	o delete all records for which no linking was possible
---		(for PG<75)
---	
--- 
------------------------------------------------------------------------
-CREATEFUNCTION fix_geometry_columns() RETURNS text
-AS 
-'
-DECLARE
-	mislinked record;
-	result text;
-	linked integer;
-	deleted integer;
-#if USE_VERSION >= 73
-	foundschema integer;
-#endif
-BEGIN
-
-#if USE_VERSION >= 73
-	-- Since 7.3 schema support has been added.
-	-- Previous postgis versions used to put the database name in
-	-- the schema column. This needs to be fixed, so we try to 
-	-- set the correct schema for each geometry_colums record
-	-- looking at table, column, type and srid.
-	UPDATE geometry_columns SET f_table_schema = n.nspname
-		FROM pg_namespace n, pg_class c, pg_attribute a,
-			pg_constraint sridcheck, pg_constraint typecheck
-                WHERE ( f_table_schema is NULL
-		OR f_table_schema = ''''
-                OR f_table_schema NOT IN (
-                        SELECT nspname::varchar
-                        FROM pg_namespace nn, pg_class cc, pg_attribute aa
-                        WHERE cc.relnamespace = nn.oid
-                        AND cc.relname = f_table_name::name
-                        AND aa.attrelid = cc.oid
-                        AND aa.attname = f_geometry_column::name))
-                AND f_table_name::name = c.relname
-                AND c.oid = a.attrelid
-                AND c.relnamespace = n.oid
-                AND f_geometry_column::name = a.attname
-
-                AND sridcheck.conrelid = c.oid
-		AND sridcheck.consrc LIKE ''(srid(% = %)''
-                AND sridcheck.consrc ~ textcat('' = '', srid::text)
-
-                AND typecheck.conrelid = c.oid
-		AND typecheck.consrc LIKE
-	''((geometrytype(%) = ''''%''''::text) OR (% IS NULL))''
-                AND typecheck.consrc ~ textcat('' = '''''', type::text)
-
-                AND NOT EXISTS (
-                        SELECT oid FROM geometry_columns gc
-                        WHERE c.relname::varchar = gc.f_table_name
-                        AND n.nspname::varchar = gc.f_table_schema
-                        AND a.attname::varchar = gc.f_geometry_column
-                );
-
-	GET DIAGNOSTICS foundschema = ROW_COUNT;
-#endif
-
-#if USE_VERSION >= 80
-	-- no linkage to system table needed
-	return ''fixed:''||foundschema::text;
-#endif
-
-	-- fix linking to system tables
-	SELECT 0 INTO linked;
-	FOR mislinked in
-		SELECT gc.oid as gcrec,
-			a.attrelid as attrelid, a.attnum as attnum
-                FROM geometry_columns gc, pg_class c,
-#if USE_VERSION >= 73
-		pg_namespace n, pg_attribute a
-#else
-		pg_attribute a
-#endif
-                WHERE ( gc.attrelid IS NULL OR gc.attrelid != a.attrelid 
-			OR gc.varattnum IS NULL OR gc.varattnum != a.attnum)
-#if USE_VERSION >= 73
-                AND n.nspname = gc.f_table_schema::name
-                AND c.relnamespace = n.oid
-#endif
-                AND c.relname = gc.f_table_name::name
-                AND a.attname = f_geometry_column::name
-                AND a.attrelid = c.oid
-	LOOP
-		UPDATE geometry_columns SET
-			attrelid = mislinked.attrelid,
-			varattnum = mislinked.attnum,
-			stats = NULL
-			WHERE geometry_columns.oid = mislinked.gcrec;
-		SELECT linked+1 INTO linked;
-	END LOOP; 
-
-	-- remove stale records
-	DELETE FROM geometry_columns WHERE attrelid IS NULL;
-
-	GET DIAGNOSTICS deleted = ROW_COUNT;
-
-	result = 
-#if USE_VERSION >= 73
-		''fixed:'' || foundschema::text ||
-#endif
-		'' linked:'' || linked::text || 
-		'' deleted:'' || deleted::text;
-
-	return result;
-
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE;
-
------------------------------------------------------------------------
--- PROBE_GEOMETRY_COLUMNS() 
------------------------------------------------------------------------
--- Fill the geometry_columns table with values probed from the system
--- catalogues. 3d flag cannot be probed, it defaults to 2
---
--- Note that bogus records already in geometry_columns are not
--- overridden (a check for schema.table.column is performed), so
--- to have a fresh probe backup your geometry_column, delete from
--- it and probe.
------------------------------------------------------------------------
-CREATEFUNCTION probe_geometry_columns() RETURNS text AS
-'
-DECLARE
-	inserted integer;
-	oldcount integer;
-	probed integer;
-	stale integer;
-BEGIN
-
-	SELECT count(*) INTO oldcount FROM geometry_columns;
-
-	SELECT count(*) INTO probed
-		FROM pg_class c, pg_attribute a, pg_type t, 
-#if USE_VERSION >= 73
-			pg_namespace n,
-			pg_constraint sridcheck, pg_constraint typecheck
-#else
-			pg_relcheck sridcheck, pg_relcheck typecheck
-#endif 
-
-		WHERE t.typname = ''geometry''
-		AND a.atttypid = t.oid
-		AND a.attrelid = c.oid
-#if USE_VERSION >= 73
-		AND c.relnamespace = n.oid
-		AND sridcheck.connamespace = n.oid
-		AND typecheck.connamespace = n.oid
-#endif
-
-#if USE_VERSION >= 73
-		AND sridcheck.conrelid = c.oid
-		AND sridcheck.consrc LIKE ''(srid(''||a.attname||'') = %)''
-		AND typecheck.conrelid = c.oid
-		AND typecheck.consrc LIKE
-	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
-#else
-		AND sridcheck.rcrelid = c.oid
-		AND sridcheck.rcsrc LIKE ''(srid(''||a.attname||'') = %)''
-		AND typecheck.rcrelid = c.oid
-		AND typecheck.rcsrc LIKE
-	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
-#endif
-		;
-
-	INSERT INTO geometry_columns SELECT
-		''''::varchar as f_table_catalogue,
-#if USE_VERSION >= 73
-		n.nspname::varchar as f_table_schema,
-#else
-		''''::varchar as f_table_schema,
-#endif
-		c.relname::varchar as f_table_name,
-		a.attname::varchar as f_geometry_column,
-		2 as coord_dimension,
-#if USE_VERSION >= 73
-		trim(both  '' =)'' from substr(sridcheck.consrc,
-			strpos(sridcheck.consrc, ''='')))::integer as srid,
-		trim(both '' =)'''''' from substr(typecheck.consrc, 
-			strpos(typecheck.consrc, ''=''),
-			strpos(typecheck.consrc, ''::'')-
-			strpos(typecheck.consrc, ''='')
-			))::varchar as type
-#else
-		trim(both  '' =)'' from substr(sridcheck.rcsrc,
-			strpos(sridcheck.rcsrc, ''='')))::integer as srid,
-		trim(both '' =)'''''' from substr(typecheck.rcsrc, 
-			strpos(typecheck.rcsrc, ''=''),
-			strpos(typecheck.rcsrc, ''::'')-
-			strpos(typecheck.rcsrc, ''='')
-			))::varchar as type
-#endif
-
-#if USE_VERSION < 80
-		, a.attrelid,
-		a.attnum as varattnum,
-		null::histogram2d as stats
-#endif
-		FROM pg_class c, pg_attribute a, pg_type t, 
-#if USE_VERSION >= 73
-			pg_namespace n,
-			pg_constraint sridcheck, pg_constraint typecheck
-#else
-			pg_relcheck sridcheck, pg_relcheck typecheck
-#endif 
-		WHERE t.typname = ''geometry''
-		AND a.atttypid = t.oid
-		AND a.attrelid = c.oid
-#if USE_VERSION >= 73
-		AND c.relnamespace = n.oid
-		AND sridcheck.connamespace = n.oid
-		AND typecheck.connamespace = n.oid
-		AND sridcheck.conrelid = c.oid
-		AND sridcheck.consrc LIKE ''(srid(''||a.attname||'') = %)''
-		AND typecheck.conrelid = c.oid
-		AND typecheck.consrc LIKE
-	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
-#else
-		AND sridcheck.rcrelid = c.oid
-		AND sridcheck.rcsrc LIKE ''(srid(''||a.attname||'') = %)''
-		AND typecheck.rcrelid = c.oid
-		AND typecheck.rcsrc LIKE
-	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
-#endif
-
-                AND NOT EXISTS (
-                        SELECT oid FROM geometry_columns gc
-                        WHERE c.relname::varchar = gc.f_table_name
-#if USE_VERSION >= 73
-                        AND n.nspname::varchar = gc.f_table_schema
-#endif
-                        AND a.attname::varchar = gc.f_geometry_column
-                );
-
-	GET DIAGNOSTICS inserted = ROW_COUNT;
-
-	IF oldcount > probed THEN
-		stale = oldcount-probed;
-	ELSE
-		stale = 0;
-	END IF;
-
-        RETURN ''probed:''||probed::text||
-		'' inserted:''||inserted::text||
-		'' conflicts:''||(probed-inserted)::text||
-		'' stale:''||stale::text;
-END
-
-'
-LANGUAGE 'plpgsql' _VOLATILE;
-
------------------------------------------------------------------------
--- ADDGEOMETRYCOLUMN
---   <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim>
------------------------------------------------------------------------
---
--- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
--- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
---
--- Types (except geometry) are checked for consistency using a CHECK constraint
--- uses SQL ALTER TABLE command to add the geometry column to the table.
--- Addes a row to geometry_columns.
--- Addes a constraint on the table that all the geometries MUST have the same 
--- SRID. Checks the coord_dimension to make sure its between 0 and 3.
--- Should also check the precision grid (future expansion).
--- Calls fix_geometry_columns() at the end.
---
------------------------------------------------------------------------
-CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer)
-	RETURNS text
-	AS 
-'
-DECLARE
-	catalog_name alias for $1;
-	schema_name alias for $2;
-	table_name alias for $3;
-	column_name alias for $4;
-	new_srid alias for $5;
-	new_type alias for $6;
-	new_dim alias for $7;
-#if USE_VERSION >= 73
-	rec RECORD;
-	schema_ok bool;
-	real_schema name;
-#endif
-
-BEGIN
-
-	IF ( not ( (new_type =''GEOMETRY'') or
-		   (new_type =''GEOMETRYCOLLECTION'') or
-		   (new_type =''POINT'') or 
-		   (new_type =''MULTIPOINT'') or
-		   (new_type =''POLYGON'') or
-		   (new_type =''MULTIPOLYGON'') or
-		   (new_type =''LINESTRING'') or
-		   (new_type =''MULTILINESTRING'') or
-		   (new_type =''GEOMETRYCOLLECTIONM'') or
-		   (new_type =''POINTM'') or 
-		   (new_type =''MULTIPOINTM'') or
-		   (new_type =''POLYGONM'') or
-		   (new_type =''MULTIPOLYGONM'') or
-		   (new_type =''LINESTRINGM'') or
-		   (new_type =''MULTILINESTRINGM'') or
-                   (new_type = ''CIRCULARSTRING'') or
-                   (new_type = ''CIRCULARSTRINGM'') or
-                   (new_type = ''COMPOUNDCURVE'') or
-                   (new_type = ''COMPOUNDCURVEM'') or
-                   (new_type = ''CURVEPOLYGON'') or
-                   (new_type = ''CURVEPOLYGONM'') or
-                   (new_type = ''MULTICURVE'') or
-                   (new_type = ''MULTICURVEM'') or
-                   (new_type = ''MULTISURFACE'') or
-                   (new_type = ''MULTISURFACEM'')) )
-	THEN
-		RAISE EXCEPTION ''Invalid type name - valid ones are: 
-			GEOMETRY, GEOMETRYCOLLECTION, POINT, 
-			MULTIPOINT, POLYGON, MULTIPOLYGON, 
-			LINESTRING, MULTILINESTRING,
-                        CIRCULARSTRING, COMPOUNDCURVE,
-                        CURVEPOLYGON, MULTICURVE, MULTISURFACE,
-			GEOMETRYCOLLECTIONM, POINTM, 
-			MULTIPOINTM, POLYGONM, MULTIPOLYGONM, 
-			LINESTRINGM, MULTILINESTRINGM 
-                        CIRCULARSTRINGM, COMPOUNDCURVEM,
-                        CURVEPOLYGONM, MULTICURVEM or MULTISURFACEM'';
-		return ''fail'';
-	END IF;
-
-	IF ( (new_dim >4) or (new_dim <0) ) THEN
-		RAISE EXCEPTION ''invalid dimension'';
-		return ''fail'';
-	END IF;
-
-	IF ( (new_type LIKE ''%M'') and (new_dim!=3) ) THEN
-
-		RAISE EXCEPTION ''TypeM needs 3 dimensions'';
-		return ''fail'';
-	END IF;
-
-#if USE_VERSION >= 73
-	IF ( schema_name != '''' ) THEN
-		schema_ok = ''f'';
-		FOR rec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-			schema_ok := ''t'';
-		END LOOP;
-
-		if ( schema_ok <> ''t'' ) THEN
-			RAISE NOTICE ''Invalid schema name - using current_schema()'';
-			SELECT current_schema() into real_schema;
-		ELSE
-			real_schema = schema_name;
-		END IF;
-
-	ELSE
-		SELECT current_schema() into real_schema;
-	END IF;
-#endif
-
-
-	-- Add geometry column
-
-	EXECUTE ''ALTER TABLE '' ||
-#if USE_VERSION >= 73
-		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
-#else
-		quote_ident(table_name)
-#endif
-		|| '' ADD COLUMN '' || quote_ident(column_name) || 
-		'' geometry '';
-
-
-	-- Delete stale record in geometry_column (if any)
-
-	EXECUTE ''DELETE FROM geometry_columns WHERE
-		f_table_catalog = '' || quote_literal('''') || 
-		'' AND f_table_schema = '' ||
-#if USE_VERSION >= 73
-		quote_literal(real_schema) || 
-#else
-		quote_literal('''') || 
-#endif
-		'' AND f_table_name = '' || quote_literal(table_name) ||
-		'' AND f_geometry_column = '' || quote_literal(column_name);
-
-
-	-- Add record in geometry_column 
-
-	EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
-		quote_literal('''') || '','' ||
-#if USE_VERSION >= 73
-		quote_literal(real_schema) || '','' ||
-#else
-		quote_literal('''') || '','' ||
-#endif
-		quote_literal(table_name) || '','' ||
-		quote_literal(column_name) || '','' ||
-		new_dim::text || '','' || new_srid::text || '','' ||
-		quote_literal(new_type) || '')'';
-
-	-- Add table checks
-
-	EXECUTE ''ALTER TABLE '' || 
-#if USE_VERSION >= 73
-		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
-#else
-		quote_ident(table_name)
-#endif
-		|| '' ADD CONSTRAINT '' 
-		|| quote_ident(''enforce_srid_'' || column_name)
-		|| '' CHECK (SRID('' || quote_ident(column_name) ||
-		'') = '' || new_srid::text || '')'' ;
-
-	EXECUTE ''ALTER TABLE '' || 
-#if USE_VERSION >= 73
-		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
-#else
-		quote_ident(table_name)
-#endif
-		|| '' ADD CONSTRAINT ''
-		|| quote_ident(''enforce_dims_'' || column_name)
-		|| '' CHECK (ndims('' || quote_ident(column_name) ||
-		'') = '' || new_dim::text || '')'' ;
-
-	IF (not(new_type = ''GEOMETRY'')) THEN
-		EXECUTE ''ALTER TABLE '' || 
-#if USE_VERSION >= 73
-		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
-#else
-		quote_ident(table_name)
-#endif
-		|| '' ADD CONSTRAINT ''
-		|| quote_ident(''enforce_geotype_'' || column_name)
-		|| '' CHECK (geometrytype('' ||
-		quote_ident(column_name) || '')='' ||
-		quote_literal(new_type) || '' OR ('' ||
-		quote_ident(column_name) || '') is null)'';
-	END IF;
-
-	return 
-#if USE_VERSION >= 73
-		real_schema || ''.'' || 
-#endif
-		table_name || ''.'' || column_name ||
-		'' SRID:'' || new_srid::text ||
-		'' TYPE:'' || new_type || 
-		'' DIMS:'' || new_dim::text || chr(10) || '' ''; 
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
-----------------------------------------------------------------------------
--- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
-----------------------------------------------------------------------------
---
--- This is a wrapper to the real AddGeometryColumn, for use
--- when catalogue is undefined
---
-----------------------------------------------------------------------------
-CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS '
-DECLARE
-	ret  text;
-BEGIN
-	SELECT AddGeometryColumn('''',$1,$2,$3,$4,$5,$6) into ret;
-	RETURN ret;
-END;
-'
-LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
-
-----------------------------------------------------------------------------
--- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> )
-----------------------------------------------------------------------------
---
--- This is a wrapper to the real AddGeometryColumn, for use
--- when catalogue and schema are undefined
---
-----------------------------------------------------------------------------
-CREATEFUNCTION AddGeometryColumn(varchar,varchar,integer,varchar,integer) RETURNS text AS '
-DECLARE
-	ret  text;
-BEGIN
-	SELECT AddGeometryColumn('''','''',$1,$2,$3,$4,$5) into ret;
-	RETURN ret;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYCOLUMN
---   <catalogue>, <schema>, <table>, <column>
------------------------------------------------------------------------
---
--- Removes geometry column reference from geometry_columns table.
--- Drops the column with pgsql >= 73.
--- Make some silly enforcements on it for pgsql < 73
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryColumn(varchar, varchar,varchar,varchar)
-	RETURNS text
-	AS 
-'
-DECLARE
-	catalog_name alias for $1; 
-	schema_name alias for $2;
-	table_name alias for $3;
-	column_name alias for $4;
-	myrec RECORD;
-	okay boolean;
-	real_schema name;
-
-BEGIN
-
-
-#if USE_VERSION >= 73
-	-- Find, check or fix schema_name
-	IF ( schema_name != '''' ) THEN
-		okay = ''f'';
-
-		FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-			okay := ''t'';
-		END LOOP;
-
-		IF ( okay <> ''t'' ) THEN
-			RAISE NOTICE ''Invalid schema name - using current_schema()'';
-			SELECT current_schema() into real_schema;
-		ELSE
-			real_schema = schema_name;
-		END IF;
-	ELSE
-		SELECT current_schema() into real_schema;
-	END IF;
-#else
-	real_schema = schema_name;
-#endif
-
- 	-- Find out if the column is in the geometry_columns table
-	okay = ''f'';
-	FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP
-		okay := ''t'';
-	END LOOP; 
-	IF (okay <> ''t'') THEN 
-		RAISE EXCEPTION ''column not found in geometry_columns table'';
-		RETURN ''f'';
-	END IF;
-
-	-- Remove ref from geometry_columns table
-	EXECUTE ''delete from geometry_columns where f_table_schema = '' ||
-		quote_literal(real_schema) || '' and f_table_name = '' ||
-		quote_literal(table_name)  || '' and f_geometry_column = '' ||
-		quote_literal(column_name);
-	
-#if USE_VERSION < 73
-	-- Remove not-null constraint to table column 
-	EXECUTE ''update pg_attribute set attnotnull = false from pg_class where pg_attribute.attrelid = pg_class.oid and pg_class.relname = '' || quote_literal(table_name) ||'' and pg_attribute.attname = '' || quote_literal(column_name);
-	-- update the given table/column so that it it all NULLS
-	EXECUTE ''update "''||table_name||''" set "''||column_name||''"= NULL'';
-	-- add = NULL constraint to given table/column
-	EXECUTE ''ALTER TABLE "''||table_name||''" ADD CHECK ("''||column_name||''" IS NULL)'';
-#else
-	-- Remove table column
-	EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) || ''.'' ||
-		quote_ident(table_name) || '' DROP COLUMN '' ||
-		quote_ident(column_name);
-#endif 
-
-
-	RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' effectively removed.'';
-	
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYCOLUMN
---   <schema>, <table>, <column>
------------------------------------------------------------------------
---
--- This is a wrapper to the real DropGeometryColumn, for use
--- when catalogue is undefined
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryColumn(varchar,varchar,varchar)
-	RETURNS text
-	AS 
-'
-DECLARE
-	ret text;
-BEGIN
-	SELECT DropGeometryColumn('''',$1,$2,$3) into ret;
-	RETURN ret;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYCOLUMN
---   <table>, <column>
------------------------------------------------------------------------
---
--- This is a wrapper to the real DropGeometryColumn, for use
--- when catalogue and schema is undefined. 
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryColumn(varchar,varchar)
-	RETURNS text
-	AS 
-'
-DECLARE
-	ret text;
-BEGIN
-	SELECT DropGeometryColumn('''','''',$1,$2) into ret;
-	RETURN ret;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYTABLE
---   <catalogue>, <schema>, <table>
------------------------------------------------------------------------
---
--- Drop a table and all its references in geometry_columns
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryTable(varchar, varchar,varchar)
-	RETURNS text
-	AS 
-'
-DECLARE
-	catalog_name alias for $1; 
-	schema_name alias for $2;
-	table_name alias for $3;
-	real_schema name;
-
-BEGIN
-
-#if USE_VERSION >= 73
-	IF ( schema_name = '''' ) THEN
-		SELECT current_schema() into real_schema;
-	ELSE
-		real_schema = schema_name;
-	END IF;
-#endif
-
-	-- Remove refs from geometry_columns table
-	EXECUTE ''DELETE FROM geometry_columns WHERE '' ||
-#if USE_VERSION >= 73
-		''f_table_schema = '' || quote_literal(real_schema) ||
-		'' AND '' ||
-#endif
-		'' f_table_name = '' || quote_literal(table_name);
-	
-	-- Remove table 
-	EXECUTE ''DROP TABLE ''
-#if USE_VERSION >= 73
-		|| quote_ident(real_schema) || ''.'' ||
-#endif 
-		quote_ident(table_name);
-
-	RETURN
-#if USE_VERSION >= 73
-		real_schema || ''.'' ||
-#endif 
-		table_name ||'' dropped.'';
-	
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYTABLE
---   <schema>, <table>
------------------------------------------------------------------------
---
--- Drop a table and all its references in geometry_columns
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryTable(varchar,varchar) RETURNS text AS 
-'SELECT DropGeometryTable('''',$1,$2)'
-LANGUAGE 'sql' WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYTABLE
---   <table>
------------------------------------------------------------------------
---
--- Drop a table and all its references in geometry_columns
--- For PG>=73 use current_schema()
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryTable(varchar) RETURNS text AS 
-'SELECT DropGeometryTable('''','''',$1)'
-LANGUAGE 'sql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATEGEOMETRYSRID
---   <catalogue>, <schema>, <table>, <column>, <srid>
------------------------------------------------------------------------
---
--- Change SRID of all features in a spatially-enabled table
---
------------------------------------------------------------------------
-CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer)
-	RETURNS text
-	AS 
-'
-DECLARE
-	catalog_name alias for $1; 
-	schema_name alias for $2;
-	table_name alias for $3;
-	column_name alias for $4;
-	new_srid alias for $5;
-	myrec RECORD;
-	okay boolean;
-	cname varchar;
-	real_schema name;
-
-BEGIN
-
-
-#if USE_VERSION >= 73
-	-- Find, check or fix schema_name
-	IF ( schema_name != '''' ) THEN
-		okay = ''f'';
-
-		FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-			okay := ''t'';
-		END LOOP;
-
-		IF ( okay <> ''t'' ) THEN
-			RAISE EXCEPTION ''Invalid schema name'';
-		ELSE
-			real_schema = schema_name;
-		END IF;
-	ELSE
-		SELECT INTO real_schema current_schema()::text;
-	END IF;
-#endif
-
- 	-- Find out if the column is in the geometry_columns table
-	okay = ''f'';
-	FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP
-		okay := ''t'';
-	END LOOP; 
-	IF (okay <> ''t'') THEN 
-		RAISE EXCEPTION ''column not found in geometry_columns table'';
-		RETURN ''f'';
-	END IF;
-
-	-- Update ref from geometry_columns table
-	EXECUTE ''UPDATE geometry_columns SET SRID = '' || new_srid::text || 
-		'' where f_table_schema = '' ||
-		quote_literal(real_schema) || '' and f_table_name = '' ||
-		quote_literal(table_name)  || '' and f_geometry_column = '' ||
-		quote_literal(column_name);
-	
-	-- Make up constraint name
-	cname = ''enforce_srid_''  || column_name;
-
-	-- Drop enforce_srid constraint
-#if USE_VERSION < 73
-	EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
-#else
-	EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-		''.'' || quote_ident(table_name) ||
-#endif
-		'' DROP constraint '' || quote_ident(cname);
-
-	-- Update geometries SRID
-#if USE_VERSION < 73
-	EXECUTE ''UPDATE '' || quote_ident(table_name) ||
-#else
-	EXECUTE ''UPDATE '' || quote_ident(real_schema) ||
-		''.'' || quote_ident(table_name) ||
-#endif
-		'' SET '' || quote_ident(column_name) ||
-		'' = setSRID('' || quote_ident(column_name) ||
-		'', '' || new_srid::text || '')'';
-
-	-- Reset enforce_srid constraint
-#if USE_VERSION < 73
-	EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
-#else
-	EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-		''.'' || quote_ident(table_name) ||
-#endif
-		'' ADD constraint '' || quote_ident(cname) ||
-		'' CHECK (srid('' || quote_ident(column_name) ||
-		'') = '' || new_srid::text || '')'';
-
-	RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' SRID changed to '' || new_srid::text;
-	
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATEGEOMETRYSRID
---   <schema>, <table>, <column>, <srid>
------------------------------------------------------------------------
-CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,integer)
-	RETURNS text
-	AS '
-DECLARE
-	ret  text;
-BEGIN
-	SELECT UpdateGeometrySRID('''',$1,$2,$3,$4) into ret;
-	RETURN ret;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATEGEOMETRYSRID
---   <table>, <column>, <srid>
------------------------------------------------------------------------
-CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,integer)
-	RETURNS text
-	AS '
-DECLARE
-	ret  text;
-BEGIN
-	SELECT UpdateGeometrySRID('''','''',$1,$2,$3) into ret;
-	RETURN ret;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATE_GEOMETRY_STATS()
------------------------------------------------------------------------
---
--- Only meaningful for PG<75.
--- Gather statisticts about geometry columns for use
--- with cost estimator.
---
--- It is defined also for PG>=75 for back-compatibility
---
------------------------------------------------------------------------
-#if USE_VERSION >= 80
-CREATEFUNCTION update_geometry_stats() RETURNS text
-AS ' SELECT ''update_geometry_stats() has been obsoleted. Statistics are automatically built running the ANALYZE command''::text' LANGUAGE 'sql';
-#else
-CREATEFUNCTION update_geometry_stats()
-RETURNS text
-AS
-'
-DECLARE
-	result text;
-	stated integer;
-BEGIN
-
-	UPDATE geometry_columns SET
-#if USE_VERSION >= 73
-		stats = (build_histogram2d(create_histogram2d(
-			find_extent(f_table_schema, f_table_name, f_geometry_column), 40), f_table_schema, f_table_name, f_geometry_column))
-		FROM pg_class c, pg_attribute a, pg_namespace n
-		WHERE n.nspname = f_table_schema::name
-		AND c.relname = f_table_name::name
-		AND c.relnamespace = n.oid
-#else
-		stats = (build_histogram2d(create_histogram2d(
-			find_extent(f_table_name, f_geometry_column),
-			40), f_table_name, f_geometry_column))
-		FROM pg_class c, pg_attribute a
-		WHERE c.relname = f_table_name::name
-#endif
-		AND a.attname = f_geometry_column::name
-		AND a.attrelid = c.oid
-		AND geometry_columns.attrelid is not null;
-
-	GET DIAGNOSTICS stated = ROW_COUNT;
-
-	result = ''stats:'' || stated::text;
-
-	return result;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; 
-#endif
-
------------------------------------------------------------------------
--- UPDATE_GEOMETRY_STATS( <table>, <column> )
------------------------------------------------------------------------
---
--- Only meaningful for PG<75.
--- Gather statisticts about a geometry column for use
--- with cost estimator.
---
--- It is defined also for PG>=75 for back-compatibility
---
------------------------------------------------------------------------
-#if USE_VERSION >= 80
-CREATEFUNCTION update_geometry_stats(varchar,varchar) RETURNS text
-AS 'SELECT update_geometry_stats();' LANGUAGE 'sql' ;
-#else
-CREATEFUNCTION update_geometry_stats(varchar,varchar) RETURNS text
-AS
-'
-DECLARE
-	tablename aliAS for $1;
-	columnname aliAS for $2;
-	stated integer;
-	result text;
-BEGIN
-
-	EXECUTE ''UPDATE geometry_columns SET
-#if USE_VERSION >= 73
-			stats = (build_histogram2d(create_histogram2d(
-				find_extent(f_table_schema,
-					f_table_name,
-					f_geometry_column), 40),
-					f_table_schema, f_table_name,
-					f_geometry_column))
-			FROM pg_class c, pg_attribute a, pg_namespace n
-			WHERE n.nspname = f_table_schema::name
-			AND c.relname = f_table_name::name
-			AND a.attname = f_geometry_column::name
-			AND c.relnamespace = n.oid
-			AND a.attrelid = c.oid
-#else
-			stats = (build_histogram2d(create_histogram2d(
-				find_extent(f_table_name, f_geometry_column),
-				40), f_table_name, f_geometry_column))
-			FROM pg_class c, pg_attribute a
-			WHERE c.relname = f_table_name::name
-			AND a.attname = f_geometry_column::name
-			AND a.attrelid = c.oid
-#endif
-			AND f_table_name = '' || quote_literal(tablename) || ''
-			AND f_geometry_column = '' || quote_literal(columnname)
-			|| '' AND geometry_columns.attrelid is not null'';
-
-	GET DIAGNOSTICS stated = ROW_COUNT;
-
-	result = ''stats:'' || stated::text;
-
-	return result;
-END;
-'
-LANGUAGE 'plpgsql' _VOLATILE_STRICT;
-
-#endif 
-
------------------------------------------------------------------------
--- FIND_SRID( <schema>, <table>, <geom col> )
------------------------------------------------------------------------
-CREATEFUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS
-'DECLARE
-   schem text;
-   tabl text;
-   sr int4;
-BEGIN
-   IF $1 IS NULL THEN
-      RAISE EXCEPTION ''find_srid() - schema is NULL!'';
-   END IF;
-   IF $2 IS NULL THEN
-      RAISE EXCEPTION ''find_srid() - table name is NULL!'';
-   END IF;
-   IF $3 IS NULL THEN
-      RAISE EXCEPTION ''find_srid() - column name is NULL!'';
-   END IF;
-   schem = $1;
-   tabl = $2;
--- if the table contains a . and the schema is empty
--- split the table into a schema and a table
--- otherwise drop through to default behavior
-   IF ( schem = '''' and tabl LIKE ''%.%'' ) THEN
-     schem = substr(tabl,1,strpos(tabl,''.'')-1);
-     tabl = substr(tabl,length(schem)+2);
-   ELSE
-     schem = schem || ''%'';
-   END IF;
-
-   select SRID into sr from geometry_columns where f_table_schema like schem and f_table_name = tabl and f_geometry_column = $3;
-   IF NOT FOUND THEN
-       RAISE EXCEPTION ''find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table?  Is there an uppercase/lowercase missmatch?'';
-   END IF;
-  return sr;
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable); 
-
-
----------------------------------------------------------------
--- PROJ support
----------------------------------------------------------------
-
-CREATEFUNCTION get_proj4_from_srid(integer) RETURNS text AS
-'
-BEGIN
-	RETURN proj4text::text FROM spatial_ref_sys WHERE srid= $1;
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
-
-
-CREATEFUNCTION transform_geometry(geometry,text,text,int)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','transform_geom'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-CREATEFUNCTION transform(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','transform'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: transform(geometry,integer)
-CREATEFUNCTION ST_Transform(geometry,integer)
-    RETURNS geometry
-    AS '@MODULE_FILENAME@','transform'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-
------------------------------------------------------------------------
--- POSTGIS_VERSION()
------------------------------------------------------------------------
-
-CREATEFUNCTION postgis_version() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_proj_version() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
---
--- IMPORTANT:
--- Starting at 1.1.0 this function is used by postgis_proc_upgrade.pl
--- to extract version of postgis being installed.
--- Do not modify this w/out also changing postgis_proc_upgrade.pl
---
-CREATEFUNCTION postgis_scripts_installed() RETURNS text
-        AS 'SELECT ''@POSTGIS_SCRIPTS_VERSION@''::text AS version'
-        LANGUAGE 'sql' _IMMUTABLE;
-
-CREATEFUNCTION postgis_lib_version() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE; -- a new lib will require a new session
-
--- NOTE: starting at 1.1.0 this is the same of postgis_lib_version()
-CREATEFUNCTION postgis_scripts_released() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_uses_stats() RETURNS bool
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_geos_version() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_jts_version() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_scripts_build_date() RETURNS text
-        AS 'SELECT ''@POSTGIS_BUILD_DATE@''::text AS version'
-        LANGUAGE 'sql' _IMMUTABLE;
-
-CREATEFUNCTION postgis_lib_build_date() RETURNS text
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE;
-
-
-
-CREATEFUNCTION postgis_full_version() RETURNS text
-AS '
-DECLARE
-	libver text;
-	projver text;
-	geosver text;
-	jtsver text;
-	usestats bool;
-	dbproc text;
-	relproc text;
-	fullver text;
-BEGIN
-	SELECT postgis_lib_version() INTO libver;
-	SELECT postgis_proj_version() INTO projver;
-	SELECT postgis_geos_version() INTO geosver;
-	SELECT postgis_jts_version() INTO jtsver;
-	SELECT postgis_uses_stats() INTO usestats;
-	SELECT postgis_scripts_installed() INTO dbproc;
-	SELECT postgis_scripts_released() INTO relproc;
-
-	fullver = ''POSTGIS="'' || libver || ''"'';
-
-	IF  geosver IS NOT NULL THEN
-		fullver = fullver || '' GEOS="'' || geosver || ''"'';
-	END IF;
-
-	IF  jtsver IS NOT NULL THEN
-		fullver = fullver || '' JTS="'' || jtsver || ''"'';
-	END IF;
-
-	IF  projver IS NOT NULL THEN
-		fullver = fullver || '' PROJ="'' || projver || ''"'';
-	END IF;
-
-	IF usestats THEN
-		fullver = fullver || '' USE_STATS'';
-	END IF;
-
-	-- fullver = fullver || '' DBPROC="'' || dbproc || ''"'';
-	-- fullver = fullver || '' RELPROC="'' || relproc || ''"'';
-
-	IF dbproc != relproc THEN
-		fullver = fullver || '' (procs from '' || dbproc || '' need upgrade)'';
-	END IF;
-
-	RETURN fullver;
-END
-'
-LANGUAGE 'plpgsql' _IMMUTABLE;
-
----------------------------------------------------------------
--- CASTS
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d(geometry)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d(geometry)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d(geometry)
-        RETURNS box3d
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d(geometry)
-        RETURNS box3d
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box(geometry)
-        RETURNS box
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box(geometry)
-        RETURNS box
-        AS '@MODULE_FILENAME@','LWGEOM_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d(box3d)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','BOX3D_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d(box3d)
-        RETURNS box2d
-        AS '@MODULE_FILENAME@','BOX3D_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d(box2d)
-        RETURNS box3d
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d(box2d)
-        RETURNS box3d
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box(box3d)
-        RETURNS box
-        AS '@MODULE_FILENAME@','BOX3D_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box(box3d)
-        RETURNS box
-        AS '@MODULE_FILENAME@','BOX3D_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION text(geometry)
-        RETURNS text
-        AS '@MODULE_FILENAME@','LWGEOM_to_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_text(geometry)
-        RETURNS text
-        AS '@MODULE_FILENAME@','LWGEOM_to_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- this is kept for backward-compatibility
--- Deprecation in 1.2.3
-CREATEFUNCTION box3dtobox(box3d)
-        RETURNS box
-        AS 'SELECT box($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(box2d)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(box2d)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(box3d)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','BOX3D_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(box3d)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','BOX3D_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(text)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(text)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(chip)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','CHIP_to_LWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(chip)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','CHIP_to_LWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(bytea)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_from_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(bytea)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_from_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION bytea(geometry)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_to_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_bytea(geometry)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_to_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION text(bool)
-	RETURNS text
-	AS '@MODULE_FILENAME@','BOOL_to_text'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_text(bool)
-	RETURNS text
-	AS '@MODULE_FILENAME@','BOOL_to_text'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- 7.3+ explicit casting definitions
-#if USE_VERSION >= 73
-CREATE CAST (geometry AS box2d) WITH FUNCTION ST_box2d(geometry) AS IMPLICIT;
-CREATE CAST (geometry AS box3d) WITH FUNCTION ST_box3d(geometry) AS IMPLICIT;
-CREATE CAST (geometry AS box) WITH FUNCTION ST_box(geometry) AS IMPLICIT;
-CREATE CAST (box3d AS box2d) WITH FUNCTION ST_box2d(box3d) AS IMPLICIT;
-CREATE CAST (box2d AS box3d) WITH FUNCTION ST_box3d(box2d) AS IMPLICIT;
-CREATE CAST (box2d AS geometry) WITH FUNCTION ST_geometry(box2d) AS IMPLICIT;
-CREATE CAST (box3d AS box) WITH FUNCTION ST_box(box3d) AS IMPLICIT;
-CREATE CAST (box3d AS geometry) WITH FUNCTION ST_geometry(box3d) AS IMPLICIT;
-CREATE CAST (text AS geometry) WITH FUNCTION ST_geometry(text) AS IMPLICIT;
-CREATE CAST (geometry AS text) WITH FUNCTION ST_text(geometry) AS IMPLICIT;
-CREATE CAST (chip AS geometry) WITH FUNCTION ST_geometry(chip) AS IMPLICIT;
-CREATE CAST (bytea AS geometry) WITH FUNCTION ST_geometry(bytea) AS IMPLICIT;
-CREATE CAST (geometry AS bytea) WITH FUNCTION ST_bytea(geometry) AS IMPLICIT;
--- CREATE CAST (bool AS text) WITH FUNCTION ST_text(bool) AS IMPLICIT;
-#endif
-
----------------------------------------------------------------
--- Algorithms
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-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)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_simplify2d'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, xoff, yoff, xsize, ysize)
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, xsize, ysize) # offsets=0
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, float8, float8)
-   RETURNS geometry
-   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8)
-   RETURNS geometry
-   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, size) # xsize=ysize=size, offsets=0
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, float8)
-   RETURNS geometry
-   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, float8)
-   RETURNS geometry
-   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize)
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid_pointoff'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid_pointoff'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-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)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_segmentize2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
----------------------------------------------------------------
--- LRS
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION line_interpolate_point(geometry, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_line_interpolate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_line_interpolate_point(geometry, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_line_interpolate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION line_substring(geometry, float8, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_line_substring'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_line_substring(geometry, float8, float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_line_substring'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION line_locate_point(geometry, geometry)
-   RETURNS float8
-   AS '@MODULE_FILENAME@', 'LWGEOM_line_locate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_line_locate_point(geometry, geometry)
-   RETURNS float8
-   AS '@MODULE_FILENAME@', 'LWGEOM_line_locate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION locate_between_measures(geometry, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_locate_between_m'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_locate_between_measures(geometry, float8, float8)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_locate_between_m'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION locate_along_measure(geometry, float8)
-	RETURNS geometry
-	AS 'SELECT locate_between_measures($1, $2, $2)'
-	LANGUAGE 'sql' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_locate_along_measure(geometry, float8)
-	RETURNS geometry
-	AS 'SELECT locate_between_measures($1, $2, $2)'
-	LANGUAGE 'sql' _IMMUTABLE_STRICT;
-
----------------------------------------------------------------
--- GEOS
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION intersection(geometry,geometry)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@','intersection'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: intersection(geometry,geometry)
-CREATEFUNCTION ST_Intersection(geometry,geometry)
-    RETURNS geometry
-    AS '@MODULE_FILENAME@','intersection'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION buffer(geometry,float8)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@','buffer'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: buffer(geometry,float8)
-CREATEFUNCTION ST_Buffer(geometry,float8)
-    RETURNS geometry
-    AS '@MODULE_FILENAME@','buffer'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION buffer(geometry,float8,integer)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@','buffer'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_buffer(geometry,float8,integer)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@','buffer'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-   
--- Deprecation in 1.2.3
-CREATEFUNCTION convexhull(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','convexhull'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: convexhull(geometry)
-CREATEFUNCTION ST_ConvexHull(geometry)
-    RETURNS 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)
-	RETURNS geometry
-        AS '@MODULE_FILENAME@','difference'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: difference(geometry,geometry)
-CREATEFUNCTION ST_Difference(geometry,geometry)
-    RETURNS geometry
-    AS '@MODULE_FILENAME@','difference'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION boundary(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','boundary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: boundary(geometry)
-CREATEFUNCTION ST_Boundary(geometry)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','boundary'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION symdifference(geometry,geometry)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','symdifference'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: symdifference(geometry,geometry)
-CREATEFUNCTION ST_SymDifference(geometry,geometry)
-    RETURNS geometry
-    AS '@MODULE_FILENAME@','symdifference'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION symmetricdifference(geometry,geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','symdifference'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_symmetricdifference(geometry,geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','symdifference'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomUnion(geometry,geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','geomunion'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: GeomUnion(geometry,geometry)
-CREATEFUNCTION ST_Union(geometry,geometry)
-    RETURNS geometry
-    AS '@MODULE_FILENAME@','geomunion'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE MemGeomUnion (
-	basetype = geometry,
-	sfunc = geomunion,
-	stype = geometry
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_MemUnion (
-	basetype = geometry,
-	sfunc = ST_union,
-	stype = geometry
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION unite_garray (geometry[])
-	RETURNS geometry
-        AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_unite_garray (geometry[])
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','unite_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE GeomUnion (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_unite_garray
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Union (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_unite_garray
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION relate(geometry,geometry)
-   RETURNS text
-   AS '@MODULE_FILENAME@','relate_full'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_relate(geometry,geometry)
-   RETURNS text
-   AS '@MODULE_FILENAME@','relate_full'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION relate(geometry,geometry,text)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@','relate_pattern'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: relate(geometry,geometry,text)
-CREATEFUNCTION ST_Relate(geometry,geometry,text)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','relate_pattern'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION disjoint(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-   
--- PostGIS equivalent function: disjoint(geometry,geometry)
-CREATEFUNCTION ST_Disjoint(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','disjoint'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION touches(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: touches(geometry,geometry)
-CREATEFUNCTION _ST_Touches(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','touches'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Touches(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_DWithin(geometry, geometry, float8)
-    RETURNS boolean
-    AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND ST_Distance($1, $2) < $3'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION intersects(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: intersects(geometry,geometry)
-CREATEFUNCTION _ST_Intersects(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','intersects'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Intersects(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
--- Deprecation in 1.2.3
-CREATEFUNCTION crosses(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: crosses(geometry,geometry)
-CREATEFUNCTION _ST_Crosses(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','crosses'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Crosses(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION within(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: within(geometry,geometry)
-CREATEFUNCTION _ST_Within(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','within'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Within(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Within($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Contains(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: contains(geometry,geometry)
-CREATEFUNCTION _ST_Contains(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','contains'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Contains(geometry,geometry)
-    RETURNS boolean
-    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
-   AS '@MODULE_FILENAME@', 'coveredby'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_CoveredBy(geometry,geometry)
-   RETURNS boolean
-   AS 'SELECT $1 && $2 AND _ST_CoveredBy($1,$2)'
-   LANGUAGE 'SQL' _IMMUTABLE; -- WITH(iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION _ST_Covers(geometry,geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@', 'covers'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-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)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: overlaps(geometry,geometry)
-CREATEFUNCTION _ST_Overlaps(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','overlaps'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Overlaps(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsValid(geometry)
-   RETURNS boolean
-   AS '@MODULE_FILENAME@', 'isvalid'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: IsValid(geometry)
--- TODO: change null returns to true
-CREATEFUNCTION ST_IsValid(geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@', 'isvalid'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GEOSnoop(geometry)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'GEOSnoop'
-   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION JTSnoop(geometry)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'JTSnoop'
-   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
-
--- This is also available w/out GEOS 
-CREATEFUNCTION Centroid(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: Centroid(geometry)
-CREATEFUNCTION ST_Centroid(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'centroid'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsRing(geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: IsRing(geometry)
-CREATEFUNCTION ST_IsRing(geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@', 'isring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointOnSurface(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PointOnSurface(geometry)
-CREATEFUNCTION ST_PointOnSurface(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'pointonsurface'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsSimple(geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@', 'issimple'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: IsSimple(geometry)	
-CREATEFUNCTION ST_IsSimple(geometry)
-        RETURNS boolean
-        AS '@MODULE_FILENAME@', 'issimple'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Equals(geometry,geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@','geomequals'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: Equals(geometry,geometry)
-CREATEFUNCTION ST_Equals(geometry,geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@','geomequals'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- Prepared Geometry Predicates
--- 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.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.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.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.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.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
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION AsSVG(geometry,int4,int4)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsSVG(geometry,int4,int4)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsSVG(geometry,int4)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsSVG(geometry,int4)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsSVG(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsSVG(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- GML OUTPUT
------------------------------------------------------------------------
--- _ST_AsGML(version, geom, precision)
-CREATEFUNCTION _ST_AsGML(int4, geometry, int4)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asGML'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsGML(geom, precision) / version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsGML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsGML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsGML(geom) / precision=15 version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsGML(geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availabiltiy: 1.2.2
-CREATEFUNCTION ST_AsGML(geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGML(version, geom) / precision=15 version=2
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsGML(int4, geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML($1, $2, 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGML(version, geom, precision)
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsGML(int4, geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML($1, $2, $3)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- KML OUTPUT
------------------------------------------------------------------------
--- _ST_AsKML(version, geom, precision)
-CREATEFUNCTION _ST_AsKML(int4, geometry, int4)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asKML'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-#ifdef USE_PROJ
--- AsKML(geom, precision) / version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsKML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, transform($1,4326), $2)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsKML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, transform($1,4326), $2)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsKML(geom) / precision=15 version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsKML(geometry) 
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, transform($1,4326), 15)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsKML(version, geom, precision)
--- Deprecation in 1.2.3
-CREATEFUNCTION AsKML(int4, geometry, int4) 
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML($1, transform($2,4326), $3)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availabiltiy: 1.2.2
-CREATEFUNCTION ST_AsKML(geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, transform($1,4326), 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsKML(version, geom) / precision=15 version=2
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsKML(int4, geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML($1, transform($2,4326), 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsKML(version, geom, precision)
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsKML(int4, geometry, int4) 
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML($1, transform($2,4326), $3)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-#endif
-
------------------------------------------------------------------------
--- GEOJSON OUTPUT
--- Availabiltiy: 1.3.4
------------------------------------------------------------------------
--- _ST_AsGeoJson(version, geom, precision, options)
-CREATEFUNCTION _ST_AsGeoJson(int4, geometry, int4, int4)
-        RETURNS TEXT
-        AS '@MODULE_FILENAME@','LWGEOM_asGeoJson'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(geom, precision) / version=1 options=0
-CREATEFUNCTION ST_AsGeoJson(geometry, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson(1, $1, $2, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(geom) / precision=15 version=1 options=0
-CREATEFUNCTION ST_AsGeoJson(geometry)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson(1, $1, 15, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(version, geom) / precision=15 options=0
-CREATEFUNCTION ST_AsGeoJson(int4, geometry)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson($1, $2, 15, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(version, geom, precision) / options=0
-CREATEFUNCTION ST_AsGeoJson(int4, geometry, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson($1, $2, $3, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(geom, precision, options) / version=1
-CREATEFUNCTION ST_AsGeoJson(geometry, int4, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson(1, $1, $2, $3)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(version, geom, precision,options)
-CREATEFUNCTION ST_AsGeoJson(int4, geometry, int4, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson($1, $2, $3, $4)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-
-------------------------------------------------------------------------
--- OGC defined
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumPoints(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_numpoints_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: NumPoints(geometry)
-CREATEFUNCTION ST_NumPoints(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_numpoints_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumGeometries(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_numgeometries_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: NumGeometries(geometry)
-CREATEFUNCTION ST_NumGeometries(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_numgeometries_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryN(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_geometryn_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: GeometryN(geometry)
-CREATEFUNCTION ST_GeometryN(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_geometryn_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Dimension(geometry)
-	RETURNS int4
-	AS '@MODULE_FILENAME@', 'LWGEOM_dimension'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: Dimension(geometry)
-CREATEFUNCTION ST_Dimension(geometry)
-    RETURNS int4
-    AS '@MODULE_FILENAME@', 'LWGEOM_dimension'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ExteriorRing(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_exteriorring_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: ExteriorRing(geometry)
-CREATEFUNCTION ST_ExteriorRing(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_exteriorring_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumInteriorRings(geometry)
-	RETURNS integer
-	AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: NumInteriorRings(geometry)
-CREATEFUNCTION ST_NumInteriorRings(geometry)
-	RETURNS integer
-	AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumInteriorRing(geometry)
-	RETURNS integer
-	AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_NumInteriorRing(geometry)
-	RETURNS integer
-	AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION InteriorRingN(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_interiorringn_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: InteriorRingN(geometry)
-CREATEFUNCTION ST_InteriorRingN(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_interiorringn_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryType(geometry)
-	RETURNS text
-	AS '@MODULE_FILENAME@', 'LWGEOM_getTYPE'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Not quite equivalent to GeometryType
-CREATEFUNCTION ST_GeometryType(geometry)
-    RETURNS text
-    AS '
-    DECLARE
-        gtype text := geometrytype($1);
-    BEGIN
-        IF (gtype IN (''POINT'', ''POINTM'')) THEN
-            gtype := ''Point'';
-        ELSIF (gtype IN (''LINESTRING'', ''LINESTRINGM'')) THEN
-            gtype := ''LineString'';
-        ELSIF (gtype IN (''POLYGON'', ''POLYGONM'')) THEN
-            gtype := ''Polygon'';
-        ELSIF (gtype IN (''MULTIPOINT'', ''MULTIPOINTM'')) THEN
-            gtype := ''MultiPoint'';
-        ELSIF (gtype IN (''MULTILINESTRING'', ''MULTILINESTRINGM'')) THEN
-            gtype := ''MultiLineString'';
-        ELSIF (gtype IN (''MULTIPOLYGON'', ''MULTIPOLYGONM'')) THEN
-            gtype := ''MultiPolygon'';
-        ELSE
-            gtype := ''Geometry'';
-        END IF;
-        RETURN ''ST_'' || gtype;
-    END
-	'
-	LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointN(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_pointn_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: PointN(geometry,integer)
-CREATEFUNCTION ST_PointN(geometry,integer)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_pointn_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION X(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_x_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: X(geometry)
-CREATEFUNCTION ST_X(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_x_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Y(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_y_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-        
--- PostGIS equivalent function: Y(geometry)
-CREATEFUNCTION ST_Y(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_y_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Z(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_z_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: Z(geometry)
-CREATEFUNCTION SE_Z(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_z_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Z(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_z_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION M(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_m_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_M(geometry)
-	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_m_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION StartPoint(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_startpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: StartPoint(geometry))
-CREATEFUNCTION ST_StartPoint(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_startpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION EndPoint(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_endpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: EndPoint(geometry))
-CREATEFUNCTION ST_EndPoint(geometry)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_endpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsClosed(geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@', 'LWGEOM_isclosed_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: IsClosed(geometry)
-CREATEFUNCTION ST_IsClosed(geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@', 'LWGEOM_isclosed_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsEmpty(geometry)
-	RETURNS boolean
-	AS '@MODULE_FILENAME@', 'LWGEOM_isempty'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: IsEmpty(geometry)
-CREATEFUNCTION ST_IsEmpty(geometry)
-    RETURNS boolean
-    AS '@MODULE_FILENAME@', 'LWGEOM_isempty'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION SRID(geometry) 
-	RETURNS int4
-	AS '@MODULE_FILENAME@','LWGEOM_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: getSRID(geometry)
-CREATEFUNCTION ST_SRID(geometry) 
-    RETURNS int4
-    AS '@MODULE_FILENAME@','LWGEOM_getSRID'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION SetSRID(geometry,int4) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_setSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);	
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SetSRID(geometry,int4) 
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_setSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);	
-	
--- Deprecation in 1.2.3
-CREATEFUNCTION AsBinary(geometry)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_asBinary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: AsBinary(geometry)
-CREATEFUNCTION ST_AsBinary(geometry)
-    RETURNS bytea
-    AS '@MODULE_FILENAME@','LWGEOM_asBinary'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsBinary(geometry,text)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_asBinary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsBinary(geometry,text)
-	RETURNS bytea
-	AS '@MODULE_FILENAME@','LWGEOM_asBinary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsText(geometry)
-	RETURNS TEXT
-	AS '@MODULE_FILENAME@','LWGEOM_asText'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: AsText(geometry)
-CREATEFUNCTION ST_AsText(geometry)
-    RETURNS TEXT
-    AS '@MODULE_FILENAME@','LWGEOM_asText'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryFromText(text)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeometryFromText(text)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryFromText(text, int4)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeometryFromText(text, int4)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromText(text)
-	RETURNS geometry AS 'SELECT geometryfromtext($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromText(text)
-	RETURNS geometry AS 'SELECT geometryfromtext($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromText(text, int4)
-	RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: GeometryFromText(text, int4)
-CREATEFUNCTION ST_GeomFromText(text, int4)
-	RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PointFromText(text, int4)
--- TODO: improve this ... by not duplicating constructor time.
-CREATEFUNCTION ST_PointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
-	THEN GeomFromText($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: LineFromText(text, int4)
-CREATEFUNCTION ST_LineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineStringFromText(text)
-	RETURNS geometry
-	AS 'SELECT LineFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineStringFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT LineFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-        
--- PostGIS equivalent function: PolyFromText(text, int4)
-CREATEFUNCTION ST_PolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
-	THEN GeomFromText($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MLineFromText(text, int4)
-CREATEFUNCTION ST_MLineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MLineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineStringFromText(text)
-	RETURNS geometry
-	AS 'SELECT MLineFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiLineStringFromText(text)
-	RETURNS geometry
-	AS 'SELECT MLineFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineStringFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MLineFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiLineStringFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MLineFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPointFromText(text, int4)
-CREATEFUNCTION ST_MPointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOINT''
-	THEN GeomFromText($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MPointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPolyFromText(text, int4)
-CREATEFUNCTION ST_MPolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
---Availability: 1.2.2
-CREATEFUNCTION ST_MPolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromWKB(bytea)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_from_WKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromWKB(bytea)
-	RETURNS geometry
-	AS '@MODULE_FILENAME@','LWGEOM_from_WKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromWKB(bytea, int)
-	RETURNS geometry
-	AS 'SELECT setSRID(GeomFromWKB($1), $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: GeomFromWKB(bytea, int)
-CREATEFUNCTION ST_GeomFromWKB(bytea, int)
-	RETURNS geometry
-	AS 'SELECT setSRID(GeomFromWKB($1), $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PointFromWKB(bytea, int)
-CREATEFUNCTION ST_PointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: LineFromWKB(text, int)
-CREATEFUNCTION ST_LineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LinestringFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LinestringFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LinestringFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LinestringFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PolyFromWKB(text, int)
-CREATEFUNCTION ST_PolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPointFromWKB(text, int)
-CREATEFUNCTION ST_MPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION MultiLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MLineFromWKB(text, int)
-CREATEFUNCTION ST_MLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPolyFromWKB(text, int)
-CREATEFUNCTION ST_MPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
---
--- SFSQL 1.1
---
--- BdPolyFromText(multiLineStringTaggedText String, SRID Integer): Polygon
---
---  Construct a Polygon given an arbitrary
---  collection of closed linestrings as a
---  MultiLineString text representation.
---
--- This is a PLPGSQL function rather then an SQL function
--- To avoid double call of BuildArea (one to get GeometryType
--- and another to actual return, in a CASE WHEN construct).
--- Also, we profit from plpgsql to RAISE exceptions.
---
--- Deprecation in 1.2.3
-CREATE OR REPLACE FUNCTION BdPolyFromText(text, integer)
-RETURNS geometry
-AS '
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION ''Input is not a MultiLinestring'';
-	END IF;
-
-	geom := BuildArea(mline);
-
-	IF GeometryType(geom) != ''POLYGON''
-	THEN
-		RAISE EXCEPTION ''Input returns more then a single polygon, try using BdMPolyFromText instead'';
-	END IF;
-
-	RETURN geom;
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_BdPolyFromText(text, integer)
-RETURNS geometry
-AS '
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION ''Input is not a MultiLinestring'';
-	END IF;
-
-	geom := BuildArea(mline);
-
-	IF GeometryType(geom) != ''POLYGON''
-	THEN
-		RAISE EXCEPTION ''Input returns more then a single polygon, try using BdMPolyFromText instead'';
-	END IF;
-
-	RETURN geom;
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
---
--- SFSQL 1.1
---
--- BdMPolyFromText(multiLineStringTaggedText String, SRID Integer): MultiPolygon
---
---  Construct a MultiPolygon given an arbitrary
---  collection of closed linestrings as a
---  MultiLineString text representation.
---
--- This is a PLPGSQL function rather then an SQL function
--- To raise an exception in case of invalid input.
---
--- Deprecation in 1.2.3
-CREATEFUNCTION BdMPolyFromText(text, integer)
-RETURNS geometry
-AS '
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION ''Input is not a MultiLinestring'';
-	END IF;
-
-	geom := multi(BuildArea(mline));
-
-	RETURN geom;
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_BdMPolyFromText(text, integer)
-RETURNS geometry
-AS '
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION ''Input is not a MultiLinestring'';
-	END IF;
-
-	geom := multi(BuildArea(mline));
-
-	RETURN geom;
-END;
-'
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
-#include "long_xact.sql.in"
-#include "sqlmm.sql.in"
-
----------------------------------------------------------------
--- SQL-MM
----------------------------------------------------------------
-
---
--- SQL-MM
---
--- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
---
--- Converts a given geometry to a linear geometry.  Each curveed
--- geometry or segment is converted into a linear approximation using
--- the given number of segments per quarter circle.
-CREATEFUNCTION ST_CurveToLine(geometry, integer)
-   RETURNS geometry
-   AS '@MODULE_FILENAME@', 'LWGEOM_curve_segmentize'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
---
--- SQL-MM
---
--- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
---
--- Converts a given geometry to a linear geometry.  Each curveed
--- geometry or segment is converted into a linear approximation using
--- the default value of 32 segments per quarter circle
-CREATEFUNCTION ST_CurveToLine(geometry)
-	RETURNS geometry AS 'SELECT ST_CurveToLine($1, 32)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-CREATEFUNCTION ST_HasArc(geometry)
- 	RETURNS boolean
-	AS '@MODULE_FILENAME@', 'LWGEOM_has_arc'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATEFUNCTION ST_LineToCurve(geometry)
-        RETURNS geometry
-        AS '@MODULE_FILENAME@', 'LWGEOM_line_desegmentize'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; 
----------------------------------------------------------------
--- END
----------------------------------------------------------------
-
-COMMIT;
-

Added: trunk/lwgeom/lwpostgis.sql.in.c
===================================================================
--- trunk/lwgeom/lwpostgis.sql.in.c	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/lwpostgis.sql.in.c	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,6341 @@
+-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+-- 
+-- $Id: lwpostgis.sql.in 2772 2008-04-24 01:04:52Z pramsey $
+--
+-- PostGIS - Spatial Types for PostgreSQL
+-- http://postgis.refractions.net
+-- Copyright 2001-2003 Refractions Research Inc.
+--
+-- This is free software; you can redistribute and/or modify it under
+-- the terms of the GNU General Public Licence. See the COPYING file.
+--  
+-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+--
+-- WARNING: Any change in this file must be evaluated for compatibility.
+--          Changes cleanly handled by lwpostgis_uptrade.sql are fine,
+--	    other changes will require a bump in Major version.
+--	    Currently only function replaceble by CREATE OR REPLACE
+--	    are cleanly handled.
+--
+-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+#include "sqldefines.h"
+
+BEGIN;
+
+-------------------------------------------------------------------
+--  HISTOGRAM2D TYPE (lwhistogram2d)
+-------------------------------------------------------------------
+
+#if POSTGIS_PGSQL_VERSION < 73
+# define HISTOGRAM_IN_REP opaque
+# define HISTOGRAM_OUT_REP opaque
+#else
+# define HISTOGRAM_IN_REP histogram2d
+# define HISTOGRAM_OUT_REP cstring
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION histogram2d_in(HISTOGRAM_OUT_REP)
+	RETURNS HISTOGRAM_IN_REP
+	AS 'MODULE_PATHNAME', 'lwhistogram2d_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_histogram2d_in(HISTOGRAM_OUT_REP)
+	RETURNS HISTOGRAM_IN_REP
+	AS 'MODULE_PATHNAME', 'lwhistogram2d_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION histogram2d_out(HISTOGRAM_IN_REP)
+	RETURNS HISTOGRAM_OUT_REP
+	AS 'MODULE_PATHNAME', 'lwhistogram2d_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_histogram2d_out(HISTOGRAM_IN_REP)
+	RETURNS HISTOGRAM_OUT_REP
+	AS 'MODULE_PATHNAME', 'lwhistogram2d_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+CREATE TYPE histogram2d (
+	alignment = double,
+	internallength = variable,
+	input = ST_histogram2d_in,
+	output = ST_histogram2d_out,
+	storage = main
+);
+
+-------------------------------------------------------------------
+--  SPHEROID TYPE
+-------------------------------------------------------------------
+
+#if POSTGIS_PGSQL_VERSION < 73
+# define SPHEROID_IN_REP opaque
+# define SPHEROID_OUT_REP opaque
+#else
+# define SPHEROID_IN_REP spheroid
+# define SPHEROID_OUT_REP cstring
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION spheroid_in(SPHEROID_OUT_REP)
+	RETURNS SPHEROID_IN_REP
+	AS 'MODULE_PATHNAME','ellipsoid_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_spheroid_in(SPHEROID_OUT_REP)
+	RETURNS SPHEROID_IN_REP
+	AS 'MODULE_PATHNAME','ellipsoid_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION spheroid_out(SPHEROID_IN_REP)
+	RETURNS SPHEROID_OUT_REP
+	AS 'MODULE_PATHNAME','ellipsoid_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_spheroid_out(SPHEROID_IN_REP)
+	RETURNS SPHEROID_OUT_REP
+	AS 'MODULE_PATHNAME','ellipsoid_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+CREATE TYPE spheroid (
+	alignment = double,
+	internallength = 65,
+	input = ST_spheroid_in,
+	output = ST_spheroid_out
+);
+
+-------------------------------------------------------------------
+--  GEOMETRY TYPE (lwgeom)
+-------------------------------------------------------------------
+
+#if POSTGIS_PGSQL_VERSION < 73
+# define GEOMETRY_IN_REP opaque
+# define GEOMETRY_OUT_REP opaque
+#else
+# define GEOMETRY_IN_REP geometry
+# define GEOMETRY_OUT_REP cstring
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_in(GEOMETRY_OUT_REP)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','LWGEOM_in'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_in(GEOMETRY_OUT_REP)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','LWGEOM_in'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_out(GEOMETRY_IN_REP)
+        RETURNS cstring
+        AS 'MODULE_PATHNAME','LWGEOM_out'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_out(GEOMETRY_IN_REP)
+        RETURNS cstring
+        AS 'MODULE_PATHNAME','LWGEOM_out'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+#if POSTGIS_PGSQL_VERSION >= 80
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_analyze(internal)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_analyze'
+	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_analyze(internal)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_analyze'
+	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
+#endif
+
+#if POSTGIS_PGSQL_VERSION > 73
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_recv(internal)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_recv'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_recv(internal)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_recv'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_send(geometry)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_send'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_send(geometry)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_send'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+#endif
+
+CREATE TYPE geometry (
+        internallength = variable,
+        input = ST_geometry_in,
+        output = ST_geometry_out,
+#if POSTGIS_PGSQL_VERSION > 73
+	send = ST_geometry_send,
+	receive = ST_geometry_recv,
+#endif
+	delimiter = ':',
+#if POSTGIS_PGSQL_VERSION >= 80
+	analyze = ST_geometry_analyze,
+#endif 
+        storage = main
+);
+
+-------------------------------------------
+-- Affine transforms
+-------------------------------------------
+
+-- Availability: 1.1.2
+-- Deprecation in 1.2.3
+CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_affine'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_affine'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.2
+-- Deprecation in 1.2.3
+CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8)
+	RETURNS geometry
+	AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8)
+	RETURNS geometry
+	AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.2
+-- Deprecation in 1.2.3
+CREATEFUNCTION RotateZ(geometry,float8)
+	RETURNS geometry
+	AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_RotateZ(geometry,float8)
+	RETURNS geometry
+	AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.2
+-- Deprecation in 1.2.3
+CREATEFUNCTION Rotate(geometry,float8)
+	RETURNS geometry
+	AS 'SELECT rotateZ($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Rotate(geometry,float8)
+	RETURNS geometry
+	AS 'SELECT rotateZ($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.2
+-- Deprecation in 1.2.3
+CREATEFUNCTION RotateX(geometry,float8)
+	RETURNS geometry
+ 	AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_RotateX(geometry,float8)
+	RETURNS geometry
+ 	AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.2
+-- Deprecation in 1.2.3
+CREATEFUNCTION RotateY(geometry,float8)
+	RETURNS geometry
+ 	AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_RotateY(geometry,float8)
+	RETURNS geometry
+ 	AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Translate(geometry,float8,float8,float8)
+	RETURNS geometry
+ 	AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Translate(geometry,float8,float8,float8)
+	RETURNS geometry
+ 	AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Translate(geometry,float8,float8)
+	RETURNS geometry
+	AS 'SELECT translate($1, $2, $3, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Translate(geometry,float8,float8)
+	RETURNS geometry
+	AS 'SELECT translate($1, $2, $3, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT;
+
+-- Availability: 1.1.0
+-- Deprecation in 1.2.3
+CREATEFUNCTION Scale(geometry,float8,float8,float8)
+	RETURNS geometry
+	AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Scale(geometry,float8,float8,float8)
+	RETURNS geometry
+	AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.0
+-- Deprecation in 1.2.3
+CREATEFUNCTION Scale(geometry,float8,float8)
+	RETURNS geometry
+	AS 'SELECT scale($1, $2, $3, 1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Scale(geometry,float8,float8)
+	RETURNS geometry
+	AS 'SELECT scale($1, $2, $3, 1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.1.0 
+-- Deprecation in 1.2.3
+CREATEFUNCTION transscale(geometry,float8,float8,float8,float8)
+        RETURNS geometry
+        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0, 
+		0, 0, 1,  $2 * $4, $3 * $5, 0)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2 
+CREATEFUNCTION ST_transscale(geometry,float8,float8,float8,float8)
+        RETURNS geometry
+        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0, 
+		0, 0, 1,  $2 * $4, $3 * $5, 0)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
+
+-- Availability: 1.1.0
+-- Deprecation in 1.2.3
+CREATEFUNCTION shift_longitude(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_longitude_shift'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_shift_longitude(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_longitude_shift'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; 
+
+-------------------------------------------------------------------
+--  BOX3D TYPE
+-------------------------------------------------------------------
+
+#if POSTGIS_PGSQL_VERSION < 73
+# define BOX3D_IN_REP opaque
+# define BOX3D_OUT_REP opaque
+#else
+# define BOX3D_IN_REP box3d
+# define BOX3D_OUT_REP cstring
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box3d_in(BOX3D_OUT_REP)
+	RETURNS BOX3D_IN_REP
+	AS 'MODULE_PATHNAME', 'BOX3D_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box3d_out(BOX3D_IN_REP)
+	RETURNS BOX3D_OUT_REP
+	AS 'MODULE_PATHNAME', 'BOX3D_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box3d_in(BOX3D_OUT_REP)
+	RETURNS BOX3D_IN_REP
+	AS 'MODULE_PATHNAME', 'BOX3D_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box3d_out(BOX3D_IN_REP)
+	RETURNS BOX3D_OUT_REP
+	AS 'MODULE_PATHNAME', 'BOX3D_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+CREATE TYPE box3d (
+	alignment = double,
+	internallength = 48,
+	input = ST_box3d_in,
+	output = ST_box3d_out
+);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION xmin(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_xmin'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_XMin(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_xmin'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION ymin(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_ymin'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_YMin(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_ymin'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION zmin(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_zmin'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_ZMin(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_zmin'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION xmax(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_xmax'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_XMax(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_xmax'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION ymax(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_ymax'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_YMax(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_ymax'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION zmax(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_zmax'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_ZMax(box3d)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','BOX3D_zmax'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-------------------------------------------------------------------
+--  CHIP TYPE
+-------------------------------------------------------------------
+
+#if POSTGIS_PGSQL_VERSION < 73
+# define CHIP_IN_REP opaque
+# define CHIP_OUT_REP opaque
+#else
+# define CHIP_IN_REP chip
+# define CHIP_OUT_REP cstring
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION chip_in(CHIP_OUT_REP)
+	RETURNS CHIP_IN_REP
+	AS 'MODULE_PATHNAME','CHIP_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+        
+-- Availability: 1.2.2
+CREATEFUNCTION ST_chip_in(CHIP_OUT_REP)
+	RETURNS CHIP_IN_REP
+	AS 'MODULE_PATHNAME','CHIP_in'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION chip_out(CHIP_IN_REP)
+	RETURNS CHIP_OUT_REP
+	AS 'MODULE_PATHNAME','CHIP_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_chip_out(CHIP_IN_REP)
+	RETURNS CHIP_OUT_REP
+	AS 'MODULE_PATHNAME','CHIP_out'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+CREATE TYPE chip (
+	alignment = double,
+	internallength = variable,
+	input = ST_chip_in,
+	output = ST_chip_out,
+	storage = extended
+);
+
+-----------------------------------------------------------------------
+-- BOX2D
+-----------------------------------------------------------------------
+
+
+#if POSTGIS_PGSQL_VERSION < 73
+# define BOX2D_IN_REP opaque
+# define BOX2D_OUT_REP opaque
+#else
+# define BOX2D_IN_REP box2d
+# define BOX2D_OUT_REP cstring
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_in(BOX2D_OUT_REP)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_in'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_in(BOX2D_OUT_REP)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_in'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_out(BOX2D_IN_REP)
+        RETURNS cstring
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_out'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_out(BOX2D_IN_REP)
+        RETURNS cstring
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_out'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+CREATE TYPE box2d (
+        internallength = 16,
+        input = ST_box2d_in,
+        output = ST_box2d_out,
+        storage = plain
+);
+
+---- BOX2D  support functions
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_overleft(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_overleft'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_overleft(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_overleft'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_overright(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_overright' 
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_overright(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_overright' 
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_left(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_left' 
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_left(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_left' 
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_right(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_right' 
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_right(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_right' 
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_contain(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_contain'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_contain(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_contain'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_contained(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_contained'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_contained(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_contained'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_overlap(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_overlap'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_overlap(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_overlap'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_same(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_same'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_same(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_same'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d_intersects(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_intersects'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d_intersects(box2d, box2d) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'BOX2D_intersects'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+
+-- lwgeom  operator support functions
+
+-------------------------------------------------------------------
+-- BTREE indexes
+-------------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_lt(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_lt'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_lt(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_lt'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_le(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_le'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_le(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_le'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_gt(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_gt'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_gt(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_gt'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_ge(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_ge'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_ge(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_ge'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_eq(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_eq'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_eq(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'lwgeom_eq'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_cmp(geometry, geometry) 
+	RETURNS integer
+	AS 'MODULE_PATHNAME', 'lwgeom_cmp'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_cmp(geometry, geometry) 
+	RETURNS integer
+	AS 'MODULE_PATHNAME', 'lwgeom_cmp'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+--
+-- Sorting operators for Btree
+--
+
+CREATE OPERATOR < (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_lt,
+   COMMUTATOR = '>', NEGATOR = '>=',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+CREATE OPERATOR <= (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_le,
+   COMMUTATOR = '>=', NEGATOR = '>',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+CREATE OPERATOR = (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_eq,
+   COMMUTATOR = '=', -- we might implement a faster negator here
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+CREATE OPERATOR >= (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_ge,
+   COMMUTATOR = '<=', NEGATOR = '<',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+CREATE OPERATOR > (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_gt,
+   COMMUTATOR = '<', NEGATOR = '<=',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+#if POSTGIS_PGSQL_VERSION >= 74
+
+CREATE OPERATOR CLASS btree_geometry_ops
+	DEFAULT FOR TYPE geometry USING btree AS
+	OPERATOR	1	< ,
+	OPERATOR	2	<= ,
+	OPERATOR	3	= ,
+	OPERATOR	4	>= ,
+	OPERATOR	5	> ,
+	FUNCTION	1	geometry_cmp (geometry, geometry);
+
+#endif
+
+
+-------------------------------------------------------------------
+-- GiST indexes
+-------------------------------------------------------------------
+-- Deprecation in 1.2.3
+#if POSTGIS_PGSQL_VERSION < 73
+CREATEFUNCTION postgis_gist_sel(opaque, oid,  opaque, int4)
+#else
+CREATEFUNCTION postgis_gist_sel (internal, oid, internal, int4)
+#endif
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_gist_sel'
+	LANGUAGE 'C';
+
+-- Availability: 1.2.2
+#if POSTGIS_PGSQL_VERSION < 73
+CREATEFUNCTION ST_postgis_gist_sel(opaque, oid,  opaque, int4)
+#else
+CREATEFUNCTION ST_postgis_gist_sel (internal, oid, internal, int4)
+#endif
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_gist_sel'
+	LANGUAGE 'C';
+
+-- Deprecation in 1.2.3
+#if POSTGIS_PGSQL_VERSION == 72
+CREATEFUNCTION postgis_gist_joinsel(opaque, oid,  opaque)
+#elif POSTGIS_PGSQL_VERSION == 73
+CREATEFUNCTION postgis_gist_joinsel(internal, oid,  internal)
+#else
+CREATEFUNCTION postgis_gist_joinsel(internal, oid, internal, smallint)
+#endif
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_gist_joinsel'
+	LANGUAGE 'C';
+
+-- Availability: 1.2.2
+#if POSTGIS_PGSQL_VERSION == 72
+CREATEFUNCTION ST_postgis_gist_joinsel(opaque, oid,  opaque)
+#elif POSTGIS_PGSQL_VERSION == 73
+CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid,  internal)
+#else
+CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid, internal, smallint)
+#endif
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_gist_joinsel'
+	LANGUAGE 'C';
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_overleft(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overleft'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_overleft(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overleft'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_overright(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overright'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_overright(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overright'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_overabove(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overabove'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_overabove(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overabove'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_overbelow(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overbelow'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_overbelow(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overbelow'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_left(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_left'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_left(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_left'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_right(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_right'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_right(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_right'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_above(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_above'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_above(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_above'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_below(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_below'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_below(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_below'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_contain(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_contain'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_contain(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_contain'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_contained(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_contained'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_contained(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_contained'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_overlap(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overlap'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry_overlap(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_overlap'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry_same(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_same'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+--Availability: 1.2.2
+CREATEFUNCTION ST_geometry_same(geometry, geometry) 
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_same'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- GEOMETRY operators
+
+CREATE OPERATOR << (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_left,
+   COMMUTATOR = '>>',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR &< (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overleft,
+   COMMUTATOR = '&>',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR <<| (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_below,
+   COMMUTATOR = '|>>',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR &<| (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overbelow,
+   COMMUTATOR = '|&>',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR && (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overlap,
+   COMMUTATOR = '&&',
+   RESTRICT = ST_postgis_gist_sel, JOIN = ST_postgis_gist_joinsel
+);
+
+CREATE OPERATOR &> (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overright,
+   COMMUTATOR = '&<',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR >> (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_right,
+   COMMUTATOR = '<<',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR |&> (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overabove,
+   COMMUTATOR = '&<|',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR |>> (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_above,
+   COMMUTATOR = '<<|',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR ~= (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_same,
+   COMMUTATOR = '~=', 
+   RESTRICT = eqsel, JOIN = eqjoinsel
+);
+
+CREATE OPERATOR @ (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contained,
+   COMMUTATOR = '~',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+CREATE OPERATOR ~ (
+   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contain,
+   COMMUTATOR = '@',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+-- gist support functions
+
+#if POSTGIS_PGSQL_VERSION < 73
+#define OPAQUE_TYPE opaque
+#else
+#define OPAQUE_TYPE internal
+#endif
+
+CREATEFUNCTION LWGEOM_gist_consistent(OPAQUE_TYPE,geometry,int4) 
+	RETURNS bool 
+	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_consistent'
+	LANGUAGE 'C';
+
+CREATEFUNCTION LWGEOM_gist_compress(OPAQUE_TYPE) 
+	RETURNS OPAQUE_TYPE 
+	AS 'MODULE_PATHNAME','LWGEOM_gist_compress'
+	LANGUAGE 'C';
+
+CREATEFUNCTION LWGEOM_gist_penalty(OPAQUE_TYPE,OPAQUE_TYPE,OPAQUE_TYPE) 
+	RETURNS OPAQUE_TYPE 
+	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_penalty'
+	LANGUAGE 'C';
+
+CREATEFUNCTION LWGEOM_gist_picksplit(OPAQUE_TYPE, OPAQUE_TYPE) 
+	RETURNS OPAQUE_TYPE 
+	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_picksplit'
+	LANGUAGE 'C';
+
+CREATEFUNCTION LWGEOM_gist_union(bytea, OPAQUE_TYPE) 
+	RETURNS OPAQUE_TYPE 
+	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_union'
+	LANGUAGE 'C';
+
+CREATEFUNCTION LWGEOM_gist_same(box2d, box2d, OPAQUE_TYPE) 
+	RETURNS OPAQUE_TYPE 
+	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_same'
+	LANGUAGE 'C';
+
+CREATEFUNCTION LWGEOM_gist_decompress(OPAQUE_TYPE) 
+	RETURNS OPAQUE_TYPE
+	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_decompress'
+	LANGUAGE 'C';
+
+-------------------------------------------
+-- GIST opclass index binding entries.
+-------------------------------------------
+
+#if POSTGIS_PGSQL_VERSION == 72
+
+--
+-- Create opclass index binding entries for PG72
+--
+
+INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
+    VALUES (
+        (SELECT oid FROM pg_am WHERE amname = 'gist'),
+        'gist_geometry_ops',
+        (SELECT oid FROM pg_type WHERE typname = 'geometry'),
+        true,
+        (SELECT oid FROM pg_type WHERE typname = 'box2d'));
+
+-- drop table rt_ops_tmp;
+
+SELECT o.oid AS opoid, o.oprname
+	INTO TABLE rt_ops_tmp
+	FROM pg_operator o, pg_type t
+	WHERE o.oprleft = t.oid 
+		AND t.typname = 'geometry';
+
+-- poly_left
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 1, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '<<';
+
+-- poly_overleft
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 2, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '&<';
+
+-- poly_overlap
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 3, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '&&';
+
+-- poly_overright
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 4, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '&>';
+
+-- poly_right
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
+   SELECT opcl.oid, 5, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '>>';
+
+-- poly_same
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 6, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '~=';
+
+-- poly_contains
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
+   SELECT opcl.oid, 7, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '~';
+
+-- poly_contained
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
+   SELECT opcl.oid, 8, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '@';
+
+-- poly_overbelow
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
+   SELECT opcl.oid, 9, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '&<|';
+
+-- poly_below
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 10, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '<<|';
+
+-- poly_above
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 11, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '|>>';
+
+-- poly_overabove
+INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) 
+   SELECT opcl.oid, 12, true, c.opoid
+   FROM pg_opclass opcl, rt_ops_tmp c
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops' 
+      and c.oprname = '|&>';
+
+DROP TABLE rt_ops_tmp;
+
+
+-- add the entries to amproc for the support methods
+-- note the amprocnum numbers associated with each are specific!
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 1, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_consistent';
+
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 2, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_union';
+
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 3, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_compress';
+
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 4, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_decompress';
+
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 5, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_penalty';
+
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 6, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_picksplit';
+
+INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
+   SELECT opcl.oid, 7, pro.oid
+   FROM pg_opclass opcl, pg_proc pro
+   WHERE
+      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
+      and opcname = 'gist_geometry_ops'
+      and proname = 'lwgeom_gist_same';
+
+#else
+
+--
+-- Create opclass index bindings for PG>=73
+--
+
+CREATE OPERATOR CLASS gist_geometry_ops
+        DEFAULT FOR TYPE geometry USING gist AS
+        OPERATOR        1        << 	RECHECK,
+        OPERATOR        2        &<	RECHECK,
+        OPERATOR        3        &&	RECHECK,
+        OPERATOR        4        &>	RECHECK,
+        OPERATOR        5        >>	RECHECK,
+        OPERATOR        6        ~=	RECHECK,
+        OPERATOR        7        ~	RECHECK,
+        OPERATOR        8        @	RECHECK,
+	OPERATOR	9	 &<|	RECHECK,
+	OPERATOR	10	 <<|	RECHECK,
+	OPERATOR	11	 |>>	RECHECK,
+	OPERATOR	12	 |&>	RECHECK,
+	FUNCTION        1        LWGEOM_gist_consistent (internal, geometry, int4),
+        FUNCTION        2        LWGEOM_gist_union (bytea, internal),
+        FUNCTION        3        LWGEOM_gist_compress (internal),
+        FUNCTION        4        LWGEOM_gist_decompress (internal),
+        FUNCTION        5        LWGEOM_gist_penalty (internal, internal, internal),
+        FUNCTION        6        LWGEOM_gist_picksplit (internal, internal),
+        FUNCTION        7        LWGEOM_gist_same (box2d, box2d, internal);
+
+UPDATE pg_opclass 
+	SET opckeytype = (SELECT oid FROM pg_type 
+                          WHERE typname = 'box2d' 
+                          AND typnamespace = (SELECT oid FROM pg_namespace 
+                                              WHERE nspname=current_schema())) 
+	WHERE opcname = 'gist_geometry_ops' 
+        AND opcnamespace = (SELECT oid from pg_namespace 
+                            WHERE nspname=current_schema());
+	
+-- TODO: add btree binding...
+
+#endif
+	
+-------------------------------------------
+-- other lwgeom functions
+-------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION addBBOX(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_addBBOX'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_addBBOX(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_addBBOX'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION dropBBOX(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_dropBBOX'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_dropBBOX(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_dropBBOX'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+	
+-- Deprecation in 1.2.3
+CREATEFUNCTION getSRID(geometry) 
+	RETURNS int4
+	AS 'MODULE_PATHNAME','LWGEOM_getSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION getSRID(geometry) 
+	RETURNS int4
+	AS 'MODULE_PATHNAME','LWGEOM_getSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION getBBOX(geometry)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION getBBOX(geometry)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-------------------------------------------
+--- CHIP functions
+-------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION srid(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_srid(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION height(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getHeight'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_height(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getHeight'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION factor(chip)
+	RETURNS FLOAT4
+	AS 'MODULE_PATHNAME','CHIP_getFactor'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_factor(chip)
+	RETURNS FLOAT4
+	AS 'MODULE_PATHNAME','CHIP_getFactor'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION width(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getWidth'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_width(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getWidth'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION datatype(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getDatatype'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_datatype(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getDatatype'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION compression(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getCompression'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_compression(chip)
+	RETURNS int4
+	AS 'MODULE_PATHNAME','CHIP_getCompression'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION setSRID(chip,int4)
+	RETURNS chip
+	AS 'MODULE_PATHNAME','CHIP_setSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION setFactor(chip,float4)
+	RETURNS chip
+	AS 'MODULE_PATHNAME','CHIP_setFactor'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_setFactor(chip,float4)
+	RETURNS chip
+	AS 'MODULE_PATHNAME','CHIP_setFactor'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+------------------------------------------------------------------------
+-- DEBUG
+------------------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION mem_size(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_mem_size'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_mem_size(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_mem_size'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION summary(geometry)
+	RETURNS text
+	AS 'MODULE_PATHNAME', 'LWGEOM_summary'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_summary(geometry)
+	RETURNS text
+	AS 'MODULE_PATHNAME', 'LWGEOM_summary'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION npoints(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_npoints'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_npoints(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_npoints'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION nrings(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_nrings'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_nrings(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_nrings'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+------------------------------------------------------------------------
+-- Misures
+------------------------------------------------------------------------
+
+-- this is a fake (for back-compatibility)
+-- uses 3d if 3d is available, 2d otherwise
+-- Deprecation in 1.2.3
+CREATEFUNCTION length3d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_length3d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION length2d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_length2d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+CREATEFUNCTION length(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: length2d(geometry)
+CREATEFUNCTION ST_Length(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- this is a fake (for back-compatibility)
+-- uses 3d if 3d is available, 2d otherwise
+-- Deprecation in 1.2.3
+CREATEFUNCTION length3d_spheroid(geometry, spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_length3d_spheroid(geometry, spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION length_spheroid(geometry, spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_length_spheroid(geometry, spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION length2d_spheroid(geometry, spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_length2d_spheroid(geometry, spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- this is a fake (for back-compatibility)
+-- uses 3d if 3d is available, 2d otherwise
+-- Deprecation in 1.2.3
+CREATEFUNCTION perimeter3d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_perimeter3d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION perimeter2d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_perimeter2d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION perimeter(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: perimeter2d(geometry)
+CREATEFUNCTION ST_Perimeter(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- this is an alias for 'area(geometry)'
+-- there is nothing such an 'area3d'...
+-- Deprecation in 1.2.3
+CREATEFUNCTION area2d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_area2d(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION area(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_area_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: area(geometry)
+CREATEFUNCTION ST_Area(geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_area_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION distance_spheroid(geometry,geometry,spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_distance_spheroid(geometry,geometry,spheroid)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION distance_sphere(geometry,geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_distance_sphere'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_distance_sphere(geometry,geometry)
+	RETURNS FLOAT8
+	AS 'MODULE_PATHNAME','LWGEOM_distance_sphere'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Minimum distance. 2d only.
+-- Deprecation in 1.2.3
+CREATEFUNCTION distance(geometry,geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: distance(geometry,geometry)
+CREATEFUNCTION ST_Distance(geometry,geometry)
+    RETURNS float8
+    AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Maximum distance between linestrings. 2d only. Very bogus.
+-- Deprecation in 1.2.3
+CREATEFUNCTION max_distance(geometry,geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance2d_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_max_distance(geometry,geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance2d_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION point_inside_circle(geometry,float8,float8,float8)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_inside_circle_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_point_inside_circle(geometry,float8,float8,float8)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_inside_circle_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION azimuth(geometry,geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_azimuth'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_azimuth(geometry,geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME', 'LWGEOM_azimuth'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+------------------------------------------------------------------------
+-- MISC
+------------------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION force_2d(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_force_2d(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION force_3dz(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_force_3dz(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- an alias for force_3dz
+-- Deprecation in 1.2.3
+CREATEFUNCTION force_3d(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_force_3d(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION force_3dm(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_force_3dm(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION force_4d(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_4d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_force_4d(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_4d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION force_collection(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_collection'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_force_collection(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_collection'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION multi(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_multi'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_multi(geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_force_multi'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION collector(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collector(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION collect(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collect(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE memcollect(
+	sfunc = ST_collect,
+	basetype = geometry,
+	stype = geometry
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_memcollect(
+	sfunc = ST_collect,
+	basetype = geometry,
+	stype = geometry
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geom_accum (geometry[],geometry)
+	RETURNS geometry[]
+	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geom_accum (geometry[],geometry)
+	RETURNS geometry[]
+	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE accum (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[]
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_accum (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[]
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION collect_garray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collect_garray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE collect (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = ST_collect_garray
+	);
+
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_collect (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = ST_collect_garray
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION expand(box3d,float8)
+	RETURNS box3d
+	AS 'MODULE_PATHNAME', 'BOX3D_expand'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Expand(box3d,float8)
+	RETURNS box3d
+	AS 'MODULE_PATHNAME', 'BOX3D_expand'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION expand(box2d,float8)
+	RETURNS box2d
+	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_expand'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_expand(box2d,float8)
+	RETURNS box2d
+	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_expand'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION expand(geometry,float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_expand'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_expand(geometry,float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_expand'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION envelope(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_envelope'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- PostGIS equivalent function: envelope(geometry)
+CREATEFUNCTION ST_Envelope(geometry)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME', 'LWGEOM_envelope'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION reverse(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_reverse'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Reverse(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_reverse'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION ForceRHR(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_forceRHR_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_ForceRHR(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_forceRHR_poly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION noop(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_noop'
+	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_noop(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_noop'
+	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION zmflag(geometry)
+	RETURNS smallint
+	AS 'MODULE_PATHNAME', 'LWGEOM_zmflag'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_zmflag(geometry)
+	RETURNS smallint
+	AS 'MODULE_PATHNAME', 'LWGEOM_zmflag'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION hasBBOX(geometry)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_hasBBOX'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availabitily: 1.2.2
+CREATEFUNCTION ST_HasBBOX(geometry)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'LWGEOM_hasBBOX'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION ndims(geometry)
+	RETURNS smallint
+	AS 'MODULE_PATHNAME', 'LWGEOM_ndims'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_NDims(geometry)
+	RETURNS smallint
+	AS 'MODULE_PATHNAME', 'LWGEOM_ndims'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsEWKT(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asEWKT'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsEWKT(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asEWKT'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsEWKB(geometry)
+	RETURNS BYTEA
+	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsEWKB(geometry)
+	RETURNS BYTEA
+	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsHEXEWKB(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsHEXEWKB(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsHEXEWKB(geometry, text)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsHEXEWKB(geometry, text)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsEWKB(geometry,text)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsEWKB(geometry,text)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomFromEWKB(bytea)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOMFromWKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomFromEWKB(bytea)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOMFromWKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomFromEWKT(text)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomFromEWKT(text)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION cache_bbox()
+        RETURNS trigger
+        AS 'MODULE_PATHNAME'
+        LANGUAGE 'C';
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Cache_BBox()
+	RETURNS trigger
+	AS 'MODULE_PATHNAME','cache_bbox'
+	LANGUAGE 'C';
+
+------------------------------------------------------------------------
+-- CONSTRUCTORS
+------------------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakePoint(float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakePoint(float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakePoint(float8, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakePoint(float8, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakePoint(float8, float8, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakePoint(float8, float8, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakePointM(float8, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint3dm'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION MakePointM(float8, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint3dm'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakeBox2d(geometry, geometry)
+	RETURNS box2d
+	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_construct'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakeBox2d(geometry, geometry)
+	RETURNS box2d
+	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_construct'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakeBox3d(geometry, geometry)
+	RETURNS box3d
+	AS 'MODULE_PATHNAME', 'BOX3D_construct'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakeBox3d(geometry, geometry)
+	RETURNS box3d
+	AS 'MODULE_PATHNAME', 'BOX3D_construct'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION makeline_garray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakeLine_GArray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineFromMultiPoint(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_line_from_mpoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_LineFromMultiPoint(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_line_from_mpoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakeLine(geometry, geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makeline'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakeLine(geometry, geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makeline'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AddPoint(geometry, geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AddPoint(geometry, geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AddPoint(geometry, geometry, integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AddPoint(geometry, geometry, integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION RemovePoint(geometry, integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_removepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_RemovePoint(geometry, integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_removepoint'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION SetPoint(geometry, integer, geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_SetPoint(geometry, integer, geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE makeline (
+	sfunc = geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = makeline_garray
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_MakeLine (
+	sfunc = geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = ST_makeline_garray
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakePolygon(geometry, geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakePolygon(geometry, geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MakePolygon(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MakePolygon(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION BuildArea(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_buildarea'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_BuildArea(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_buildarea'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Polygonize_GArray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'polygonize_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Polygonize_GArray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'polygonize_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineMerge(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'linemerge'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_LineMerge(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'linemerge'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE Polygonize (
+	sfunc = geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = polygonize_garray
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Polygonize (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = ST_polygonize_garray
+	);
+
+#if POSTGIS_PGSQL_VERSION > 72
+
+CREATE TYPE geometry_dump AS (path integer[], geom geometry);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Dump(geometry)
+	RETURNS SETOF geometry_dump
+	AS 'MODULE_PATHNAME', 'LWGEOM_dump'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Dump(geometry)
+	RETURNS SETOF geometry_dump
+	AS 'MODULE_PATHNAME', 'LWGEOM_dump'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION DumpRings(geometry)
+	RETURNS SETOF geometry_dump
+	AS 'MODULE_PATHNAME', 'LWGEOM_dump_rings'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_DumpRings(geometry)
+	RETURNS SETOF geometry_dump
+	AS 'MODULE_PATHNAME', 'LWGEOM_dump_rings'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+#endif
+
+------------------------------------------------------------------------
+
+--
+-- Aggregate functions
+--
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION combine_bbox(box2d,geometry)
+	RETURNS box2d
+	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_combine'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Combine_BBox(box2d,geometry)
+	RETURNS box2d
+	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_combine'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE Extent(
+	sfunc = ST_combine_bbox,
+	basetype = geometry,
+	stype = box2d
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Extent(
+	sfunc = ST_combine_bbox,
+	basetype = geometry,
+	stype = box2d
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION combine_bbox(box3d,geometry)
+	RETURNS box3d
+	AS 'MODULE_PATHNAME', 'BOX3D_combine'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Combine_BBox(box3d,geometry)
+	RETURNS box3d
+	AS 'MODULE_PATHNAME', 'BOX3D_combine'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE Extent3d(
+	sfunc = combine_bbox,
+	basetype = geometry,
+	stype = box3d
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Extent3d(
+	sfunc = ST_combine_bbox,
+	basetype = geometry,
+	stype = box3d
+	);
+
+-----------------------------------------------------------------------
+-- CREATE_HISTOGRAM2D( <box2d>, <size> )
+-----------------------------------------------------------------------
+--
+-- Returns a histgram with 0s in all the boxes.
+--
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION create_histogram2d(box2d,int)
+	RETURNS histogram2d
+	AS 'MODULE_PATHNAME','create_lwhistogram2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_create_histogram2d(box2d,int)
+	RETURNS histogram2d
+	AS 'MODULE_PATHNAME','create_lwhistogram2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- BUILD_HISTOGRAM2D( <histogram2d>, <tablename>, <columnname> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION build_histogram2d (histogram2d,text,text)
+	RETURNS histogram2d
+	AS 'MODULE_PATHNAME','build_lwhistogram2d'
+	LANGUAGE 'C' _STABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_build_histogram2d (histogram2d,text,text)
+	RETURNS histogram2d
+	AS 'MODULE_PATHNAME','build_lwhistogram2d'
+	LANGUAGE 'C' _STABLE_STRICT; -- WITH (isstrict);
+
+#if POSTGIS_PGSQL_VERSION >= 73
+-----------------------------------------------------------------------
+-- BUILD_HISTOGRAM2D(<histogram2d>,<schema>,<tablename>,<columnname>)
+-----------------------------------------------------------------------
+-- This is a wrapper to the omonimous schema unaware function,
+-- thanks to Carl Anderson for the idea.
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION build_histogram2d (histogram2d,text,text,text)
+RETURNS histogram2d
+AS '
+BEGIN
+	EXECUTE ''SET local search_path = ''||$2||'',public'';
+	RETURN public.build_histogram2d($1,$3,$4);
+END
+'
+LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_build_histogram2d (histogram2d,text,text,text)
+RETURNS histogram2d
+AS '
+BEGIN
+	EXECUTE ''SET local search_path = ''||$2||'',public'';
+	RETURN public.build_histogram2d($1,$3,$4);
+END
+'
+LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
+
+#endif
+
+-----------------------------------------------------------------------
+-- EXPLODE_HISTOGRAM2D( <histogram2d>, <tablename> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION explode_histogram2d (histogram2d,text)
+	RETURNS histogram2d
+	AS 'MODULE_PATHNAME','explode_lwhistogram2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_explode_histogram2d (histogram2d,text)
+	RETURNS histogram2d
+	AS 'MODULE_PATHNAME','explode_lwhistogram2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- ESTIMATE_HISTOGRAM2D( <histogram2d>, <box> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION estimate_histogram2d(histogram2d,box2d)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','estimate_lwhistogram2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_estimate_histogram2d(histogram2d,box2d)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','estimate_lwhistogram2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- ESTIMATED_EXTENT( <schema name>, <table name>, <column name> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION estimated_extent(text,text,text) RETURNS box2d AS
+	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
+	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS
+	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
+	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
+
+-----------------------------------------------------------------------
+-- ESTIMATED_EXTENT( <table name>, <column name> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION estimated_extent(text,text) RETURNS box2d AS
+	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
+	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_estimated_extent(text,text) RETURNS box2d AS
+	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
+	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER; 
+
+-----------------------------------------------------------------------
+-- FIND_EXTENT( <schema name>, <table name>, <column name> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION find_extent(text,text,text) RETURNS box2d AS
+'
+DECLARE
+	schemaname alias for $1;
+	tablename alias for $2;
+	columnname alias for $3;
+	myrec RECORD;
+
+BEGIN
+	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||schemaname||''"."''||tablename||''"'' LOOP
+		return myrec.extent;
+	END LOOP; 
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_find_extent(text,text,text) RETURNS box2d AS
+'
+DECLARE
+	schemaname alias for $1;
+	tablename alias for $2;
+	columnname alias for $3;
+	myrec RECORD;
+
+BEGIN
+	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||schemaname||''"."''||tablename||''"'' LOOP
+		return myrec.extent;
+	END LOOP; 
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+
+-----------------------------------------------------------------------
+-- FIND_EXTENT( <table name>, <column name> )
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION find_extent(text,text) RETURNS box2d AS
+'
+DECLARE
+	tablename alias for $1;
+	columnname alias for $2;
+	myrec RECORD;
+
+BEGIN
+	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||tablename||''"'' LOOP
+		return myrec.extent;
+	END LOOP; 
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_find_extent(text,text) RETURNS box2d AS
+'
+DECLARE
+	tablename alias for $1;
+	columnname alias for $2;
+	myrec RECORD;
+
+BEGIN
+	FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||tablename||''"'' LOOP
+		return myrec.extent;
+	END LOOP; 
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-------------------------------------------------------------------
+-- SPATIAL_REF_SYS
+-------------------------------------------------------------------
+CREATE TABLE spatial_ref_sys (
+	 srid integer not null primary key,
+	 auth_name varchar(256), 
+	 auth_srid integer, 
+	 srtext varchar(2048),
+	 proj4text varchar(2048) 
+);
+
+-------------------------------------------------------------------
+-- GEOMETRY_COLUMNS
+-------------------------------------------------------------------
+CREATE TABLE geometry_columns (
+	f_table_catalog varchar(256) not null,
+	f_table_schema varchar(256) not null,
+	f_table_name varchar(256) not null,
+	f_geometry_column varchar(256) not null,
+	coord_dimension integer not null,
+	srid integer not null,
+	type varchar(30) not null,
+#if POSTGIS_PGSQL_VERSION < 80
+	attrelid oid,
+	varattnum int,
+	stats histogram2d,
+#endif
+	CONSTRAINT geometry_columns_pk primary key ( 
+		f_table_catalog, 
+		f_table_schema, 
+		f_table_name, 
+		f_geometry_column )
+) WITH OIDS;
+
+-----------------------------------------------------------------------
+-- RENAME_GEOMETRY_TABLE_CONSTRAINTS()
+-----------------------------------------------------------------------
+-- This function has been obsoleted for the difficulty in
+-- finding attribute on which the constraint is applied.
+-- AddGeometryColumn will name the constraints in a meaningful
+-- way, but nobody can rely on it since old postgis versions did
+-- not do that.
+-----------------------------------------------------------------------
+CREATEFUNCTION rename_geometry_table_constraints() RETURNS text
+AS 
+'
+SELECT ''rename_geometry_table_constraint() is obsoleted''::text
+'
+LANGUAGE 'SQL' _IMMUTABLE;
+
+-----------------------------------------------------------------------
+-- FIX_GEOMETRY_COLUMNS() 
+-----------------------------------------------------------------------
+-- This function will:
+--
+--	o try to fix the schema of records with an invalid one
+--		(for PG>=73)
+--
+--	o link records to system tables through attrelid and varattnum
+--		(for PG<75)
+--
+--	o delete all records for which no linking was possible
+--		(for PG<75)
+--	
+-- 
+-----------------------------------------------------------------------
+CREATEFUNCTION fix_geometry_columns() RETURNS text
+AS 
+'
+DECLARE
+	mislinked record;
+	result text;
+	linked integer;
+	deleted integer;
+#if POSTGIS_PGSQL_VERSION >= 73
+	foundschema integer;
+#endif
+BEGIN
+
+#if POSTGIS_PGSQL_VERSION >= 73
+	-- Since 7.3 schema support has been added.
+	-- Previous postgis versions used to put the database name in
+	-- the schema column. This needs to be fixed, so we try to 
+	-- set the correct schema for each geometry_colums record
+	-- looking at table, column, type and srid.
+	UPDATE geometry_columns SET f_table_schema = n.nspname
+		FROM pg_namespace n, pg_class c, pg_attribute a,
+			pg_constraint sridcheck, pg_constraint typecheck
+                WHERE ( f_table_schema is NULL
+		OR f_table_schema = ''''
+                OR f_table_schema NOT IN (
+                        SELECT nspname::varchar
+                        FROM pg_namespace nn, pg_class cc, pg_attribute aa
+                        WHERE cc.relnamespace = nn.oid
+                        AND cc.relname = f_table_name::name
+                        AND aa.attrelid = cc.oid
+                        AND aa.attname = f_geometry_column::name))
+                AND f_table_name::name = c.relname
+                AND c.oid = a.attrelid
+                AND c.relnamespace = n.oid
+                AND f_geometry_column::name = a.attname
+
+                AND sridcheck.conrelid = c.oid
+		AND sridcheck.consrc LIKE ''(srid(% = %)''
+                AND sridcheck.consrc ~ textcat('' = '', srid::text)
+
+                AND typecheck.conrelid = c.oid
+		AND typecheck.consrc LIKE
+	''((geometrytype(%) = ''''%''''::text) OR (% IS NULL))''
+                AND typecheck.consrc ~ textcat('' = '''''', type::text)
+
+                AND NOT EXISTS (
+                        SELECT oid FROM geometry_columns gc
+                        WHERE c.relname::varchar = gc.f_table_name
+                        AND n.nspname::varchar = gc.f_table_schema
+                        AND a.attname::varchar = gc.f_geometry_column
+                );
+
+	GET DIAGNOSTICS foundschema = ROW_COUNT;
+#endif
+
+#if POSTGIS_PGSQL_VERSION >= 80
+	-- no linkage to system table needed
+	return ''fixed:''||foundschema::text;
+#endif
+
+	-- fix linking to system tables
+	SELECT 0 INTO linked;
+	FOR mislinked in
+		SELECT gc.oid as gcrec,
+			a.attrelid as attrelid, a.attnum as attnum
+                FROM geometry_columns gc, pg_class c,
+#if POSTGIS_PGSQL_VERSION >= 73
+		pg_namespace n, pg_attribute a
+#else
+		pg_attribute a
+#endif
+                WHERE ( gc.attrelid IS NULL OR gc.attrelid != a.attrelid 
+			OR gc.varattnum IS NULL OR gc.varattnum != a.attnum)
+#if POSTGIS_PGSQL_VERSION >= 73
+                AND n.nspname = gc.f_table_schema::name
+                AND c.relnamespace = n.oid
+#endif
+                AND c.relname = gc.f_table_name::name
+                AND a.attname = f_geometry_column::name
+                AND a.attrelid = c.oid
+	LOOP
+		UPDATE geometry_columns SET
+			attrelid = mislinked.attrelid,
+			varattnum = mislinked.attnum,
+			stats = NULL
+			WHERE geometry_columns.oid = mislinked.gcrec;
+		SELECT linked+1 INTO linked;
+	END LOOP; 
+
+	-- remove stale records
+	DELETE FROM geometry_columns WHERE attrelid IS NULL;
+
+	GET DIAGNOSTICS deleted = ROW_COUNT;
+
+	result = 
+#if POSTGIS_PGSQL_VERSION >= 73
+		''fixed:'' || foundschema::text ||
+#endif
+		'' linked:'' || linked::text || 
+		'' deleted:'' || deleted::text;
+
+	return result;
+
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE;
+
+-----------------------------------------------------------------------
+-- PROBE_GEOMETRY_COLUMNS() 
+-----------------------------------------------------------------------
+-- Fill the geometry_columns table with values probed from the system
+-- catalogues. 3d flag cannot be probed, it defaults to 2
+--
+-- Note that bogus records already in geometry_columns are not
+-- overridden (a check for schema.table.column is performed), so
+-- to have a fresh probe backup your geometry_column, delete from
+-- it and probe.
+-----------------------------------------------------------------------
+CREATEFUNCTION probe_geometry_columns() RETURNS text AS
+'
+DECLARE
+	inserted integer;
+	oldcount integer;
+	probed integer;
+	stale integer;
+BEGIN
+
+	SELECT count(*) INTO oldcount FROM geometry_columns;
+
+	SELECT count(*) INTO probed
+		FROM pg_class c, pg_attribute a, pg_type t, 
+#if POSTGIS_PGSQL_VERSION >= 73
+			pg_namespace n,
+			pg_constraint sridcheck, pg_constraint typecheck
+#else
+			pg_relcheck sridcheck, pg_relcheck typecheck
+#endif 
+
+		WHERE t.typname = ''geometry''
+		AND a.atttypid = t.oid
+		AND a.attrelid = c.oid
+#if POSTGIS_PGSQL_VERSION >= 73
+		AND c.relnamespace = n.oid
+		AND sridcheck.connamespace = n.oid
+		AND typecheck.connamespace = n.oid
+#endif
+
+#if POSTGIS_PGSQL_VERSION >= 73
+		AND sridcheck.conrelid = c.oid
+		AND sridcheck.consrc LIKE ''(srid(''||a.attname||'') = %)''
+		AND typecheck.conrelid = c.oid
+		AND typecheck.consrc LIKE
+	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
+#else
+		AND sridcheck.rcrelid = c.oid
+		AND sridcheck.rcsrc LIKE ''(srid(''||a.attname||'') = %)''
+		AND typecheck.rcrelid = c.oid
+		AND typecheck.rcsrc LIKE
+	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
+#endif
+		;
+
+	INSERT INTO geometry_columns SELECT
+		''''::varchar as f_table_catalogue,
+#if POSTGIS_PGSQL_VERSION >= 73
+		n.nspname::varchar as f_table_schema,
+#else
+		''''::varchar as f_table_schema,
+#endif
+		c.relname::varchar as f_table_name,
+		a.attname::varchar as f_geometry_column,
+		2 as coord_dimension,
+#if POSTGIS_PGSQL_VERSION >= 73
+		trim(both  '' =)'' from substr(sridcheck.consrc,
+			strpos(sridcheck.consrc, ''='')))::integer as srid,
+		trim(both '' =)'''''' from substr(typecheck.consrc, 
+			strpos(typecheck.consrc, ''=''),
+			strpos(typecheck.consrc, ''::'')-
+			strpos(typecheck.consrc, ''='')
+			))::varchar as type
+#else
+		trim(both  '' =)'' from substr(sridcheck.rcsrc,
+			strpos(sridcheck.rcsrc, ''='')))::integer as srid,
+		trim(both '' =)'''''' from substr(typecheck.rcsrc, 
+			strpos(typecheck.rcsrc, ''=''),
+			strpos(typecheck.rcsrc, ''::'')-
+			strpos(typecheck.rcsrc, ''='')
+			))::varchar as type
+#endif
+
+#if POSTGIS_PGSQL_VERSION < 80
+		, a.attrelid,
+		a.attnum as varattnum,
+		null::histogram2d as stats
+#endif
+		FROM pg_class c, pg_attribute a, pg_type t, 
+#if POSTGIS_PGSQL_VERSION >= 73
+			pg_namespace n,
+			pg_constraint sridcheck, pg_constraint typecheck
+#else
+			pg_relcheck sridcheck, pg_relcheck typecheck
+#endif 
+		WHERE t.typname = ''geometry''
+		AND a.atttypid = t.oid
+		AND a.attrelid = c.oid
+#if POSTGIS_PGSQL_VERSION >= 73
+		AND c.relnamespace = n.oid
+		AND sridcheck.connamespace = n.oid
+		AND typecheck.connamespace = n.oid
+		AND sridcheck.conrelid = c.oid
+		AND sridcheck.consrc LIKE ''(srid(''||a.attname||'') = %)''
+		AND typecheck.conrelid = c.oid
+		AND typecheck.consrc LIKE
+	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
+#else
+		AND sridcheck.rcrelid = c.oid
+		AND sridcheck.rcsrc LIKE ''(srid(''||a.attname||'') = %)''
+		AND typecheck.rcrelid = c.oid
+		AND typecheck.rcsrc LIKE
+	''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
+#endif
+
+                AND NOT EXISTS (
+                        SELECT oid FROM geometry_columns gc
+                        WHERE c.relname::varchar = gc.f_table_name
+#if POSTGIS_PGSQL_VERSION >= 73
+                        AND n.nspname::varchar = gc.f_table_schema
+#endif
+                        AND a.attname::varchar = gc.f_geometry_column
+                );
+
+	GET DIAGNOSTICS inserted = ROW_COUNT;
+
+	IF oldcount > probed THEN
+		stale = oldcount-probed;
+	ELSE
+		stale = 0;
+	END IF;
+
+        RETURN ''probed:''||probed::text||
+		'' inserted:''||inserted::text||
+		'' conflicts:''||(probed-inserted)::text||
+		'' stale:''||stale::text;
+END
+
+'
+LANGUAGE 'plpgsql' _VOLATILE;
+
+-----------------------------------------------------------------------
+-- ADDGEOMETRYCOLUMN
+--   <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim>
+-----------------------------------------------------------------------
+--
+-- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
+-- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
+--
+-- Types (except geometry) are checked for consistency using a CHECK constraint
+-- uses SQL ALTER TABLE command to add the geometry column to the table.
+-- Addes a row to geometry_columns.
+-- Addes a constraint on the table that all the geometries MUST have the same 
+-- SRID. Checks the coord_dimension to make sure its between 0 and 3.
+-- Should also check the precision grid (future expansion).
+-- Calls fix_geometry_columns() at the end.
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer)
+	RETURNS text
+	AS 
+'
+DECLARE
+	catalog_name alias for $1;
+	schema_name alias for $2;
+	table_name alias for $3;
+	column_name alias for $4;
+	new_srid alias for $5;
+	new_type alias for $6;
+	new_dim alias for $7;
+#if POSTGIS_PGSQL_VERSION >= 73
+	rec RECORD;
+	schema_ok bool;
+	real_schema name;
+#endif
+
+BEGIN
+
+	IF ( not ( (new_type =''GEOMETRY'') or
+		   (new_type =''GEOMETRYCOLLECTION'') or
+		   (new_type =''POINT'') or 
+		   (new_type =''MULTIPOINT'') or
+		   (new_type =''POLYGON'') or
+		   (new_type =''MULTIPOLYGON'') or
+		   (new_type =''LINESTRING'') or
+		   (new_type =''MULTILINESTRING'') or
+		   (new_type =''GEOMETRYCOLLECTIONM'') or
+		   (new_type =''POINTM'') or 
+		   (new_type =''MULTIPOINTM'') or
+		   (new_type =''POLYGONM'') or
+		   (new_type =''MULTIPOLYGONM'') or
+		   (new_type =''LINESTRINGM'') or
+		   (new_type =''MULTILINESTRINGM'') or
+                   (new_type = ''CIRCULARSTRING'') or
+                   (new_type = ''CIRCULARSTRINGM'') or
+                   (new_type = ''COMPOUNDCURVE'') or
+                   (new_type = ''COMPOUNDCURVEM'') or
+                   (new_type = ''CURVEPOLYGON'') or
+                   (new_type = ''CURVEPOLYGONM'') or
+                   (new_type = ''MULTICURVE'') or
+                   (new_type = ''MULTICURVEM'') or
+                   (new_type = ''MULTISURFACE'') or
+                   (new_type = ''MULTISURFACEM'')) )
+	THEN
+		RAISE EXCEPTION ''Invalid type name - valid ones are: 
+			GEOMETRY, GEOMETRYCOLLECTION, POINT, 
+			MULTIPOINT, POLYGON, MULTIPOLYGON, 
+			LINESTRING, MULTILINESTRING,
+                        CIRCULARSTRING, COMPOUNDCURVE,
+                        CURVEPOLYGON, MULTICURVE, MULTISURFACE,
+			GEOMETRYCOLLECTIONM, POINTM, 
+			MULTIPOINTM, POLYGONM, MULTIPOLYGONM, 
+			LINESTRINGM, MULTILINESTRINGM 
+                        CIRCULARSTRINGM, COMPOUNDCURVEM,
+                        CURVEPOLYGONM, MULTICURVEM or MULTISURFACEM'';
+		return ''fail'';
+	END IF;
+
+	IF ( (new_dim >4) or (new_dim <0) ) THEN
+		RAISE EXCEPTION ''invalid dimension'';
+		return ''fail'';
+	END IF;
+
+	IF ( (new_type LIKE ''%M'') and (new_dim!=3) ) THEN
+
+		RAISE EXCEPTION ''TypeM needs 3 dimensions'';
+		return ''fail'';
+	END IF;
+
+#if POSTGIS_PGSQL_VERSION >= 73
+	IF ( schema_name != '''' ) THEN
+		schema_ok = ''f'';
+		FOR rec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
+			schema_ok := ''t'';
+		END LOOP;
+
+		if ( schema_ok <> ''t'' ) THEN
+			RAISE NOTICE ''Invalid schema name - using current_schema()'';
+			SELECT current_schema() into real_schema;
+		ELSE
+			real_schema = schema_name;
+		END IF;
+
+	ELSE
+		SELECT current_schema() into real_schema;
+	END IF;
+#endif
+
+
+	-- Add geometry column
+
+	EXECUTE ''ALTER TABLE '' ||
+#if POSTGIS_PGSQL_VERSION >= 73
+		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+		quote_ident(table_name)
+#endif
+		|| '' ADD COLUMN '' || quote_ident(column_name) || 
+		'' geometry '';
+
+
+	-- Delete stale record in geometry_column (if any)
+
+	EXECUTE ''DELETE FROM geometry_columns WHERE
+		f_table_catalog = '' || quote_literal('''') || 
+		'' AND f_table_schema = '' ||
+#if POSTGIS_PGSQL_VERSION >= 73
+		quote_literal(real_schema) || 
+#else
+		quote_literal('''') || 
+#endif
+		'' AND f_table_name = '' || quote_literal(table_name) ||
+		'' AND f_geometry_column = '' || quote_literal(column_name);
+
+
+	-- Add record in geometry_column 
+
+	EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
+		quote_literal('''') || '','' ||
+#if POSTGIS_PGSQL_VERSION >= 73
+		quote_literal(real_schema) || '','' ||
+#else
+		quote_literal('''') || '','' ||
+#endif
+		quote_literal(table_name) || '','' ||
+		quote_literal(column_name) || '','' ||
+		new_dim::text || '','' || new_srid::text || '','' ||
+		quote_literal(new_type) || '')'';
+
+	-- Add table checks
+
+	EXECUTE ''ALTER TABLE '' || 
+#if POSTGIS_PGSQL_VERSION >= 73
+		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+		quote_ident(table_name)
+#endif
+		|| '' ADD CONSTRAINT '' 
+		|| quote_ident(''enforce_srid_'' || column_name)
+		|| '' CHECK (SRID('' || quote_ident(column_name) ||
+		'') = '' || new_srid::text || '')'' ;
+
+	EXECUTE ''ALTER TABLE '' || 
+#if POSTGIS_PGSQL_VERSION >= 73
+		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+		quote_ident(table_name)
+#endif
+		|| '' ADD CONSTRAINT ''
+		|| quote_ident(''enforce_dims_'' || column_name)
+		|| '' CHECK (ndims('' || quote_ident(column_name) ||
+		'') = '' || new_dim::text || '')'' ;
+
+	IF (not(new_type = ''GEOMETRY'')) THEN
+		EXECUTE ''ALTER TABLE '' || 
+#if POSTGIS_PGSQL_VERSION >= 73
+		quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+		quote_ident(table_name)
+#endif
+		|| '' ADD CONSTRAINT ''
+		|| quote_ident(''enforce_geotype_'' || column_name)
+		|| '' CHECK (geometrytype('' ||
+		quote_ident(column_name) || '')='' ||
+		quote_literal(new_type) || '' OR ('' ||
+		quote_ident(column_name) || '') is null)'';
+	END IF;
+
+	return 
+#if POSTGIS_PGSQL_VERSION >= 73
+		real_schema || ''.'' || 
+#endif
+		table_name || ''.'' || column_name ||
+		'' SRID:'' || new_srid::text ||
+		'' TYPE:'' || new_type || 
+		'' DIMS:'' || new_dim::text || chr(10) || '' ''; 
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+----------------------------------------------------------------------------
+-- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
+----------------------------------------------------------------------------
+--
+-- This is a wrapper to the real AddGeometryColumn, for use
+-- when catalogue is undefined
+--
+----------------------------------------------------------------------------
+CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS '
+DECLARE
+	ret  text;
+BEGIN
+	SELECT AddGeometryColumn('''',$1,$2,$3,$4,$5,$6) into ret;
+	RETURN ret;
+END;
+'
+LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
+
+----------------------------------------------------------------------------
+-- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> )
+----------------------------------------------------------------------------
+--
+-- This is a wrapper to the real AddGeometryColumn, for use
+-- when catalogue and schema are undefined
+--
+----------------------------------------------------------------------------
+CREATEFUNCTION AddGeometryColumn(varchar,varchar,integer,varchar,integer) RETURNS text AS '
+DECLARE
+	ret  text;
+BEGIN
+	SELECT AddGeometryColumn('''','''',$1,$2,$3,$4,$5) into ret;
+	RETURN ret;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYCOLUMN
+--   <catalogue>, <schema>, <table>, <column>
+-----------------------------------------------------------------------
+--
+-- Removes geometry column reference from geometry_columns table.
+-- Drops the column with pgsql >= 73.
+-- Make some silly enforcements on it for pgsql < 73
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION DropGeometryColumn(varchar, varchar,varchar,varchar)
+	RETURNS text
+	AS 
+'
+DECLARE
+	catalog_name alias for $1; 
+	schema_name alias for $2;
+	table_name alias for $3;
+	column_name alias for $4;
+	myrec RECORD;
+	okay boolean;
+	real_schema name;
+
+BEGIN
+
+
+#if POSTGIS_PGSQL_VERSION >= 73
+	-- Find, check or fix schema_name
+	IF ( schema_name != '''' ) THEN
+		okay = ''f'';
+
+		FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
+			okay := ''t'';
+		END LOOP;
+
+		IF ( okay <> ''t'' ) THEN
+			RAISE NOTICE ''Invalid schema name - using current_schema()'';
+			SELECT current_schema() into real_schema;
+		ELSE
+			real_schema = schema_name;
+		END IF;
+	ELSE
+		SELECT current_schema() into real_schema;
+	END IF;
+#else
+	real_schema = schema_name;
+#endif
+
+ 	-- Find out if the column is in the geometry_columns table
+	okay = ''f'';
+	FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP
+		okay := ''t'';
+	END LOOP; 
+	IF (okay <> ''t'') THEN 
+		RAISE EXCEPTION ''column not found in geometry_columns table'';
+		RETURN ''f'';
+	END IF;
+
+	-- Remove ref from geometry_columns table
+	EXECUTE ''delete from geometry_columns where f_table_schema = '' ||
+		quote_literal(real_schema) || '' and f_table_name = '' ||
+		quote_literal(table_name)  || '' and f_geometry_column = '' ||
+		quote_literal(column_name);
+	
+#if POSTGIS_PGSQL_VERSION < 73
+	-- Remove not-null constraint to table column 
+	EXECUTE ''update pg_attribute set attnotnull = false from pg_class where pg_attribute.attrelid = pg_class.oid and pg_class.relname = '' || quote_literal(table_name) ||'' and pg_attribute.attname = '' || quote_literal(column_name);
+	-- update the given table/column so that it it all NULLS
+	EXECUTE ''update "''||table_name||''" set "''||column_name||''"= NULL'';
+	-- add = NULL constraint to given table/column
+	EXECUTE ''ALTER TABLE "''||table_name||''" ADD CHECK ("''||column_name||''" IS NULL)'';
+#else
+	-- Remove table column
+	EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) || ''.'' ||
+		quote_ident(table_name) || '' DROP COLUMN '' ||
+		quote_ident(column_name);
+#endif 
+
+
+	RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' effectively removed.'';
+	
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYCOLUMN
+--   <schema>, <table>, <column>
+-----------------------------------------------------------------------
+--
+-- This is a wrapper to the real DropGeometryColumn, for use
+-- when catalogue is undefined
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION DropGeometryColumn(varchar,varchar,varchar)
+	RETURNS text
+	AS 
+'
+DECLARE
+	ret text;
+BEGIN
+	SELECT DropGeometryColumn('''',$1,$2,$3) into ret;
+	RETURN ret;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYCOLUMN
+--   <table>, <column>
+-----------------------------------------------------------------------
+--
+-- This is a wrapper to the real DropGeometryColumn, for use
+-- when catalogue and schema is undefined. 
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION DropGeometryColumn(varchar,varchar)
+	RETURNS text
+	AS 
+'
+DECLARE
+	ret text;
+BEGIN
+	SELECT DropGeometryColumn('''','''',$1,$2) into ret;
+	RETURN ret;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYTABLE
+--   <catalogue>, <schema>, <table>
+-----------------------------------------------------------------------
+--
+-- Drop a table and all its references in geometry_columns
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION DropGeometryTable(varchar, varchar,varchar)
+	RETURNS text
+	AS 
+'
+DECLARE
+	catalog_name alias for $1; 
+	schema_name alias for $2;
+	table_name alias for $3;
+	real_schema name;
+
+BEGIN
+
+#if POSTGIS_PGSQL_VERSION >= 73
+	IF ( schema_name = '''' ) THEN
+		SELECT current_schema() into real_schema;
+	ELSE
+		real_schema = schema_name;
+	END IF;
+#endif
+
+	-- Remove refs from geometry_columns table
+	EXECUTE ''DELETE FROM geometry_columns WHERE '' ||
+#if POSTGIS_PGSQL_VERSION >= 73
+		''f_table_schema = '' || quote_literal(real_schema) ||
+		'' AND '' ||
+#endif
+		'' f_table_name = '' || quote_literal(table_name);
+	
+	-- Remove table 
+	EXECUTE ''DROP TABLE ''
+#if POSTGIS_PGSQL_VERSION >= 73
+		|| quote_ident(real_schema) || ''.'' ||
+#endif 
+		quote_ident(table_name);
+
+	RETURN
+#if POSTGIS_PGSQL_VERSION >= 73
+		real_schema || ''.'' ||
+#endif 
+		table_name ||'' dropped.'';
+	
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYTABLE
+--   <schema>, <table>
+-----------------------------------------------------------------------
+--
+-- Drop a table and all its references in geometry_columns
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION DropGeometryTable(varchar,varchar) RETURNS text AS 
+'SELECT DropGeometryTable('''',$1,$2)'
+LANGUAGE 'sql' WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYTABLE
+--   <table>
+-----------------------------------------------------------------------
+--
+-- Drop a table and all its references in geometry_columns
+-- For PG>=73 use current_schema()
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION DropGeometryTable(varchar) RETURNS text AS 
+'SELECT DropGeometryTable('''','''',$1)'
+LANGUAGE 'sql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- UPDATEGEOMETRYSRID
+--   <catalogue>, <schema>, <table>, <column>, <srid>
+-----------------------------------------------------------------------
+--
+-- Change SRID of all features in a spatially-enabled table
+--
+-----------------------------------------------------------------------
+CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer)
+	RETURNS text
+	AS 
+'
+DECLARE
+	catalog_name alias for $1; 
+	schema_name alias for $2;
+	table_name alias for $3;
+	column_name alias for $4;
+	new_srid alias for $5;
+	myrec RECORD;
+	okay boolean;
+	cname varchar;
+	real_schema name;
+
+BEGIN
+
+
+#if POSTGIS_PGSQL_VERSION >= 73
+	-- Find, check or fix schema_name
+	IF ( schema_name != '''' ) THEN
+		okay = ''f'';
+
+		FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
+			okay := ''t'';
+		END LOOP;
+
+		IF ( okay <> ''t'' ) THEN
+			RAISE EXCEPTION ''Invalid schema name'';
+		ELSE
+			real_schema = schema_name;
+		END IF;
+	ELSE
+		SELECT INTO real_schema current_schema()::text;
+	END IF;
+#endif
+
+ 	-- Find out if the column is in the geometry_columns table
+	okay = ''f'';
+	FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP
+		okay := ''t'';
+	END LOOP; 
+	IF (okay <> ''t'') THEN 
+		RAISE EXCEPTION ''column not found in geometry_columns table'';
+		RETURN ''f'';
+	END IF;
+
+	-- Update ref from geometry_columns table
+	EXECUTE ''UPDATE geometry_columns SET SRID = '' || new_srid::text || 
+		'' where f_table_schema = '' ||
+		quote_literal(real_schema) || '' and f_table_name = '' ||
+		quote_literal(table_name)  || '' and f_geometry_column = '' ||
+		quote_literal(column_name);
+	
+	-- Make up constraint name
+	cname = ''enforce_srid_''  || column_name;
+
+	-- Drop enforce_srid constraint
+#if POSTGIS_PGSQL_VERSION < 73
+	EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
+#else
+	EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
+		''.'' || quote_ident(table_name) ||
+#endif
+		'' DROP constraint '' || quote_ident(cname);
+
+	-- Update geometries SRID
+#if POSTGIS_PGSQL_VERSION < 73
+	EXECUTE ''UPDATE '' || quote_ident(table_name) ||
+#else
+	EXECUTE ''UPDATE '' || quote_ident(real_schema) ||
+		''.'' || quote_ident(table_name) ||
+#endif
+		'' SET '' || quote_ident(column_name) ||
+		'' = setSRID('' || quote_ident(column_name) ||
+		'', '' || new_srid::text || '')'';
+
+	-- Reset enforce_srid constraint
+#if POSTGIS_PGSQL_VERSION < 73
+	EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
+#else
+	EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
+		''.'' || quote_ident(table_name) ||
+#endif
+		'' ADD constraint '' || quote_ident(cname) ||
+		'' CHECK (srid('' || quote_ident(column_name) ||
+		'') = '' || new_srid::text || '')'';
+
+	RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' SRID changed to '' || new_srid::text;
+	
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- UPDATEGEOMETRYSRID
+--   <schema>, <table>, <column>, <srid>
+-----------------------------------------------------------------------
+CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,integer)
+	RETURNS text
+	AS '
+DECLARE
+	ret  text;
+BEGIN
+	SELECT UpdateGeometrySRID('''',$1,$2,$3,$4) into ret;
+	RETURN ret;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- UPDATEGEOMETRYSRID
+--   <table>, <column>, <srid>
+-----------------------------------------------------------------------
+CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,integer)
+	RETURNS text
+	AS '
+DECLARE
+	ret  text;
+BEGIN
+	SELECT UpdateGeometrySRID('''','''',$1,$2,$3) into ret;
+	RETURN ret;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- UPDATE_GEOMETRY_STATS()
+-----------------------------------------------------------------------
+--
+-- Only meaningful for PG<75.
+-- Gather statisticts about geometry columns for use
+-- with cost estimator.
+--
+-- It is defined also for PG>=75 for back-compatibility
+--
+-----------------------------------------------------------------------
+#if POSTGIS_PGSQL_VERSION >= 80
+CREATEFUNCTION update_geometry_stats() RETURNS text
+AS ' SELECT ''update_geometry_stats() has been obsoleted. Statistics are automatically built running the ANALYZE command''::text' LANGUAGE 'sql';
+#else
+CREATEFUNCTION update_geometry_stats()
+RETURNS text
+AS
+'
+DECLARE
+	result text;
+	stated integer;
+BEGIN
+
+	UPDATE geometry_columns SET
+#if POSTGIS_PGSQL_VERSION >= 73
+		stats = (build_histogram2d(create_histogram2d(
+			find_extent(f_table_schema, f_table_name, f_geometry_column), 40), f_table_schema, f_table_name, f_geometry_column))
+		FROM pg_class c, pg_attribute a, pg_namespace n
+		WHERE n.nspname = f_table_schema::name
+		AND c.relname = f_table_name::name
+		AND c.relnamespace = n.oid
+#else
+		stats = (build_histogram2d(create_histogram2d(
+			find_extent(f_table_name, f_geometry_column),
+			40), f_table_name, f_geometry_column))
+		FROM pg_class c, pg_attribute a
+		WHERE c.relname = f_table_name::name
+#endif
+		AND a.attname = f_geometry_column::name
+		AND a.attrelid = c.oid
+		AND geometry_columns.attrelid is not null;
+
+	GET DIAGNOSTICS stated = ROW_COUNT;
+
+	result = ''stats:'' || stated::text;
+
+	return result;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT; 
+#endif
+
+-----------------------------------------------------------------------
+-- UPDATE_GEOMETRY_STATS( <table>, <column> )
+-----------------------------------------------------------------------
+--
+-- Only meaningful for PG<75.
+-- Gather statisticts about a geometry column for use
+-- with cost estimator.
+--
+-- It is defined also for PG>=75 for back-compatibility
+--
+-----------------------------------------------------------------------
+#if POSTGIS_PGSQL_VERSION >= 80
+CREATEFUNCTION update_geometry_stats(varchar,varchar) RETURNS text
+AS 'SELECT update_geometry_stats();' LANGUAGE 'sql' ;
+#else
+CREATEFUNCTION update_geometry_stats(varchar,varchar) RETURNS text
+AS
+'
+DECLARE
+	tablename aliAS for $1;
+	columnname aliAS for $2;
+	stated integer;
+	result text;
+BEGIN
+
+	EXECUTE ''UPDATE geometry_columns SET
+#if POSTGIS_PGSQL_VERSION >= 73
+			stats = (build_histogram2d(create_histogram2d(
+				find_extent(f_table_schema,
+					f_table_name,
+					f_geometry_column), 40),
+					f_table_schema, f_table_name,
+					f_geometry_column))
+			FROM pg_class c, pg_attribute a, pg_namespace n
+			WHERE n.nspname = f_table_schema::name
+			AND c.relname = f_table_name::name
+			AND a.attname = f_geometry_column::name
+			AND c.relnamespace = n.oid
+			AND a.attrelid = c.oid
+#else
+			stats = (build_histogram2d(create_histogram2d(
+				find_extent(f_table_name, f_geometry_column),
+				40), f_table_name, f_geometry_column))
+			FROM pg_class c, pg_attribute a
+			WHERE c.relname = f_table_name::name
+			AND a.attname = f_geometry_column::name
+			AND a.attrelid = c.oid
+#endif
+			AND f_table_name = '' || quote_literal(tablename) || ''
+			AND f_geometry_column = '' || quote_literal(columnname)
+			|| '' AND geometry_columns.attrelid is not null'';
+
+	GET DIAGNOSTICS stated = ROW_COUNT;
+
+	result = ''stats:'' || stated::text;
+
+	return result;
+END;
+'
+LANGUAGE 'plpgsql' _VOLATILE_STRICT;
+
+#endif 
+
+-----------------------------------------------------------------------
+-- FIND_SRID( <schema>, <table>, <geom col> )
+-----------------------------------------------------------------------
+CREATEFUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS
+'DECLARE
+   schem text;
+   tabl text;
+   sr int4;
+BEGIN
+   IF $1 IS NULL THEN
+      RAISE EXCEPTION ''find_srid() - schema is NULL!'';
+   END IF;
+   IF $2 IS NULL THEN
+      RAISE EXCEPTION ''find_srid() - table name is NULL!'';
+   END IF;
+   IF $3 IS NULL THEN
+      RAISE EXCEPTION ''find_srid() - column name is NULL!'';
+   END IF;
+   schem = $1;
+   tabl = $2;
+-- if the table contains a . and the schema is empty
+-- split the table into a schema and a table
+-- otherwise drop through to default behavior
+   IF ( schem = '''' and tabl LIKE ''%.%'' ) THEN
+     schem = substr(tabl,1,strpos(tabl,''.'')-1);
+     tabl = substr(tabl,length(schem)+2);
+   ELSE
+     schem = schem || ''%'';
+   END IF;
+
+   select SRID into sr from geometry_columns where f_table_schema like schem and f_table_name = tabl and f_geometry_column = $3;
+   IF NOT FOUND THEN
+       RAISE EXCEPTION ''find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table?  Is there an uppercase/lowercase missmatch?'';
+   END IF;
+  return sr;
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable); 
+
+
+---------------------------------------------------------------
+-- PROJ support
+---------------------------------------------------------------
+
+CREATEFUNCTION get_proj4_from_srid(integer) RETURNS text AS
+'
+BEGIN
+	RETURN proj4text::text FROM spatial_ref_sys WHERE srid= $1;
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
+
+
+
+CREATEFUNCTION transform_geometry(geometry,text,text,int)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','transform_geom'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+CREATEFUNCTION transform(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','transform'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: transform(geometry,integer)
+CREATEFUNCTION ST_Transform(geometry,integer)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','transform'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+
+-----------------------------------------------------------------------
+-- POSTGIS_VERSION()
+-----------------------------------------------------------------------
+
+CREATEFUNCTION postgis_version() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+CREATEFUNCTION postgis_proj_version() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+--
+-- IMPORTANT:
+-- Starting at 1.1.0 this function is used by postgis_proc_upgrade.pl
+-- to extract version of postgis being installed.
+-- Do not modify this w/out also changing postgis_proc_upgrade.pl
+--
+CREATEFUNCTION postgis_scripts_installed() RETURNS text
+        AS _POSTGIS_SQL_SELECT_POSTGIS_VERSION
+        LANGUAGE 'sql' _IMMUTABLE;
+
+CREATEFUNCTION postgis_lib_version() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE; -- a new lib will require a new session
+
+-- NOTE: starting at 1.1.0 this is the same of postgis_lib_version()
+CREATEFUNCTION postgis_scripts_released() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+CREATEFUNCTION postgis_uses_stats() RETURNS bool
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+CREATEFUNCTION postgis_geos_version() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+CREATEFUNCTION postgis_jts_version() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+CREATEFUNCTION postgis_scripts_build_date() RETURNS text
+        AS _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE
+        LANGUAGE 'sql' _IMMUTABLE;
+
+CREATEFUNCTION postgis_lib_build_date() RETURNS text
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE;
+
+
+
+CREATEFUNCTION postgis_full_version() RETURNS text
+AS '
+DECLARE
+	libver text;
+	projver text;
+	geosver text;
+	jtsver text;
+	usestats bool;
+	dbproc text;
+	relproc text;
+	fullver text;
+BEGIN
+	SELECT postgis_lib_version() INTO libver;
+	SELECT postgis_proj_version() INTO projver;
+	SELECT postgis_geos_version() INTO geosver;
+	SELECT postgis_jts_version() INTO jtsver;
+	SELECT postgis_uses_stats() INTO usestats;
+	SELECT postgis_scripts_installed() INTO dbproc;
+	SELECT postgis_scripts_released() INTO relproc;
+
+	fullver = ''POSTGIS="'' || libver || ''"'';
+
+	IF  geosver IS NOT NULL THEN
+		fullver = fullver || '' GEOS="'' || geosver || ''"'';
+	END IF;
+
+	IF  jtsver IS NOT NULL THEN
+		fullver = fullver || '' JTS="'' || jtsver || ''"'';
+	END IF;
+
+	IF  projver IS NOT NULL THEN
+		fullver = fullver || '' PROJ="'' || projver || ''"'';
+	END IF;
+
+	IF usestats THEN
+		fullver = fullver || '' USE_STATS'';
+	END IF;
+
+	-- fullver = fullver || '' DBPROC="'' || dbproc || ''"'';
+	-- fullver = fullver || '' RELPROC="'' || relproc || ''"'';
+
+	IF dbproc != relproc THEN
+		fullver = fullver || '' (procs from '' || dbproc || '' need upgrade)'';
+	END IF;
+
+	RETURN fullver;
+END
+'
+LANGUAGE 'plpgsql' _IMMUTABLE;
+
+---------------------------------------------------------------
+-- CASTS
+---------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d(geometry)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d(geometry)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box3d(geometry)
+        RETURNS box3d
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX3D'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box3d(geometry)
+        RETURNS box3d
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX3D'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box(geometry)
+        RETURNS box
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box(geometry)
+        RETURNS box
+        AS 'MODULE_PATHNAME','LWGEOM_to_BOX'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box2d(box3d)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','BOX3D_to_BOX2DFLOAT4'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box2d(box3d)
+        RETURNS box2d
+        AS 'MODULE_PATHNAME','BOX3D_to_BOX2DFLOAT4'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box3d(box2d)
+        RETURNS box3d
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_BOX3D'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box3d(box2d)
+        RETURNS box3d
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_BOX3D'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION box(box3d)
+        RETURNS box
+        AS 'MODULE_PATHNAME','BOX3D_to_BOX'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_box(box3d)
+        RETURNS box
+        AS 'MODULE_PATHNAME','BOX3D_to_BOX'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION text(geometry)
+        RETURNS text
+        AS 'MODULE_PATHNAME','LWGEOM_to_text'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_text(geometry)
+        RETURNS text
+        AS 'MODULE_PATHNAME','LWGEOM_to_text'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- this is kept for backward-compatibility
+-- Deprecation in 1.2.3
+CREATEFUNCTION box3dtobox(box3d)
+        RETURNS box
+        AS 'SELECT box($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry(box2d)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_LWGEOM'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry(box2d)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_LWGEOM'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry(box3d)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','BOX3D_to_LWGEOM'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry(box3d)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','BOX3D_to_LWGEOM'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry(text)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry(text)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry(chip)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','CHIP_to_LWGEOM'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry(chip)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','CHIP_to_LWGEOM'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geometry(bytea)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_from_bytea'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geometry(bytea)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_from_bytea'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION bytea(geometry)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_to_bytea'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_bytea(geometry)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_to_bytea'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION text(bool)
+	RETURNS text
+	AS 'MODULE_PATHNAME','BOOL_to_text'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_text(bool)
+	RETURNS text
+	AS 'MODULE_PATHNAME','BOOL_to_text'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- 7.3+ explicit casting definitions
+#if POSTGIS_PGSQL_VERSION >= 73
+CREATE CAST (geometry AS box2d) WITH FUNCTION ST_box2d(geometry) AS IMPLICIT;
+CREATE CAST (geometry AS box3d) WITH FUNCTION ST_box3d(geometry) AS IMPLICIT;
+CREATE CAST (geometry AS box) WITH FUNCTION ST_box(geometry) AS IMPLICIT;
+CREATE CAST (box3d AS box2d) WITH FUNCTION ST_box2d(box3d) AS IMPLICIT;
+CREATE CAST (box2d AS box3d) WITH FUNCTION ST_box3d(box2d) AS IMPLICIT;
+CREATE CAST (box2d AS geometry) WITH FUNCTION ST_geometry(box2d) AS IMPLICIT;
+CREATE CAST (box3d AS box) WITH FUNCTION ST_box(box3d) AS IMPLICIT;
+CREATE CAST (box3d AS geometry) WITH FUNCTION ST_geometry(box3d) AS IMPLICIT;
+CREATE CAST (text AS geometry) WITH FUNCTION ST_geometry(text) AS IMPLICIT;
+CREATE CAST (geometry AS text) WITH FUNCTION ST_text(geometry) AS IMPLICIT;
+CREATE CAST (chip AS geometry) WITH FUNCTION ST_geometry(chip) AS IMPLICIT;
+CREATE CAST (bytea AS geometry) WITH FUNCTION ST_geometry(bytea) AS IMPLICIT;
+CREATE CAST (geometry AS bytea) WITH FUNCTION ST_bytea(geometry) AS IMPLICIT;
+-- CREATE CAST (bool AS text) WITH FUNCTION ST_text(bool) AS IMPLICIT;
+#endif
+
+---------------------------------------------------------------
+-- Algorithms
+---------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Simplify(geometry, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Simplify(geometry, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- SnapToGrid(input, xoff, yoff, xsize, ysize)
+-- Deprecation in 1.2.3
+CREATEFUNCTION SnapToGrid(geometry, float8, float8, float8, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- SnapToGrid(input, xsize, ysize) # offsets=0
+-- Deprecation in 1.2.3
+CREATEFUNCTION SnapToGrid(geometry, float8, float8)
+   RETURNS geometry
+   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
+   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8)
+   RETURNS geometry
+   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
+   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- SnapToGrid(input, size) # xsize=ysize=size, offsets=0
+-- Deprecation in 1.2.3
+CREATEFUNCTION SnapToGrid(geometry, float8)
+   RETURNS geometry
+   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
+   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_SnapToGrid(geometry, float8)
+   RETURNS geometry
+   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
+   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize)
+-- Deprecation in 1.2.3
+CREATEFUNCTION SnapToGrid(geometry, geometry, float8, float8, float8, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Segmentize(geometry, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Segmentize(geometry, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+---------------------------------------------------------------
+-- LRS
+---------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION line_interpolate_point(geometry, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_line_interpolate_point'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_line_interpolate_point(geometry, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_line_interpolate_point'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION line_substring(geometry, float8, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_line_substring'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_line_substring(geometry, float8, float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_line_substring'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION line_locate_point(geometry, geometry)
+   RETURNS float8
+   AS 'MODULE_PATHNAME', 'LWGEOM_line_locate_point'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_line_locate_point(geometry, geometry)
+   RETURNS float8
+   AS 'MODULE_PATHNAME', 'LWGEOM_line_locate_point'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION locate_between_measures(geometry, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_locate_between_measures(geometry, float8, float8)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION locate_along_measure(geometry, float8)
+	RETURNS geometry
+	AS 'SELECT locate_between_measures($1, $2, $2)'
+	LANGUAGE 'sql' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_locate_along_measure(geometry, float8)
+	RETURNS geometry
+	AS 'SELECT locate_between_measures($1, $2, $2)'
+	LANGUAGE 'sql' _IMMUTABLE_STRICT;
+
+---------------------------------------------------------------
+-- GEOS
+---------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION intersection(geometry,geometry)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME','intersection'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: intersection(geometry,geometry)
+CREATEFUNCTION ST_Intersection(geometry,geometry)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','intersection'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION buffer(geometry,float8)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME','buffer'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: buffer(geometry,float8)
+CREATEFUNCTION ST_Buffer(geometry,float8)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','buffer'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION buffer(geometry,float8,integer)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME','buffer'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_buffer(geometry,float8,integer)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME','buffer'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+   
+-- Deprecation in 1.2.3
+CREATEFUNCTION convexhull(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','convexhull'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: convexhull(geometry)
+CREATEFUNCTION ST_ConvexHull(geometry)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','convexhull'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+#if POSTGIS_GEOS_VERSION >= 30
+-- Requires GEOS >= 3.0.0
+-- Availability: 1.3.3
+CREATEFUNCTION ST_SimplifyPreserveTopology(geometry, float8)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','topologypreservesimplify'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+#endif
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION difference(geometry,geometry)
+	RETURNS geometry
+        AS 'MODULE_PATHNAME','difference'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: difference(geometry,geometry)
+CREATEFUNCTION ST_Difference(geometry,geometry)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','difference'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION boundary(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','boundary'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: boundary(geometry)
+CREATEFUNCTION ST_Boundary(geometry)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','boundary'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION symdifference(geometry,geometry)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','symdifference'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: symdifference(geometry,geometry)
+CREATEFUNCTION ST_SymDifference(geometry,geometry)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','symdifference'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION symmetricdifference(geometry,geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','symdifference'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_symmetricdifference(geometry,geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','symdifference'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomUnion(geometry,geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','geomunion'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: GeomUnion(geometry,geometry)
+CREATEFUNCTION ST_Union(geometry,geometry)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME','geomunion'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE MemGeomUnion (
+	basetype = geometry,
+	sfunc = geomunion,
+	stype = geometry
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_MemUnion (
+	basetype = geometry,
+	sfunc = ST_union,
+	stype = geometry
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION unite_garray (geometry[])
+	RETURNS geometry
+        AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_unite_garray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','unite_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE GeomUnion (
+	sfunc = geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = ST_unite_garray
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Union (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[],
+	finalfunc = ST_unite_garray
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION relate(geometry,geometry)
+   RETURNS text
+   AS 'MODULE_PATHNAME','relate_full'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_relate(geometry,geometry)
+   RETURNS text
+   AS 'MODULE_PATHNAME','relate_full'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION relate(geometry,geometry,text)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME','relate_pattern'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: relate(geometry,geometry,text)
+CREATEFUNCTION ST_Relate(geometry,geometry,text)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','relate_pattern'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION disjoint(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+   
+-- PostGIS equivalent function: disjoint(geometry,geometry)
+CREATEFUNCTION ST_Disjoint(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','disjoint'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION touches(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: touches(geometry,geometry)
+CREATEFUNCTION _ST_Touches(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','touches'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+CREATEFUNCTION ST_Touches(geometry,geometry)
+    RETURNS boolean
+    AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_DWithin(geometry, geometry, float8)
+    RETURNS boolean
+    AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND ST_Distance($1, $2) < $3'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION intersects(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: intersects(geometry,geometry)
+CREATEFUNCTION _ST_Intersects(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','intersects'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+CREATEFUNCTION ST_Intersects(geometry,geometry)
+    RETURNS boolean
+    AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+-- Deprecation in 1.2.3
+CREATEFUNCTION crosses(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: crosses(geometry,geometry)
+CREATEFUNCTION _ST_Crosses(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','crosses'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+CREATEFUNCTION ST_Crosses(geometry,geometry)
+    RETURNS boolean
+    AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION within(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: within(geometry,geometry)
+CREATEFUNCTION _ST_Within(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','within'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+CREATEFUNCTION ST_Within(geometry,geometry)
+    RETURNS boolean
+    AS 'SELECT $1 && $2 AND _ST_Within($1,$2)'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Contains(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: contains(geometry,geometry)
+CREATEFUNCTION _ST_Contains(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','contains'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+CREATEFUNCTION ST_Contains(geometry,geometry)
+    RETURNS boolean
+    AS 'SELECT $1 && $2 AND _ST_Contains($1,$2)'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+
+#if POSTGIS_GEOS_VERSION >= 30
+-- Availability: 1.2.2
+CREATEFUNCTION _ST_CoveredBy(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME', 'coveredby'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_CoveredBy(geometry,geometry)
+   RETURNS boolean
+   AS 'SELECT $1 && $2 AND _ST_CoveredBy($1,$2)'
+   LANGUAGE 'SQL' _IMMUTABLE; -- WITH(iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION _ST_Covers(geometry,geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME', 'covers'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+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)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: overlaps(geometry,geometry)
+CREATEFUNCTION _ST_Overlaps(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','overlaps'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+-- Inlines index magic
+CREATEFUNCTION ST_Overlaps(geometry,geometry)
+    RETURNS boolean
+    AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)'
+    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION IsValid(geometry)
+   RETURNS boolean
+   AS 'MODULE_PATHNAME', 'isvalid'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: IsValid(geometry)
+-- TODO: change null returns to true
+CREATEFUNCTION ST_IsValid(geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME', 'isvalid'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GEOSnoop(geometry)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'GEOSnoop'
+   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION JTSnoop(geometry)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'JTSnoop'
+   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
+
+-- This is also available w/out GEOS 
+CREATEFUNCTION Centroid(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: Centroid(geometry)
+CREATEFUNCTION ST_Centroid(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'centroid'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION IsRing(geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: IsRing(geometry)
+CREATEFUNCTION ST_IsRing(geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME', 'isring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PointOnSurface(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: PointOnSurface(geometry)
+CREATEFUNCTION ST_PointOnSurface(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'pointonsurface'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION IsSimple(geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME', 'issimple'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: IsSimple(geometry)	
+CREATEFUNCTION ST_IsSimple(geometry)
+        RETURNS boolean
+        AS 'MODULE_PATHNAME', 'issimple'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Equals(geometry,geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME','geomequals'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: Equals(geometry,geometry)
+CREATEFUNCTION ST_Equals(geometry,geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','geomequals'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-----------------------------------------------------------------------
+-- Prepared Geometry Predicates
+-- requires GEOS 3.1.0-CAPI-1.5.0 or better
+-----------------------------------------------------------------------
+
+#if POSTGIS_GEOS_VERSION >= 31
+
+-- Availability: 1.4.0
+CREATEFUNCTION _ST_ContainsPrepared(geometry,geometry,integer)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME','containsPrepared'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- 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_PATHNAME','containsProperlyPrepared'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- 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.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_PATHNAME','coversPrepared'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+ 	
+-- 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_PATHNAME','intersectsPrepared'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+ 	
+-- 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
+-----------------------------------------------------------------------
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsSVG(geometry,int4,int4)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','assvg_geometry'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsSVG(geometry,int4,int4)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','assvg_geometry'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsSVG(geometry,int4)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','assvg_geometry'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsSVG(geometry,int4)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','assvg_geometry'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsSVG(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','assvg_geometry'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsSVG(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','assvg_geometry'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-----------------------------------------------------------------------
+-- GML OUTPUT
+-----------------------------------------------------------------------
+-- _ST_AsGML(version, geom, precision)
+CREATEFUNCTION _ST_AsGML(int4, geometry, int4)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asGML'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- AsGML(geom, precision) / version=2
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsGML(geometry, int4)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsGML(2, $1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsGML(geometry, int4)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsGML(2, $1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- AsGML(geom) / precision=15 version=2
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsGML(geometry)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsGML(2, $1, 15)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availabiltiy: 1.2.2
+CREATEFUNCTION ST_AsGML(geometry)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsGML(2, $1, 15)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGML(version, geom) / precision=15 version=2
+-- Availabiltiy: 1.3.2
+CREATEFUNCTION ST_AsGML(int4, geometry)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsGML($1, $2, 15)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGML(version, geom, precision)
+-- Availabiltiy: 1.3.2
+CREATEFUNCTION ST_AsGML(int4, geometry, int4)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsGML($1, $2, $3)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-----------------------------------------------------------------------
+-- KML OUTPUT
+-----------------------------------------------------------------------
+-- _ST_AsKML(version, geom, precision)
+CREATEFUNCTION _ST_AsKML(int4, geometry, int4)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asKML'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- AsKML(geom, precision) / version=2
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsKML(geometry, int4)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML(2, transform($1,4326), $2)' 
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsKML(geometry, int4)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML(2, transform($1,4326), $2)' 
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- AsKML(geom) / precision=15 version=2
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsKML(geometry) 
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML(2, transform($1,4326), 15)' 
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- AsKML(version, geom, precision)
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsKML(int4, geometry, int4) 
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML($1, transform($2,4326), $3)' 
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availabiltiy: 1.2.2
+CREATEFUNCTION ST_AsKML(geometry)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML(2, transform($1,4326), 15)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsKML(version, geom) / precision=15 version=2
+-- Availabiltiy: 1.3.2
+CREATEFUNCTION ST_AsKML(int4, geometry)
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML($1, transform($2,4326), 15)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsKML(version, geom, precision)
+-- Availabiltiy: 1.3.2
+CREATEFUNCTION ST_AsKML(int4, geometry, int4) 
+	RETURNS TEXT
+	AS 'SELECT _ST_AsKML($1, transform($2,4326), $3)' 
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-----------------------------------------------------------------------
+-- GEOJSON OUTPUT
+-- Availabiltiy: 1.3.4
+-----------------------------------------------------------------------
+-- _ST_AsGeoJson(version, geom, precision, options)
+CREATEFUNCTION _ST_AsGeoJson(int4, geometry, int4, int4)
+        RETURNS TEXT
+        AS 'MODULE_PATHNAME','LWGEOM_asGeoJson'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGeoJson(geom, precision) / version=1 options=0
+CREATEFUNCTION ST_AsGeoJson(geometry, int4)
+        RETURNS TEXT
+        AS 'SELECT _ST_AsGeoJson(1, $1, $2, 0)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGeoJson(geom) / precision=15 version=1 options=0
+CREATEFUNCTION ST_AsGeoJson(geometry)
+        RETURNS TEXT
+        AS 'SELECT _ST_AsGeoJson(1, $1, 15, 0)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGeoJson(version, geom) / precision=15 options=0
+CREATEFUNCTION ST_AsGeoJson(int4, geometry)
+        RETURNS TEXT
+        AS 'SELECT _ST_AsGeoJson($1, $2, 15, 0)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGeoJson(version, geom, precision) / options=0
+CREATEFUNCTION ST_AsGeoJson(int4, geometry, int4)
+        RETURNS TEXT
+        AS 'SELECT _ST_AsGeoJson($1, $2, $3, 0)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGeoJson(geom, precision, options) / version=1
+CREATEFUNCTION ST_AsGeoJson(geometry, int4, int4)
+        RETURNS TEXT
+        AS 'SELECT _ST_AsGeoJson(1, $1, $2, $3)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- ST_AsGeoJson(version, geom, precision,options)
+CREATEFUNCTION ST_AsGeoJson(int4, geometry, int4, int4)
+        RETURNS TEXT
+        AS 'SELECT _ST_AsGeoJson($1, $2, $3, $4)'
+        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+
+------------------------------------------------------------------------
+-- OGC defined
+------------------------------------------------------------------------
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION NumPoints(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_numpoints_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: NumPoints(geometry)
+CREATEFUNCTION ST_NumPoints(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_numpoints_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION NumGeometries(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_numgeometries_collection'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: NumGeometries(geometry)
+CREATEFUNCTION ST_NumGeometries(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_numgeometries_collection'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeometryN(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_geometryn_collection'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: GeometryN(geometry)
+CREATEFUNCTION ST_GeometryN(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_geometryn_collection'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Dimension(geometry)
+	RETURNS int4
+	AS 'MODULE_PATHNAME', 'LWGEOM_dimension'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: Dimension(geometry)
+CREATEFUNCTION ST_Dimension(geometry)
+    RETURNS int4
+    AS 'MODULE_PATHNAME', 'LWGEOM_dimension'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION ExteriorRing(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_exteriorring_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: ExteriorRing(geometry)
+CREATEFUNCTION ST_ExteriorRing(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_exteriorring_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION NumInteriorRings(geometry)
+	RETURNS integer
+	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: NumInteriorRings(geometry)
+CREATEFUNCTION ST_NumInteriorRings(geometry)
+	RETURNS integer
+	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION NumInteriorRing(geometry)
+	RETURNS integer
+	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_NumInteriorRing(geometry)
+	RETURNS integer
+	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION InteriorRingN(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_interiorringn_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: InteriorRingN(geometry)
+CREATEFUNCTION ST_InteriorRingN(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_interiorringn_polygon'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeometryType(geometry)
+	RETURNS text
+	AS 'MODULE_PATHNAME', 'LWGEOM_getTYPE'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Not quite equivalent to GeometryType
+CREATEFUNCTION ST_GeometryType(geometry)
+    RETURNS text
+    AS '
+    DECLARE
+        gtype text := geometrytype($1);
+    BEGIN
+        IF (gtype IN (''POINT'', ''POINTM'')) THEN
+            gtype := ''Point'';
+        ELSIF (gtype IN (''LINESTRING'', ''LINESTRINGM'')) THEN
+            gtype := ''LineString'';
+        ELSIF (gtype IN (''POLYGON'', ''POLYGONM'')) THEN
+            gtype := ''Polygon'';
+        ELSIF (gtype IN (''MULTIPOINT'', ''MULTIPOINTM'')) THEN
+            gtype := ''MultiPoint'';
+        ELSIF (gtype IN (''MULTILINESTRING'', ''MULTILINESTRINGM'')) THEN
+            gtype := ''MultiLineString'';
+        ELSIF (gtype IN (''MULTIPOLYGON'', ''MULTIPOLYGONM'')) THEN
+            gtype := ''MultiPolygon'';
+        ELSE
+            gtype := ''Geometry'';
+        END IF;
+        RETURN ''ST_'' || gtype;
+    END
+	'
+	LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PointN(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_pointn_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: PointN(geometry,integer)
+CREATEFUNCTION ST_PointN(geometry,integer)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_pointn_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION X(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_x_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: X(geometry)
+CREATEFUNCTION ST_X(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_x_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Y(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_y_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+        
+-- PostGIS equivalent function: Y(geometry)
+CREATEFUNCTION ST_Y(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_y_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION Z(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_z_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: Z(geometry)
+CREATEFUNCTION SE_Z(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_z_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_Z(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_z_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION M(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_m_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_M(geometry)
+	RETURNS float8
+	AS 'MODULE_PATHNAME','LWGEOM_m_point'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION StartPoint(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_startpoint_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: StartPoint(geometry))
+CREATEFUNCTION ST_StartPoint(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_startpoint_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION EndPoint(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_endpoint_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: EndPoint(geometry))
+CREATEFUNCTION ST_EndPoint(geometry)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_endpoint_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION IsClosed(geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME', 'LWGEOM_isclosed_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: IsClosed(geometry)
+CREATEFUNCTION ST_IsClosed(geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME', 'LWGEOM_isclosed_linestring'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION IsEmpty(geometry)
+	RETURNS boolean
+	AS 'MODULE_PATHNAME', 'LWGEOM_isempty'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- PostGIS equivalent function: IsEmpty(geometry)
+CREATEFUNCTION ST_IsEmpty(geometry)
+    RETURNS boolean
+    AS 'MODULE_PATHNAME', 'LWGEOM_isempty'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION SRID(geometry) 
+	RETURNS int4
+	AS 'MODULE_PATHNAME','LWGEOM_getSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: getSRID(geometry)
+CREATEFUNCTION ST_SRID(geometry) 
+    RETURNS int4
+    AS 'MODULE_PATHNAME','LWGEOM_getSRID'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION SetSRID(geometry,int4) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_setSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);	
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_SetSRID(geometry,int4) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_setSRID'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);	
+	
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsBinary(geometry)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_asBinary'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: AsBinary(geometry)
+CREATEFUNCTION ST_AsBinary(geometry)
+    RETURNS bytea
+    AS 'MODULE_PATHNAME','LWGEOM_asBinary'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsBinary(geometry,text)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_asBinary'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_AsBinary(geometry,text)
+	RETURNS bytea
+	AS 'MODULE_PATHNAME','LWGEOM_asBinary'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION AsText(geometry)
+	RETURNS TEXT
+	AS 'MODULE_PATHNAME','LWGEOM_asText'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: AsText(geometry)
+CREATEFUNCTION ST_AsText(geometry)
+    RETURNS TEXT
+    AS 'MODULE_PATHNAME','LWGEOM_asText'
+    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeometryFromText(text)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','LWGEOM_from_text'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeometryFromText(text)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','LWGEOM_from_text'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeometryFromText(text, int4)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','LWGEOM_from_text'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeometryFromText(text, int4)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME','LWGEOM_from_text'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomFromText(text)
+	RETURNS geometry AS 'SELECT geometryfromtext($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomFromText(text)
+	RETURNS geometry AS 'SELECT geometryfromtext($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomFromText(text, int4)
+	RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: GeometryFromText(text, int4)
+CREATEFUNCTION ST_GeomFromText(text, int4)
+	RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PointFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PointFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PointFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: PointFromText(text, int4)
+-- TODO: improve this ... by not duplicating constructor time.
+CREATEFUNCTION ST_PointFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
+	THEN GeomFromText($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_LineFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: LineFromText(text, int4)
+CREATEFUNCTION ST_LineFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineStringFromText(text)
+	RETURNS geometry
+	AS 'SELECT LineFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineStringFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT LineFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolyFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PolyFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolyFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+        
+-- PostGIS equivalent function: PolyFromText(text, int4)
+CREATEFUNCTION ST_PolyFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
+	THEN GeomFromText($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolygonFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT PolyFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PolygonFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT PolyFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolygonFromText(text)
+	RETURNS geometry
+	AS 'SELECT PolyFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PolygonFromText(text)
+	RETURNS geometry
+	AS 'SELECT PolyFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MLineFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: MLineFromText(text, int4)
+CREATEFUNCTION ST_MLineFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MLineFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MLineFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiLineStringFromText(text)
+	RETURNS geometry
+	AS 'SELECT MLineFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiLineStringFromText(text)
+	RETURNS geometry
+	AS 'SELECT MLineFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiLineStringFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT MLineFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiLineStringFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT MLineFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPointFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1,$2)) = ''MULTIPOINT''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: MPointFromText(text, int4)
+CREATEFUNCTION ST_MPointFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOINT''
+	THEN GeomFromText($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPointFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MPointFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPointFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT MPointFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPointFromText(text)
+	RETURNS geometry
+	AS 'SELECT MPointFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPointFromText(text)
+	RETURNS geometry
+	AS 'SELECT MPointFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPointFromText(text)
+	RETURNS geometry
+	AS 'SELECT MPointFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPointFromText(text)
+	RETURNS geometry
+	AS 'SELECT MPointFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPolyFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: MPolyFromText(text, int4)
+CREATEFUNCTION ST_MPolyFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPolyFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+--Availability: 1.2.2
+CREATEFUNCTION ST_MPolyFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPolygonFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT MPolyFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPolygonFromText(text, int4)
+	RETURNS geometry
+	AS 'SELECT MPolyFromText($1, $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPolygonFromText(text)
+	RETURNS geometry
+	AS 'SELECT MPolyFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPolygonFromText(text)
+	RETURNS geometry
+	AS 'SELECT MPolyFromText($1)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomCollFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomCollFromText(text, int4)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromText($1,$2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomCollFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomCollFromText(text)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromText($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomFromWKB(bytea)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_from_WKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomFromWKB(bytea)
+	RETURNS geometry
+	AS 'MODULE_PATHNAME','LWGEOM_from_WKB'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomFromWKB(bytea, int)
+	RETURNS geometry
+	AS 'SELECT setSRID(GeomFromWKB($1), $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: GeomFromWKB(bytea, int)
+CREATEFUNCTION ST_GeomFromWKB(bytea, int)
+	RETURNS geometry
+	AS 'SELECT setSRID(GeomFromWKB($1), $2)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PointFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: PointFromWKB(bytea, int)
+CREATEFUNCTION ST_PointFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PointFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PointFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: LineFromWKB(text, int)
+CREATEFUNCTION ST_LineFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LineFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_LineFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LinestringFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_LinestringFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION LinestringFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_LinestringFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolyFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: PolyFromWKB(text, int)
+CREATEFUNCTION ST_PolyFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolyFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PolyFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolygonFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PolygonFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION PolygonFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_PolygonFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPointFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: MPointFromWKB(text, int)
+CREATEFUNCTION ST_MPointFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPointFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MPointFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPointFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPointFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPointFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPointFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiLineFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION MultiLineFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiLineFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiLineFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MLineFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: MLineFromWKB(text, int)
+CREATEFUNCTION ST_MLineFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MLineFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MLineFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPolyFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- PostGIS equivalent function: MPolyFromWKB(text, int)
+CREATEFUNCTION ST_MPolyFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MPolyFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MPolyFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPolyFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPolyFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION MultiPolyFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_MultiPolyFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomCollFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomCollFromWKB(bytea, int)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromWKB($1, $2)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION GeomCollFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_GeomCollFromWKB(bytea)
+	RETURNS geometry
+	AS '
+	SELECT CASE
+	WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
+	THEN GeomFromWKB($1)
+	ELSE NULL END
+	'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+--
+-- SFSQL 1.1
+--
+-- BdPolyFromText(multiLineStringTaggedText String, SRID Integer): Polygon
+--
+--  Construct a Polygon given an arbitrary
+--  collection of closed linestrings as a
+--  MultiLineString text representation.
+--
+-- This is a PLPGSQL function rather then an SQL function
+-- To avoid double call of BuildArea (one to get GeometryType
+-- and another to actual return, in a CASE WHEN construct).
+-- Also, we profit from plpgsql to RAISE exceptions.
+--
+-- Deprecation in 1.2.3
+CREATE OR REPLACE FUNCTION BdPolyFromText(text, integer)
+RETURNS geometry
+AS '
+DECLARE
+	geomtext alias for $1;
+	srid alias for $2;
+	mline geometry;
+	geom geometry;
+BEGIN
+	mline := MultiLineStringFromText(geomtext, srid);
+
+	IF mline IS NULL
+	THEN
+		RAISE EXCEPTION ''Input is not a MultiLinestring'';
+	END IF;
+
+	geom := BuildArea(mline);
+
+	IF GeometryType(geom) != ''POLYGON''
+	THEN
+		RAISE EXCEPTION ''Input returns more then a single polygon, try using BdMPolyFromText instead'';
+	END IF;
+
+	RETURN geom;
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATE OR REPLACE FUNCTION ST_BdPolyFromText(text, integer)
+RETURNS geometry
+AS '
+DECLARE
+	geomtext alias for $1;
+	srid alias for $2;
+	mline geometry;
+	geom geometry;
+BEGIN
+	mline := MultiLineStringFromText(geomtext, srid);
+
+	IF mline IS NULL
+	THEN
+		RAISE EXCEPTION ''Input is not a MultiLinestring'';
+	END IF;
+
+	geom := BuildArea(mline);
+
+	IF GeometryType(geom) != ''POLYGON''
+	THEN
+		RAISE EXCEPTION ''Input returns more then a single polygon, try using BdMPolyFromText instead'';
+	END IF;
+
+	RETURN geom;
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
+
+--
+-- SFSQL 1.1
+--
+-- BdMPolyFromText(multiLineStringTaggedText String, SRID Integer): MultiPolygon
+--
+--  Construct a MultiPolygon given an arbitrary
+--  collection of closed linestrings as a
+--  MultiLineString text representation.
+--
+-- This is a PLPGSQL function rather then an SQL function
+-- To raise an exception in case of invalid input.
+--
+-- Deprecation in 1.2.3
+CREATEFUNCTION BdMPolyFromText(text, integer)
+RETURNS geometry
+AS '
+DECLARE
+	geomtext alias for $1;
+	srid alias for $2;
+	mline geometry;
+	geom geometry;
+BEGIN
+	mline := MultiLineStringFromText(geomtext, srid);
+
+	IF mline IS NULL
+	THEN
+		RAISE EXCEPTION ''Input is not a MultiLinestring'';
+	END IF;
+
+	geom := multi(BuildArea(mline));
+
+	RETURN geom;
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_BdMPolyFromText(text, integer)
+RETURNS geometry
+AS '
+DECLARE
+	geomtext alias for $1;
+	srid alias for $2;
+	mline geometry;
+	geom geometry;
+BEGIN
+	mline := MultiLineStringFromText(geomtext, srid);
+
+	IF mline IS NULL
+	THEN
+		RAISE EXCEPTION ''Input is not a MultiLinestring'';
+	END IF;
+
+	geom := multi(BuildArea(mline));
+
+	RETURN geom;
+END;
+'
+LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
+
+#include "long_xact.sql.in"
+#include "sqlmm.sql.in"
+
+---------------------------------------------------------------
+-- SQL-MM
+---------------------------------------------------------------
+
+--
+-- SQL-MM
+--
+-- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
+--
+-- Converts a given geometry to a linear geometry.  Each curveed
+-- geometry or segment is converted into a linear approximation using
+-- the given number of segments per quarter circle.
+CREATEFUNCTION ST_CurveToLine(geometry, integer)
+   RETURNS geometry
+   AS 'MODULE_PATHNAME', 'LWGEOM_curve_segmentize'
+   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+--
+-- SQL-MM
+--
+-- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
+--
+-- Converts a given geometry to a linear geometry.  Each curveed
+-- geometry or segment is converted into a linear approximation using
+-- the default value of 32 segments per quarter circle
+CREATEFUNCTION ST_CurveToLine(geometry)
+	RETURNS geometry AS 'SELECT ST_CurveToLine($1, 32)'
+	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
+
+CREATEFUNCTION ST_HasArc(geometry)
+ 	RETURNS boolean
+	AS 'MODULE_PATHNAME', 'LWGEOM_has_arc'
+	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
+
+CREATEFUNCTION ST_LineToCurve(geometry)
+        RETURNS geometry
+        AS 'MODULE_PATHNAME', 'LWGEOM_line_desegmentize'
+        LANGUAGE 'C' _IMMUTABLE_STRICT; 
+---------------------------------------------------------------
+-- END
+---------------------------------------------------------------
+
+COMMIT;
+

Modified: trunk/lwgeom/pgsql_compat.h
===================================================================
--- trunk/lwgeom/pgsql_compat.h	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/pgsql_compat.h	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,11 +1,11 @@
 #ifndef _PGSQL_COMPAT_H
 
-#if USE_VERSION < 73
+#if POSTGIS_PGSQL_VERSION < 73
 #define WARNING NOTICE
 #endif
 
 /* PostgreSQL < 8.3 uses VARATT_SIZEP rather than SET_VARSIZE for varlena types */
-#if USE_VERSION < 83
+#if POSTGIS_PGSQL_VERSION < 83
 #define SET_VARSIZE(var, size)   VARATT_SIZEP(var) = size
 #endif
 

Modified: trunk/lwgeom/sqldefines.h
===================================================================
--- trunk/lwgeom/sqldefines.h	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/sqldefines.h	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,9 +1,25 @@
 #ifndef _LWPGIS_DEFINES
 #define _LWPGIS_DEFINES
 
+/*
+ * Define just the version numbers; otherwise we get some strange substitutions in lwpostgis.sql.in
+ */
+#define POSTGIS_PGSQL_VERSION 83
+#define POSTGIS_GEOS_VERSION 30
+#define POSTGIS_PROJ_VERSION 46
+
+/*
+ * Define the build date and the version number
+ * (these substitiutions are done with extra quotes sinces CPP
+ * won't substitute within apostrophes)
+ */
+#define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''1.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1''::text AS version'
+#define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''2008-05-14 08:59:43''::text AS version'
+
+
 #define CREATEFUNCTION CREATE OR REPLACE FUNCTION
 
-#if USE_VERSION > 72
+#if POSTGIS_PGSQL_VERSION > 72
 # define _IMMUTABLE_STRICT IMMUTABLE STRICT
 # define _IMMUTABLE IMMUTABLE
 # define _STABLE_STRICT STABLE STRICT
@@ -23,7 +39,7 @@
 # define _SECURITY_DEFINER 
 #endif 
 
-#if USE_VERSION >= 73
+#if POSTGIS_PGSQL_VERSION >= 73
 # define HAS_SCHEMAS 1
 #endif
 

Added: trunk/lwgeom/sqldefines.h.in
===================================================================
--- trunk/lwgeom/sqldefines.h.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/sqldefines.h.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,46 @@
+#ifndef _LWPGIS_DEFINES
+#define _LWPGIS_DEFINES
+
+/*
+ * Define just the version numbers; otherwise we get some strange substitutions in lwpostgis.sql.in
+ */
+#define POSTGIS_PGSQL_VERSION @POSTGIS_PGSQL_VERSION@
+#define POSTGIS_GEOS_VERSION @POSTGIS_GEOS_VERSION@
+#define POSTGIS_PROJ_VERSION @POSTGIS_PROJ_VERSION@
+
+/*
+ * Define the build date and the version number
+ * (these substitiutions are done with extra quotes sinces CPP
+ * won't substitute within apostrophes)
+ */
+#define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''@POSTGIS_VERSION@''::text AS version'
+#define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''@POSTGIS_BUILD_DATE@''::text AS version'
+
+
+#define CREATEFUNCTION CREATE OR REPLACE FUNCTION
+
+#if POSTGIS_PGSQL_VERSION > 72
+# define _IMMUTABLE_STRICT IMMUTABLE STRICT
+# define _IMMUTABLE IMMUTABLE
+# define _STABLE_STRICT STABLE STRICT
+# define _STABLE STABLE
+# define _VOLATILE_STRICT VOLATILE STRICT
+# define _VOLATILE VOLATILE
+# define _STRICT STRICT
+# define _SECURITY_DEFINER SECURITY DEFINER
+#else 
+# define _IMMUTABLE_STRICT  with(iscachable,isstrict)
+# define _IMMUTABLE with(iscachable)
+# define _STABLE_STRICT with(isstrict)
+# define _STABLE 
+# define _VOLATILE_STRICT with(isstrict)
+# define _VOLATILE 
+# define _STRICT with(isstrict)
+# define _SECURITY_DEFINER 
+#endif 
+
+#if POSTGIS_PGSQL_VERSION >= 73
+# define HAS_SCHEMAS 1
+#endif
+
+#endif /* _LWPGIS_DEFINES */

Modified: trunk/lwgeom/sqlmm.sql.in
===================================================================
--- trunk/lwgeom/sqlmm.sql.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/lwgeom/sqlmm.sql.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -118,7 +118,7 @@
 -- TODO: SE_AsShape(geometry)
 --CREATEFUNCTION SE_AsShape(geometry)
 --    RETURNS bytea
---    AS '@MODULE_FILENAME@','LWGEOM_AsShape'
+--    AS 'MODULE_PATHNAME','LWGEOM_AsShape'
 --    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
 -------------------------------------------------------------------------------
@@ -128,7 +128,7 @@
 -- PostGIS equivalent function: ndims(geometry)
 CREATEFUNCTION ST_CoordDim(geometry)
     RETURNS smallint
-    AS '@MODULE_FILENAME@', 'LWGEOM_ndims'
+    AS 'MODULE_PATHNAME', 'LWGEOM_ndims'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
 
 -- ST_Dimension(geometry) - already defined.
@@ -193,19 +193,19 @@
 -- PostGIS equivalent function: makePoint(float8,float8)
 CREATEFUNCTION ST_Point(float8, float8)
 	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
+	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
 
 -- PostGIS equivalent function: Z(geometry)
 CREATEFUNCTION SE_Z(geometry)
 	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_z_point'
+	AS 'MODULE_PATHNAME','LWGEOM_z_point'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
 
 -- PostGIS equivalent function: M(geometry)
 CREATEFUNCTION SE_M(geometry)
 	RETURNS float8
-	AS '@MODULE_FILENAME@','LWGEOM_m_point'
+	AS 'MODULE_PATHNAME','LWGEOM_m_point'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
 
 -------------------------------------------------------------------------------
@@ -321,7 +321,7 @@
 -- PostGIS equivalent function: locate_between_measures(geometry, float8, float8)
 CREATEFUNCTION SE_LocateBetween(geometry, float8, float8)
 	RETURNS geometry
-	AS '@MODULE_FILENAME@', 'LWGEOM_locate_between_m'
+	AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m'
 	LANGUAGE 'C' _IMMUTABLE_STRICT;
 
 

Added: trunk/macros/ac_proj4_version.m4
===================================================================
--- trunk/macros/ac_proj4_version.m4	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/macros/ac_proj4_version.m4	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,32 @@
+dnl
+dnl Return the PROJ.4 version number
+dnl
+dnl Written by Mark Cave-Ayland
+dnl
+
+AC_DEFUN([AC_PROJ_VERSION], [
+	AC_RUN_IFELSE(
+        	[AC_LANG_PROGRAM([
+		#ifdef HAVE_STDINT_H
+        		#include <stdio.h>
+		#endif
+		#include "proj_api.h"
+	], 
+	[
+		FILE *fp; 
+
+		fp = fopen("conftest.out", "w"); 
+		fprintf(fp, "%d\n", PJ_VERSION); 
+		fclose(fp)])
+	],
+        [
+		dnl The program ran successfully, so return the version number in the form MAJORMINOR
+		$1=`cat conftest.out | sed 's/\([[0-9]]\)\([[0-9]]\)\([[0-9]]\)/\1\2/'`
+	],
+        [
+		dnl The program failed so return an empty variable
+		$1=""
+	]
+        )
+])
+

Added: trunk/postgis_config.h.in
===================================================================
--- trunk/postgis_config.h.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/postgis_config.h.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,67 @@
+/* postgis_config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `geos_c' library (-lgeos_c). */
+#undef HAVE_LIBGEOS_C
+
+/* Define to 1 if you have the `pq' library (-lpq). */
+#undef HAVE_LIBPQ
+
+/* Define to 1 if you have the `proj' library (-lproj). */
+#undef HAVE_LIBPROJ
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Enable caching of bounding box within geometries */
+#undef POSTGIS_AUTOCACHE_BBOX
+
+/* PostGIS build date */
+#undef POSTGIS_BUILD_DATE
+
+/* GEOS library version */
+#undef POSTGIS_GEOS_VERSION
+
+/* PostGIS library version */
+#undef POSTGIS_LIB_VERSION
+
+/* PostgreSQL server version */
+#undef POSTGIS_PGSQL_VERSION
+
+/* PROJ library version */
+#undef POSTGIS_PROJ_VERSION
+
+/* PostGIS scripts version */
+#undef POSTGIS_SCRIPTS_VERSION
+
+/* Enable use of ANALYZE statistics */
+#undef POSTGIS_USE_STATS
+
+/* PostGIS version */
+#undef POSTGIS_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS

Deleted: trunk/regress/Makefile
===================================================================
--- trunk/regress/Makefile	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/Makefile	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,94 +0,0 @@
-TMPDIR?=/tmp
-
-include ../Makefile.config
-
-TESTS = \
-	loader/Point \
-	loader/PointM \
-	loader/PointZ \
-	loader/MultiPoint \
-	loader/MultiPointM \
-	loader/MultiPointZ \
-	loader/Arc \
-	loader/ArcM \
-	loader/ArcZ \
-	loader/Polygon \
-	loader/PolygonM \
-	loader/PolygonZ \
-	regress \
-	regress_index \
-	regress_index_nulls \
-	lwgeom_regress \
-	regress_lrs \
-	removepoint \
-	setpoint \
-	simplify \
-	snaptogrid \
-	affine \
-	wkt \
-	measures \
-	long_xact \
-	ctors \
-	sql-mm-serialize \
-	sql-mm-circularstring \
-	sql-mm-compoundcurve \
-	sql-mm-curvepoly \
-	sql-mm-general \
-	sql-mm-multicurve \
-	sql-mm-multisurface \
-	geojson
-
-PREPROC = \
-	sql-mm-circularstring_expected \
-	sql-mm-compoundcurve_expected \
-	sql-mm-curvepoly_expected \
-	sql-mm-multicurve_expected \
-	sql-mm-multisurface_expected
-
-
-# GEOS tests only if GEOS is available
-ifeq ($(USE_GEOS),1)
-	TESTS += regress_ogc regress_bdpoly 
-
-# Covers/CoveredBy only if GEOS >= 3.0
-ifeq ($(shell expr $(GEOS_VERNUM) ">=" 30),1)
-	TESTS += regress_ogc_cover 
-
-# PreparedGeometry only if GEOS >= 3.1
-ifeq ($(shell expr $(GEOS_VERNUM) ">=" 31),1)
-	TESTS += regress_ogc_prep
-
-endif
-endif
-endif
-
-ifeq ($(USE_PROJ),1)
-	TESTS += regress_proj kml
-endif
-
-all: test 
-
-test check: lwpostgis.sql ../lwgeom/liblwgeom.so ../loader/pgsql2shp ../loader/shp2pgsql $(PREPROC)
-	@USE_VERSION="$(USE_VERSION)" ./run_test $(TESTS)
-
-lwpostgis.sql: ../lwgeom/lwpostgis.sql.in 
-	$(MAKE) -C ../lwgeom ../regress/lwpostgis.sql
-
-../lwgeom/liblwgeom.so:
-	$(MAKE) -C ../lwgeom all-shared-lib
-
-../loader/pgsql2shp:
-	$(MAKE) -C ../loader pgsql2shp
-
-../loader/shp2pgsql:
-	$(MAKE) -C ../loader shp2pgsql
-
-$(PREPROC):
-	cpp -P -traditional-cpp $@.in | grep -v "^$$" > $@
-
-cleanup:
-	@sleep 1
-	@dropdb postgis_reg > /dev/null
-
-clean:
-	rm -f lwpostgis.sql $(PREPROC)

Added: trunk/regress/Makefile.in
===================================================================
--- trunk/regress/Makefile.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/Makefile.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -0,0 +1,88 @@
+TMPDIR?=/tmp
+
+POSTGIS_PGSQL_VERSION=@POSTGIS_PGSQL_VERSION@
+POSTGIS_GEOS_VERSION=@POSTGIS_GEOS_VERSION@
+POSTGIS_PROJ_VERSION=@POSTGIS_PROJ_VERSION@
+
+TESTS = \
+	loader/Point \
+	loader/PointM \
+	loader/PointZ \
+	loader/MultiPoint \
+	loader/MultiPointM \
+	loader/MultiPointZ \
+	loader/Arc \
+	loader/ArcM \
+	loader/ArcZ \
+	loader/Polygon \
+	loader/PolygonM \
+	loader/PolygonZ \
+	regress \
+	regress_index \
+	regress_index_nulls \
+	lwgeom_regress \
+	regress_lrs \
+	removepoint \
+	setpoint \
+	simplify \
+	snaptogrid \
+	affine \
+	wkt \
+	measures \
+	long_xact \
+	ctors \
+	sql-mm-serialize \
+	sql-mm-circularstring \
+	sql-mm-compoundcurve \
+	sql-mm-curvepoly \
+	sql-mm-general \
+	sql-mm-multicurve \
+	sql-mm-multisurface \
+	geojson \
+	regress_ogc \
+	regress_bdpoly \
+	regress_proj \
+	kml
+
+
+PREPROC = \
+	sql-mm-circularstring_expected \
+	sql-mm-compoundcurve_expected \
+	sql-mm-curvepoly_expected \
+	sql-mm-multicurve_expected \
+	sql-mm-multisurface_expected
+
+
+# Covers/CoveredBy only if GEOS >= 3.0
+ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">=" 30),1)
+	TESTS += regress_ogc_cover 
+
+# PreparedGeometry only if GEOS >= 3.1
+ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">=" 31),1)
+	TESTS += regress_ogc_prep
+
+endif
+endif
+
+
+all: test 
+
+test check: ../lwgeom/liblwgeom.so ../loader/pgsql2shp ../loader/shp2pgsql $(PREPROC)
+	cp ../lwgeom/lwpostgis.sql .
+	@USE_VERSION="$(POSTGIS_PGSQL_VERSION)" ./run_test $(TESTS)
+
+../lwgeom/liblwgeom.so:
+	$(MAKE) -C ../lwgeom
+
+../loader/pgsql2shp ../loader/shp2pgsql:
+	$(MAKE) -C ../loader
+
+$(PREPROC):
+	cpp -P -traditional-cpp $@.in | grep -v "^$$" > $@
+
+cleanup:
+	@sleep 1
+	@dropdb postgis_reg > /dev/null
+
+clean:
+	rm -f lwpostgis.sql $(PREPROC)

Modified: trunk/regress/run_test
===================================================================
--- trunk/regress/run_test	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/run_test	2008-05-14 17:10:19 UTC (rev 2774)
@@ -130,7 +130,7 @@
 		> "${OUTFILE}"
 	rm ${TMPFILE}
 
-	if diff "${_expected}" "${OUTFILE}" > ${DIFFILE}; then
+	if diff -c "${_expected}" "${OUTFILE}" > ${DIFFILE}; then
 		#SUCCESS=`expr $SUCCESS + 1`
 		rm "${OUTFILE}" "${DIFFILE}" # we don't need these anymore
 		return 0

Modified: trunk/regress/sql-mm-circularstring_expected.in
===================================================================
--- trunk/regress/sql-mm-circularstring_expected.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/sql-mm-circularstring_expected.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,4 +1,4 @@
-#include "../config.h"
+#include "../postgis_config.h"
 ndims01|4
 geometrytype01|CIRCULARSTRING
 ndims02|3

Modified: trunk/regress/sql-mm-compoundcurve_expected.in
===================================================================
--- trunk/regress/sql-mm-compoundcurve_expected.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/sql-mm-compoundcurve_expected.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,4 +1,4 @@
-#include "../config.h"
+#include "../postgis_config.h"
 ndims01|4
 geometrytype01|COMPOUNDCURVE
 ndims02|3

Modified: trunk/regress/sql-mm-curvepoly_expected.in
===================================================================
--- trunk/regress/sql-mm-curvepoly_expected.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/sql-mm-curvepoly_expected.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,4 +1,4 @@
-#include "../config.h"
+#include "../postgis_config.h"
 ndims01|4
 geometrytype01|CURVEPOLYGON
 ndims02|3

Modified: trunk/regress/sql-mm-multicurve_expected.in
===================================================================
--- trunk/regress/sql-mm-multicurve_expected.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/sql-mm-multicurve_expected.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,4 +1,4 @@
-#include "../config.h"
+#include "../postgis_config.h"
 ndims01|4
 geometrytype01|MULTICURVE
 ndims02|3

Modified: trunk/regress/sql-mm-multisurface_expected.in
===================================================================
--- trunk/regress/sql-mm-multisurface_expected.in	2008-05-14 16:43:12 UTC (rev 2773)
+++ trunk/regress/sql-mm-multisurface_expected.in	2008-05-14 17:10:19 UTC (rev 2774)
@@ -1,4 +1,4 @@
-#include "../config.h"
+#include "../postgis_config.h"
 ndims01|4
 geometrytype01|MULTISURFACE
 ndims02|3



More information about the postgis-commits mailing list