0

Net::NSCAng::Client前一阵子发布了,在 OpenBSD 上遇到了很多测试失败。原因是 NSCAng 协议在预共享密钥模式 (RFC4279) 中使用 OpenSSL,LibreSSL(现在 OpenBSD 上的默认设置)的人们已经淘汰了这一点。然而,他们似乎一心想以最不透明的方式做到这一点:包含文件定义了所有函数,只是共享库缺少相应的符号,所以编译工作正常但测试失败。

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

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

4

1 回答 1

1

使用 .编写功能测试很容易Devel::CheckLib。类似下面的东西可以用来检查函数的存在your_func(in 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 测试人员的“失败”报告。

于 2015-10-04T09:49:47.880 回答