diff options
author | Remi Collet <remi@remirepo.net> | 2023-11-23 08:20:16 +0100 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2023-11-23 08:20:16 +0100 |
commit | 51cde96fee9e970d399e91db0c019dc5a66f6317 (patch) | |
tree | da5bced68e546e8cc71a5f5bcf1ddf7985cc56bf |
initial package for version 1.0.0 (PHP 8.4)
-rw-r--r-- | .gitignore | 9 | ||||
-rw-r--r-- | 2.patch | 58 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | PHPINFO | 5 | ||||
-rw-r--r-- | REFLECTION | 210 | ||||
-rw-r--r-- | php-pecl-pspell.spec | 199 |
6 files changed, 485 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..01f0400 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +clog +package-*.xml +*.tgz +*.tar.bz2 +*.tar.gz +*.tar.xz +*.tar.xz.asc +*.src.rpm +*/*rpm @@ -0,0 +1,58 @@ +From f7db92b01bae9fa4dad813c7c7ef62549245549c Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@remirepo.net> +Date: Thu, 23 Nov 2023 07:37:43 +0100 +Subject: [PATCH 1/2] relax test for PHP 8.1 and 8.2 + +--- + tests/003.phpt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/003.phpt b/tests/003.phpt +index 2629a64..fff74b7 100644 +--- a/tests/003.phpt ++++ b/tests/003.phpt +@@ -35,7 +35,7 @@ var_dump(pspell_config_ignore($cfg, PHP_INT_MAX)); + bool(false) + + Warning: pspell_new_config(): PSPELL couldn't open the dictionary. reason: The encoding "b0rked" is not known. This could also mean that the file "%sb0rked.%s" could not be opened for reading or does not exist. in %s003.php on line 9 +-pspell_check(): Argument #1 ($dictionary) must be of type PSpell\Dictionary, false given ++pspell_check(): Argument #1 ($dictionary) must be of type PSpell\Dictionary, %s given + --- + bool(true) + bool(true) + +From c3502eda30a770006ed2a2750f3c3128eb17be73 Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@remirepo.net> +Date: Thu, 23 Nov 2023 07:41:12 +0100 +Subject: [PATCH 2/2] Fix ext version and report it in phpinfo + +--- + php_pspell.h | 2 +- + pspell.c | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/php_pspell.h b/php_pspell.h +index 322569b..bc0b133 100644 +--- a/php_pspell.h ++++ b/php_pspell.h +@@ -21,7 +21,7 @@ extern zend_module_entry pspell_module_entry; + #define pspell_module_ptr &pspell_module_entry + + #include "php_version.h" +-#define PHP_PSPELL_VERSION PHP_VERSION ++#define PHP_PSPELL_VERSION "1.0.0" + + #else + #define pspell_module_ptr NULL +diff --git a/pspell.c b/pspell.c +index 7c15472..7ec2eee 100644 +--- a/pspell.c ++++ b/pspell.c +@@ -780,6 +780,7 @@ static PHP_MINFO_FUNCTION(pspell) + { + php_info_print_table_start(); + php_info_print_table_row(2, "PSpell Support", "enabled"); ++ php_info_print_table_row(2, "PSpell extension version", PHP_PSPELL_VERSION); + php_info_print_table_end(); + } + /* }}} */ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..13af741 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +SRCDIR := $(shell pwd) +NAME := $(shell basename $(SRCDIR)) +include ../../../common/Makefile + @@ -0,0 +1,5 @@ + +pspell + +PSpell Support => enabled +PSpell extension version => 1.0.0 diff --git a/REFLECTION b/REFLECTION new file mode 100644 index 0000000..16876ff --- /dev/null +++ b/REFLECTION @@ -0,0 +1,210 @@ +Extension [ <persistent> extension #58 pspell version 1.0.0 ] { + + - Constants [4] { + Constant [ int PSPELL_FAST ] { 1 } + Constant [ int PSPELL_NORMAL ] { 2 } + Constant [ int PSPELL_BAD_SPELLERS ] { 3 } + Constant [ int PSPELL_RUN_TOGETHER ] { 8 } + } + + - Functions { + Function [ <internal:pspell> function pspell_new ] { + + - Parameters [5] { + Parameter #0 [ <required> string $language ] + Parameter #1 [ <optional> string $spelling = "" ] + Parameter #2 [ <optional> string $jargon = "" ] + Parameter #3 [ <optional> string $encoding = "" ] + Parameter #4 [ <optional> int $mode = 0 ] + } + - Return [ PSpell\Dictionary|false ] + } + Function [ <internal:pspell> function pspell_new_personal ] { + + - Parameters [6] { + Parameter #0 [ <required> string $filename ] + Parameter #1 [ <required> string $language ] + Parameter #2 [ <optional> string $spelling = "" ] + Parameter #3 [ <optional> string $jargon = "" ] + Parameter #4 [ <optional> string $encoding = "" ] + Parameter #5 [ <optional> int $mode = 0 ] + } + - Return [ PSpell\Dictionary|false ] + } + Function [ <internal:pspell> function pspell_new_config ] { + + - Parameters [1] { + Parameter #0 [ <required> PSpell\Config $config ] + } + - Return [ PSpell\Dictionary|false ] + } + Function [ <internal:pspell> function pspell_check ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + Parameter #1 [ <required> string $word ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_suggest ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + Parameter #1 [ <required> string $word ] + } + - Return [ array|false ] + } + Function [ <internal:pspell> function pspell_store_replacement ] { + + - Parameters [3] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + Parameter #1 [ <required> string $misspelled ] + Parameter #2 [ <required> string $correct ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_add_to_personal ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + Parameter #1 [ <required> string $word ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_add_to_session ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + Parameter #1 [ <required> string $word ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_clear_session ] { + + - Parameters [1] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_save_wordlist ] { + + - Parameters [1] { + Parameter #0 [ <required> PSpell\Dictionary $dictionary ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_create ] { + + - Parameters [4] { + Parameter #0 [ <required> string $language ] + Parameter #1 [ <optional> string $spelling = "" ] + Parameter #2 [ <optional> string $jargon = "" ] + Parameter #3 [ <optional> string $encoding = "" ] + } + - Return [ PSpell\Config ] + } + Function [ <internal:pspell> function pspell_config_runtogether ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> bool $allow ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_mode ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> int $mode ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_ignore ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> int $min_length ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_personal ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> string $filename ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_dict_dir ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> string $directory ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_data_dir ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> string $directory ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_repl ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> string $filename ] + } + - Return [ bool ] + } + Function [ <internal:pspell> function pspell_config_save_repl ] { + + - Parameters [2] { + Parameter #0 [ <required> PSpell\Config $config ] + Parameter #1 [ <required> bool $save ] + } + - Return [ bool ] + } + } + + - Classes [2] { + Class [ <internal:pspell> final class PSpell\Dictionary ] { + + - Constants [0] { + } + + - Static properties [0] { + } + + - Static methods [0] { + } + + - Properties [0] { + } + + - Methods [0] { + } + } + + Class [ <internal:pspell> final class PSpell\Config ] { + + - Constants [0] { + } + + - Static properties [0] { + } + + - Static methods [0] { + } + + - Properties [0] { + } + + - Methods [0] { + } + } + } +} + diff --git a/php-pecl-pspell.spec b/php-pecl-pspell.spec new file mode 100644 index 0000000..dca618a --- /dev/null +++ b/php-pecl-pspell.spec @@ -0,0 +1,199 @@ +# remirepo spec file for php-pecl-pspell +# +# Copyright (c) 2023 Remi Collet +# License: CC-BY-SA-4.0 +# http://creativecommons.org/licenses/by-sa/4.0/ +# +# Please, preserve the changelog entries +# + +%{?scl:%scl_package php-pecl-pspell} + +%bcond_without tests + +%global with_zts 0%{!?_without_zts:%{?__ztsphp:1}} +%global pecl_name pspell +%global ini_name 30-%{pecl_name}.ini +%global sources %{pecl_name}-%{version} +%global _configure ../%{sources}/configure + +Summary: Spell checker extension +Name: %{?scl_prefix}php-pecl-pspell +Version: 1.0.0 +Release: 1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +License: PHP-3.01 +URL: https://pecl.php.net/package/pspell + +Source0: https://pecl.php.net/get/%{sources}.tgz + +# Fix tests and version +Patch0: https://patch-diff.githubusercontent.com/raw/php/pecl-text-pspell/pull/2.patch + +BuildRequires: make +BuildRequires: %{?dtsprefix}gcc +# 8.1+ is supported by upstream but part of php-src until 8.4 +BuildRequires: %{?scl_prefix}php-devel >= 8.4 +BuildRequires: aspell-devel >= 0.50.0 +BuildRequires: %{?scl_prefix}php-pear + +Requires: %{?scl_prefix}php(zend-abi) = %{php_zend_api} +Requires: %{?scl_prefix}php(api) = %{php_core_api} + +Provides: %{?scl_prefix}php-pecl(%{pecl_name}) = %{version} +Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version} +# Set epoch so provides is > 0:8.4 +Obsoletes: %{?scl_prefix}php-%{pecl_name} < 8.4 +Provides: %{?scl_prefix}php-%{pecl_name} = 1:%{version}-%{release} +Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = 1:%{version}-%{release} + + +%description +This extension allows you to check the spelling of a word and offer suggestions, +using GNU Aspell library and dictionaries. + +Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')%{?scl: as Software Collection (%{scl} by %{scl_vendor})}. + + +%prep +%setup -c -q + +# Don't install/register tests +sed -e 's/role="test"/role="src"/' \ + %{?_licensedir:-e '/LICENSE/s/role="doc"/role="src"/' } \ + -i package.xml + +cd %{sources} +%patch -P0 -p1 + +# Sanity check, really often broken +extver=$(sed -n '/#define PHP_PSPELL_VERSION/{s/.* "//;s/".*$//;p}' php_pspell.h) +if test "x${extver}" != "x%{version}%{?prever}"; then + : Error: Upstream extension version is ${extver}, expecting %{version}%{?prever}. + exit 1 +fi +cd .. + +: Create the configuration file +cat >%{ini_name} << 'EOF' +; Enable %{pecl_name} extension module +extension=%{pecl_name} +EOF + +mkdir NTS +%if %{with_zts} +mkdir ZTS +%endif + + +%build +%{?dtsenable} + +cd %{sources} +%{__phpize} + +cd ../NTS +%configure \ + --with-pspell \ + --with-php-config=%{__phpconfig} + +make %{?_smp_mflags} + +%if %{with_zts} +cd ../ZTS +%configure \ + --with-pspell \ + --with-php-config=%{__ztsphpconfig} + +make %{?_smp_mflags} +%endif + + +%install +%{?dtsenable} + +make -C NTS install INSTALL_ROOT=%{buildroot} +install -D -m 644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name} + +# Install XML package description +install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml + +%if %{with_zts} +make -C ZTS install INSTALL_ROOT=%{buildroot} +install -D -m 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name} +%endif + +# 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 +cd %{sources} +: minimal load test of NTS extension +%{__php} --no-php-ini \ + --define extension=%{buildroot}%{php_extdir}/%{pecl_name}.so \ + --modules | grep '^%{pecl_name}$' + +OPT="%{?_smp_mflags} -q --show-diff" + +%if %{with tests} +: upstream test suite for NTS extension +TEST_PHP_EXECUTABLE=%{__php} \ +TEST_PHP_ARGS="-n -d extension=%{buildroot}%{php_extdir}/%{pecl_name}.so" \ +%{__php} -n run-tests.php $OPT +%endif + +%if %{with_zts} +: minimal load test of ZTS extension +%{__ztsphp} --no-php-ini \ + --define extension=%{buildroot}%{php_ztsextdir}/%{pecl_name}.so \ + --modules | grep '^%{pecl_name}$' + +%if %{with tests} +: upstream test suite for ZTS extension +TEST_PHP_EXECUTABLE=%{__ztsphp} \ +TEST_PHP_ARGS="-n -d extension=%{buildroot}%{php_ztsextdir}/%{pecl_name}.so" \ +%{__ztsphp} -n run-tests.php $OPT +%endif +%endif + + +%if 0%{?fedora} < 24 && 0%{?rhel} < 8 +# when pear installed alone, after us +%triggerin -- %{?scl_prefix}php-pear +if [ -x %{__pecl} ] ; then + %{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || : +fi + +# posttrans as pear can be installed after us +%posttrans +if [ -x %{__pecl} ] ; then + %{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || : +fi + +%postun +if [ $1 -eq 0 -a -x %{__pecl} ] ; then + %{pecl_uninstall} %{pecl_name} >/dev/null || : +fi +%endif + + +%files +%{?_licensedir:%license %{sources}/LICENSE} +%doc %{pecl_docdir}/%{pecl_name} +%{pecl_xmldir}/%{name}.xml + +%config(noreplace) %{php_inidir}/%{ini_name} +%{php_extdir}/%{pecl_name}.so + +%if %{with_zts} +%config(noreplace) %{php_ztsinidir}/%{ini_name} +%{php_ztsextdir}/%{pecl_name}.so +%endif + + +%changelog +* Thu Nov 23 2023 Remi Collet <remi@remirepo.net> - 1.0.0-1 +- initial package for version 1.0.0 (PHP 8.4) |