Тестирование для LibreSSL в скрипте сборки Perl

Я выпустил Net::NSCAng::Client Некоторое время назад я получаю много тестовых сбоев в OpenBSD. Причиной этого является то, что протокол NSCAng использует OpenSSL в режиме предварительного ключа (RFC4279), что-то, что люди из LibreSSL (теперь по умолчанию в OpenBSD) разорвали. Тем не менее, они, похоже, были одержимы выполнением этого наиболее прозрачного способа: во включаемых файлах определены все функции, просто в общей библиотеке отсутствуют соответствующие символы, поэтому компиляция работает нормально, но тесты не пройдены.

В OpenBSD есть пакет совместимости, который называется eopenssl, и сначала проверяем это в Makefile.PL (используя ExtUtils::PkgConfig) Я могу заставить его работать, если установлена ​​библиотека совместимости. Если это не так, все равно не получится.

Я мог бы проверить наличие символа CPP OPENSSL_NO_PSK, но поскольку включения всегда происходят из LibreSSL, это не удается, даже если соединение с eopenssl будет работать нормально. Единственная идея, которую я оставил, это попытаться запустить тестовую программу как часть фазы компиляции, как это делает autoconf. Это возможно даже с ExtUtils::MakeMaker (или что-то еще - я бы не отказался от переключения системы сборки при необходимости)?

1 ответ

Решение

Легко написать функциональные тесты с Devel::CheckLib, Что-то вроде следующего может быть использовано для проверки наличия функции your_funcMakefile.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".

Другие вопросы по тегам