Почему этот неизмененный код из официального релиза PHP 5.6.18:
--SKIPIF--
<?php
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
if (!extension_loaded('openssl')) { die('ext/openssl required'); }
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>
… не пропустить тест только для Windows при сборке пакета PHP на Arch Linux?
Я пытаюсь собрать PHP5.6.18, используя PKGBUILD из официальной системы сборки Arch. Вот что я сделал:
git clone git://projects.archlinux.org/svntogit/packages.git
packages
, а также git checkout
этот идентификатор фиксации.pkgver=5.6.18
pkgrel=1
'177ba962557795866ae331ad4ad99bba'
makechrootpkg -c -r $CHROOT
(в каталоге с PKGBUILD
файл.Сборка работает нормально, но я получаю следующий тестовый сбой:
Number of tests : 6651 6180
Tests skipped : 471 ( 7.1%) --------
Tests warned : 1 ( 0.0%) ( 0.0%)
Tests failed : 1 ( 0.0%) ( 0.0%)
Expected fail : 9 ( 0.1%) ( 0.1%)
Tests passed : 6169 ( 92.8%) ( 99.8%)
---------------------------------------------------------------------
Time taken : 45 seconds
...
FAILED TEST SUMMARY
---------------------------------------------------------------------
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream
]] ) ; [ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt]
=====================================================================
=====================================================================
WARNED TEST SUMMARY
---------------------------------------------------------------------
Bug #70172 - Use After Free Vulnerability in unserialize() [ext/standard/tests/serialize/bug70172.phpt] (warn: XFA
IL section but test passes)
=====================================================================
Ок, так win32
уже выглядит подозрительно в имени файла, и просмотр содержимого файла действительно предполагает, что тест должен быть пропущен в Linux:
--TEST--
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream ]] ) ;
...
--SKIPIF--
<?php
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
if (!extension_loaded('openssl')) { die('ext/openssl required'); }
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>
Обратите внимание PHP_OS
связанная проверка. Итак, я думаю, возможно, PHP_OS каким-то образом получает неправильное значение. Так что я:
arch-nspawn $CHROOT/$USER/
echo substr(PHP_OS, 0, 3)
<?php
в --FILE--
раздел, а в актуальном stream_socket_enable_crypto-win32.php
файл)stream_socket_enable_crypto-win32.sh
скрипт в том же каталоге, я действительно вижу ожидаемый Lin
выход.Почему этот тест не пропущен? Я действительно смущен. Как я могу исправить эту проблему?
В качестве обходного пути, сейчас я просто удалю тест в prepare()
раздел PKGBUILD
файл:
prepare() {
cd ${srcdir}/${pkgbase}-${pkgver}
# ....
# add this line:
rm ./ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt
}
Было бы неплохо, если бы M01 дал нам знать имя файла PKGBUILD, который он отредактировал, чтобы я мог также взглянуть на это.
Но до тех пор просто откройте этот файл:
/usr/src/php/ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt
и найдите эту строку, как показано выше.
И просто закомментируйте строку, если кто-то все еще использует php 5.3, он все равно должен быть отмечен и очищен, lol.
//commented out by dave due to bug and should be skipped
//if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }