forked from CMB2/CMB2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Install PHP5.2/5.3 on trusty for unit tests
Stolen from WordPress/gutenberg#2049. Intended to compensate for Travis removing support for PHP 5.2/5.3. Uses the SWITCH_TO_PHP environment variable to request older versions of PHP. PHP5.3 and PHP5.2 are installed for the user, using phpbrew. The correct version of PHPUnit is also installed. ~/.phpbrew contains the built PHP versions, and this is cached.
- Loading branch information
1 parent
2f4d6f4
commit 7b4b416
Showing
5 changed files
with
285 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
#!/bin/bash | ||
|
||
# Uses phpbrew to install older php versions on modern(ish) distros. | ||
# Installs the correct version of phpunit for the requested php | ||
# version. ~/.phpbrew is expected to be cached so we only have | ||
# to build php the first time. | ||
|
||
# we have to save and restore the original working directory, because | ||
# phpbrew can mess up if we don't run it from the home directory | ||
ORIG_DIR=`pwd`; | ||
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | ||
PHP52_PATH=$HOME/.phpbrew/php/php-5.2.17 | ||
|
||
# install phpunit | ||
|
||
mkdir -p $HOME/phpunit-bin | ||
|
||
if [[ ${SWITCH_TO_PHP:0:3} == "5.2" ]]; then | ||
# use the phpunit in the PHP5.2 installation | ||
ln -s ${PHP52_PATH}/lib/php/phpunit/phpunit.php $HOME/phpunit-bin/phpunit | ||
elif [[ ${TRAVIS_PHP_VERSION:0:2} == "5." ]] || [[ ${SWITCH_TO_PHP:0:2} == "5." ]]; then | ||
wget -O $HOME/phpunit-bin/phpunit https://phar.phpunit.de/phpunit-4.8.phar | ||
chmod +x $HOME/phpunit-bin/phpunit | ||
else | ||
composer global require "phpunit/phpunit=6.*" | ||
fi | ||
|
||
export PATH=$HOME/phpunit-bin/:$PATH | ||
|
||
if [[ ${SWITCH_TO_PHP:0:3} == "5.2" ]] || [[ ${SWITCH_TO_PHP:0:3} == "5.3" ]]; then | ||
PHPBREW_BUILT_CHECK=$HOME/.phpbrew/bashrc | ||
|
||
# directory to install phpbrew into | ||
mkdir -p $HOME/php-utils-bin | ||
|
||
# install phpbrew | ||
curl -L -o $HOME/php-utils-bin/phpbrew https://github.com/phpbrew/phpbrew/raw/f6a422e1ba49293ee73bc4c317795c021bc57020/phpbrew | ||
chmod +x $HOME/php-utils-bin/phpbrew | ||
|
||
# needs to be on the path for switching php versions to work | ||
export PATH=$HOME/php-utils-bin:$PATH | ||
|
||
# php and phpunit3.6 installs should be cached, only build if they're not there. | ||
if [ ! -f $PHPBREW_BUILT_CHECK ]; then | ||
|
||
# init with known --old to get 5.2 and 5.3 | ||
$HOME/php-utils-bin/phpbrew init | ||
$HOME/php-utils-bin/phpbrew known --old | ||
|
||
# build PHP5.2 | ||
tail -F $HOME/.phpbrew/build/php-5.2.17/build.log & | ||
TAIL_PID=$! | ||
$HOME/php-utils-bin/phpbrew install --patch ${THIS_DIR}/patches/node.patch --patch ${THIS_DIR}/patches/openssl.patch 5.2 +default +mysql +pdo \ | ||
+gettext +phar +openssl -- --with-openssl-dir=/usr/include/openssl --enable-spl --with-mysql --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr | ||
kill -TERM $TAIL_PID | ||
|
||
# build PHP5.3 | ||
tail -F $HOME/.phpbrew/build/php-5.3.29/build.log & | ||
TAIL_PID=$! | ||
$HOME/php-utils-bin/phpbrew install --patch ${THIS_DIR}/patches/node.patch --patch ${THIS_DIR}/patches/openssl.patch 5.3 +default +mysql +pdo \ | ||
+gettext +phar +openssl -- --with-openssl-dir=/usr/include/openssl --enable-spl --with-mysql --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr | ||
kill -TERM $TAIL_PID | ||
|
||
# install PHPUnit 3.6. The only install method available is from source, using git branches old | ||
# enough that they don't rely on any PHP5.3+ features. This clones each needed dependency | ||
# and then we add the paths to the include_path by setting up an extra .ini file | ||
cd ${PHP52_PATH}/lib/php | ||
|
||
# dependencies | ||
git clone --depth=1 --branch=1.1 git://github.com/sebastianbergmann/dbunit.git | ||
git clone --depth=1 --branch=1.1 git://github.com/sebastianbergmann/php-code-coverage.git | ||
git clone --depth=1 --branch=1.3.2 git://github.com/sebastianbergmann/php-file-iterator.git | ||
git clone --depth=1 --branch=1.1.1 git://github.com/sebastianbergmann/php-invoker.git | ||
git clone --depth=1 --branch=1.1.2 git://github.com/sebastianbergmann/php-text-template.git | ||
git clone --depth=1 --branch=1.0.3 git://github.com/sebastianbergmann/php-timer.git | ||
git clone --depth=1 --branch=1.1.4 git://github.com/sebastianbergmann/php-token-stream.git | ||
git clone --depth=1 --branch=1.1 git://github.com/sebastianbergmann/phpunit-mock-objects.git | ||
git clone --depth=1 --branch=1.1 git://github.com/sebastianbergmann/phpunit-selenium.git | ||
git clone --depth=1 --branch=1.0.0 git://github.com/sebastianbergmann/phpunit-story.git | ||
|
||
# and the version of phpunit that we expect to run with php 5.2 | ||
git clone --depth=1 --branch=3.6 git://github.com/sebastianbergmann/phpunit.git | ||
|
||
# fix up the version number of phpunit | ||
sed -i 's/@package_version@/3.6-git/g' phpunit/PHPUnit/Runner/Version.php | ||
|
||
# now set up an ini file that adds all of the above to include_path for the PHP5.2 install | ||
mkdir -p ${PHP52_PATH}/var/db | ||
echo "include_path=.:${PHP52_PATH}/lib/php:${PHP52_PATH}/lib/php/dbunit:${PHP52_PATH}/lib/php/php-code-coverage:${PHP52_PATH}/lib/php/php-file-iterator:${PHP52_PATH}/lib/php/php-invoker:${PHP52_PATH}/lib/php/php-text-template:${PHP52_PATH}/lib/php/php-timer:${PHP52_PATH}/lib/php/php-token-stream:${PHP52_PATH}/lib/php/phpunit-mock-objects:${PHP52_PATH}/lib/php/phpunit-selenium:${PHP52_PATH}/lib/php/phpunit-story:${PHP52_PATH}/lib/php/phpunit" > ${PHP52_PATH}/var/db/path.ini | ||
|
||
# one more PHPUnit dependency that we need to install using pear under PHP5.2 | ||
cd $HOME | ||
export PHPBREW_RC_ENABLE=1 | ||
source $HOME/.phpbrew/bashrc | ||
phpbrew use 5.2.17 | ||
pear channel-discover pear.symfony-project.com | ||
pear install pear.symfony-project.com/YAML-1.0.2 | ||
|
||
# manually go back to the system php, we can't use `phpbrew switch-off` | ||
# because we're running a version of php that phpbrew doesn't work with at this point | ||
unset PHPBREW_PHP | ||
unset PHPBREW_PATH | ||
__phpbrew_set_path | ||
__phpbrew_reinit | ||
eval `$BIN env` | ||
|
||
# clean up build directory | ||
rm -rf $HOME/.phpbrew/build/* | ||
fi | ||
|
||
# all needed php versions and phpunit versions are installed, either from the above | ||
# install script, or from travis cache, so switch to using them | ||
cd $HOME | ||
export PHPBREW_RC_ENABLE=1 | ||
source $HOME/.phpbrew/bashrc | ||
|
||
if [[ ${SWITCH_TO_PHP:0:3} == "5.2" ]]; then | ||
phpbrew use 5.2.17 | ||
else | ||
phpbrew use 5.3.29 | ||
fi | ||
fi | ||
|
||
cd $ORIG_DIR |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
This directory contains patches required to build | ||
older versions of PHP on trusty. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
--- ext/dom/node.c 2012-08-06 17:49:48.826716692 +0800 | ||
+++ ext/dom/node.c 2012-08-06 17:52:47.633484660 +0800 | ||
@@ -1895,9 +1895,17 @@ static void dom_canonicalization(INTERNA | ||
RETVAL_FALSE; | ||
} else { | ||
if (mode == 0) { | ||
+#ifdef LIBXML2_NEW_BUFFER | ||
+ ret = xmlOutputBufferGetSize(buf); | ||
+#else | ||
ret = buf->buffer->use; | ||
+#endif | ||
if (ret > 0) { | ||
+#ifdef LIBXML2_NEW_BUFFER | ||
+ RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1); | ||
+#else | ||
RETVAL_STRINGL((char *) buf->buffer->content, ret, 1); | ||
+#endif | ||
} else { | ||
RETVAL_EMPTY_STRING(); | ||
} | ||
--- ext/dom/documenttype.c 2012-08-06 18:02:16.019640870 +0800 | ||
+++ ext/dom/documenttype.c 2012-08-06 18:06:16.612228905 +0800 | ||
@@ -205,7 +205,13 @@ int dom_documenttype_internal_subset_rea | ||
if (buff != NULL) { | ||
xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL); | ||
xmlOutputBufferFlush(buff); | ||
+ | ||
+#ifdef LIBXML2_NEW_BUFFER | ||
+ ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), | ||
+ xmlOutputBufferGetSize(buff), 1); | ||
+#else | ||
ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1); | ||
+#endif | ||
(void)xmlOutputBufferClose(buff); | ||
return SUCCESS; | ||
} | ||
--- ext/simplexml/simplexml.c 2012-08-06 18:10:44.621017026 +0800 | ||
+++ ext/simplexml/simplexml.c 2012-08-06 18:12:48.016270419 +0800 | ||
@@ -1417,7 +1417,12 @@ SXE_METHOD(asXML) | ||
|
||
xmlNodeDumpOutput(outbuf, (xmlDocPtr) sxe->document->ptr, node, 0, 0, ((xmlDocPtr) sxe->document->ptr)->encoding); | ||
xmlOutputBufferFlush(outbuf); | ||
+#ifdef LIBXML2_NEW_BUFFER | ||
+ RETVAL_STRINGL((char *)xmlOutputBufferGetContent(outbuf), | ||
+ xmlOutputBufferGetSize(outbuf), 1); | ||
+#else | ||
RETVAL_STRINGL((char *)outbuf->buffer->content, outbuf->buffer->use, 1); | ||
+#endif | ||
xmlOutputBufferClose(outbuf); | ||
} | ||
} else { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
--- ext/openssl/xp_ssl.c | ||
+++ ext/openssl/xp_ssl.c | ||
@@ -328,10 +328,12 @@ static inline int php_openssl_setup_cryp | ||
sslsock->is_client = 1; | ||
method = SSLv23_client_method(); | ||
break; | ||
+#ifndef OPENSSL_NO_SSL2 | ||
case STREAM_CRYPTO_METHOD_SSLv2_CLIENT: | ||
sslsock->is_client = 1; | ||
method = SSLv2_client_method(); | ||
break; | ||
+#endif | ||
case STREAM_CRYPTO_METHOD_SSLv3_CLIENT: | ||
sslsock->is_client = 1; | ||
method = SSLv3_client_method(); | ||
@@ -348,10 +350,12 @@ static inline int php_openssl_setup_cryp | ||
sslsock->is_client = 0; | ||
method = SSLv3_server_method(); | ||
break; | ||
+#ifndef OPENSSL_NO_SSL2 | ||
case STREAM_CRYPTO_METHOD_SSLv2_SERVER: | ||
sslsock->is_client = 0; | ||
method = SSLv2_server_method(); | ||
break; | ||
+#endif | ||
case STREAM_CRYPTO_METHOD_TLS_SERVER: | ||
sslsock->is_client = 0; | ||
method = TLSv1_server_method(); | ||
@@ -629,9 +633,11 @@ static inline int php_openssl_tcp_sockop | ||
case STREAM_CRYPTO_METHOD_SSLv23_CLIENT: | ||
sock->method = STREAM_CRYPTO_METHOD_SSLv23_SERVER; | ||
break; | ||
+#ifndef OPENSSL_NO_SSL2 | ||
case STREAM_CRYPTO_METHOD_SSLv2_CLIENT: | ||
sock->method = STREAM_CRYPTO_METHOD_SSLv2_SERVER; | ||
break; | ||
+#endif | ||
case STREAM_CRYPTO_METHOD_SSLv3_CLIENT: | ||
sock->method = STREAM_CRYPTO_METHOD_SSLv3_SERVER; | ||
break; | ||
@@ -911,9 +917,11 @@ php_stream *php_openssl_ssl_socket_facto | ||
if (strncmp(proto, "ssl", protolen) == 0) { | ||
sslsock->enable_on_connect = 1; | ||
sslsock->method = STREAM_CRYPTO_METHOD_SSLv23_CLIENT; | ||
+#ifndef OPENSSL_NO_SSL2 | ||
} else if (strncmp(proto, "sslv2", protolen) == 0) { | ||
sslsock->enable_on_connect = 1; | ||
sslsock->method = STREAM_CRYPTO_METHOD_SSLv2_CLIENT; | ||
+#endif | ||
} else if (strncmp(proto, "sslv3", protolen) == 0) { | ||
sslsock->enable_on_connect = 1; | ||
sslsock->method = STREAM_CRYPTO_METHOD_SSLv3_CLIENT; |