git: c0b9892033cb - main - */*php85*: Sunrise

From: Muhammad Moinur Rahman <bofh_at_FreeBSD.org>
Date: Wed, 02 Jul 2025 16:30:06 UTC
The branch main has been updated by bofh:

URL: https://cgit.FreeBSD.org/ports/commit/?id=c0b9892033cb566ec6a0c6d0fe5ce4b97c4c88de

commit c0b9892033cb566ec6a0c6d0fe5ce4b97c4c88de
Author:     Muhammad Moinur Rahman <bofh@FreeBSD.org>
AuthorDate: 2025-07-02 09:54:37 +0000
Commit:     Muhammad Moinur Rahman <bofh@FreeBSD.org>
CommitDate: 2025-07-02 16:29:38 +0000

    */*php85*: Sunrise
    
    Please DO NOT use this version in production, it is an early test
    version.
    
    For upgrade notes please visit:
    https://github.com/php/php-src/blob/php-8.5.0alpha1/UPGRADING
    
    Changelog: https://github.com/php/php-src/blob/php-8.5.0alpha1/NEWS
---
 Mk/Uses/php.mk                                     |   8 +-
 Mk/bsd.default-versions.mk                         |   2 +-
 archivers/Makefile                                 |   4 +
 archivers/php85-bz2/Makefile                       |   7 +
 archivers/php85-phar/Makefile                      |   7 +
 archivers/php85-phar/files/patch-config.m4         |  11 +
 .../php85-phar/files/patch-phar__path__check.c     | 241 +++++++
 archivers/php85-zip/Makefile                       |   7 +
 archivers/php85-zlib/Makefile                      |   7 +
 archivers/php85-zlib/files/patch-zlib.c            |  10 +
 converters/Makefile                                |   2 +
 converters/php85-iconv/Makefile                    |   7 +
 converters/php85-mbstring/Makefile                 |   7 +
 databases/Makefile                                 |  12 +
 databases/php85-dba/Makefile                       |   7 +
 databases/php85-dba/files/patch-config.m4          |  25 +
 databases/php85-mysqli/Makefile                    |   7 +
 databases/php85-odbc/Makefile                      |   7 +
 databases/php85-odbc/files/patch-config.m4         |  92 +++
 databases/php85-pdo/Makefile                       |   7 +
 databases/php85-pdo/files/patch-pdo__sql__parser.c | 729 +++++++++++++++++++++
 databases/php85-pdo_dblib/Makefile                 |   7 +
 databases/php85-pdo_firebird/Makefile              |   9 +
 databases/php85-pdo_mysql/Makefile                 |   7 +
 .../files/patch-mysql__sql__parser.c               | 398 +++++++++++
 databases/php85-pdo_odbc/Makefile                  |   7 +
 databases/php85-pdo_pgsql/Makefile                 |   7 +
 .../files/patch-pgsql__sql__parser.c               | 528 +++++++++++++++
 databases/php85-pdo_sqlite/Makefile                |   7 +
 .../files/patch-sqlite__sql__parser.c              | 398 +++++++++++
 databases/php85-pgsql/Makefile                     |   7 +
 databases/php85-sqlite3/Makefile                   |   7 +
 devel/Makefile                                     |  10 +
 devel/php85-ffi/Makefile                           |   7 +
 devel/php85-gettext/Makefile                       |   7 +
 devel/php85-intl/Makefile                          |   7 +
 devel/php85-pcntl/Makefile                         |   7 +
 devel/php85-readline/Makefile                      |   7 +
 devel/php85-shmop/Makefile                         |   7 +
 devel/php85-sysvmsg/Makefile                       |   7 +
 devel/php85-sysvsem/Makefile                       |   7 +
 devel/php85-sysvshm/Makefile                       |   7 +
 devel/php85-tokenizer/Makefile                     |   7 +
 ftp/Makefile                                       |   2 +
 ftp/php85-curl/Makefile                            |   7 +
 ftp/php85-ftp/Makefile                             |   7 +
 graphics/Makefile                                  |   2 +
 graphics/php85-exif/Makefile                       |   7 +
 graphics/php85-gd/Makefile                         |   7 +
 lang/Makefile                                      |   2 +
 lang/php81/Makefile                                |   2 +-
 lang/php82/Makefile                                |   2 +-
 lang/php83/Makefile                                |   2 +-
 lang/php84/Makefile                                |   2 +-
 lang/php85-extensions/Makefile                     |  89 +++
 lang/php85-extensions/pkg-descr                    |   5 +
 lang/php85/Makefile                                | 620 ++++++++++++++++++
 lang/php85/distinfo                                |   3 +
 lang/php85/files/patch-TSRM_TSRM.c                 |  11 +
 lang/php85/files/patch-build_Makefile.global       |  19 +
 lang/php85/files/patch-configure.ac                |  27 +
 lang/php85/files/patch-ext_hash_xxhash_xxhash.h    |  46 ++
 lang/php85/files/patch-ext_pcre_php__pcre.h        |  11 +
 .../files/patch-sapi_apache2handler_config.m4      |  11 +
 lang/php85/files/patch-sapi_fpm_www.conf.in        |  17 +
 lang/php85/files/php_fpm.in                        | 102 +++
 lang/php85/files/php_session.h                     | 328 +++++++++
 lang/php85/pkg-descr                               |   6 +
 lang/php85/pkg-message.mod                         |  24 +
 lang/php85/pkg-plist                               | 549 ++++++++++++++++
 lang/php85/pkg-plist.mod                           |   3 +
 math/Makefile                                      |   2 +
 math/php85-bcmath/Makefile                         |   7 +
 math/php85-gmp/Makefile                            |   7 +
 misc/Makefile                                      |   1 +
 misc/php85-calendar/Makefile                       |   7 +
 net-mgmt/Makefile                                  |   1 +
 net-mgmt/php85-snmp/Makefile                       |   7 +
 net/Makefile                                       |   3 +
 net/php85-ldap/Makefile                            |   7 +
 net/php85-soap/Makefile                            |   7 +
 net/php85-sockets/Makefile                         |   7 +
 security/Makefile                                  |   2 +
 security/php85-filter/Makefile                     |   7 +
 security/php85-sodium/Makefile                     |   7 +
 sysutils/Makefile                                  |   2 +
 sysutils/php85-fileinfo/Makefile                   |   7 +
 sysutils/php85-posix/Makefile                      |   7 +
 textproc/Makefile                                  |   8 +
 textproc/php85-ctype/Makefile                      |   7 +
 textproc/php85-dom/Makefile                        |   7 +
 .../patch-lexbor_selectors-adapted_selectors.c     |  11 +
 .../files/patch-parentnode_css__selectors.c        |  11 +
 textproc/php85-enchant/Makefile                    |  12 +
 textproc/php85-simplexml/Makefile                  |   7 +
 textproc/php85-xml/Makefile                        |   7 +
 textproc/php85-xml/files/patch-compat.c            |  13 +
 textproc/php85-xmlreader/Makefile                  |   7 +
 textproc/php85-xmlwriter/Makefile                  |   7 +
 textproc/php85-xsl/Makefile                        |  12 +
 www/Makefile                                       |   4 +
 www/mod_php85/Makefile                             |  18 +
 www/php85-opcache/Makefile                         |   9 +
 www/php85-session/Makefile                         |   7 +
 www/php85-tidy/Makefile                            |   7 +
 105 files changed, 4816 insertions(+), 7 deletions(-)

diff --git a/Mk/Uses/php.mk b/Mk/Uses/php.mk
index 9d5568e05047..d6b59898cb5b 100644
--- a/Mk/Uses/php.mk
+++ b/Mk/Uses/php.mk
@@ -110,7 +110,7 @@ DIST_SUBDIR=	PECL
 
 PHPBASE?=	${LOCALBASE}
 
-_ALL_PHP_VERSIONS=	81 82 83 84
+_ALL_PHP_VERSIONS=	81 82 83 84 85
 
 # Make the already installed PHP the default one.
 .  if exists(${PHPBASE}/etc/php.conf)
@@ -179,7 +179,10 @@ PHP_VER=	${FLAVOR:S/^php//}
 	(${FLAVOR:Mphp[0-9][0-9]} && ${FLAVOR} != ${FLAVORS:[1]})
 # When adding a version, please keep the comment in
 # Mk/bsd.default-versions.mk in sync.
-.    if ${PHP_VER} == 84
+.    if ${PHP_VER} == 85
+PHP_EXT_DIR=   20240925
+PHP_EXT_INC=    hash json openssl pcre random spl
+.    elif ${PHP_VER} == 84
 PHP_EXT_DIR=   20240924
 PHP_EXT_INC=    hash json openssl pcre random spl
 .    elif ${PHP_VER} == 83
@@ -387,6 +390,7 @@ _USE_PHP_VER81=	${_USE_PHP_ALL}
 _USE_PHP_VER82=	${_USE_PHP_ALL}
 _USE_PHP_VER83=	${_USE_PHP_ALL}
 _USE_PHP_VER84=	${_USE_PHP_ALL}
+_USE_PHP_VER85=	${_USE_PHP_ALL}
 
 bcmath_DEPENDS=	math/php${PHP_VER}-bcmath
 bitset_DEPENDS=	math/pecl-bitset@${PHP_FLAVOR}
diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk
index 6a15f83d15de..549ad04fd4c1 100644
--- a/Mk/bsd.default-versions.mk
+++ b/Mk/bsd.default-versions.mk
@@ -132,7 +132,7 @@ PERL5_DEFAULT:=		${_PERL5_FROM_BIN:R}
 .  endif
 # Possible values: 13, 14, 15, 16, 17
 PGSQL_DEFAULT?=		17
-# Possible values: 8.1, 8.2, 8.3, 8.4
+# Possible values: 8.1, 8.2, 8.3, 8.4, 8.5
 PHP_DEFAULT?=		8.3
 # Possible values: rust, legacy
 .  if empty(ARCH:Naarch64:Namd64:Narmv7:Ni386:Npowerpc64:Npowerpc64le:Npowerpc:Nriscv64)
diff --git a/archivers/Makefile b/archivers/Makefile
index 0c7e80be0b2f..d1b937bd3eb8 100644
--- a/archivers/Makefile
+++ b/archivers/Makefile
@@ -175,6 +175,10 @@
     SUBDIR += php84-phar
     SUBDIR += php84-zip
     SUBDIR += php84-zlib
+    SUBDIR += php85-bz2
+    SUBDIR += php85-phar
+    SUBDIR += php85-zip
+    SUBDIR += php85-zlib
     SUBDIR += pigz
     SUBDIR += pixz
     SUBDIR += plakar
diff --git a/archivers/php85-bz2/Makefile b/archivers/php85-bz2/Makefile
new file mode 100644
index 000000000000..87562c741e29
--- /dev/null
+++ b/archivers/php85-bz2/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	archivers
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-bz2
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php85-phar/Makefile b/archivers/php85-phar/Makefile
new file mode 100644
index 000000000000..a3fbf377f61c
--- /dev/null
+++ b/archivers/php85-phar/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	archivers
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-phar
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php85-phar/files/patch-config.m4 b/archivers/php85-phar/files/patch-config.m4
new file mode 100644
index 000000000000..13ba9cf818b4
--- /dev/null
+++ b/archivers/php85-phar/files/patch-config.m4
@@ -0,0 +1,11 @@
+--- config.m4.orig	2025-07-01 21:58:05 UTC
++++ config.m4
+@@ -32,8 +32,4 @@ if test "$PHP_PHAR" != "no"; then
+   PHP_ADD_EXTENSION_DEP(phar, spl)
+   PHP_ADD_MAKEFILE_FRAGMENT
+ 
+-  AC_CONFIG_FILES([
+-    $ext_dir/phar.1
+-    $ext_dir/phar.phar.1
+-  ])
+ fi
diff --git a/archivers/php85-phar/files/patch-phar__path__check.c b/archivers/php85-phar/files/patch-phar__path__check.c
new file mode 100644
index 000000000000..8e599176ec86
--- /dev/null
+++ b/archivers/php85-phar/files/patch-phar__path__check.c
@@ -0,0 +1,241 @@
+--- phar_path_check.c.orig	2025-07-02 12:00:06 UTC
++++ phar_path_check.c
+@@ -0,0 +1,238 @@
++/* Generated by re2c 3.1 */
++/*
++  +----------------------------------------------------------------------+
++  | phar php single-file executable PHP extension                        |
++  +----------------------------------------------------------------------+
++  | Copyright (c) The PHP Group                                          |
++  +----------------------------------------------------------------------+
++  | This source file is subject to version 3.01 of the PHP license,      |
++  | that is bundled with this package in the file LICENSE, and is        |
++  | available through the world-wide-web at the following url:           |
++  | https://www.php.net/license/3_01.txt                                 |
++  | If you did not receive a copy of the PHP license and are unable to   |
++  | obtain it through the world-wide-web, please send a note to          |
++  | license@php.net so we can mail you a copy immediately.               |
++  +----------------------------------------------------------------------+
++  | Authors: Marcus Boerger <helly@php.net>                              |
++  +----------------------------------------------------------------------+
++*/
++
++#include "phar_internal.h"
++
++phar_path_check_result phar_path_check(char **s, size_t *len, const char **error)
++{
++	const unsigned char *p = (const unsigned char*)*s;
++	const unsigned char *m;
++
++	if (*len == 1 && *p == '.') {
++		*error = "current directory reference";
++		return pcr_err_curr_dir;
++	} else if (*len == 2 && p[0] == '.' && p[1] == '.') {
++		*error = "upper directory reference";
++		return pcr_err_up_dir;
++	}
++
++#define YYCTYPE         unsigned char
++#define YYCURSOR        p
++#define YYLIMIT         p+*len
++#define YYMARKER        m
++#define YYFILL(n)       do {} while (0)
++
++loop:
++
++{
++	YYCTYPE yych;
++	unsigned int yyaccept = 0;
++	if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
++	yych = *YYCURSOR;
++	if (yych <= '[') {
++		if (yych <= ')') {
++			if (yych <= '\f') {
++				if (yych >= 0x01) goto yy1;
++			} else {
++				if (yych <= '\r') goto yy3;
++				if (yych <= 0x19) goto yy1;
++				goto yy4;
++			}
++		} else {
++			if (yych <= '/') {
++				if (yych <= '*') goto yy6;
++				if (yych <= '.') goto yy4;
++				goto yy7;
++			} else {
++				if (yych == '?') goto yy8;
++				goto yy4;
++			}
++		}
++	} else {
++		if (yych <= 0xEC) {
++			if (yych <= 0xC1) {
++				if (yych <= '\\') goto yy9;
++				if (yych <= 0x7F) goto yy4;
++				goto yy1;
++			} else {
++				if (yych <= 0xDF) goto yy10;
++				if (yych <= 0xE0) goto yy11;
++				goto yy12;
++			}
++		} else {
++			if (yych <= 0xF0) {
++				if (yych <= 0xED) goto yy13;
++				if (yych <= 0xEF) goto yy12;
++				goto yy14;
++			} else {
++				if (yych <= 0xF3) goto yy15;
++				if (yych <= 0xF4) goto yy16;
++				goto yy1;
++			}
++		}
++	}
++	++YYCURSOR;
++	{
++			if (**s == '/') {
++				(*s)++;
++				(*len)--;
++			}
++			if ((p - (const unsigned char*)*s) - 1 != *len)
++			{
++				*error ="illegal character";
++				return pcr_err_illegal_char;
++			}
++			*error = NULL;
++			return pcr_is_ok;
++		}
++yy1:
++	++YYCURSOR;
++yy2:
++	{
++			*error ="illegal character";
++			return pcr_err_illegal_char;
++		}
++yy3:
++	yych = *++YYCURSOR;
++	if (yych == '\n') goto yy1;
++	goto yy2;
++yy4:
++	++YYCURSOR;
++yy5:
++	{
++			goto loop;
++		}
++yy6:
++	++YYCURSOR;
++	{
++			*error = "star";
++			return pcr_err_star;
++		}
++yy7:
++	yyaccept = 0;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= '-') goto yy5;
++	if (yych <= '.') goto yy17;
++	if (yych <= '/') goto yy19;
++	goto yy5;
++yy8:
++	++YYCURSOR;
++	{
++			if (**s == '/') {
++				(*s)++;
++			}
++			*len = (p - (const unsigned char*)*s) -1;
++			*error = NULL;
++			return pcr_use_query;
++		}
++yy9:
++	++YYCURSOR;
++	{
++			*error = "back-slash";
++			return pcr_err_back_slash;
++		}
++yy10:
++	yych = *++YYCURSOR;
++	if (yych <= 0x7F) goto yy2;
++	if (yych <= 0xBF) goto yy4;
++	goto yy2;
++yy11:
++	yyaccept = 1;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x9F) goto yy2;
++	if (yych <= 0xBF) goto yy20;
++	goto yy2;
++yy12:
++	yyaccept = 1;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x7F) goto yy2;
++	if (yych <= 0xBF) goto yy20;
++	goto yy2;
++yy13:
++	yyaccept = 1;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x7F) goto yy2;
++	if (yych <= 0x9F) goto yy20;
++	goto yy2;
++yy14:
++	yyaccept = 1;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x8F) goto yy2;
++	if (yych <= 0xBF) goto yy21;
++	goto yy2;
++yy15:
++	yyaccept = 1;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x7F) goto yy2;
++	if (yych <= 0xBF) goto yy21;
++	goto yy2;
++yy16:
++	yyaccept = 1;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x7F) goto yy2;
++	if (yych <= 0x8F) goto yy21;
++	goto yy2;
++yy17:
++	yych = *++YYCURSOR;
++	if (yych <= 0x00) goto yy22;
++	if (yych <= '-') goto yy18;
++	if (yych <= '.') goto yy23;
++	if (yych <= '/') goto yy22;
++yy18:
++	YYCURSOR = YYMARKER;
++	if (yyaccept == 0) {
++		goto yy5;
++	} else {
++		goto yy2;
++	}
++yy19:
++	++YYCURSOR;
++	{
++			*error = "double slash";
++			return pcr_err_double_slash;
++		}
++yy20:
++	yych = *++YYCURSOR;
++	if (yych <= 0x7F) goto yy18;
++	if (yych <= 0xBF) goto yy4;
++	goto yy18;
++yy21:
++	yych = *++YYCURSOR;
++	if (yych <= 0x7F) goto yy18;
++	if (yych <= 0xBF) goto yy20;
++	goto yy18;
++yy22:
++	++YYCURSOR;
++	{
++			*error = "current directory reference";
++			return pcr_err_curr_dir;
++		}
++yy23:
++	yych = *++YYCURSOR;
++	if (yych <= 0x00) goto yy24;
++	if (yych != '/') goto yy18;
++yy24:
++	++YYCURSOR;
++	{
++			*error = "upper directory reference";
++			return pcr_err_up_dir;
++		}
++}
++
++}
diff --git a/archivers/php85-zip/Makefile b/archivers/php85-zip/Makefile
new file mode 100644
index 000000000000..d8a586997669
--- /dev/null
+++ b/archivers/php85-zip/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	archivers
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-zip
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php85-zlib/Makefile b/archivers/php85-zlib/Makefile
new file mode 100644
index 000000000000..20f98d859d51
--- /dev/null
+++ b/archivers/php85-zlib/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	archivers
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-zlib
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php85-zlib/files/patch-zlib.c b/archivers/php85-zlib/files/patch-zlib.c
new file mode 100644
index 000000000000..fb0e9e44311a
--- /dev/null
+++ b/archivers/php85-zlib/files/patch-zlib.c
@@ -0,0 +1,10 @@
+--- zlib.c.orig	2023-06-06 15:54:29 UTC
++++ zlib.c
+@@ -1380,6 +1380,7 @@ static PHP_MSHUTDOWN_FUNCTION(zlib)
+ /* {{{ PHP_RINIT_FUNCTION */
+ static PHP_RINIT_FUNCTION(zlib)
+ {
++	ZLIBG(output_compression) = 0;
+ 	ZLIBG(compression_coding) = 0;
+ 	if (!ZLIBG(handler_registered)) {
+ 		ZLIBG(output_compression) = ZLIBG(output_compression_default);
diff --git a/converters/Makefile b/converters/Makefile
index 3f23e1cfea15..7a192a7b1bd2 100644
--- a/converters/Makefile
+++ b/converters/Makefile
@@ -147,6 +147,8 @@
     SUBDIR += php83-mbstring
     SUBDIR += php84-iconv
     SUBDIR += php84-mbstring
+    SUBDIR += php85-iconv
+    SUBDIR += php85-mbstring
     SUBDIR += psiconv
     SUBDIR += py-bencode.py
     SUBDIR += py-bencoder
diff --git a/converters/php85-iconv/Makefile b/converters/php85-iconv/Makefile
new file mode 100644
index 000000000000..a2243f5af6ce
--- /dev/null
+++ b/converters/php85-iconv/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	converters
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-iconv
+
+.include "${MASTERDIR}/Makefile"
diff --git a/converters/php85-mbstring/Makefile b/converters/php85-mbstring/Makefile
new file mode 100644
index 000000000000..7389ede69b5d
--- /dev/null
+++ b/converters/php85-mbstring/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	converters
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-mbstring
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/Makefile b/databases/Makefile
index a119d2b4f190..ce29492a0960 100644
--- a/databases/Makefile
+++ b/databases/Makefile
@@ -633,6 +633,18 @@
     SUBDIR += php84-pdo_sqlite
     SUBDIR += php84-pgsql
     SUBDIR += php84-sqlite3
+    SUBDIR += php85-dba
+    SUBDIR += php85-mysqli
+    SUBDIR += php85-odbc
+    SUBDIR += php85-pdo
+    SUBDIR += php85-pdo_dblib
+    SUBDIR += php85-pdo_firebird
+    SUBDIR += php85-pdo_mysql
+    SUBDIR += php85-pdo_odbc
+    SUBDIR += php85-pdo_pgsql
+    SUBDIR += php85-pdo_sqlite
+    SUBDIR += php85-pgsql
+    SUBDIR += php85-sqlite3
     SUBDIR += phpliteadmin
     SUBDIR += phpminiadmin
     SUBDIR += phpmyadmin
diff --git a/databases/php85-dba/Makefile b/databases/php85-dba/Makefile
new file mode 100644
index 000000000000..764ffd7c7936
--- /dev/null
+++ b/databases/php85-dba/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	databases
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-dba
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-dba/files/patch-config.m4 b/databases/php85-dba/files/patch-config.m4
new file mode 100644
index 000000000000..7449b1a88029
--- /dev/null
+++ b/databases/php85-dba/files/patch-config.m4
@@ -0,0 +1,25 @@
+--- config.m4.orig	2024-09-10 16:10:06 UTC
++++ config.m4
+@@ -433,6 +433,14 @@ if test "$PHP_DB4" != "no"; then
+       THIS_PREFIX=$i
+       THIS_INCLUDE=$i/include/db5.3/db.h
+       break
++    elif test -f "$i/include/db5/db.h"; then
++      THIS_PREFIX=$i
++      THIS_INCLUDE=$i/include/db5/db.h
++      break
++    elif test -f "$i/include/db18/db.h"; then
++      THIS_PREFIX=$i
++      THIS_INCLUDE=$i/include/db18/db.h
++      break
+     elif test -f "$i/include/db5.1/db.h"; then
+       THIS_PREFIX=$i
+       THIS_INCLUDE=$i/include/db5.1/db.h
+@@ -480,6 +488,7 @@ if test "$PHP_DB4" != "no"; then
+       db-5.3
+       db-5.1
+       db-5.0
++      db-5
+       db-4.8
+       db-4.7
+       db-4.6
diff --git a/databases/php85-mysqli/Makefile b/databases/php85-mysqli/Makefile
new file mode 100644
index 000000000000..77bd1f7f8a5d
--- /dev/null
+++ b/databases/php85-mysqli/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	databases
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-mysqli
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-odbc/Makefile b/databases/php85-odbc/Makefile
new file mode 100644
index 000000000000..415b461599c9
--- /dev/null
+++ b/databases/php85-odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	databases
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-odbc/files/patch-config.m4 b/databases/php85-odbc/files/patch-config.m4
new file mode 100644
index 000000000000..55e3fb3aea0c
--- /dev/null
+++ b/databases/php85-odbc/files/patch-config.m4
@@ -0,0 +1,92 @@
+--- config.m4.orig	2024-09-10 16:10:06 UTC
++++ config.m4
+@@ -117,7 +117,7 @@ PHP_ARG_WITH([adabas],
+ PHP_ARG_WITH([adabas],
+   [for Adabas support],
+   [AS_HELP_STRING([[--with-adabas[=DIR]]],
+-    [Include Adabas D support [/usr/local]])])
++    [Include Adabas D support [/usr/local]])], [no], [no])
+ 
+   AS_VAR_IF([PHP_ADABAS], [no], [], [
+     AS_VAR_IF([PHP_ADABAS], [yes], [PHP_ADABAS=/usr/local])
+@@ -143,7 +143,7 @@ PHP_ARG_WITH([sapdb],
+ PHP_ARG_WITH([sapdb],
+   [for SAP DB support],
+   [AS_HELP_STRING([[--with-sapdb[=DIR]]],
+-    [Include SAP DB support [/usr/local]])])
++    [Include SAP DB support [/usr/local]])], [no], [no])
+ 
+   AS_VAR_IF([PHP_SAPDB], [no], [], [
+     AS_VAR_IF([PHP_SAPDB], [yes], [PHP_SAPDB=/usr/local])
+@@ -160,7 +160,7 @@ PHP_ARG_WITH([solid],
+ PHP_ARG_WITH([solid],
+   [for Solid support],
+   [AS_HELP_STRING([[--with-solid[=DIR]]],
+-    [Include Solid support [/usr/local/solid]])])
++    [Include Solid support [/usr/local/solid]])], [no], [no])
+ 
+   AS_VAR_IF([PHP_SOLID], [no], [], [
+     AS_VAR_IF([PHP_SOLID], [yes], [PHP_SOLID=/usr/local/solid])
+@@ -184,7 +184,7 @@ PHP_ARG_WITH([ibm-db2],
+ PHP_ARG_WITH([ibm-db2],
+   [for IBM DB2 support],
+   [AS_HELP_STRING([[--with-ibm-db2[=DIR]]],
+-    [Include IBM DB2 support [/home/db2inst1/sqllib]])])
++    [Include IBM DB2 support [/home/db2inst1/sqllib]])], [no], [no])
+ 
+   AS_VAR_IF([PHP_IBM_DB2], [no], [], [
+     AS_VAR_IF([PHP_IBM_DB2], [yes], [
+@@ -222,7 +222,7 @@ PHP_ARG_WITH([empress],
+   [for Empress support],
+   [AS_HELP_STRING([[--with-empress[=DIR]]],
+     [Include Empress support $EMPRESSPATH (Empress Version >= 8.60
+-    required)])])
++    required)])], [no], [no])
+ 
+   AS_VAR_IF([PHP_EMPRESS], [no], [], [
+     AS_VAR_IF([PHP_EMPRESS], [yes], [
+@@ -246,7 +246,7 @@ PHP_ARG_WITH([empress-bcs],
+   [for Empress local access support],
+   [AS_HELP_STRING([[--with-empress-bcs[=DIR]]],
+     [Include Empress Local Access support $EMPRESSPATH (Empress Version >=
+-    8.60 required)])])
++    8.60 required)])], [no], [no])
+ 
+   AS_VAR_IF([PHP_EMPRESS_BCS], [no], [], [
+     AS_VAR_IF([PHP_EMPRESS_BCS], [yes], [
+@@ -290,7 +290,7 @@ PHP_ARG_WITH([custom-odbc],
+     your include dirs. For example, you should define following for Sybase SQL
+     Anywhere 5.5.00 on QNX, prior to running this configure script:
+     CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix
+-    CUSTOM_ODBC_LIBS="-ldblib -lodbc"])])
++    CUSTOM_ODBC_LIBS="-ldblib -lodbc"])], [no], [no])
+ 
+   AS_VAR_IF([PHP_CUSTOM_ODBC], [no], [], [
+     AS_VAR_IF([PHP_CUSTOM_ODBC], [yes], [PHP_CUSTOM_ODBC=/usr/local])
+@@ -309,7 +309,7 @@ PHP_ARG_WITH([iodbc],
+ PHP_ARG_WITH([iodbc],
+   [whether to build with iODBC support],
+   [AS_HELP_STRING([--with-iodbc],
+-    [Include iODBC support])])
++    [Include iODBC support])], [no], [no])
+ 
+   AS_VAR_IF([PHP_IODBC], [no], [], [
+     PKG_CHECK_MODULES([ODBC], [libiodbc])
+@@ -324,7 +324,7 @@ PHP_ARG_WITH([esoob],
+ PHP_ARG_WITH([esoob],
+   [for Easysoft ODBC-ODBC Bridge support],
+   [AS_HELP_STRING([[--with-esoob[=DIR]]],
+-    [Include Easysoft OOB support [/usr/local/easysoft/oob/client]])])
++    [Include Easysoft OOB support [/usr/local/easysoft/oob/client]])], [no], [no])
+ 
+   AS_VAR_IF([PHP_ESOOB], [no], [], [
+     AS_VAR_IF([PHP_ESOOB], [yes], [PHP_ESOOB=/usr/local/easysoft/oob/client])
+@@ -371,7 +371,7 @@ PHP_ARG_WITH([dbmaker],
+ PHP_ARG_WITH([dbmaker],
+   [for DBMaker support],
+   [AS_HELP_STRING([[--with-dbmaker[=DIR]]],
+-    [Include DBMaker support])])
++    [Include DBMaker support])], [no], [no])
+ 
+   AS_VAR_IF([PHP_DBMAKER], [no], [], [
+     AS_VAR_IF([PHP_DBMAKER], [yes], [
diff --git a/databases/php85-pdo/Makefile b/databases/php85-pdo/Makefile
new file mode 100644
index 000000000000..82a9d79b6e9d
--- /dev/null
+++ b/databases/php85-pdo/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES=	databases
+
+MASTERDIR=	${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX=	-pdo
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo/files/patch-pdo__sql__parser.c b/databases/php85-pdo/files/patch-pdo__sql__parser.c
new file mode 100644
index 000000000000..191eea16a3bd
--- /dev/null
+++ b/databases/php85-pdo/files/patch-pdo__sql__parser.c
@@ -0,0 +1,729 @@
+--- pdo_sql_parser.c.orig	2025-07-02 12:59:51 UTC
++++ pdo_sql_parser.c
+@@ -0,0 +1,726 @@
++/* Generated by re2c 3.1 */
++/*
++  +----------------------------------------------------------------------+
++  | Copyright (c) The PHP Group                                          |
++  +----------------------------------------------------------------------+
++  | This source file is subject to version 3.01 of the PHP license,      |
++  | that is bundled with this package in the file LICENSE, and is        |
++  | available through the world-wide-web at the following url:           |
++  | https://www.php.net/license/3_01.txt                                 |
++  | If you did not receive a copy of the PHP license and are unable to   |
++  | obtain it through the world-wide-web, please send a note to          |
++  | license@php.net so we can mail you a copy immediately.               |
++  +----------------------------------------------------------------------+
++  | Author: George Schlossnagle <george@omniti.com>                      |
++  +----------------------------------------------------------------------+
++*/
++
++#include "php.h"
++#include "php_pdo_driver.h"
++#include "pdo_sql_parser.h"
++
++static int default_scanner(pdo_scanner_t *s)
++{
++	const char *cursor = s->cur;
++
++	s->tok = cursor;
++	
++
++	
++{
++	YYCTYPE yych;
++	unsigned int yyaccept = 0;
++	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
++	yych = *YYCURSOR;
++	switch (yych) {
++		case 0x00: goto yy1;
++		case '"': goto yy4;
++		case '\'': goto yy6;
++		case '-': goto yy7;
++		case '/': goto yy8;
++		case ':': goto yy9;
++		case '?': goto yy10;
++		default: goto yy2;
++	}
++yy1:
++	YYCURSOR = YYMARKER;
++	switch (yyaccept) {
++		case 0: goto yy5;
++		case 1: goto yy15;
++		default: goto yy19;
++	}
++yy2:
++	++YYCURSOR;
++	if (YYLIMIT <= YYCURSOR) YYFILL(1);
++	yych = *YYCURSOR;
++	switch (yych) {
++		case 0x00:
++		case '"':
++		case '\'':
++		case '-':
++		case '/':
++		case ':':
++		case '?': goto yy3;
++		default: goto yy2;
++	}
++yy3:
++	{ RET(PDO_PARSER_TEXT); }
++yy4:
++	yyaccept = 0;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych >= 0x01) goto yy13;
++yy5:
++	{ SKIP_ONE(PDO_PARSER_TEXT); }
++yy6:
++	yyaccept = 0;
++	yych = *(YYMARKER = ++YYCURSOR);
++	if (yych <= 0x00) goto yy5;
++	goto yy17;
++yy7:
++	yych = *++YYCURSOR;
++	switch (yych) {
++		case '-': goto yy20;
++		default: goto yy5;
++	}
++yy8:
++	yych = *++YYCURSOR;
++	switch (yych) {
++		case '*': goto yy22;
++		default: goto yy5;
++	}
++yy9:
++	yych = *++YYCURSOR;
++	switch (yych) {
++		case '0':
++		case '1':
++		case '2':
++		case '3':
++		case '4':
++		case '5':
++		case '6':
++		case '7':
++		case '8':
++		case '9':
++		case 'A':
++		case 'B':
++		case 'C':
++		case 'D':
++		case 'E':
++		case 'F':
++		case 'G':
++		case 'H':
++		case 'I':
++		case 'J':
++		case 'K':
++		case 'L':
++		case 'M':
++		case 'N':
++		case 'O':
++		case 'P':
++		case 'Q':
++		case 'R':
++		case 'S':
++		case 'T':
++		case 'U':
++		case 'V':
++		case 'W':
++		case 'X':
++		case 'Y':
++		case 'Z':
++		case '_':
++		case 'a':
++		case 'b':
++		case 'c':
++		case 'd':
++		case 'e':
++		case 'f':
++		case 'g':
++		case 'h':
++		case 'i':
++		case 'j':
++		case 'k':
++		case 'l':
++		case 'm':
++		case 'n':
++		case 'o':
++		case 'p':
++		case 'q':
++		case 'r':
++		case 's':
++		case 't':
++		case 'u':
++		case 'v':
++		case 'w':
++		case 'x':
++		case 'y':
++		case 'z': goto yy23;
++		case ':': goto yy25;
++		default: goto yy5;
++	}
++yy10:
++	yych = *++YYCURSOR;
++	switch (yych) {
++		case '?': goto yy27;
++		default: goto yy11;
++	}
++yy11:
++	{ RET(PDO_PARSER_BIND_POS); }
++yy12:
++	++YYCURSOR;
++	if (YYLIMIT <= YYCURSOR) YYFILL(1);
++	yych = *YYCURSOR;
++yy13:
++	switch (yych) {
++		case 0x00: goto yy1;
++		case '"': goto yy14;
++		default: goto yy12;
++	}
++yy14:
++	yyaccept = 1;
++	YYMARKER = ++YYCURSOR;
++	if (YYLIMIT <= YYCURSOR) YYFILL(1);
++	yych = *YYCURSOR;
++	switch (yych) {
++		case '"': goto yy12;
++		default: goto yy15;
++	}
++yy15:
++	{ RET(PDO_PARSER_TEXT); }
++yy16:
++	++YYCURSOR;
++	if (YYLIMIT <= YYCURSOR) YYFILL(1);
++	yych = *YYCURSOR;
++yy17:
++	switch (yych) {
++		case 0x00: goto yy1;
++		case '\'': goto yy18;
++		default: goto yy16;
++	}
++yy18:
++	yyaccept = 2;
++	YYMARKER = ++YYCURSOR;
++	if (YYLIMIT <= YYCURSOR) YYFILL(1);
++	yych = *YYCURSOR;
++	switch (yych) {
++		case '\'': goto yy16;
++		default: goto yy19;
++	}
++yy19:
++	{ RET(PDO_PARSER_TEXT); }
++yy20:
++	++YYCURSOR;
++	if (YYLIMIT <= YYCURSOR) YYFILL(1);
++	yych = *YYCURSOR;
++	switch (yych) {
++		case '\n': goto yy21;
*** 4719 LINES SKIPPED ***