RFC 128:使C99和C++ 11建立需求¶
- 日期
2019-12-02
- 作者
甚至鲁奥
- 联系方式
- 状态
采用
- 最后更新
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所依赖的项目中已经详细讨论了这一点,这些项目已经采用了上述要求:
GDAL:https://GDAL.org/development/rfc/rfc68_cplusplus11.html
建议的解决方案¶
在CMakeLists.txt,执行C99和C++ 11的要求
在CMakeLists.txt中,将CMake的最低版本提高到3.0:这只是反映了MapServer master的当前状态,它为Python映射脚本使用了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采纳