从CPAN使用轻微修改模块的最佳实践?

时间:2011-01-11 22:30:03

标签: perl cpan

我正在使用DBI和DBD :: SQLite,现在我想使用SQLite的R * Tree功能。由于默认情况下DBD :: SQLite不编译此功能,因此我必须在DBD :: SQLite的Makefile.PL中的-DSQLITE_ENABLE_RTREE=1变量中添加@CC_DEFINE。如果我做'perl Makefile.PL&&制造&& make install',一切都在我的机器上本地工作正常,但最终需要可部署/可分发给最终用户。

在这样的情况下我该怎么办?我应该复制源代码,grep源代码,并创建DBD :: SQLite :: WithRTree吗?创建DBD :: SQLite 1.31.1的私有版本(其中1.31是DBD :: SQLite的当前版本)?或许更好的方式呢?

项目中的所有其他发行版都通过非公共CPAN :: Mini镜像+ CPAN :: Mini :: Inject进行部署/分发。

3 个答案:

答案 0 :(得分:11)

  

我必须在DBD :: SQLite的Makefile.PL中为@CC_DEFINE变量添加'-DSQLITE_ENABLE_RTREE = 1'

你做错了,perl Makefile.PL DEFINE='-DSQLITE_ENABLE_RTREE=1'有效。这在ExtUtils::MakeMaker中有记录。既然您知道这一点,那么涉及Distroprefs的简单解决方案可能会落实到位。

答案 1 :(得分:3)

对于类似的问题,我已将修改后的发行版安装在一个单独的目录中(不更改任何模块名称),并使用use lib qw(the/special/directory)或将$PERL5LIB设置为需要使用增强模块的脚本。 / p>

调整模块的名称也可以完成这项工作,但这听起来像制作和测试的工作要多得多。

答案 2 :(得分:0)

你可以这样做:

cpan
o conf makepl_arg "DEFINE='-DSQLITE_ENABLE_RTREE=1'"
o conf commit

然后,CPAN会将该DEFINE永久添加到所有Makefile.PL调用的前面。

所以,应该只是

cpan DBD::SQLite

你的makefile选项应该填入你的编译行