aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMuhammad Moinur Rahman <bofh@FreeBSD.org>2024-07-28 01:40:58 +0000
committerMuhammad Moinur Rahman <bofh@FreeBSD.org>2024-07-28 13:15:17 +0000
commit42db2c39e566955903a9176e0a4c4c7589d5aaca (patch)
tree1671a458d12a32d210dd96aaed03e7d0fcd2c11c
parentd6c16b39eaba13b0c240747534b8707056abb32b (diff)
downloadports-42db2c39e566955903a9176e0a4c4c7589d5aaca.tar.gz
ports-42db2c39e566955903a9176e0a4c4c7589d5aaca.zip
*/*php84*: 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.4.0alpha1/UPGRADING Changelog: https://github.com/php/php-src/blob/php-8.4.0alpha1/NEWS
-rw-r--r--Mk/Uses/php.mk18
-rw-r--r--Mk/bsd.default-versions.mk2
-rw-r--r--archivers/Makefile4
-rw-r--r--archivers/php84-bz2/Makefile7
-rw-r--r--archivers/php84-phar/Makefile7
-rw-r--r--archivers/php84-zip/Makefile7
-rw-r--r--archivers/php84-zlib/Makefile7
-rw-r--r--archivers/php84-zlib/files/patch-zlib.c10
-rw-r--r--converters/Makefile2
-rw-r--r--converters/php84-iconv/Makefile7
-rw-r--r--converters/php84-mbstring/Makefile7
-rw-r--r--databases/Makefile12
-rw-r--r--databases/php84-dba/Makefile7
-rw-r--r--databases/php84-dba/files/patch-config.m426
-rw-r--r--databases/php84-mysqli/Makefile7
-rw-r--r--databases/php84-odbc/Makefile7
-rw-r--r--databases/php84-odbc/files/patch-config.m4101
-rw-r--r--databases/php84-pdo/Makefile7
-rw-r--r--databases/php84-pdo_dblib/Makefile7
-rw-r--r--databases/php84-pdo_firebird/Makefile9
-rw-r--r--databases/php84-pdo_mysql/Makefile7
-rw-r--r--databases/php84-pdo_odbc/Makefile7
-rw-r--r--databases/php84-pdo_pgsql/Makefile7
-rw-r--r--databases/php84-pdo_sqlite/Makefile7
-rw-r--r--databases/php84-pgsql/Makefile7
-rw-r--r--databases/php84-sqlite3/Makefile7
-rw-r--r--devel/Makefile10
-rw-r--r--devel/php84-ffi/Makefile7
-rw-r--r--devel/php84-gettext/Makefile7
-rw-r--r--devel/php84-intl/Makefile7
-rw-r--r--devel/php84-pcntl/Makefile7
-rw-r--r--devel/php84-readline/Makefile7
-rw-r--r--devel/php84-shmop/Makefile7
-rw-r--r--devel/php84-sysvmsg/Makefile7
-rw-r--r--devel/php84-sysvsem/Makefile7
-rw-r--r--devel/php84-sysvshm/Makefile7
-rw-r--r--devel/php84-tokenizer/Makefile7
-rw-r--r--ftp/Makefile2
-rw-r--r--ftp/php84-curl/Makefile7
-rw-r--r--ftp/php84-ftp/Makefile7
-rw-r--r--graphics/Makefile2
-rw-r--r--graphics/php84-exif/Makefile7
-rw-r--r--graphics/php84-gd/Makefile7
-rw-r--r--lang/Makefile1
-rw-r--r--lang/php81/Makefile2
-rw-r--r--lang/php82/Makefile2
-rw-r--r--lang/php83/Makefile2
-rw-r--r--lang/php84-extensions/Makefile89
-rw-r--r--lang/php84-extensions/pkg-descr5
-rw-r--r--lang/php84/Makefile612
-rw-r--r--lang/php84/distinfo3
-rw-r--r--lang/php84/files/patch-TSRM_TSRM.c11
-rw-r--r--lang/php84/files/patch-build_Makefile.global19
-rw-r--r--lang/php84/files/patch-configure.ac27
-rw-r--r--lang/php84/files/patch-ext_hash_xxhash_xxhash.h46
-rw-r--r--lang/php84/files/patch-ext_pcre_php__pcre.h11
-rw-r--r--lang/php84/files/patch-sapi_apache2handler_config.m411
-rw-r--r--lang/php84/files/patch-sapi_fpm_config.m411
-rw-r--r--lang/php84/files/patch-sapi_fpm_www.conf.in17
-rw-r--r--lang/php84/files/php_fpm.in102
-rw-r--r--lang/php84/files/php_session.h328
-rw-r--r--lang/php84/pkg-descr6
-rw-r--r--lang/php84/pkg-message.mod24
-rw-r--r--lang/php84/pkg-plist321
-rw-r--r--lang/php84/pkg-plist.mod3
-rw-r--r--math/Makefile2
-rw-r--r--math/php84-bcmath/Makefile7
-rw-r--r--math/php84-gmp/Makefile7
-rw-r--r--misc/Makefile1
-rw-r--r--misc/php84-calendar/Makefile7
-rw-r--r--net-mgmt/Makefile1
-rw-r--r--net-mgmt/php84-snmp/Makefile7
-rw-r--r--net/Makefile3
-rw-r--r--net/php84-ldap/Makefile7
-rw-r--r--net/php84-soap/Makefile7
-rw-r--r--net/php84-sockets/Makefile7
-rw-r--r--security/Makefile2
-rw-r--r--security/php84-filter/Makefile7
-rw-r--r--security/php84-sodium/Makefile7
-rw-r--r--sysutils/Makefile2
-rw-r--r--sysutils/php84-fileinfo/Makefile7
-rw-r--r--sysutils/php84-posix/Makefile7
-rw-r--r--textproc/Makefile8
-rw-r--r--textproc/php84-ctype/Makefile7
-rw-r--r--textproc/php84-dom/Makefile7
-rw-r--r--textproc/php84-enchant/Makefile12
-rw-r--r--textproc/php84-simplexml/Makefile7
-rw-r--r--textproc/php84-xml/Makefile7
-rw-r--r--textproc/php84-xml/files/patch-compat.c13
-rw-r--r--textproc/php84-xmlreader/Makefile7
-rw-r--r--textproc/php84-xmlwriter/Makefile7
-rw-r--r--textproc/php84-xsl/Makefile12
-rw-r--r--www/Makefile4
-rw-r--r--www/mod_php84/Makefile18
-rw-r--r--www/php84-opcache/Makefile11
-rw-r--r--www/php84-session/Makefile7
-rw-r--r--www/php84-tidy/Makefile7
97 files changed, 2279 insertions, 11 deletions
diff --git a/Mk/Uses/php.mk b/Mk/Uses/php.mk
index 6195ad71a71e..370c736019da 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
+_ALL_PHP_VERSIONS= 81 82 83 84
# 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} == 83
+. if ${PHP_VER} == 84
+PHP_EXT_DIR= 20230901
+PHP_EXT_INC= hash json openssl pcre random spl
+. elif ${PHP_VER} == 83
PHP_EXT_DIR= 20230831
PHP_EXT_INC= hash json openssl pcre random spl
. elif ${PHP_VER} == 82
@@ -371,18 +374,19 @@ add-plist-phpext:
# non-version specific components
_USE_PHP_ALL= bcmath bitset bz2 calendar ctype curl dba dom \
enchant exif ffi fileinfo filter ftp gd gettext gmp \
- hash iconv igbinary imap intl json ldap mbstring mcrypt \
+ hash iconv igbinary intl json ldap mbstring mcrypt \
memcache memcached mysqli odbc opcache \
openssl pcntl pcre pdo pdo_dblib pdo_firebird pdo_mysql \
pdo_odbc pdo_pgsql pdo_sqlite phar pgsql posix \
- pspell radius random readline redis session shmop simplexml snmp \
+ radius random readline redis session shmop simplexml snmp \
soap sockets sodium spl sqlite3 sysvmsg sysvsem sysvshm \
tidy tokenizer xml xmlreader xmlrpc xmlwriter xsl zephir_parser \
zip zlib
# version specific components
-_USE_PHP_VER81= ${_USE_PHP_ALL}
-_USE_PHP_VER82= ${_USE_PHP_ALL}
-_USE_PHP_VER83= ${_USE_PHP_ALL}
+_USE_PHP_VER81= ${_USE_PHP_ALL} imap pspell
+_USE_PHP_VER82= ${_USE_PHP_ALL} imap pspell
+_USE_PHP_VER83= ${_USE_PHP_ALL} imap pspell
+_USE_PHP_VER84= ${_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 3c62ece4b8ce..60fc2628481a 100644
--- a/Mk/bsd.default-versions.mk
+++ b/Mk/bsd.default-versions.mk
@@ -128,7 +128,7 @@ PERL5_DEFAULT:= ${_PERL5_FROM_BIN:R}
. endif
# Possible values: 12, 13, 14, 15, 16
PGSQL_DEFAULT?= 16
-# Possible values: 8.1, 8.2, 8.3
+# Possible values: 8.1, 8.2, 8.3, 8.4
PHP_DEFAULT?= 8.2
# Possible values: rust, legacy
. if empty(ARCH:Naarch64:Namd64:Narmv7:Ni386:Npowerpc64:Npowerpc64le:Npowerpc:Nriscv64)
diff --git a/archivers/Makefile b/archivers/Makefile
index 46d216a9e410..538098670875 100644
--- a/archivers/Makefile
+++ b/archivers/Makefile
@@ -172,6 +172,10 @@
SUBDIR += php83-phar
SUBDIR += php83-zip
SUBDIR += php83-zlib
+ SUBDIR += php84-bz2
+ SUBDIR += php84-phar
+ SUBDIR += php84-zip
+ SUBDIR += php84-zlib
SUBDIR += pigz
SUBDIR += pixz
SUBDIR += plzip
diff --git a/archivers/php84-bz2/Makefile b/archivers/php84-bz2/Makefile
new file mode 100644
index 000000000000..8fff4dc6e6ae
--- /dev/null
+++ b/archivers/php84-bz2/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -bz2
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php84-phar/Makefile b/archivers/php84-phar/Makefile
new file mode 100644
index 000000000000..396abd5c0657
--- /dev/null
+++ b/archivers/php84-phar/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -phar
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php84-zip/Makefile b/archivers/php84-zip/Makefile
new file mode 100644
index 000000000000..95955ddd27ae
--- /dev/null
+++ b/archivers/php84-zip/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -zip
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php84-zlib/Makefile b/archivers/php84-zlib/Makefile
new file mode 100644
index 000000000000..400a4d0ca4e7
--- /dev/null
+++ b/archivers/php84-zlib/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -zlib
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php84-zlib/files/patch-zlib.c b/archivers/php84-zlib/files/patch-zlib.c
new file mode 100644
index 000000000000..fb0e9e44311a
--- /dev/null
+++ b/archivers/php84-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 9f24bd574c4e..12dc42049fe0 100644
--- a/converters/Makefile
+++ b/converters/Makefile
@@ -143,6 +143,8 @@
SUBDIR += php82-mbstring
SUBDIR += php83-iconv
SUBDIR += php83-mbstring
+ SUBDIR += php84-iconv
+ SUBDIR += php84-mbstring
SUBDIR += psiconv
SUBDIR += py-bencode.py
SUBDIR += py-bencoder
diff --git a/converters/php84-iconv/Makefile b/converters/php84-iconv/Makefile
new file mode 100644
index 000000000000..1697febce0c8
--- /dev/null
+++ b/converters/php84-iconv/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= converters
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -iconv
+
+.include "${MASTERDIR}/Makefile"
diff --git a/converters/php84-mbstring/Makefile b/converters/php84-mbstring/Makefile
new file mode 100644
index 000000000000..35c5867c296e
--- /dev/null
+++ b/converters/php84-mbstring/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= converters
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -mbstring
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/Makefile b/databases/Makefile
index 9edcb89fcdce..8d2bfeef13fc 100644
--- a/databases/Makefile
+++ b/databases/Makefile
@@ -627,6 +627,18 @@
SUBDIR += php83-pdo_sqlite
SUBDIR += php83-pgsql
SUBDIR += php83-sqlite3
+ SUBDIR += php84-dba
+ SUBDIR += php84-mysqli
+ SUBDIR += php84-odbc
+ SUBDIR += php84-pdo
+ SUBDIR += php84-pdo_dblib
+ SUBDIR += php84-pdo_firebird
+ SUBDIR += php84-pdo_mysql
+ SUBDIR += php84-pdo_odbc
+ SUBDIR += php84-pdo_pgsql
+ SUBDIR += php84-pdo_sqlite
+ SUBDIR += php84-pgsql
+ SUBDIR += php84-sqlite3
SUBDIR += phpliteadmin
SUBDIR += phpminiadmin
SUBDIR += phpmyadmin
diff --git a/databases/php84-dba/Makefile b/databases/php84-dba/Makefile
new file mode 100644
index 000000000000..2659c0d550ec
--- /dev/null
+++ b/databases/php84-dba/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -dba
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-dba/files/patch-config.m4 b/databases/php84-dba/files/patch-config.m4
new file mode 100644
index 000000000000..52274722f660
--- /dev/null
+++ b/databases/php84-dba/files/patch-config.m4
@@ -0,0 +1,26 @@
+--- config.m4.orig 2023-11-07 20:02:05 UTC
++++ config.m4
+@@ -387,6 +387,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
+@@ -429,7 +437,7 @@ if test "$PHP_DB4" != "no"; then
+ 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-5 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 db-18 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)])
+ fi
+ PHP_DBA_STD_RESULT(db4,Berkeley DB4)
+
diff --git a/databases/php84-mysqli/Makefile b/databases/php84-mysqli/Makefile
new file mode 100644
index 000000000000..490ba7d385b0
--- /dev/null
+++ b/databases/php84-mysqli/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -mysqli
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-odbc/Makefile b/databases/php84-odbc/Makefile
new file mode 100644
index 000000000000..985dcf21be00
--- /dev/null
+++ b/databases/php84-odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-odbc/files/patch-config.m4 b/databases/php84-odbc/files/patch-config.m4
new file mode 100644
index 000000000000..7cb9492b32f9
--- /dev/null
+++ b/databases/php84-odbc/files/patch-config.m4
@@ -0,0 +1,101 @@
+--- config.m4.orig 2023-11-07 20:02:05 UTC
++++ config.m4
+@@ -102,7 +102,7 @@ PHP_ARG_WITH([adabas],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([adabas],,
+ [AS_HELP_STRING([[--with-adabas[=DIR]]],
+- [Include Adabas D support [/usr/local]])])
++ [Include Adabas D support [/usr/local]])], [no], [no])
+
+ AC_MSG_CHECKING([for Adabas support])
+ if test "$PHP_ADABAS" != "no"; then
+@@ -132,7 +132,7 @@ PHP_ARG_WITH([sapdb],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([sapdb],,
+ [AS_HELP_STRING([[--with-sapdb[=DIR]]],
+- [Include SAP DB support [/usr/local]])])
++ [Include SAP DB support [/usr/local]])], [no], [no])
+
+ AC_MSG_CHECKING([for SAP DB support])
+ if test "$PHP_SAPDB" != "no"; then
+@@ -153,7 +153,7 @@ PHP_ARG_WITH([solid],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([solid],,
+ [AS_HELP_STRING([[--with-solid[=DIR]]],
+- [Include Solid support [/usr/local/solid]])])
++ [Include Solid support [/usr/local/solid]])], [no], [no])
+
+ AC_MSG_CHECKING(for Solid support)
+ if test "$PHP_SOLID" != "no"; then
+@@ -181,7 +181,7 @@ PHP_ARG_WITH([ibm-db2],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([ibm-db2],,
+ [AS_HELP_STRING([[--with-ibm-db2[=DIR]]],
+- [Include IBM DB2 support [/home/db2inst1/sqllib]])])
++ [Include IBM DB2 support [/home/db2inst1/sqllib]])], [no], [no])
+
+ AC_MSG_CHECKING(for IBM DB2 support)
+ if test "$PHP_IBM_DB2" != "no"; then
+@@ -222,7 +222,7 @@ PHP_ARG_WITH([empress],,
+ PHP_ARG_WITH([empress],,
+ [AS_HELP_STRING([[--with-empress[=DIR]]],
+ [Include Empress support $EMPRESSPATH (Empress Version >= 8.60
+- required)])])
++ required)])], [no], [no])
+
+ AC_MSG_CHECKING(for Empress support)
+ if test "$PHP_EMPRESS" != "no"; then
+@@ -248,7 +248,7 @@ PHP_ARG_WITH([empress-bcs],,
+ PHP_ARG_WITH([empress-bcs],,
+ [AS_HELP_STRING([[--with-empress-bcs[=DIR]]],
+ [Include Empress Local Access support $EMPRESSPATH (Empress Version >=
+- 8.60 required)])])
++ 8.60 required)])], [no], [no])
+
+ AC_MSG_CHECKING(for Empress local access support)
+ if test "$PHP_EMPRESS_BCS" != "no"; then
+@@ -294,7 +294,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])
+
+ AC_MSG_CHECKING(for a custom ODBC support)
+ if test "$PHP_CUSTOM_ODBC" != "no"; then
+@@ -317,7 +317,7 @@ PHP_ARG_WITH([iodbc],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([iodbc],,
+ [AS_HELP_STRING([--with-iodbc],
+- [Include iODBC support])])
++ [Include iODBC support])], [no], [no])
+
+ AC_MSG_CHECKING(whether to build with iODBC support)
+ if test "$PHP_IODBC" != "no"; then
+@@ -335,7 +335,7 @@ PHP_ARG_WITH([esoob],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([esoob],,
+ [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])
+
+ AC_MSG_CHECKING(for Easysoft ODBC-ODBC Bridge support)
+ if test "$PHP_ESOOB" != "no"; then
+@@ -358,7 +358,7 @@ PHP_ARG_WITH([unixODBC],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([unixODBC],,
+ [AS_HELP_STRING([--with-unixODBC],
+- [Include unixODBC support])])
++ [Include unixODBC support])], [no], [no])
+
+ AC_MSG_CHECKING(whether to build with unixODBC support)
+ if test "$PHP_UNIXODBC" != "no"; then
+@@ -386,7 +386,7 @@ PHP_ARG_WITH([dbmaker],,
+ if test -z "$ODBC_TYPE"; then
+ PHP_ARG_WITH([dbmaker],,
+ [AS_HELP_STRING([[--with-dbmaker[=DIR]]],
+- [Include DBMaker support])])
++ [Include DBMaker support])], [no], [no])
+
+ AC_MSG_CHECKING(for DBMaker support)
+ if test "$PHP_DBMAKER" != "no"; then
diff --git a/databases/php84-pdo/Makefile b/databases/php84-pdo/Makefile
new file mode 100644
index 000000000000..28ac0f2fba3d
--- /dev/null
+++ b/databases/php84-pdo/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pdo_dblib/Makefile b/databases/php84-pdo_dblib/Makefile
new file mode 100644
index 000000000000..7bfb770b7b4b
--- /dev/null
+++ b/databases/php84-pdo_dblib/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo_dblib
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pdo_firebird/Makefile b/databases/php84-pdo_firebird/Makefile
new file mode 100644
index 000000000000..7ca4ffdcafef
--- /dev/null
+++ b/databases/php84-pdo_firebird/Makefile
@@ -0,0 +1,9 @@
+CATEGORIES= databases
+
+PORTREVISION= 0
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo_firebird
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pdo_mysql/Makefile b/databases/php84-pdo_mysql/Makefile
new file mode 100644
index 000000000000..85586870b7b4
--- /dev/null
+++ b/databases/php84-pdo_mysql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo_mysql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pdo_odbc/Makefile b/databases/php84-pdo_odbc/Makefile
new file mode 100644
index 000000000000..7b07fd985ad2
--- /dev/null
+++ b/databases/php84-pdo_odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo_odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pdo_pgsql/Makefile b/databases/php84-pdo_pgsql/Makefile
new file mode 100644
index 000000000000..ea1956dcd010
--- /dev/null
+++ b/databases/php84-pdo_pgsql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo_pgsql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pdo_sqlite/Makefile b/databases/php84-pdo_sqlite/Makefile
new file mode 100644
index 000000000000..d6e1bc6cc919
--- /dev/null
+++ b/databases/php84-pdo_sqlite/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pdo_sqlite
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-pgsql/Makefile b/databases/php84-pgsql/Makefile
new file mode 100644
index 000000000000..16982111cb58
--- /dev/null
+++ b/databases/php84-pgsql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pgsql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php84-sqlite3/Makefile b/databases/php84-sqlite3/Makefile
new file mode 100644
index 000000000000..997147cd30b4
--- /dev/null
+++ b/databases/php84-sqlite3/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -sqlite3
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/Makefile b/devel/Makefile
index 6e00e4f1c141..85c256b9ffa1 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -4208,6 +4208,16 @@
SUBDIR += php83-sysvsem
SUBDIR += php83-sysvshm
SUBDIR += php83-tokenizer
+ SUBDIR += php84-ffi
+ SUBDIR += php84-gettext
+ SUBDIR += php84-intl
+ SUBDIR += php84-pcntl
+ SUBDIR += php84-readline
+ SUBDIR += php84-shmop
+ SUBDIR += php84-sysvmsg
+ SUBDIR += php84-sysvsem
+ SUBDIR += php84-sysvshm
+ SUBDIR += php84-tokenizer
SUBDIR += phpunit10
SUBDIR += phpunit11
SUBDIR += phpunit8
diff --git a/devel/php84-ffi/Makefile b/devel/php84-ffi/Makefile
new file mode 100644
index 000000000000..519cb30a2474
--- /dev/null
+++ b/devel/php84-ffi/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -ffi
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-gettext/Makefile b/devel/php84-gettext/Makefile
new file mode 100644
index 000000000000..8c53cd9b8350
--- /dev/null
+++ b/devel/php84-gettext/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -gettext
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-intl/Makefile b/devel/php84-intl/Makefile
new file mode 100644
index 000000000000..3382ccab0feb
--- /dev/null
+++ b/devel/php84-intl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -intl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-pcntl/Makefile b/devel/php84-pcntl/Makefile
new file mode 100644
index 000000000000..c3b73357dfeb
--- /dev/null
+++ b/devel/php84-pcntl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -pcntl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-readline/Makefile b/devel/php84-readline/Makefile
new file mode 100644
index 000000000000..ce9ad74d83b0
--- /dev/null
+++ b/devel/php84-readline/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -readline
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-shmop/Makefile b/devel/php84-shmop/Makefile
new file mode 100644
index 000000000000..5f54638995bd
--- /dev/null
+++ b/devel/php84-shmop/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -shmop
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-sysvmsg/Makefile b/devel/php84-sysvmsg/Makefile
new file mode 100644
index 000000000000..2d5d0d905c7a
--- /dev/null
+++ b/devel/php84-sysvmsg/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -sysvmsg
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-sysvsem/Makefile b/devel/php84-sysvsem/Makefile
new file mode 100644
index 000000000000..167625a6901d
--- /dev/null
+++ b/devel/php84-sysvsem/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -sysvsem
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-sysvshm/Makefile b/devel/php84-sysvshm/Makefile
new file mode 100644
index 000000000000..00acd5af9aa3
--- /dev/null
+++ b/devel/php84-sysvshm/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -sysvshm
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php84-tokenizer/Makefile b/devel/php84-tokenizer/Makefile
new file mode 100644
index 000000000000..84373eea74df
--- /dev/null
+++ b/devel/php84-tokenizer/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -tokenizer
+
+.include "${MASTERDIR}/Makefile"
diff --git a/ftp/Makefile b/ftp/Makefile
index db95adcb8b32..a3907c2a4738 100644
--- a/ftp/Makefile
+++ b/ftp/Makefile
@@ -59,6 +59,8 @@
SUBDIR += php82-ftp
SUBDIR += php83-curl
SUBDIR += php83-ftp
+ SUBDIR += php83-curl
+ SUBDIR += php84-ftp
SUBDIR += phpwebftp
SUBDIR += proftpd
SUBDIR += proftpd-mod_vroot
diff --git a/ftp/php84-curl/Makefile b/ftp/php84-curl/Makefile
new file mode 100644
index 000000000000..578fa6d69e3f
--- /dev/null
+++ b/ftp/php84-curl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= ftp
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -curl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/ftp/php84-ftp/Makefile b/ftp/php84-ftp/Makefile
new file mode 100644
index 000000000000..97f93c87c3f0
--- /dev/null
+++ b/ftp/php84-ftp/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= ftp
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -ftp
+
+.include "${MASTERDIR}/Makefile"
diff --git a/graphics/Makefile b/graphics/Makefile
index cd38ce73984e..654d7107cfe0 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -811,6 +811,8 @@
SUBDIR += php82-gd
SUBDIR += php83-exif
SUBDIR += php83-gd
+ SUBDIR += php84-exif
+ SUBDIR += php84-gd
SUBDIR += phplot
SUBDIR += picpuz
SUBDIR += piddle
diff --git a/graphics/php84-exif/Makefile b/graphics/php84-exif/Makefile
new file mode 100644
index 000000000000..b92ddd85d7da
--- /dev/null
+++ b/graphics/php84-exif/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= graphics
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -exif
+
+.include "${MASTERDIR}/Makefile"
diff --git a/graphics/php84-gd/Makefile b/graphics/php84-gd/Makefile
new file mode 100644
index 000000000000..7f7fc1c448bc
--- /dev/null
+++ b/graphics/php84-gd/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= graphics
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -gd
+
+.include "${MASTERDIR}/Makefile"
diff --git a/lang/Makefile b/lang/Makefile
index 7a8e3173eb9b..7d655bde10ca 100644
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -280,6 +280,7 @@
SUBDIR += php82-extensions
SUBDIR += php83
SUBDIR += php83-extensions
+ SUBDIR += php84
SUBDIR += picoc
SUBDIR += picolisp
SUBDIR += pkl
diff --git a/lang/php81/Makefile b/lang/php81/Makefile
index f49642639ecd..937623ecc947 100644
--- a/lang/php81/Makefile
+++ b/lang/php81/Makefile
@@ -184,7 +184,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php
USES+= php:ext,noflavors
PHP_MODNAME= ${PKGNAMESUFFIX:S/-//}
PHP_VER= 81
-IGNORE_WITH_PHP= 82 83
+IGNORE_WITH_PHP= 82 83 84
EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME}
WRKSRC= ${WRKDIR}/${EXTSUBDIR}
diff --git a/lang/php82/Makefile b/lang/php82/Makefile
index 50b7b1f6e7ba..5cefc72774e5 100644
--- a/lang/php82/Makefile
+++ b/lang/php82/Makefile
@@ -177,7 +177,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php
USES+= php:ext,noflavors
PHP_MODNAME= ${PKGNAMESUFFIX:S/-//}
PHP_VER= 82
-IGNORE_WITH_PHP= 81 83
+IGNORE_WITH_PHP= 81 83 84
EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME}
WRKSRC= ${WRKDIR}/${EXTSUBDIR}
diff --git a/lang/php83/Makefile b/lang/php83/Makefile
index 3a594f51c3e5..392e005a4f2c 100644
--- a/lang/php83/Makefile
+++ b/lang/php83/Makefile
@@ -195,7 +195,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php
USES+= php:ext,noflavors
PHP_MODNAME= ${PKGNAMESUFFIX:S/-//}
PHP_VER= 83
-IGNORE_WITH_PHP= 81 82
+IGNORE_WITH_PHP= 81 82 84
EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME}
WRKSRC= ${WRKDIR}/${EXTSUBDIR}
diff --git a/lang/php84-extensions/Makefile b/lang/php84-extensions/Makefile
new file mode 100644
index 000000000000..55bc9f11b567
--- /dev/null
+++ b/lang/php84-extensions/Makefile
@@ -0,0 +1,89 @@
+PORTNAME= php84
+PORTVERSION= 1.0
+CATEGORIES= lang
+PKGNAMESUFFIX= -extensions
+
+MAINTAINER= bofh@FreeBSD.org
+COMMENT= "meta-port" to install PHP extensions (8.4.X branch)
+WWW= https://www.php.net/
+
+USES= metaport php
+
+PHP_VER= 84
+IGNORE_WITH_PHP= 81 82 83
+
+OPTIONS_DEFINE= BCMATH BZ2 CALENDAR CTYPE CURL DBA DOM ENCHANT EXIF FFI \
+ FILEINFO FILTER FTP GD GETTEXT GMP ICONV INTL LDAP \
+ MBSTRING MYSQLI ODBC OPCACHE PCNTL PDO \
+ PDO_DBLIB PDO_FIREBIRD PDO_MYSQL PDO_ODBC PDO_PGSQL \
+ PDO_SQLITE PGSQL PHAR POSIX READLINE SESSION \
+ SHMOP SIMPLEXML SNMP SOAP SOCKETS SODIUM SQLITE3 \
+ SYSVMSG SYSVSEM SYSVSHM TIDY TOKENIZER XML XMLREADER \
+ XMLWRITER XSL ZIP ZLIB
+OPTIONS_DEFAULT= CTYPE DOM FILTER ICONV OPCACHE PDO PDO_SQLITE PHAR \
+ POSIX SESSION SIMPLEXML SQLITE3 TOKENIZER XML XMLREADER \
+ XMLWRITER
+
+BCMATH_DESC= bc style precision math functions
+BZ2_DESC= bzip2 library support
+CALENDAR_DESC= calendar conversion support
+CTYPE_DESC= ctype functions
+CURL_DESC= CURL support
+DBA_DESC= dba support
+DOM_DESC= DOM support
+ENCHANT_DESC= Enchant spelling support
+EXIF_DESC= EXIF support
+FFI_DESC= Foreign Function Interface support
+FILEINFO_DESC= fileinfo support
+FILTER_DESC= input filter support
+FTP_DESC= FTP support
+GD_DESC= GD library support
+GETTEXT_DESC= gettext library support
+GMP_DESC= GNU MP support
+ICONV_DESC= iconv support
+INTL_DESC= Internationalization(ICU)
+LDAP_DESC= OpenLDAP support
+MBSTRING_DESC= multibyte string support
+MYSQLI_DESC= MySQLi database support
+ODBC_DESC= ODBC support
+OPCACHE_DESC= OPcache support
+PCNTL_DESC= pcntl support (CLI only)
+PDO_DBLIB_DESC= PDO DBLIB-DB driver
+PDO_DESC= PHP Data Objects Interface (PDO)
+PDO_FIREBIRD_DESC= PDO Firebird driver
+PDO_MYSQL_DESC= PDO MySQL driver
+PDO_ODBC_DESC= PDO ODBC driver
+PDO_PGSQL_DESC= PDO PostgreSQL driver
+PDO_SQLITE_DESC= PDO sqlite driver
+PHAR_DESC= phar support
+POSIX_DESC= POSIX-like functions
+READLINE_DESC= readline support (CLI only)
+SESSION_DESC= session support
+SHMOP_DESC= shmop support
+SIMPLEXML_DESC= simplexml support
+SNMP_DESC= SNMP support
+SOAP_DESC= SOAP support
+SOCKETS_DESC= sockets support
+SODIUM_DESC= Sodium encryption support
+SQLITE3_DESC= sqlite3 support
+SYSVMSG_DESC= System V message support
+SYSVSEM_DESC= System V semaphore support
+SYSVSHM_DESC= System V shared memory support
+TIDY_DESC= TIDY support
+TOKENIZER_DESC= tokenizer support
+XMLREADER_DESC= XMLReader support
+XMLWRITER_DESC= XMLWriter support
+XML_DESC= XML support
+XSL_DESC= XSL support (Implies DOM)
+ZIP_DESC= ZIP support
+ZLIB_DESC= ZLIB support
+
+.include <bsd.port.options.mk>
+
+.for opt in ${OPTIONS_DEFINE}
+. if ${PORT_OPTIONS:M${opt}}
+USE_PHP+= ${opt:tl}
+. endif
+.endfor
+
+.include <bsd.port.mk>
diff --git a/lang/php84-extensions/pkg-descr b/lang/php84-extensions/pkg-descr
new file mode 100644
index 000000000000..4acc6c163e60
--- /dev/null
+++ b/lang/php84-extensions/pkg-descr
@@ -0,0 +1,5 @@
+This is a "meta-port" to install the extensions for PHP 8.0
+
+Defaults to:
+ctype, dom, filter, iconv, json, opcache, pdo, pdo_sqlite, phar, posix,
+session, simplexml, sqlite3, tokenizer, xml, xmlreader and xmlwriter.
diff --git a/lang/php84/Makefile b/lang/php84/Makefile
new file mode 100644
index 000000000000..460fe40cb7e6
--- /dev/null
+++ b/lang/php84/Makefile
@@ -0,0 +1,612 @@
+PORTNAME= php84
+DISTVERSION= 8.4.0alpha1
+PORTREVISION?= 0
+CATEGORIES?= lang devel www
+MASTER_SITES= https://downloads.php.net/~saki/ \
+ https://downloads.php.net/~calvinb/
+DISTNAME= php-${DISTVERSION}
+
+MAINTAINER= bofh@FreeBSD.org
+COMMENT= PHP Scripting Language (8.4.X branch)
+WWW= https://www.php.net/
+
+LICENSE= PHP301
+
+USES+= compiler:c11 cpe gnome localbase pkgconfig tar:xz
+CPE_PRODUCT= php
+PHP_VER= 84
+
+CONFLICTS_INSTALL?= php[0-9][0-9]${PKGNAMESUFFIX}
+
+.if !defined(PKGNAMESUFFIX)
+LIB_DEPENDS= libargon2.so:security/libargon2 \
+ libpcre2-8.so:devel/pcre2
+
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS+= \
+ --disable-all \
+ --program-prefix="" \
+ --with-config-file-scan-dir=${PREFIX}/etc/php \
+ --with-layout=GNU \
+ --with-libxml \
+ --with-openssl \
+ --with-password-argon2=${LOCALBASE}
+
+USES+= autoreconf:build ssl
+USE_GNOME= libxml2
+
+LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl
+# PR230207 Allow relocations against read-only segments (override lld default)
+LDFLAGS_i386= -Wl,-z,notext
+
+OPTIONS_DEFINE+=CGI CLI DEBUG DTRACE EMBED FPM IPV6 LINKTHR \
+ MYSQLND NOASLR PCRE PHPDBG ZTS
+OPTIONS_DEFAULT= CGI CLI DTRACE EMBED FPM LINKTHR MYSQLND PCRE
+OPTIONS_EXCLUDE_DragonFly= DTRACE
+# ld(1) fails to link probes: Relocations in generic ELF (EM: 0)
+OPTIONS_EXCLUDE_aarch64= DTRACE
+# dt_modtext:opensolaris/ib/libdtrace/common/dt_link.c: arm not impemented
+OPTIONS_EXCLUDE_armv6= DTRACE
+OPTIONS_EXCLUDE_armv7= DTRACE
+# Bug 197128: No ASM code for MIPS/MIPS64, disable FPM
+OPTIONS_EXCLUDE_mips= DTRACE FPM
+OPTIONS_EXCLUDE_mips64= DTRACE FPM
+OPTIONS_EXCLUDE_riscv64= DTRACE
+NO_OPTIONS_SORT= yes
+OPTIONS_SUB= yes
+
+CGI_DESC= Build CGI version
+CLI_DESC= Build CLI version
+EMBED_DESC= Build embedded library
+FPM_DESC= Build FPM version
+LINKTHR_DESC= Link thread lib (for threaded extensions)
+MYSQLND_DESC= Build with MySQL Native Driver
+PCRE_DESC= Use system pcre instead of bundled one
+PHPDBG_DESC= Interactive PHP debugger
+ZTS_DESC= Force Zend Thread Safety (ZTS) build
+
+CGI_CONFIGURE_OFF= --disable-cgi
+CGI_VARS= PHP_SAPI+=cgi
+CLI_CONFIGURE_OFF= --disable-cli
+CLI_VARS= PHP_SAPI+=cli
+DEBUG_CONFIGURE_ON= --enable-debug
+DTRACE_CONFIGURE_ON= --enable-dtrace
+EMBED_CONFIGURE_ON= --enable-embed
+EMBED_VARS= PHP_SAPI+=embed
+FPM_CONFIGURE_ON= --enable-fpm \
+ --with-fpm-group=${WWWGRP} \
+ --with-fpm-user=${WWWOWN}
+FPM_VARS= PHP_SAPI+=fpm \
+ USE_RC_SUBR+=php_fpm
+IPV6_CONFIGURE_OFF= --disable-ipv6
+LINKTHR_LIBS= -lpthread
+NOASLR_USES= elfctl
+MYSQLND_CONFIGURE_ON= --enable-mysqlnd
+PCRE_BUILD_DEPENDS= re2c>0:devel/re2c
+PCRE_CONFIGURE_ON= --with-external-pcre=${LOCALBASE}
+PCRE_PLIST_SUB= BUNDLED_PCRE="@comment "
+PCRE_PLIST_SUB_OFF= BUNDLED_PCRE=""
+PHPDBG_CONFIGURE_ON= --enable-phpdbg
+PHPDBG_VARS= PHP_SAPI+=phpdbg
+ZTS_CONFIGURE_ON= --enable-zts
+ZTS_CONFIGURE_ENV= pthreads_working="yes"
+
+DESTDIRNAME= INSTALL_ROOT
+
+.if defined(PKGNAMEPREFIX)
+USES+= apache
+PLIST= ${PKGDIR}/pkg-plist.mod
+PKGMESSAGE= ${PKGDIR}/pkg-message.mod
+MODULENAME= libphp
+SHORTMODNAME= php
+WARNING= "!!! If you have a threaded Apache, you must build ${PHP_PORT} with ZTS support to enable thread-safety in extensions !!!"
+WARNING+= "!!! Consider switching to php-fpm and mod_proxy_fcgi as per Apache httpd recommendations !!!"
+.endif
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:NOASLR}
+.if ${PORT_OPTIONS:MCLI}
+ELF_FEATURES+=+noaslr:sapi/cli/php
+.endif
+.if ${PORT_OPTIONS:MCGI}
+ELF_FEATURES+=+noaslr:sapi/cgi/php-cgi
+.endif
+.if ${PORT_OPTIONS:MPHPDBG}
+ELF_FEATURES+=+noaslr:sapi/phpdbg/phpdbg
+.endif
+.if ${PORT_OPTIONS:MFPM}
+ELF_FEATURES+=+noaslr:sapi/fpm/php-fpm
+.endif
+.endif
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == riscv64
+CONFIGURE_ARGS+= --without-pcre-jit
+.endif
+
+.if ${PORT_OPTIONS:MPHPDBG} && ${PORT_OPTIONS:MDEBUG}
+CONFIGURE_ARGS+= --enable-phpdbg-debug
+.endif
+
+.if ${PORT_OPTIONS:MCLI} || ${PORT_OPTIONS:MEMBED}
+PLIST_SUB+= SAPI_INC=""
+.else
+PLIST_SUB+= SAPI_INC="@comment "
+.endif
+
+CONFIGURE_ENV+= ac_cv_decimal_fp_supported="no" \
+ lt_cv_path_SED="sed" \
+ OPENSSL_CFLAGS="-I${OPENSSLINC}" \
+ OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" \
+ PHP_OPENSSL=yes
+
+post-patch:
+ @${TOUCH} ${WRKSRC}/ext/php_config.h
+
+post-patch-FPM-on:
+ @${REINPLACE_CMD} -e "s|^;\(pid\)|\1|;s|^;\(pm\.[a-z_]*_servers\)|\1|" \
+ ${WRKSRC}/sapi/fpm/php-fpm.conf.in
+
+pre-configure:
+ @(cd ${WRKSRC} && ${SETENV} MAKE=${MAKE_CMD} ./buildconf --force)
+
+.if !defined(PKGNAMEPREFIX)
+post-build:
+ @${ECHO_CMD} "PHP_VER=${PHP_VER}" > ${WRKDIR}/php.conf
+ @${ECHO_CMD} "PHP_VERSION=${PORTVERSION}" >> ${WRKDIR}/php.conf
+ @${ECHO_CMD} "PHP_SAPI=${PHP_SAPI}" >> ${WRKDIR}/php.conf
+ @${ECHO_CMD} -n "PHP_EXT_DIR=" >> ${WRKDIR}/php.conf
+ @${SH} ${WRKSRC}/scripts/php-config --extension-dir | ${SED} -ne 's,^${PREFIX}/lib/php/,,p' >> ${WRKDIR}/php.conf
+ @${ECHO_CMD} "PHP_EXT_INC=hash json openssl pcre random spl" >> ${WRKDIR}/php.conf
+
+test: build
+ @(cd ${WRKSRC} && ${MAKE} test)
+
+post-install:
+ ${INSTALL_DATA} ${WRKSRC}/php.ini-development ${WRKSRC}/php.ini-production \
+ ${WRKDIR}/php.conf ${STAGEDIR}/${PREFIX}/etc
+
+post-install-CGI-on:
+ ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/bin/php-cgi
+
+post-install-CLI-on:
+ ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/bin/php
+
+post-install-EMBED-on:
+ ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/lib/libphp.so
+
+post-install-FPM-on:
+ ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/sbin/php-fpm
+
+post-install-PHPDBG-on:
+ ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/bin/phpdbg
+
+.else
+do-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/${APACHEMODDIR}
+ ${INSTALL_LIB} ${WRKSRC}/libs/${MODULENAME}.so \
+ ${STAGEDIR}${PREFIX}/${APACHEMODDIR}
+.endif
+
+.else
+COMMENT= The ${PHP_MODNAME} shared extension for php
+
+USES+= php:ext,noflavors
+PHP_MODNAME= ${PKGNAMESUFFIX:S/-//}
+PHP_VER= 84
+IGNORE_WITH_PHP= 81 82 83
+
+EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME}
+WRKSRC= ${WRKDIR}/${EXTSUBDIR}
+PATCHDIR= ${.CURDIR}/files
+PLIST= ${NONEXISTENT}
+
+EXTRACT_AFTER_ARGS?= ${EXTSUBDIR}
+
+TEST_TARGET= test
+
+.if ${PHP_MODNAME} == "bcmath"
+CONFIGURE_ARGS+= --enable-bcmath
+
+PHP_HEADER_DIRS= libbcmath/src
+.endif
+
+.if ${PHP_MODNAME} == "bz2"
+CONFIGURE_ARGS+= --with-bz2=/usr
+.endif
+
+.if ${PHP_MODNAME} == "calendar"
+CONFIGURE_ARGS+= --enable-calendar
+.endif
+
+.if ${PHP_MODNAME} == "ctype"
+CONFIGURE_ARGS+= --enable-ctype
+.endif
+
+.if ${PHP_MODNAME} == "curl"
+LIB_DEPENDS+= libcurl.so:ftp/curl
+
+CONFIGURE_ARGS+= --with-curl=${LOCALBASE}
+USES+= pkgconfig
+.endif
+
+.if ${PHP_MODNAME} == "dba"
+CONFIGURE_ARGS+= --enable-dba
+
+OPTIONS_DEFINE= CDB DB4 FLATFILE GDBM INIFILE LMDB QDBM TOKYO
+OPTIONS_DEFAULT= CDB FLATFILE INIFILE
+
+CDB_DESC= cdb database support
+DB4_DESC= Berkeley DB4 support
+FLATFILE_DESC= flatfile support
+GDBM_DESC= GDBM database support
+INIFILE_DESC= INI file support
+LMDB_DESC= LMDB database support
+QDBM_DESC= QDBM database support
+TOKYO_DESC= Tokyo Cabinet database support
+
+CDB_CONFIGURE_OFF= --without-cdb
+DB4_CONFIGURE_ON= --with-db4=${LOCALBASE}
+DB4_USES= bdb
+DB4_VARS= WITH_BDB_HIGHEST=yes
+FLATFILE_CONFIGURE_ON= --disable-flatfile
+GDBM_LIB_DEPENDS= libgdbm.so:databases/gdbm
+GDBM_CONFIGURE_ARGS= --with-gdbm=${LOCALBASE}
+INIFILE_CONFIGURE_OFF= --disable-inifile
+LMDB_LIB_DEPENDS= liblmdb.so:databases/lmdb
+LMDB_CONFIGURE_ARGS= --with-lmdb=${LOCALBASE}
+QDBM_LIB_DEPENDS= libqdbm.so:databases/qdbm
+QDBM_CONFIGURE_ARGS= --with-qdbm=${LOCALBASE}
+TOKYO_LIB_DEPENDS= libtokyocabinet.so:databases/tokyocabinet
+TOKYO_CONFIGURE_ON= --with-tcadb=${LOCALBASE}
+
+PHP_HEADER_DIRS= libcdb libflatfile libinifile
+.endif
+
+.if ${PHP_MODNAME} == "dom"
+CONFIGURE_ARGS+= --enable-dom
+
+USES+= pkgconfig
+USE_GNOME= libxml2
+.endif
+
+.if ${PHP_MODNAME} == "enchant"
+LIB_DEPENDS+= libenchant-2.so:textproc/enchant2
+CONFIGURE_ARGS+=--with-enchant=${LOCALBASE}
+USES+= pkgconfig
+.endif
+
+.if ${PHP_MODNAME} == "exif"
+CONFIGURE_ARGS+= --enable-exif
+.endif
+
+.if ${PHP_MODNAME} == "ffi"
+LIB_DEPENDS= libffi.so:devel/libffi
+CONFIGURE_ARGS+= --with-ffi
+.endif
+
+.if ${PHP_MODNAME} == "fileinfo"
+CONFIGURE_ARGS+= --enable-fileinfo
+
+PHP_HEADER_DIRS= libmagic
+.endif
+
+.if ${PHP_MODNAME} == "filter"
+CONFIGURE_ARGS+= --enable-filter
+.endif
+
+.if ${PHP_MODNAME} == "ftp"
+CONFIGURE_ARGS+= --enable-ftp
+
+CONFIGURE_ENV+= OPENSSL_CFLAGS="-I${OPENSSLINC}" \
+ OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" \
+ PHP_OPENSSL=yes
+
+LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl
+USES+= pkgconfig ssl
+.endif
+
+.if ${PHP_MODNAME} == "gd"
+LIB_DEPENDS= libfreetype.so:print/freetype2 \
+ libgd.so:graphics/gd \
+ libpng.so:graphics/png
+USES+= jpeg
+
+CONFIGURE_ARGS+= --enable-gd \
+ --with-external-gd
+
+EXTRACT_AFTER_ARGS= --no-same-owner --no-same-permissions --exclude libgd \
+ php-${DISTVERSION}/ext/gd
+
+OPTIONS_DEFINE= JIS WEBP X11
+
+JIS_DESC= Enable JIS-mapped Japanese font support
+WEBP_DESC= Enable WebP image format support
+X11_DESC= Enable XPM support
+JIS_CONFIGURE_ON= --enable-gd-jis-conv
+WEBP_CONFIGURE_ON= --with-webp
+WEBP_LIB_DEPENDS= libwebp.so:graphics/webp
+X11_CONFIGURE_ON= --with-xpm
+X11_USE= XORG=xpm
+X11_USES= xorg
+.endif
+
+.if ${PHP_MODNAME} == "gettext"
+CONFIGURE_ARGS+= --with-gettext=${LOCALBASE}
+
+USES+= gettext
+.endif
+
+.if ${PHP_MODNAME} == "gmp"
+LIB_DEPENDS+= libgmp.so:math/gmp
+
+CONFIGURE_ARGS+= --with-gmp=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "iconv"
+CONFIGURE_ARGS+= --with-iconv=${LOCALBASE}
+
+USES+= iconv:translit
+.endif
+
+.if ${PHP_MODNAME} == "intl"
+LIB_DEPENDS= libicui18n.so:devel/icu
+USES+= pkgconfig
+CPPFLAGS+= -DU_USING_ICU_NAMESPACE=1
+.endif
+
+.if ${PHP_MODNAME} == "ldap"
+LIB_DEPENDS+=libsasl2.so:security/cyrus-sasl2
+CONFIGURE_ARGS+=--with-ldap=${LOCALBASE} --with-ldap-sasl=${LOCALBASE}
+USES+= ldap
+.endif
+
+.if ${PHP_MODNAME} == "mbstring"
+
+CONFIGURE_ARGS+= --enable-mbstring
+
+OPTIONS_DEFINE= REGEX
+OPTIONS_DEFAULT= REGEX
+
+REGEX_DESC= Enable multibyte regex support
+REGEX_LIB_DEPENDS= libonig.so:devel/oniguruma
+REGEX_CONFIGURE_OFF= --disable-mbregex
+
+PHP_HEADER_DIRS= libmbfl libmbfl/filters libmbfl/mbfl libmbfl/nls
+.endif
+
+.if ${PHP_MODNAME} == "mysqli"
+CONFIGURE_ARGS+= --with-mysqli
+.endif
+
+.if ${PHP_MODNAME} == "odbc"
+LIB_DEPENDS+= libodbc.so:databases/unixODBC
+
+CONFIGURE_ARGS+= --with-unixODBC=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "opcache"
+# This is needed by Zend extensions, keep before everything.
+PHP_MOD_PRIO= 10
+CONFIGURE_ARGS+= --enable-opcache
+.endif
+
+.if ${PHP_MODNAME} == "pcntl"
+CONFIGURE_ARGS+= --enable-pcntl
+.endif
+
+.if ${PHP_MODNAME} == "pdo"
+CONFIGURE_ARGS+= --enable-pdo
+.endif
+
+.if ${PHP_MODNAME} == "pdo_dblib"
+CONFIGURE_ARGS+= --with-pdo-dblib=${LOCALBASE}
+
+USE_PHP= pdo:build
+
+OPTIONS_DEFINE= MSSQL
+
+MSSQL_DESC= Enable Microsoft SQL Server support
+MSSQL_LIB_DEPENDS= libsybdb.so:databases/freetds
+MSSQL_LIB_DEPENDS_OFF= libct.so:databases/freetds
+.endif
+
+.if ${PHP_MODNAME} == "pdo_firebird"
+CONFIGURE_ARGS+= --with-pdo-firebird=${LOCALBASE}
+
+USES+= firebird
+USE_PHP= pdo:build
+.endif
+
+.if ${PHP_MODNAME} == "pdo_odbc"
+LIB_DEPENDS+= libodbc.so:databases/unixODBC
+CONFIGURE_ARGS+= --with-pdo-odbc=unixODBC,${LOCALBASE}
+
+USE_PHP= pdo:build
+.endif
+
+.if ${PHP_MODNAME} == "pdo_mysql"
+OPTIONS_DEFINE= MYSQLND
+OPTIONS_DEFAULT= MYSQLND
+
+MYSQLND_DESC= Use MySQL Native Driver
+
+MYSQLND_CONFIGURE_ON= --with-pdo-mysql=mysqlnd
+MYSQLND_CONFIGURE_OFF= --with-pdo-mysql=${LOCALBASE} \
+ --with-zlib-dir=/usr
+MYSQLND_USES_OFF= mysql
+
+USE_PHP= pdo:build
+.endif
+
+.if ${PHP_MODNAME} == "pdo_pgsql"
+USES+= pgsql
+
+CONFIGURE_ARGS+= --with-pdo-pgsql=${LOCALBASE}
+
+USE_PHP= pdo:build
+.endif
+
+.if ${PHP_MODNAME} == "pdo_sqlite"
+USES+= localbase sqlite
+CONFIGURE_ARGS+= --with-pdo-sqlite=${LOCALBASE}
+
+USE_PHP= pdo:build
+.endif
+
+.if ${PHP_MODNAME} == "pgsql"
+USES+= pgsql
+
+CONFIGURE_ARGS+= --with-pgsql=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "phar"
+CONFIGURE_ARGS+= --enable-phar
+.endif
+
+.if ${PHP_MODNAME} == "posix"
+CONFIGURE_ARGS+= --enable-posix
+.endif
+
+.if ${PHP_MODNAME} == "readline"
+CONFIGURE_ARGS+=--with-libedit
+USES+= libedit
+.endif
+
+.if ${PHP_MODNAME} == "session"
+CONFIGURE_ARGS+= --enable-session
+PHP_MOD_PRIO= 18
+.endif
+
+.if ${PHP_MODNAME} == "shmop"
+CONFIGURE_ARGS+= --enable-shmop
+.endif
+
+.if ${PHP_MODNAME} == "simplexml"
+CONFIGURE_ARGS+= --enable-simplexml
+
+USES+= pkgconfig
+USE_GNOME= libxml2
+.endif
+
+.if ${PHP_MODNAME} == "snmp"
+CONFIGURE_ARGS+= --with-snmp=${LOCALBASE}
+
+CONFIGURE_ENV+= ac_cv_buggy_snprint_value="no"
+
+LIB_DEPENDS+= libnetsnmp.so:net-mgmt/net-snmp
+LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl
+USES+= ssl
+.endif
+
+.if ${PHP_MODNAME} == "soap"
+CONFIGURE_ARGS+= --enable-soap
+
+USES+= pkgconfig
+USE_GNOME= libxml2
+.endif
+
+.if ${PHP_MODNAME} == "sockets"
+CONFIGURE_ARGS+= --enable-sockets
+CONFIGURE_ENV+= LOCAL_CREDS_PERSISTENT=yes
+.endif
+
+.if ${PHP_MODNAME} == "sodium"
+CONFIGURE_ARGS+= --with-sodium=${LOCALBASE}
+LIB_DEPENDS+= libsodium.so:security/libsodium
+.endif
+
+.if ${PHP_MODNAME} == "sqlite3"
+USES+= localbase pkgconfig sqlite
+CONFIGURE_ARGS+= --with-sqlite3=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "sysvmsg"
+CONFIGURE_ARGS+= --enable-sysvmsg
+.endif
+
+.if ${PHP_MODNAME} == "sysvsem"
+CONFIGURE_ARGS+= --enable-sysvsem
+.endif
+
+.if ${PHP_MODNAME} == "sysvshm"
+CONFIGURE_ARGS+= --enable-sysvshm
+.endif
+
+.if ${PHP_MODNAME} == "tidy"
+CONFIGURE_ARGS+= --with-tidy=${LOCALBASE}
+
+LIB_DEPENDS+= libtidy5.so:www/tidy-html5
+.endif
+
+.if ${PHP_MODNAME} == "tokenizer"
+CONFIGURE_ARGS+= --enable-tokenizer
+.endif
+
+.if ${PHP_MODNAME} == "xml"
+CONFIGURE_ARGS+= --enable-xml
+
+USES+= pkgconfig
+USE_GNOME= libxml2
+.endif
+
+.if ${PHP_MODNAME} == "xmlreader"
+CONFIGURE_ARGS+= --enable-xmlreader
+
+USE_GNOME= libxml2
+
+USE_PHP= dom:build
+.endif
+
+.if ${PHP_MODNAME} == "xmlwriter"
+CONFIGURE_ARGS+= --enable-xmlwriter
+
+USES+= pkgconfig
+USE_GNOME= libxml2
+.endif
+
+.if ${PHP_MODNAME} == "xsl"
+CONFIGURE_ARGS+= --with-xsl=${LOCALBASE}
+
+USE_GNOME= libxslt
+USE_PHP= dom:build xml:build
+.endif
+
+.if ${PHP_MODNAME} == "zip"
+LIB_DEPENDS+= libzip.so:archivers/libzip
+
+CONFIGURE_ARGS+= --with-zip
+USES+= pkgconfig
+.endif
+
+.if ${PHP_MODNAME} == "zlib"
+CONFIGURE_ARGS+= --with-zlib=/usr
+USES+= pkgconfig
+.endif
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == aarch64 && ${PHP_MODNAME} == "opcache"
+CONFIGURE_ARGS+=--disable-opcache-jit
+.endif
+
+.if ${PHP_MODNAME} == "soap"
+post-extract:
+ @${MKDIR} ${WRKSRC}/ext/session
+ @${CP} ${FILESDIR}/php_session.h ${WRKSRC}/ext/session
+.endif
+
+.if ${PHP_MODNAME} == "sqlite3" || ${PHP_MODNAME} == "zlib"
+post-extract:
+ @${MV} ${WRKSRC}/config0.m4 ${WRKSRC}/config.m4
+.endif
+
+.if ${PHP_MODNAME} == "xml"
+post-extract:
+ @${MKDIR} ${WRKSRC}/ext/xml
+ @${CP} ${WRKSRC}/expat_compat.h ${WRKSRC}/ext/xml
+.endif
+.endif
+.include <bsd.port.post.mk>
diff --git a/lang/php84/distinfo b/lang/php84/distinfo
new file mode 100644
index 000000000000..84f5dbef1c26
--- /dev/null
+++ b/lang/php84/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1722128373
+SHA256 (php-8.4.0alpha1.tar.xz) = 65903a7add51350540b567f8cd2d964ac11366bf33e1b287489765feac45278e
+SIZE (php-8.4.0alpha1.tar.xz) = 13351016
diff --git a/lang/php84/files/patch-TSRM_TSRM.c b/lang/php84/files/patch-TSRM_TSRM.c
new file mode 100644
index 000000000000..a5ad9dca4e8a
--- /dev/null
+++ b/lang/php84/files/patch-TSRM_TSRM.c
@@ -0,0 +1,11 @@
+--- TSRM/TSRM.c.orig 2024-07-02 13:43:13 UTC
++++ TSRM/TSRM.c
+@@ -792,7 +792,7 @@ TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
+ asm ("leal _tsrm_ls_cache@ntpoff,%0"
+ : "=r" (ret));
+ return ret;
+-#elif defined(__aarch64__)
++#elif defined(__aarch64__) && !defined(__FreeBSD__)
+ size_t ret;
+
+ # ifdef __APPLE__
diff --git a/lang/php84/files/patch-build_Makefile.global b/lang/php84/files/patch-build_Makefile.global
new file mode 100644
index 000000000000..52531a83dabe
--- /dev/null
+++ b/lang/php84/files/patch-build_Makefile.global
@@ -0,0 +1,19 @@
+--- build/Makefile.global.orig 2024-07-02 13:43:13 UTC
++++ build/Makefile.global
+@@ -91,14 +91,14 @@ test: all
+ @if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \
+ INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \
+ if test "$$INI_FILE"; then \
+- $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \
++ $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini || :; \
+ else \
+ echo > $(top_builddir)/tmp-php.ini; \
+ fi; \
+ INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \
+ if test "$$INI_SCANNED_PATH"; then \
+ INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \
+- $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \
++ $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini || :; \
+ fi; \
+ TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \
+ TEST_PHP_SRCDIR=$(top_srcdir) \
diff --git a/lang/php84/files/patch-configure.ac b/lang/php84/files/patch-configure.ac
new file mode 100644
index 000000000000..468589491a49
--- /dev/null
+++ b/lang/php84/files/patch-configure.ac
@@ -0,0 +1,27 @@
+--- configure.ac.orig 2024-07-02 13:43:13 UTC
++++ configure.ac
+@@ -56,6 +56,7 @@ AH_BOTTOM([
+
+ #include <string.h>
+
++#include <ext/php_config.h>
+ #endif /* PHP_CONFIG_H */
+ ])
+
+@@ -265,7 +266,6 @@ AS_VAR_APPEND([CPPFLAGS], [" -D_GNU_SOURCE"])
+ dnl require extensions to C and POSIX.
+ AS_VAR_APPEND([CPPFLAGS], [" -D_GNU_SOURCE"])
+
+-PTHREADS_CHECK
+ PHP_HELP_SEPARATOR([SAPI modules:])
+ PHP_SHLIB_SUFFIX_NAMES
+ PHP_BUILD_PROGRAM
+@@ -1425,7 +1425,7 @@ EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=`eval echo "$PHP_CON
+ 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=.:${prefix}/share/pear
+
+ exec_prefix=$old_exec_prefix
+ libdir=$old_libdir
diff --git a/lang/php84/files/patch-ext_hash_xxhash_xxhash.h b/lang/php84/files/patch-ext_hash_xxhash_xxhash.h
new file mode 100644
index 000000000000..d284f4c94f74
--- /dev/null
+++ b/lang/php84/files/patch-ext_hash_xxhash_xxhash.h
@@ -0,0 +1,46 @@
+--- ext/hash/xxhash/xxhash.h.orig 2023-06-06 15:54:29 UTC
++++ ext/hash/xxhash/xxhash.h
+@@ -3078,22 +3078,32 @@ enum XXH_VECTOR_TYPE /* fake enum */ {
+ * inconsistent intrinsics, spotty coverage, and multiple endiannesses.
+ */
+ #if XXH_VECTOR == XXH_VSX
++/* Annoyingly, these headers _may_ define three macros: `bool`, `vector`,
++ * and `pixel`. This is a problem for obvious reasons.
++ *
++ * These keywords are unnecessary; the spec literally says they are
++ * equivalent to `__bool`, `__vector`, and `__pixel` and may be undef'd
++ * after including the header.
++ *
++ * We use pragma push_macro/pop_macro to keep the namespace clean. */
++# pragma push_macro("bool")
++# pragma push_macro("vector")
++# pragma push_macro("pixel")
++/* silence potential macro redefined warnings */
++# undef bool
++# undef vector
++# undef pixel
++
+ # if defined(__s390x__)
+ # include <s390intrin.h>
+ # else
+-/* gcc's altivec.h can have the unwanted consequence to unconditionally
+- * #define bool, vector, and pixel keywords,
+- * with bad consequences for programs already using these keywords for other purposes.
+- * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined.
+- * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler,
+- * but it seems that, in some cases, it isn't.
+- * Force the build macro to be defined, so that keywords are not altered.
+- */
+-# if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__)
+-# define __APPLE_ALTIVEC__
+-# endif
+ # include <altivec.h>
+ # endif
++
++/* Restore the original macro values, if applicable. */
++# pragma pop_macro("pixel")
++# pragma pop_macro("vector")
++# pragma pop_macro("bool")
+
+ typedef __vector unsigned long long xxh_u64x2;
+ typedef __vector unsigned char xxh_u8x16;
diff --git a/lang/php84/files/patch-ext_pcre_php__pcre.h b/lang/php84/files/patch-ext_pcre_php__pcre.h
new file mode 100644
index 000000000000..56c6dc75f6e3
--- /dev/null
+++ b/lang/php84/files/patch-ext_pcre_php__pcre.h
@@ -0,0 +1,11 @@
+--- ext/pcre/php_pcre.h.orig 2024-07-28 11:55:02 UTC
++++ ext/pcre/php_pcre.h
+@@ -20,7 +20,7 @@
+ #ifdef HAVE_BUNDLED_PCRE
+ #include "pcre2lib/pcre2.h"
+ #else
+-#include "pcre2.h"
++#include <pcre2.h>
+ #endif
+
+ #include <locale.h>
diff --git a/lang/php84/files/patch-sapi_apache2handler_config.m4 b/lang/php84/files/patch-sapi_apache2handler_config.m4
new file mode 100644
index 000000000000..83c76b437a76
--- /dev/null
+++ b/lang/php84/files/patch-sapi_apache2handler_config.m4
@@ -0,0 +1,11 @@
+--- sapi/apache2handler/config.m4.orig 2024-07-02 13:43:13 UTC
++++ sapi/apache2handler/config.m4
+@@ -62,7 +62,7 @@ if test "$PHP_APXS2" != "no"; then
+ fi
+
+ APXS_LIBEXECDIR='$(INSTALL_ROOT)'`$APXS -q LIBEXECDIR`
+- if test -z `$APXS -q SYSCONFDIR`; then
++ if true; then
+ INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
+ $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
+ -i -n php"
diff --git a/lang/php84/files/patch-sapi_fpm_config.m4 b/lang/php84/files/patch-sapi_fpm_config.m4
new file mode 100644
index 000000000000..44f4f4fdc6a1
--- /dev/null
+++ b/lang/php84/files/patch-sapi_fpm_config.m4
@@ -0,0 +1,11 @@
+--- sapi/fpm/config.m4.orig 2024-07-02 13:43:13 UTC
++++ sapi/fpm/config.m4
+@@ -271,7 +271,7 @@ AC_DEFUN([PHP_FPM_LQ],
+ AC_MSG_RESULT([no])
+ ])
+
+- if test "$have_lq" = "tcp_info"; then
++ if test "$have_lq" = "so_listenq"; then
+ AC_DEFINE([HAVE_LQ_TCP_INFO], 1, [do we have TCP_INFO?])
+ fi
+
diff --git a/lang/php84/files/patch-sapi_fpm_www.conf.in b/lang/php84/files/patch-sapi_fpm_www.conf.in
new file mode 100644
index 000000000000..c7465018244d
--- /dev/null
+++ b/lang/php84/files/patch-sapi_fpm_www.conf.in
@@ -0,0 +1,17 @@
+--- sapi/fpm/www.conf.in.orig 2023-03-14 16:11:05 UTC
++++ sapi/fpm/www.conf.in
+@@ -32,10 +32,14 @@ group = @php_fpm_group@
+ ; Valid syntaxes are:
+ ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
+ ; a specific port;
++; '0.0.0.0:port' - to listen on a TCP socket to all IPv4 addresses on
++; a specific port;
+ ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
+ ; a specific port;
+ ; 'port' - to listen on a TCP socket to all addresses
+ ; (IPv6 and IPv4-mapped) on a specific port;
++; Note: IPv4-mapped addresses are disabled by-default in
++; FreeBSD for security reasons;
+ ; '/path/to/unix/socket' - to listen on a unix socket.
+ ; Note: This value is mandatory.
+ listen = 127.0.0.1:9000
diff --git a/lang/php84/files/php_fpm.in b/lang/php84/files/php_fpm.in
new file mode 100644
index 000000000000..12253b537b2e
--- /dev/null
+++ b/lang/php84/files/php_fpm.in
@@ -0,0 +1,102 @@
+#!/bin/sh
+
+# PROVIDE: php_fpm
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+#
+# Add the following line to /etc/rc.conf to enable php-fpm:
+# php_fpm_enable (bool): Set to "NO" by default.
+# Set it to "YES" to enable php-fpm
+# php_fpm_profiles (str): Set to "" by default.
+# Define your profiles here.
+# php_fpm_pid_prefix (str): Set to "" by default.
+# When using profiles manually assign value to "php_fpm_"
+# for prevent collision with other PIDs names.
+
+. /etc/rc.subr
+
+name="php_fpm"
+rcvar=php_fpm_enable
+
+start_precmd="php_fpm_prestart"
+restart_precmd="php_fpm_checkconfig"
+reload_precmd="php_fpm_checkconfig"
+command="%%PREFIX%%/sbin/php-fpm"
+configtest_cmd="php_fpm_checkconfig"
+_pidprefix="/var/run"
+pidfile="${_pidprefix}/php-fpm.pid"
+required_files="%%PREFIX%%/etc/php-fpm.conf"
+
+load_rc_config "${name}"
+
+: ${php_fpm_enable="NO"}
+: ${php_fpm_umask=""}
+: ${php_fpm_svcj_options:="net_basic"}
+
+if [ -n "$2" ]; then
+ profile="$2"
+ if [ "x${php_fpm_profiles}" != "x" ]; then
+ pidfile="${_pidprefix}/${php_fpm_pid_prefix}php-fpm-${profile}.pid"
+ eval php_fpm_configfile="\${php_fpm_${profile}_configfile:-}"
+ if [ "x${php_fpm_configfile}" = "x" ]; then
+ echo "You must define a configuration file (php_fpm_${profile}_configfile)"
+ exit 1
+ fi
+ required_files="${php_fpm_configfile}"
+ eval php_fpm_enable="\${php_fpm_${profile}_enable:-${php_fpm_enable}}"
+ php_fpm_flags="-y ${php_fpm_configfile} -g ${pidfile}"
+ else
+ echo "$0: extra argument ignored"
+ fi
+else
+ if [ "x${php_fpm_profiles}" != "x" -a "x$1" != "x" ]; then
+ for profile in ${php_fpm_profiles}; do
+ echo "===> php_fpm profile: ${profile}"
+ /usr/local/etc/rc.d/php-fpm $1 ${profile}
+ retcode="$?"
+ if [ "0${retcode}" -ne 0 ]; then
+ failed="${profile} (${retcode}) ${failed:-}"
+ else
+ success="${profile} ${success:-}"
+ fi
+ done
+ exit 0
+ fi
+fi
+
+extra_commands="reload configtest logrotate"
+sig_stop="QUIT"
+sig_reload="USR2"
+logrotate_cmd="php_fpm_logrotate"
+
+php_fpm_logrotate() {
+ if [ -z "$rc_pid" ]; then
+ _run_rc_notrunning
+ return 1
+ fi
+ echo "Rotating logs $name."
+ kill -USR1 $rc_pid
+}
+
+php_fpm_checkconfig()
+{
+ echo "Performing sanity check on php-fpm configuration:"
+ eval ${command} ${php_fpm_flags} -t
+}
+
+php_fpm_prestart()
+{
+ php_fpm_checkconfig
+ checkconfig=$?
+ if [ $checkconfig -ne 0 ]; then
+ return $checkconfig
+ fi
+
+ if [ ! -z "$php_fpm_umask" ]; then
+ echo "Setting umask to: ${php_fpm_umask}"
+ umask $php_fpm_umask
+ fi
+}
+
+run_rc_command "$1"
diff --git a/lang/php84/files/php_session.h b/lang/php84/files/php_session.h
new file mode 100644
index 000000000000..65bf7de20449
--- /dev/null
+++ b/lang/php84/files/php_session.h
@@ -0,0 +1,328 @@
+/*
+ +----------------------------------------------------------------------+
+ | 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: Sascha Schumann <sascha@schumann.cx> |
+ +----------------------------------------------------------------------+
+ */
+
+#ifndef PHP_SESSION_H
+#define PHP_SESSION_H
+
+#include "ext/standard/php_var.h"
+#include "ext/random/php_random.h"
+
+#define PHP_SESSION_API 20161017
+
+#include "php_version.h"
+#define PHP_SESSION_VERSION PHP_VERSION
+
+/* save handler macros */
+#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name
+#define PS_CLOSE_ARGS void **mod_data
+#define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val, zend_long maxlifetime
+#define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime
+#define PS_DESTROY_ARGS void **mod_data, zend_string *key
+#define PS_GC_ARGS void **mod_data, zend_long maxlifetime, zend_long *nrdels
+#define PS_CREATE_SID_ARGS void **mod_data
+#define PS_VALIDATE_SID_ARGS void **mod_data, zend_string *key
+#define PS_UPDATE_TIMESTAMP_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime
+
+typedef struct ps_module_struct {
+ const char *s_name;
+ zend_result (*s_open)(PS_OPEN_ARGS);
+ zend_result (*s_close)(PS_CLOSE_ARGS);
+ zend_result (*s_read)(PS_READ_ARGS);
+ zend_result (*s_write)(PS_WRITE_ARGS);
+ zend_result (*s_destroy)(PS_DESTROY_ARGS);
+ zend_long (*s_gc)(PS_GC_ARGS);
+ zend_string *(*s_create_sid)(PS_CREATE_SID_ARGS);
+ zend_result (*s_validate_sid)(PS_VALIDATE_SID_ARGS);
+ zend_result (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS);
+} ps_module;
+
+#define PS_GET_MOD_DATA() *mod_data
+#define PS_SET_MOD_DATA(a) *mod_data = (a)
+
+#define PS_OPEN_FUNC(x) zend_result ps_open_##x(PS_OPEN_ARGS)
+#define PS_CLOSE_FUNC(x) zend_result ps_close_##x(PS_CLOSE_ARGS)
+#define PS_READ_FUNC(x) zend_result ps_read_##x(PS_READ_ARGS)
+#define PS_WRITE_FUNC(x) zend_result ps_write_##x(PS_WRITE_ARGS)
+#define PS_DESTROY_FUNC(x) zend_result ps_delete_##x(PS_DESTROY_ARGS)
+#define PS_GC_FUNC(x) zend_long ps_gc_##x(PS_GC_ARGS)
+#define PS_CREATE_SID_FUNC(x) zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS)
+#define PS_VALIDATE_SID_FUNC(x) zend_result ps_validate_sid_##x(PS_VALIDATE_SID_ARGS)
+#define PS_UPDATE_TIMESTAMP_FUNC(x) zend_result ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS)
+
+/* Legacy save handler module definitions */
+#define PS_FUNCS(x) \
+ PS_OPEN_FUNC(x); \
+ PS_CLOSE_FUNC(x); \
+ PS_READ_FUNC(x); \
+ PS_WRITE_FUNC(x); \
+ PS_DESTROY_FUNC(x); \
+ PS_GC_FUNC(x); \
+ PS_CREATE_SID_FUNC(x)
+
+#define PS_MOD(x) \
+ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
+ ps_delete_##x, ps_gc_##x, php_session_create_id, \
+ php_session_validate_sid, php_session_update_timestamp
+
+/* Legacy SID creation enabled save handler module definitions */
+#define PS_FUNCS_SID(x) \
+ PS_OPEN_FUNC(x); \
+ PS_CLOSE_FUNC(x); \
+ PS_READ_FUNC(x); \
+ PS_WRITE_FUNC(x); \
+ PS_DESTROY_FUNC(x); \
+ PS_GC_FUNC(x); \
+ PS_CREATE_SID_FUNC(x); \
+ PS_VALIDATE_SID_FUNC(x); \
+ PS_UPDATE_TIMESTAMP_FUNC(x);
+
+#define PS_MOD_SID(x) \
+ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
+ ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \
+ php_session_validate_sid, php_session_update_timestamp
+
+/* Update timestamp enabled save handler module definitions
+ New save handlers should use this API */
+#define PS_FUNCS_UPDATE_TIMESTAMP(x) \
+ PS_OPEN_FUNC(x); \
+ PS_CLOSE_FUNC(x); \
+ PS_READ_FUNC(x); \
+ PS_WRITE_FUNC(x); \
+ PS_DESTROY_FUNC(x); \
+ PS_GC_FUNC(x); \
+ PS_CREATE_SID_FUNC(x); \
+ PS_VALIDATE_SID_FUNC(x); \
+ PS_UPDATE_TIMESTAMP_FUNC(x);
+
+#define PS_MOD_UPDATE_TIMESTAMP(x) \
+ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
+ ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \
+ ps_validate_sid_##x, ps_update_timestamp_##x
+
+
+typedef enum {
+ php_session_disabled,
+ php_session_none,
+ php_session_active
+} php_session_status;
+
+typedef struct _php_session_rfc1867_progress {
+ size_t sname_len;
+ zval sid;
+ smart_str key;
+
+ zend_long update_step;
+ zend_long next_update;
+ double next_update_time;
+ bool cancel_upload;
+ bool apply_trans_sid;
+ size_t content_length;
+
+ zval data; /* the array exported to session data */
+ zval files; /* data["files"] array */
+ zval *post_bytes_processed; /* data["bytes_processed"] */
+ zval *current_file_bytes_processed;
+ zval current_file; /* array of currently uploading file */
+} php_session_rfc1867_progress;
+
+typedef struct _php_ps_globals {
+ char *save_path;
+ char *session_name;
+ zend_string *id;
+ char *extern_referer_chk;
+ char *cache_limiter;
+ zend_long cookie_lifetime;
+ char *cookie_path;
+ char *cookie_domain;
+ char *cookie_samesite;
+ bool cookie_secure;
+ bool cookie_httponly;
+ const ps_module *mod;
+ const ps_module *default_mod;
+ void *mod_data;
+ php_session_status session_status;
+ zend_string *session_started_filename;
+ uint32_t session_started_lineno;
+ int module_number;
+ php_random_status_state_pcgoneseq128xslrr64 random_state;
+ php_random_algo_with_state random;
+ zend_long gc_probability;
+ zend_long gc_divisor;
+ zend_long gc_maxlifetime;
+ zend_long cache_expire;
+ struct {
+ zval ps_open;
+ zval ps_close;
+ zval ps_read;
+ zval ps_write;
+ zval ps_destroy;
+ zval ps_gc;
+ zval ps_create_sid;
+ zval ps_validate_sid;
+ zval ps_update_timestamp;
+ } mod_user_names;
+ zend_string *mod_user_class_name;
+ bool mod_user_implemented;
+ bool mod_user_is_open;
+ bool auto_start;
+ bool use_cookies;
+ bool use_only_cookies;
+ bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
+ bool send_cookie;
+ bool define_sid;
+
+ const struct ps_serializer_struct *serializer;
+ zval http_session_vars;
+
+ zend_long sid_length;
+ zend_long sid_bits_per_character;
+
+ php_session_rfc1867_progress *rfc1867_progress;
+ char *rfc1867_prefix; /* session.upload_progress.prefix */
+ char *rfc1867_name; /* session.upload_progress.name */
+ zend_long rfc1867_freq; /* session.upload_progress.freq */
+ double rfc1867_min_freq; /* session.upload_progress.min_freq */
+ bool rfc1867_enabled; /* session.upload_progress.enabled */
+ bool rfc1867_cleanup; /* session.upload_progress.cleanup */
+
+ bool use_strict_mode; /* whether or not PHP accepts unknown session ids */
+ bool lazy_write; /* omit session write when it is possible */
+ bool in_save_handler; /* state if session is in save handler or not */
+ bool set_handler; /* state if session module i setting handler or not */
+ zend_string *session_vars; /* serialized original session data */
+} php_ps_globals;
+
+typedef php_ps_globals zend_ps_globals;
+
+extern zend_module_entry session_module_entry;
+#define phpext_session_ptr &session_module_entry
+
+#ifdef ZTS
+#define PS(v) ZEND_TSRMG(ps_globals_id, php_ps_globals *, v)
+#ifdef COMPILE_DL_SESSION
+ZEND_TSRMLS_CACHE_EXTERN()
+#endif
+#else
+#define PS(v) (ps_globals.v)
+#endif
+
+#define PS_SERIALIZER_ENCODE_ARGS void
+#define PS_SERIALIZER_DECODE_ARGS const char *val, size_t vallen
+
+typedef struct ps_serializer_struct {
+ const char *name;
+ zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS);
+ zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS);
+} ps_serializer;
+
+#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x
+#define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x
+
+#define PS_SERIALIZER_ENCODE_FUNC(x) \
+ zend_string *PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS)
+#define PS_SERIALIZER_DECODE_FUNC(x) \
+ zend_result PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)
+
+#define PS_SERIALIZER_FUNCS(x) \
+ PS_SERIALIZER_ENCODE_FUNC(x); \
+ PS_SERIALIZER_DECODE_FUNC(x)
+
+#define PS_SERIALIZER_ENTRY(x) \
+ { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) }
+
+/* default create id function */
+PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS);
+/* Dummy PS module functions */
+PHPAPI zend_result php_session_validate_sid(PS_VALIDATE_SID_ARGS);
+PHPAPI zend_result php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS);
+
+PHPAPI void session_adapt_url(const char *url, size_t url_len, char **new_url, size_t *new_len);
+
+PHPAPI zend_result php_session_destroy(void);
+PHPAPI void php_add_session_var(zend_string *name);
+PHPAPI zval *php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash);
+PHPAPI zval *php_get_session_var(zend_string *name);
+PHPAPI zval* php_get_session_var_str(const char *name, size_t name_len);
+
+PHPAPI zend_result php_session_register_module(const ps_module *);
+
+PHPAPI zend_result php_session_register_serializer(const char *name,
+ zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS),
+ zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS));
+
+PHPAPI zend_result php_session_start(void);
+PHPAPI zend_result php_session_flush(int write);
+PHPAPI php_session_status php_get_session_status(void);
+
+PHPAPI const ps_module *_php_find_ps_module(const char *name);
+PHPAPI const ps_serializer *_php_find_ps_serializer(const char *name);
+
+PHPAPI zend_result php_session_valid_key(const char *key);
+PHPAPI zend_result php_session_reset_id(void);
+
+#define PS_ADD_VARL(name) do { \
+ php_add_session_var(name); \
+} while (0)
+
+#define PS_ADD_VAR(name) PS_ADD_VARL(name)
+
+#define PS_DEL_VARL(name) do { \
+ if (!Z_ISNULL(PS(http_session_vars))) { \
+ zend_hash_del(Z_ARRVAL(PS(http_session_vars)), name); \
+ } \
+} while (0)
+
+
+#define PS_ENCODE_VARS \
+ zend_string *key; \
+ zend_ulong num_key; \
+ zval *struc;
+
+#define PS_ENCODE_LOOP(code) do { \
+ HashTable *_ht = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))); \
+ ZEND_HASH_FOREACH_KEY(_ht, num_key, key) { \
+ if (key == NULL) { \
+ php_error_docref(NULL, E_WARNING, \
+ "Skipping numeric key " ZEND_LONG_FMT, num_key);\
+ continue; \
+ } \
+ if ((struc = php_get_session_var(key))) { \
+ code; \
+ } \
+ } ZEND_HASH_FOREACH_END(); \
+} while(0)
+
+PHPAPI ZEND_EXTERN_MODULE_GLOBALS(ps)
+
+void php_session_auto_start(void *data);
+
+extern PHPAPI zend_class_entry *php_session_class_entry;
+
+extern PHPAPI zend_class_entry *php_session_iface_entry;
+
+extern PHPAPI zend_class_entry *php_session_id_iface_entry;
+
+extern PHPAPI zend_class_entry *php_session_update_timestamp_iface_entry;
+
+extern PHP_METHOD(SessionHandler, open);
+extern PHP_METHOD(SessionHandler, close);
+extern PHP_METHOD(SessionHandler, read);
+extern PHP_METHOD(SessionHandler, write);
+extern PHP_METHOD(SessionHandler, destroy);
+extern PHP_METHOD(SessionHandler, gc);
+extern PHP_METHOD(SessionHandler, create_sid);
+
+#endif
diff --git a/lang/php84/pkg-descr b/lang/php84/pkg-descr
new file mode 100644
index 000000000000..60a2137716fb
--- /dev/null
+++ b/lang/php84/pkg-descr
@@ -0,0 +1,6 @@
+PHP, which stands for "PHP: Hypertext Preprocessor" is a widely-used Open
+Source general-purpose scripting language that is especially suited for
+Web development and can be embedded into HTML. Its syntax draws upon C,
+Java, and Perl, and is easy to learn. The main goal of the language is to
+allow web developers to write dynamically generated webpages quickly, but
+you can do much more with PHP.
diff --git a/lang/php84/pkg-message.mod b/lang/php84/pkg-message.mod
new file mode 100644
index 000000000000..8ad98d25b4e6
--- /dev/null
+++ b/lang/php84/pkg-message.mod
@@ -0,0 +1,24 @@
+******************************************************************************
+
+Consider switching to php-fpm and mod_fast_cgi as per Apache httpd project
+recommendation. See https://cwiki.apache.org/confluence/display/HTTPD/PHP-FPM
+
+******************************************************************************
+
+If you are building PHP-based ports in poudriere(8) or Synth with ZTS enabled,
+add WITH_MPM=event to /etc/make.conf to prevent build failures.
+
+******************************************************************************
+
+Make sure index.php is part of your DirectoryIndex.
+
+You should add the following to your Apache configuration file:
+
+<FilesMatch "\.php$">
+ SetHandler application/x-httpd-php
+</FilesMatch>
+<FilesMatch "\.phps$">
+ SetHandler application/x-httpd-php-source
+</FilesMatch>
+
+******************************************************************************
diff --git a/lang/php84/pkg-plist b/lang/php84/pkg-plist
new file mode 100644
index 000000000000..3fd2ea6f4f86
--- /dev/null
+++ b/lang/php84/pkg-plist
@@ -0,0 +1,321 @@
+%%CLI%%bin/php
+%%CGI%%bin/php-cgi
+bin/php-config
+%%PHPDBG%%bin/phpdbg
+bin/phpize
+%%FPM%%sbin/php-fpm
+etc/php.conf
+etc/php.ini-development
+etc/php.ini-production
+%%FPM%%@sample etc/php-fpm.conf.default etc/php-fpm.conf
+%%FPM%%@sample etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
+include/php/TSRM/TSRM.h
+include/php/TSRM/tsrm_win32.h
+include/php/Zend/Optimizer/zend_call_graph.h
+include/php/Zend/Optimizer/zend_cfg.h
+include/php/Zend/Optimizer/zend_dfg.h
+include/php/Zend/Optimizer/zend_dump.h
+include/php/Zend/Optimizer/zend_func_info.h
+include/php/Zend/Optimizer/zend_inference.h
+include/php/Zend/Optimizer/zend_optimizer.h
+include/php/Zend/Optimizer/zend_ssa.h
+include/php/Zend/Optimizer/zend_worklist.h
+include/php/Zend/zend.h
+include/php/Zend/zend_API.h
+include/php/Zend/zend_alloc.h
+include/php/Zend/zend_alloc_sizes.h
+include/php/Zend/zend_arena.h
+include/php/Zend/zend_ast.h
+include/php/Zend/zend_atomic.h
+include/php/Zend/zend_attributes.h
+include/php/Zend/zend_attributes_arginfo.h
+include/php/Zend/zend_bitset.h
+include/php/Zend/zend_build.h
+include/php/Zend/zend_builtin_functions.h
+include/php/Zend/zend_builtin_functions_arginfo.h
+include/php/Zend/zend_call_stack.h
+include/php/Zend/zend_closures.h
+include/php/Zend/zend_closures_arginfo.h
+include/php/Zend/zend_compile.h
+include/php/Zend/zend_config.h
+include/php/Zend/zend_config.w32.h
+include/php/Zend/zend_constants.h
+include/php/Zend/zend_constants_arginfo.h
+include/php/Zend/zend_cpuinfo.h
+include/php/Zend/zend_dtrace.h
+%%DTRACE%%include/php/Zend/zend_dtrace_gen.h
+include/php/Zend/zend_enum.h
+include/php/Zend/zend_enum_arginfo.h
+include/php/Zend/zend_errors.h
+include/php/Zend/zend_exceptions.h
+include/php/Zend/zend_exceptions_arginfo.h
+include/php/Zend/zend_execute.h
+include/php/Zend/zend_extensions.h
+include/php/Zend/zend_fibers.h
+include/php/Zend/zend_fibers_arginfo.h
+include/php/Zend/zend_float.h
+include/php/Zend/zend_frameless_function.h
+include/php/Zend/zend_gc.h
+include/php/Zend/zend_gdb.h
+include/php/Zend/zend_generators.h
+include/php/Zend/zend_generators_arginfo.h
+include/php/Zend/zend_globals.h
+include/php/Zend/zend_globals_macros.h
+include/php/Zend/zend_hash.h
+include/php/Zend/zend_highlight.h
+include/php/Zend/zend_hrtime.h
+include/php/Zend/zend_inheritance.h
+include/php/Zend/zend_ini.h
+include/php/Zend/zend_ini_parser.h
+include/php/Zend/zend_ini_scanner.h
+include/php/Zend/zend_ini_scanner_defs.h
+include/php/Zend/zend_interfaces.h
+include/php/Zend/zend_interfaces_arginfo.h
+include/php/Zend/zend_iterators.h
+include/php/Zend/zend_language_parser.h
+include/php/Zend/zend_language_scanner.h
+include/php/Zend/zend_language_scanner_defs.h
+include/php/Zend/zend_list.h
+include/php/Zend/zend_llist.h
+include/php/Zend/zend_long.h
+include/php/Zend/zend_map_ptr.h
+include/php/Zend/zend_max_execution_timer.h
+include/php/Zend/zend_mmap.h
+include/php/Zend/zend_modules.h
+include/php/Zend/zend_multibyte.h
+include/php/Zend/zend_multiply.h
+include/php/Zend/zend_object_handlers.h
+include/php/Zend/zend_objects.h
+include/php/Zend/zend_objects_API.h
+include/php/Zend/zend_observer.h
+include/php/Zend/zend_operators.h
+include/php/Zend/zend_portability.h
+include/php/Zend/zend_ptr_stack.h
+include/php/Zend/zend_range_check.h
+include/php/Zend/zend_signal.h
+include/php/Zend/zend_smart_str.h
+include/php/Zend/zend_smart_str_public.h
+include/php/Zend/zend_smart_string.h
+include/php/Zend/zend_smart_string_public.h
+include/php/Zend/zend_sort.h
+include/php/Zend/zend_stack.h
+include/php/Zend/zend_stream.h
+include/php/Zend/zend_string.h
+include/php/Zend/zend_strtod.h
+include/php/Zend/zend_strtod_int.h
+include/php/Zend/zend_system_id.h
+include/php/Zend/zend_type_info.h
+include/php/Zend/zend_types.h
+include/php/Zend/zend_variables.h
+include/php/Zend/zend_verify_type_inference.h
+include/php/Zend/zend_virtual_cwd.h
+include/php/Zend/zend_vm.h
+include/php/Zend/zend_vm_def.h
+include/php/Zend/zend_vm_execute.h
+include/php/Zend/zend_vm_handlers.h
+include/php/Zend/zend_vm_opcodes.h
+include/php/Zend/zend_vm_trace_handlers.h
+include/php/Zend/zend_vm_trace_lines.h
+include/php/Zend/zend_vm_trace_map.h
+include/php/Zend/zend_weakrefs.h
+include/php/Zend/zend_weakrefs_arginfo.h
+include/php/ext/date/lib/timelib.h
+include/php/ext/date/lib/timelib_config.h
+include/php/ext/date/php_date.h
+include/php/ext/hash/php_hash.h
+include/php/ext/hash/php_hash_adler32.h
+include/php/ext/hash/php_hash_crc32.h
+include/php/ext/hash/php_hash_fnv.h
+include/php/ext/hash/php_hash_gost.h
+include/php/ext/hash/php_hash_haval.h
+include/php/ext/hash/php_hash_joaat.h
+include/php/ext/hash/php_hash_md.h
+include/php/ext/hash/php_hash_murmur.h
+include/php/ext/hash/php_hash_ripemd.h
+include/php/ext/hash/php_hash_sha.h
+include/php/ext/hash/php_hash_sha3.h
+include/php/ext/hash/php_hash_snefru.h
+include/php/ext/hash/php_hash_tiger.h
+include/php/ext/hash/php_hash_whirlpool.h
+include/php/ext/hash/php_hash_xxhash.h
+include/php/ext/hash/xxhash/xxhash.h
+include/php/ext/json/php_json.h
+include/php/ext/json/php_json_parser.h
+include/php/ext/json/php_json_scanner.h
+include/php/ext/libxml/php_libxml.h
+%%MYSQLND%%include/php/ext/mysqlnd/config-win.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysql_float_to_double.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_alloc.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_auth.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_block_alloc.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_charset.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_commands.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_connection.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_debug.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_enum_n_def.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_ext_plugin.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_libmysql_compat.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_plugin.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_portability.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_priv.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_protocol_frame_codec.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_ps.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_read_buffer.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_result.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_result_meta.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_reverse_api.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_statistics.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_structs.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_vio.h
+%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_wireprotocol.h
+%%MYSQLND%%include/php/ext/mysqlnd/php_mysqlnd.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/config.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_internal.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_intmodedep.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h
+%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_ucp.h
+include/php/ext/pcre/php_pcre.h
+include/php/ext/random/php_random.h
+include/php/ext/random/php_random_csprng.h
+include/php/ext/random/php_random_uint128.h
+include/php/ext/spl/php_spl.h
+include/php/ext/spl/spl_array.h
+include/php/ext/spl/spl_directory.h
+include/php/ext/spl/spl_dllist.h
+include/php/ext/spl/spl_exceptions.h
+include/php/ext/spl/spl_fixedarray.h
+include/php/ext/spl/spl_functions.h
+include/php/ext/spl/spl_heap.h
+include/php/ext/spl/spl_iterators.h
+include/php/ext/spl/spl_observer.h
+include/php/ext/standard/base64.h
+include/php/ext/standard/basic_functions.h
+include/php/ext/standard/basic_functions_arginfo.h
+include/php/ext/standard/crc32.h
+include/php/ext/standard/crc32_x86.h
+include/php/ext/standard/credits.h
+include/php/ext/standard/credits_ext.h
+include/php/ext/standard/credits_sapi.h
+include/php/ext/standard/crypt_blowfish.h
+include/php/ext/standard/crypt_freesec.h
+include/php/ext/standard/css.h
+include/php/ext/standard/datetime.h
+include/php/ext/standard/dir_arginfo.h
+include/php/ext/standard/dl.h
+include/php/ext/standard/dl_arginfo.h
+include/php/ext/standard/exec.h
+include/php/ext/standard/file.h
+include/php/ext/standard/file_arginfo.h
+include/php/ext/standard/flock_compat.h
+include/php/ext/standard/fsock.h
+include/php/ext/standard/head.h
+include/php/ext/standard/html.h
+include/php/ext/standard/html_tables.h
+include/php/ext/standard/info.h
+include/php/ext/standard/md5.h
+include/php/ext/standard/pack.h
+include/php/ext/standard/pageinfo.h
+include/php/ext/standard/password_arginfo.h
+include/php/ext/standard/php_array.h
+include/php/ext/standard/php_assert.h
+include/php/ext/standard/php_browscap.h
+include/php/ext/standard/php_crypt.h
+include/php/ext/standard/php_crypt_r.h
+include/php/ext/standard/php_dir.h
+include/php/ext/standard/php_dir_int.h
+include/php/ext/standard/php_dns.h
+include/php/ext/standard/php_ext_syslog.h
+include/php/ext/standard/php_filestat.h
+include/php/ext/standard/php_fopen_wrappers.h
+include/php/ext/standard/php_http.h
+include/php/ext/standard/php_image.h
+include/php/ext/standard/php_incomplete_class.h
+include/php/ext/standard/php_mail.h
+include/php/ext/standard/php_math.h
+include/php/ext/standard/php_math_round_mode.h
+include/php/ext/standard/php_net.h
+include/php/ext/standard/php_password.h
+include/php/ext/standard/php_smart_string.h
+include/php/ext/standard/php_smart_string_public.h
+include/php/ext/standard/php_standard.h
+include/php/ext/standard/php_string.h
+include/php/ext/standard/php_uuencode.h
+include/php/ext/standard/php_var.h
+include/php/ext/standard/php_versioning.h
+include/php/ext/standard/proc_open.h
+include/php/ext/standard/quot_print.h
+include/php/ext/standard/scanf.h
+include/php/ext/standard/sha1.h
+include/php/ext/standard/streamsfuncs.h
+include/php/ext/standard/url.h
+include/php/ext/standard/url_scanner_ex.h
+include/php/ext/standard/user_filters_arginfo.h
+include/php/ext/standard/winver.h
+@touch include/php/ext/php_config.h
+@rmempty include/php/ext/php_config.h
+include/php/main/SAPI.h
+include/php/main/build-defs.h
+include/php/main/fastcgi.h
+include/php/main/fopen_wrappers.h
+include/php/main/http_status_codes.h
+include/php/main/main_arginfo.h
+include/php/main/php.h
+include/php/main/php_compat.h
+include/php/main/php_config.h
+include/php/main/php_content_types.h
+include/php/main/php_getopt.h
+include/php/main/php_globals.h
+include/php/main/php_ini.h
+include/php/main/php_ini_builder.h
+include/php/main/php_main.h
+include/php/main/php_memory_streams.h
+include/php/main/php_network.h
+include/php/main/php_odbc_utils.h
+include/php/main/php_open_temporary_file.h
+include/php/main/php_output.h
+include/php/main/php_reentrancy.h
+include/php/main/php_scandir.h
+include/php/main/php_streams.h
+include/php/main/php_syslog.h
+include/php/main/php_ticks.h
+include/php/main/php_variables.h
+include/php/main/php_version.h
+include/php/main/rfc1867.h
+include/php/main/snprintf.h
+include/php/main/spprintf.h
+include/php/main/streams/php_stream_context.h
+include/php/main/streams/php_stream_filter_api.h
+include/php/main/streams/php_stream_glob_wrapper.h
+include/php/main/streams/php_stream_mmap.h
+include/php/main/streams/php_stream_plain_wrapper.h
+include/php/main/streams/php_stream_transport.h
+include/php/main/streams/php_stream_userspace.h
+include/php/main/streams/php_streams_int.h
+include/php/main/streams/userspace_arginfo.h
+%%CLI%%include/php/sapi/cli/cli.h
+%%EMBED%%include/php/sapi/embed/php_embed.h
+%%EMBED%%lib/libphp.so
+lib/php/build/Makefile.global
+lib/php/build/ax_check_compile_flag.m4
+lib/php/build/ax_gcc_func_attribute.m4
+lib/php/build/config.guess
+lib/php/build/config.sub
+lib/php/build/gen_stub.php
+lib/php/build/libtool.m4
+lib/php/build/ltmain.sh
+lib/php/build/php.m4
+lib/php/build/php_cxx_compile_stdcxx.m4
+lib/php/build/phpize.m4
+lib/php/build/pkg.m4
+lib/php/build/run-tests.php
+lib/php/build/shtool
+%%CGI%%share/man/man1/php-cgi.1.gz
+share/man/man1/php-config.1.gz
+%%CLI%%share/man/man1/php.1.gz
+%%PHPDBG%%share/man/man1/phpdbg.1.gz
+share/man/man1/phpize.1.gz
+%%FPM%%share/man/man8/php-fpm.8.gz
+%%FPM%%share/php/fpm/status.html
diff --git a/lang/php84/pkg-plist.mod b/lang/php84/pkg-plist.mod
new file mode 100644
index 000000000000..8939be6d3d5e
--- /dev/null
+++ b/lang/php84/pkg-plist.mod
@@ -0,0 +1,3 @@
+%%APACHEMODDIR%%/%%AP_MODULE%%
+@postexec %D/sbin/apxs -e -a -n %%AP_NAME%% %f
+@preunexec %D/sbin/apxs -e -A -n %%AP_NAME%% %f
diff --git a/math/Makefile b/math/Makefile
index 64a0ebd226e3..3e40464b2597 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -862,6 +862,8 @@
SUBDIR += php82-gmp
SUBDIR += php83-bcmath
SUBDIR += php83-gmp
+ SUBDIR += php84-gmp
+ SUBDIR += php84-bcmath
SUBDIR += physcalc
SUBDIR += picosat
SUBDIR += piranha
diff --git a/math/php84-bcmath/Makefile b/math/php84-bcmath/Makefile
new file mode 100644
index 000000000000..f00306b9ef4c
--- /dev/null
+++ b/math/php84-bcmath/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= math
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -bcmath
+
+.include "${MASTERDIR}/Makefile"
diff --git a/math/php84-gmp/Makefile b/math/php84-gmp/Makefile
new file mode 100644
index 000000000000..e3f6bc75e9b6
--- /dev/null
+++ b/math/php84-gmp/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= math
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -gmp
+
+.include "${MASTERDIR}/Makefile"
diff --git a/misc/Makefile b/misc/Makefile
index b926b4a3282d..e6e9bfdede5b 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -387,6 +387,7 @@
SUBDIR += php81-calendar
SUBDIR += php82-calendar
SUBDIR += php83-calendar
+ SUBDIR += php84-calendar
SUBDIR += pinfo
SUBDIR += pipe
SUBDIR += posixtestsuite
diff --git a/misc/php84-calendar/Makefile b/misc/php84-calendar/Makefile
new file mode 100644
index 000000000000..8d4559f3f315
--- /dev/null
+++ b/misc/php84-calendar/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= misc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -calendar
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile
index 6f8cec37c5ad..6b12eefdda1a 100644
--- a/net-mgmt/Makefile
+++ b/net-mgmt/Makefile
@@ -295,6 +295,7 @@
SUBDIR += php81-snmp
SUBDIR += php82-snmp
SUBDIR += php83-snmp
+ SUBDIR += php84-snmp
SUBDIR += phpfpm_exporter
SUBDIR += phpipam
SUBDIR += ping_exporter
diff --git a/net-mgmt/php84-snmp/Makefile b/net-mgmt/php84-snmp/Makefile
new file mode 100644
index 000000000000..5bf6343c5f39
--- /dev/null
+++ b/net-mgmt/php84-snmp/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net-mgmt
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -snmp
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net/Makefile b/net/Makefile
index 9bae210ccae7..cea51310b9a7 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -998,6 +998,9 @@
SUBDIR += php83-ldap
SUBDIR += php83-soap
SUBDIR += php83-sockets
+ SUBDIR += php84-ldap
+ SUBDIR += php84-soap
+ SUBDIR += php84-sockets
SUBDIR += phpldapadmin
SUBDIR += pichi
SUBDIR += pimcommon
diff --git a/net/php84-ldap/Makefile b/net/php84-ldap/Makefile
new file mode 100644
index 000000000000..fcae0d8954eb
--- /dev/null
+++ b/net/php84-ldap/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -ldap
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net/php84-soap/Makefile b/net/php84-soap/Makefile
new file mode 100644
index 000000000000..dbe62dcc4455
--- /dev/null
+++ b/net/php84-soap/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -soap
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net/php84-sockets/Makefile b/net/php84-sockets/Makefile
new file mode 100644
index 000000000000..dc43c9a72bce
--- /dev/null
+++ b/net/php84-sockets/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -sockets
+
+.include "${MASTERDIR}/Makefile"
diff --git a/security/Makefile b/security/Makefile
index 4af850de59a2..f27f063d71ea 100644
--- a/security/Makefile
+++ b/security/Makefile
@@ -825,6 +825,8 @@
SUBDIR += php82-sodium
SUBDIR += php83-filter
SUBDIR += php83-sodium
+ SUBDIR += php84-filter
+ SUBDIR += php84-sodium
SUBDIR += picocrypt
SUBDIR += picosha2
SUBDIR += pidgin-encryption
diff --git a/security/php84-filter/Makefile b/security/php84-filter/Makefile
new file mode 100644
index 000000000000..31a3841a29da
--- /dev/null
+++ b/security/php84-filter/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= security
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -filter
+
+.include "${MASTERDIR}/Makefile"
diff --git a/security/php84-sodium/Makefile b/security/php84-sodium/Makefile
new file mode 100644
index 000000000000..ceaca574b586
--- /dev/null
+++ b/security/php84-sodium/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= security
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -sodium
+
+.include "${MASTERDIR}/Makefile"
diff --git a/sysutils/Makefile b/sysutils/Makefile
index 95fb935517e2..7a23b8afe2b8 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -1019,6 +1019,8 @@
SUBDIR += php82-posix
SUBDIR += php83-fileinfo
SUBDIR += php83-posix
+ SUBDIR += php84-fileinfo
+ SUBDIR += php84-posix
SUBDIR += phybs
SUBDIR += pick
SUBDIR += pidof
diff --git a/sysutils/php84-fileinfo/Makefile b/sysutils/php84-fileinfo/Makefile
new file mode 100644
index 000000000000..c76d4e41e466
--- /dev/null
+++ b/sysutils/php84-fileinfo/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= sysutils
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -fileinfo
+
+.include "${MASTERDIR}/Makefile"
diff --git a/sysutils/php84-posix/Makefile b/sysutils/php84-posix/Makefile
new file mode 100644
index 000000000000..58daa02aa63d
--- /dev/null
+++ b/sysutils/php84-posix/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= sysutils
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -posix
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/Makefile b/textproc/Makefile
index 0320a0d0096c..61eab8f480ee 100644
--- a/textproc/Makefile
+++ b/textproc/Makefile
@@ -1283,6 +1283,14 @@
SUBDIR += php83-xmlreader
SUBDIR += php83-xmlwriter
SUBDIR += php83-xsl
+ SUBDIR += php84-ctype
+ SUBDIR += php84-dom
+ SUBDIR += php84-enchant
+ SUBDIR += php84-simplexml
+ SUBDIR += php84-xml
+ SUBDIR += php84-xmlreader
+ SUBDIR += php84-xmlwriter
+ SUBDIR += php84-xsl
SUBDIR += pict
SUBDIR += po4a
SUBDIR += pod2mdoc
diff --git a/textproc/php84-ctype/Makefile b/textproc/php84-ctype/Makefile
new file mode 100644
index 000000000000..fa8ab3d7ad30
--- /dev/null
+++ b/textproc/php84-ctype/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -ctype
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-dom/Makefile b/textproc/php84-dom/Makefile
new file mode 100644
index 000000000000..02a3ee9976c6
--- /dev/null
+++ b/textproc/php84-dom/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -dom
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-enchant/Makefile b/textproc/php84-enchant/Makefile
new file mode 100644
index 000000000000..1deecd8a0101
--- /dev/null
+++ b/textproc/php84-enchant/Makefile
@@ -0,0 +1,12 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -enchant
+
+post-patch:
+ ${REINPLACE_CMD} -e \
+ 's|#include "../spl/spl_exceptions.h"|#include "ext/spl/spl_exceptions.h"|g' \
+ ${WRKSRC}/enchant.c
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-simplexml/Makefile b/textproc/php84-simplexml/Makefile
new file mode 100644
index 000000000000..ddb54ac3fffd
--- /dev/null
+++ b/textproc/php84-simplexml/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -simplexml
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-xml/Makefile b/textproc/php84-xml/Makefile
new file mode 100644
index 000000000000..1d04b9033f65
--- /dev/null
+++ b/textproc/php84-xml/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -xml
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-xml/files/patch-compat.c b/textproc/php84-xml/files/patch-compat.c
new file mode 100644
index 000000000000..0752de99e2da
--- /dev/null
+++ b/textproc/php84-xml/files/patch-compat.c
@@ -0,0 +1,13 @@
+--- compat.c.orig 2023-06-06 15:54:29 UTC
++++ compat.c
+@@ -14,6 +14,10 @@
+ +----------------------------------------------------------------------+
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include "php.h"
+ #if defined(HAVE_LIBXML) && (defined(HAVE_XML) || defined(HAVE_XMLRPC)) && !defined(HAVE_LIBEXPAT)
+ #include "expat_compat.h"
diff --git a/textproc/php84-xmlreader/Makefile b/textproc/php84-xmlreader/Makefile
new file mode 100644
index 000000000000..4af62c73f7c1
--- /dev/null
+++ b/textproc/php84-xmlreader/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -xmlreader
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-xmlwriter/Makefile b/textproc/php84-xmlwriter/Makefile
new file mode 100644
index 000000000000..7adfd0814081
--- /dev/null
+++ b/textproc/php84-xmlwriter/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -xmlwriter
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php84-xsl/Makefile b/textproc/php84-xsl/Makefile
new file mode 100644
index 000000000000..64d8e7f98be1
--- /dev/null
+++ b/textproc/php84-xsl/Makefile
@@ -0,0 +1,12 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -xsl
+
+post-patch:
+ ${REINPLACE_CMD} -e \
+ 's|#include "../dom/xml_common.h"|#include "ext/dom/xml_common.h"|g' \
+ ${WRKSRC}/php_xsl.h
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/Makefile b/www/Makefile
index ac8533e36ce9..582b4d3e41c4 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -405,6 +405,7 @@
SUBDIR += mod_php81
SUBDIR += mod_php82
SUBDIR += mod_php83
+ SUBDIR += mod_php84
SUBDIR += mod_proctitle
SUBDIR += mod_qos
SUBDIR += mod_realdoc
@@ -1401,6 +1402,9 @@
SUBDIR += php83-opcache
SUBDIR += php83-session
SUBDIR += php83-tidy
+ SUBDIR += php84-opcache
+ SUBDIR += php84-session
+ SUBDIR += php84-tidy
SUBDIR += phpbb3
SUBDIR += phpfpmtop
SUBDIR += phpgroupware
diff --git a/www/mod_php84/Makefile b/www/mod_php84/Makefile
new file mode 100644
index 000000000000..1ee419ec5ebd
--- /dev/null
+++ b/www/mod_php84/Makefile
@@ -0,0 +1,18 @@
+CATEGORIES= www devel
+PKGNAMEPREFIX= mod_
+
+MAINTAINER= bofh@FreeBSD.org
+
+CONFLICTS_INSTALL= mod_php[0-9][0-9]
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+OPTIONS_DEFINE= AP2FILTER
+OPTIONS_EXCLUDE= CGI CLI EMBED FPM
+
+AP2FILTER_DESC= Use Apache 2.x filter interface (experimental)
+
+AP2FILTER_CONFIGURE_ON=--with-apxs2filter=${APXS}
+AP2FILTER_CONFIGURE_OFF=--with-apxs2=${APXS}
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/php84-opcache/Makefile b/www/php84-opcache/Makefile
new file mode 100644
index 000000000000..3a08a1e576c2
--- /dev/null
+++ b/www/php84-opcache/Makefile
@@ -0,0 +1,11 @@
+CATEGORIES= www
+
+PKGNAMESUFFIX= -opcache
+
+BROKEN= Missing header files which will be fixed in next version
+
+USES= php:zend,noflavors
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/php84-session/Makefile b/www/php84-session/Makefile
new file mode 100644
index 000000000000..0ba5f843d21d
--- /dev/null
+++ b/www/php84-session/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= www
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -session
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/php84-tidy/Makefile b/www/php84-tidy/Makefile
new file mode 100644
index 000000000000..ab6170533940
--- /dev/null
+++ b/www/php84-tidy/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= www
+
+MASTERDIR= ${.CURDIR}/../../lang/php84
+
+PKGNAMESUFFIX= -tidy
+
+.include "${MASTERDIR}/Makefile"