[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