r-测试CRAN是否正在检查包装

  • 本文关键字:包装 测试 CRAN 是否 r cran
  • 更新时间 :
  • 英文 :


我的包中的一些函数使用C++11容器运行得更快,但CRAN不接受同时使用$(SHLIB_OPENMP_CXXFLAGS)$(CXX1XSTD)的包,因为它不在Solaris(或其他次要平台)上编译。CRAN的建议是编写一个配置脚本,但我认为这对我来说太耗时了,而且对于很少有人使用的平台来说,这会使我的代码不必要地复杂化。

目前,我刚刚注释掉了所有C++11代码,并从Makevars中删除了$(CXX1XSTD)以供CRAN提交。这是一个糟糕的解决方案,我更希望能够在Makevars中检测CRAN并进行调整,所以我不必为每个版本维护CRAN分叉。

我仍然在测试C++11是否可用,但它只是Makevars中C++11和OpenMP标志的组合,这是使用CRAN提交的Solaris的绊脚石。我觉得一定有一个琐碎的方法来解决这个问题。

有没有一个环境变量我应该用来测试CRAN本身是否在检查我的包,以及我可以在Makevars中测试哪个?我已经搜索了R代码库,阅读了R Internal和Writing R Extensions,尽管我不能说我对它们了如指掌,这是一些CRAN维护人员所期望的。CRAN可能设置了一些环境变量,但我希望对_R_CHECK_CRAN_INCOMING_=TRUE这样的东西进行测试会引起维护人员的愤怒。

我认为在Makevars中进行"if-solaris"测试是不够的:不允许同时存在C++11和OpenMP标志,因为它们在使用频率甚至低于solaris的平台上可能会失败。

也许我只是走错了路。

尽管可以对此进行测试,但真正正确的方法是使用配置脚本。我使用了config.ac autoconf来生成它,这最终并没有那么难。然后,C++代码可以根据需要使用ifdef来测试C++11符号的存在,并且仍然使用OpenMP#pragma声明。Windows需要特殊处理。我使用了RODBC包中的方法。这还没有提交给CRAN或在Solaris上进行测试,但它直接回应了CRAN维护人员的建议。

请参阅:https://github.com/jackwasey/icd

相关文件有:config.ac、src/config.h.in、src/Makevars.in

最新更新