-%include /usr/lib/rpm/macros.php
+#
+# Conditional build:
+%bcond_without tests # build without tests
+
+%define php_name php%{?php_suffix}
%define modname memcache
%define php_min_version 5.0.0
+%define commit e702b5f91
+%include /usr/lib/rpm/macros.php
Summary: %{modname} - a memcached extension
Summary(pl.UTF-8): %{modname} - rozszerzenie memcached
-Name: php-pecl-%{modname}
-Version: 3.0.6
-Release: 4
+Name: %{php_name}-pecl-%{modname}
+Version: 4.0.4
+Release: 1
License: PHP 3.01
Group: Development/Languages/PHP
-Source0: http://pecl.php.net/get/%{modname}-%{version}.tgz
-# Source0-md5: 23c2a1548f3fc7658b98b1c60e6d83b1
+Source0: https://github.com/websupport-sk/pecl-memcache/archive/%{version}/%{modname}-%{version}.tar.gz
+# Source0-md5: 612c575eccc18d98484b72c0cff6907a
Source1: %{modname}.ini
Source2: %{modname}-apache.conf
Source3: %{modname}-lighttpd.conf
Source4: config.php
Patch0: %{modname}-webapp.patch
-URL: http://pecl.php.net/package/memcache/
-BuildRequires: php-devel >= 3:5.0.0
-BuildRequires: rpm-php-pearprov >= 4.4.2-11
-BuildRequires: rpmbuild(macros) >= 1.344
+URL: https://github.com/websupport-sk/pecl-memcache/
+BuildRequires: %{php_name}-devel >= 3:7.0.0
+BuildRequires: %{php_name}-pcre
+BuildRequires: %{php_name}-session
+BuildRequires: %{php_name}-simplexml
+BuildRequires: %{php_name}-spl
+BuildRequires: %{php_name}-xml
BuildRequires: php-packagexml2cl
+BuildRequires: rpm-php-pearprov >= 4.4.2-11
+BuildRequires: rpmbuild(macros) >= 1.650
+%if %{with tests}
+BuildRequires: %{php_name}-cli
+BuildRequires: memcached
+%endif
%{?requires_php_extension}
-Requires: php-common >= 4:5.0.4
-Requires: php-session
-Requires: php-zlib
+Requires: %{php_name}-session
+Requires: %{php_name}-zlib
Suggests: memcached
-Obsoletes: php-pear-%{modname}
+Provides: php(memcache) = %{version}
+Obsoletes: php-pecl-memcache < 3.0.8-5
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%define _webapps /etc/webapps
Summary: Web interface for memcache
Group: Libraries
# does not require extension itself
-Requires: php-common >= 4:%{php_min_version}
-Requires: php-date
-Requires: php-gd
-Requires: php-pcre
+Requires: php(core) >= %{php_min_version}
+Requires: php(date)
+Requires: php(gd)
+Requires: php(pcre)
Requires: webapps
Requires: webserver(php) >= 5.0
+%if "%{_rpmversion}" >= "5"
+BuildArch: noarch
+%endif
%description web
Via this web interface script you can manage and view statistics of
memcache.
%prep
-%setup -q -c
-mv %{modname}-%{version}/* .
+%setup -qc
+mv pecl-%{modname}-*/{.??*,*} .
%patch0 -p1
+cat <<'EOF' > run-tests.sh
+#!/bin/sh
+export NO_INTERACTION=1 REPORT_EXIT_STATUS=1 MALLOC_CHECK_=2
+exec %{__make} test \
+ PHP_EXECUTABLE=%{__php} \
+%if "%php_major_version.%php_minor_version" >= "7.4"
+ PHP_TEST_SHARED_SYSTEM_EXTENSIONS="simplexml session" \
+%else
+ PHP_TEST_SHARED_SYSTEM_EXTENSIONS="pcre spl simplexml session" \
+%endif
+ RUN_TESTS_SETTINGS="-q $*"
+EOF
+chmod +x run-tests.sh
+
+# skip failed tests
+xfail() {
+ set +x
+ while read s; do
+ t=$(echo "$s" | sed -rne 's/.+\[(.+)\]/\1/p')
+
+ test -f "$t"
+ echo >&2 "XFAIL: $s"
+ cat >> $t <<-EOF
+
+ --XFAIL--
+ Skip
+ EOF
+ done
+}
+
+xfail <<'EOF'
+memcache->addServer() [tests/019.phpt]
+memcache->set()/memcache->get() with multiple keys and load balancing [tests/020.phpt]
+memcache->getExtendedStats() [tests/022.phpt]
+memcache_get_extended_stats() [tests/022a.phpt]
+memcache->delete() with load balancing [tests/023.phpt]
+memcache->increment() with load balancing [tests/025.phpt]
+memcache->delete() with load balancing [tests/026.phpt]
+memcache->addServer() adding server in failed mode [tests/031.phpt]
+memcache->getServerStatus(), memcache->setServerParams() [tests/032.phpt]
+memcache::connect() with unix domain socket [tests/035.phpt]
+ini_set('session.save_handler') [tests/036.phpt]
+ini_set('session.save_path') [tests/036b.phpt]
+memcache->increment()/decrement() with multiple keys [tests/040.phpt]
+memcache->delete() with multiple keys [tests/041.phpt]
+memcache->set() with multiple values [tests/042.phpt]
+ini_set('memcache.redundancy') [tests/043.phpt]
+ini_set('memcache.session_redundancy') [tests/044.phpt]
+ini_set('memcache.session_redundancy') [tests/044b.phpt]
+hash strategies and functions [tests/046.phpt]
+ini_set('session.save_handler') with unix domain socket [tests/053.phpt]
+memcache multi host save path function [tests/bug73539.phpt]
+session_regenerate_id() should not cause fatal error [tests/githubbug13.phpt]
+EOF
+
%build
packagexml2cl package.xml > ChangeLog
phpize
--with-zlib-dir=/usr
%{__make}
+# simple module load test
+%{__php} -n -q \
+ -d extension_dir=modules \
+%if "%php_major_version.%php_minor_version" >= "7.4"
+ -d extension=%{php_extensiondir}/simplexml.so \
+ -d extension=%{php_extensiondir}/session.so \
+%else
+ -d extension=%{php_extensiondir}/pcre.so \
+ -d extension=%{php_extensiondir}/spl.so \
+ -d extension=%{php_extensiondir}/simplexml.so \
+ -d extension=%{php_extensiondir}/session.so \
+%endif
+ -d extension=%{modname}.so \
+ -m > modules.log
+grep %{modname} modules.log
+
+%if %{with tests}
+# Launch the Memcached service and stop it on exit
+%{_sbindir}/memcached -p 11211 -U 11211 -d -P $PWD/memcached.pid
+trap 'kill $(cat memcached.pid)' EXIT INT
+
+./run-tests.sh --show-diff
+%endif
+
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT{%{php_sysconfdir}/conf.d,%{php_extensiondir},%{_examplesdir}/%{name}-%{version}}
install -p modules/%{modname}.so $RPM_BUILD_ROOT%{php_extensiondir}
# we use "session_" prefix in inifile to get loader *after* session extension
-cp -a %{SOURCE1} $RPM_BUILD_ROOT%{php_sysconfdir}/conf.d/session_%{modname}.ini
-cp -a example.php $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
+cp -p %{SOURCE1} $RPM_BUILD_ROOT%{php_sysconfdir}/conf.d/session_%{modname}.ini
+cp -p example.php $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
install -d $RPM_BUILD_ROOT{%{_sysconfdir},%{_appdir}}
-cp -a memcache.php $RPM_BUILD_ROOT%{_appdir}
-cp -a %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/config.php
-cp -a %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/apache.conf
-cp -a $RPM_BUILD_ROOT%{_sysconfdir}/{apache,httpd}.conf
-cp -a %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/lighttpd.conf
+cp -p memcache.php $RPM_BUILD_ROOT%{_appdir}
+cp -p %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/config.php
+cp -p %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/apache.conf
+cp -p $RPM_BUILD_ROOT%{_sysconfdir}/{apache,httpd}.conf
+cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/lighttpd.conf
%clean
rm -rf $RPM_BUILD_ROOT