Тестирование для 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_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".