我不久前发布了Net::NSCAng::Client,在OpenBSD上出现了很多测试失败。原因是NSCAng协议在预置密钥模式(RFC4279)中使用了OpenSSL,这是LibreSSL (现在默认的OpenBSD )已经删除的东西。然而,他们似乎一直在用最不透明的方式来做这件事:包含文件定义了所有函数,只是共享库缺少了相应的符号,所以编译工作很好,但是测试失败了。
在OpenBSD上有一个名为eopenssl的兼容性包,通过在Makefile.PL (使用ExtUtils::PkgConfig)中对此进行第一次测试,如果安装了兼容性库,我就可以让它工作。如果不是的话,事情仍然会失败。
我可以检查CPP符号OPENSSL_NO_PSK,但是由于包含始终来自LibreSSL,所以即使用eopenssl链接也会失败。我剩下的唯一想法是尝试并让一个测试程序作为编译阶段的一部分来运行,就像autoconf那样。使用ExtUtils::MakeMaker (或者其他什么--如果有必要的话,我不介意切换构建系统),这可能吗?
发布于 2015-10-04 09:49:47
用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测试程序的“失败”报告。
https://stackoverflow.com/questions/32920753
复制相似问题