Toshaan Bharvani
3 weeks ago
commit
f573351a7b
2 changed files with 288 additions and 0 deletions
@ -0,0 +1,288 @@
@@ -0,0 +1,288 @@
|
||||
%bcond_with tests |
||||
%bcond_without igbinary |
||||
%bcond_without msgpack |
||||
|
||||
%global _root_bindir %{_bindir} |
||||
%global pecl_name redis |
||||
%global with_zts 0%{!?_without_zts:%{?__ztsphp:1}} |
||||
# after 20-json, 40-igbinary and 40-msgpack |
||||
%global ini_name 50-%{pecl_name}.ini |
||||
%global upstream_version 6.1.0 |
||||
%global sources %{pecl_name}-%{upstream_version}%{?upstream_prever} |
||||
%global _configure ../%{sources}/configure |
||||
|
||||
Name: php-pecl-redis |
||||
Version: 6.1.0 |
||||
Release: 1%{?dist} |
||||
License: PHP-3.01 |
||||
URL: https://pecl.php.net/package/redis |
||||
Source0: https://pecl.php.net/get/%{sources}.tgz |
||||
Summary: PHP extension for interfacing with key-value stores |
||||
|
||||
BuildRequires: make |
||||
BuildRequires: gcc |
||||
BuildRequires: php-devel >= 7.4 |
||||
BuildRequires: php-pear |
||||
BuildRequires: php-json |
||||
%if %{with igbinary} |
||||
BuildRequires: php-pecl-igbinary-devel |
||||
%endif |
||||
%if %{with msgpack} |
||||
BuildRequires: php-pecl-msgpack-devel >= 2.0.3 |
||||
%endif |
||||
BuildRequires: pkgconfig(liblzf) |
||||
BuildRequires: pkgconfig(libzstd) >= 1.3.0 |
||||
BuildRequires: pkgconfig(liblz4) |
||||
# to run Test suite |
||||
%if %{with tests} |
||||
BuildRequires: redis |
||||
%endif |
||||
|
||||
Requires: php(zend-abi) = %{php_zend_api} |
||||
Requires: php(api) = %{php_core_api} |
||||
Requires: php-json%{?_isa} |
||||
%if %{with igbinary} |
||||
Requires: php-igbinary%{?_isa} |
||||
%endif |
||||
%if %{with msgpack} |
||||
Requires: php-msgpack%{?_isa} |
||||
%endif |
||||
|
||||
Obsoletes: php-%{pecl_name} < 3 |
||||
Provides: php-%{pecl_name} = %{version} |
||||
Provides: php-%{pecl_name}%{?_isa} = %{version} |
||||
Provides: php-pecl(%{pecl_name}) = %{version} |
||||
Provides: php-pecl(%{pecl_name})%{?_isa} = %{version} |
||||
|
||||
|
||||
%description |
||||
This extension provides an API for communicating with RESP-based key-value |
||||
stores, such as Redis, Valkey, and KeyDB. |
||||
|
||||
This client implements most of the latest API. |
||||
As method only works when also implemented on the server side, |
||||
some doesn't work with an old server version. |
||||
|
||||
|
||||
%prep |
||||
%setup -q -c |
||||
|
||||
# Don't install/register tests, license, and bundled library |
||||
sed -e 's/role="test"/role="src"/' \ |
||||
-e '/LICENSE/s/role="doc"/role="src"/' \ |
||||
-e '/liblzf/d' \ |
||||
-i package.xml |
||||
|
||||
cd %{sources} |
||||
# Use system library |
||||
rm -r liblzf |
||||
|
||||
# Sanity check, really often broken |
||||
extver=$(sed -n '/#define PHP_REDIS_VERSION/{s/.* "//;s/".*$//;p}' php_redis.h) |
||||
if test "x${extver}" != "x%{upstream_version}%{?upstream_prever}"; then |
||||
: Error: Upstream extension version is ${extver}, expecting %{upstream_version}%{?upstream_prever}. |
||||
exit 1 |
||||
fi |
||||
cd .. |
||||
|
||||
mkdir NTS |
||||
%if %{with_zts} |
||||
mkdir ZTS |
||||
%endif |
||||
|
||||
# Drop in the bit of configuration |
||||
cat > %{ini_name} << 'EOF' |
||||
; Enable %{pecl_name} extension module |
||||
extension = %{pecl_name}.so |
||||
|
||||
; phpredis can be used to store PHP sessions. |
||||
; To do this, uncomment and configure below |
||||
|
||||
; RPM note : save_handler and save_path are defined |
||||
; for mod_php, in /etc/httpd/conf.d/php.conf |
||||
; for php-fpm, in %{_sysconfdir}/php-fpm.d/*conf |
||||
|
||||
;session.save_handler = %{pecl_name} |
||||
;session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2" |
||||
|
||||
; Configuration |
||||
;redis.arrays.algorithm = '' |
||||
;redis.arrays.auth = '' |
||||
;redis.arrays.autorehash = 0 |
||||
;redis.arrays.connecttimeout = 0 |
||||
;redis.arrays.consistent = 0 |
||||
;redis.arrays.distributor = '' |
||||
;redis.arrays.functions = '' |
||||
;redis.arrays.hosts = '' |
||||
;redis.arrays.index = 0 |
||||
;redis.arrays.lazyconnect = 0 |
||||
;redis.arrays.names = '' |
||||
;redis.arrays.pconnect = 0 |
||||
;redis.arrays.previous = '' |
||||
;redis.arrays.readtimeout = 0 |
||||
;redis.arrays.retryinterval = 0 |
||||
;redis.clusters.auth = 0 |
||||
;redis.clusters.cache_slots = 0 |
||||
;redis.clusters.persistent = 0 |
||||
;redis.clusters.read_timeout = 0 |
||||
;redis.clusters.seeds = '' |
||||
;redis.clusters.timeout = 0 |
||||
;redis.pconnect.pooling_enabled = 1 |
||||
;redis.pconnect.connection_limit = 0 |
||||
;redis.pconnect.echo_check_liveness = 1 |
||||
;redis.pconnect.pool_detect_dirty = 0 |
||||
;redis.pconnect.pool_poll_timeout = 0 |
||||
;redis.pconnect.pool_pattern => '' |
||||
;redis.session.locking_enabled = 0 |
||||
;redis.session.lock_expire = 0 |
||||
;redis.session.lock_retries = 100 |
||||
;redis.session.lock_wait_time = 20000 |
||||
;redis.session.early_refresh = 0 |
||||
;redis.session.compression = none |
||||
;redis.session.compression_level = 3 |
||||
EOF |
||||
|
||||
|
||||
%build |
||||
%{?dtsenable} |
||||
|
||||
peclconf() { |
||||
%configure \ |
||||
--enable-redis \ |
||||
--enable-redis-session \ |
||||
%if %{with igbinary} |
||||
--enable-redis-igbinary \ |
||||
%endif |
||||
%if %{with msgpack} |
||||
--enable-redis-msgpack \ |
||||
%endif |
||||
--enable-redis-lzf \ |
||||
--with-liblzf \ |
||||
--enable-redis-zstd \ |
||||
--with-libzstd \ |
||||
--enable-redis-lz4 \ |
||||
--with-liblz4 \ |
||||
--with-php-config=$1 |
||||
} |
||||
|
||||
cd %{sources} |
||||
%{__phpize} |
||||
sed -e 's/INSTALL_ROOT/DESTDIR/' -i build/Makefile.global |
||||
|
||||
cd ../NTS |
||||
peclconf %{__phpconfig} |
||||
%make_build |
||||
|
||||
%if %{with_zts} |
||||
cd ../ZTS |
||||
peclconf %{__ztsphpconfig} |
||||
%make_build |
||||
%endif |
||||
|
||||
|
||||
%install |
||||
%{?dtsenable} |
||||
|
||||
# Install the NTS stuff |
||||
%make_install -C NTS |
||||
install -D -m 644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name} |
||||
|
||||
%if %{with_zts} |
||||
# Install the ZTS stuff |
||||
%make_install -C ZTS |
||||
install -D -m 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name} |
||||
%endif |
||||
|
||||
# Install the package XML file |
||||
install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml |
||||
|
||||
# Documentation |
||||
cd %{sources} |
||||
for i in $(grep 'role="doc"' ../package.xml | sed -e 's/^.*name="//;s/".*$//') |
||||
do install -Dpm 644 $i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i |
||||
done |
||||
|
||||
|
||||
%check |
||||
# simple module load test |
||||
DEPS="--no-php-ini" |
||||
for i in json igbinary msgpack |
||||
do [ -f %{php_extdir}/${i}.so ] && DEPS="$DEPS --define extension=${i}.so" |
||||
done |
||||
|
||||
%{__php} $DEPS \ |
||||
--define extension=%{buildroot}%{php_extdir}/%{pecl_name}.so \ |
||||
--modules | grep '^%{pecl_name}$' |
||||
|
||||
%if %{with_zts} |
||||
%{__ztsphp} $DEPS \ |
||||
--define extension=%{buildroot}%{php_ztsextdir}/%{pecl_name}.so \ |
||||
--modules | grep '^%{pecl_name}$' |
||||
%endif |
||||
|
||||
%if %{with tests} |
||||
cd %{sources}/tests |
||||
|
||||
: Launch redis server |
||||
%if %{with valkey} |
||||
SRV=%{_root_bindir}/valkey-server |
||||
CLI=%{_root_bindir}/valkey-cli |
||||
%else |
||||
%if %{with keydb} |
||||
SRV=%{_root_bindir}/keydb-server |
||||
CLI=%{_root_bindir}/keydb-cli |
||||
%else |
||||
SRV=%{_root_bindir}/redis-server |
||||
CLI=%{_root_bindir}/redis-cli |
||||
%endif |
||||
%endif |
||||
|
||||
mkdir -p data |
||||
pidfile=$PWD/server.pid |
||||
port=$(%{__php} -r 'echo 9000 + PHP_MAJOR_VERSION*100 + PHP_MINOR_VERSION*10 + PHP_INT_SIZE + %{?fedora}%{?rhel} + 0%{?scl:1};') |
||||
$SRV \ |
||||
--bind 127.0.0.1 \ |
||||
--port $port \ |
||||
--daemonize yes \ |
||||
--logfile $PWD/server.log \ |
||||
--dir $PWD/data \ |
||||
--pidfile $pidfile |
||||
|
||||
|
||||
: Run the test Suite |
||||
sed -e "s/6379/$port/" -i *.php |
||||
|
||||
ret=0 |
||||
export TEST_PHP_EXECUTABLE=%{__php} |
||||
export TEST_PHP_ARGS="$DEPS \ |
||||
--define extension=%{buildroot}%{php_extdir}/%{pecl_name}.so" |
||||
$TEST_PHP_EXECUTABLE $TEST_PHP_ARGS TestRedis.php || ret=1 |
||||
|
||||
: Cleanup |
||||
if [ -f $pidfile ]; then |
||||
$CLI -p $port shutdown nosave |
||||
sleep 2 |
||||
fi |
||||
cat $PWD/server.log |
||||
|
||||
exit $ret |
||||
%else |
||||
: Upstream test suite disabled |
||||
%endif |
||||
|
||||
|
||||
%files |
||||
%license %{sources}/LICENSE |
||||
%doc %{pecl_docdir}/%{pecl_name} |
||||
%{pecl_xmldir}/%{name}.xml |
||||
|
||||
%{php_extdir}/%{pecl_name}.so |
||||
%config(noreplace) %{php_inidir}/%{ini_name} |
||||
|
||||
%if %{with_zts} |
||||
%{php_ztsextdir}/%{pecl_name}.so |
||||
%config(noreplace) %{php_ztsinidir}/%{ini_name} |
||||
%endif |
||||
|
||||
|
||||
%changelog |
Loading…
Reference in new issue