From 740a14090dec83951484a2705d7ffc7555ebb768 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Mon, 23 Sep 2024 15:31:00 +0200 Subject: update to 8.4.0beta5 drop oci8, pdo_oci8, pspell and imap extensions disable ZTS build --- 20-oci8.ini | 60 ---- failed.txt | 2 +- macros.php | 2 + nginx-fpm.conf | 2 +- php-7.2.0-includedir.patch | 11 - php-7.2.0-oci8conf.patch | 13 - php-7.4.0-httpd.patch | 27 -- php-7.4.0-ldap_r.patch | 19 -- php-7.4.0-phpize.patch | 65 ---- php-8.0.0-embed.patch | 25 -- php-8.1.0-libdb.patch | 92 ----- php-8.1.0-phpinfo.patch | 44 --- php-8.2.0-curl.patch | 23 -- php-8.2.0-iodbc.patch | 41 --- php-8.3.11-systzdata-v24.patch | 746 ----------------------------------------- php-8.4.0-embed.patch | 25 ++ php-8.4.0-httpd.patch | 21 ++ php-8.4.0-includedir.patch | 11 + php-8.4.0-ldap_r.patch | 19 ++ php-8.4.0-libdb.patch | 106 ++++++ php-8.4.0-phpinfo.patch | 44 +++ php-8.4.0-phpize.patch | 35 ++ php-8.4.0-systzdata-v24.patch | 742 ++++++++++++++++++++++++++++++++++++++++ php-fpm-www.conf | 4 +- php-fpm.service | 1 - php-fpm.sysconfig | 19 -- php.conf | 14 + php.conf2 | 14 - php.ini | 34 -- php84.spec | 601 ++------------------------------- 30 files changed, 1057 insertions(+), 1805 deletions(-) delete mode 100644 20-oci8.ini delete mode 100644 php-7.2.0-includedir.patch delete mode 100644 php-7.2.0-oci8conf.patch delete mode 100644 php-7.4.0-httpd.patch delete mode 100644 php-7.4.0-ldap_r.patch delete mode 100644 php-7.4.0-phpize.patch delete mode 100644 php-8.0.0-embed.patch delete mode 100644 php-8.1.0-libdb.patch delete mode 100644 php-8.1.0-phpinfo.patch delete mode 100644 php-8.2.0-curl.patch delete mode 100644 php-8.2.0-iodbc.patch delete mode 100644 php-8.3.11-systzdata-v24.patch create mode 100644 php-8.4.0-embed.patch create mode 100644 php-8.4.0-httpd.patch create mode 100644 php-8.4.0-includedir.patch create mode 100644 php-8.4.0-ldap_r.patch create mode 100644 php-8.4.0-libdb.patch create mode 100644 php-8.4.0-phpinfo.patch create mode 100644 php-8.4.0-phpize.patch create mode 100644 php-8.4.0-systzdata-v24.patch delete mode 100644 php-fpm.sysconfig delete mode 100644 php.conf2 diff --git a/20-oci8.ini b/20-oci8.ini deleted file mode 100644 index 3777858..0000000 --- a/20-oci8.ini +++ /dev/null @@ -1,60 +0,0 @@ -; Enable oci8 extension module -extension=oci8 - -; Connection: Enables privileged connections using external -; credentials (OCI_SYSOPER, OCI_SYSDBA) -; https://php.net/oci8.privileged-connect -;oci8.privileged_connect = Off - -; Connection: The maximum number of persistent OCI8 connections per -; process. Using -1 means no limit. -; https://php.net/oci8.max-persistent -;oci8.max_persistent = -1 - -; Connection: The maximum number of seconds a process is allowed to -; maintain an idle persistent connection. Using -1 means idle -; persistent connections will be maintained forever. -; https://php.net/oci8.persistent-timeout -;oci8.persistent_timeout = -1 - -; Connection: The number of seconds that must pass before issuing a -; ping during oci_pconnect() to check the connection validity. When -; set to 0, each oci_pconnect() will cause a ping. Using -1 disables -; pings completely. -; https://php.net/oci8.ping-interval -;oci8.ping_interval = 60 - -; Connection: Set this to a user chosen connection class to be used -; for all pooled server requests with Oracle Database Resident -; Connection Pooling (DRCP). To use DRCP, this value should be set to -; the same string for all web servers running the same application, -; the database pool must be configured, and the connection string must -; specify to use a pooled server. -;oci8.connection_class = - -; High Availability: Using On lets PHP receive Fast Application -; Notification (FAN) events generated when a database node fails. The -; database must also be configured to post FAN events. -;oci8.events = Off - -; Tuning: This option enables statement caching, and specifies how -; many statements to cache. Using 0 disables statement caching. -; https://php.net/oci8.statement-cache-size -;oci8.statement_cache_size = 20 - -; Tuning: Enables row prefetching and sets the default number of -; rows that will be fetched automatically after statement execution. -; https://php.net/oci8.default-prefetch -;oci8.default_prefetch = 100 - -; Tuning: Sets the amount of LOB data that is internally returned from -; Oracle Database when an Oracle LOB locator is initially retrieved as -; part of a query. Setting this can improve performance by reducing -; round-trips. -; https://php.net/oci8.prefetch-lob-size -; oci8.prefetch_lob_size = 0 - -; Compatibility. Using On means oci_close() will not close -; oci_connect() and oci_new_connect() connections. -; https://php.net/oci8.old-oci-close-semantics -;oci8.old_oci_close_semantics = Off diff --git a/failed.txt b/failed.txt index 39456d4..ca01423 100644 --- a/failed.txt +++ b/failed.txt @@ -1,4 +1,4 @@ -===== 8.3.12RC1 (2024-09-12) +===== 8.4.0beta5 (2024-09-12) $ grep -ar 'Tests failed' /var/lib/mock/*/build.log diff --git a/macros.php b/macros.php index 989e8b3..d02c048 100644 --- a/macros.php +++ b/macros.php @@ -24,3 +24,5 @@ %__phpconfig %{_bindir}/php-config %__ztsphpconfig %{_bindir}/zts-php-config +%pecl_xmldir %{_localstatedir}/lib/php/peclxml + diff --git a/nginx-fpm.conf b/nginx-fpm.conf index 5b5f9be..a69df39 100644 --- a/nginx-fpm.conf +++ b/nginx-fpm.conf @@ -2,5 +2,5 @@ # network or unix domain socket configuration upstream php-fpm { - server 127.0.0.1:9000; + server unix:/run/php-fpm/www.sock; } diff --git a/php-7.2.0-includedir.patch b/php-7.2.0-includedir.patch deleted file mode 100644 index 6d9a871..0000000 --- a/php-7.2.0-includedir.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- php-7.2.0/configure.ac.includedir -+++ php-7.2.0/configure.ac -@@ -1230,7 +1230,7 @@ - EXPANDED_DATADIR=$datadir - EXPANDED_PHP_CONFIG_FILE_PATH=`eval echo "$PHP_CONFIG_FILE_PATH"` - EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=`eval echo "$PHP_CONFIG_FILE_SCAN_DIR"` --INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR -+INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR:${EXPANDED_DATADIR}/php - - exec_prefix=$old_exec_prefix - libdir=$old_libdir diff --git a/php-7.2.0-oci8conf.patch b/php-7.2.0-oci8conf.patch deleted file mode 100644 index d026575..0000000 --- a/php-7.2.0-oci8conf.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -up ./ext/ldap/php_ldap.h.remi-oci8 ./ext/ldap/php_ldap.h ---- ./ext/ldap/php_ldap.h.remi-oci8 2017-06-20 15:45:35.000000000 +0200 -+++ ./ext/ldap/php_ldap.h 2017-06-20 16:55:01.640203868 +0200 -@@ -27,7 +27,7 @@ - #include - #endif - --#include -+#include "/usr/include/ldap.h" - - extern zend_module_entry ldap_module_entry; - #define ldap_module_ptr &ldap_module_entry - diff --git a/php-7.4.0-httpd.patch b/php-7.4.0-httpd.patch deleted file mode 100644 index 34f7c8a..0000000 --- a/php-7.4.0-httpd.patch +++ /dev/null @@ -1,27 +0,0 @@ -Disable MPM detection - -mod_php is build twice -- as NTS without option -- as ZTS using --enable-maintainer-zts - -diff --git a/sapi/apache2handler/config.m4 b/sapi/apache2handler/config.m4 ---- a/sapi/apache2handler/config.m4 -+++ b/sapi/apache2handler/config.m4 -@@ -105,17 +105,6 @@ if test "$PHP_APXS2" != "no"; then - ;; - esac - -- if test "$APACHE_VERSION" -lt 2004001; then -- APXS_MPM=`$APXS -q MPM_NAME` -- if test "$APXS_MPM" != "prefork" && test "$APXS_MPM" != "peruser" && test "$APXS_MPM" != "itk"; then -- PHP_BUILD_THREAD_SAFE -- fi -- else -- APACHE_THREADED_MPM=`$APXS_HTTPD -V 2>/dev/null | grep 'threaded:.*yes'` -- if test -n "$APACHE_THREADED_MPM"; then -- PHP_BUILD_THREAD_SAFE -- fi -- fi - AC_MSG_RESULT(yes) - PHP_SUBST(APXS) - else diff --git a/php-7.4.0-ldap_r.patch b/php-7.4.0-ldap_r.patch deleted file mode 100644 index 13566b4..0000000 --- a/php-7.4.0-ldap_r.patch +++ /dev/null @@ -1,19 +0,0 @@ - -Use -lldap_r by default. - -diff -up php-7.4.0RC2/ext/ldap/config.m4.ldap_r php-7.4.0RC2/ext/ldap/config.m4 ---- php-7.4.0RC2/ext/ldap/config.m4.ldap_r 2019-09-17 10:21:24.769200812 +0200 -+++ php-7.4.0RC2/ext/ldap/config.m4 2019-09-17 10:21:30.658181771 +0200 -@@ -68,7 +68,11 @@ if test "$PHP_LDAP" != "no"; then - dnl -pc removal is a hack for clang - MACHINE_INCLUDES=$($CC -dumpmachine | $SED 's/-pc//') - -- if test -f $LDAP_LIBDIR/liblber.a || test -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.a || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.$SHLIB_SUFFIX_NAME; then -+ if test -f $LDAP_LIBDIR/libldap_r.$SHLIB_SUFFIX_NAME; then -+ PHP_ADD_LIBRARY_WITH_PATH(lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD) -+ PHP_ADD_LIBRARY_WITH_PATH(ldap_r, $LDAP_LIBDIR, LDAP_SHARED_LIBADD) -+ -+ elif test -f $LDAP_LIBDIR/liblber.a || test -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.a || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.$SHLIB_SUFFIX_NAME; then - PHP_ADD_LIBRARY_WITH_PATH(lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD) - PHP_ADD_LIBRARY_WITH_PATH(ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD) - diff --git a/php-7.4.0-phpize.patch b/php-7.4.0-phpize.patch deleted file mode 100644 index 46aff56..0000000 --- a/php-7.4.0-phpize.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff -up ./scripts/phpize.in.headers ./scripts/phpize.in ---- ./scripts/phpize.in.headers 2019-07-23 10:05:11.000000000 +0200 -+++ ./scripts/phpize.in 2019-07-23 10:18:13.648098089 +0200 -@@ -166,6 +166,15 @@ phpize_autotools() - $PHP_AUTOHEADER || exit 1 - } - -+phpize_check_headers() -+{ -+ if test ! -f $includedir/main/php.h; then -+ echo "Can't find PHP headers in $includedir" -+ echo "The php-devel package is required for use of this command." -+ exit 1 -+ fi -+} -+ - # Main script - - case "$1" in -@@ -184,12 +193,15 @@ case "$1" in - - # Version - --version|-v) -+ phpize_check_headers - phpize_print_api_numbers - exit 0 - ;; - - # Default - *) -+ phpize_check_headers -+ - phpize_check_configm4 0 - - phpize_check_build_files -From c454f120857df6f771c5475bf1fcc99e683b87dc Mon Sep 17 00:00:00 2001 -From: Remi Collet -Date: Thu, 7 Sep 2023 09:56:51 +0200 -Subject: [PATCH] also display PHP version in phpize - ---- - scripts/phpize.in | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/scripts/phpize.in b/scripts/phpize.in -index 7d9c1df14c8e..81605e06a590 100644 ---- a/scripts/phpize.in -+++ b/scripts/phpize.in -@@ -59,6 +59,8 @@ phpize_check_configm4() - phpize_get_api_numbers() - { - # extracting API NOs: -+ PHP_MINOR_VERSION=`grep '#define PHP_MINOR_VERSION' $includedir/main/php_version.h|$SED 's/#define PHP_MINOR_VERSION //'` -+ PHP_MAJOR_VERSION=`grep '#define PHP_MAJOR_VERSION' $includedir/main/php_version.h|$SED 's/#define PHP_MAJOR_VERSION//'` - PHP_API_VERSION=`grep '#define PHP_API_VERSION' $includedir/main/php.h|$SED 's/#define PHP_API_VERSION//'` - ZEND_MODULE_API_NO=`grep '#define ZEND_MODULE_API_NO' $includedir/Zend/zend_modules.h|$SED 's/#define ZEND_MODULE_API_NO//'` - ZEND_EXTENSION_API_NO=`grep '#define ZEND_EXTENSION_API_NO' $includedir/Zend/zend_extensions.h|$SED 's/#define ZEND_EXTENSION_API_NO//'` -@@ -68,6 +70,7 @@ phpize_print_api_numbers() - { - phpize_get_api_numbers - echo "Configuring for:" -+ echo "PHP Version: ${PHP_MAJOR_VERSION}.${PHP_MINOR_VERSION}" - echo "PHP Api Version: "$PHP_API_VERSION - echo "Zend Module Api No: "$ZEND_MODULE_API_NO - echo "Zend Extension Api No: "$ZEND_EXTENSION_API_NO diff --git a/php-8.0.0-embed.patch b/php-8.0.0-embed.patch deleted file mode 100644 index 27533ea..0000000 --- a/php-8.0.0-embed.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -up ./sapi/embed/config.m4.embed ./sapi/embed/config.m4 ---- ./sapi/embed/config.m4.embed 2020-07-07 13:51:05.879764972 +0200 -+++ ./sapi/embed/config.m4 2020-07-07 13:52:50.128412148 +0200 -@@ -12,7 +12,8 @@ if test "$PHP_EMBED" != "no"; then - yes|shared) - LIBPHP_CFLAGS="-shared" - PHP_EMBED_TYPE=shared -- INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(prefix)/lib; \$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)\$(prefix)/lib" -+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -release \$(PHP_MAJOR_VERSION).\$(PHP_MINOR_VERSION)" -+ INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(libdir); \$(LIBTOOL) --mode=install \$(INSTALL) -m 0755 \$(OVERALL_TARGET) \$(INSTALL_ROOT)\$(libdir)" - ;; - static) - LIBPHP_CFLAGS="-static" -diff -up ./scripts/php-config.in.embed ./scripts/php-config.in ---- ./scripts/php-config.in.embed 2020-07-07 12:54:42.000000000 +0200 -+++ ./scripts/php-config.in 2020-07-07 13:51:05.880764968 +0200 -@@ -18,7 +18,7 @@ exe_extension="@EXEEXT@" - php_cli_binary=NONE - php_cgi_binary=NONE - configure_options="@CONFIGURE_OPTIONS@" --php_sapis="@PHP_INSTALLED_SAPIS@" -+php_sapis="apache2handler litespeed fpm phpdbg @PHP_INSTALLED_SAPIS@" - ini_dir="@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@" - ini_path="@EXPANDED_PHP_CONFIG_FILE_PATH@" - diff --git a/php-8.1.0-libdb.patch b/php-8.1.0-libdb.patch deleted file mode 100644 index 7a2a097..0000000 --- a/php-8.1.0-libdb.patch +++ /dev/null @@ -1,92 +0,0 @@ -diff -up ./ext/dba/config.m4.libdb ./ext/dba/config.m4 ---- ./ext/dba/config.m4.libdb 2020-04-09 14:06:11.000000000 +0200 -+++ ./ext/dba/config.m4 2020-04-09 14:35:08.208605065 +0200 -@@ -375,61 +375,13 @@ if test "$PHP_DB4" != "no"; then - dbdp4="/usr/local/BerkeleyDB.4." - dbdp5="/usr/local/BerkeleyDB.5." - for i in $PHP_DB4 ${dbdp5}1 ${dbdp5}0 ${dbdp4}8 ${dbdp4}7 ${dbdp4}6 ${dbdp4}5 ${dbdp4}4 ${dbdp4}3 ${dbdp4}2 ${dbdp4}1 ${dbdp}0 /usr/local /usr; do -- if test -f "$i/db5/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/db5/db.h -- break -- elif test -f "$i/db4/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/db4/db.h -- break -- elif test -f "$i/include/db5.3/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db5.3/db.h -- break -- elif test -f "$i/include/db5.1/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db5.1/db.h -- break -- elif test -f "$i/include/db5.0/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db5.0/db.h -- break -- elif test -f "$i/include/db4.8/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.8/db.h -- break -- elif test -f "$i/include/db4.7/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.7/db.h -- break -- elif test -f "$i/include/db4.6/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.6/db.h -- break -- elif test -f "$i/include/db4.5/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.5/db.h -- break -- elif test -f "$i/include/db4/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4/db.h -- break -- elif test -f "$i/include/db/db4.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db/db4.h -- break -- elif test -f "$i/include/db4.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.h -- break -- elif test -f "$i/include/db.h"; then -+ if test -f "$i/include/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db.h - break - fi - done -- PHP_DBA_DB_CHECK(4, db-5.3 db-5.1 db-5.0 db-4.8 db-4.7 db-4.6 db-4.5 db-4.4 db-4.3 db-4.2 db-4.1 db-4.0 db-4 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) -+ PHP_DBA_DB_CHECK(4, db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) - fi - PHP_DBA_STD_RESULT(db4,Berkeley DB4) - -diff -up ./ext/dba/dba.c.libdb ./ext/dba/dba.c ---- ./ext/dba/dba.c.libdb 2020-04-09 14:06:11.000000000 +0200 -+++ ./ext/dba/dba.c 2020-04-09 14:36:30.593275190 +0200 -@@ -50,6 +50,10 @@ - #include "php_lmdb.h" - #include "dba_arginfo.h" - -+#ifdef DB4_INCLUDE_FILE -+#include DB4_INCLUDE_FILE -+#endif -+ - PHP_MINIT_FUNCTION(dba); - PHP_MSHUTDOWN_FUNCTION(dba); - PHP_MINFO_FUNCTION(dba); -@@ -452,6 +456,10 @@ PHP_MINFO_FUNCTION(dba) - - php_info_print_table_start(); - php_info_print_table_row(2, "DBA support", "enabled"); -+#ifdef DB_VERSION_STRING -+ php_info_print_table_row(2, "libdb header version", DB_VERSION_STRING); -+ php_info_print_table_row(2, "libdb library version", db_version(NULL, NULL, NULL)); -+#endif - if (handlers.s) { - smart_str_0(&handlers); - php_info_print_table_row(2, "Supported handlers", ZSTR_VAL(handlers.s)); diff --git a/php-8.1.0-phpinfo.patch b/php-8.1.0-phpinfo.patch deleted file mode 100644 index d19b2f4..0000000 --- a/php-8.1.0-phpinfo.patch +++ /dev/null @@ -1,44 +0,0 @@ - -Drop "Configure Command" from phpinfo as it doesn't -provide any useful information. -The available extensions are not related to this command. - -Replace full GCC name by gcc in php -v output - - -diff -up ./ext/standard/info.c.phpinfo ./ext/standard/info.c ---- ./ext/standard/info.c.phpinfo 2020-07-21 10:49:31.000000000 +0200 -+++ ./ext/standard/info.c 2020-07-21 11:41:56.295633523 +0200 -@@ -805,9 +805,6 @@ PHPAPI ZEND_COLD void php_print_info(int - #ifdef PHP_BUILD_ARCH - php_info_print_table_row(2, "Architecture", PHP_BUILD_ARCH); - #endif --#ifdef CONFIGURE_COMMAND -- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND ); --#endif - - if (sapi_module.pretty_name) { - php_info_print_table_row(2, "Server API", sapi_module.pretty_name ); -diff -up ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo ./ext/standard/tests/general_functions/phpinfo.phpt ---- ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo 2020-07-21 10:49:31.000000000 +0200 -+++ ./ext/standard/tests/general_functions/phpinfo.phpt 2020-07-21 11:41:56.296633522 +0200 -@@ -17,7 +17,6 @@ PHP Version => %s - - System => %s - Build Date => %s%a --Configure Command => %s - Server API => Command Line Interface - Virtual Directory Support => %s - Configuration File (php.ini) Path => %s -diff -up ./sapi/cli/php_cli.c.phpinfo ./sapi/cli/php_cli.c ---- ./sapi/cli/php_cli.c.phpinfo 2020-07-21 11:43:38.812475300 +0200 -+++ ./sapi/cli/php_cli.c 2020-07-21 11:43:45.783464540 +0200 -@@ -645,7 +645,7 @@ static int do_cli(int argc, char **argv) - "NTS" - #endif - #ifdef PHP_BUILD_COMPILER -- " " PHP_BUILD_COMPILER -+ " gcc" - #endif - #ifdef PHP_BUILD_ARCH - " " PHP_BUILD_ARCH diff --git a/php-8.2.0-curl.patch b/php-8.2.0-curl.patch deleted file mode 100644 index e581310..0000000 --- a/php-8.2.0-curl.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -up ./ext/curl/curl_arginfo.h.bck ./ext/curl/curl_arginfo.h ---- ./ext/curl/curl_arginfo.h.bck 2022-09-01 09:46:21.410502957 +0200 -+++ ./ext/curl/curl_arginfo.h 2022-09-01 09:47:16.020506046 +0200 -@@ -723,13 +723,16 @@ static void register_curl_symbols(int mo - #if LIBCURL_VERSION_NUM >= 0x072200 /* Available since 7.34.0 */ - REGISTER_LONG_CONSTANT("CURLOPT_LOGIN_OPTIONS", CURLOPT_LOGIN_OPTIONS, CONST_PERSISTENT); - #endif --#if LIBCURL_VERSION_NUM >= 0x072200 /* Available since 7.34.0 */ -+/* Available since 7.19.0 (in upstream curl 7.34) -+ backported in RHEL-7 curl-7.29.0-16.el7 rhbz#1012136 -+ backported in RHEL-6 curl-7.19.7-43.el6 rhbz#1036789 */ -+#if LIBCURL_VERSION_NUM >= 0x071300 /* Available since 7.34.0 */ - REGISTER_LONG_CONSTANT("CURL_SSLVERSION_TLSv1_0", CURL_SSLVERSION_TLSv1_0, CONST_PERSISTENT); - #endif --#if LIBCURL_VERSION_NUM >= 0x072200 /* Available since 7.34.0 */ -+#if LIBCURL_VERSION_NUM >= 0x071300 /* Available since 7.34.0 */ - REGISTER_LONG_CONSTANT("CURL_SSLVERSION_TLSv1_1", CURL_SSLVERSION_TLSv1_1, CONST_PERSISTENT); - #endif --#if LIBCURL_VERSION_NUM >= 0x072200 /* Available since 7.34.0 */ -+#if LIBCURL_VERSION_NUM >= 0x071300 /* Available since 7.34.0 */ - REGISTER_LONG_CONSTANT("CURL_SSLVERSION_TLSv1_2", CURL_SSLVERSION_TLSv1_2, CONST_PERSISTENT); - #endif - #if LIBCURL_VERSION_NUM >= 0x072400 /* Available since 7.36.0 */ diff --git a/php-8.2.0-iodbc.patch b/php-8.2.0-iodbc.patch deleted file mode 100644 index ba480aa..0000000 --- a/php-8.2.0-iodbc.patch +++ /dev/null @@ -1,41 +0,0 @@ -From fbdf54c9efefaaa78277bbd951532cd9b6f0a16e Mon Sep 17 00:00:00 2001 -From: Remi Collet -Date: Wed, 14 Aug 2024 14:32:47 +0200 -Subject: [PATCH] fix libodbc detection for headers in sub directory - ---- - ext/pdo_odbc/config.m4 | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/ext/pdo_odbc/config.m4 b/ext/pdo_odbc/config.m4 -index 72b604199bf72..b4478254ee0cb 100644 ---- a/ext/pdo_odbc/config.m4 -+++ b/ext/pdo_odbc/config.m4 -@@ -40,6 +40,7 @@ if test "$PHP_PDO_ODBC" != "no"; then - pdo_odbc_dir= - fi - -+ dnl TODO use PKG_CHECK_MODULES when possible - case $pdo_odbc_flavour in - ibm-db2) - pdo_odbc_def_libdir=/home/db2inst1/sqllib/lib -@@ -51,6 +52,7 @@ if test "$PHP_PDO_ODBC" != "no"; then - pdo_odbc_def_libdir=/usr/local/$PHP_LIBDIR - pdo_odbc_def_incdir=/usr/local/include - pdo_odbc_def_lib=iodbc -+ pdo_odbc_subdir=libiodbc - ;; - - unixODBC|unixodbc) -@@ -85,6 +87,11 @@ if test "$PHP_PDO_ODBC" != "no"; then - PDO_ODBC_LIBDIR="$pdo_odbc_def_libdir" - fi - -+ dnl handle installation in /usr/include/libiodbc -+ if test -n "$pdo_odbc_subdir" -a -d $PDO_ODBC_INCDIR/$pdo_odbc_subdir ; then -+ PDO_ODBC_INCDIR=$PDO_ODBC_INCDIR/$pdo_odbc_subdir -+ fi -+ - AC_MSG_RESULT([$pdo_odbc_flavour - libs $PDO_ODBC_LIBDIR, - headers $PDO_ODBC_INCDIR]) diff --git a/php-8.3.11-systzdata-v24.patch b/php-8.3.11-systzdata-v24.patch deleted file mode 100644 index 90bdc78..0000000 --- a/php-8.3.11-systzdata-v24.patch +++ /dev/null @@ -1,746 +0,0 @@ -# License: MIT -# http://opensource.org/licenses/MIT - -Add support for use of the system timezone database, rather -than embedding a copy. Discussed upstream but was not desired. - -History: -f24: add internal UTC if tzdata is missing -r23: fix possible buffer overflow -r22: retrieve tzdata version from /usr/share/zoneinfo/tzdata.zi -r21: adapt for timelib 2021.03 (in 8.1.0) -r20: adapt for timelib 2020.03 (in 8.0.10RC1) -r19: adapt for timelib 2020.02 (in 8.0.0beta2) -r18: adapt for autotool change in 7.3.3RC1 -r17: adapt for timelib 2018.01 (in 7.3.2RC1) -r16: adapt for timelib 2017.06 (in 7.2.3RC1) -r15: adapt for timelib 2017.05beta7 (in 7.2.0RC1) -r14: improve check for valid tz file -r13: adapt for upstream changes to use PHP allocator -r12: adapt for upstream changes for new zic -r11: use canonical names to avoid more case sensitivity issues - round lat/long from zone.tab towards zero per builtin db -r10: make timezone case insensitive -r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold) -r8: fix compile error without --with-system-tzdata configured -r7: improve check for valid timezone id to exclude directories -r6: fix fd leak in r5, fix country code/BC flag use in - timezone_identifiers_list() using system db, - fix use of PECL timezonedb to override system db, -r5: reverts addition of "System/Localtime" fake tzname. - updated for 5.3.0, parses zone.tab to pick up mapping between - timezone name, country code and long/lat coords -r4: added "System/Localtime" tzname which uses /etc/localtime -r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert) -r2: add filesystem trawl to set up name alias index -r1: initial revision - - -diff --git a/ext/date/config0.m4 b/ext/date/config0.m4 -index 6b803bf33e..53c3cdb3f4 100644 ---- a/ext/date/config0.m4 -+++ b/ext/date/config0.m4 -@@ -4,6 +4,19 @@ - dnl Check for strtoll, atoll - AC_CHECK_FUNCS(strtoll atoll) - -+PHP_ARG_WITH(system-tzdata, for use of system timezone data, -+[ --with-system-tzdata[=DIR] to specify use of system timezone data], -+no, no) -+ -+if test "$PHP_SYSTEM_TZDATA" != "no"; then -+ AC_DEFINE(HAVE_SYSTEM_TZDATA, 1, [Define if system timezone data is used]) -+ -+ if test "$PHP_SYSTEM_TZDATA" != "yes"; then -+ AC_DEFINE_UNQUOTED(HAVE_SYSTEM_TZDATA_PREFIX, "$PHP_SYSTEM_TZDATA", -+ [Define for location of system timezone data]) -+ fi -+fi -+ - AX_CHECK_COMPILE_FLAG([-Wno-implicit-fallthrough], - [PHP_DATE_CFLAGS="$PHP_DATE_CFLAGS -Wno-implicit-fallthrough"],, - [-Werror]) -diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c -index c7f93580d7..ec196a98b6 100644 ---- a/ext/date/lib/parse_tz.c -+++ b/ext/date/lib/parse_tz.c -@@ -26,9 +26,33 @@ - #include "timelib.h" - #include "timelib_private.h" - -+#ifdef HAVE_SYSTEM_TZDATA -+#include -+#include -+#include -+#include -+#include -+ -+#include "php_scandir.h" -+ -+static const unsigned char internal_utc[] = { -+ 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x0a, 0x55, 0x54, 0x43, -+ 0x30, 0x0a -+}; -+ -+#else - #define TIMELIB_SUPPORTS_V2DATA - #define TIMELIB_SUPPORT_SLIM_FILE - #include "timezonedb.h" -+#endif -+ -+#include - - #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) - # if defined(__LITTLE_ENDIAN__) -@@ -95,6 +119,11 @@ static int read_php_preamble(const unsigned char **tzf, timelib_tzinfo *tz) - { - uint32_t version; - -+ if (memcmp(*tzf, "TZif", 4) == 0) { -+ *tzf += 20; -+ return 0; -+ } -+ - /* read ID */ - version = (*tzf)[3] - '0'; - *tzf += 4; -@@ -577,7 +606,475 @@ void timelib_dump_tzinfo(timelib_tzinfo *tz) - } - } - --static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb) -+#ifdef HAVE_SYSTEM_TZDATA -+ -+#ifdef HAVE_SYSTEM_TZDATA_PREFIX -+#define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX -+#else -+#define ZONEINFO_PREFIX "/usr/share/zoneinfo" -+#endif -+ -+/* System timezone database pointer. */ -+static const timelib_tzdb *timezonedb_system; -+ -+/* Hash table entry for the cache of the zone.tab mapping table. */ -+struct location_info { -+ char code[2]; -+ double latitude, longitude; -+ char name[64]; -+ char *comment; -+ struct location_info *next; -+}; -+ -+/* Cache of zone.tab. */ -+static struct location_info **system_location_table; -+ -+/* Size of the zone.tab hash table; a random-ish prime big enough to -+ * prevent too many collisions. */ -+#define LOCINFO_HASH_SIZE (1021) -+ -+/* Compute a case insensitive hash of str */ -+static uint32_t tz_hash(const char *str) -+{ -+ const unsigned char *p = (const unsigned char *)str; -+ uint32_t hash = 5381; -+ int c; -+ -+ while ((c = tolower(*p++)) != '\0') { -+ hash = (hash << 5) ^ hash ^ c; -+ } -+ -+ return hash % LOCINFO_HASH_SIZE; -+} -+ -+/* Parse an ISO-6709 date as used in zone.tab. Returns end of the -+ * parsed string on success, or NULL on parse error. On success, -+ * writes the parsed number to *result. */ -+static char *parse_iso6709(char *p, double *result) -+{ -+ double v, sign; -+ char *pend; -+ size_t len; -+ -+ if (*p == '+') -+ sign = 1.0; -+ else if (*p == '-') -+ sign = -1.0; -+ else -+ return NULL; -+ -+ p++; -+ for (pend = p; *pend >= '0' && *pend <= '9'; pend++) -+ ;; -+ -+ /* Annoying encoding used by zone.tab has no decimal point, so use -+ * the length to determine the format: -+ * -+ * 4 = DDMM -+ * 5 = DDDMM -+ * 6 = DDMMSS -+ * 7 = DDDMMSS -+ */ -+ len = pend - p; -+ if (len < 4 || len > 7) { -+ return NULL; -+ } -+ -+ /* p => [D]DD */ -+ v = (p[0] - '0') * 10.0 + (p[1] - '0'); -+ p += 2; -+ if (len == 5 || len == 7) -+ v = v * 10.0 + (*p++ - '0'); -+ /* p => MM[SS] */ -+ v += (10.0 * (p[0] - '0') -+ + p[1] - '0') / 60.0; -+ p += 2; -+ /* p => [SS] */ -+ if (len > 5) { -+ v += (10.0 * (p[0] - '0') -+ + p[1] - '0') / 3600.0; -+ p += 2; -+ } -+ -+ /* Round to five decimal place, not because it's a good idea, -+ * but, because the builtin data uses rounded data, so, match -+ * that. */ -+ *result = trunc(v * sign * 100000.0) / 100000.0; -+ -+ return p; -+} -+ -+/* This function parses the zone.tab file to build up the mapping of -+ * timezone to country code and geographic location, and returns a -+ * hash table. The hash table is indexed by the function: -+ * -+ * tz_hash(timezone-name) -+ */ -+static struct location_info **create_location_table(void) -+{ -+ struct location_info **li, *i; -+ char zone_tab[PATH_MAX]; -+ char line[512]; -+ FILE *fp; -+ -+ strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab); -+ -+ fp = fopen(zone_tab, "r"); -+ if (!fp) { -+ return NULL; -+ } -+ -+ li = calloc(LOCINFO_HASH_SIZE, sizeof *li); -+ -+ while (fgets(line, sizeof line, fp)) { -+ char *p = line, *code, *name, *comment; -+ uint32_t hash; -+ double latitude, longitude; -+ -+ while (isspace(*p)) -+ p++; -+ -+ if (*p == '#' || *p == '\0' || *p == '\n') -+ continue; -+ -+ if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t') -+ continue; -+ -+ /* code => AA */ -+ code = p; -+ p[2] = 0; -+ p += 3; -+ -+ /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */ -+ p = parse_iso6709(p, &latitude); -+ if (!p) { -+ continue; -+ } -+ p = parse_iso6709(p, &longitude); -+ if (!p) { -+ continue; -+ } -+ -+ if (!p || *p != '\t') { -+ continue; -+ } -+ -+ /* name = string */ -+ name = ++p; -+ while (*p != '\t' && *p && *p != '\n') -+ p++; -+ -+ *p++ = '\0'; -+ -+ /* comment = string */ -+ comment = p; -+ while (*p != '\t' && *p && *p != '\n') -+ p++; -+ -+ if (*p == '\n' || *p == '\t') -+ *p = '\0'; -+ -+ hash = tz_hash(name); -+ i = malloc(sizeof *i); -+ memcpy(i->code, code, 2); -+ strncpy(i->name, name, sizeof i->name); -+ i->comment = strdup(comment); -+ i->longitude = longitude; -+ i->latitude = latitude; -+ i->next = li[hash]; -+ li[hash] = i; -+ /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */ -+ } -+ -+ fclose(fp); -+ -+ return li; -+} -+ -+/* Return location info from hash table, using given timezone name. -+ * Returns NULL if the name could not be found. */ -+const struct location_info *find_zone_info(struct location_info **li, -+ const char *name) -+{ -+ uint32_t hash = tz_hash(name); -+ const struct location_info *l; -+ -+ if (!li) { -+ return NULL; -+ } -+ -+ for (l = li[hash]; l; l = l->next) { -+ if (timelib_strcasecmp(l->name, name) == 0) -+ return l; -+ } -+ -+ return NULL; -+} -+ -+/* Filter out some non-tzdata files and the posix/right databases, if -+ * present. */ -+static int index_filter(const struct dirent *ent) -+{ -+ return strcmp(ent->d_name, ".") != 0 -+ && strcmp(ent->d_name, "..") != 0 -+ && strcmp(ent->d_name, "posix") != 0 -+ && strcmp(ent->d_name, "posixrules") != 0 -+ && strcmp(ent->d_name, "right") != 0 -+ && strstr(ent->d_name, ".list") == NULL -+ && strstr(ent->d_name, ".tab") == NULL; -+} -+ -+static int sysdbcmp(const void *first, const void *second) -+{ -+ const timelib_tzdb_index_entry *alpha = first, *beta = second; -+ -+ return timelib_strcasecmp(alpha->id, beta->id); -+} -+ -+/* Retrieve tzdata version. */ -+static void retrieve_zone_version(timelib_tzdb *db) -+{ -+ static char buf[30]; -+ char path[PATH_MAX]; -+ FILE *fp; -+ -+ strncpy(path, ZONEINFO_PREFIX "/tzdata.zi", sizeof(path)); -+ -+ fp = fopen(path, "r"); -+ if (fp) { -+ if (fgets(buf, sizeof(buf), fp)) { -+ if (!memcmp(buf, "# version ", 10) && -+ isdigit(buf[10]) && -+ isdigit(buf[11]) && -+ isdigit(buf[12]) && -+ isdigit(buf[13]) && -+ islower(buf[14])) { -+ if (buf[14] >= 't') { /* 2022t = 2022.20 */ -+ buf[17] = 0; -+ buf[16] = buf[14] - 't' + '0'; -+ buf[15] = '2'; -+ } else if (buf[14] >= 'j') { /* 2022j = 2022.10 */ -+ buf[17] = 0; -+ buf[16] = buf[14] - 'j' + '0'; -+ buf[15] = '1'; -+ } else { /* 2022a = 2022.1 */ -+ buf[16] = 0; -+ buf[15] = buf[14] - 'a' + '1'; -+ } -+ buf[14] = '.'; -+ db->version = buf+10; -+ } -+ } -+ fclose(fp); -+ } -+} -+ -+ -+/* Create the zone identifier index by trawling the filesystem. */ -+static void create_zone_index(timelib_tzdb *db) -+{ -+ size_t dirstack_size, dirstack_top; -+ size_t index_size, index_next; -+ timelib_tzdb_index_entry *db_index; -+ char **dirstack; -+ -+ /* LIFO stack to hold directory entries to scan; each slot is a -+ * directory name relative to the zoneinfo prefix. */ -+ dirstack_size = 32; -+ dirstack = malloc(dirstack_size * sizeof *dirstack); -+ dirstack_top = 1; -+ dirstack[0] = strdup(""); -+ -+ /* Index array. */ -+ index_size = 64; -+ db_index = malloc(index_size * sizeof *db_index); -+ index_next = 0; -+ -+ do { -+ struct dirent **ents; -+ char name[PATH_MAX], *top; -+ int count; -+ -+ /* Pop the top stack entry, and iterate through its contents. */ -+ top = dirstack[--dirstack_top]; -+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top); -+ -+ count = php_scandir(name, &ents, index_filter, php_alphasort); -+ -+ while (count > 0) { -+ struct stat st; -+ const char *leaf = ents[count - 1]->d_name; -+ -+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s", -+ top, leaf); -+ -+ if (strlen(name) && stat(name, &st) == 0) { -+ /* Name, relative to the zoneinfo prefix. */ -+ const char *root = top; -+ -+ if (root[0] == '/') root++; -+ -+ snprintf(name, sizeof name, "%s%s%s", root, -+ *root ? "/": "", leaf); -+ -+ if (S_ISDIR(st.st_mode)) { -+ if (dirstack_top == dirstack_size) { -+ dirstack_size *= 2; -+ dirstack = realloc(dirstack, -+ dirstack_size * sizeof *dirstack); -+ } -+ dirstack[dirstack_top++] = strdup(name); -+ } -+ else { -+ if (index_next == index_size) { -+ index_size *= 2; -+ db_index = realloc(db_index, -+ index_size * sizeof *db_index); -+ } -+ -+ db_index[index_next++].id = strdup(name); -+ } -+ } -+ -+ free(ents[--count]); -+ } -+ -+ if (count != -1) free(ents); -+ free(top); -+ } while (dirstack_top); -+ -+ qsort(db_index, index_next, sizeof *db_index, sysdbcmp); -+ -+ if (!index_next) { -+ db_index[index_next++].id = strdup("UTC"); -+ } -+ db->index = db_index; -+ db->index_size = index_next; -+ -+ free(dirstack); -+} -+ -+#define FAKE_HEADER "1234\0??\1??" -+#define FAKE_UTC_POS (7 - 4) -+ -+/* Create a fake data segment for database 'sysdb'. */ -+static void fake_data_segment(timelib_tzdb *sysdb, -+ struct location_info **info) -+{ -+ size_t n; -+ char *data, *p; -+ -+ data = malloc(3 * sysdb->index_size + sizeof(FAKE_HEADER) - 1); -+ -+ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1); -+ -+ for (n = 0; n < sysdb->index_size; n++) { -+ const struct location_info *li; -+ timelib_tzdb_index_entry *ent; -+ -+ ent = (timelib_tzdb_index_entry *)&sysdb->index[n]; -+ -+ /* Lookup the timezone name in the hash table. */ -+ if (strcmp(ent->id, "UTC") == 0) { -+ ent->pos = FAKE_UTC_POS; -+ continue; -+ } -+ -+ li = find_zone_info(info, ent->id); -+ if (li) { -+ /* If found, append the BC byte and the -+ * country code; set the position for this -+ * section of timezone data. */ -+ ent->pos = (p - data) - 4; -+ *p++ = '\1'; -+ *p++ = li->code[0]; -+ *p++ = li->code[1]; -+ } -+ else { -+ /* If not found, the timezone data can -+ * point at the header. */ -+ ent->pos = 0; -+ } -+ } -+ -+ sysdb->data = (unsigned char *)data; -+} -+ -+/* Returns true if the passed-in stat structure describes a -+ * probably-valid timezone file. */ -+static int is_valid_tzfile(const struct stat *st, int fd) -+{ -+ if (fd) { -+ char buf[20]; -+ if (read(fd, buf, 20)!=20) { -+ return 0; -+ } -+ lseek(fd, SEEK_SET, 0); -+ if (memcmp(buf, "TZif", 4)) { -+ return 0; -+ } -+ } -+ return S_ISREG(st->st_mode) && st->st_size > 20; -+} -+ -+/* To allow timezone names to be used case-insensitively, find the -+ * canonical name for this timezone, if possible. */ -+static const char *canonical_tzname(const char *timezone) -+{ -+ if (timezonedb_system) { -+ timelib_tzdb_index_entry *ent, lookup; -+ -+ lookup.id = (char *)timezone; -+ -+ ent = bsearch(&lookup, timezonedb_system->index, -+ timezonedb_system->index_size, sizeof lookup, -+ sysdbcmp); -+ if (ent) { -+ return ent->id; -+ } -+ } -+ -+ return timezone; -+} -+ -+/* Return the mmap()ed tzfile if found, else NULL. On success, the -+ * length of the mapped data is placed in *length. */ -+static char *map_tzfile(const char *timezone, size_t *length) -+{ -+ char fname[PATH_MAX]; -+ struct stat st; -+ char *p; -+ int fd; -+ -+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { -+ return NULL; -+ } -+ -+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); -+ -+ fd = open(fname, O_RDONLY); -+ if (fd == -1) { -+ if (strcmp(timezone, "UTC")) { -+ return NULL; -+ } else { -+ *length = sizeof(internal_utc); -+ return internal_utc; -+ } -+ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) { -+ close(fd); -+ return NULL; -+ } -+ -+ *length = st.st_size; -+ p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); -+ close(fd); -+ -+ return p != MAP_FAILED ? p : NULL; -+} -+ -+#endif -+ -+static int inmem_seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb) - { - int left = 0, right = tzdb->index_size - 1; - -@@ -603,9 +1100,49 @@ static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, - return 0; - } - -+static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, -+ char **map, size_t *maplen, -+ const timelib_tzdb *tzdb) -+{ -+#ifdef HAVE_SYSTEM_TZDATA -+ if (tzdb == timezonedb_system) { -+ char *orig; -+ -+ orig = map_tzfile(timezone, maplen); -+ if (orig == NULL) { -+ return 0; -+ } -+ -+ (*tzf) = (unsigned char *)orig; -+ *map = orig; -+ return 1; -+ } -+ else -+#endif -+ { -+ return inmem_seek_to_tz_position(tzf, timezone, tzdb); -+ } -+} -+ - const timelib_tzdb *timelib_builtin_db(void) - { -+#ifdef HAVE_SYSTEM_TZDATA -+ if (timezonedb_system == NULL) { -+ timelib_tzdb *tmp = malloc(sizeof *tmp); -+ -+ tmp->version = "0"; -+ tmp->data = NULL; -+ create_zone_index(tmp); -+ retrieve_zone_version(tmp); -+ system_location_table = create_location_table(); -+ fake_data_segment(tmp, system_location_table); -+ timezonedb_system = tmp; -+ } -+ -+ return timezonedb_system; -+#else - return &timezonedb_builtin; -+#endif - } - - const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count) -@@ -617,7 +1154,32 @@ const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_ - int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb) - { - const unsigned char *tzf; -- return (seek_to_tz_position(&tzf, timezone, tzdb)); -+ -+#ifdef HAVE_SYSTEM_TZDATA -+ if (tzdb == timezonedb_system) { -+ char fname[PATH_MAX]; -+ struct stat st; -+ -+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { -+ return 0; -+ } -+ if (!strcmp(timezone, "UTC")) { -+ return 1; -+ } -+ if (system_location_table) { -+ if (find_zone_info(system_location_table, timezone) != NULL) { -+ /* found in cache */ -+ return 1; -+ } -+ } -+ -+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); -+ -+ return stat(fname, &st) == 0 && is_valid_tzfile(&st, 0); -+ } -+#endif -+ -+ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb)); - } - - static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz) -@@ -662,6 +1224,8 @@ static timelib_tzinfo* timelib_tzinfo_ctor(const char *name) - timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code) - { - const unsigned char *tzf; -+ char *memmap = NULL; -+ size_t maplen; - timelib_tzinfo *tmp; - int version; - int transitions_result, types_result; -@@ -669,7 +1233,7 @@ timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *t - - *error_code = TIMELIB_ERROR_NO_ERROR; - -- if (seek_to_tz_position(&tzf, timezone, tzdb)) { -+ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) { - tmp = timelib_tzinfo_ctor(timezone); - - version = read_preamble(&tzf, tmp, &type); -@@ -712,11 +1276,38 @@ timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *t - return NULL; - } - -+#ifdef HAVE_SYSTEM_TZDATA -+ if (memmap) { -+ const struct location_info *li; -+ -+ /* TZif-style - grok the location info from the system database, -+ * if possible. */ -+ -+ if ((li = find_zone_info(system_location_table, timezone)) != NULL) { -+ tmp->location.comments = timelib_strdup(li->comment); -+ strncpy(tmp->location.country_code, li->code, 2); -+ tmp->location.longitude = li->longitude; -+ tmp->location.latitude = li->latitude; -+ tmp->bc = 1; -+ } -+ else { -+ set_default_location_and_comments(&tzf, tmp); -+ } -+ -+ /* Now done with the mmap segment - discard it. */ -+ if (memmap != internal_utc) { -+ munmap(memmap, maplen); -+ } -+ } else { -+#endif - if (type == TIMELIB_TZINFO_PHP) { - read_location(&tzf, tmp); - } else { - set_default_location_and_comments(&tzf, tmp); - } -+#ifdef HAVE_SYSTEM_TZDATA -+ } -+#endif - } else { - *error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE; - tmp = NULL; -diff --git a/ext/date/php_date.c b/ext/date/php_date.c -index 48c82bf7ec..443299c089 100644 ---- a/ext/date/php_date.c -+++ b/ext/date/php_date.c -@@ -490,7 +490,11 @@ PHP_MINFO_FUNCTION(date) - php_info_print_table_row(2, "date/time support", "enabled"); - php_info_print_table_row(2, "timelib version", TIMELIB_ASCII_VERSION); - php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version); -+#ifdef HAVE_SYSTEM_TZDATA -+ php_info_print_table_row(2, "Timezone Database", "system"); -+#else - php_info_print_table_row(2, "Timezone Database", php_date_global_timezone_db_enabled ? "external" : "internal"); -+#endif - php_info_print_table_row(2, "Default timezone", guess_timezone(tzdb)); - php_info_print_table_end(); - diff --git a/php-8.4.0-embed.patch b/php-8.4.0-embed.patch new file mode 100644 index 0000000..ca4b403 --- /dev/null +++ b/php-8.4.0-embed.patch @@ -0,0 +1,25 @@ +diff -up ./sapi/embed/config.m4.embed ./sapi/embed/config.m4 +--- ./sapi/embed/config.m4.embed 2024-07-03 16:17:17.973277200 +0200 ++++ ./sapi/embed/config.m4 2024-07-03 16:19:32.224546927 +0200 +@@ -12,7 +12,8 @@ if test "$PHP_EMBED" != "no"; then + [yes|shared], [ + LIBPHP_CFLAGS="-shared" + PHP_EMBED_TYPE=shared +- INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(orig_libdir); \$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)\$(orig_libdir)" ++ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -release \$(PHP_MAJOR_VERSION).\$(PHP_MINOR_VERSION)" ++ INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(libdir); \$(LIBTOOL) --mode=install \$(INSTALL) -m 0755 \$(OVERALL_TARGET) \$(INSTALL_ROOT)\$(libdir)" + ], + [static], [ + LIBPHP_CFLAGS="-static" +diff -up ./scripts/php-config.in.embed ./scripts/php-config.in +--- ./scripts/php-config.in.embed 2024-07-03 16:17:17.973277200 +0200 ++++ ./scripts/php-config.in 2024-07-03 16:20:00.439654444 +0200 +@@ -19,7 +19,7 @@ exe_extension="@EXEEXT@" + php_cli_binary=NONE + php_cgi_binary=NONE + configure_options="@CONFIGURE_OPTIONS@" +-php_sapis="@PHP_INSTALLED_SAPIS@" ++php_sapis="apache2handler litespeed fpm phpdbg @PHP_INSTALLED_SAPIS@" + ini_dir="@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@" + ini_path="@EXPANDED_PHP_CONFIG_FILE_PATH@" + php_embed_type="@PHP_EMBED_TYPE@" diff --git a/php-8.4.0-httpd.patch b/php-8.4.0-httpd.patch new file mode 100644 index 0000000..227468c --- /dev/null +++ b/php-8.4.0-httpd.patch @@ -0,0 +1,21 @@ +Disable MPM detection + +mod_php is build twice +- as NTS without option +- as ZTS using --enable-maintainer-zts + +diff -up ./sapi/apache2handler/config.m4.mpmcheck ./sapi/apache2handler/config.m4 +--- ./sapi/apache2handler/config.m4.mpmcheck 2024-07-03 15:56:56.882370597 +0200 ++++ ./sapi/apache2handler/config.m4 2024-07-03 15:59:15.967824949 +0200 +@@ -120,11 +120,6 @@ if test "$PHP_APXS2" != "no"; then + -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 + ]) + +- AS_IF([$APXS_HTTPD -V 2>/dev/null | grep 'threaded:.*yes' >/dev/null 2>&1], [ +- APACHE_THREADED_MPM=yes +- enable_zts=yes +- ], [APACHE_THREADED_MPM=no]) +- + AC_CONFIG_COMMANDS([apache2handler], [AS_VAR_IF([enable_zts], [yes],, + [AS_VAR_IF([APACHE_THREADED_MPM], [no], + [AC_MSG_WARN([ diff --git a/php-8.4.0-includedir.patch b/php-8.4.0-includedir.patch new file mode 100644 index 0000000..8d3fcff --- /dev/null +++ b/php-8.4.0-includedir.patch @@ -0,0 +1,11 @@ +--- ./configure.ac.includedir ++++ ./configure.ac +@@ -1368,7 +1368,7 @@ + EXPANDED_DATADIR=$datadir + EXPANDED_PHP_CONFIG_FILE_PATH=$(eval echo "$PHP_CONFIG_FILE_PATH") + EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=$(eval echo "$PHP_CONFIG_FILE_SCAN_DIR") +-INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR ++INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR:${EXPANDED_DATADIR}/php:/usr/share/pear:/usr/share/php + + exec_prefix=$old_exec_prefix + libdir=$old_libdir diff --git a/php-8.4.0-ldap_r.patch b/php-8.4.0-ldap_r.patch new file mode 100644 index 0000000..a574751 --- /dev/null +++ b/php-8.4.0-ldap_r.patch @@ -0,0 +1,19 @@ + +Use -lldap_r by default. + +diff -up php-8.4.0beta1/ext/ldap/config.m4.ldap_r php-8.4.0beta1/ext/ldap/config.m4 +--- php-8.4.0beta1/ext/ldap/config.m4.ldap_r 2024-08-13 15:48:12.000000000 +0200 ++++ php-8.4.0beta1/ext/ldap/config.m4 2024-08-13 16:23:24.744311776 +0200 +@@ -72,7 +72,11 @@ if test "$PHP_LDAP" != "no"; then + AH_TEMPLATE([HAVE_ORALDAP], + [Define to 1 if the ldap extension uses the Oracle Instant Client.]) + +- if test -f $LDAP_LIBDIR/liblber.a || test -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.a || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.$SHLIB_SUFFIX_NAME; then ++ if test -f $LDAP_LIBDIR/libldap_r.$SHLIB_SUFFIX_NAME; then ++ PHP_ADD_LIBRARY_WITH_PATH(lber, [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD]) ++ PHP_ADD_LIBRARY_WITH_PATH(ldap_r, [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD]) ++ ++ elif test -f $LDAP_LIBDIR/liblber.a || test -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.a || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.$SHLIB_SUFFIX_NAME; then + PHP_ADD_LIBRARY_WITH_PATH([lber], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD]) + PHP_ADD_LIBRARY_WITH_PATH([ldap], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD]) + diff --git a/php-8.4.0-libdb.patch b/php-8.4.0-libdb.patch new file mode 100644 index 0000000..af7add0 --- /dev/null +++ b/php-8.4.0-libdb.patch @@ -0,0 +1,106 @@ +diff -up ./ext/dba/config.m4.libdb ./ext/dba/config.m4 +--- ./ext/dba/config.m4.libdb 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/dba/config.m4 2020-04-09 14:35:08.208605065 +0200 +@@ -421,55 +421,7 @@ if test "$PHP_DB4" != "no"; then + /usr/local \ + /usr \ + ; do +- if test -f "$i/db5/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/db5/db.h +- break +- elif test -f "$i/db4/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/db4/db.h +- break +- elif test -f "$i/include/db5.3/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db5.3/db.h +- break +- elif test -f "$i/include/db5.1/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db5.1/db.h +- break +- elif test -f "$i/include/db5.0/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db5.0/db.h +- break +- elif test -f "$i/include/db4.8/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.8/db.h +- break +- elif test -f "$i/include/db4.7/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.7/db.h +- break +- elif test -f "$i/include/db4.6/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.6/db.h +- break +- elif test -f "$i/include/db4.5/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.5/db.h +- break +- elif test -f "$i/include/db4/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4/db.h +- break +- elif test -f "$i/include/db/db4.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db/db4.h +- break +- elif test -f "$i/include/db4.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.h +- break +- elif test -f "$i/include/db.h"; then ++ if test -f "$i/include/db.h"; then + THIS_PREFIX=$i + THIS_INCLUDE=$i/include/db.h + break +@@ -477,20 +429,6 @@ if test "$PHP_DB4" != "no"; then + done + PHP_DBA_DB_CHECK([4], + [ +- db-5.3 +- db-5.1 +- db-5.0 +- db-4.8 +- db-4.7 +- db-4.6 +- db-4.5 +- db-4.4 +- db-4.3 +- db-4.2 +- db-4.1 +- db-4.0 +- db-4 +- db4 + db + ], + [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) +diff -up ./ext/dba/dba.c.libdb ./ext/dba/dba.c +--- ./ext/dba/dba.c.libdb 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/dba/dba.c 2020-04-09 14:36:30.593275190 +0200 +@@ -49,6 +49,10 @@ + #include "php_lmdb.h" + #include "dba_arginfo.h" + ++#ifdef DB4_INCLUDE_FILE ++#include DB4_INCLUDE_FILE ++#endif ++ + PHP_MINIT_FUNCTION(dba); + PHP_MSHUTDOWN_FUNCTION(dba); + PHP_MINFO_FUNCTION(dba); +@@ -444,6 +448,10 @@ PHP_MINFO_FUNCTION(dba) + + php_info_print_table_start(); + php_info_print_table_row(2, "DBA support", "enabled"); ++#ifdef DB_VERSION_STRING ++ php_info_print_table_row(2, "libdb header version", DB_VERSION_STRING); ++ php_info_print_table_row(2, "libdb library version", db_version(NULL, NULL, NULL)); ++#endif + if (handlers.s) { + smart_str_0(&handlers); + php_info_print_table_row(2, "Supported handlers", ZSTR_VAL(handlers.s)); diff --git a/php-8.4.0-phpinfo.patch b/php-8.4.0-phpinfo.patch new file mode 100644 index 0000000..2536f9e --- /dev/null +++ b/php-8.4.0-phpinfo.patch @@ -0,0 +1,44 @@ + +Drop "Configure Command" from phpinfo as it doesn't +provide any useful information. +The available extensions are not related to this command. + +Replace full GCC name by gcc in php -v output + + +diff -up ./ext/standard/info.c.phpinfo ./ext/standard/info.c +--- ./ext/standard/info.c.phpinfo 2020-07-21 10:49:31.000000000 +0200 ++++ ./ext/standard/info.c 2020-07-21 11:41:56.295633523 +0200 +@@ -805,9 +805,6 @@ PHPAPI ZEND_COLD void php_print_info(int + #ifdef PHP_BUILD_ARCH + php_info_print_table_row(2, "Architecture", PHP_BUILD_ARCH); + #endif +-#ifdef CONFIGURE_COMMAND +- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND ); +-#endif + + if (sapi_module.pretty_name) { + php_info_print_table_row(2, "Server API", sapi_module.pretty_name ); +diff -up ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo ./ext/standard/tests/general_functions/phpinfo.phpt +--- ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo 2020-07-21 10:49:31.000000000 +0200 ++++ ./ext/standard/tests/general_functions/phpinfo.phpt 2020-07-21 11:41:56.296633522 +0200 +@@ -17,7 +17,6 @@ PHP Version => %s + + System => %s + Build Date => %s%a +-Configure Command => %s + Server API => Command Line Interface + Virtual Directory Support => %s + Configuration File (php.ini) Path => %s +diff -up ./main/main.c.phpinfo ./main/main.c +--- ./main/main.c.phpinfo 2024-08-13 16:14:03.242363191 +0200 ++++ ./main/main.c 2024-08-13 16:14:06.588499946 +0200 +@@ -119,7 +119,7 @@ PHPAPI char *php_get_version(sapi_module + "NTS" + #endif + #ifdef PHP_BUILD_COMPILER +- " " PHP_BUILD_COMPILER ++ " gcc" + #endif + #ifdef PHP_BUILD_ARCH + " " PHP_BUILD_ARCH diff --git a/php-8.4.0-phpize.patch b/php-8.4.0-phpize.patch new file mode 100644 index 0000000..76c3ed5 --- /dev/null +++ b/php-8.4.0-phpize.patch @@ -0,0 +1,35 @@ +diff -up ./scripts/phpize.in.headers ./scripts/phpize.in +--- ./scripts/phpize.in.headers 2019-07-23 10:05:11.000000000 +0200 ++++ ./scripts/phpize.in 2019-07-23 10:18:13.648098089 +0200 +@@ -166,6 +166,15 @@ phpize_autotools() + $PHP_AUTOHEADER || exit 1 + } + ++phpize_check_headers() ++{ ++ if test ! -f $includedir/main/php.h; then ++ echo "Can't find PHP headers in $includedir" ++ echo "The php-devel package is required for use of this command." ++ exit 1 ++ fi ++} ++ + # Main script + + case "$1" in +@@ -184,12 +193,15 @@ case "$1" in + + # Version + --version|-v) ++ phpize_check_headers + phpize_print_api_numbers + exit 0 + ;; + + # Default + *) ++ phpize_check_headers ++ + phpize_check_configm4 0 + + phpize_check_build_files diff --git a/php-8.4.0-systzdata-v24.patch b/php-8.4.0-systzdata-v24.patch new file mode 100644 index 0000000..6176a8b --- /dev/null +++ b/php-8.4.0-systzdata-v24.patch @@ -0,0 +1,742 @@ +# License: MIT +# http://opensource.org/licenses/MIT + +Add support for use of the system timezone database, rather +than embedding a copy. Discussed upstream but was not desired. + +History: +r24: add internal UTC if tzdata is missing +r23: fix possible buffer overflow +r22: retrieve tzdata version from /usr/share/zoneinfo/tzdata.zi +r21: adapt for timelib 2021.03 (in 8.1.0) +r20: adapt for timelib 2020.03 (in 8.0.10RC1) +r19: adapt for timelib 2020.02 (in 8.0.0beta2) +r18: adapt for autotool change in 7.3.3RC1 +r17: adapt for timelib 2018.01 (in 7.3.2RC1) +r16: adapt for timelib 2017.06 (in 7.2.3RC1) +r15: adapt for timelib 2017.05beta7 (in 7.2.0RC1) +r14: improve check for valid tz file +r13: adapt for upstream changes to use PHP allocator +r12: adapt for upstream changes for new zic +r11: use canonical names to avoid more case sensitivity issues + round lat/long from zone.tab towards zero per builtin db +r10: make timezone case insensitive +r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold) +r8: fix compile error without --with-system-tzdata configured +r7: improve check for valid timezone id to exclude directories +r6: fix fd leak in r5, fix country code/BC flag use in + timezone_identifiers_list() using system db, + fix use of PECL timezonedb to override system db, +r5: reverts addition of "System/Localtime" fake tzname. + updated for 5.3.0, parses zone.tab to pick up mapping between + timezone name, country code and long/lat coords +r4: added "System/Localtime" tzname which uses /etc/localtime +r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert) +r2: add filesystem trawl to set up name alias index +r1: initial revision + + +diff -up ./ext/date/config0.m4.systzdata ./ext/date/config0.m4 +--- ./ext/date/config0.m4.systzdata 2024-07-03 16:21:20.240786848 +0200 ++++ ./ext/date/config0.m4 2024-07-03 16:25:14.838995464 +0200 +@@ -8,6 +8,18 @@ + [PHP_DATE_CFLAGS="$PHP_DATE_CFLAGS -Wno-implicit-fallthrough"],, + [-Werror]) + ++PHP_ARG_WITH(system-tzdata, for use of system timezone data, ++ [AS_HELP_STRING([--with-system-tzdata[=DIR]],[to specify use of system timezone data])], no, no) ++ ++if test "$PHP_SYSTEM_TZDATA" != "no"; then ++ AC_DEFINE(HAVE_SYSTEM_TZDATA, 1, [Define if system timezone data is used]) ++ ++ if test "$PHP_SYSTEM_TZDATA" != "yes"; then ++ AC_DEFINE_UNQUOTED(HAVE_SYSTEM_TZDATA_PREFIX, "$PHP_SYSTEM_TZDATA", ++ [Define for location of system timezone data]) ++ fi ++fi ++ + PHP_DATE_CFLAGS="$PHP_DATE_CFLAGS -I@ext_builddir@/lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DHAVE_TIMELIB_CONFIG_H=1" + timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c lib/parse_posix.c + lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c lib/parse_iso_intervals.c lib/interval.c" +diff -up ./ext/date/lib/parse_tz.c.systzdata ./ext/date/lib/parse_tz.c +--- ./ext/date/lib/parse_tz.c.systzdata 2024-07-02 15:43:13.000000000 +0200 ++++ ./ext/date/lib/parse_tz.c 2024-07-03 16:21:20.240786848 +0200 +@@ -26,9 +26,33 @@ + #include "timelib.h" + #include "timelib_private.h" + ++#ifdef HAVE_SYSTEM_TZDATA ++#include ++#include ++#include ++#include ++#include ++ ++#include "php_scandir.h" ++ ++static const unsigned char internal_utc[] = { ++ 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x0a, 0x55, 0x54, 0x43, ++ 0x30, 0x0a ++}; ++ ++#else + #define TIMELIB_SUPPORTS_V2DATA + #define TIMELIB_SUPPORT_SLIM_FILE + #include "timezonedb.h" ++#endif ++ ++#include + + #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) + # if defined(__LITTLE_ENDIAN__) +@@ -95,6 +119,11 @@ static int read_php_preamble(const unsig + { + uint32_t version; + ++ if (memcmp(*tzf, "TZif", 4) == 0) { ++ *tzf += 20; ++ return 0; ++ } ++ + /* read ID */ + version = (*tzf)[3] - '0'; + *tzf += 4; +@@ -577,7 +606,475 @@ void timelib_dump_tzinfo(timelib_tzinfo + } + } + +-static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb) ++#ifdef HAVE_SYSTEM_TZDATA ++ ++#ifdef HAVE_SYSTEM_TZDATA_PREFIX ++#define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX ++#else ++#define ZONEINFO_PREFIX "/usr/share/zoneinfo" ++#endif ++ ++/* System timezone database pointer. */ ++static const timelib_tzdb *timezonedb_system; ++ ++/* Hash table entry for the cache of the zone.tab mapping table. */ ++struct location_info { ++ char code[2]; ++ double latitude, longitude; ++ char name[64]; ++ char *comment; ++ struct location_info *next; ++}; ++ ++/* Cache of zone.tab. */ ++static struct location_info **system_location_table; ++ ++/* Size of the zone.tab hash table; a random-ish prime big enough to ++ * prevent too many collisions. */ ++#define LOCINFO_HASH_SIZE (1021) ++ ++/* Compute a case insensitive hash of str */ ++static uint32_t tz_hash(const char *str) ++{ ++ const unsigned char *p = (const unsigned char *)str; ++ uint32_t hash = 5381; ++ int c; ++ ++ while ((c = tolower(*p++)) != '\0') { ++ hash = (hash << 5) ^ hash ^ c; ++ } ++ ++ return hash % LOCINFO_HASH_SIZE; ++} ++ ++/* Parse an ISO-6709 date as used in zone.tab. Returns end of the ++ * parsed string on success, or NULL on parse error. On success, ++ * writes the parsed number to *result. */ ++static char *parse_iso6709(char *p, double *result) ++{ ++ double v, sign; ++ char *pend; ++ size_t len; ++ ++ if (*p == '+') ++ sign = 1.0; ++ else if (*p == '-') ++ sign = -1.0; ++ else ++ return NULL; ++ ++ p++; ++ for (pend = p; *pend >= '0' && *pend <= '9'; pend++) ++ ;; ++ ++ /* Annoying encoding used by zone.tab has no decimal point, so use ++ * the length to determine the format: ++ * ++ * 4 = DDMM ++ * 5 = DDDMM ++ * 6 = DDMMSS ++ * 7 = DDDMMSS ++ */ ++ len = pend - p; ++ if (len < 4 || len > 7) { ++ return NULL; ++ } ++ ++ /* p => [D]DD */ ++ v = (p[0] - '0') * 10.0 + (p[1] - '0'); ++ p += 2; ++ if (len == 5 || len == 7) ++ v = v * 10.0 + (*p++ - '0'); ++ /* p => MM[SS] */ ++ v += (10.0 * (p[0] - '0') ++ + p[1] - '0') / 60.0; ++ p += 2; ++ /* p => [SS] */ ++ if (len > 5) { ++ v += (10.0 * (p[0] - '0') ++ + p[1] - '0') / 3600.0; ++ p += 2; ++ } ++ ++ /* Round to five decimal place, not because it's a good idea, ++ * but, because the builtin data uses rounded data, so, match ++ * that. */ ++ *result = trunc(v * sign * 100000.0) / 100000.0; ++ ++ return p; ++} ++ ++/* This function parses the zone.tab file to build up the mapping of ++ * timezone to country code and geographic location, and returns a ++ * hash table. The hash table is indexed by the function: ++ * ++ * tz_hash(timezone-name) ++ */ ++static struct location_info **create_location_table(void) ++{ ++ struct location_info **li, *i; ++ char zone_tab[PATH_MAX]; ++ char line[512]; ++ FILE *fp; ++ ++ strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab); ++ ++ fp = fopen(zone_tab, "r"); ++ if (!fp) { ++ return NULL; ++ } ++ ++ li = calloc(LOCINFO_HASH_SIZE, sizeof *li); ++ ++ while (fgets(line, sizeof line, fp)) { ++ char *p = line, *code, *name, *comment; ++ uint32_t hash; ++ double latitude, longitude; ++ ++ while (isspace(*p)) ++ p++; ++ ++ if (*p == '#' || *p == '\0' || *p == '\n') ++ continue; ++ ++ if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t') ++ continue; ++ ++ /* code => AA */ ++ code = p; ++ p[2] = 0; ++ p += 3; ++ ++ /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */ ++ p = parse_iso6709(p, &latitude); ++ if (!p) { ++ continue; ++ } ++ p = parse_iso6709(p, &longitude); ++ if (!p) { ++ continue; ++ } ++ ++ if (!p || *p != '\t') { ++ continue; ++ } ++ ++ /* name = string */ ++ name = ++p; ++ while (*p != '\t' && *p && *p != '\n') ++ p++; ++ ++ *p++ = '\0'; ++ ++ /* comment = string */ ++ comment = p; ++ while (*p != '\t' && *p && *p != '\n') ++ p++; ++ ++ if (*p == '\n' || *p == '\t') ++ *p = '\0'; ++ ++ hash = tz_hash(name); ++ i = malloc(sizeof *i); ++ memcpy(i->code, code, 2); ++ strncpy(i->name, name, sizeof i->name); ++ i->comment = strdup(comment); ++ i->longitude = longitude; ++ i->latitude = latitude; ++ i->next = li[hash]; ++ li[hash] = i; ++ /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */ ++ } ++ ++ fclose(fp); ++ ++ return li; ++} ++ ++/* Return location info from hash table, using given timezone name. ++ * Returns NULL if the name could not be found. */ ++const struct location_info *find_zone_info(struct location_info **li, ++ const char *name) ++{ ++ uint32_t hash = tz_hash(name); ++ const struct location_info *l; ++ ++ if (!li) { ++ return NULL; ++ } ++ ++ for (l = li[hash]; l; l = l->next) { ++ if (timelib_strcasecmp(l->name, name) == 0) ++ return l; ++ } ++ ++ return NULL; ++} ++ ++/* Filter out some non-tzdata files and the posix/right databases, if ++ * present. */ ++static int index_filter(const struct dirent *ent) ++{ ++ return strcmp(ent->d_name, ".") != 0 ++ && strcmp(ent->d_name, "..") != 0 ++ && strcmp(ent->d_name, "posix") != 0 ++ && strcmp(ent->d_name, "posixrules") != 0 ++ && strcmp(ent->d_name, "right") != 0 ++ && strstr(ent->d_name, ".list") == NULL ++ && strstr(ent->d_name, ".tab") == NULL; ++} ++ ++static int sysdbcmp(const void *first, const void *second) ++{ ++ const timelib_tzdb_index_entry *alpha = first, *beta = second; ++ ++ return timelib_strcasecmp(alpha->id, beta->id); ++} ++ ++/* Retrieve tzdata version. */ ++static void retrieve_zone_version(timelib_tzdb *db) ++{ ++ static char buf[30]; ++ char path[PATH_MAX]; ++ FILE *fp; ++ ++ strncpy(path, ZONEINFO_PREFIX "/tzdata.zi", sizeof(path)); ++ ++ fp = fopen(path, "r"); ++ if (fp) { ++ if (fgets(buf, sizeof(buf), fp)) { ++ if (!memcmp(buf, "# version ", 10) && ++ isdigit(buf[10]) && ++ isdigit(buf[11]) && ++ isdigit(buf[12]) && ++ isdigit(buf[13]) && ++ islower(buf[14])) { ++ if (buf[14] >= 't') { /* 2022t = 2022.20 */ ++ buf[17] = 0; ++ buf[16] = buf[14] - 't' + '0'; ++ buf[15] = '2'; ++ } else if (buf[14] >= 'j') { /* 2022j = 2022.10 */ ++ buf[17] = 0; ++ buf[16] = buf[14] - 'j' + '0'; ++ buf[15] = '1'; ++ } else { /* 2022a = 2022.1 */ ++ buf[16] = 0; ++ buf[15] = buf[14] - 'a' + '1'; ++ } ++ buf[14] = '.'; ++ db->version = buf+10; ++ } ++ } ++ fclose(fp); ++ } ++} ++ ++ ++/* Create the zone identifier index by trawling the filesystem. */ ++static void create_zone_index(timelib_tzdb *db) ++{ ++ size_t dirstack_size, dirstack_top; ++ size_t index_size, index_next; ++ timelib_tzdb_index_entry *db_index; ++ char **dirstack; ++ ++ /* LIFO stack to hold directory entries to scan; each slot is a ++ * directory name relative to the zoneinfo prefix. */ ++ dirstack_size = 32; ++ dirstack = malloc(dirstack_size * sizeof *dirstack); ++ dirstack_top = 1; ++ dirstack[0] = strdup(""); ++ ++ /* Index array. */ ++ index_size = 64; ++ db_index = malloc(index_size * sizeof *db_index); ++ index_next = 0; ++ ++ do { ++ struct dirent **ents; ++ char name[PATH_MAX], *top; ++ int count; ++ ++ /* Pop the top stack entry, and iterate through its contents. */ ++ top = dirstack[--dirstack_top]; ++ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top); ++ ++ count = php_scandir(name, &ents, index_filter, php_alphasort); ++ ++ while (count > 0) { ++ struct stat st; ++ const char *leaf = ents[count - 1]->d_name; ++ ++ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s", ++ top, leaf); ++ ++ if (strlen(name) && stat(name, &st) == 0) { ++ /* Name, relative to the zoneinfo prefix. */ ++ const char *root = top; ++ ++ if (root[0] == '/') root++; ++ ++ snprintf(name, sizeof name, "%s%s%s", root, ++ *root ? "/": "", leaf); ++ ++ if (S_ISDIR(st.st_mode)) { ++ if (dirstack_top == dirstack_size) { ++ dirstack_size *= 2; ++ dirstack = realloc(dirstack, ++ dirstack_size * sizeof *dirstack); ++ } ++ dirstack[dirstack_top++] = strdup(name); ++ } ++ else { ++ if (index_next == index_size) { ++ index_size *= 2; ++ db_index = realloc(db_index, ++ index_size * sizeof *db_index); ++ } ++ ++ db_index[index_next++].id = strdup(name); ++ } ++ } ++ ++ free(ents[--count]); ++ } ++ ++ if (count != -1) free(ents); ++ free(top); ++ } while (dirstack_top); ++ ++ qsort(db_index, index_next, sizeof *db_index, sysdbcmp); ++ ++ if (!index_next) { ++ db_index[index_next++].id = strdup("UTC"); ++ } ++ db->index = db_index; ++ db->index_size = index_next; ++ ++ free(dirstack); ++} ++ ++#define FAKE_HEADER "1234\0??\1??" ++#define FAKE_UTC_POS (7 - 4) ++ ++/* Create a fake data segment for database 'sysdb'. */ ++static void fake_data_segment(timelib_tzdb *sysdb, ++ struct location_info **info) ++{ ++ size_t n; ++ char *data, *p; ++ ++ data = malloc(3 * sysdb->index_size + sizeof(FAKE_HEADER) - 1); ++ ++ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1); ++ ++ for (n = 0; n < sysdb->index_size; n++) { ++ const struct location_info *li; ++ timelib_tzdb_index_entry *ent; ++ ++ ent = (timelib_tzdb_index_entry *)&sysdb->index[n]; ++ ++ /* Lookup the timezone name in the hash table. */ ++ if (strcmp(ent->id, "UTC") == 0) { ++ ent->pos = FAKE_UTC_POS; ++ continue; ++ } ++ ++ li = find_zone_info(info, ent->id); ++ if (li) { ++ /* If found, append the BC byte and the ++ * country code; set the position for this ++ * section of timezone data. */ ++ ent->pos = (p - data) - 4; ++ *p++ = '\1'; ++ *p++ = li->code[0]; ++ *p++ = li->code[1]; ++ } ++ else { ++ /* If not found, the timezone data can ++ * point at the header. */ ++ ent->pos = 0; ++ } ++ } ++ ++ sysdb->data = (unsigned char *)data; ++} ++ ++/* Returns true if the passed-in stat structure describes a ++ * probably-valid timezone file. */ ++static int is_valid_tzfile(const struct stat *st, int fd) ++{ ++ if (fd) { ++ char buf[20]; ++ if (read(fd, buf, 20)!=20) { ++ return 0; ++ } ++ lseek(fd, SEEK_SET, 0); ++ if (memcmp(buf, "TZif", 4)) { ++ return 0; ++ } ++ } ++ return S_ISREG(st->st_mode) && st->st_size > 20; ++} ++ ++/* To allow timezone names to be used case-insensitively, find the ++ * canonical name for this timezone, if possible. */ ++static const char *canonical_tzname(const char *timezone) ++{ ++ if (timezonedb_system) { ++ timelib_tzdb_index_entry *ent, lookup; ++ ++ lookup.id = (char *)timezone; ++ ++ ent = bsearch(&lookup, timezonedb_system->index, ++ timezonedb_system->index_size, sizeof lookup, ++ sysdbcmp); ++ if (ent) { ++ return ent->id; ++ } ++ } ++ ++ return timezone; ++} ++ ++/* Return the mmap()ed tzfile if found, else NULL. On success, the ++ * length of the mapped data is placed in *length. */ ++static char *map_tzfile(const char *timezone, size_t *length) ++{ ++ char fname[PATH_MAX]; ++ struct stat st; ++ char *p; ++ int fd; ++ ++ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { ++ return NULL; ++ } ++ ++ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); ++ ++ fd = open(fname, O_RDONLY); ++ if (fd == -1) { ++ if (strcmp(timezone, "UTC")) { ++ return NULL; ++ } else { ++ *length = sizeof(internal_utc); ++ return internal_utc; ++ } ++ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) { ++ close(fd); ++ return NULL; ++ } ++ ++ *length = st.st_size; ++ p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); ++ close(fd); ++ ++ return p != MAP_FAILED ? p : NULL; ++} ++ ++#endif ++ ++static int inmem_seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb) + { + int left = 0, right = tzdb->index_size - 1; + +@@ -603,9 +1100,49 @@ static int seek_to_tz_position(const uns + return 0; + } + ++static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, ++ char **map, size_t *maplen, ++ const timelib_tzdb *tzdb) ++{ ++#ifdef HAVE_SYSTEM_TZDATA ++ if (tzdb == timezonedb_system) { ++ char *orig; ++ ++ orig = map_tzfile(timezone, maplen); ++ if (orig == NULL) { ++ return 0; ++ } ++ ++ (*tzf) = (unsigned char *)orig; ++ *map = orig; ++ return 1; ++ } ++ else ++#endif ++ { ++ return inmem_seek_to_tz_position(tzf, timezone, tzdb); ++ } ++} ++ + const timelib_tzdb *timelib_builtin_db(void) + { ++#ifdef HAVE_SYSTEM_TZDATA ++ if (timezonedb_system == NULL) { ++ timelib_tzdb *tmp = malloc(sizeof *tmp); ++ ++ tmp->version = "0"; ++ tmp->data = NULL; ++ create_zone_index(tmp); ++ retrieve_zone_version(tmp); ++ system_location_table = create_location_table(); ++ fake_data_segment(tmp, system_location_table); ++ timezonedb_system = tmp; ++ } ++ ++ return timezonedb_system; ++#else + return &timezonedb_builtin; ++#endif + } + + const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count) +@@ -617,7 +1154,32 @@ const timelib_tzdb_index_entry *timelib_ + int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb) + { + const unsigned char *tzf; +- return (seek_to_tz_position(&tzf, timezone, tzdb)); ++ ++#ifdef HAVE_SYSTEM_TZDATA ++ if (tzdb == timezonedb_system) { ++ char fname[PATH_MAX]; ++ struct stat st; ++ ++ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { ++ return 0; ++ } ++ if (!strcmp(timezone, "UTC")) { ++ return 1; ++ } ++ if (system_location_table) { ++ if (find_zone_info(system_location_table, timezone) != NULL) { ++ /* found in cache */ ++ return 1; ++ } ++ } ++ ++ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); ++ ++ return stat(fname, &st) == 0 && is_valid_tzfile(&st, 0); ++ } ++#endif ++ ++ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb)); + } + + static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz) +@@ -662,6 +1224,8 @@ static timelib_tzinfo* timelib_tzinfo_ct + timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code) + { + const unsigned char *tzf; ++ char *memmap = NULL; ++ size_t maplen; + timelib_tzinfo *tmp; + int version; + int transitions_result, types_result; +@@ -669,7 +1233,7 @@ timelib_tzinfo *timelib_parse_tzfile(con + + *error_code = TIMELIB_ERROR_NO_ERROR; + +- if (seek_to_tz_position(&tzf, timezone, tzdb)) { ++ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) { + tmp = timelib_tzinfo_ctor(timezone); + + version = read_preamble(&tzf, tmp, &type); +@@ -712,11 +1276,38 @@ timelib_tzinfo *timelib_parse_tzfile(con + return NULL; + } + ++#ifdef HAVE_SYSTEM_TZDATA ++ if (memmap) { ++ const struct location_info *li; ++ ++ /* TZif-style - grok the location info from the system database, ++ * if possible. */ ++ ++ if ((li = find_zone_info(system_location_table, timezone)) != NULL) { ++ tmp->location.comments = timelib_strdup(li->comment); ++ strncpy(tmp->location.country_code, li->code, 2); ++ tmp->location.longitude = li->longitude; ++ tmp->location.latitude = li->latitude; ++ tmp->bc = 1; ++ } ++ else { ++ set_default_location_and_comments(&tzf, tmp); ++ } ++ ++ /* Now done with the mmap segment - discard it. */ ++ if (memmap != internal_utc) { ++ munmap(memmap, maplen); ++ } ++ } else { ++#endif + if (type == TIMELIB_TZINFO_PHP) { + read_location(&tzf, tmp); + } else { + set_default_location_and_comments(&tzf, tmp); + } ++#ifdef HAVE_SYSTEM_TZDATA ++ } ++#endif + } else { + *error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE; + tmp = NULL; +diff -up ./ext/date/php_date.c.systzdata ./ext/date/php_date.c +--- ./ext/date/php_date.c.systzdata 2024-07-02 15:43:13.000000000 +0200 ++++ ./ext/date/php_date.c 2024-07-03 16:21:20.240786848 +0200 +@@ -487,7 +487,11 @@ PHP_MINFO_FUNCTION(date) + php_info_print_table_row(2, "date/time support", "enabled"); + php_info_print_table_row(2, "timelib version", TIMELIB_ASCII_VERSION); + php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version); ++#ifdef HAVE_SYSTEM_TZDATA ++ php_info_print_table_row(2, "Timezone Database", "system"); ++#else + php_info_print_table_row(2, "Timezone Database", php_date_global_timezone_db_enabled ? "external" : "internal"); ++#endif + php_info_print_table_row(2, "Default timezone", guess_timezone(tzdb)); + php_info_print_table_end(); + diff --git a/php-fpm-www.conf b/php-fpm-www.conf index 604386c..7294d39 100644 --- a/php-fpm-www.conf +++ b/php-fpm-www.conf @@ -35,7 +35,7 @@ group = apache ; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. -listen = 127.0.0.1:9000 +listen = /run/php-fpm/www.sock ; Set listen(2) backlog. ; Default Value: 511 @@ -52,7 +52,7 @@ listen = 127.0.0.1:9000 ; When POSIX Access Control Lists are supported you can set them using ; these options, value is a comma separated list of user/group names. ; When set, listen.owner and listen.group are ignored -;listen.acl_users = apache,nginx +listen.acl_users = apache,nginx ;listen.acl_groups = ; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. diff --git a/php-fpm.service b/php-fpm.service index b68765f..2d96ce7 100644 --- a/php-fpm.service +++ b/php-fpm.service @@ -8,7 +8,6 @@ After=syslog.target network.target [Service] Type=notify -EnvironmentFile=/etc/sysconfig/php-fpm ExecStart=/usr/sbin/php-fpm --nodaemonize ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true diff --git a/php-fpm.sysconfig b/php-fpm.sysconfig deleted file mode 100644 index 04314e1..0000000 --- a/php-fpm.sysconfig +++ /dev/null @@ -1,19 +0,0 @@ -# Additional environment file for php-fpm - -# This file is deprecated when systemd is used and -# will be removed in the future - -# To alter the FPM environment, copy the unit file -# from /usr/lib/systemd/system/php-fpm.service -# to /etc/systemd/system/php-fpm.service -# and add an Environment line - -# With systemd >= 204 you can simply drop a file with the -# suffix .conf in /etc/systemd/system/php-fpm.service.d, with -# [Service] -# Environment=FOO=bar - -# See systemd documentation. -# man systemd.unit -# man systemd.exec - diff --git a/php.conf b/php.conf index 0639c0a..36496ef 100644 --- a/php.conf +++ b/php.conf @@ -50,3 +50,17 @@ DirectoryIndex index.php #php_value opcache.file_cache "/var/lib/php/opcache" + +# Redirect to local php-fpm if mod_php (5 or 7) is not available + + + + # Enable http authorization headers + SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 + + + SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" + + + + diff --git a/php.conf2 b/php.conf2 deleted file mode 100644 index de4900f..0000000 --- a/php.conf2 +++ /dev/null @@ -1,14 +0,0 @@ - -# Redirect to local php-fpm if mod_php (5 or 7) is not available - - - - # Enable http authorization headers - SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 - - - SetHandler "proxy:fcgi://127.0.0.1:9000" - - - - diff --git a/php.ini b/php.ini index 0b5f76d..cdd2c0b 100644 --- a/php.ini +++ b/php.ini @@ -139,16 +139,6 @@ ; Development Value: 1000 ; Production Value: 1000 -; session.sid_bits_per_character -; Default Value: 4 -; Development Value: 5 -; Production Value: 5 - -; session.sid_length -; Default Value: 32 -; Development Value: 26 -; Production Value: 26 - ; short_open_tag ; Default Value: On ; Development Value: Off @@ -1195,9 +1185,6 @@ mysqlnd.collect_memory_statistics = Off ; key. ;mysqlnd.sha256_server_public_key = -[OCI8] -; see /etc/php.d/20-oci8.ini - [PostgreSQL] ; Allow or prevent persistent links. ; https://php.net/pgsql.allow-persistent @@ -1390,15 +1377,6 @@ session.cache_expire = 180 ; https://php.net/session.use-trans-sid session.use_trans_sid = 0 -; Set session ID character length. This value could be between 22 to 256. -; Shorter length than default is supported only for compatibility reason. -; Users should use 32 or more chars. -; https://php.net/session.sid-length -; Default Value: 32 -; Development Value: 26 -; Production Value: 26 -session.sid_length = 26 - ; The URL rewriter will look for URLs in a defined set of HTML tags. ;
is special; if you include them here, the rewriter will ; add a hidden field with the info which is otherwise appended @@ -1424,18 +1402,6 @@ session.trans_sid_tags = "a=href,area=href,frame=src,form=" ; Production Value: "" ;session.trans_sid_hosts="" -; Define how many bits are stored in each character when converting -; the binary hash data to something readable. -; Possible values: -; 4 (4 bits: 0-9, a-f) -; 5 (5 bits: 0-9, a-v) -; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") -; Default Value: 4 -; Development Value: 5 -; Production Value: 5 -; https://php.net/session.hash-bits-per-character -session.sid_bits_per_character = 5 - ; Enable upload progress tracking in $_SESSION ; Default Value: On ; Development Value: On diff --git a/php84.spec b/php84.spec index 5bb03d5..302b913 100644 --- a/php84.spec +++ b/php84.spec @@ -8,19 +8,18 @@ # Please preserve changelog entries # # API/ABI check -%global apiver 20230831 -%global zendver 20230831 -%global pdover 20170320 +%global apiver 20230901 +%global zendver 20230901 +%global pdover 20240423 # Extension version %global fileinfover 1.0.5 -%global oci8ver 3.3.0 %global zipver 1.22.3 # Adds -z now to the linker flags %global _hardened_build 1 # version used for php embedded library soname -%global embed_version 8.3 +%global embed_version 8.4 %global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock) @@ -46,53 +45,23 @@ # arch detection heuristic used by bindir/mysql_config. %global mysql_config %{_libdir}/mysql/mysql_config -# Optional Oracle extensions; pass "--with oci8" etc to rpmbuild. -%bcond_with oci8 - -%bcond_without imap - -%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8 -# switch to bundled library using --without libpcre %bcond_without libpcre -%else -# switch to system library using --with libpcre -%bcond_with libpcre -%endif -# Using qdbm from "remi" for now, see https://bugzilla.redhat.com/2017308 -%if 0%{?fedora} >= 33 || 0%{?rhel} >= 8 %bcond_without qdbm -%else -%bcond_with qdbm -%endif -%if 0%{?fedora} >= 33 || 0%{?rhel} >= 8 -# switch to bundled library using --without libxcrypt %bcond_without libxcrypt -%else -# switch to system library using --with libxcrypt -%bcond_with libxcrypt -%endif # Build firebird extensions, you can disable using --without firebird %bcond_without firebird # Build ZTS extension or only NTS using --without zts -%ifarch x86_64 -%bcond_without zts -%else %bcond_with zts -%endif # Debug build, using --with debug %bcond_with debug -# build with system tzdata (2021 required) -%if 0%{?fedora} >= 33 || 0%{?rhel} >= 7 +# build with system tzdata %bcond_without tzdata -%else -%bcond_with tzdata -%endif # /usr/sbin/a# build with libiodbc instead of unixODBC %bcond_with iodbc @@ -108,25 +77,12 @@ %global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) -# httpd 2.4.10 with httpd-filesystem and sethandler support -%if 0%{?fedora} >= 21 || 0%{?rhel} >= 8 -%global with_httpd2410 1 -%else -%global with_httpd2410 0 -%endif -# nginx 1.6 with nginx-filesystem -%if 0%{?fedora} >= 21 || 0%{?rhel} >= 8 -%global with_nginx 1 -%else -%global with_nginx 0 -%endif - %bcond_without dtrace %bcond_without libgd %bcond_with zip -%global upver 8.3.12 -%global rcver RC1 +%global upver 8.4.0 +%global rcver beta5 # TODO set PHP_EXTRA_VERSION for EOL version Summary: PHP scripting language for creating dynamic web sites @@ -151,9 +107,7 @@ Source4: php-fpm.conf Source5: php-fpm-www.conf Source6: php-fpm.service Source7: php-fpm.logrotate -Source8: php-fpm.sysconfig Source9: php.modconf -Source11: php.conf2 Source12: php-fpm.wants Source13: nginx-fpm.conf Source14: nginx-php.conf @@ -163,40 +117,34 @@ Source21: https://www.php.net/distributions/php-%{upver}%{?rcver}.tar.xz.asc # Configuration files for some extensions Source50: 10-opcache.ini Source51: opcache-default.blacklist -Source52: 20-oci8.ini Source53: 20-ffi.ini # Build fixes -Patch1: php-7.4.0-httpd.patch -Patch5: php-7.2.0-includedir.patch -Patch6: php-8.0.0-embed.patch -Patch8: php-8.1.0-libdb.patch -# RHEL backports -Patch10: php-8.2.0-curl.patch +Patch1: php-8.4.0-httpd.patch +Patch5: php-8.4.0-includedir.patch +Patch6: php-8.4.0-embed.patch +Patch8: php-8.4.0-libdb.patch # Functional changes # Use system nikic/php-parser Patch41: php-8.3.3-parser.patch # use system tzdata -Patch42: php-8.3.11-systzdata-v24.patch +Patch42: php-8.4.0-systzdata-v24.patch # See http://bugs.php.net/53436 # + display PHP version backported from 8.4 -Patch43: php-7.4.0-phpize.patch +Patch43: php-8.4.0-phpize.patch # Use -lldap_r for OpenLDAP -Patch45: php-7.4.0-ldap_r.patch +Patch45: php-8.4.0-ldap_r.patch # Ignore unsupported "threads" option on password_hash Patch46: php-8.0.7-argon2.patch # drop "Configure command" from phpinfo output # and only use gcc (instead of full version) -Patch47: php-8.1.0-phpinfo.patch +Patch47: php-8.4.0-phpinfo.patch # Always warn about missing curve_name # Both Fedora and RHEL do not support arbitrary EC parameters Patch48: php-8.3.0-openssl-ec-param.patch -# Fix libidobc headers path -Patch49: php-8.2.0-iodbc.patch # RC Patch -Patch91: php-7.2.0-oci8conf.patch # Upstream fixes (100+) @@ -213,14 +161,10 @@ BuildRequires: bzip2-devel BuildRequires: pkgconfig(libcurl) >= 7.29.0 BuildRequires: httpd-devel >= 2.0.46-1 BuildRequires: pam-devel -%if %{with_httpd2410} # to ensure we are using httpd with filesystem feature (see #1081453) BuildRequires: httpd-filesystem -%endif -%if %{with_nginx} # to ensure we are using nginx with filesystem feature (see #1142298) BuildRequires: nginx-filesystem -%endif BuildRequires: %{?dtsprefix}libstdc++-devel # no pkgconfig to avoid compat-openssl10 BuildRequires: openssl-devel >= 1.0.2 @@ -259,12 +203,6 @@ BuildRequires: /bin/ps BuildRequires: tzdata %endif -%if 0%{?rhel} == 7 -Obsoletes: php53, php53u, php54, php54w, php55u, php55w, php56u, php56w, mod_php70u, php70w, mod_php71u, mod_php71w, mod_php72u, mod_php72w -Obsoletes: mod_php73, mod_php73w -Obsoletes: mod_php74, mod_php74w -Obsoletes: mod_php80 -%endif %if %{with zts} Obsoletes: php-zts < 5.3.7 Provides: php-zts = %{version}-%{release} @@ -275,14 +213,9 @@ Requires: httpd-mmn = %{_httpd_mmn} Provides: mod_php = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release} # To ensure correct /var/lib/php/session ownership: -%if %{with_httpd2410} Requires(pre): httpd-filesystem -%else -Requires(pre): httpd -%endif # php engine for Apache httpd webserver Provides: php(httpd) -%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8 # For backwards-compatibility, require php-cli for the time being: Recommends: php-cli%{?_isa} = %{version}-%{release} # httpd have threaded MPM by default @@ -293,12 +226,6 @@ Recommends: php-opcache%{?_isa} = %{version}-%{release} Recommends: php-pdo%{?_isa} = %{version}-%{release} Recommends: php-sodium%{?_isa} = %{version}-%{release} Recommends: php-xml%{?_isa} = %{version}-%{release} -%else -# For backwards-compatibility, require php-cli for the time being: -Requires: php-cli%{?_isa} = %{version}-%{release} -# For ARGON2 password -Requires: php-sodium%{?_isa} = %{version}-%{release} -%endif %description @@ -320,13 +247,6 @@ Requires: php-common%{?_isa} = %{version}-%{release} Provides: php-cgi = %{version}-%{release}, php-cgi%{?_isa} = %{version}-%{release} Provides: php-pcntl, php-pcntl%{?_isa} Provides: php-readline, php-readline%{?_isa} -%if 0%{?rhel} == 7 -Obsoletes: php53-cli, php53u-cli, php54-cli, php54w-cli, php55u-cli, php55w-cli, php56u-cli, php56w-cli -Obsoletes: php70u-cli, php70w-cli, php71u-cli, php71w-cli, php72u-cli, php72w-cli -Obsoletes: php73-cli, php73w-cli -Obsoletes: php74-cli, php74w-cli -Obsoletes: php80-cli -%endif %description cli The php-cli package contains the command-line interface @@ -336,12 +256,7 @@ executing PHP scripts, /usr/bin/php, and the CGI interface. %package dbg Summary: The interactive PHP debugger Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php56u-dbg, php56w-phpdbg, php70u-dbg, php70w-phpdbg, php71u-dbg, php71w-phpdbg, php72u-dbg, php72w-phpdbg -Obsoletes: php73-dbg, php73w-phpdbg -Obsoletes: php74-dbg, php74w-phpdbg -Obsoletes: php80-dbg -%endif + %description dbg The php-dbg package contains the interactive PHP debugger. @@ -357,7 +272,6 @@ Requires: php-common%{?_isa} = %{version}-%{release} # is not valid. We can use %%post because this particular %%triggerun script # should fire just after this package is installed. Requires(post): systemd-sysv -%if %{with_httpd2410} # To ensure correct /var/lib/php/session ownership: Requires(pre): httpd-filesystem # For php.conf in /etc/httpd/conf.d @@ -365,21 +279,9 @@ Requires(pre): httpd-filesystem Requires: httpd-filesystem >= 2.4.10 # php engine for Apache httpd webserver Provides: php(httpd) -%else -Requires(pre): /usr/sbin/useradd -%endif -%if %{with_nginx} # for /etc/nginx ownership # Temporarily not mandatory to allow nginx for nginx repo Recommends: nginx-filesystem -%endif -%if 0%{?rhel} == 7 -Obsoletes: php53-fpm, php53u-fpm, php54-fpm, php54w-fpm, php55u-fpm, php55w-fpm, php56u-fpm, php56w-fpm -Obsoletes: php70u-fpm, php70w-fpm, php71u-fpm, php71w-fpm, php72u-fpm, php72w-fpm -Obsoletes: php73-fpm, php73w-fpm -Obsoletes: php74-fpm, php74w-fpm -Obsoletes: php80-fpm -%endif %description fpm PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI @@ -390,13 +292,6 @@ any size, especially busier sites. %package litespeed Summary: LiteSpeed Web Server PHP support Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-litespeed, php53u-litespeed, php54-litespeed, php54w-litespeed, php55u-litespeed, php55w-litespeed, php56u-litespeed, php56w-litespeed -Obsoletes: php70u-litespeed, php70w-litespeed, php71u-litespeed, php71w-litespeed, php72u-litespeed, php72w-litespeed -Obsoletes: php73-litespeed, php73w-litespeed -Obsoletes: php74-litespeed, php74w-litespeed -Obsoletes: php80-litespeed -%endif %description litespeed The php-litespeed package provides the %{_bindir}/lsphp command @@ -461,25 +356,6 @@ Obsoletes: php-pecl-Fileinfo < 1.0.5 Provides: php-pecl-Fileinfo = %{fileinfover}, php-pecl-Fileinfo%{?_isa} = %{fileinfover} Provides: php-pecl(Fileinfo) = %{fileinfover}, php-pecl(Fileinfo)%{?_isa} = %{fileinfover} Obsoletes: php-mhash < 5.3.0 -%if 0%{?rhel} == 7 -Obsoletes: php53-mhash, php53u-mhash -Obsoletes: php53-common, php53u-common, php54-common, php54w-common, php55u-common, php55w-common, php56u-common, php56w-common -Obsoletes: php70u-common, php70w-common, php71u-common, php71w-common, php72u-common, php72w-common -Obsoletes: php73-common, php73w-common -Obsoletes: php74-common, php74w-common -Obsoletes: php80-common -# Json -Obsoletes: php53-json, php53u-json, php54-json, php54w-json, php55u-json, php55w-json, php56u-json, php56w-json -Obsoletes: php55u-pecl-jsonc, php56u-pecl-jsonc -Obsoletes: php70u-json, php70w-json, php71u-json, php71w-json, php72u-json, php72w-json -Obsoletes: php73-json, php73w-json -Obsoletes: php74-json, php74w-json -# Xmlrpc -Obsoletes: php53-xmlrpc, php53u-xmlrpc, php54-xmlrpc, php54w-xmlrpc, php55u-xmlrpc, php55w-xmlrpc, php56u-xmlrpc, php56w-xmlrpc -Obsoletes: php70u-xmlrpc, php70w-xmlrpc, php71u-xmlrpc, php71w-xmlrpc, php72u-xmlrpc, php72w-xmlrpc -Obsoletes: php73-xmlrpc, php73w-xmlrpc -Obsoletes: php74-xmlrpc, php74w-xmlrpc -%endif %description common The php-common package contains files used by both the php @@ -509,17 +385,7 @@ Obsoletes: php-pecl-jsonc-devel < %{version} Provides: php-zts-devel = %{version}-%{release} Provides: php-zts-devel%{?_isa} = %{version}-%{release} %endif -%if 0%{?rhel} == 7 -Obsoletes: php53-devel, php53u-devel, php54-devel, php54w-devel, php55u-devel, php55w-devel, php56u-devel, php56w-devel -Obsoletes: php55u-pecl-jsonc-devel, php56u-pecl-jsonc-devel -Obsoletes: php70u-devel, php70w-devel, php71u-devel, php71w-devel, php72u-devel, php72w-devel -Obsoletes: php73-devel, php73w-devel -Obsoletes: php74-devel, php74w-devel -Obsoletes: php80-devel -%endif -%if 0%{?fedora} || 0%{?rhel} >= 8 Recommends: php-nikic-php-parser5 >= 5.0.0 -%endif %description devel The php-devel package contains the files needed for building PHP @@ -536,13 +402,6 @@ Provides: php-pecl-zendopcache = %{version} Provides: php-pecl-zendopcache%{?_isa} = %{version} Provides: php-pecl(opcache) = %{version} Provides: php-pecl(opcache)%{?_isa} = %{version} -%if 0%{?rhel} == 7 -Obsoletes: php55u-opcache, php55w-opcache, php56u-opcache, php56w-opcache -Obsoletes: php70u-opcache, php70w-opcache, php71u-opcache, php71w-opcache, php72u-opcache, php72w-opcache -Obsoletes: php73-opcache, php73w-opcache -Obsoletes: php74-opcache, php74w-opcache -Obsoletes: php80-opcache -%endif %description opcache The Zend OPcache provides faster PHP execution through opcode caching and @@ -551,30 +410,6 @@ bytecode in the shared memory. This eliminates the stages of reading code from the disk and compiling it on future access. In addition, it applies a few bytecode optimization patterns that make code execution faster. -%if %{with imap} -%package imap -Summary: A module for PHP applications that use IMAP -# All files licensed under PHP version 3.01 -License: PHP-3.01 -Requires: php-common%{?_isa} = %{version}-%{release} -BuildRequires: pkgconfig(krb5) -BuildRequires: pkgconfig(krb5-gssapi) -BuildRequires: openssl-devel >= 1.0.2 -BuildRequires: libc-client-devel -%if 0%{?rhel} == 7 -Obsoletes: php53-imap, php53u-imap, php54-imap, php54w-imap, php55u-imap, php55w-imap, php56u-imap, php56w-imap -Obsoletes: php70u-imap, php70w-imap, php71u-imap, php71w-imap, php72u-imap, php72w-imap -Obsoletes: php73-imap, php73w-imap -Obsoletes: php74-imap, php74w-imap -Obsoletes: php80-imap -%endif - -%description imap -The php-imap module will add IMAP (Internet Message Access Protocol) -support to PHP. IMAP is a protocol for retrieving and uploading e-mail -messages on mail servers. PHP is an HTML-embedded scripting language. -%endif - %package ldap Summary: A module for PHP applications that use LDAP # All files licensed under PHP version 3.01 @@ -583,13 +418,6 @@ Requires: php-common%{?_isa} = %{version}-%{release} BuildRequires: pkgconfig(libsasl2) BuildRequires: openldap-devel BuildRequires: openssl-devel >= 1.0.2 -%if 0%{?rhel} == 7 -Obsoletes: php53-ldap, php53u-ldap, php54-ldap, php54w-ldap, php55u-ldap, php55w-ldap, php56u-ldap, php56w-ldap -Obsoletes: php70u-ldap, php70w-ldap, php71u-ldap, php71w-ldap, php72u-ldap, php72w-ldap -Obsoletes: php73-ldap, php73w-ldap -Obsoletes: php74-ldap, php74w-ldap -Obsoletes: php80-ldap -%endif %description ldap The php-ldap adds Lightweight Directory Access Protocol (LDAP) @@ -607,13 +435,6 @@ Provides: php-pdo-abi = %{pdover}-%{__isa_bits} Provides: php(pdo-abi) = %{pdover}-%{__isa_bits} Provides: php-sqlite3, php-sqlite3%{?_isa} Provides: php-pdo_sqlite, php-pdo_sqlite%{?_isa} -%if 0%{?rhel} == 7 -Obsoletes: php53-pdo, php53u-pdo, php54-pdo, php54w-pdo, php55u-pdo, php55w-pdo, php56u-pdo, php56w-pdo -Obsoletes: php70u-pdo, php70w-pdo, php71u-pdo, php71w-pdo, php72u-pdo, php72w-pdo -Obsoletes: php73-pdo, php73w-pdo -Obsoletes: php74-pdo, php74w-pdo -Obsoletes: php80-pdo -%endif %description pdo The php-pdo package contains a dynamic shared object that will add @@ -631,15 +452,6 @@ Provides: php-mysqli = %{version}-%{release} Provides: php-mysqli%{?_isa} = %{version}-%{release} Provides: php-pdo_mysql, php-pdo_mysql%{?_isa} Obsoletes: php-mysql < %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-mysqlnd, php53u-mysqlnd, php54-mysqlnd, php54w-mysqlnd, php55u-mysqlnd, php55w-mysqlnd, php56u-mysqlnd, php56w-mysqlnd -Obsoletes: php70u-mysqlnd, php70w-mysqlnd, php71u-mysqlnd, php71w-mysqlnd, php72u-mysqlnd, php72w-mysqlnd -Obsoletes: php73-mysqlnd, php73w-mysqlnd -Obsoletes: php74-mysqlnd, php74w-mysqlnd -Obsoletes: php80-mysqlnd -Obsoletes: php53-mysql, php53u-mysql, php54-mysql, php54w-mysql, php55u-mysql, php55w-mysql, php56u-mysql, php56w-mysql -Obsoletes: php70u-mysql, php70w-mysql, php71u-mysql, php71w-mysql, php72u-mysql, php72w-mysql -%endif %description mysqlnd The php-mysqlnd package contains a dynamic shared object that will add @@ -660,13 +472,6 @@ Provides: php-pdo_pgsql, php-pdo_pgsql%{?_isa} BuildRequires: krb5-devel BuildRequires: openssl-devel >= 1.0.2 BuildRequires: postgresql-devel -%if 0%{?rhel} == 7 -Obsoletes: php53-pgsql, php53u-pgsql, php54-pgsql, php54w-pgsql, php55u-pgsql, php55w-pgsql, php56u-pgsql, php56w-pgsql -Obsoletes: php70u-pgsql, php70w-pgsql, php71u-pgsql, php71w-pgsql, php72u-pgsql, php72w-pgsql -Obsoletes: php73-pgsql, php73w-pgsql -Obsoletes: php74-pgsql, php74w-pgsql -Obsoletes: php80-pgsql -%endif %description pgsql The php-pgsql package add PostgreSQL database support to PHP. @@ -686,13 +491,6 @@ Provides: php-shmop, php-shmop%{?_isa} Provides: php-sysvsem, php-sysvsem%{?_isa} Provides: php-sysvshm, php-sysvshm%{?_isa} Provides: php-sysvmsg, php-sysvmsg%{?_isa} -%if 0%{?rhel} == 7 -Obsoletes: php53-process, php53u-process, php54-process, php54w-process, php55u-process, php55w-process, php56u-process, php56w-process -Obsoletes: php70u-process, php70w-process, php71u-process, php71w-process, php72u-process, php72w-process -Obsoletes: php73-process, php73w-process -Obsoletes: php74-process, php74w-process -Obsoletes: php80-process -%endif %description process The php-process package contains dynamic shared objects which add @@ -712,13 +510,6 @@ BuildRequires: pkgconfig(libiodbc) %else BuildRequires: pkgconfig(odbc) %endif -%if 0%{?rhel} == 7 -Obsoletes: php53-odbc, php53u-odbc, php54-odbc, php54w-odbc, php55u-odbc, php55w-odbc, php56u-odbc, php56w-odbc -Obsoletes: php70u-odbc, php70w-odbc, php71u-odbc, php71w-odbc, php72u-odbc, php72w-odbc -Obsoletes: php73-odbc, php73w-odbc -Obsoletes: php74-odbc, php74w-odbc -Obsoletes: php80-odbc -%endif %description odbc The php-odbc package contains a dynamic shared object that will add @@ -738,13 +529,6 @@ Summary: A module for PHP applications that use the SOAP protocol License: PHP-3.01 Requires: php-common%{?_isa} = %{version}-%{release} BuildRequires: pkgconfig(libxml-2.0) -%if 0%{?rhel} == 7 -Obsoletes: php53-soap, php53u-soap, php54-soap, php54w-soap, php55u-soap, php55w-soap, php56u-soap, php56w-soap -Obsoletes: php70u-soap, php70w-soap, php71u-soap, php71w-soap, php72u-soap, php72w-soap -Obsoletes: php73-soap, php73w-soap -Obsoletes: php74-soap, php74w-soap -Obsoletes: php80-soap -%endif %description soap The php-soap package contains a dynamic shared object that will add @@ -759,76 +543,18 @@ BuildRequires: firebird-devel Requires: php-pdo%{?_isa} = %{version}-%{release} Provides: php_database Provides: php-pdo_firebird, php-pdo_firebird%{?_isa} -%if 0%{?rhel} == 7 -Obsoletes: php53-interbase, php53u-interbase, php54-interbase, php54w-interbase, php55u-interbase, php55w-interbase, php56u-interbase, php56w-interbase -Obsoletes: php70u-interbase, php70w-interbase, php71u-interbase, php71w-interbase, php72u-interbase, php72w-interbase -Obsoletes: php73-interbase, php73w-interbase -Obsoletes: php74-pdo-firebird, php74w-pdo-firebird -Obsoletes: php80-pdo-firebird -%endif %description pdo-firebird The php-pdo-firebird package contains the PDO driver for Interbase/Firebird databases. %endif -%if %{with oci8} -%package oci8 -Summary: A module for PHP applications that use OCI8 databases -# All files licensed under PHP version 3.01 -License: PHP-3.01 -%ifarch aarch64 -BuildRequires: oracle-instantclient%{oraclever}-devel -# Should requires libclntsh.so.19.1()(aarch-64), but it's not provided by Oracle RPM. -Requires: libclntsh.so.%{oraclelib} -AutoReq: 0 -%else -BuildRequires: (oracle-instantclient-devel >= %{oraclever} with oracle-instantclient-devel < %{oraclemax}) -%endif -Requires: php-pdo%{?_isa} = %{version}-%{release} -Provides: php_database -Provides: php-pdo_oci -Provides: php-pdo_oci%{?_isa} -Obsoletes: php-pecl-oci8 <= %{oci8ver} -Conflicts: php-pecl-oci8 > %{oci8ver} -Provides: php-pecl(oci8) = %{oci8ver} -Provides: php-pecl(oci8)%{?_isa} = %{oci8ver} -%if 0%{?rhel} == 7 -Obsoletes: php53-oci8, php53u-oci8, php54-oci8, php54w-oci8, php55u-oci8, php55w-oci8, php56u-oci8, php56w-oci8 -Obsoletes: php70u-oci8, php70w-oci8, php71u-oci8, php71w-oci8, php72u-oci8, php72w-oci8 -Obsoletes: php73-oci8, php73w-oci8 -Obsoletes: php74-oci8, php74w-oci8 -Obsoletes: php80-oci8 -%endif - -%description oci8 -The php-oci8 packages provides the OCI8 extension version %{oci8ver} -and the PDO driver to access Oracle Database. - -The extension is linked with Oracle client libraries %{oraclever} -(Oracle Instant Client). For details, see Oracle's note -"Oracle Client / Server Interoperability Support" (ID 207303.1). - -You must install libclntsh.so.%{oraclelib} to use this package, -provided by Oracle Instant Client RPM available from Oracle on: -https://www.oracle.com/database/technologies/instant-client/downloads.html - -Documentation is at http://php.net/oci8 and http://php.net/pdo_oci -%endif - %package snmp Summary: A module for PHP applications that query SNMP-managed devices # All files licensed under PHP version 3.01 License: PHP-3.01 Requires: php-common%{?_isa} = %{version}-%{release}, net-snmp BuildRequires: net-snmp-devel -%if 0%{?rhel} == 7 -Obsoletes: php53-snmp, php53u-snmp, php54-snmp, php54w-snmp, php55u-snmp, php55w-snmp, php56u-snmp, php56w-snmp -Obsoletes: php70u-snmp, php70w-snmp, php71u-snmp, php71w-snmp, php72u-snmp, php72w-snmp -Obsoletes: php73-snmp, php73w-snmp -Obsoletes: php74-snmp, php74w-snmp -Obsoletes: php80-snmp -%endif %description snmp The php-snmp package contains a dynamic shared object that will add @@ -850,13 +576,6 @@ Provides: php-xsl, php-xsl%{?_isa} BuildRequires: pkgconfig(libxslt) >= 1.1 BuildRequires: pkgconfig(libexslt) BuildRequires: pkgconfig(libxml-2.0) >= 2.7.6 -%if 0%{?rhel} == 7 -Obsoletes: php53-xml, php53u-xml, php54-xml, php54w-xml, php55u-xml, php55w-xml, php56u-xml, php56w-xml -Obsoletes: php70u-xml, php70w-xml, php71u-xml, php71w-xml, php72u-xml, php72w-xml -Obsoletes: php73-xml, php73w-xml -Obsoletes: php74-xml, php74w-xml -Obsoletes: php80-xml -%endif %description xml The php-xml package contains dynamic shared objects which add support @@ -877,13 +596,6 @@ BuildRequires: oniguruma-devel %endif Provides: bundled(libmbfl) = 1.3.2 Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-mbstring, php53u-mbstring, php54-mbstring, php54w-mbstring, php55u-mbstring, php55w-mbstring, php56u-mbstring, php56w-mbstring -Obsoletes: php70u-mbstring, php70w-mbstring, php71u-mbstring, php71w-mbstring, php72u-mbstring, php72w-mbstring -Obsoletes: php73-mbstring, php73w-mbstring -Obsoletes: php74-mbstring, php74w-mbstring -Obsoletes: php80-mbstring -%endif %description mbstring The php-mbstring package contains a dynamic shared object that will add @@ -912,13 +624,6 @@ BuildRequires: pkgconfig(libwebp) BuildRequires: pkgconfig(libavif) Provides: bundled(gd) = 2.0.35 %endif -%if 0%{?rhel} == 7 -Obsoletes: php53-gd, php53u-gd, php54-gd, php54w-gd, php55u-gd, php55w-gd, php56u-gd, php56w-gd -Obsoletes: php70u-gd, php70w-gd, php71u-gd, php71w-gd, php72u-gd, php72w-gd -Obsoletes: php73-gd, php73w-gd -Obsoletes: php74-gd, php74w-gd -Obsoletes: php80-gd -%endif %description gd The php-gd package contains a dynamic shared object that will add @@ -930,13 +635,6 @@ Summary: A module for PHP applications for using the bcmath library # libbcmath is licensed under LGPLv2+ License: PHP-3.01 AND LGPL-2.1-or-later Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-bcmath, php53u-bcmath, php54-bcmath, php54w-bcmath, php55u-bcmath, php55w-bcmath, php56u-bcmath, php56w-bcmath -Obsoletes: php70u-bcmath, php70w-bcmath, php71u-bcmath, php71w-bcmath, php72u-bcmath, php72w-bcmath -Obsoletes: php73-bcmath, php73w-bcmath -Obsoletes: php74-bcmath, php74w-bcmath -Obsoletes: php80-bcmath -%endif Provides: bundled(libbcmath) %description bcmath @@ -949,13 +647,6 @@ Summary: A module for PHP applications for using the GNU MP library License: PHP-3.01 BuildRequires: gmp-devel Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-gmp, php53u-gmp, php54-gmp, php54w-gmp, php55u-gmp, php55w-gmp, php56u-gmp, php56w-gmp -Obsoletes: php70u-gmp, php70w-gmp, php71u-gmp, php71w-gmp, php72u-gmp, php72w-gmp -Obsoletes: php73-gmp, php73w-gmp -Obsoletes: php74-gmp, php74w-gmp -Obsoletes: php80-gmp -%endif %description gmp These functions allow you to work with arbitrary-length integers @@ -972,13 +663,6 @@ BuildRequires: lmdb-devel BuildRequires: qdbm-devel %endif Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-dba, php53u-dba, php54-dba, php54w-dba, php55u-dba, php55w-dba, php56u-dba, php56w-dba -Obsoletes: php70u-dba, php70w-dba, php71u-dba, php71w-dba, php72u-dba, php72w-dba -Obsoletes: php73-dba, php73w-dba -Obsoletes: php74-dba, php74w-dba -Obsoletes: php80-dba -%endif %description dba The php-dba package contains a dynamic shared object that will add @@ -990,13 +674,6 @@ Summary: Standard PHP module provides tidy library support License: PHP-3.01 Requires: php-common%{?_isa} = %{version}-%{release} BuildRequires: libtidy-devel -%if 0%{?rhel} == 7 -Obsoletes: php53-tidy, php53u-tidy, php54-tidy, php54w-tidy, php55u-tidy, php55w-tidy, php56u-tidy, php56w-tidy -Obsoletes: php70u-tidy, php70w-tidy, php71u-tidy, php71w-tidy, php72u-tidy, php72w-tidy -Obsoletes: php73-tidy, php73w-tidy -Obsoletes: php74-tidy, php74w-tidy -Obsoletes: php80-tidy -%endif %description tidy The php-tidy package contains a dynamic shared object that will add @@ -1010,13 +687,6 @@ Requires: php-pdo%{?_isa} = %{version}-%{release} BuildRequires: freetds-devel >= 0.91 Provides: php-pdo_dblib, php-pdo_dblib%{?_isa} Obsoletes: php-mssql < %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-mssql, php53u-mssql, php54-mssql, php54w-mssql, php55u-mssql, php55w-mssql, php56u-mssql, php56w-mssql -Obsoletes: php70u-pdo-dblib, php70w-pdo_dblib, php71u-pdo-dblib, php71w-pdo_dblib, php72u-pdo-dblib, php72w-pdo_dblib -Obsoletes: php73-pdo-dblib, php73w-pdo_dblib -Obsoletes: php74-pdo-dblib, php74w-pdo_dblib -Obsoletes: php80-pdo-dblib -%endif %description pdo-dblib The php-pdo-dblib package contains a dynamic shared object @@ -1029,36 +699,11 @@ Requires: php-common%{?_isa} = %{version}-%{release} # doing a real -devel package for just the .so symlink is a bit overkill Provides: php-embedded-devel = %{version}-%{release} Provides: php-embedded-devel%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php53-embedded, php53u-embedded, php54-embedded, php54w-embedded, php55u-embedded, php55w-embedded, php56u-embedded, php56w-embedded -Obsoletes: php70u-embedded, php70w-embedded, php71u-embedded, php71w-embedded, php72u-embedded, php72w-embedded -Obsoletes: php73-embedded, php73w-embedded -Obsoletes: php74-embedded, php74w-embedded -Obsoletes: php80-embedded -%endif %description embedded The php-embedded package contains a library which can be embedded into applications to provide PHP scripting language support. -%package pspell -Summary: A module for PHP applications for using pspell interfaces -# All files licensed under PHP version 3.01 -License: PHP-3.01 -Requires: php-common%{?_isa} = %{version}-%{release} -BuildRequires: aspell-devel >= 0.50.0 -%if 0%{?rhel} == 7 -Obsoletes: php53-pspell, php53u-pspell, php54-pspell, php54w-pspell, php55u-pspell, php55w-pspell, php56u-pspell, php56w-pspell -Obsoletes: php70u-pspell, php70w-pspell, php71u-pspell, php71w-pspell, php72u-pspell, php72w-pspell -Obsoletes: php73-pspell, php73w-pspell -Obsoletes: php74-pspell, php74w-pspell -Obsoletes: php80-pspell -%endif - -%description pspell -The php-pspell package contains a dynamic shared object that will add -support for using the pspell library to PHP. - %package intl Summary: Internationalization extension for PHP applications # All files licensed under PHP version 3.01 @@ -1067,13 +712,6 @@ Requires: php-common%{?_isa} = %{version}-%{release} BuildRequires: pkgconfig(icu-i18n) >= 74 BuildRequires: pkgconfig(icu-io) >= 74 BuildRequires: pkgconfig(icu-uc) >= 74 -%if 0%{?rhel} == 7 -Obsoletes: php53-intl, php53u-intl, php54-intl, php54w-intl, php55u-intl, php55w-intl, php56u-intl, php56w-intl -Obsoletes: php70u-intl, php70w-intl, php71u-intl, php71w-intl, php72u-intl, php72w-intl -Obsoletes: php73-intl, php73w-intl -Obsoletes: php74-intl, php74w-intl -Obsoletes: php80-intl -%endif %description intl The php-intl package contains a dynamic shared object that will add @@ -1085,13 +723,6 @@ Summary: Enchant spelling extension for PHP applications License: PHP-3.01 Requires: php-common%{?_isa} = %{version}-%{release} BuildRequires: pkgconfig(enchant-2) -%if 0%{?rhel} == 7 -Obsoletes: php53-enchant, php53u-enchant, php54-enchant, php54w-enchant, php55u-enchant, php55w-enchant, php56u-enchant, php56w-enchant -Obsoletes: php70u-enchant, php70w-enchant, php71u-enchant, php71w-enchant, php72u-enchant, php72w-enchant -Obsoletes: php73-enchant, php73w-enchant -Obsoletes: php74-enchant, php74w-enchant -Obsoletes: php80-enchant -%endif %description enchant The php-enchant package contains a dynamic shared object that will add @@ -1108,13 +739,6 @@ Provides: php-pecl(zip) = %{zipver} Provides: php-pecl(zip)%{?_isa} = %{zipver} Provides: php-pecl-zip = %{zipver} Provides: php-pecl-zip%{?_isa} = %{zipver} -%if 0%{?rhel} == 7 -Obsoletes: php53-zip, php53u-zip, php54-zip, php54w-zip, php55u-zip, php55w-zip, php56u-zip, php56w-zip -Obsoletes: php70u-zip, php70w-zip, php71u-zip, php71w-zip, php72u-zip, php72w-zip -Obsoletes: php73-zip, php73w-zip -Obsoletes: php74-zip, php74w-zip -Obsoletes: php80-zip -%endif BuildRequires: pkgconfig(libzip) >= 0.11 %description zip @@ -1133,12 +757,6 @@ Requires: php-common%{?_isa} = %{version}-%{release} Obsoletes: php-pecl-libsodium2 < 3 Provides: php-pecl(libsodium) = %{version} Provides: php-pecl(libsodium)%{?_isa} = %{version} -%if 0%{?rhel} == 7 -Obsoletes: php72u-sodium, php72w-sodium -Obsoletes: php73-sodium, php73w-sodium -Obsoletes: php74-sodium, php74w-sodium -Obsoletes: php80-sodium -%endif %description sodium The php-sodium package provides a simple, @@ -1152,10 +770,6 @@ License: PHP-3.01 BuildRequires: pkgconfig(libffi) Requires: php-common%{?_isa} = %{version}-%{release} -%if 0%{?rhel} == 7 -Obsoletes: php74-ffi, php74w-ffi -Obsoletes: php80-ffi -%endif %description ffi FFI is one of the features that made Python and LuaJIT very useful for fast @@ -1171,9 +785,6 @@ in pure PHP. %if %{with lsws} : With Litespeed SAPI %endif -%if %{with oci8} -: With Oracle extensions -%endif %if %{with firebird} : With pdo_firebird extension %endif @@ -1211,9 +822,6 @@ in pure PHP. %patch -P5 -p1 -b .includedir %patch -P6 -p1 -b .embed %patch -P8 -p1 -b .libdb -%if 0%{?rhel} == 7 -%patch -P10 -p1 -b .curltls -%endif %patch -P41 -p1 -b .syslib %if %{with tzdata} @@ -1224,9 +832,6 @@ in pure PHP. %patch -P46 -p1 -b .argon2 %patch -P47 -p1 -b .phpinfo %patch -P48 -p1 -b .ec-param -%patch -P49 -p1 -b .iodbc - -%patch -P91 -p1 -b .remi-oci8 # upstream patches @@ -1321,13 +926,6 @@ if test "x${vpdo}" != "x%{pdover}"; then fi # Check for some extension version -ver=$(sed -n '/#define PHP_OCI8_VERSION /{s/.* "//;s/".*$//;p}' ext/oci8/php_oci8.h) -if test "$ver" != "%{oci8ver}"; then - : Error: Upstream OCI8 version is now ${ver}, expecting %{oci8ver}. - : Update the oci8ver macro and rebuild. - exit 1 -fi - ver=$(sed -n '/#define PHP_ZIP_VERSION /{s/.* "//;s/".*$//;p}' ext/zip/php_zip.h) if test "$ver" != "%{zipver}"; then : Error: Upstream ZIP version is now ${ver}, expecting %{zipver}. @@ -1351,7 +949,7 @@ find . -name \*.[ch] -exec chmod 644 {} \; chmod 644 README.* # Some extensions have their own configuration file -cp %{SOURCE50} %{SOURCE51} %{SOURCE52} %{SOURCE53} . +cp %{SOURCE50} %{SOURCE51} %{SOURCE53} . # Regenerated bison files # to force, rm Zend/zend_{language,ini}_parser.[ch] @@ -1436,6 +1034,9 @@ ln -sf ../configure --with-exec-dir=%{_bindir} \ --without-gdbm \ --with-openssl \ +%if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 + --with-openssl-argon2 \ +%endif --with-system-ciphers \ %if %{with libpcre} --with-external-pcre \ @@ -1445,7 +1046,6 @@ ln -sf ../configure %endif --with-zlib \ --with-layout=GNU \ - --with-kerberos \ --with-libxml \ %if %{with tzdata} --with-system-tzdata \ @@ -1478,9 +1078,6 @@ build --libdir=%{_libdir}/php \ --enable-opcache-file \ --with-capstone \ --enable-phpdbg --enable-phpdbg-readline \ -%if %{with imap} - --with-imap=shared --with-imap-ssl \ -%endif --enable-mbstring=shared \ --enable-mbregex \ --enable-gd=shared \ @@ -1512,10 +1109,6 @@ build --libdir=%{_libdir}/php \ --enable-mysqlnd=shared \ --with-mysqli=shared,mysqlnd \ --with-mysql-sock=%{mysql_sock} \ -%if %{with oci8} - --with-oci8=shared,instantclient,%{_prefix}/lib/oracle/%{oracledir}/client64/lib,%{oraclever} \ - --with-pdo-oci=shared,instantclient,%{_prefix}/lib/oracle/%{oracledir}/client64/lib,%{oraclever} \ -%endif %if %{with firebird} --with-pdo-firebird=shared \ %endif @@ -1530,11 +1123,11 @@ build --libdir=%{_libdir}/php \ --with-curl=shared \ --enable-pdo=shared \ %if %{with iodbc} - --with-iodbc=shared,%{_prefix} \ - --with-pdo-odbc=shared,iodbc,%{_prefix} \ + --with-iodbc=shared \ + --with-pdo-odbc=shared,iodbc \ %else - --with-unixODBC=shared,%{_prefix} \ - --with-pdo-odbc=shared,unixODBC,%{_prefix} \ + --with-unixODBC=shared \ + --with-pdo-odbc=shared,unixODBC \ %endif --with-pdo-mysql=shared,mysqlnd \ --with-pdo-pgsql=shared,%{_prefix} \ @@ -1546,7 +1139,6 @@ build --libdir=%{_libdir}/php \ %endif --without-readline \ --with-libedit \ - --with-pspell=shared \ --enable-phar=shared \ --with-tidy=shared,%{_prefix} \ --enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \ @@ -1567,7 +1159,6 @@ without_shared="--disable-gd \ --disable-xmlreader --disable-xmlwriter \ --without-sodium \ --without-sqlite3 --disable-phar --disable-fileinfo \ - --without-pspell \ --without-curl --disable-posix --disable-xml \ --disable-simplexml --disable-exif --without-gettext \ --without-iconv --disable-ftp --without-bz2 --disable-ctype \ @@ -1621,9 +1212,6 @@ build --includedir=%{_includedir}/php-zts \ --enable-opcache \ --enable-opcache-file \ --with-capstone \ -%if %{with imap} - --with-imap=shared --with-imap-ssl \ -%endif --enable-mbstring=shared \ --enable-mbregex \ --enable-gd=shared \ @@ -1656,10 +1244,6 @@ build --includedir=%{_includedir}/php-zts \ --with-mysqli=shared,mysqlnd \ --with-mysql-sock=%{mysql_sock} \ --enable-mysqlnd-threading \ -%if %{with oci8} - --with-oci8=shared,instantclient,%{_prefix}/lib/oracle/%{oracledir}/client64/lib,%{oraclever} \ - --with-pdo-oci=shared,instantclient,%{_prefix}/lib/oracle/%{oracledir}/client64/lib,%{oraclever} \ -%endif %if %{with firebird} --with-pdo-firebird=shared \ %endif @@ -1674,11 +1258,11 @@ build --includedir=%{_includedir}/php-zts \ --with-curl=shared \ --enable-pdo=shared \ %if %{with iodbc} - --with-iodbc=shared,%{_prefix} \ - --with-pdo-odbc=shared,iodbc,%{_prefix} \ + --with-iodbc=shared \ + --with-pdo-odbc=shared,iodbc \ %else - --with-unixODBC=shared,%{_prefix} \ - --with-pdo-odbc=shared,unixODBC,%{_prefix} \ + --with-unixODBC=shared \ + --with-pdo-odbc=shared,unixODBC \ %endif --with-pdo-mysql=shared,mysqlnd \ --with-pdo-pgsql=shared,%{_prefix} \ @@ -1690,7 +1274,6 @@ build --includedir=%{_includedir}/php-zts \ %endif --without-readline \ --with-libedit \ - --with-pspell=shared \ --enable-phar=shared \ --with-tidy=shared,%{_prefix} \ --enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \ @@ -1780,21 +1363,6 @@ install -m 755 build-apache/libs/libphp.so $RPM_BUILD_ROOT%{_httpd_moddir}/libph install -D -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{_httpd_modconfdir}/20-php.conf install -D -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_httpd_confdir}/php.conf -%if %{with_httpd2410} -cat %{SOURCE11} >>$RPM_BUILD_ROOT%{_httpd_confdir}/php.conf -%else -mkdir _fpmdoc -cat %{SOURCE1} %{SOURCE11} >_fpmdoc/httpd-php.conf -cat << 'EOF' >_fpmdoc/README -To use FPM with Apache HTTP server: -- copy the httpd-php.conf to %{_httpd_confdir}/php.conf - -To use FPM with NGINX web server: -- copy the nginx-fpm.conf to %{_sysconfdir}/nginx/conf.d/php-fpm.conf -- copy the nginx-php.conf to %{_sysconfdir}/nginx/default.d/php.conf -EOF -%endif - install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php.d %if %{with zts} install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d @@ -1803,11 +1371,9 @@ install -m 755 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php install -m 700 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php/session install -m 700 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php/wsdlcache install -m 700 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php/opcache -%if 0%{?fedora} >= 24 || 0%{?rhel} >= 8 install -m 755 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php/peclxml install -m 755 -d $RPM_BUILD_ROOT%{_docdir}/pecl install -m 755 -d $RPM_BUILD_ROOT%{_datadir}/tests/pecl -%endif %if %{with lsws} install -m 755 build-apache/sapi/litespeed/php $RPM_BUILD_ROOT%{_bindir}/lsphp @@ -1826,47 +1392,18 @@ mv $RPM_BUILD_ROOT%{_sysconfdir}/php-fpm.d/www.conf.default . install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d install -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/php-fpm -# Environment file -%if 0%{?fedora} < 26 && 0%{?rhel} < 8 -install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig -install -m 644 %{SOURCE8} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/php-fpm -%endif - install -m 755 -d $RPM_BUILD_ROOT/run/php-fpm # install systemd unit files and scripts for handling server startup # this folder requires systemd >= 204 install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/php-fpm.service.d install -Dm 644 %{SOURCE6} $RPM_BUILD_ROOT%{_unitdir}/php-fpm.service -%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8 install -Dm 644 %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/httpd.service.d/php-fpm.conf install -Dm 644 %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/nginx.service.d/php-fpm.conf -%endif - -%if 0%{?fedora} >= 26 || 0%{?rhel} >= 8 -sed -e '/EnvironmentFile/d' -i $RPM_BUILD_ROOT%{_unitdir}/php-fpm.service -%endif -%if %{with_nginx} # Nginx configuration install -D -m 644 %{SOURCE13} $RPM_BUILD_ROOT%{_sysconfdir}/nginx/conf.d/php-fpm.conf install -D -m 644 %{SOURCE14} $RPM_BUILD_ROOT%{_sysconfdir}/nginx/default.d/php.conf -# Switch to UDS -# FPM -sed -e 's@127.0.0.1:9000@/run/php-fpm/www.sock@' \ - -e 's@^;listen.acl_users@listen.acl_users@' \ - -i $RPM_BUILD_ROOT%{_sysconfdir}/php-fpm.d/www.conf -# Nginx -sed -e 's@127.0.0.1:9000@unix:/run/php-fpm/www.sock@' \ - -i $RPM_BUILD_ROOT%{_sysconfdir}/nginx/conf.d/php-fpm.conf -# Apache -sed -e 's@proxy:fcgi://127.0.0.1:9000@proxy:unix:/run/php-fpm/www.sock|fcgi://localhost@' \ - -i $RPM_BUILD_ROOT%{_httpd_confdir}/php.conf -%else -install -D -m 644 %{SOURCE13} _fpmdoc/nginx-fpm.conf -install -D -m 644 %{SOURCE14} _fpmdoc/nginx-php.conf -%endif - TESTCMD="$RPM_BUILD_ROOT%{_bindir}/php --no-php-ini" # Ensure all provided extensions are really there for mod in core date filter hash json libxml openssl pcntl pcre readline reflection session spl standard zlib @@ -1878,9 +1415,6 @@ TESTCMD="$TESTCMD --define extension_dir=$RPM_BUILD_ROOT%{_libdir}/php/modules" # Generate files lists and stub .ini files for each subpackage for mod in pgsql odbc ldap snmp \ -%if %{with imap} - imap \ -%endif mysqlnd mysqli \ mbstring gd dom xsl soap bcmath dba \ simplexml bz2 calendar ctype exif ftp gettext gmp iconv \ @@ -1892,13 +1426,10 @@ for mod in pgsql odbc ldap snmp \ sqlite3 \ enchant phar fileinfo intl \ ffi \ - tidy pspell curl \ + tidy curl \ sodium \ posix shmop sysvshm sysvsem sysvmsg xml \ pdo_mysql pdo_pgsql pdo_odbc pdo_sqlite pdo_dblib \ -%if %{with oci8} - oci8 pdo_oci \ -%endif %if %{with firebird} pdo_firebird \ %endif @@ -1961,9 +1492,6 @@ cat files.mysqli \ # Split out the PDO modules cat files.pdo_pgsql >> files.pgsql cat files.pdo_odbc >> files.odbc -%if %{with oci8} -cat files.pdo_oci >> files.oci8 -%endif # sysv* and posix in packaged in php-process cat files.shmop files.sysv* files.posix > files.process @@ -1996,9 +1524,6 @@ sed -e "s/@PHP_APIVER@/%{apiver}-%{__isa_bits}/" \ -e "/zts/d" \ %endif < %{SOURCE3} > macros.php -%if 0%{?fedora} >= 24 || 0%{?rhel} >= 8 -echo '%%pecl_xmldir %%{_localstatedir}/lib/php/peclxml' >>macros.php -%endif install -m 644 -D macros.php \ $RPM_BUILD_ROOT%{macrosdir}/macros.php @@ -2023,60 +1548,17 @@ echo -e "You should consider upgrading to a supported release.\n" %endif -%if ! %{with_httpd2410} -%pre fpm -# Add the "apache" user as we don't require httpd -getent group apache >/dev/null || \ - groupadd -g 48 -r apache -getent passwd apache >/dev/null || \ - useradd -r -u 48 -g apache -s /sbin/nologin \ - -d %{_httpd_contentdir} -c "Apache" apache -exit 0 -%endif - %post fpm %systemd_post php-fpm.service %preun fpm %systemd_preun php-fpm.service -%if 0%{?fedora} < 27 && 0%{?rhel} < 8 -%postun fpm -%systemd_postun_with_restart php-fpm.service -%endif - -%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8 # Raised by new pool installation or new extension installation %transfiletriggerin fpm -- %{_sysconfdir}/php-fpm.d %{_sysconfdir}/php.d systemctl try-restart php-fpm.service >/dev/null 2>&1 || : -%endif - -# Handle upgrading from SysV initscript to native systemd unit. -# We can tell if a SysV version of php-fpm was previously installed by -# checking to see if the initscript is present. -%triggerun fpm -- php-fpm -%if 0%{?fedora} >= 15 -if [ -f /etc/rc.d/init.d/php-fpm ]; then - # Save the current service runlevel info - # User must manually run systemd-sysv-convert --apply php-fpm - # to migrate them to systemd targets - /usr/bin/systemd-sysv-convert --save php-fpm >/dev/null 2>&1 || : - - # Run these because the SysV package being removed won't do them - /sbin/chkconfig --del php-fpm >/dev/null 2>&1 || : - /bin/systemctl try-restart php-fpm.service >/dev/null 2>&1 || : -fi -%endif - - -%if 0%{?fedora} < 28 && 0%{?rhel} < 8 -%post embedded -p /sbin/ldconfig -%postun embedded -p /sbin/ldconfig -%endif -%{!?_licensedir:%global license %%doc} - %files %{_httpd_moddir}/libphp.so %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/session @@ -2101,12 +1583,10 @@ fi %dir %{_libdir}/php-zts/modules %endif %dir %{_localstatedir}/lib/php -%if 0%{?fedora} >= 24 || 0%{?rhel} >= 8 %dir %{_localstatedir}/lib/php/peclxml %dir %{_docdir}/pecl %dir %{_datadir}/tests %dir %{_datadir}/tests/pecl -%endif %dir %{_datadir}/php %files cli @@ -2142,26 +1622,15 @@ fi %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/session %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/wsdlcache %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/opcache -%if %{with_httpd2410} %config(noreplace) %{_httpd_confdir}/php.conf -%else -%doc _fpmdoc/* -%endif %config(noreplace) %{_sysconfdir}/php-fpm.conf %config(noreplace) %{_sysconfdir}/php-fpm.d/www.conf %config(noreplace) %{_sysconfdir}/logrotate.d/php-fpm -%if 0%{?fedora} < 26 && 0%{?rhel} < 8 -%config(noreplace) %{_sysconfdir}/sysconfig/php-fpm -%endif -%if %{with_nginx} %config(noreplace) %{_sysconfdir}/nginx/conf.d/php-fpm.conf %config(noreplace) %{_sysconfdir}/nginx/default.d/php.conf -%endif %{_unitdir}/php-fpm.service -%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8 %config(noreplace) %{_sysconfdir}/systemd/system/httpd.service.d/php-fpm.conf %config(noreplace) %{_sysconfdir}/systemd/system/nginx.service.d/php-fpm.conf -%endif %dir %{_sysconfdir}/systemd/system/php-fpm.service.d %dir %ghost /run/php-fpm %{_sbindir}/php-fpm @@ -2197,9 +1666,6 @@ fi %files pgsql -f files.pgsql %files odbc -f files.odbc -%if %{with imap} -%files imap -f files.imap -%endif %files ldap -f files.ldap %files snmp -f files.snmp %files xml -f files.xml @@ -2214,7 +1680,6 @@ fi %files pdo -f files.pdo %files tidy -f files.tidy %files pdo-dblib -f files.pdo_dblib -%files pspell -f files.pspell %files intl -f files.intl %files process -f files.process %if %{with firebird} @@ -2227,9 +1692,6 @@ fi %if %{with zts} %config(noreplace) %{_sysconfdir}/php-zts.d/opcache-default.blacklist %endif -%if %{with oci8} -%files oci8 -f files.oci8 -%endif %if %{with zip} %files zip -f files.zip %endif @@ -2239,6 +1701,11 @@ fi %changelog +* Mon Sep 23 2024 Remi Collet - 8.4.0~beta5-1 +- update to 8.4.0beta5 +- drop oci8, pdo_oci8, pspell and imap extensions +- disable ZTS build + * Tue Sep 10 2024 Remi Collet - 8.3.12~RC1-1 - update to 8.3.12RC1 - use ICU 74.2 -- cgit