This is an automated email from the git hooks/post-receive script. markus_wanner-guest pushed a commit to branch master in repository postgis.
commit d414313638a8e8026bb6dc8951223054b35434b7 Author: Markus Wanner <[email protected]> Date: Fri Jul 10 07:28:07 2015 +0200 Imported Upstream version 2.1.8+dfsg --- ._config.guess | Bin 0 -> 239 bytes ._config.sub | Bin 0 -> 239 bytes ._install-sh | Bin 0 -> 239 bytes ChangeLog | 147 ++++++++++++ NEWS | 15 ++ README.postgis | 4 +- Version.config | 2 +- config.guess | 6 +- config.sub | 10 +- configure | 255 +++++++++++++++------ configure.ac | 2 +- doc/faq_raster.xml | 3 +- doc/introduction.xml | 2 +- doc/reference_sfcgal.xml | 7 + doc/release_notes.xml | 59 +++-- extensions/postgis/postgis.control | 2 +- .../postgis_tiger_geocoder.control | 2 +- .../postgis_topology/postgis_topology.control | 2 +- extensions/upgradeable_versions.mk | 11 +- liblwgeom/Makefile.in | 1 + liblwgeom/cunit/cu_algorithm.c | 11 +- liblwgeom/cunit/cu_libgeom.c | 46 +++- liblwgeom/cunit/cu_ptarray.c | 2 +- liblwgeom/g_serialized.c | 47 ++-- liblwgeom/lwgeodetic.h | 4 +- liblwgeom/lwgeodetic_tree.h | 2 +- liblwgeom/lwgeom.c | 7 +- liblwgeom/lwgeom_geos.c | 4 +- liblwgeom/lwin_geojson.c | 71 +++--- liblwgeom/lwline.c | 7 +- liblwgeom/lwlinearreferencing.c | 28 ++- liblwgeom/ptarray.c | 10 +- libtool | 159 +++++++++++-- loader/shp2pgsql-core.c | 5 + loader/shp2pgsql-core.h | 5 +- ltmain.sh | 81 ++++++- macros/._libtool.m4 | Bin 0 -> 239 bytes macros/._ltoptions.m4 | Bin 0 -> 239 bytes macros/._ltsugar.m4 | Bin 0 -> 239 bytes macros/._lt~obsolete.m4 | Bin 0 -> 239 bytes macros/libtool.m4 | 171 +++++++++----- macros/ltoptions.m4 | 2 +- macros/ltsugar.m4 | 2 +- macros/ltversion.m4 | 12 +- macros/lt~obsolete.m4 | 2 +- postgis/geography_btree.c | 32 ++- postgis/geography_inout.c | 4 +- postgis/lwgeom_accum.c | 11 +- postgis/lwgeom_export.c | 42 ++-- postgis/lwgeom_functions_basic.c | 9 +- postgis/postgis.sql.in | 95 ++++---- postgis/sqldefines.h | 10 +- postgis_svn_revision.h | 2 +- raster/test/regress/tickets.sql | 84 +++++++ raster/test/regress/tickets_expected | 9 + regress/affine.sql | 3 + regress/affine_expected | 1 + regress/in_geojson.sql | 16 ++ regress/in_geojson_expected | 10 + regress/regress_lrs.sql | 1 + regress/regress_lrs_expected | 1 + 61 files changed, 1154 insertions(+), 384 deletions(-) diff --git a/._config.guess b/._config.guess new file mode 100755 index 0000000..92de026 Binary files /dev/null and b/._config.guess differ diff --git a/._config.sub b/._config.sub new file mode 100755 index 0000000..3309887 Binary files /dev/null and b/._config.sub differ diff --git a/._install-sh b/._install-sh new file mode 100755 index 0000000..8199457 Binary files /dev/null and b/._install-sh differ diff --git a/ChangeLog b/ChangeLog index 8044365..4946e37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,150 @@ +2015-07-04 05:48 robe + + * doc/reference_sfcgal.xml: #3116: SFCGAL add documentation for + geometry backend switch. Patch from Vincent Mora + +2015-06-30 18:02 pramsey + + * liblwgeom/lwin_geojson.c, postgis/lwgeom_export.c: Improve + geojson import for srs objects + +2015-06-24 20:23 pramsey + + * NEWS: Add #3177 + +2015-06-24 20:21 pramsey + + * liblwgeom/cunit/cu_libgeom.c, liblwgeom/g_serialized.c: #3177, + gserialized_is_empty cannot handle nested empty cases + +2015-06-24 19:07 pramsey + + * liblwgeom/lwgeodetic.h, liblwgeom/lwgeodetic_tree.h: Newlines on + fileends + +2015-06-24 19:06 pramsey + + * liblwgeom/cunit/cu_algorithm.c: Remove memory leak + +2015-06-24 19:05 pramsey + + * liblwgeom/cunit/cu_ptarray.c: Remote printf + +2015-06-11 20:06 strk + + * liblwgeom/lwgeom.c: Fix backport of bbox cache fix + +2015-06-11 19:47 strk + + * NEWS, liblwgeom/lwgeom.c, liblwgeom/lwline.c, + liblwgeom/lwlinearreferencing.c, postgis/geography_inout.c, + postgis/lwgeom_functions_basic.c, regress/affine.sql, + regress/affine_expected: Only add boxes to geometries that are + input with them (#3159) + + Includes testcase + +2015-06-10 09:26 strk + + * NEWS, liblwgeom/Makefile.in: Remove liblwgeom.h on make uninstall + (#3155) + +2015-05-26 08:26 strk + + * NEWS, liblwgeom/ptarray.c, regress/regress_lrs.sql, + regress/regress_lrs_expected: Fix crasher found in garden tests + + Includes testcase. + This is a backport of r13556 and r13555 from trunk. + +2015-05-19 17:38 pramsey + + * postgis/lwgeom_accum.c: Build on 9.5 + +2015-05-18 07:01 strk + + * configure.ac: Fix confusing help message for --with-pgconfig + + Patch by Volf Tomáš + +2015-05-02 23:51 dustymugs + + * raster/test/regress/tickets.sql: pg9.0 doesn't have format + function + +2015-05-02 20:45 dustymugs + + * raster/test/regress/tickets.sql, + raster/test/regress/tickets_expected: unit tests of numeric + overflow. ticket #3100 + +2015-05-02 07:01 robe + + * doc/faq_raster.xml: add other error you might see to the security + raster faq + +2015-04-29 20:03 robe + + * postgis/postgis.sql.in: #2365: Significantly improve performance + of find_srid when lots of geometry columns + +2015-04-29 15:55 pramsey + + * postgis/lwgeom_export.c, regress/in_geojson.sql, + regress/in_geojson_expected: C90 madness + +2015-04-29 12:48 pramsey + + * NEWS, postgis/lwgeom_export.c: #3104, st_asgml introduces random + characters in ID field + +2015-04-27 12:22 pramsey + + * doc/introduction.xml: Update corporate info + +2015-04-26 05:16 robe + + * extensions/upgradeable_versions.mk, postgis/postgis.sql.in: #3092 + refinement to geometry_columns view. Also add missing 2.0/2.1 + extension upgrade targets + +2015-04-26 04:33 robe + + * loader/shp2pgsql-core.h: #3102 - add include <locale.h> to fix + mingw-64 compile issue + +2015-04-23 20:00 pramsey + + * liblwgeom/lwgeom_geos.c: #3091, segfault in unit tests in debug + +2015-04-23 19:36 pramsey + + * NEWS, loader/shp2pgsql-core.c: #3048, shp2pgsql - illegal number + format when specific system locale set + +2015-04-23 18:19 pramsey + + * NEWS, postgis/geography_btree.c: #3018, GROUP BY geography + sometimes returns duplicate rows + +2015-04-15 15:42 pramsey + + * NEWS, liblwgeom/lwin_geojson.c: #3094, fixed another one + +2015-03-30 12:54 pramsey + + * doc/release_notes.xml: Unbalanced <simplesect> + +2015-03-30 12:51 pramsey + + * NEWS, Version.config: Move versions forward for development + +2015-03-30 12:50 pramsey + + * ChangeLog, NEWS, README.postgis, Version.config, + doc/release_notes.xml, extensions/upgradeable_versions.mk: + Prepare for 2.1.7 + 2015-03-27 17:21 pramsey * liblwgeom/lwin_geojson.c: Formatting diff --git a/NEWS b/NEWS index a88b42f..1ffe3d1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,18 @@ +PostGIS 2.1.8 +2015/07/07 + + * Bug Fixes * + + - #3159, do not force a bbox cache on ST_Affine + - #3018, GROUP BY geography sometimes returns duplicate rows + - #3048, shp2pgsql - illegal number format when specific system locale set + - #3094, Malformed GeoJSON inputs crash backend + - #3104, st_asgml introduces random characters in ID field + - #3155, Remove liblwgeom.h on make uninstall + - #3177, gserialized_is_empty cannot handle nested empty cases + - Fix crash in ST_LineLocatePoint + + PostGIS 2.1.7 2015/03/30 diff --git a/README.postgis b/README.postgis index 08501dd..d8964ee 100644 --- a/README.postgis +++ b/README.postgis @@ -1,8 +1,8 @@ PostGIS - Geographic Information Systems Extensions to PostgreSQL ================================================================= -:Version: 2.1.7 -:Date: 2015-03-30 +:Version: 2.1.8 +:Date: 2015-07-07 :Website: http://postgis.net This distribution contains a module which implements GIS simple features, ties diff --git a/Version.config b/Version.config index 4beb12b..6324f3f 100644 --- a/Version.config +++ b/Version.config @@ -5,5 +5,5 @@ POSTGIS_MAJOR_VERSION=2 POSTGIS_MINOR_VERSION=1 -POSTGIS_MICRO_VERSION=7 +POSTGIS_MICRO_VERSION=8 diff --git a/config.guess b/config.guess index 6c32c86..dbfb978 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2014-11-04' +timestamp='2015-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." diff --git a/config.sub b/config.sub index 7cc68ba..6d2e94c 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2014-09-26' +timestamp='2015-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -68,7 +68,7 @@ Report bugs and patches to <[email protected]>." version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -260,7 +260,7 @@ case $basic_machine in | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ - | fido | fr30 | frv \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ @@ -313,6 +313,7 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -440,6 +441,7 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ diff --git a/configure b/configure index 120a9d0..858037a 100755 --- a/configure +++ b/configure @@ -757,6 +757,7 @@ ac_ct_CXX CXXFLAGS CXX CPP +LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO @@ -876,6 +877,7 @@ CFLAGS LDFLAGS LIBS CPPFLAGS +LT_SYS_LIBRARY_PATH CPP CXX CXXFLAGS @@ -1552,6 +1554,8 @@ Some influential environment variables: LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags @@ -2554,8 +2558,8 @@ esac -macro_version='2.4.4' -macro_revision='2.4.4' +macro_version='2.4.6' +macro_revision='2.4.6' @@ -5809,6 +5813,21 @@ $as_echo "$lt_cv_truncate_bin" >&6; } + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; @@ -6816,6 +6835,41 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7403,15 +7457,8 @@ test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +func_cc_basename $compiler +cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it @@ -9870,6 +9917,8 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown + + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor @@ -10158,6 +10207,7 @@ freebsd* | dragonfly*) case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; @@ -10217,10 +10267,11 @@ hpux9* | hpux10* | hpux11*) soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -10372,7 +10423,12 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -10597,10 +10653,25 @@ fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi + if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + @@ -12565,15 +12636,8 @@ $RM -r conftest* CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + func_cc_basename $compiler +cc_basename=$func_cc_basename_result if test -n "$compiler"; then @@ -13960,51 +14024,6 @@ interix[3-9]*) postdep_objects_CXX= postdeps_CXX= ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test yes != "$solaris_use_stlport4"; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test yes != "$solaris_use_stlport4"; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; esac @@ -14828,6 +14847,8 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown + + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor @@ -15114,6 +15135,7 @@ freebsd* | dragonfly*) case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; @@ -15173,10 +15195,11 @@ hpux9* | hpux10* | hpux11*) soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -15328,7 +15351,12 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -15553,10 +15581,22 @@ fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi + if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + @@ -16998,7 +17038,7 @@ fi if test "x$PG_CONFIG" = "x"; then - as_fn_error $? "could not find pg_config within the current path. You may need to try re-running configure with a --with-pg_config parameter." "$LINENO" 5 + as_fn_error $? "could not find pg_config within the current path. You may need to try re-running configure with a --with-pgconfig parameter." "$LINENO" 5 fi else if test "x$PG_CONFIG" = "xyes"; then @@ -21706,7 +21746,8 @@ finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' @@ -21909,7 +21950,8 @@ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ @@ -22603,6 +22645,9 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # The names of the tagged configurations supported by this script. available_tags='CXX ' +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? @@ -22852,8 +22897,11 @@ hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen @@ -23018,6 +23066,65 @@ compiler_lib_search_path=$lt_compiler_lib_search_path _LT_EOF + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" diff --git a/configure.ac b/configure.ac index 88c7658..b15d237 100644 --- a/configure.ac +++ b/configure.ac @@ -380,7 +380,7 @@ elif test "x$PG_CONFIG" = "x"; then dnl If we couldn't find pg_config, display an error if test "x$PG_CONFIG" = "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-pg_config parameter.]) + 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 PG_CONFIG was specified; display a message to the user diff --git a/doc/faq_raster.xml b/doc/faq_raster.xml index 8b6e768..98d65f8 100644 --- a/doc/faq_raster.xml +++ b/doc/faq_raster.xml @@ -6,7 +6,8 @@ <qandaentry id="faq_security_change_1"> <question> - <para>I'm getting error <code>ERROR: RASTER_fromGDALRaster: Could not open bytea with GDAL. Check that the bytea is of a GDAL supported format.</code></para> + <para>I'm getting error <code>ERROR: RASTER_fromGDALRaster: Could not open bytea with GDAL. Check that the bytea is of a GDAL supported format.</code> when using ST_FromGDALRaster + or <code>ERROR: rt_raster_to_gdal: Could not load the output GDAL driver</code> when trying to use ST_AsPNG or other raster input functions.</para> </question> <answer> diff --git a/doc/introduction.xml b/doc/introduction.xml index d8e550e..fa65056 100644 --- a/doc/introduction.xml +++ b/doc/introduction.xml @@ -267,7 +267,7 @@ Stadt Uster, UC Davis Center for Vectorborne Diseases, University of Laval, U.S Department of State (HIU), -Vizzuality, +CartoDB, Zonar Systems</para> </listitem> </varlistentry> diff --git a/doc/reference_sfcgal.xml b/doc/reference_sfcgal.xml index 47b808f..783e46f 100644 --- a/doc/reference_sfcgal.xml +++ b/doc/reference_sfcgal.xml @@ -10,6 +10,13 @@ Installation instructions of the library can be found on SFCGAL home page <ulink url="http://www.sfcgal.org">http://www.sfcgal.org</ulink>. To load the functions execute postgis/sfcgal.sql </para> + <para> + Some SFCGAL functions replace standard ones (ST_Intersects, ST_Intersection, ST_Difference, ST_Union, ST_Area and ST_Distance), to switch between standard functions and SFCGAL function use: + <programlisting>SET postgis.backend = sfcgal;</programlisting> + and + <programlisting>SET postgis.backend = geos;</programlisting> + + </para> </abstract> </sect1info> <title>SFCGAL Functions</title> diff --git a/doc/release_notes.xml b/doc/release_notes.xml index 63e19c7..bcfe509 100644 --- a/doc/release_notes.xml +++ b/doc/release_notes.xml @@ -4,15 +4,32 @@ <subtitle>Release Notes</subtitle> <sect1> + <title>Release 2.1.8</title> + <para>Release date: 2015-07-07</para> + <para>This is a critical bug fix release.</para> + <simplesect> + <title>Bug Fixes</title> + <para>#3159, do not force a bbox cache on ST_Affine</para> + <para>#3018, GROUP BY geography sometimes returns duplicate rows</para> + <para>#3048, shp2pgsql - illegal number format when specific system locale set</para> + <para>#3094, Malformed GeoJSON inputs crash backend</para> + <para>#3104, st_asgml introduces random characters in ID field</para> + <para>#3155, Remove liblwgeom.h on make uninstall</para> + <para>#3177, gserialized_is_empty cannot handle nested empty cases</para> + <para>Fix crash in ST_LineLocatePoint</para> + </simplesect> + </sect1> + + <sect1> <title>Release 2.1.7</title> <para>Release date: 2015-03-30</para> <para>This is a critical bug fix release.</para> - <simplesect> - <title>Bug Fixes</title> - <para>#3086, ST_DumpValues() crashes backend on cleanup with invalid band indexes</para> - <para>#3088, Do not (re)define strcasestr in a liblwgeom.h</para> - <para>#3094, Malformed GeoJSON inputs crash backend</para> - </simplesect> + <simplesect> + <title>Bug Fixes</title> + <para>#3086, ST_DumpValues() crashes backend on cleanup with invalid band indexes</para> + <para>#3088, Do not (re)define strcasestr in a liblwgeom.h</para> + <para>#3094, Malformed GeoJSON inputs crash backend</para> + </simplesect> </sect1> <sect1> @@ -24,21 +41,21 @@ <para>#3000, Ensure edge splitting and healing algorithms use indexes</para> <para>#3048, Speed up geometry simplification (J.Santana @ CartoDB)</para> <para>#3050, Speep up geometry type reading (J.Santana @ CartoDB)</para> - </simplesect> - <simplesect> - <title>Bug Fixes</title> - <para>#2941, allow geography columns with SRID other than 4326</para> - <para>#3069, small objects getting inappropriately fluffed up w/ boxes</para> - <para>#3068, Have postgis_typmod_dims return NULL for unconstrained dims</para> - <para>#3061, Allow duplicate points in JSON, GML, GML ST_GeomFrom* functions</para> - <para>#3058, Fix ND-GiST picksplit method to split on the best plane</para> - <para>#3052, Make operators <-> and <#> available for PostgreSQL < 9.1</para> - <para>#3045, Fix dimensionality confusion in &&& operator</para> - <para>#3016, Allow unregistering layers of corrupted topologies</para> - <para>#3015, Avoid exceptions from TopologySummary</para> - <para>#3020, ST_AddBand out-db bug where height using width value</para> - <para>#3031, Allow restore of Geometry(Point) tables dumped with empties in them</para> - </simplesect> + </simplesect> + <simplesect> + <title>Bug Fixes</title> + <para>#2941, allow geography columns with SRID other than 4326</para> + <para>#3069, small objects getting inappropriately fluffed up w/ boxes</para> + <para>#3068, Have postgis_typmod_dims return NULL for unconstrained dims</para> + <para>#3061, Allow duplicate points in JSON, GML, GML ST_GeomFrom* functions</para> + <para>#3058, Fix ND-GiST picksplit method to split on the best plane</para> + <para>#3052, Make operators <-> and <#> available for PostgreSQL < 9.1</para> + <para>#3045, Fix dimensionality confusion in &&& operator</para> + <para>#3016, Allow unregistering layers of corrupted topologies</para> + <para>#3015, Avoid exceptions from TopologySummary</para> + <para>#3020, ST_AddBand out-db bug where height using width value</para> + <para>#3031, Allow restore of Geometry(Point) tables dumped with empties in them</para> + </simplesect> </sect1> <sect1> diff --git a/extensions/postgis/postgis.control b/extensions/postgis/postgis.control index a25e0d5..5a5d104 100644 --- a/extensions/postgis/postgis.control +++ b/extensions/postgis/postgis.control @@ -1,5 +1,5 @@ # postgis extension comment = 'PostGIS geometry, geography, and raster spatial types and functions' -default_version = '2.1.7' +default_version = '2.1.8' module_pathname = '$libdir/postgis-2.1' relocatable = true diff --git a/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control b/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control index 7b4efac..28434c6 100644 --- a/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control +++ b/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control @@ -1,6 +1,6 @@ # postgis tiger geocoder extension comment = 'PostGIS tiger geocoder and reverse geocoder' -default_version = '2.1.7' +default_version = '2.1.8' relocatable = false schema = tiger requires = 'postgis,fuzzystrmatch' diff --git a/extensions/postgis_topology/postgis_topology.control b/extensions/postgis_topology/postgis_topology.control index 02107f5..1817162 100644 --- a/extensions/postgis_topology/postgis_topology.control +++ b/extensions/postgis_topology/postgis_topology.control @@ -1,6 +1,6 @@ # postgis topology extension comment = 'PostGIS topology spatial types and functions' -default_version = '2.1.7' +default_version = '2.1.8' relocatable = false schema = topology requires = postgis diff --git a/extensions/upgradeable_versions.mk b/extensions/upgradeable_versions.mk index a7d1929..a91f8f1 100644 --- a/extensions/upgradeable_versions.mk +++ b/extensions/upgradeable_versions.mk @@ -15,7 +15,9 @@ UPGRADEABLE_VERSIONS = \ 2.1.3 \ 2.1.4 \ 2.1.5 \ - 2.1.6 + 2.1.6 \ + 2.1.7 \ + 2.1.8 UPGRADEABLE_VERSIONS_MINOR = \ 2.0.0 \ @@ -24,7 +26,8 @@ UPGRADEABLE_VERSIONS_MINOR = \ 2.0.3 \ 2.0.4 \ 2.0.5 \ - 2.0.6 + 2.0.6 \ + 2.0.7 UPGRADEABLE_VERSIONS_PATCH = \ 2.1.0rc1 \ @@ -36,4 +39,6 @@ UPGRADEABLE_VERSIONS_PATCH = \ 2.1.3 \ 2.1.4 \ 2.1.5 \ - 2.1.6 + 2.1.6 \ + 2.1.7 \ + 2.1.8 diff --git a/liblwgeom/Makefile.in b/liblwgeom/Makefile.in index 5773a7d..7e7d4a0 100644 --- a/liblwgeom/Makefile.in +++ b/liblwgeom/Makefile.in @@ -119,6 +119,7 @@ install-liblwgeom: liblwgeom.la uninstall-liblwgeom: $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/liblwgeom.la" + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(includedir)/liblwgeom.h" # Make all objects depend upon postgis_config.h and postgis_svn_revision.h $(LT_OBJS): ../postgis_config.h ../postgis_svn_revision.h diff --git a/liblwgeom/cunit/cu_algorithm.c b/liblwgeom/cunit/cu_algorithm.c index 85acb5e..704a58f 100644 --- a/liblwgeom/cunit/cu_algorithm.c +++ b/liblwgeom/cunit/cu_algorithm.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: cu_algorithm.c 13247 2015-02-20 15:10:29Z pramsey $ + * $Id: cu_algorithm.c 13696 2015-06-24 19:06:01Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.net @@ -898,20 +898,25 @@ static void test_geohash_point_as_int(void) static void test_lwgeom_simplify(void) { LWGEOM *l; + LWGEOM *i; char *ewkt; /* Not simplifiable */ - l = lwgeom_simplify(lwgeom_from_wkt("LINESTRING(0 0, 50 1.00001, 100 0)", LW_PARSER_CHECK_NONE), 1.0); + i = lwgeom_from_wkt("LINESTRING(0 0, 50 1.00001, 100 0)", LW_PARSER_CHECK_NONE); + l = lwgeom_simplify(i, 1.0); ewkt = lwgeom_to_ewkt(l); CU_ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,50 1.00001,100 0)"); lwgeom_free(l); + lwgeom_free(i); lwfree(ewkt); /* Simplifiable */ - l = lwgeom_simplify(lwgeom_from_wkt("LINESTRING(0 0,50 0.99999,100 0)", LW_PARSER_CHECK_NONE), 1.0); + i = lwgeom_from_wkt("LINESTRING(0 0,50 0.99999,100 0)", LW_PARSER_CHECK_NONE); + l = lwgeom_simplify(i, 1.0); ewkt = lwgeom_to_ewkt(l); CU_ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,100 0)"); lwgeom_free(l); + lwgeom_free(i); lwfree(ewkt); } diff --git a/liblwgeom/cunit/cu_libgeom.c b/liblwgeom/cunit/cu_libgeom.c index 4146ce6..3dc0080 100644 --- a/liblwgeom/cunit/cu_libgeom.c +++ b/liblwgeom/cunit/cu_libgeom.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: cu_libgeom.c 13242 2015-02-19 00:22:22Z pramsey $ + * $Id: cu_libgeom.c 13698 2015-06-24 20:21:57Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.net @@ -307,6 +307,49 @@ static void test_lwgeom_from_gserialized(void) } + +static void test_gserialized_is_empty(void) +{ + int i = 0; + struct gserialized_empty_cases { + const char* wkt; + int isempty; + }; + + struct gserialized_empty_cases cases[] = { + { "POINT EMPTY", 1 }, + { "POINT(1 1)", 0 }, + { "LINESTRING EMPTY", 1 }, + { "MULTILINESTRING EMPTY", 1 }, + { "MULTILINESTRING(EMPTY)", 1 }, + { "MULTILINESTRING(EMPTY,EMPTY)", 1 }, + { "MULTILINESTRING(EMPTY,(0 0,1 1))", 0 }, + { "MULTILINESTRING((0 0,1 1),EMPTY)", 0 }, + { "MULTILINESTRING(EMPTY,(0 0,1 1),EMPTY)", 0 }, + { "MULTILINESTRING(EMPTY,EMPTY,EMPTY)", 1 }, + { "GEOMETRYCOLLECTION(POINT EMPTY,MULTILINESTRING(EMPTY,EMPTY,EMPTY))", 1 }, + { "GEOMETRYCOLLECTION(POINT EMPTY,MULTILINESTRING(EMPTY),POINT(1 1))", 0 }, + { "GEOMETRYCOLLECTION(POINT EMPTY,MULTILINESTRING(EMPTY, (0 0)),POINT EMPTY)", 0 }, + { "GEOMETRYCOLLECTION(POLYGON EMPTY,POINT EMPTY,MULTILINESTRING(EMPTY,EMPTY),POINT EMPTY)", 1 }, + { "GEOMETRYCOLLECTION(POLYGON EMPTY,GEOMETRYCOLLECTION(POINT EMPTY),MULTILINESTRING(EMPTY,EMPTY),POINT EMPTY)", 1 }, + { NULL, 0 } + }; + + while( cases[i].wkt ) + { + // i = 11; + LWGEOM *lw = lwgeom_from_wkt(cases[i].wkt, LW_PARSER_CHECK_NONE); + GSERIALIZED *g = gserialized_from_lwgeom(lw, 0, 0); + int ie = gserialized_is_empty(g); + // printf("%s: we say %d, they say %d\n", cases[i].wkt, cases[i].isempty, ie); + CU_ASSERT_EQUAL(ie, cases[i].isempty); + lwgeom_free(lw); + lwfree(g); + i++; + } +} + + static void test_geometry_type_from_string(void) { int rv; @@ -934,4 +977,5 @@ void libgeom_suite_setup(void) PG_ADD_TEST(suite, test_lwgeom_is_empty); PG_ADD_TEST(suite, test_lwgeom_same); PG_ADD_TEST(suite, test_lwline_from_lwmpoint); + PG_ADD_TEST(suite, test_gserialized_is_empty); } diff --git a/liblwgeom/cunit/cu_ptarray.c b/liblwgeom/cunit/cu_ptarray.c index 8eb2f22..27f35f8 100644 --- a/liblwgeom/cunit/cu_ptarray.c +++ b/liblwgeom/cunit/cu_ptarray.c @@ -444,7 +444,7 @@ static void test_ptarray_desegmentize() out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); CU_ASSERT_STRING_EQUAL(str, "LINESTRING(0 0,10 0,10 10,0 10)"); - printf("%s\n", str); + // printf("%s\n", str); lwgeom_free(in); lwgeom_free(out); lwfree(str); diff --git a/liblwgeom/g_serialized.c b/liblwgeom/g_serialized.c index 916f8e3..5065c7f 100644 --- a/liblwgeom/g_serialized.c +++ b/liblwgeom/g_serialized.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: g_serialized.c 13367 2015-03-20 13:53:44Z pramsey $ + * $Id: g_serialized.c 13698 2015-06-24 20:21:57Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * @@ -109,27 +109,46 @@ GSERIALIZED* gserialized_copy(const GSERIALIZED *g) return g_out; } +static size_t gserialized_is_empty_recurse(const uint8_t *p, int *isempty); +static size_t gserialized_is_empty_recurse(const uint8_t *p, int *isempty) +{ + int i; + int32_t type, num; + + memcpy(&type, p, 4); + memcpy(&num, p+4, 4); + + if ( lwtype_is_collection(type) ) + { + size_t lz = 8; + for ( i = 0; i < num; i++ ) + { + lz += gserialized_is_empty_recurse(p+lz, isempty); + if ( ! *isempty ) + return lz; + } + *isempty = LW_TRUE; + return lz; + } + else + { + *isempty = (num == 0 ? LW_TRUE : LW_FALSE); + return 8; + } +} + int gserialized_is_empty(const GSERIALIZED *g) { uint8_t *p = (uint8_t*)g; - int i; + int isempty = 0; assert(g); p += 8; /* Skip varhdr and srid/flags */ if( FLAGS_GET_BBOX(g->flags) ) p += gbox_serialized_size(g->flags); /* Skip the box */ - p += 4; /* Skip type number */ - - /* For point/line/circstring this is npoints */ - /* For polygons this is nrings */ - /* For collections this is ngeoms */ - memcpy(&i, p, sizeof(int)); - - /* If it is non-zero, it's not empty */ - if ( i > 0 ) - return LW_FALSE; - else - return LW_TRUE; + + gserialized_is_empty_recurse(p, &isempty); + return isempty; } char* gserialized_to_string(const GSERIALIZED *g) diff --git a/liblwgeom/lwgeodetic.h b/liblwgeom/lwgeodetic.h index 302213c..75420e4 100644 --- a/liblwgeom/lwgeodetic.h +++ b/liblwgeom/lwgeodetic.h @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: lwgeodetic.h 12343 2014-03-25 08:17:56Z pramsey $ + * $Id: lwgeodetic.h 13697 2015-06-24 19:07:17Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <[email protected]> @@ -143,4 +143,4 @@ int spheroid_project(const GEOGRAPHIC_POINT *r, const SPHEROID *spheroid, double * Maintain consistent units (radians?) throughout all calculations * Put an index pointer onto LWGEOM itself, and cache the indexed LWGEOM instead of a bare tree * only primitive objects should get a tree -*/ \ No newline at end of file +*/ diff --git a/liblwgeom/lwgeodetic_tree.h b/liblwgeom/lwgeodetic_tree.h index c80c412..806a0e4 100644 --- a/liblwgeom/lwgeodetic_tree.h +++ b/liblwgeom/lwgeodetic_tree.h @@ -30,4 +30,4 @@ double circ_tree_distance_tree(const CIRC_NODE* n1, const CIRC_NODE* n2, const S CIRC_NODE* lwgeom_calculate_circ_tree(const LWGEOM* lwgeom); int circ_tree_get_point(const CIRC_NODE* node, POINT2D* pt); -#endif /* _LWGEODETIC_TREE_H */ \ No newline at end of file +#endif /* _LWGEODETIC_TREE_H */ diff --git a/liblwgeom/lwgeom.c b/liblwgeom/lwgeom.c index efa4bb0..cde9183 100644 --- a/liblwgeom/lwgeom.c +++ b/liblwgeom/lwgeom.c @@ -1443,8 +1443,11 @@ LWGEOM* lwgeom_flip_coordinates(LWGEOM *in) return NULL; } - lwgeom_drop_bbox(in); - lwgeom_add_bbox(in); + /* only refresh bbox if X or Y changed */ + if ( in->bbox ) { + lwgeom_drop_bbox(in); + lwgeom_add_bbox(in); + } return in; } diff --git a/liblwgeom/lwgeom_geos.c b/liblwgeom/lwgeom_geos.c index d24b188..459b626 100644 --- a/liblwgeom/lwgeom_geos.c +++ b/liblwgeom/lwgeom_geos.c @@ -219,14 +219,14 @@ ptarray_to_GEOSCoordSeq(const POINTARRAY *pa) { p3d = getPoint3dz_cp(pa, i); p2d = (const POINT2D *)p3d; + LWDEBUGF(4, "Point: %g,%g,%g", p3d->x, p3d->y, p3d->z); } else { p2d = getPoint2d_cp(pa, i); + LWDEBUGF(4, "Point: %g,%g", p2d->x, p2d->y); } - LWDEBUGF(4, "Point: %g,%g,%g", p2d->x, p2d->y, p3d->z); - #if POSTGIS_GEOS_VERSION < 33 /* Make sure we don't pass any infinite values down into GEOS */ /* GEOS 3.3+ is supposed to handle this stuff OK */ diff --git a/liblwgeom/lwin_geojson.c b/liblwgeom/lwin_geojson.c index bf3d8ea..be706f8 100644 --- a/liblwgeom/lwin_geojson.c +++ b/liblwgeom/lwin_geojson.c @@ -385,48 +385,34 @@ parse_geojson_multipolygon(json_object *geojson, int *hasz, int root_srid) const int nPolys = json_object_array_length( poObjPolys ); for(i = 0; i < nPolys; ++i) - { - POINTARRAY **ppa; - json_object* poObjPoly = NULL; - poObjPoly = json_object_array_get_idx( poObjPolys, i ); - - ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); + { + json_object* poObjPoly = json_object_array_get_idx( poObjPolys, i ); if( json_type_array == json_object_get_type( poObjPoly ) ) { - int nPoints; - json_object* points = NULL; - int ring = json_object_array_length( poObjPoly ); - ppa[0] = ptarray_construct_empty(1, 0, 1); - - points = json_object_array_get_idx( poObjPoly, 0 ); - nPoints = json_object_array_length( points ); - - for (j=0; j < nPoints; j++ ) + LWPOLY *lwpoly = lwpoly_construct_empty(geom->srid, lwgeom_has_z(geom), lwgeom_has_m(geom)); + int nRings = json_object_array_length( poObjPoly ); + + for(j = 0; j < nRings; ++j) { - json_object* coords = NULL; - coords = json_object_array_get_idx( points, j ); - parse_geojson_coord(coords, hasz, ppa[0]); - } + json_object* points = json_object_array_get_idx( poObjPoly, j ); + + if( json_type_array == json_object_get_type( poObjPoly ) ) + { - for(j = 1; j < ring; ++j) - { - int nPoints; - ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (j + 1)); - ppa[j] = ptarray_construct_empty(1, 0, 1); - points = json_object_array_get_idx( poObjPoly, j ); + POINTARRAY *pa = ptarray_construct_empty(1, 0, 1); - nPoints = json_object_array_length( points ); - for (k=0; k < nPoints; k++ ) - { - json_object* coords = NULL; - coords = json_object_array_get_idx( points, k ); - parse_geojson_coord(coords, hasz, ppa[j]); + int nPoints = json_object_array_length( points ); + for ( k=0; k < nPoints; k++ ) + { + json_object* coords = json_object_array_get_idx( points, k ); + parse_geojson_coord(coords, hasz, pa); + } + + lwpoly_add_ring(lwpoly, pa); } } - - geom = (LWGEOM*)lwmpoly_add_lwpoly((LWMPOLY*)geom, - (LWPOLY*)lwpoly_construct(root_srid, NULL, ring, ppa)); + geom = (LWGEOM*)lwmpoly_add_lwpoly((LWMPOLY*)geom, lwpoly); } } } @@ -559,10 +545,19 @@ lwgeom_from_geojson(const char *geojson, char **srs) if (poObjSrsType != NULL) { json_object* poObjSrsProps = findMemberByName( poObjSrs, "properties" ); - json_object* poNameURL = findMemberByName( poObjSrsProps, "name" ); - const char* pszName = json_object_get_string( poNameURL ); - *srs = lwalloc(strlen(pszName) + 1); - strcpy(*srs, pszName); + if ( poObjSrsProps ) + { + json_object* poNameURL = findMemberByName( poObjSrsProps, "name" ); + if ( poNameURL ) + { + const char* pszName = json_object_get_string( poNameURL ); + if ( pszName ) + { + *srs = lwalloc(strlen(pszName) + 1); + strcpy(*srs, pszName); + } + } + } } } diff --git a/liblwgeom/lwline.c b/liblwgeom/lwline.c index c698a3a..0dddaa3 100644 --- a/liblwgeom/lwline.c +++ b/liblwgeom/lwline.c @@ -318,8 +318,11 @@ lwline_add_lwpoint(LWLINE *line, LWPOINT *point, int where) return LW_FAILURE; /* Update the bounding box */ - lwgeom_drop_bbox(lwline_as_lwgeom(line)); - lwgeom_add_bbox(lwline_as_lwgeom(line)); + if ( line->bbox ) + { + lwgeom_drop_bbox(lwline_as_lwgeom(line)); + lwgeom_add_bbox(lwline_as_lwgeom(line)); + } return LW_SUCCESS; } diff --git a/liblwgeom/lwlinearreferencing.c b/liblwgeom/lwlinearreferencing.c index 267aeea..73f95ac 100644 --- a/liblwgeom/lwlinearreferencing.c +++ b/liblwgeom/lwlinearreferencing.c @@ -374,9 +374,12 @@ lwpoint_clip_to_ordinate_range(const LWPOINT *point, char ordinate, double from, lwcollection_add_lwgeom(lwgeom_out, lwpoint_as_lwgeom(lwp)); } - /* Set the bbox */ - lwgeom_drop_bbox((LWGEOM*)lwgeom_out); - lwgeom_add_bbox((LWGEOM*)lwgeom_out); + /* Set the bbox, if necessary */ + if ( lwgeom_out->bbox ) + { + lwgeom_drop_bbox((LWGEOM*)lwgeom_out); + lwgeom_add_bbox((LWGEOM*)lwgeom_out); + } return lwgeom_out; } @@ -428,9 +431,12 @@ lwmpoint_clip_to_ordinate_range(const LWMPOINT *mpoint, char ordinate, double fr } } - /* Set the bbox */ - lwgeom_drop_bbox((LWGEOM*)lwgeom_out); - lwgeom_add_bbox((LWGEOM*)lwgeom_out); + /* Set the bbox, if necessary */ + if ( lwgeom_out->bbox ) + { + lwgeom_drop_bbox((LWGEOM*)lwgeom_out); + lwgeom_add_bbox((LWGEOM*)lwgeom_out); + } return lwgeom_out; } @@ -497,8 +503,12 @@ lwmline_clip_to_ordinate_range(const LWMLINE *mline, char ordinate, double from, lwfree(col); } } - lwgeom_drop_bbox((LWGEOM*)lwgeom_out); - lwgeom_add_bbox((LWGEOM*)lwgeom_out); + if ( lwgeom_out->bbox ) + { + lwgeom_drop_bbox((LWGEOM*)lwgeom_out); + lwgeom_add_bbox((LWGEOM*)lwgeom_out); + } + if ( ! homogeneous ) { lwgeom_out->type = COLLECTIONTYPE; @@ -732,7 +742,7 @@ lwline_clip_to_ordinate_range(const LWLINE *line, char ordinate, double from, do lwfree(q); lwfree(r); - if ( lwgeom_out->ngeoms > 0 ) + if ( lwgeom_out->bbox && lwgeom_out->ngeoms > 0 ) { lwgeom_drop_bbox((LWGEOM*)lwgeom_out); lwgeom_add_bbox((LWGEOM*)lwgeom_out); diff --git a/liblwgeom/ptarray.c b/liblwgeom/ptarray.c index 6329794..99a9410 100644 --- a/liblwgeom/ptarray.c +++ b/liblwgeom/ptarray.c @@ -1279,17 +1279,19 @@ ptarray_locate_point(const POINTARRAY *pa, const POINT4D *p4d, double *mindistou if ( ! proj4d ) proj4d = &projtmp; + start = getPoint2d_cp(pa, 0); + /* If the pointarray has only one point, the nearest point is */ /* just that point */ if ( pa->npoints == 1 ) { getPoint4d_p(pa, 0, proj4d); - *mindistout = distance2d_pt_pt(&p, start); + if ( mindistout ) + *mindistout = distance2d_pt_pt(&p, start); return 0.0; } - /* Loop through pointarray looking for nearest segment */ - start = getPoint2d_cp(pa, 0); + /* Loop through pointarray looking for nearest segment */ for (t=1; t<pa->npoints; t++) { double dist; @@ -1738,4 +1740,4 @@ int ptarray_startpoint(const POINTARRAY* pa, POINT4D* pt) { return getPoint4d_p(pa, 0, pt); -} \ No newline at end of file +} diff --git a/libtool b/libtool index 1e69385..3346985 100755 --- a/libtool +++ b/libtool @@ -32,11 +32,14 @@ # The names of the tagged configurations supported by this script. available_tags='CXX ' +# Configured defaults for sys_lib_dlsearch_path munging. +: ${LT_SYS_LIBRARY_PATH=""} + # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? -macro_version=2.4.4 -macro_revision=2.4.4 +macro_version=2.4.6 +macro_revision=2.4.6 # Whether or not to build shared libraries. build_libtool_libs=yes @@ -64,13 +67,13 @@ PATH_SEPARATOR=":" # The host system. host_alias= -host=x86_64-apple-darwin13.4.0 -host_os=darwin13.4.0 +host=x86_64-apple-darwin14.4.0 +host_os=darwin14.4.0 # The build system. build_alias= -build=x86_64-apple-darwin13.4.0 -build_os=darwin13.4.0 +build=x86_64-apple-darwin14.4.0 +build_os=darwin14.4.0 # A sed program that does not truncate output. SED="/usr/bin/sed" @@ -279,11 +282,14 @@ finish_eval="" hardcode_into_libs=no # Compile-time system search path for libraries. -sys_lib_search_path_spec="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/6.0 /usr/local/lib" +sys_lib_search_path_spec="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/6.1.0 /usr/local/lib" -# Run-time system search path for libraries. +# Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec="/usr/local/lib /lib /usr/lib" +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path="" + # Whether dlopen is supported. dlopen_support=unknown @@ -445,15 +451,71 @@ compiler_lib_search_path="" # ### END LIBTOOL CONFIG + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + #! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 -# libtool (GNU libtool) 2.4.4 +# libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit <[email protected]>, 1996 -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -478,8 +540,8 @@ compiler_lib_search_path="" PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.4 -package_revision=2.4.4 +VERSION=2.4.6 +package_revision=2.4.6 ## ------ ## @@ -511,12 +573,12 @@ package_revision=2.4.4 # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2014-01-03.01; # UTC +scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -639,7 +701,7 @@ func_path_progs () _G_path_prog_max=0 _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=$PATH_SEPARATOR + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. @@ -1822,7 +1884,7 @@ scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 -# Copyright (C) 2010-2014 Free Software Foundation, Inc. +# Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -2424,7 +2486,7 @@ func_version () # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.4' +scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... @@ -2486,7 +2548,12 @@ usage_message="Options: " # Additional text appended to 'usage_message' in response to '--help'. -long_help_message=$long_help_message" +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message MODE must be one of the following: @@ -2510,13 +2577,15 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.4 + version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to <[email protected]>. GNU libtool home page: <http://www.gnu.org/software/libtool/>. General help using GNU software: <http://www.gnu.org/gethelp/>." + exit 0 +} # func_lo2o OBJECT-NAME @@ -6908,6 +6977,24 @@ func_win32_import_lib_p () esac } +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + # func_mode_link arg... func_mode_link () { @@ -7884,6 +7971,9 @@ func_mode_link () eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" @@ -9046,6 +9136,37 @@ func_mode_link () eval $var=\"$tmp_libs\" done # for var fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= diff --git a/loader/shp2pgsql-core.c b/loader/shp2pgsql-core.c index d5bd841..8e7c20e 100644 --- a/loader/shp2pgsql-core.c +++ b/loader/shp2pgsql-core.c @@ -1648,6 +1648,9 @@ ShpLoaderGenerateSQLRowStatement(SHPLOADERSTATE *state, int item, char **strreco /* Add the shape attribute if we are reading it */ if (state->config->readshape == 1) { + /* Force the locale to C */ + char *oldlocale = setlocale(LC_NUMERIC, "C"); + /* Handle the case of a NULL shape */ if (obj->nVertices == 0) { @@ -1740,6 +1743,8 @@ ShpLoaderGenerateSQLRowStatement(SHPLOADERSTATE *state, int item, char **strreco /* Tidy up everything */ SHPDestroyObject(obj); + + setlocale(LC_NUMERIC, oldlocale); } /* Close the line correctly for dump/insert format */ diff --git a/loader/shp2pgsql-core.h b/loader/shp2pgsql-core.h index 5ada47c..27b8070 100644 --- a/loader/shp2pgsql-core.h +++ b/loader/shp2pgsql-core.h @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: shp2pgsql-core.h 13134 2014-12-01 08:47:21Z strk $ + * $Id: shp2pgsql-core.h 13447 2015-04-26 04:33:54Z robe $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.net @@ -16,6 +16,7 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <locale.h> #include <ctype.h> #include <unistd.h> #include <errno.h> @@ -29,7 +30,7 @@ #include "../liblwgeom/stringbuffer.h" -#define S2P_RCSID "$Id: shp2pgsql-core.h 13134 2014-12-01 08:47:21Z strk $" +#define S2P_RCSID "$Id: shp2pgsql-core.h 13447 2015-04-26 04:33:54Z robe $" /* Number of digits of precision in WKT produced. */ diff --git a/ltmain.sh b/ltmain.sh index 5eca4ae..0f0a2da 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -2,11 +2,11 @@ ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 -# libtool (GNU libtool) 2.4.4 +# libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit <[email protected]>, 1996 -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -31,8 +31,8 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.4 -package_revision=2.4.4 +VERSION=2.4.6 +package_revision=2.4.6 ## ------ ## @@ -64,12 +64,12 @@ package_revision=2.4.4 # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2014-01-03.01; # UTC +scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -192,7 +192,7 @@ func_path_progs () _G_path_prog_max=0 _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=$PATH_SEPARATOR + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. @@ -1375,7 +1375,7 @@ scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 -# Copyright (C) 2010-2014 Free Software Foundation, Inc. +# Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -1977,7 +1977,7 @@ func_version () # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.4' +scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... @@ -2039,7 +2039,12 @@ usage_message="Options: " # Additional text appended to 'usage_message' in response to '--help'. -long_help_message=$long_help_message" +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message MODE must be one of the following: @@ -2063,13 +2068,15 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.4 + version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to <[email protected]>. GNU libtool home page: <http://www.gnu.org/software/libtool/>. General help using GNU software: <http://www.gnu.org/gethelp/>." + exit 0 +} # func_lo2o OBJECT-NAME @@ -6461,6 +6468,24 @@ func_win32_import_lib_p () esac } +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + # func_mode_link arg... func_mode_link () { @@ -7437,6 +7462,9 @@ func_mode_link () eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" @@ -8599,6 +8627,37 @@ func_mode_link () eval $var=\"$tmp_libs\" done # for var fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= diff --git a/macros/._libtool.m4 b/macros/._libtool.m4 new file mode 100644 index 0000000..4b8deb2 Binary files /dev/null and b/macros/._libtool.m4 differ diff --git a/macros/._ltoptions.m4 b/macros/._ltoptions.m4 new file mode 100644 index 0000000..3d07a38 Binary files /dev/null and b/macros/._ltoptions.m4 differ diff --git a/macros/._ltsugar.m4 b/macros/._ltsugar.m4 new file mode 100644 index 0000000..bc3a289 Binary files /dev/null and b/macros/._ltsugar.m4 differ diff --git a/macros/._lt~obsolete.m4 b/macros/._lt~obsolete.m4 new file mode 100644 index 0000000..a5ff095 Binary files /dev/null and b/macros/._lt~obsolete.m4 differ diff --git a/macros/libtool.m4 b/macros/libtool.m4 index 9c089e0..a3bc337 100644 --- a/macros/libtool.m4 +++ b/macros/libtool.m4 @@ -1,6 +1,6 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996-2001, 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives @@ -103,19 +103,36 @@ dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + # _LT_CC_BASENAME(CC) # ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result ]) @@ -720,6 +737,9 @@ _LT_CONFIG_SAVE_COMMANDS([ _LT_COPYING _LT_LIBTOOL_TAGS +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS @@ -727,6 +747,17 @@ _LT_LIBTOOL_TAG_VARS _LT_EOF + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" @@ -2202,6 +2233,47 @@ _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics @@ -2212,6 +2284,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ @@ -2306,6 +2379,9 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor @@ -2594,6 +2670,7 @@ freebsd* | dragonfly*) case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; @@ -2653,10 +2730,11 @@ hpux9* | hpux10* | hpux11*) soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -2789,7 +2867,12 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -3013,10 +3096,20 @@ fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi + if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) @@ -3049,8 +3142,10 @@ _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER @@ -7350,6 +7445,7 @@ func_stripname_cnf () } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF + # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose @@ -7528,51 +7624,6 @@ interix[[3-9]]*) _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test yes != "$solaris_use_stlport4"; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test yes != "$solaris_use_stlport4"; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; esac ]) diff --git a/macros/ltoptions.m4 b/macros/ltoptions.m4 index f51ec8c..94b0829 100644 --- a/macros/ltoptions.m4 +++ b/macros/ltoptions.m4 @@ -1,6 +1,6 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004-2005, 2007-2009, 2011-2014 Free Software +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # diff --git a/macros/ltsugar.m4 b/macros/ltsugar.m4 index da4ac6b..48bc934 100644 --- a/macros/ltsugar.m4 +++ b/macros/ltsugar.m4 @@ -1,6 +1,6 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007-2008, 2011-2014 Free Software +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # diff --git a/macros/ltversion.m4 b/macros/ltversion.m4 index cb6da68..fa04b52 100644 --- a/macros/ltversion.m4 +++ b/macros/ltversion.m4 @@ -1,6 +1,6 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004, 2011-2014 Free Software Foundation, Inc. +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives @@ -9,15 +9,15 @@ # @configure_input@ -# serial 4151 ltversion.m4 +# serial 4179 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.4]) -m4_define([LT_PACKAGE_REVISION], [2.4.4]) +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.4' -macro_revision='2.4.4' +[macro_version='2.4.6' +macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff --git a/macros/lt~obsolete.m4 b/macros/lt~obsolete.m4 index 6975098..c6b26f8 100644 --- a/macros/lt~obsolete.m4 +++ b/macros/lt~obsolete.m4 @@ -1,6 +1,6 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007, 2009, 2011-2014 Free Software +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # diff --git a/postgis/geography_btree.c b/postgis/geography_btree.c index 357398a..b42e1b5 100644 --- a/postgis/geography_btree.c +++ b/postgis/geography_btree.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: geography_btree.c 9324 2012-02-27 22:08:12Z pramsey $ + * $Id: geography_btree.c 13436 2015-04-23 18:19:47Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <[email protected]> @@ -241,7 +241,7 @@ Datum geography_cmp(PG_FUNCTION_ARGS) /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || - ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) + ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } @@ -249,13 +249,33 @@ Datum geography_cmp(PG_FUNCTION_ARGS) geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); - if ( p1.x > p2.x && p1.y > p2.y && p1.z > p2.z ) + if ( ! FP_EQUALS(p1.x, p2.x) ) + { + if (p1.x < p2.x) + { + PG_RETURN_INT32(-1); + } PG_RETURN_INT32(1); + } - if ( FP_EQUALS(p1.x, p2.x) && FP_EQUALS(p1.y, p2.y) && FP_EQUALS(p1.z, p2.z) ) - PG_RETURN_INT32(0); + if ( ! FP_EQUALS(p1.y, p2.y) ) + { + if (p1.y < p2.y) + { + PG_RETURN_INT32(-1); + } + PG_RETURN_INT32(1); + } - PG_RETURN_INT32(-1); + if ( ! FP_EQUALS(p1.z, p2.z) ) + { + if (p1.z < p2.z) + { + PG_RETURN_INT32(-1); + } + PG_RETURN_INT32(1); + } + PG_RETURN_INT32(0); } diff --git a/postgis/geography_inout.c b/postgis/geography_inout.c index 3315dfe..c6a8c1e 100644 --- a/postgis/geography_inout.c +++ b/postgis/geography_inout.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: geography_inout.c 13368 2015-03-20 14:06:44Z pramsey $ + * $Id: geography_inout.c 13659 2015-06-11 19:47:14Z strk $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009-2011 Paul Ramsey <[email protected]> @@ -598,9 +598,11 @@ Datum geography_from_geometry(PG_FUNCTION_ARGS) ** functions do the right thing. */ lwgeom_set_geodetic(lwgeom, true); + /* Recalculate the boxes after re-setting the geodetic bit */ lwgeom_drop_bbox(lwgeom); lwgeom_add_bbox(lwgeom); + g_ser = geography_serialize(lwgeom); /* diff --git a/postgis/lwgeom_accum.c b/postgis/lwgeom_accum.c index 0aecda7..1beb0b0 100644 --- a/postgis/lwgeom_accum.c +++ b/postgis/lwgeom_accum.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: lwgeom_accum.c 13134 2014-12-01 08:47:21Z strk $ + * $Id: lwgeom_accum.c 13525 2015-05-19 17:38:43Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.net @@ -105,15 +105,10 @@ pgis_geometry_accum_transfn(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("could not determine input data type"))); - if (fcinfo->context && IsA(fcinfo->context, AggState)) - aggcontext = ((AggState *) fcinfo->context)->aggcontext; - else if (fcinfo->context && IsA(fcinfo->context, WindowAggState)) - aggcontext = ((WindowAggState *) fcinfo->context)->aggcontext; - - else + if ( ! AggCheckCallContext(fcinfo, &aggcontext) ) { /* cannot be called directly because of dummy-type argument */ - elog(ERROR, "array_agg_transfn called in non-aggregate context"); + elog(ERROR, "%s called in non-aggregate context", __func__); aggcontext = NULL; /* keep compiler quiet */ } diff --git a/postgis/lwgeom_export.c b/postgis/lwgeom_export.c index 72abf7a..ab4d8e5 100644 --- a/postgis/lwgeom_export.c +++ b/postgis/lwgeom_export.c @@ -112,8 +112,12 @@ int getSRIDbySRS(const char* srs) SPI_finish(); return 0; } - sprintf(query, "SELECT srid \ - FROM spatial_ref_sys WHERE auth_name||':'||auth_srid = '%s'", srs); + + sprintf(query, + "SELECT srid " + "FROM spatial_ref_sys, " + "regexp_matches('%s', E'([a-z]+):([0-9]+)', 'gi') AS re " + "WHERE re[1] ILIKE auth_name AND int4(re[2]) = auth_srid", srs); err = SPI_exec(query, 1); if ( err < 0 ) @@ -126,9 +130,11 @@ int getSRIDbySRS(const char* srs) /* no entry in spatial_ref_sys */ if (SPI_processed <= 0) { - sprintf(query, "SELECT srid \ - FROM spatial_ref_sys WHERE \ - 'urn:ogc:def:crs:'||auth_name||'::'||auth_srid = '%s'", srs); + sprintf(query, + "SELECT srid " + "FROM spatial_ref_sys, " + "regexp_matches('%s', E'urn:ogc:def:crs:([a-z]+):.*:([0-9]+)', 'gi') AS re " + "WHERE re[1] ILIKE auth_name AND int4(re[2]) = auth_srid", srs); err = SPI_exec(query, 1); if ( err < 0 ) @@ -176,8 +182,10 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS) static const char* default_prefix = "gml:"; /* default prefix */ const char* prefix = default_prefix; const char* gml_id = NULL; - char *prefix_buf, *gml_id_buf; + size_t len; + char *gml_id_buf, *prefix_buf; text *prefix_text, *gml_id_text; + /* Get the version */ version = PG_GETARG_INT32(0); @@ -209,19 +217,18 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS) if (PG_NARGS() >4 && !PG_ARGISNULL(4)) { prefix_text = PG_GETARG_TEXT_P(4); - if ( VARSIZE(prefix_text)-VARHDRSZ == 0 ) + if ( VARSIZE(prefix_text) == VARHDRSZ ) { prefix = ""; } else { - /* +2 is one for the ':' and one for term null */ - prefix_buf = palloc(VARSIZE(prefix_text)-VARHDRSZ+2); - memcpy(prefix_buf, VARDATA(prefix_text), - VARSIZE(prefix_text)-VARHDRSZ); + len = VARSIZE(prefix_text)-VARHDRSZ; + prefix_buf = palloc(len + 2); /* +2 is one for the ':' and one for term null */ + memcpy(prefix_buf, VARDATA(prefix_text), len); /* add colon and null terminate */ - prefix_buf[VARSIZE(prefix_text)-VARHDRSZ] = ':'; - prefix_buf[VARSIZE(prefix_text)-VARHDRSZ+1] = '\0'; + prefix_buf[len] = ':'; + prefix_buf[len+1] = '\0'; prefix = prefix_buf; } } @@ -229,15 +236,16 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS) if (PG_NARGS() >5 && !PG_ARGISNULL(5)) { gml_id_text = PG_GETARG_TEXT_P(5); - if ( VARSIZE(gml_id_text)-VARHDRSZ == 0 ) + if ( VARSIZE(gml_id_text) == VARHDRSZ ) { gml_id = ""; } else { - gml_id_buf = palloc(VARSIZE(gml_id_text)-VARHDRSZ+1); - memcpy(gml_id_buf, VARDATA(gml_id_text), VARSIZE(gml_id_text)-VARHDRSZ); - gml_id_buf[VARSIZE(gml_id_text)-VARHDRSZ+1] = '\0'; + len = VARSIZE(gml_id_text)-VARHDRSZ; + gml_id_buf = palloc(len+1); + memcpy(gml_id_buf, VARDATA(gml_id_text), len); + gml_id_buf[len] = '\0'; gml_id = gml_id_buf; } } diff --git a/postgis/lwgeom_functions_basic.c b/postgis/lwgeom_functions_basic.c index 55f47b6..7debad8 100644 --- a/postgis/lwgeom_functions_basic.c +++ b/postgis/lwgeom_functions_basic.c @@ -1,5 +1,5 @@ /********************************************************************** - * $Id: lwgeom_functions_basic.c 13371 2015-03-20 15:32:06Z pramsey $ + * $Id: lwgeom_functions_basic.c 13659 2015-06-11 19:47:14Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.net @@ -2540,8 +2540,11 @@ Datum LWGEOM_affine(PG_FUNCTION_ARGS) lwgeom_affine(lwgeom, &affine); /* COMPUTE_BBOX TAINTING */ - lwgeom_drop_bbox(lwgeom); - lwgeom_add_bbox(lwgeom); + if ( lwgeom->bbox ) + { + lwgeom_drop_bbox(lwgeom); + lwgeom_add_bbox(lwgeom); + } ret = geometry_serialize(lwgeom); /* Release memory */ diff --git a/postgis/postgis.sql.in b/postgis/postgis.sql.in index e27340d..0590591 100644 --- a/postgis/postgis.sql.in +++ b/postgis/postgis.sql.in @@ -1,6 +1,6 @@ -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- --- $Id: postgis.sql.in 13299 2015-03-03 13:04:21Z strk $ +-- $Id: postgis.sql.in 13462 2015-04-29 20:03:05Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net @@ -2434,35 +2434,23 @@ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- FIND_SRID( <schema>, <table>, <geom col> ) ----------------------------------------------------------------------- +-- Changed: 2.1.8 improve performance CREATE OR REPLACE FUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS $$ DECLARE - schem text; - tabl text; + schem varchar = $1; + tabl varchar = $2; 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 + IF ( schem = '' and strpos(tabl,'.') > 0 ) 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; + select SRID into sr from geometry_columns where (f_table_schema = schem or 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; @@ -2472,6 +2460,7 @@ $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + --------------------------------------------------------------- -- PROJ support --------------------------------------------------------------- @@ -4696,38 +4685,46 @@ SELECT replace(split_part(s.consrc, '''', 2), ')', '')::varchar $$ LANGUAGE 'sql' STABLE STRICT; +-- Availability: 2.0.0 +-- Changed: 2.1.8 significant performance improvement for constraint based columns CREATE OR REPLACE VIEW geometry_columns AS - SELECT current_database()::varchar(256) AS f_table_catalog, - n.nspname::varchar(256) AS f_table_schema, - c.relname::varchar(256) AS f_table_name, - a.attname::varchar(256) AS f_geometry_column, - COALESCE(postgis_typmod_dims(a.atttypmod), - postgis_constraint_dims(n.nspname, c.relname, a.attname), - 2) AS coord_dimension, -- should it be 0 instead ? - COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod),0), - postgis_constraint_srid(n.nspname, c.relname, a.attname), - 0) AS srid, - -- force to be uppercase with no ZM so is backwards compatible - -- with old geometry_columns - replace( - replace( - COALESCE( - NULLIF(upper(postgis_typmod_type(a.atttypmod)::text), 'GEOMETRY'), - postgis_constraint_type(n.nspname, c.relname, a.attname), - 'GEOMETRY' - ), 'ZM', '' - ), 'Z', '' - )::varchar(30) AS type - FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n - WHERE t.typname = 'geometry'::name - AND a.attisdropped = false - AND a.atttypid = t.oid - AND a.attrelid = c.oid - AND c.relnamespace = n.oid - AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char" OR c.relkind = 'm'::"char" OR c.relkind = 'f'::"char") - AND NOT pg_is_other_temp_schema(c.relnamespace) - AND NOT ( n.nspname = 'public' AND c.relname = 'raster_columns' ) - AND has_table_privilege( c.oid, 'SELECT'::text ); + SELECT current_database()::character varying(256) AS f_table_catalog, +-- TODO: consider getting rid of CASTING it slows things down by 2 to 6 fold for table/column exact matches. +-- Geography doesn't have casting by the way + n.nspname::varchar(256) AS f_table_schema, + c.relname::varchar(256) AS f_table_name, + a.attname::varchar(256) AS f_geometry_column, + COALESCE(postgis_typmod_dims(a.atttypmod), sn.ndims, 2) AS coord_dimension, + COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod), 0), sr.srid, 0) AS srid, + replace(replace(COALESCE(NULLIF(upper(postgis_typmod_type(a.atttypmod)), 'GEOMETRY'::text), st.type, 'GEOMETRY'::text), 'ZM'::text, ''::text), 'Z'::text, ''::text)::character varying(30) AS type + FROM pg_class c + JOIN pg_attribute a ON a.attrelid = c.oid AND NOT a.attisdropped + JOIN pg_namespace n ON c.relnamespace = n.oid + JOIN pg_type t ON a.atttypid = t.oid + LEFT JOIN ( SELECT s.connamespace, + s.conrelid, + s.conkey, replace(split_part(s.consrc, ''''::text, 2), ')'::text, ''::text) As type + FROM pg_constraint AS s + WHERE s.consrc ~~* '%geometrytype(% = %'::text + +) st ON st.connamespace = n.oid AND st.conrelid = c.oid AND (a.attnum = ANY (st.conkey)) + LEFT JOIN ( SELECT s.connamespace, + s.conrelid, + s.conkey, replace(split_part(s.consrc, ' = '::text, 2), ')'::text, ''::text)::integer As ndims + FROM pg_constraint AS s + WHERE s.consrc ~~* '%ndims(% = %'::text + +) sn ON sn.connamespace = n.oid AND sn.conrelid = c.oid AND (a.attnum = ANY (sn.conkey)) + LEFT JOIN ( SELECT s.connamespace, + s.conrelid, + s.conkey, replace(replace(split_part(s.consrc, ' = '::text, 2), ')'::text, ''::text), '('::text, ''::text)::integer As srid + FROM pg_constraint AS s + WHERE s.consrc ~~* '%srid(% = %'::text + +) sr ON sr.connamespace = n.oid AND sr.conrelid = c.oid AND (a.attnum = ANY (sr.conkey)) + WHERE (c.relkind = ANY (ARRAY['r'::"char", 'v'::"char", 'm'::"char", 'f'::"char"])) + AND NOT c.relname = 'raster_columns'::name AND t.typname = 'geometry'::name + AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege(c.oid, 'SELECT'::text); -- TODO: support RETURNING and raise a WARNING CREATE OR REPLACE RULE geometry_columns_insert AS diff --git a/postgis/sqldefines.h b/postgis/sqldefines.h index 1902b06..7848165 100644 --- a/postgis/sqldefines.h +++ b/postgis/sqldefines.h @@ -8,8 +8,8 @@ */ #define POSTGIS_PGSQL_VERSION 93 #define POSTGIS_GEOS_VERSION 35 -#define POSTGIS_PROJ_VERSION 48 -#define POSTGIS_LIB_VERSION '2.1.7' +#define POSTGIS_PROJ_VERSION 49 +#define POSTGIS_LIB_VERSION '2.1.8' #define POSTGIS_LIBXML2_VERSION 2.9.2 /* @@ -18,12 +18,12 @@ * won't substitute within apostrophes) */ #define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''2.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1''::text AS version' -#define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''2015-03-30 12:54:40''::text AS version' +#define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''2015-07-07 13:50:01''::text AS version' #if POSTGIS_SVN_REVISION -#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.1.7'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ +#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.1.8'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ #else -#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.1.7'::text AS version $$ +#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.1.8'::text AS version $$ #endif #define SRID_USR_MAX 998999 diff --git a/postgis_svn_revision.h b/postgis_svn_revision.h index 1564b5a..a1fedf4 100644 --- a/postgis_svn_revision.h +++ b/postgis_svn_revision.h @@ -1 +1 @@ -#define POSTGIS_SVN_REVISION 13414 +#define POSTGIS_SVN_REVISION 13780 diff --git a/raster/test/regress/tickets.sql b/raster/test/regress/tickets.sql index 398c61c..33ef7c9 100644 --- a/raster/test/regress/tickets.sql +++ b/raster/test/regress/tickets.sql @@ -16,3 +16,87 @@ WITH data AS ( SELECT '#2911' l, ST_Metadata(ST_Rescale( -2.0 )) m ) SELECT l, (m).* FROM data; + +-- #3006 +SET client_min_messages TO ERROR; + +DROP TABLE IF EXISTS test_raster_scale_regular; +CREATE TABLE test_raster_scale_regular ( + rid integer, + rast raster +); + +DROP TABLE IF EXISTS test_raster_scale_big; +CREATE TABLE test_raster_scale_big ( + rid integer, + rast raster +); + +DROP TABLE IF EXISTS test_raster_scale_small; +CREATE TABLE test_raster_scale_small ( + rid integer, + rast raster +); + + +CREATE OR REPLACE FUNCTION make_test_raster( + table_suffix text, + rid integer, + scale_x double precision, + scale_y double precision DEFAULT 1.0 +) +RETURNS void +AS $$ +DECLARE + rast raster; + width integer := 2; + height integer := 2; + ul_x double precision := 0; + ul_y double precision := 0; + skew_x double precision := 0; + skew_y double precision := 0; + initvalue double precision := 1; + nodataval double precision := 0; +BEGIN + rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, scale_x, scale_y, skew_x, skew_y, 0); + rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); + + EXECUTE 'INSERT INTO test_raster_scale_' || table_suffix || ' VALUES ($1, $2)' USING rid, rast; + RETURN; +END; +$$ LANGUAGE 'plpgsql'; + +SELECT make_test_raster('regular', 0, 1); +SELECT make_test_raster('regular', 1, 1.0000001); +SELECT make_test_raster('regular', 2, 0.9999999); +SELECT AddRasterConstraints('test_raster_scale_regular'::name, 'rast'::name, 'scale_x', 'scale_y'); +SELECT r_table_name, r_raster_column, scale_x, scale_y FROM raster_columns + WHERE r_raster_column = 'rast' AND r_table_name = 'test_raster_scale_regular'; + +-- Issues enforce_scalex_rast constraint violation +SELECT make_test_raster('regular', 3, 1.001, 0.9999999); + +SELECT make_test_raster('big', 0, -12345678901234.0); +SELECT AddRasterConstraints('test_raster_scale_big'::name, 'rast'::name, 'scale_x', 'scale_y'); +SELECT r_table_name, r_raster_column, scale_x, scale_y FROM raster_columns + WHERE r_raster_column = 'rast' AND r_table_name = 'test_raster_scale_big'; + +-- Issues enforce_scalex_rast constraint violation +SELECT make_test_raster('big', 1, -123456789012345.0); + +SELECT make_test_raster('small', 0, 0.00001); +SELECT make_test_raster('small', 1, 0.000011); +SELECT make_test_raster('small', 2, 0.00000999); +SELECT AddRasterConstraints('test_raster_scale_small'::name, 'rast'::name, 'scale_x', 'scale_y'); +SELECT r_table_name, r_raster_column, scale_x, scale_y FROM raster_columns + WHERE r_raster_column = 'rast' AND r_table_name = 'test_raster_scale_small'; + +-- Issues enforce_scaley_rast constraint violation +SELECT make_test_raster('small', 3, 0.00001, 1.00001); + +DROP FUNCTION make_test_raster(text, integer, double precision, double precision); +DROP TABLE IF EXISTS test_raster_scale_regular; +DROP TABLE IF EXISTS test_raster_scale_big; +DROP TABLE IF EXISTS test_raster_scale_small; + +SET client_min_messages TO DEFAULT; diff --git a/raster/test/regress/tickets_expected b/raster/test/regress/tickets_expected index e00841e..4596f2a 100644 --- a/raster/test/regress/tickets_expected +++ b/raster/test/regress/tickets_expected @@ -3,3 +3,12 @@ #2532.2| NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API #2911|0|0|5|5|2|-2|0|0|0|1 +t +test_raster_scale_regular|rast||1 +ERROR: new row for relation "test_raster_scale_regular" violates check constraint "enforce_scaley_rast" +t +test_raster_scale_big|rast|-12345678901234|1 +ERROR: new row for relation "test_raster_scale_big" violates check constraint "enforce_scalex_rast" +t +test_raster_scale_small|rast||1 +ERROR: new row for relation "test_raster_scale_small" violates check constraint "enforce_scaley_rast" diff --git a/regress/affine.sql b/regress/affine.sql index 1d5ef09..3006389 100644 --- a/regress/affine.sql +++ b/regress/affine.sql @@ -48,6 +48,9 @@ select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geom select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,2, 3, 5, 7), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1 1)'::geometry,2, 3, 5, 7), 0.1)); +-- https://trac.osgeo.org/postgis/ticket/3159 +select '#3159', st_summary(st_affine(st_makepoint(1,1),1,0,0,1,0,0)); + -- postgis-users/2006-May/012119.html select 'transl_bbox', box2d(ST_Translate('LINESTRING(0 0, 1 1)'::geometry, 1, 0, 0)); select 'ST_Scale_bbox', box2d(ST_Scale('LINESTRING(1 0, 2 1)'::geometry, 2, 0)); diff --git a/regress/affine_expected b/regress/affine_expected index 639d069..a185112 100644 --- a/regress/affine_expected +++ b/regress/affine_expected @@ -32,6 +32,7 @@ ST_TransScale|POINT(4 2) ST_TransScale|POINT(2 4) ST_TransScale|POINT(15 28) ST_TransScale|POINT(15 28 1) +#3159|Point[] transl_bbox|BOX(1 0,2 1) ST_Scale_bbox|BOX(2 0,4 0) ST_Scale_bbox|BOX(3 1,4 2) diff --git a/regress/in_geojson.sql b/regress/in_geojson.sql index 23325e8..05c4a11 100644 --- a/regress/in_geojson.sql +++ b/regress/in_geojson.sql @@ -10,6 +10,12 @@ select 'geomfromgeojson_06',st_astext(st_geomfromgeojson(st_asgeojson('MULTIPOLY select '#1434: Next two errors'; select '#1434.1',ST_GeomFromGeoJSON('{ "type": "Point", "crashme": [100.0, 0.0] }'); select '#1434.2',ST_GeomFromGeoJSON('crashme');; +select '#1434.3',ST_GeomFromGeoJSON(''); +select '#1434.4',ST_GeomFromGeoJSON('{}'); +select '#1434.5',ST_GeomFromGeoJSON('{"type":"Point","coordinates":[]}'); +select '#1434.6',ST_GeomFromGeoJSON('{"type":"MultiPoint","coordinates":[[]]}'); +select '#1434.7',ST_GeomFromGeoJSON('{"type":"MultiPoint"}'); +select '#1434.8',ST_GeomFromGeoJSON('{"type":"Point"}'); -- #2130 -- SELECT '#2130', ST_NPoints(ST_GeomFromGeoJSON('{"type":"MultiPolygon","coordinates":[[[[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,32],[-117,32],[-117,32],[-117,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-117,32],[-117 [...] @@ -23,3 +29,13 @@ SELECT '#2619', ST_AsText(ST_GeomFromGeoJSON('{"type":"Polygon","bbox":[1,5,2,6] -- #2697 -- SELECT '#2697', ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[1]}'); SELECT '#2697', ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[1,1]}'); + +-- FromGeoJSON 3D + +SELECT 'geomfromgeojson_z_01', ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[1,2,3]}')); +SELECT 'geomfromgeojson_z_02', ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[2,3,4]]}')); + +-- FromGeoJSON 4D + +SELECT 'geomfromgeojson_zm_01', ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[1,2,3,4]}')); +SELECT 'geomfromgeojson_zm_02', ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3,4],[2,3,4,5]]}')); diff --git a/regress/in_geojson_expected b/regress/in_geojson_expected index 3320f1e..dd64494 100644 --- a/regress/in_geojson_expected +++ b/regress/in_geojson_expected @@ -7,8 +7,18 @@ geomfromgeojson_06|MULTIPOLYGON(((0 0,1 1,1 0,0 0))) #1434: Next two errors ERROR: Unable to find 'coordinates' in GeoJSON string ERROR: unexpected character (at offset 0) +ERROR: unexpected end of data (at offset 0) +ERROR: invalid GeoJSON representation +ERROR: Too few ordinates in GeoJSON +ERROR: Too few ordinates in GeoJSON +ERROR: Unable to find 'coordinates' in GeoJSON string +ERROR: Unable to find 'coordinates' in GeoJSON string #2130|50 #2216|30 #2619|POLYGON EMPTY ERROR: The 'coordinates' in GeoJSON ring are not an array ERROR: The 'coordinates' in GeoJSON ring are not an array +geomfromgeojson_z_01|POINT(1 2 3) +geomfromgeojson_z_02|LINESTRING(1 2 3,2 3 4) +geomfromgeojson_zm_01|POINT(1 2 3) +geomfromgeojson_zm_02|LINESTRING(1 2 3,2 3 4) diff --git a/regress/regress_lrs.sql b/regress/regress_lrs.sql index 761af96..7663058 100644 --- a/regress/regress_lrs.sql +++ b/regress/regress_lrs.sql @@ -33,6 +33,7 @@ select 'line_locate_point_2', ST_LineLocatePoint(ST_geomfromtext('LINESTRING(-19 select 'line_locate_point_3', ST_LineLocatePoint(ST_geomfromtext('LINESTRING(-1953743.873 471070.784,-1953735.105 471075.419,-1953720.034 471081.649)', 6269), ST_geomfromtext('POINT(-1953743.873 471070.784)', 6269)); --- http://trac.osgeo.org/postgis/ticket/1772#comment:2 select 'line_locate_point_4', ST_LineLocatePoint('LINESTRING(0 1, 0 1, 0 1)', 'POINT(0 1)'); +SELECT 'line_locate_point_5', ST_LineLocatePoint(ST_MakeLine('POINT(1 2)'::geometry, 'POINT EMPTY'::geometry), ST_Point(-11,40)); --- line_substring / line_interpolate_point diff --git a/regress/regress_lrs_expected b/regress/regress_lrs_expected index 83affb0..a20d29c 100644 --- a/regress/regress_lrs_expected +++ b/regress/regress_lrs_expected @@ -19,6 +19,7 @@ line_locate_point_1|0.528602749909894 line_locate_point_2|1 line_locate_point_3|0 line_locate_point_4|0 +line_locate_point_5|0 line_substring_1|4326|LINESTRING ZM (2 2 2 2,3 3 3 3,3.2 3.2 3.2 3.2) line_substring_2|LINESTRING ZM (2 2 2 2,3 3 3 3) line_substring_3|LINESTRING(0 0,1 1) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/postgis.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

