在Perl构建脚本中测试LibreSSL



我在一段时间前发布了Net::NSCAng::Client,并且在OpenBSD上得到了很多测试失败。原因是NSCAng协议以预共享密钥模式(RFC4279)使用OpenSSL, LibreSSL(现在是OpenBSD的默认值)的人已经删除了这些内容。然而,他们似乎一直在用最不透明的方式做这件事:包含文件定义了所有的函数,只是共享库缺少相应的符号,所以编译工作得很好,但测试失败了。

在OpenBSD上有一个名为eopenssl的兼容性包,通过首先在Makefile.PL中测试它(使用ExtUtils::PkgConfig),如果安装了兼容性库,我可以使它工作。如果不是,事情还是会失败。

我可以检查CPP符号OPENSSL_NO_PSK,但由于包含总是来自LibreSSL,即使与eopenssl链接也会失败。我剩下的唯一想法是尝试让测试程序作为编译阶段的一部分运行,就像autoconf所做的那样。这是可能的ExtUtils::MakeMaker(或其他东西-我不介意切换构建系统,如果有必要)?

使用Devel::CheckLib编写功能测试很容易。可以使用以下代码检查函数your_func是否存在(在Makefile.PL中):

my $your_func_exists = check_lib(
    header   => 'your_header.h',
    function => 'return your_func ? 1 : 0;',
);

如果您只是想在函数缺失时中止编译:

check_lib(
    ...
) or warn('your_func is missing'), exit;

以0退出应该避免CPAN Tester的'FAIL'报告。

相关内容

  • 没有找到相关文章

最新更新