RFC 128:使C99和C++ 11建立需求

日期

2019-12-02

作者

甚至鲁奥

联系

even.rouault@spatialys.com

状态

采用

最后更新

2019-12-11

版本

MapServer 7.6版

概述

MaServer目前需要C89为其.c文件和C++ 98/C++ 03为其.CPP文件。我们建议将要求向C99和C++ 11提出。

这个RFC是 not 关于立即将整个代码库转换为C99或C++ 11,但更多的是关于将它转换为 可能的 在有意义的地方和时间进行渐进式移植。例如,未来基础数据结构的潜在较大变化将需要在专用RFC中添加种子。

这不仅仅是一个纯粹的技术动作,它还向整个社区表明,MapServer可以采用“现代”技术(只要考虑到9年或20年前的现代标准:-)

理论基础

在MapServer所依赖的项目中已经详细讨论了这一点,这些项目已经采用了上述要求:

建议的解决方案

  • 在CMakeLists.txt,执行C99和C++ 11的要求

  • 在CMakeLists.txt中,将CMake的最低版本提升到3.0:这只反映了MapServer Main的当前状态,该服务器为PythonMapScript使用了3.0特性。

  • 在mapogcfiltercommon.c->mapogcfiltercommon.cpp中演示部分转换

缩小C API

在导出时,mapserver.h会公开(太多)大量函数,主要在mapserver.h中,但也在其他头文件中。我们认为,其中大多数不是供外部消费的。这样大量的导出函数可能是重构和C++化的障碍。在Debian为“mapserver.h”维护的所有源代码的存档中查找时,只指向包含mapserver.h的MapCache(https://code search.Debian.net/search?q=mapserver.h)

因此,我们建议允许移除公共标志,前提是:

  • MapServer二进制文件(mapserv、shp2img等)和MapScript(它们是C API的主要用户)仍然在编译。如果需要对其进行更改,并且这些更改不会影响用户,则允许进行更改。

  • MapCache仍在编译。如果需要在MapCache中进行更改才能编译,则必须对此进行讨论。

向后兼容性问题

过时的环境,其中使用MPESver建立和没有本地C99支持或C++ 11将需要升级他们的工具链。

在Windows方面,这意味着Visual Studio 2015或更高版本。对于gcc,至少需要4.8。

我们所知道的Linux或Windows二进制发行版的当前版本具有所有所需的要求。Travis和AppVeyor CI无需更改,即可使以下建议的实施工作生效。

安全影响

没有。

MapScript含义

没有

文件需求

https://mapserver.org/installation/unix.html and https://mapserver.org/installation/win32.html will need to mention the new build requirements

票证ID和参考号

拉取请求请访问:https://github.com/MapServer/MapServer/pull/5939

投票历史

由PSC成员SethG、Evner、MichaelS、JeffM、SteveL、JukkaR、DanielM、StephanS、TomK+1采纳