From dc9150dc727de505e06a2cd5167f1a16c19e6a27 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sat, 16 May 2026 08:35:23 +0200 Subject: new package --- .gitignore | 9 +++ Makefile | 4 ++ PHPINFO | 6 ++ REFLECTION | 62 +++++++++++++++++++++ composer.json | 35 ++++++++++++ php-iliaal-fastjson.spec | 141 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 257 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 PHPINFO create mode 100644 REFLECTION create mode 100644 composer.json create mode 100644 php-iliaal-fastjson.spec 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 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 + diff --git a/PHPINFO b/PHPINFO new file mode 100644 index 0000000..e8bb481 --- /dev/null +++ b/PHPINFO @@ -0,0 +1,6 @@ + +fastjson + +fastjson support => enabled +Version => 0.2.1 +Backend => yyjson 0.12.0 diff --git a/REFLECTION b/REFLECTION new file mode 100644 index 0000000..7946c0f --- /dev/null +++ b/REFLECTION @@ -0,0 +1,62 @@ +Extension [ extension #83 fastjson version 0.2.1 ] { + + - Constants [7] { + Constant [ int FASTJSON_ERROR_NONE ] { 0 } + Constant [ int FASTJSON_ERROR_DEPTH ] { 1 } + Constant [ int FASTJSON_ERROR_SYNTAX ] { 4 } + Constant [ int FASTJSON_ERROR_UTF8 ] { 5 } + Constant [ int FASTJSON_ERROR_RECURSION ] { 6 } + Constant [ int FASTJSON_ERROR_INF_OR_NAN ] { 7 } + Constant [ int FASTJSON_ERROR_UNSUPPORTED_TYPE ] { 8 } + } + + - Functions { + Function [ function fastjson_version ] { + + - Parameters [0] { + } + - Return [ string ] + } + Function [ function fastjson_encode ] { + + - Parameters [3] { + Parameter #0 [ mixed $value ] + Parameter #1 [ int $flags = 0 ] + Parameter #2 [ int $depth = 512 ] + } + - Return [ string|false ] + } + Function [ function fastjson_decode ] { + + - Parameters [4] { + Parameter #0 [ string $json ] + Parameter #1 [ ?bool $associative = null ] + Parameter #2 [ int $depth = 512 ] + Parameter #3 [ int $flags = 0 ] + } + - Return [ mixed ] + } + Function [ function fastjson_validate ] { + + - Parameters [3] { + Parameter #0 [ string $json ] + Parameter #1 [ int $depth = 512 ] + Parameter #2 [ int $flags = 0 ] + } + - Return [ bool ] + } + Function [ function fastjson_last_error ] { + + - Parameters [0] { + } + - Return [ int ] + } + Function [ function fastjson_last_error_msg ] { + + - Parameters [0] { + } + - Return [ string ] + } + } +} + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..a0945fe --- /dev/null +++ b/composer.json @@ -0,0 +1,35 @@ +{ + "name": "iliaal/fastjson", + "type": "php-ext", + "description": "Fast JSON encode/decode/validate for PHP 8.3+, backed by yyjson. Drop-in alternative to ext/json with namespaced fastjson_* functions and json_last_error-compatible error reporting.", + "keywords": ["json", "yyjson", "decode", "encode", "validate", "performance", "php-extension", "pie"], + "license": ["BSD-3-Clause", "MIT"], + "homepage": "https://github.com/iliaal/fastjson", + "authors": [ + { + "name": "Ilia Alshanetsky", + "email": "ilia@ilia.ws" + } + ], + "require": { + "php": ">=8.3" + }, + "php-ext": { + "extension-name": "fastjson", + "configure-options": [ + { + "name": "enable-fastjson", + "description": "Enable fastjson (yyjson-backed JSON) support", + "needs-value": false + }, + { + "name": "enable-fastjson-dev", + "description": "Enable -Werror plus strict checks for wrapper code (development builds)", + "needs-value": false + } + ], + "support-zts": true, + "support-nts": true, + "download-url-method": ["pre-packaged-binary", "composer-default"] + } +} diff --git a/php-iliaal-fastjson.spec b/php-iliaal-fastjson.spec new file mode 100644 index 0000000..c77a0b1 --- /dev/null +++ b/php-iliaal-fastjson.spec @@ -0,0 +1,141 @@ +# remirepo spec file for php-iliaal-fastjson +# +# SPDX-FileCopyrightText: Copyright 2026 Remi Collet +# SPDX-License-Identifier: CECILL-2.1 +# http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +# +# Please, preserve the changelog entries +# +%if 0%{?scl:1} +%scl_package php-iliaal-fastjson +%else +%global pkg_name %{name} +%endif + +%bcond_without tests + +%global gh_owner iliaal +%global gh_project fastjson +%global ext_name fastjson +%global pie_vend %{gh_owner} +%global pie_proj %{gh_project} +%global ini_name 40-%{ext_name}.ini +%global forgeurl https://github.com/%{gh_owner}/%{gh_project} +%global tag %{version} +# for EL-8 to avoid TAG usage +%global archivename %{gh_project}-%{tag} + +%global libyyjsonver 0.12.0 + +Name: %{?scl_prefix}php-%{pie_vend}-%{pie_proj} +Summary: Fast JSON encode/decode/validate for PHP +# Extension is BSD-3-Clause +# Library is MIT +License: BSD-3-Clause AND MIT +Version: 0.2.1 +Release: 1%{?dist} +%forgemeta +URL: %{forgeurl} +Source0: %{forgesource} + + +BuildRequires: make +BuildRequires: %{?dtsprefix}gcc +BuildRequires: %{?scl_prefix}php-devel >= 8.3 + +Requires: %{?scl_prefix}php(zend-abi) = %{php_zend_api} +Requires: %{?scl_prefix}php(api) = %{php_core_api} + +# See vendor/yyjson/PATCHES.md +Provides: bundled(yyjson) = %{libyyjsonver} + +# Extension +Provides: %{?scl_prefix}php-%{ext_name} = %{version} +Provides: %{?scl_prefix}php-%{ext_name}%{?_isa} = %{version} +# PECL +Provides: %{?scl_prefix}php-pecl-%{ext_name} = %{version} +Provides: %{?scl_prefix}php-pecl-%{ext_name}%{?_isa} = %{version} +# PIE +Provides: %{?scl_prefix}php-pie(%{pie_vend}/%{pie_proj}) = %{version} + + +%description +Fast JSON encode, decode, and validate for PHP. + +Drop-in alternative to ext/json with a namespaced fastjson_* API +and json_last_error-compatible error reporting. + +Backed by yyjson %{libyyjsonver}, one of the fastest portable JSON libraries. + +Coexists with ext/json; adoption is opt-in per call site. + + +Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')%{?scl: as Software Collection (%{scl} by %{?scl_vendor}%{!?scl_vendor:rh})}. + + +%prep +%forgesetup + +# Sanity check, really often broken +extver=$(sed -n '/#define PHP_FASTJSON_VERSION/{s/.* "//;s/".*$//;p}' php_fastjson.h) +if test "x${extver}" != "x%{version}"; then + : Error: Upstream extension version is ${extver}, expecting %{version}. + exit 1 +fi + +# Drop in the bit of configuration +cat << 'EOF' | tee %{ini_name} +; Enable '%{summary}' extension module +extension = %{ext_name} +EOF + + +%build +%{?dtsenable} + +%{__phpize} +sed -e 's/INSTALL_ROOT/DESTDIR/' -i build/Makefile.global + +%configure \ + --with-php-config=%{__phpconfig} \ + --with-libdir=%{_lib} \ + --enable-fastjson + +%make_build + + +%install +%{?dtsenable} + +# Install the NTS stuff +%make_install +install -D -m 644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name} + + +%check +: Minimal load test for NTS extension +%{__php} --no-php-ini \ + --define extension=%{buildroot}%{php_extdir}/%{ext_name}.so \ + --modules | grep '^%{ext_name}$' + +%if %{with tests} +: Upstream test suite for NTS extension +TEST_PHP_ARGS="-n -d extension=%{buildroot}%{php_extdir}/%{ext_name}.so" \ +%{__php} -n run-tests.php --show-diff %{?_smp_mflags} +%endif + + +%files +%license LICENSE +%doc composer.json +%doc docs +%doc *.md + +%config(noreplace) %{php_inidir}/%{ini_name} +%{php_extdir}/%{ext_name}.so + + + +%changelog +* Sat May 16 2026 Remi Collet - 0.2.1-1 +- new package -- cgit