[Git][debian-gis-team/mapserver][upstream] New upstream version 8.6.0~rc1

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Thu Nov 27 16:35:12 GMT 2025



Bas Couwenberg pushed to branch upstream at Debian GIS Project / mapserver


Commits:
dff1bf7d by Bas Couwenberg at 2025-11-27T17:12:42+01:00
New upstream version 8.6.0~rc1
- - - - -


16 changed files:

- .github/workflows/build-mapscript-php.yml
- CITATION.cff
- CMakeLists.txt
- HISTORY.md
- ci/ubuntu/build.sh
- scripts/build-mapscript-php.sh
- src/mapcontour.c
- src/mapgdal.cpp
- src/mapogcapi.cpp
- src/mapogcapi.h
- src/mapscript/csharp/CMakeLists.txt
- src/mapscript/java/CMakeLists.txt
- src/mapscript/perl/CMakeLists.txt
- src/mapscript/phpng/CMakeLists.txt
- src/mapscript/python/CMakeLists.txt
- src/mapscript/ruby/CMakeLists.txt


Changes:

=====================================
.github/workflows/build-mapscript-php.yml
=====================================
@@ -24,7 +24,7 @@ jobs:
     runs-on: ubuntu-24.04
     strategy:
       matrix:
-        php-version: [8.4, 8.3]
+        php-version: [8.5, 8.4]
 
     steps:
       - name: Checkout code


=====================================
CITATION.cff
=====================================
@@ -1,8 +1,8 @@
 cff-version: 1.2.0
 title: MapServer
 message: If you use this software, please cite it using the metadata from this file.
-version: 8.6.0-beta2
-date-released: 2025-11-18
+version: 8.6.0-rc1
+date-released: 2025-11-27
 abstract: MapServer is an Open Source platform for publishing spatial data and interactive mapping applications to the web.
 type: software
 authors:


=====================================
CMakeLists.txt
=====================================
@@ -18,7 +18,7 @@ include(CheckCSourceCompiles)
 set (MapServer_VERSION_MAJOR 8)
 set (MapServer_VERSION_MINOR 6)
 set (MapServer_VERSION_REVISION 0)
-set (MapServer_VERSION_SUFFIX "-beta2")
+set (MapServer_VERSION_SUFFIX "-rc1")
 
 # Set C++ version
 # Make CMAKE_CXX_STANDARD available as cache option overridable by user


=====================================
HISTORY.md
=====================================
@@ -13,6 +13,13 @@ https://mapserver.org/development/changelog/
 
 The online Migration Guide can be found at https://mapserver.org/MIGRATION_GUIDE.html
 
+8.6.0-rc1 release (2025-11-27)
+------------------------------
+
+- OGCAPI: return OGC-NumberReturned, OGC-NumberMatched and Link HTTP headers (#7390)
+
+- output GDAL files: fix from init=epsg:xxxx layers (#7392)
+
 8.6.0-beta2 release (2025-11-18)
 --------------------------------
 
@@ -21,6 +28,8 @@ The online Migration Guide can be found at https://mapserver.org/MIGRATION_GUIDE
 8.6.0-beta1 release (2025-11-13)
 --------------------------------
 
+- allow append of additional query parameters for OGCAPI: Features (#7360)
+
 - new MapServer index page (#7350)
 
 - WMS GetFeatureInfo: add options to precisely identify points through their symbols (#7318)


=====================================
ci/ubuntu/build.sh
=====================================
@@ -47,10 +47,10 @@ python -m http.server &> /dev/null &
 echo "PHP version"
 php -v
 PHPVersionMinor=$(php --version | head -n 1 | cut -d " " -f 2 | cut -c 1,3)
-if [ ${PHPVersionMinor} -gt 81 ]; then
-    cd php && curl -LO https://phar.phpunit.de/phpunit-11.phar
+if [ ${PHPVersionMinor} -gt 82 ]; then
+    cd php && curl -LO https://phar.phpunit.de/phpunit-12.phar
     echo "PHPUnit version"
-    php phpunit-11.phar --version
+    php phpunit-12.phar --version
 else
     cd php && curl -LO https://phar.phpunit.de/phpunit-10.phar
     echo "PHPUnit version"


=====================================
scripts/build-mapscript-php.sh
=====================================
@@ -3,7 +3,7 @@ set -eu  # Exit on error and treat unset variables as errors
 
 cd "$WORK_DIR"
 
-# Ensure the Python version is provided
+# Ensure the PHP version is provided
 if [ -z "${PHP_VERSION:-}" ]; then
     echo "Error: PHP version not specified. Make sure to pass it as an environment variable."
     exit 1
@@ -29,7 +29,7 @@ add-apt-repository ppa:ondrej/php -y
 LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y
 
 sudo apt-get -qq update
-sudo apt-get -qq install php"${PHP_VERSION}"-cli php"${PHP_VERSION}"-dev php"${PHP_VERSION}"-mbstring php"${PHP_VERSION}"-xml php"${PHP_VERSION}"-pcov php"${PHP_VERSION}"-xdebug
+sudo apt-get -qq install php"${PHP_VERSION}"-cli php"${PHP_VERSION}"-dev php"${PHP_VERSION}"-mbstring php"${PHP_VERSION}"-xml php"${PHP_VERSION}"-pcov
 
 # install build dependencies
 ci/ubuntu/setup.sh


=====================================
src/mapcontour.c
=====================================
@@ -593,10 +593,16 @@ static int msContourLayerGenerateContour(layerObj *layer) {
   }
 
   /* Create the OGR DataSource */
-  hDriver = OGRGetDriverByName("Memory");
+#if GDAL_VERSION_MAJOR > 3 ||                                                  \
+    (GDAL_VERSION_MAJOR == 3 && GDAL_VERSION_MINOR >= 11)
+  const char *pszDrvName = "MEM";
+#else
+  const char *pszDrvName = "Memory";
+#endif
+  hDriver = OGRGetDriverByName(pszDrvName);
   if (hDriver == NULL) {
-    msSetError(MS_OGRERR, "Unable to get OGR driver 'Memory'.",
-               "msContourLayerCreateOGRDataSource()");
+    msSetError(MS_OGRERR, "Unable to get OGR driver '%s'.",
+               "msContourLayerCreateOGRDataSource()", pszDrvName);
     return MS_FAILURE;
   }
 


=====================================
src/mapgdal.cpp
=====================================
@@ -638,8 +638,14 @@ char *msProjectionObj2OGCWKT(projectionObj *projection)
        (projection->numargs == 2 &&
         strstr(projection->args[1], "epsgaxis=") != NULL)) &&
       (pszInitEpsg = strcasestr(projection->args[0], "init=epsg:"))) {
-    int nEpsgCode = atoi(pszInitEpsg + strlen("init=epsg:"));
+    const int nEpsgCode = atoi(pszInitEpsg + strlen("init=epsg:"));
     eErr = OSRImportFromEPSG(hSRS, nEpsgCode);
+    if (eErr != OGRERR_NONE) {
+      // In case this is a pseudo EPSG code only defined in a text 'epsg'
+      // file and not in proj.db
+      eErr = OSRSetFromUserInput(
+          hSRS, std::string("+").append(projection->args[0]).c_str());
+    }
   } else {
     /* -------------------------------------------------------------------- */
     /*      Form arguments into a full Proj.4 definition string.            */


=====================================
src/mapogcapi.cpp
=====================================
@@ -928,7 +928,7 @@ static json getCollection(mapObj *map, layerObj *layer, OGCAPIFormat format,
 
 void msOGCAPIOutputJson(
     const json &j, const char *mimetype,
-    const std::map<std::string, std::string> &extraHeaders) {
+    const std::map<std::string, std::vector<std::string>> &extraHeaders) {
   std::string js;
 
   try {
@@ -941,7 +941,9 @@ void msOGCAPIOutputJson(
 
   msIO_setHeader("Content-Type", "%s", mimetype);
   for (const auto &kvp : extraHeaders) {
-    msIO_setHeader(kvp.first.c_str(), "%s", kvp.second.c_str());
+    for (const auto &value : kvp.second) {
+      msIO_setHeader(kvp.first.c_str(), "%s", value.c_str());
+    }
   }
   msIO_sendHeaders();
   msIO_printf("%s\n", js.c_str());
@@ -998,11 +1000,11 @@ void msOGCAPIOutputTemplate(const char *directory, const char *filename,
 /*
 ** Generic response output.
 */
-static void
-outputResponse(mapObj *map, cgiRequestObj *request, OGCAPIFormat format,
-               const char *filename, const json &response,
-               const std::map<std::string, std::string> &extraHeaders =
-                   std::map<std::string, std::string>()) {
+static void outputResponse(
+    mapObj *map, cgiRequestObj *request, OGCAPIFormat format,
+    const char *filename, const json &response,
+    const std::map<std::string, std::vector<std::string>> &extraHeaders =
+        std::map<std::string, std::vector<std::string>>()) {
   std::string path;
   char fullpath[MS_MAXPATHLEN];
 
@@ -1218,7 +1220,7 @@ static int processCollectionItemsRequest(mapObj *map, cgiRequestObj *request,
   std::string outputCrs = "EPSG:4326";
   bool outputCrsAxisInverted =
       false; // because above EPSG:4326 is meant to be OGC:CRS84 actually
-  std::map<std::string, std::string> extraHeaders;
+  std::map<std::string, std::vector<std::string>> extraHeaders;
   if (crs) {
     bool isExpectedCrs = false;
     for (const auto &crsItem : getCrsList(map, layer)) {
@@ -1231,7 +1233,7 @@ static int processCollectionItemsRequest(mapObj *map, cgiRequestObj *request,
       msOGCAPIOutputError(OGCAPI_PARAM_ERROR, "Bad value for crs.");
       return MS_SUCCESS;
     }
-    extraHeaders["Content-Crs"] = '<' + std::string(crs) + '>';
+    extraHeaders["Content-Crs"].push_back('<' + std::string(crs) + '>');
     if (std::string(crs) != CRS84_URL) {
       if (std::string(crs).find(EPSG_PREFIX_URL) == 0) {
         const char *code = crs + strlen(EPSG_PREFIX_URL);
@@ -1240,7 +1242,7 @@ static int processCollectionItemsRequest(mapObj *map, cgiRequestObj *request,
       }
     }
   } else {
-    extraHeaders["Content-Crs"] = '<' + std::string(CRS84_URL) + '>';
+    extraHeaders["Content-Crs"].push_back('<' + std::string(CRS84_URL) + '>');
   }
 
   struct ReprojectionObjects {
@@ -1466,6 +1468,19 @@ static int processCollectionItemsRequest(mapObj *map, cgiRequestObj *request,
                 other_extra_kvp + extra_params}});
     }
 
+    extraHeaders["OGC-NumberReturned"].push_back(
+        std::to_string(layer->resultcache->numresults));
+    extraHeaders["OGC-NumberMatched"].push_back(std::to_string(numberMatched));
+    std::vector<std::string> linksHeaders;
+    for (auto &link : response["links"]) {
+      linksHeaders.push_back("<" + link["href"].get<std::string>() +
+                             ">; rel=\"" + link["rel"].get<std::string>() +
+                             "\"; title=\"" + link["title"].get<std::string>() +
+                             "\"; type=\"" + link["type"].get<std::string>() +
+                             "\"");
+    }
+    extraHeaders["Link"] = std::move(linksHeaders);
+
     msFree(id_encoded); // done
   }
 


=====================================
src/mapogcapi.h
=====================================
@@ -70,8 +70,9 @@ std::string msOGCAPIGetApiRootUrl(mapObj *map, cgiRequestObj *request,
 void msOGCAPIOutputError(OGCAPIErrorType errorType,
                          const std::string &description);
 
-void msOGCAPIOutputJson(const nlohmann::json &j, const char *mimetype,
-                        const std::map<std::string, std::string> &extraHeaders);
+void msOGCAPIOutputJson(
+    const nlohmann::json &j, const char *mimetype,
+    const std::map<std::string, std::vector<std::string>> &extraHeaders);
 
 void msOGCAPIOutputTemplate(const char *directory, const char *filename,
                             const nlohmann::json &j, const char *mimetype);


=====================================
src/mapscript/csharp/CMakeLists.txt
=====================================
@@ -53,7 +53,7 @@ else()
 	set_target_properties(mapscript PROPERTIES OUTPUT_NAME "libmapscript")
 endif()
 
-SWIG_LINK_LIBRARIES(mapscript ${MAPSERVER_LIBMAPSERVER})
+target_link_libraries(mapscript PRIVATE ${MAPSERVER_LIBMAPSERVER})
 
 
 


=====================================
src/mapscript/java/CMakeLists.txt
=====================================
@@ -27,7 +27,7 @@ else ()
     swig_add_module(javamapscript java ../mapscript.i)
 endif ()
 
-swig_link_libraries(javamapscript ${MAPSERVER_LIBMAPSERVER})
+target_link_libraries(javamapscript PRIVATE ${MAPSERVER_LIBMAPSERVER})
 
 add_custom_command(TARGET javamapscript
                       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}


=====================================
src/mapscript/perl/CMakeLists.txt
=====================================
@@ -17,7 +17,7 @@ else ()
     swig_add_module(perlmapscript perl5 ../mapscript.i)
 endif ()
 
-SWIG_LINK_LIBRARIES(perlmapscript ${PERL_LIBRARIES} ${MAPSERVER_LIBMAPSERVER})
+target_link_libraries(perlmapscript PRIVATE ${PERL_LIBRARIES} ${MAPSERVER_LIBMAPSERVER})
 set_target_properties(perlmapscript PROPERTIES OUTPUT_NAME mapscript)
 set_target_properties(perlmapscript PROPERTIES PREFIX "")
 if(APPLE)


=====================================
src/mapscript/phpng/CMakeLists.txt
=====================================
@@ -57,7 +57,7 @@ if(WIN32)
   if(WITH_THREAD_SAFETY)
     target_compile_options(php_mapscriptng PRIVATE /DZTS=1)
   endif(WITH_THREAD_SAFETY)
-  SWIG_LINK_LIBRARIES(php_mapscriptng ${PHP_LIBRARY})
+  target_link_libraries(php_mapscriptng PRIVATE ${PHP_LIBRARY})
 endif(WIN32)
 
 IF(APPLE)


=====================================
src/mapscript/python/CMakeLists.txt
=====================================
@@ -27,7 +27,7 @@ else ()
     swig_add_module(pythonmapscript python ${SwigFile})
 endif ()
 
-swig_link_libraries(pythonmapscript ${Python_LIBRARIES} ${MAPSERVER_LIBMAPSERVER})
+target_link_libraries(pythonmapscript ${Python_LIBRARIES} ${MAPSERVER_LIBMAPSERVER})
 
 set_target_properties(${SWIG_MODULE_pythonmapscript_REAL_NAME} PROPERTIES PREFIX "")
 set_target_properties(${SWIG_MODULE_pythonmapscript_REAL_NAME} PROPERTIES OUTPUT_NAME _mapscript)


=====================================
src/mapscript/ruby/CMakeLists.txt
=====================================
@@ -13,7 +13,7 @@ else ()
     swig_add_module(rubymapscript ruby ../mapscript.i)
 endif ()
 
-swig_link_libraries(rubymapscript ${RUBY_LIBRARY} ${MAPSERVER_LIBMAPSERVER})
+target_link_libraries(rubymapscript PRIVATE ${RUBY_LIBRARY} ${MAPSERVER_LIBMAPSERVER})
 
 set_target_properties(${SWIG_MODULE_rubymapscript_REAL_NAME} PROPERTIES PREFIX "")
 set_target_properties(${SWIG_MODULE_rubymapscript_REAL_NAME} PROPERTIES OUTPUT_NAME mapscript)



View it on GitLab: https://salsa.debian.org/debian-gis-team/mapserver/-/commit/dff1bf7de1375f57cfe8b488a0b67d5fbcd8afe5

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/mapserver/-/commit/dff1bf7de1375f57cfe8b488a0b67d5fbcd8afe5
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20251127/c4664090/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list