#!/bin/bash use_php() { VERSION=$1 PHP=`which php` PHP_CONFIG=`which php-config` PHPIZE=`which phpize` ln -sfn "/usr/local/php-${VERSION}/bin/php" $PHP ln -sfn "/usr/local/php-${VERSION}/bin/php-config" $PHP_CONFIG ln -sfn "/usr/local/php-${VERSION}/bin/phpize" $PHPIZE } generate_proto() { PROTOC1=$1 PROTOC2=$2 rm -rf generated mkdir generated $PROTOC1 --php_out=generated proto/test_include.proto $PROTOC2 --php_out=generated proto/test.proto proto/test_no_namespace.proto proto/test_prefix.proto pushd ../../src $PROTOC2 --php_out=../php/tests/generated google/protobuf/empty.proto $PROTOC2 --php_out=../php/tests/generated -I../php/tests -I. ../php/tests/proto/test_import_descriptor_proto.proto popd } set -ex # Change to the script's directory. cd $(dirname $0) # The old version of protobuf that we are testing compatibility against. case "$1" in ""|3.3.0) OLD_VERSION=3.3.0 OLD_VERSION_PROTOC=http://repo1.maven.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0-linux-x86_64.exe ;; *) echo "[ERROR]: Unknown version number: $1" exit 1 ;; esac # Extract the latest protobuf version number. VERSION_NUMBER=`grep "PHP_PROTOBUF_VERSION" ../ext/google/protobuf/protobuf.h | sed "s|#define PHP_PROTOBUF_VERSION \"\(.*\)\"|\1|"` echo "Running compatibility tests between $VERSION_NUMBER and $OLD_VERSION" # Check protoc [ -f ../../src/protoc ] || { echo "[ERROR]: Please build protoc first." exit 1 } # Download old test. rm -rf protobuf git clone https://github.com/google/protobuf.git pushd protobuf git checkout v$OLD_VERSION popd # Build and copy the new runtime use_php 5.5 pushd ../ext/google/protobuf make clean || true phpize && ./configure && make popd rm -rf protobuf/php/ext rm -rf protobuf/php/src cp -r ../ext protobuf/php/ext/ cp -r ../src protobuf/php/src/ # Download old version protoc compiler (for linux) wget $OLD_VERSION_PROTOC -O old_protoc chmod +x old_protoc NEW_PROTOC=`pwd`/../../src/protoc OLD_PROTOC=`pwd`/old_protoc cd protobuf/php cp -r /usr/local/vendor-5.5 vendor wget https://phar.phpunit.de/phpunit-4.8.0.phar -O /usr/bin/phpunit cd tests # Test A.1: # proto set 1: use old version # proto set 2 which may import protos in set 1: use old version generate_proto $OLD_PROTOC $OLD_PROTOC ./test.sh pushd .. phpunit popd # Test A.2: # proto set 1: use new version # proto set 2 which may import protos in set 1: use old version generate_proto $NEW_PROTOC $OLD_PROTOC ./test.sh pushd .. phpunit popd # Test A.3: # proto set 1: use old version # proto set 2 which may import protos in set 1: use new version generate_proto $OLD_PROTOC $NEW_PROTOC ./test.sh pushd .. phpunit popd