[geos-devel] GEOS 3.8.0 RC3

Greg Troxel gdt at lexort.com
Wed Oct 9 07:35:51 PDT 2019


rc3 seems to be in good order from the pkgsrc viewpoint.

* a digression about 3.7.3

I updated pkgsrc belatedly from 3.7.1 to 3.7.3 and tests passed on
netbsd-8/amd64.

There is a C++ ABI break from 3.7.1 to 3.7.3, which was unexpected.  Due
to libtool adding in dependency libs from the .la file, gdal links to
geos-3.7.3.so, even though it ought to just link to geos_c.  This is
arguably a libtool bug (and perhaps only on pkgsrc, but I think bigger),
so this ABI break is notabable, even if there are really zero direct
users, and even if the 3.7.3 library has the same ABI as the 3.7.1
library.  While I expect ABI breaks across major versions, I don't
expect them on micro releases and this surprised me.

* report on 3.8.0rc3

With 3.8.0rc3, on netbsd-8/amd64, it built and passed geos's own test suite.

a few very minor things, probably not worth the risk of changing other
than perhaps adjusting NEWS:

  There are header files removed from the set of installed files.  I
  don't see these presumed API withdrawals in NEWS.  (I am not saying
  this is wrong, just that I don't understand.)

  NEWS doesn't mention if there is an ABI break of the C++ API.  In
  pkgsrc, there are no known users of this now.  But, libtool adds
  dependency_libs to the link lines of depending packages, so even
  things that don't use the C++ API end up linked against the lib
  (arguably a bug, unknown extent of where this happens), and have to be
  recompiled, so an API break is noteworthy.

  I have a stray patch to geos-config.in, to add in @LDFLAGS@ to the
  --ldflags command.  I am really unclear if anyone ever sent it
  upstream from pkgsrc.  Also, there are --libs arguments that also
  include -Llibdir, which seems wrong.  Best to talk about this post
  release I think -- not new or urgent.

  I have a stray patch to capi/geos_ts_c.cpp, which uses const char *
  instead of str in NOTICE_MESSAGE and ERROR_MESSAGE.  I am unclear on
  the origin of this patch, but it claims that non-POD types in variadic
  functions are UB.   Also seems best to defer to post release -- also
  not new or urgent.

Removed header files:
  include/geos/algorithm/CGAlgorithms.h
  include/geos/algorithm/CentroidArea.h
  include/geos/algorithm/CentroidLine.h
  include/geos/algorithm/CentroidPoint.h
  include/geos/algorithm/MCPointInRing.h
  include/geos/algorithm/PointInRing.h
  include/geos/algorithm/SIRtreePointInRing.h
  include/geos/algorithm/SimplePointInRing.h
  include/geos/geom/Lineal.h
  include/geos/geom/Polygonal.h
  include/geos/geom/Puntal.h
  include/geos/noding/SingleInteriorIntersectionFinder.h
  include/geos/platform.h
  include/geos/timeval.h

----------------------------------------
$NetBSD: patch-ae,v 1.6 2018/09/11 16:13:29 gdt Exp $

TODO: explain what's in LDFLAGS.
TODO: explain why --libs has -L in the first place (vs --ldflags).
TODO: report upstream.

--- tools/geos-config.in.orig	2018-08-19 10:49:14.000000000 +0000
+++ tools/geos-config.in
@@ -58,7 +58,7 @@ case $1 in
       echo -L${libdir} -lgeos -lm
       ;;
     --ldflags)
-      echo -L${libdir}
+      echo -L${libdir} @LDFLAGS@
       ;;
     --includes)
       echo ${prefix}/include
----------------------------------------
$NetBSD: patch-capi_geos__ts__c.cpp,v 1.2 2018/09/11 16:13:29 gdt Exp $

\todo Document this patch.   It appears to be that passing non-POD types
to variadic functions is UB.

\todo File a bug upstream, if appropriate.

--- capi/geos_ts_c.cpp.orig	2015-09-08 16:31:02.000000000 +0000
+++ capi/geos_ts_c.cpp
@@ -214,7 +214,7 @@ typedef struct GEOSContextHandle_HS
     }
 
     void
-    NOTICE_MESSAGE(string fmt, ...)
+    NOTICE_MESSAGE(const char *fmt, ...)
     {
       if (NULL == noticeMessageOld && NULL == noticeMessageNew) {
         return;
@@ -222,7 +222,7 @@ typedef struct GEOSContextHandle_HS
 
       va_list args;
       va_start(args, fmt);
-      int result = vsnprintf(msgBuffer, sizeof(msgBuffer) - 1, fmt.c_str(), args);
+      int result = vsnprintf(msgBuffer, sizeof(msgBuffer) - 1, fmt, args);
       va_end(args);
 
       if (result > 0) {
@@ -235,7 +235,7 @@ typedef struct GEOSContextHandle_HS
     }
 
     void
-    ERROR_MESSAGE(string fmt, ...)
+    ERROR_MESSAGE(const char *fmt, ...)
     {
       if (NULL == errorMessageOld && NULL == errorMessageNew) {
         return;
@@ -243,7 +243,7 @@ typedef struct GEOSContextHandle_HS
 
       va_list args;
       va_start(args, fmt);
-      int result = vsnprintf(msgBuffer, sizeof(msgBuffer) - 1, fmt.c_str(), args);
+      int result = vsnprintf(msgBuffer, sizeof(msgBuffer) - 1, fmt, args);
       va_end(args);
 
       if (result > 0) {
----------------------------------------


More information about the geos-devel mailing list