Browse Source

initial package creation

Signed-off-by: Toshaan Bharvani <toshaan@powerel.org>
master
Toshaan Bharvani 3 weeks ago
commit
f573351a7b
  1. 0
      SOURCES/.gitkeeper
  2. 288
      SPECS/php-pecl-redis.spec

0
SOURCES/.gitkeeper

288
SPECS/php-pecl-redis.spec

@ -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…
Cancel
Save