aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMuhammad Moinur Rahman <bofh@FreeBSD.org>2021-12-29 02:09:08 +0000
committerMuhammad Moinur Rahman <bofh@FreeBSD.org>2021-12-29 02:09:08 +0000
commit44e99def8ddf26311675cb2070eb062e1f7d0da5 (patch)
tree9406ba2c32bbaf622db561bc60e7483638f4beb2
parent0ecc22072ebf57bc15002884e4baecf9c1d8dc92 (diff)
downloadports-44e99def8ddf26311675cb2070eb062e1f7d0da5.tar.gz
ports-44e99def8ddf26311675cb2070eb062e1f7d0da5.zip
Add php81 to the tree
Core: Fixed inclusion order for phpize builds on Windows. Added missing hashtable insertion APIs for arr/obj/ref. Implemented FR #77372 (Relative file path is removed from uploaded file). Fixed bug #81607 (CE_CACHE allocation with concurrent access). Fixed bug #81507 (Fiber does not compile on AIX). Fixed bug #78647 (SEGFAULT in zend_do_perform_implementation_check). Fixed bug #81518 (Header injection via default_mimetype / default_charset). Fixed bug #75941 (Fix compile failure on Solaris with clang). Fixed bug #81380 (Observer may not be initialized properly). Fixed bug #81514 (Using Enum as key in WeakMap triggers GC + SegFault). Fixed bug #81520 (TEST_PHP_CGI_EXECUTABLE badly set in run-tests.php). Fixed bug #81377 (unset() of $GLOBALS sub-key yields warning). Fixed bug #81342 (New ampersand token parsing depends on new line after it). Fixed bug #81280 (Unicode characters in cli.prompt causes segfault). Fixed bug #81192 ("Declaration should be compatible with" gives incorrect line number with traits). Fixed bug #78919 (CLI server: insufficient cleanup if request startup fails). Fixed bug #81303 (match error message improvements). Fixed bug #81238 (Fiber support missing for Solaris Sparc). Fixed bug #81237 (Comparison of fake closures doesn't work). Fixed bug #81202 (powerpc64 build fails on fibers). Fixed bug #80072 (Cyclic unserialize in TMPVAR operand may leak). Fixed bug #81163 (__sleep allowed to return non-array). Fixed bug #75474 (function scope static variables are not bound to a unique function). Fixed bug #53826 (__callStatic fired in base class through a parent call if the method is private). Fixed bug #81076 (incorrect debug info on Closures with implicit binds). CLI: Fixed bug #81496 (Server logs incorrect request method). COM: Dispatch using LANG_NEUTRAL instead of LOCALE_SYSTEM_DEFAULT. Curl: Fixed bug #81085 (Support CURLOPT_SSLCERT_BLOB for cert strings). Date: Fixed bug #81458 (Regression Incorrect difference after timezone change). Fixed bug #81500 (Interval serialization regression since 7.3.14 / 7.4.2). Fixed bug #81504 (Incorrect timezone transition details for POSIX data). Fixed bug #80998 (Missing second with inverted interval). Speed up finding timezone offset information. Fixed bug #79580 (date_create_from_format misses leap year). Fixed bug #80963 (DateTimeZone::getTransitions() truncated). Fixed bug #80974 (Wrong diff between 2 dates in different timezones). Fixed bug #80998 (Missing second with inverted interval). Fixed bug #81097 (DateTimeZone silently falls back to UTC when providing an offset with seconds). Fixed bug #81106 (Regression in 8.1: add() now truncate ->f). Fixed bug #81273 (Date interval calculation not correct). Fixed bug #52480 (Incorrect difference using DateInterval). Fixed bug #62326 (date_diff() function returns false result). Fixed bug #64992 (dst not handled past 2038). Fixed bug #65003 (Wrong date diff). Fixed bug #66545 (DateTime. diff returns negative values). Fixed bug #68503 (date_diff on two dates with timezone set localised returns wrong results). Fixed bug #69806 (Incorrect date from timestamp). Fixed bug #71700 (Extra day on diff between begin and end of march 2016). Fixed bug #71826 (DateTime::diff confuse on timezone 'Asia/Tokyo'). Fixed bug #73460 (Datetime add not realising it already applied DST change). Fixed bug #74173 (DateTimeImmutable::getTimestamp() triggers DST switch in incorrect time). Fixed bug #74274 (Handling DST transitions correctly). Fixed bug #74524 (Date diff is bad calculated, in same time zone). Fixed bug #75167 (DateTime::add does only care about backward DST transition, not forward). Fixed bug #76032 (DateTime->diff having issues with leap days for timezones ahead of UTC). Fixed bug #76374 (Date difference varies according day time). Fixed bug #77571 (DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00). Fixed bug #78452 (diff makes wrong in hour for Asia/Tehran). Fixed bug #79452 (DateTime::diff() generates months differently between time zones). Fixed bug #79698 (timelib mishandles future timestamps (triggered by 'zic -b slim')). Fixed bug #79716 (Invalid date time created (with day "00")). Fixed bug #80610 (DateTime calculate wrong with DateInterval). Fixed bug #80664 (DateTime objects behave incorrectly around DST transition). Fixed bug #80913 (DateTime(Immutable)::sub around DST yield incorrect time). DBA: Fixed bug #81588 (TokyoCabinet driver leaks memory). DOM: Fixed bug #81433 (DOMElement::setIdAttribute() called twice may remove ID). FFI: Fixed bug #79576 ("TYPE *" shows unhelpful message when type is not defined). Filter: Fixed bug #61700 (FILTER_FLAG_IPV6/FILTER_FLAG_NO_PRIV|RES_RANGE failing). FPM: Fixed bug #81513 (Future possibility for heap overflow in FPM zlog). Fixed bug #81026 (PHP-FPM oob R/W in root process leading to privilege escalation) (CVE-2021-21703). Added openmetrics status format. Enable process renaming on macOS. Added pm.max_spawn_rate option to configure max spawn child processes rate. Fixed bug #65800 (Events port mechanism). FTP: Convert resource<ftp> to object \FTP\Connection. GD: Fixed bug #71316 (libpng warning from imagecreatefromstring). Convert resource<gd font> to object \GdFont. Added support for Avif images hash: Implemented FR #68109 (Add MurmurHash V3). Implemented FR #73385 (Add xxHash support). JSON: Fixed bug #81532 (Change of $depth behaviour in json_encode() on PHP 8.1). LDAP: Convert resource<ldap link> to object \LDAP\Connection. Convert resource<ldap result> to object \LDAP\Result. Convert resource<ldap result entry> to object \LDAP\ResultEntry. MBString: Fixed bug #76167 (mbstring may use pointer from some previous request). Fixed bug #81390 (mb_detect_encoding() regression). Fixed bug #81349 (mb_detect_encoding misdetcts ASCII in some cases). Fixed bug #81298 (mb_detect_encoding() segfaults when 7bit encoding is specified). MySQLi: Fixed bug #70372 (Emulate mysqli_fetch_all() for libmysqlclient). Fixed bug #80330 (Replace language in APIs and source code/docs). Fixed bug #80329 (Add option to specify LOAD DATA LOCAL white list folder (including libmysql)). MySQLnd: Fixed bug #63327 (Crash (Bus Error) in mysqlnd due to wrong alignment). Fixed bug #80761 (PDO uses too much memory). Opcache: Fixed bug #81409 (Incorrect JIT code for ADD with a reference to array). Fixed bug #81255 (Memory leak in PHPUnit with functional JIT). Fixed bug #80959 (infinite loop in building cfg during JIT compilation). Fixed bug #81225 (Wrong result with pow operator with JIT enabled). Fixed bug #81249 (Intermittent property assignment failure with JIT enabled). Fixed bug #81256 (Assertion `zv != ((void *)0)' failed for "preload" with JIT). Fixed bug #81133 (building opcache with phpize fails). Fixed bug #81136 (opcache header not installed). Added inheritance cache. OpenSSL: Fixed bug #81502 ($tag argument of openssl_decrypt() should accept null/empty string). Bump minimal OpenSSL version to 1.0.2. PCRE: Fixed bug #81424 (PCRE2 10.35 JIT performance regression). Bundled PCRE2 is 10.37. PDO: Fixed bug #40913 (PDO_MYSQL: PDO::PARAM_LOB does not bind to a stream for fetching a BLOB). PDO MySQL: Fixed bug #80908 (PDO::lastInsertId() return wrong). Fixed bug #81037 (PDO discards error message text from prepared statement). PDO OCI: Fixed bug #77120 (Support 'success with info' at connection). PDO ODBC: Implement PDO_ATTR_SERVER_VERSION and PDO_ATTR_SERVER_INFO for PDO::getAttribute(). PDO PgSQL: Fixed bug #81343 (pdo_pgsql: Inconsitent boolean conversion after calling closeCursor()). PDO SQLite: Fixed bug #38334 (Proper data-type support for PDO_SQLITE). PgSQL: Fixed bug #81509 (pg_end_copy still expects a resource). Convert resource<pgsql link> to object \PgSql\Connection. Convert resource<pgsql result> to object \PgSql\Result. Convert resource<pgsql large object> to object \PgSql\Lob. Phar: Use SHA256 by default for signature. Add support for OpenSSL_SHA256 and OpenSSL_SHA512 signature. phpdbg: Fixed bug #81135 (unknown help topic causes assertion failure). PSpell: Convert resource<pspell> to object \PSpell\Dictionary. Convert resource<pspell config> to object \PSpell\Config. readline: Fixed bug #72998 (invalid read in readline completion). Reflection: Fixed bug #81611 (ArgumentCountError when getting default value from ReflectionParameter with new). Fixed bug #81630 (PHP 8.1: ReflectionClass->getTraitAliases() crashes with Internal error). Fixed bug #81457 (Enum: ReflectionMethod->getDeclaringClass() return a ReflectionClass). Fixed bug #81474 (Make ReflectionEnum and related class non-final). Fixed bug #80821 (ReflectionProperty::getDefaultValue() returns current value for statics). Fixed bug #80564 (ReflectionProperty::__toString() renders current value, not default value). Fixed bug #80097 (ReflectionAttribute is not a Reflector). Fixed bug #81200 (no way to determine if Closure is static). Implement ReflectionFunctionAbstract::getClosureUsedVariables. Shmop: Fixed bug #81407 (shmop_open won't attach and causes php to crash). SimpleXML: Fixed bug #81325 (Segfault in zif_simplexml_import_dom). SNMP: Implement SHA256 and SHA512 for security protocol. Sodium: Added the XChaCha20 stream cipher functions. Added the Ristretto255 functions, which are available in libsodium 1.0.18. SPL: Fixed bug #66588 (SplFileObject::fgetcsv incorrectly returns a row on premature EOF). Fixed bug #80663 (Recursive SplFixedArray::setSize() may cause double-free). Fixed bug #81477 (LimitIterator + SplFileObject regression in 8.0.1). Fixed bug #81112 (Special json_encode behavior for SplFixedArray). Fixed bug #80945 ("Notice: Undefined index" on unset() ArrayObject non-existing key). Fixed bug #80724 (FilesystemIterator::FOLLOW_SYMLINKS remove KEY_AS_FILE from bitmask). Standard: Fixed bug #81441 (gethostbyaddr('::1') returns ip instead of name after calling some other method). Fixed bug #81491 (Incorrectly using libsodium for argon2 hashing). Fixed bug #81142 (PHP 7.3+ memory leak when unserialize() is used on an associative array). Fixed bug #81111 (Serialization is unexpectedly allowed on anonymous classes with __serialize()). Fixed bug #81137 (hrtime breaks build on OSX before Sierra). Fixed bug #77627 (method_exists on Closure::__invoke inconsistency). Streams: Fixed bug #81475 (stream_isatty emits warning with attached stream wrapper). XML: Fixed bug #79971 (special character is breaking the path in xml function) (CVE-2021-21707). Fixed bug #70962 (XML_OPTION_SKIP_WHITE strips embedded whitespace). Zip: Fixed bug #81490 (ZipArchive::extractTo() may leak memory). Fixed bug #77978 (Dirname ending in colon unzips to wrong dir). Fixed bug #81420 (ZipArchive::extractTo extracts outside of destination) (CVE-2021-21706). Fixed bug #80833 (ZipArchive::getStream doesn't use setPassword). FLAVORS won't be available untill it is added to the Uses framework which can be followed up : https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260774 Relnotes: https://www.php.net/ChangeLog-8.php#8.1.1 Sponsored by: Bounce Experts
-rw-r--r--archivers/Makefile4
-rw-r--r--archivers/php81-bz2/Makefile7
-rw-r--r--archivers/php81-phar/Makefile7
-rw-r--r--archivers/php81-phar/files/patch-config.m441
-rw-r--r--archivers/php81-zip/Makefile7
-rw-r--r--archivers/php81-zlib/Makefile7
-rw-r--r--archivers/php81-zlib/files/patch-zlib.c10
-rw-r--r--converters/Makefile2
-rw-r--r--converters/php81-iconv/Makefile7
-rw-r--r--converters/php81-mbstring/Makefile7
-rw-r--r--converters/php81-mbstring/files/patch-config.m444
-rw-r--r--databases/Makefile12
-rw-r--r--databases/php81-dba/Makefile7
-rw-r--r--databases/php81-dba/files/patch-config.m450
-rw-r--r--databases/php81-mysqli/Makefile7
-rw-r--r--databases/php81-mysqli/files/patch-mysqli__api.c12
-rw-r--r--databases/php81-mysqli/files/patch-php_mysqli_structs.h20
-rw-r--r--databases/php81-odbc/Makefile7
-rw-r--r--databases/php81-odbc/files/patch-config.m4111
-rw-r--r--databases/php81-pdo/Makefile7
-rw-r--r--databases/php81-pdo_dblib/Makefile7
-rw-r--r--databases/php81-pdo_firebird/Makefile7
-rw-r--r--databases/php81-pdo_mysql/Makefile7
-rw-r--r--databases/php81-pdo_odbc/Makefile7
-rw-r--r--databases/php81-pdo_pgsql/Makefile7
-rw-r--r--databases/php81-pdo_sqlite/Makefile7
-rw-r--r--databases/php81-pgsql/Makefile7
-rw-r--r--databases/php81-sqlite3/Makefile7
-rw-r--r--devel/Makefile10
-rw-r--r--devel/php81-ffi/Makefile7
-rw-r--r--devel/php81-gettext/Makefile7
-rw-r--r--devel/php81-intl/Makefile7
-rw-r--r--devel/php81-pcntl/Makefile7
-rw-r--r--devel/php81-readline/Makefile7
-rw-r--r--devel/php81-readline/files/patch-config.m433
-rw-r--r--devel/php81-readline/files/patch-readline_cli.c13
-rw-r--r--devel/php81-shmop/Makefile7
-rw-r--r--devel/php81-sysvmsg/Makefile7
-rw-r--r--devel/php81-sysvsem/Makefile7
-rw-r--r--devel/php81-sysvshm/Makefile7
-rw-r--r--devel/php81-tokenizer/Makefile7
-rw-r--r--ftp/Makefile2
-rw-r--r--ftp/php81-curl/Makefile7
-rw-r--r--ftp/php81-ftp/Makefile7
-rw-r--r--graphics/Makefile2
-rw-r--r--graphics/php81-exif/Makefile7
-rw-r--r--graphics/php81-gd/Makefile7
-rw-r--r--graphics/php81-gd/files/patch-gd.c11
-rw-r--r--lang/Makefile2
-rw-r--r--lang/php81-extensions/Makefile91
-rw-r--r--lang/php81-extensions/pkg-descr7
-rw-r--r--lang/php81/Makefile662
-rw-r--r--lang/php81/distinfo3
-rw-r--r--lang/php81/files/patch-build_Makefile.global19
-rw-r--r--lang/php81/files/patch-configure.ac45
-rw-r--r--lang/php81/files/patch-ext_mysqli_mysqli__api.c12
-rw-r--r--lang/php81/files/patch-ext_mysqli_mysqli__nonapi.c12
-rw-r--r--lang/php81/files/patch-ext_mysqli_mysqli__prop.c12
-rw-r--r--lang/php81/files/patch-ext_mysqli_php__mysqli__structs.h11
-rw-r--r--lang/php81/files/patch-sapi_apache2handler_config.m411
-rw-r--r--lang/php81/files/patch-sapi_fpm_config.m411
-rw-r--r--lang/php81/files/patch-sapi_fpm_www.conf.in17
-rw-r--r--lang/php81/files/php-fpm.in66
-rw-r--r--lang/php81/pkg-descr8
-rw-r--r--lang/php81/pkg-message.mod19
-rw-r--r--lang/php81/pkg-plist308
-rw-r--r--lang/php81/pkg-plist.mod3
-rw-r--r--mail/Makefile1
-rw-r--r--mail/php81-imap/Makefile7
-rw-r--r--mail/php81-imap/files/patch-config.m447
-rw-r--r--math/Makefile2
-rw-r--r--math/php81-bcmath/Makefile7
-rw-r--r--math/php81-gmp/Makefile7
-rw-r--r--misc/Makefile1
-rw-r--r--misc/php81-calendar/Makefile7
-rw-r--r--net-mgmt/Makefile1
-rw-r--r--net-mgmt/php81-snmp/Makefile7
-rw-r--r--net/Makefile3
-rw-r--r--net/php81-ldap/Makefile7
-rw-r--r--net/php81-soap/Makefile7
-rw-r--r--net/php81-sockets/Makefile7
-rw-r--r--security/Makefile3
-rw-r--r--security/php81-filter/Makefile7
-rw-r--r--security/php81-openssl/Makefile7
-rw-r--r--security/php81-sodium/Makefile7
-rw-r--r--sysutils/Makefile2
-rw-r--r--sysutils/php81-fileinfo/Makefile7
-rw-r--r--sysutils/php81-fileinfo/files/patch-config.m421
-rw-r--r--sysutils/php81-posix/Makefile7
-rw-r--r--sysutils/php81-posix/files/patch-posix.c38
-rw-r--r--textproc/Makefile9
-rw-r--r--textproc/php81-ctype/Makefile7
-rw-r--r--textproc/php81-dom/Makefile7
-rw-r--r--textproc/php81-enchant/Makefile7
-rw-r--r--textproc/php81-enchant/files/patch-enchant.c11
-rw-r--r--textproc/php81-pspell/Makefile7
-rw-r--r--textproc/php81-simplexml/Makefile7
-rw-r--r--textproc/php81-simplexml/files/patch-config.m442
-rw-r--r--textproc/php81-xml/Makefile7
-rw-r--r--textproc/php81-xml/files/patch-compat.c13
-rw-r--r--textproc/php81-xmlreader/Makefile7
-rw-r--r--textproc/php81-xmlwriter/Makefile7
-rw-r--r--textproc/php81-xsl/Makefile7
-rw-r--r--textproc/php81-xsl/files/patch-php_xsl.h11
-rw-r--r--www/Makefile4
-rw-r--r--www/mod_php81/Makefile13
-rw-r--r--www/php81-opcache/Makefile7
-rw-r--r--www/php81-opcache/files/patch-config.m420
-rw-r--r--www/php81-session/Makefile7
-rw-r--r--www/php81-tidy/Makefile7
110 files changed, 2337 insertions, 0 deletions
diff --git a/archivers/Makefile b/archivers/Makefile
index caea780b16f5..c96743259a10 100644
--- a/archivers/Makefile
+++ b/archivers/Makefile
@@ -162,9 +162,13 @@
SUBDIR += php74-zip
SUBDIR += php74-zlib
SUBDIR += php80-bz2
+ SUBDIR += php81-bz2
SUBDIR += php80-phar
+ SUBDIR += php81-phar
SUBDIR += php80-zip
+ SUBDIR += php81-zip
SUBDIR += php80-zlib
+ SUBDIR += php81-zlib
SUBDIR += pigz
SUBDIR += pixz
SUBDIR += plzip
diff --git a/archivers/php81-bz2/Makefile b/archivers/php81-bz2/Makefile
new file mode 100644
index 000000000000..acda1fa77a92
--- /dev/null
+++ b/archivers/php81-bz2/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -bz2
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php81-phar/Makefile b/archivers/php81-phar/Makefile
new file mode 100644
index 000000000000..810e19ae4e32
--- /dev/null
+++ b/archivers/php81-phar/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -phar
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php81-phar/files/patch-config.m4 b/archivers/php81-phar/files/patch-config.m4
new file mode 100644
index 000000000000..1aba3bd9a5a8
--- /dev/null
+++ b/archivers/php81-phar/files/patch-config.m4
@@ -0,0 +1,41 @@
+--- config.m4.orig 2016-06-21 19:56:50 UTC
++++ config.m4
+@@ -4,8 +4,38 @@ dnl config.m4 for extension phar
+ PHP_ARG_ENABLE(phar, for phar archive support,
+ [ --disable-phar Disable phar support], yes)
+
++PHP_ARG_WITH(pcre-dir, pcre install prefix,
++[ --with-pcre-dir PHAR: pcre install prefix], no, no)
++
++
+ if test "$PHP_PHAR" != "no"; then
++
++ dnl This is PECL build, check if bundled PCRE library is used
++ old_CPPFLAGS=$CPPFLAGS
++ CPPFLAGS=$INCLUDES
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=yes
++ ],[
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=pecl
++ PHP_ADD_INCLUDE($PHP_PCRE_DIR/include)
++ ],[
++ PHP_PCRE_REGEX=no
++ ])
++ ])
++
+ PHP_NEW_EXTENSION(phar, util.c tar.c zip.c stream.c func_interceptors.c dirstream.c phar.c phar_object.c phar_path_check.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
++ PHP_HASH=yes
+ AC_MSG_CHECKING([for phar openssl support])
+ if test "$PHP_HASH_SHARED" != "yes"; then
+ if test "$PHP_HASH" != "no"; then
diff --git a/archivers/php81-zip/Makefile b/archivers/php81-zip/Makefile
new file mode 100644
index 000000000000..448cb8fad537
--- /dev/null
+++ b/archivers/php81-zip/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -zip
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php81-zlib/Makefile b/archivers/php81-zlib/Makefile
new file mode 100644
index 000000000000..751ffb1ae6b5
--- /dev/null
+++ b/archivers/php81-zlib/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= archivers
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -zlib
+
+.include "${MASTERDIR}/Makefile"
diff --git a/archivers/php81-zlib/files/patch-zlib.c b/archivers/php81-zlib/files/patch-zlib.c
new file mode 100644
index 000000000000..be02c50d1df6
--- /dev/null
+++ b/archivers/php81-zlib/files/patch-zlib.c
@@ -0,0 +1,10 @@
+--- zlib.c.orig 2016-06-21 19:57:08 UTC
++++ zlib.c
+@@ -1480,6 +1480,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 35de0a964209..2a0031cfd8a2 100644
--- a/converters/Makefile
+++ b/converters/Makefile
@@ -141,7 +141,9 @@
SUBDIR += php74-iconv
SUBDIR += php74-mbstring
SUBDIR += php80-iconv
+ SUBDIR += php81-iconv
SUBDIR += php80-mbstring
+ SUBDIR += php81-mbstring
SUBDIR += psiconv
SUBDIR += py-bencode.py
SUBDIR += py-bencoder
diff --git a/converters/php81-iconv/Makefile b/converters/php81-iconv/Makefile
new file mode 100644
index 000000000000..cd797676267b
--- /dev/null
+++ b/converters/php81-iconv/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= converters
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -iconv
+
+.include "${MASTERDIR}/Makefile"
diff --git a/converters/php81-mbstring/Makefile b/converters/php81-mbstring/Makefile
new file mode 100644
index 000000000000..5ec26ef20ab5
--- /dev/null
+++ b/converters/php81-mbstring/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= converters
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -mbstring
+
+.include "${MASTERDIR}/Makefile"
diff --git a/converters/php81-mbstring/files/patch-config.m4 b/converters/php81-mbstring/files/patch-config.m4
new file mode 100644
index 000000000000..a3e5c14477a3
--- /dev/null
+++ b/converters/php81-mbstring/files/patch-config.m4
@@ -0,0 +1,44 @@
+--- config.m4.orig 2019-08-06 06:54:10 UTC
++++ config.m4
+@@ -37,6 +37,31 @@ AC_DEFUN([PHP_MBSTRING_EXTENSION], [
+
+ out="php_config.h"
+
++ dnl This is PECL build, check if bundled PCRE library is used
++ old_CPPFLAGS=$CPPFLAGS
++ CPPFLAGS=$INCLUDES
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=yes
++ ],[
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=pecl
++ PHP_ADD_INCLUDE($PHP_PCRE_DIR/include)
++ ],[
++ PHP_PCRE_REGEX=no
++ ])
++ ])
++
++
+ if test "$ext_shared" != "no" && test -f "$ext_builddir/config.h.in"; then
+ out="$abs_builddir/config.h"
+ fi
+@@ -200,6 +225,9 @@ PHP_ARG_ENABLE([mbregex],
+ [yes],
+ [no])
+
++PHP_ARG_WITH(pcre-dir, pcre install prefix,
++[ --with-pcre-dir MBSTRING: pcre install prefix], no, no)
++
+ if test "$PHP_MBSTRING" != "no"; then
+ AC_DEFINE([HAVE_MBSTRING],1,[whether to have multibyte string support])
+
diff --git a/databases/Makefile b/databases/Makefile
index a2f7c0fb2374..8243c1fa738f 100644
--- a/databases/Makefile
+++ b/databases/Makefile
@@ -636,17 +636,29 @@
SUBDIR += php74-pgsql
SUBDIR += php74-sqlite3
SUBDIR += php80-dba
+ SUBDIR += php81-dba
SUBDIR += php80-mysqli
+ SUBDIR += php81-mysqli
SUBDIR += php80-odbc
+ SUBDIR += php81-odbc
SUBDIR += php80-pdo
+ SUBDIR += php81-pdo
SUBDIR += php80-pdo_dblib
+ SUBDIR += php81-pdo_dblib
SUBDIR += php80-pdo_firebird
+ SUBDIR += php81-pdo_firebird
SUBDIR += php80-pdo_mysql
+ SUBDIR += php81-pdo_mysql
SUBDIR += php80-pdo_odbc
+ SUBDIR += php81-pdo_odbc
SUBDIR += php80-pdo_pgsql
+ SUBDIR += php81-pdo_pgsql
SUBDIR += php80-pdo_sqlite
+ SUBDIR += php81-pdo_sqlite
SUBDIR += php80-pgsql
+ SUBDIR += php81-pgsql
SUBDIR += php80-sqlite3
+ SUBDIR += php81-sqlite3
SUBDIR += phpliteadmin
SUBDIR += phpminiadmin
SUBDIR += phpmyadmin
diff --git a/databases/php81-dba/Makefile b/databases/php81-dba/Makefile
new file mode 100644
index 000000000000..5c5380de17df
--- /dev/null
+++ b/databases/php81-dba/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -dba
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-dba/files/patch-config.m4 b/databases/php81-dba/files/patch-config.m4
new file mode 100644
index 000000000000..30f662138374
--- /dev/null
+++ b/databases/php81-dba/files/patch-config.m4
@@ -0,0 +1,50 @@
+--- config.m4.orig 2016-01-06 15:14:47 UTC
++++ config.m4
+@@ -324,6 +324,38 @@ 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/db48/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db48/db.h
++ break
++ elif test -f "$i/include/db47/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db47/db.h
++ break
++ elif test -f "$i/include/db46/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db46/db.h
++ break
++ elif test -f "$i/include/db44/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db44/db.h
++ break
++ elif test -f "$i/include/db43/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db43/db.h
++ break
++ elif test -f "$i/include/db42/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db42/db.h
++ break
++ elif test -f "$i/include/db41/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db41/db.h
++ break
+ elif test -f "$i/include/db5.1/db.h"; then
+ THIS_PREFIX=$i
+ THIS_INCLUDE=$i/include/db5.1/db.h
+@@ -366,7 +398,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 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)])
+ fi
+ PHP_DBA_STD_RESULT(db4,Berkeley DB4)
+
diff --git a/databases/php81-mysqli/Makefile b/databases/php81-mysqli/Makefile
new file mode 100644
index 000000000000..26619c0bed72
--- /dev/null
+++ b/databases/php81-mysqli/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -mysqli
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-mysqli/files/patch-mysqli__api.c b/databases/php81-mysqli/files/patch-mysqli__api.c
new file mode 100644
index 000000000000..a100e8205fb6
--- /dev/null
+++ b/databases/php81-mysqli/files/patch-mysqli__api.c
@@ -0,0 +1,12 @@
+--- mysqli_api.c.orig 2020-09-29 22:36:51 UTC
++++ mysqli_api.c
+@@ -29,7 +29,9 @@
+ #include "zend_smart_str.h"
+ #include "php_mysqli_structs.h"
+ #include "mysqli_priv.h"
++#if defined(MYSQLI_USE_MYSQLND)
+ #include "ext/mysqlnd/mysql_float_to_double.h"
++#endif
+
+ #define ERROR_ARG_POS(arg_num) (getThis() ? (arg_num-1) : (arg_num))
+
diff --git a/databases/php81-mysqli/files/patch-php_mysqli_structs.h b/databases/php81-mysqli/files/patch-php_mysqli_structs.h
new file mode 100644
index 000000000000..68568dd214fd
--- /dev/null
+++ b/databases/php81-mysqli/files/patch-php_mysqli_structs.h
@@ -0,0 +1,20 @@
+--- php_mysqli_structs.h.orig 2010-07-26 15:52:54.000000000 +0200
++++ php_mysqli_structs.h 2010-07-26 15:53:14.000000000 +0200
+@@ -36,7 +36,7 @@
+ #define FALSE 0
+ #endif
+
+-#ifdef MYSQLI_USE_MYSQLND
++#if defined(MYSQLI_USE_MYSQLND)
+ #include "ext/mysqlnd/mysqlnd.h"
+ #include "mysqli_mysqlnd.h"
+ #else
+@@ -53,6 +53,8 @@
+ #undef HAVE_MBSTATE_T
+ #define WE_HAD_MBSTATE_T
+ #endif
++
++typedef zend_ulong ulong;
+
+ #if defined(ulong) && !defined(HAVE_ULONG)
+ #define HAVE_ULONG
diff --git a/databases/php81-odbc/Makefile b/databases/php81-odbc/Makefile
new file mode 100644
index 000000000000..8bc4a42dd7ce
--- /dev/null
+++ b/databases/php81-odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-odbc/files/patch-config.m4 b/databases/php81-odbc/files/patch-config.m4
new file mode 100644
index 000000000000..04efc6ded7c9
--- /dev/null
+++ b/databases/php81-odbc/files/patch-config.m4
@@ -0,0 +1,111 @@
+--- config.m4.orig 2019-08-06 06:54:18 UTC
++++ config.m4
+@@ -91,6 +91,9 @@ AC_DEFUN([PHP_ODBC_FIND_EMPRESS_BCS_LIBS
+ dnl
+ dnl configure options
+ dnl
++PHP_ARG_ENABLE(odbc,,
++[ --enable-odbc Enable ODBC support with selected driver])
++
+
+ PHP_ARG_WITH([odbcver],,
+ [AS_HELP_STRING([[--with-odbcver[=HEX]]],
+@@ -102,7 +105,7 @@ PHP_ARG_WITH([odbcver],,
+ 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 +135,7 @@ fi
+ 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 +156,7 @@ fi
+ 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 +184,7 @@ fi
+ 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 +225,7 @@ if test -z "$ODBC_TYPE"; then
+ 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 +251,7 @@ if test -z "$ODBC_TYPE"; then
+ 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 +297,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 +320,7 @@ fi
+ 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 +338,7 @@ fi
+ 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 +361,7 @@ fi
+ 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 +389,7 @@ fi
+ 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/php81-pdo/Makefile b/databases/php81-pdo/Makefile
new file mode 100644
index 000000000000..436a6554b434
--- /dev/null
+++ b/databases/php81-pdo/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pdo_dblib/Makefile b/databases/php81-pdo_dblib/Makefile
new file mode 100644
index 000000000000..1634ef611565
--- /dev/null
+++ b/databases/php81-pdo_dblib/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo_dblib
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pdo_firebird/Makefile b/databases/php81-pdo_firebird/Makefile
new file mode 100644
index 000000000000..3d8a88b9eb21
--- /dev/null
+++ b/databases/php81-pdo_firebird/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo_firebird
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pdo_mysql/Makefile b/databases/php81-pdo_mysql/Makefile
new file mode 100644
index 000000000000..2f00ba00c8b9
--- /dev/null
+++ b/databases/php81-pdo_mysql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo_mysql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pdo_odbc/Makefile b/databases/php81-pdo_odbc/Makefile
new file mode 100644
index 000000000000..ea600d80a450
--- /dev/null
+++ b/databases/php81-pdo_odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo_odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pdo_pgsql/Makefile b/databases/php81-pdo_pgsql/Makefile
new file mode 100644
index 000000000000..f13461131114
--- /dev/null
+++ b/databases/php81-pdo_pgsql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo_pgsql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pdo_sqlite/Makefile b/databases/php81-pdo_sqlite/Makefile
new file mode 100644
index 000000000000..c18088284a0b
--- /dev/null
+++ b/databases/php81-pdo_sqlite/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pdo_sqlite
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-pgsql/Makefile b/databases/php81-pgsql/Makefile
new file mode 100644
index 000000000000..f23a2e371612
--- /dev/null
+++ b/databases/php81-pgsql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pgsql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php81-sqlite3/Makefile b/databases/php81-sqlite3/Makefile
new file mode 100644
index 000000000000..c68eab2dfba2
--- /dev/null
+++ b/databases/php81-sqlite3/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -sqlite3
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/Makefile b/devel/Makefile
index 5d929ccff89a..a4f7dbab77e1 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -4037,15 +4037,25 @@
SUBDIR += php74-sysvshm
SUBDIR += php74-tokenizer
SUBDIR += php80-ffi
+ SUBDIR += php81-ffi
SUBDIR += php80-gettext
+ SUBDIR += php81-gettext
SUBDIR += php80-intl
+ SUBDIR += php81-intl
SUBDIR += php80-pcntl
+ SUBDIR += php81-pcntl
SUBDIR += php80-readline
+ SUBDIR += php81-readline
SUBDIR += php80-shmop
+ SUBDIR += php81-shmop
SUBDIR += php80-sysvmsg
+ SUBDIR += php81-sysvmsg
SUBDIR += php80-sysvsem
+ SUBDIR += php81-sysvsem
SUBDIR += php80-sysvshm
+ SUBDIR += php81-sysvshm
SUBDIR += php80-tokenizer
+ SUBDIR += php81-tokenizer
SUBDIR += phpunit6
SUBDIR += phpunit7
SUBDIR += phpunit8
diff --git a/devel/php81-ffi/Makefile b/devel/php81-ffi/Makefile
new file mode 100644
index 000000000000..2ba98dacbc5c
--- /dev/null
+++ b/devel/php81-ffi/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -ffi
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-gettext/Makefile b/devel/php81-gettext/Makefile
new file mode 100644
index 000000000000..7ad00f9b0532
--- /dev/null
+++ b/devel/php81-gettext/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -gettext
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-intl/Makefile b/devel/php81-intl/Makefile
new file mode 100644
index 000000000000..1ccc80b52ca4
--- /dev/null
+++ b/devel/php81-intl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -intl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-pcntl/Makefile b/devel/php81-pcntl/Makefile
new file mode 100644
index 000000000000..44c3828b245a
--- /dev/null
+++ b/devel/php81-pcntl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pcntl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-readline/Makefile b/devel/php81-readline/Makefile
new file mode 100644
index 000000000000..ea2fa08b26b4
--- /dev/null
+++ b/devel/php81-readline/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -readline
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-readline/files/patch-config.m4 b/devel/php81-readline/files/patch-config.m4
new file mode 100644
index 000000000000..93799734a3e3
--- /dev/null
+++ b/devel/php81-readline/files/patch-config.m4
@@ -0,0 +1,33 @@
+--- config.m4.orig 2019-08-06 06:54:14 UTC
++++ config.m4
+@@ -3,16 +3,10 @@ PHP_ARG_WITH([libedit],
+ [AS_HELP_STRING([--with-libedit],
+ [Include libedit readline replacement (CLI/CGI only)])])
+
+-if test "$PHP_LIBEDIT" = "no"; then
+ PHP_ARG_WITH([readline],
+ [for readline support],
+ [AS_HELP_STRING([[--with-readline[=DIR]]],
+ [Include readline support (CLI/CGI only)])])
+-else
+- dnl "register" the --with-readline option to prevent invalid "unknown
+- dnl configure option" warning
+- php_with_readline=no
+-fi
+
+ if test "$PHP_READLINE" && test "$PHP_READLINE" != "no"; then
+ for i in $PHP_READLINE /usr/local /usr; do
+@@ -78,6 +72,13 @@ if test "$PHP_READLINE" && test "$PHP_RE
+ AC_DEFINE(HAVE_HISTORY_LIST, 1, [ ])
+ AC_DEFINE(HAVE_LIBREADLINE, 1, [ ])
+
++ PHP_CHECK_LIBRARY(readline, rl_completion_matches,
++ [
++ AC_DEFINE(HAVE_RL_COMPLETION_MATCHES, 1, [ ])
++ ],[],[
++ -L$READLINE_DIR/$PHP_LIBDIR $PHP_READLINE_LIBS
++ ])
++
+ elif test "$PHP_LIBEDIT" != "no"; then
+ if test "$PHP_LIBEDIT" != "yes"; then
+ AC_MSG_WARN([libedit directory ignored, rely on pkg-config])
diff --git a/devel/php81-readline/files/patch-readline_cli.c b/devel/php81-readline/files/patch-readline_cli.c
new file mode 100644
index 000000000000..02f55974f9b0
--- /dev/null
+++ b/devel/php81-readline/files/patch-readline_cli.c
@@ -0,0 +1,13 @@
+--- readline_cli.c.orig 2012-03-02 16:40:26.000000000 +0100
++++ readline_cli.c 2012-03-02 16:40:43.000000000 +0100
+@@ -19,6 +19,10 @@
+
+ /* $Id: readline_cli.c 321634 2012-01-01 13:15:04Z felipe $ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include "php.h"
+
+ #ifndef HAVE_RL_COMPLETION_MATCHES
diff --git a/devel/php81-shmop/Makefile b/devel/php81-shmop/Makefile
new file mode 100644
index 000000000000..2ab6d2fec557
--- /dev/null
+++ b/devel/php81-shmop/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -shmop
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-sysvmsg/Makefile b/devel/php81-sysvmsg/Makefile
new file mode 100644
index 000000000000..af09d3d9074b
--- /dev/null
+++ b/devel/php81-sysvmsg/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -sysvmsg
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-sysvsem/Makefile b/devel/php81-sysvsem/Makefile
new file mode 100644
index 000000000000..d973fd14d76c
--- /dev/null
+++ b/devel/php81-sysvsem/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -sysvsem
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-sysvshm/Makefile b/devel/php81-sysvshm/Makefile
new file mode 100644
index 000000000000..a8cf6b05a3b5
--- /dev/null
+++ b/devel/php81-sysvshm/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -sysvshm
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/php81-tokenizer/Makefile b/devel/php81-tokenizer/Makefile
new file mode 100644
index 000000000000..c30f2d3947ec
--- /dev/null
+++ b/devel/php81-tokenizer/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= devel
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -tokenizer
+
+.include "${MASTERDIR}/Makefile"
diff --git a/ftp/Makefile b/ftp/Makefile
index 5f9c9638ce9c..e576070085bb 100644
--- a/ftp/Makefile
+++ b/ftp/Makefile
@@ -60,7 +60,9 @@
SUBDIR += php74-curl
SUBDIR += php74-ftp
SUBDIR += php80-curl
+ SUBDIR += php81-curl
SUBDIR += php80-ftp
+ SUBDIR += php81-ftp
SUBDIR += phpwebftp
SUBDIR += proftpd
SUBDIR += proftpd-mod_vroot
diff --git a/ftp/php81-curl/Makefile b/ftp/php81-curl/Makefile
new file mode 100644
index 000000000000..609d7e6be42d
--- /dev/null
+++ b/ftp/php81-curl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= ftp
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -curl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/ftp/php81-ftp/Makefile b/ftp/php81-ftp/Makefile
new file mode 100644
index 000000000000..bea460451272
--- /dev/null
+++ b/ftp/php81-ftp/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= ftp
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -ftp
+
+.include "${MASTERDIR}/Makefile"
diff --git a/graphics/Makefile b/graphics/Makefile
index 96bca4299b6a..f32fa79d3293 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -766,7 +766,9 @@
SUBDIR += php74-exif
SUBDIR += php74-gd
SUBDIR += php80-exif
+ SUBDIR += php81-exif
SUBDIR += php80-gd
+ SUBDIR += php81-gd
SUBDIR += phplot
SUBDIR += picpuz
SUBDIR += piddle
diff --git a/graphics/php81-exif/Makefile b/graphics/php81-exif/Makefile
new file mode 100644
index 000000000000..ff91ada5b9db
--- /dev/null
+++ b/graphics/php81-exif/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= graphics
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -exif
+
+.include "${MASTERDIR}/Makefile"
diff --git a/graphics/php81-gd/Makefile b/graphics/php81-gd/Makefile
new file mode 100644
index 000000000000..754b336253ed
--- /dev/null
+++ b/graphics/php81-gd/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= graphics
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -gd
+
+.include "${MASTERDIR}/Makefile"
diff --git a/graphics/php81-gd/files/patch-gd.c b/graphics/php81-gd/files/patch-gd.c
new file mode 100644
index 000000000000..37de5d8772fc
--- /dev/null
+++ b/graphics/php81-gd/files/patch-gd.c
@@ -0,0 +1,11 @@
+--- gd.c.orig 2020-09-29 22:36:51 UTC
++++ gd.c
+@@ -72,7 +72,7 @@ static int le_gd_font;
+ # include FT_FREETYPE_H
+ #endif
+
+-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
++#if defined(HAVE_XPM) && defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
+ # include "X11/xpm.h"
+ #endif
+
diff --git a/lang/Makefile b/lang/Makefile
index 12d33411c314..a64c93a6484b 100644
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -263,7 +263,9 @@
SUBDIR += php74
SUBDIR += php74-extensions
SUBDIR += php80
+ SUBDIR += php81
SUBDIR += php80-extensions
+ SUBDIR += php81-extensions
SUBDIR += picoc
SUBDIR += plexil
SUBDIR += pocl
diff --git a/lang/php81-extensions/Makefile b/lang/php81-extensions/Makefile
new file mode 100644
index 000000000000..1390330ea4d6
--- /dev/null
+++ b/lang/php81-extensions/Makefile
@@ -0,0 +1,91 @@
+PORTNAME= php81
+PORTVERSION= 1.0
+CATEGORIES= lang
+PKGNAMESUFFIX= -extensions
+
+MAINTAINER= bofh@FreeBSD.org
+COMMENT= "meta-port" to install PHP extensions
+
+USES= metaport php
+
+PHP_VER= 81
+IGNORE_WITH_PHP= 73 74 80
+
+OPTIONS_DEFINE= BCMATH BZ2 CALENDAR CTYPE CURL DBA DOM ENCHANT EXIF FFI \
+ FILEINFO FILTER FTP GD GETTEXT GMP ICONV IMAP INTL LDAP \
+ MBSTRING MYSQLI ODBC OPCACHE OPENSSL PCNTL PDO \
+ PDO_DBLIB PDO_FIREBIRD PDO_MYSQL PDO_ODBC PDO_PGSQL \
+ PDO_SQLITE PGSQL PHAR POSIX PSPELL 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
+IMAP_DESC= IMAP 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
+OPENSSL_DESC= OpenSSL 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
+PSPELL_DESC= pspell support
+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/php81-extensions/pkg-descr b/lang/php81-extensions/pkg-descr
new file mode 100644
index 000000000000..6e2c985b2932
--- /dev/null
+++ b/lang/php81-extensions/pkg-descr
@@ -0,0 +1,7 @@
+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.
+
+WWW: https://www.php.net/
diff --git a/lang/php81/Makefile b/lang/php81/Makefile
new file mode 100644
index 000000000000..1a2919fa1ffb
--- /dev/null
+++ b/lang/php81/Makefile
@@ -0,0 +1,662 @@
+PORTNAME= php81
+DISTVERSION= 8.1.1
+PORTREVISION?= 0
+CATEGORIES?= lang devel www
+MASTER_SITES= PHP/distributions
+DISTNAME= php-${DISTVERSION}
+
+MAINTAINER= bofh@FreeBSD.org
+COMMENT= PHP Scripting Language (8.1.X branch)
+
+LICENSE= PHP301
+
+USES+= compiler:c11 cpe gnome pkgconfig tar:xz
+CPE_PRODUCT= php
+PHP_VER= 81
+
+.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-password-argon2=${LOCALBASE}
+DESTDIRNAME= INSTALL_ROOT
+
+USES+= autoreconf:build
+USE_GNOME= libxml2
+
+CPPFLAGS= -I${LOCALBASE}/include
+
+# PR230207 Allow relocations against read-only segments (override lld default)
+LDFLAGS_i386= -Wl,-z,notext
+
+CONFLICTS= php73 php74 php80
+
+OPTIONS_DEFINE+= CGI CLI DEBUG DTRACE EMBED FPM IPV6 LINKTHR \
+ MYSQL80 MYSQLND PHPDBG ZTS
+OPTIONS_DEFAULT= CGI CLI DTRACE EMBED FPM LINKTHR MYSQLND
+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_powerpc64= ${OPTIONS_EXCLUDE_${ARCH}_${OSREL:R}}
+OPTIONS_EXCLUDE_powerpc64_11= DTRACE
+OPTIONS_EXCLUDE_powerpc64_12= DTRACE
+OPTIONS_EXCLUDE_riscv64= DTRACE
+OPTIONS_EXCLUDE_sparc64= 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)
+MYSQL80_DESC= Build with MySQL caching password mechanism
+MYSQLND_DESC= Build with MySQL Native Driver
+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
+MYSQL80_USES= ssl
+MYSQL80_CONFIGURE_ON= --with-openssl
+MYSQL80_CONFIGURE_ENV= OPENSSL_CFLAGS="-I${OPENSSLINC}" \
+ OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" \
+ PHP_OPENSSL=no
+MYSQL80_LDFLAGS= -L${OPENSSLLIB} -lcrypto -lssl
+MYSQLND_CONFIGURE_ON= --enable-mysqlnd
+PHPDBG_CONFIGURE_ON= --enable-phpdbg
+PHPDBG_VARS= PHP_SAPI+=phpdbg
+ZTS_CONFIGURE_ON= --enable-zts
+ZTS_CONFIGURE_ENV= pthreads_working="yes"
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == riscv64
+CONFIGURE_ARGS+= --without-pcre-jit
+.endif
+
+.if defined(PKGNAMEPREFIX)
+USES+= apache:2.2+
+.include "${PORTSDIR}/Mk/Uses/apache.mk"
+.if ${PORT_OPTIONS:MAP2FILTER}
+CONFIGURE_ARGS+= --with-apxs2filter=${APXS}
+.else
+CONFIGURE_ARGS+= --with-apxs2=${APXS}
+.endif
+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 !!!"
+.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"
+
+.if ${PORT_OPTIONS:MMYSQL80}
+WARNING= "PHP is now built with MySQL 8.0 support which has caching password mechanism. This implies ${PORTNAME}-openssl module. Hence ${PORTNAME}-openssl can no longer be installed alongside with ${PORTNAME}. If you require ${PORTNAME}-openssl module please rebuild ${PORTNAME} with MYSQL80 OPTION disabled. Otherwise remove ${PORTNAME}-openssl DEPENDENCY from ports."
+.endif
+
+post-patch:
+ @${TOUCH} ${WRKSRC}/ext/php_config.h
+ @${REINPLACE_CMD} "s|^\(extension_dir\)|; \1|" ${WRKSRC}/php.ini-*
+
+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
+
+post-build-MYSQL80-off:
+ @${ECHO_CMD} "PHP_EXT_INC=hash json pcre spl" >> ${WRKDIR}/php.conf
+
+post-build-MYSQL80-on:
+ @${ECHO_CMD} "PHP_EXT_INC=hash json openssl pcre 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
+.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= 81
+IGNORE_WITH_PHP= 72 73 74 80
+
+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_CONFIGURE_ARGS= --with-gdbm=${LOCALBASE}
+GDBM_LIB_DEPENDS= libgdbm.so:databases/gdbm
+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.so:textproc/enchant
+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+= --enable-ffi
+.endif
+
+.if ${PHP_MODNAME} == "fileinfo"
+CONFIGURE_ARGS+= --enable-fileinfo \
+ --with-pcre-dir=${LOCALBASE}
+
+PHP_HEADER_DIRS= libmagic
+.endif
+
+.if ${PHP_MODNAME} == "filter"
+CONFIGURE_ARGS+= --enable-filter \
+ --with-pcre-dir=${LOCALBASE}
+.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} == "imap"
+PHP_MOD_PRIO= 30
+OPTIONS_RADIO= CLIENT
+OPTIONS_RADIO_CLIENT= CCLIENT PANDA
+OPTIONS_DEFAULT= PANDA
+CCLIENT_DESC= Uses the original but unmaintained cclient
+PANDA_DESC= Uses the forked panda-cclient instead of the original cclient
+PANDA_LIB_DEPENDS= libc-client4.so.10:mail/panda-cclient
+PANDA_LIB_DEPENDS_OFF= libc-client4.so.9:mail/cclient
+
+CONFIGURE_ARGS+= --with-imap-ssl=${OPENSSLBASE} \
+ --with-imap=${LOCALBASE} \
+ --with-pcre-dir=${LOCALBASE}
+
+CONFIGURE_ENV+= OPENSSL_CFLAGS="-I${OPENSSLINC}" \
+ OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" \
+ PHP_OPENSSL=yes
+
+LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl
+USES+= ssl
+.endif
+
+.if ${PHP_MODNAME} == "intl"
+LIB_DEPENDS= libicui18n.so:devel/icu
+USES+= pkgconfig
+CPPFLAGS+= -DU_USING_ICU_NAMESPACE=1
+.endif
+
+.if ${PHP_MODNAME} == "json"
+CONFIGURE_ARGS+= --enable-json
+BUILD_DEPENDS= re2c:devel/re2c
+.endif
+
+.if ${PHP_MODNAME} == "ldap"
+CONFIGURE_ARGS+= --with-ldap-sasl=${LOCALBASE} \
+ --with-ldap=${LOCALBASE}
+
+USE_OPENLDAP= yes
+.endif
+
+.if ${PHP_MODNAME} == "mbstring"
+
+CONFIGURE_ARGS+= --enable-mbstring \
+ --with-pcre-dir=${LOCALBASE}
+
+OPTIONS_DEFINE= REGEX
+OPTIONS_DEFAULT= REGEX
+
+REGEX_DESC= Enable multibyte regex support
+REGEX_LIB_DEPENDS= libonig.so:devel/oniguruma
+REGEX_CONFIGURE_ON= --with-onig=${LOCALBASE}
+REGEX_CONFIGURE_OFF= --disable-mbregex
+
+PHP_HEADER_DIRS= libmbfl libmbfl/filters libmbfl/mbfl libmbfl/nls
+.endif
+
+.if ${PHP_MODNAME} == "mysqli"
+OPTIONS_DEFINE= MYSQLND
+OPTIONS_DEFAULT= MYSQLND
+
+MYSQLND_DESC= Use MySQL Native Driver
+MYSQLND_CONFIGURE_ARGS= --with-mysqli=mysqlnd
+MYSQLND_CONFIGURE_OFF= --with-mysqli=${LOCALBASE}/bin/mysql_config
+MYSQLND_USES_OFF= mysql
+.endif
+
+.if ${PHP_MODNAME} == "odbc"
+LIB_DEPENDS+= libodbc.so:databases/unixODBC
+
+CONFIGURE_ARGS+= --enable-odbc \
+ --with-unixODBC=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "openssl"
+USES+= ssl
+CONFIGURE_ARGS+= --with-openssl
+CONFIGURE_ENV+= OPENSSL_CFLAGS="-I${OPENSSLINC}" \
+ OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto"
+.endif
+
+.if ${PHP_MODNAME} == "opcache"
+# This is needed by Zend extensions, keep before everything.
+PHP_MOD_PRIO= 10
+CONFIGURE_ARGS+= --enable-opcache
+USES+= localbase php:zend
+.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_OFF= --with-pdo-mysql=${LOCALBASE} \
+ --with-zlib-dir=/usr
+MYSQLND_CONFIGURE_ON= --with-pdo-mysql=mysqlnd
+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 \
+ --with-pcre-dir=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "posix"
+CONFIGURE_ARGS+= --enable-posix
+.endif
+
+.if ${PHP_MODNAME} == "pspell"
+LIB_DEPENDS+= libaspell.so:textproc/aspell
+
+CONFIGURE_ARGS+= --with-pspell=${LOCALBASE}
+.endif
+
+.if ${PHP_MODNAME} == "readline"
+CONFIGURE_ARGS+= --with-readline=/usr
+USES+= readline
+.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 \
+ --with-pcre-dir=${LOCALBASE}
+
+USES+= pkgconfig
+USE_GNOME= libxml2
+.endif
+
+.if ${PHP_MODNAME} == "snmp"
+CONFIGURE_ARGS+= --with-openssl-dir=${OPENSSLBASE} \
+ --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
+.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+= libtidy.so:www/tidy-lib
+.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} == "xmlrpc"
+CONFIGURE_ARGS+= --with-iconv-dir=${LOCALBASE} \
+ --with-xmlrpc
+
+USES+= iconv:translit
+USE_GNOME= libxml2
+
+PHP_HEADER_DIRS= libxmlrpc
+
+USE_PHP= xml: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+= --enable-zip \
+ --with-libzip=${LOCALBASE} \
+ --with-pcre-dir=${LOCALBASE} \
+ --with-zlib-dir=/usr
+USES+= pkgconfig
+.endif
+
+.if ${PHP_MODNAME} == "zlib"
+CONFIGURE_ARGS+= --with-zlib=/usr
+USES+= pkgconfig
+.endif
+
+.include <bsd.port.pre.mk>
+
+.if ${PHP_MODNAME} == "openssl"
+post-stage:
+ @if ${PREFIX}/bin/php -m | grep openssl 2>/dev/null && ( [ ! -f ${PREFIX}/etc/php/ext-20-openssl.ini ] && [ ! -f ${PREFIX}/etc/php/ext-30-openssl.ini ] ); then \
+ ${ECHO_CMD}; \
+ ${ECHO_MSG} "===> ${PKGNAME} "openssl module is already built with php base.; \
+ ${ECHO_CMD}; \
+ ${FALSE}; \
+ fi
+.endif
+
+.if ${PHP_MODNAME} == "openssl" || ${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/php81/distinfo b/lang/php81/distinfo
new file mode 100644
index 000000000000..f99b5f1603ea
--- /dev/null
+++ b/lang/php81/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1640164488
+SHA256 (php-8.1.1.tar.xz) = 33c09d76d0a8bbb5dd930d9dd32e6bfd44e9efcf867563759eb5492c3aff8856
+SIZE (php-8.1.1.tar.xz) = 11728680
diff --git a/lang/php81/files/patch-build_Makefile.global b/lang/php81/files/patch-build_Makefile.global
new file mode 100644
index 000000000000..4b838d157941
--- /dev/null
+++ b/lang/php81/files/patch-build_Makefile.global
@@ -0,0 +1,19 @@
+--- build/Makefile.global.orig 2019-08-06 06:54:07 UTC
++++ build/Makefile.global
+@@ -89,14 +89,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/php81/files/patch-configure.ac b/lang/php81/files/patch-configure.ac
new file mode 100644
index 000000000000..b8c26f6c43f1
--- /dev/null
+++ b/lang/php81/files/patch-configure.ac
@@ -0,0 +1,45 @@
+--- configure.ac.orig 2021-12-15 02:00:45 UTC
++++ configure.ac
+@@ -55,6 +55,7 @@ AH_BOTTOM([
+
+ #include <string.h>
+
++#include <ext/php_config.h>
+ #endif /* PHP_CONFIG_H */
+ ])
+
+@@ -273,7 +274,6 @@ sinclude(Zend/Zend.m4)
+
+ dnl ----------------------------------------------------------------------------
+
+-PTHREADS_CHECK
+ PHP_HELP_SEPARATOR([SAPI modules:])
+ PHP_SHLIB_SUFFIX_NAMES
+ PHP_BUILD_PROGRAM
+@@ -614,7 +614,7 @@ memmem \
+ AX_FUNC_WHICH_GETHOSTBYNAME_R
+
+ dnl Some systems (like OpenSolaris) do not have nanosleep in libc.
+-PHP_CHECK_FUNC_LIB(nanosleep, rt)
++PHP_CHECK_FUNC(nanosleep, rt)
+
+ dnl Haiku does not have network api in libc.
+ PHP_CHECK_FUNC_LIB(setsockopt, network)
+@@ -1360,7 +1360,7 @@ EXPANDED_SYSCONFDIR=`eval echo $sysconfdir`
+ 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
+@@ -1579,7 +1579,7 @@ PHP_SUBST(all_targets)
+ PHP_SUBST(install_targets)
+ PHP_SUBST(install_binary_targets)
+
+-PHP_INSTALL_HEADERS([Zend/ TSRM/ include/ main/ main/streams/])
++PHP_INSTALL_HEADERS([Zend/ TSRM/ main/ main/streams/])
+ PHP_INSTALL_HEADERS([Zend/Optimizer], [ \
+ zend_call_graph.h \
+ zend_cfg.h \
diff --git a/lang/php81/files/patch-ext_mysqli_mysqli__api.c b/lang/php81/files/patch-ext_mysqli_mysqli__api.c
new file mode 100644
index 000000000000..535503954e3d
--- /dev/null
+++ b/lang/php81/files/patch-ext_mysqli_mysqli__api.c
@@ -0,0 +1,12 @@
+--- ext/mysqli/mysqli_api.c.orig 2020-09-29 22:36:51 UTC
++++ ext/mysqli/mysqli_api.c
+@@ -29,7 +29,9 @@
+ #include "zend_smart_str.h"
+ #include "php_mysqli_structs.h"
+ #include "mysqli_priv.h"
++#if defined(MYSQLI_USE_MYSQLND)
+ #include "ext/mysqlnd/mysql_float_to_double.h"
++#endif
+
+ #define ERROR_ARG_POS(arg_num) (getThis() ? (arg_num-1) : (arg_num))
+
diff --git a/lang/php81/files/patch-ext_mysqli_mysqli__nonapi.c b/lang/php81/files/patch-ext_mysqli_mysqli__nonapi.c
new file mode 100644
index 000000000000..9baa04218bf9
--- /dev/null
+++ b/lang/php81/files/patch-ext_mysqli_mysqli__nonapi.c
@@ -0,0 +1,12 @@
+--- ext/mysqli/mysqli_nonapi.c.orig 2020-01-09 11:40:57 UTC
++++ ext/mysqli/mysqli_nonapi.c
+@@ -28,7 +28,9 @@
+ #include "php_ini.h"
+ #include "ext/standard/info.h"
+ #include "zend_smart_str.h"
++#if defined(MYSQLI_USE_MYSQLND)
+ #include "php_mysqli_structs.h"
++#endif
+ #include "mysqli_priv.h"
+
+ #define SAFE_STR(a) ((a)?a:"")
diff --git a/lang/php81/files/patch-ext_mysqli_mysqli__prop.c b/lang/php81/files/patch-ext_mysqli_mysqli__prop.c
new file mode 100644
index 000000000000..37d47a304440
--- /dev/null
+++ b/lang/php81/files/patch-ext_mysqli_mysqli__prop.c
@@ -0,0 +1,12 @@
+--- ext/mysqli/mysqli_prop.c.orig 2020-01-09 11:40:11 UTC
++++ ext/mysqli/mysqli_prop.c
+@@ -26,7 +26,9 @@
+ #include "php.h"
+ #include "php_ini.h"
+ #include "ext/standard/info.h"
++#if defined(MYSQLI_USE_MYSQLND)
+ #include "php_mysqli_structs.h"
++#endif
+ #include "mysqli_priv.h"
+
+ #define CHECK_STATUS(value) \
diff --git a/lang/php81/files/patch-ext_mysqli_php__mysqli__structs.h b/lang/php81/files/patch-ext_mysqli_php__mysqli__structs.h
new file mode 100644
index 000000000000..f0e33efd03aa
--- /dev/null
+++ b/lang/php81/files/patch-ext_mysqli_php__mysqli__structs.h
@@ -0,0 +1,11 @@
+--- ext/mysqli/php_mysqli_structs.h.orig 2019-12-17 10:29:23 UTC
++++ ext/mysqli/php_mysqli_structs.h
+@@ -36,7 +36,7 @@
+ #define FALSE 0
+ #endif
+
+-#ifdef MYSQLI_USE_MYSQLND
++#if defined(MYSQLI_USE_MYSQLND)
+ #include "ext/mysqlnd/mysqlnd.h"
+ #include "mysqli_mysqlnd.h"
+ #else
diff --git a/lang/php81/files/patch-sapi_apache2handler_config.m4 b/lang/php81/files/patch-sapi_apache2handler_config.m4
new file mode 100644
index 000000000000..5b0cfb9d4591
--- /dev/null
+++ b/lang/php81/files/patch-sapi_apache2handler_config.m4
@@ -0,0 +1,11 @@
+--- sapi/apache2handler/config.m4.orig 2018-08-14 11:39:14 UTC
++++ sapi/apache2handler/config.m4
+@@ -65,7 +65,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 php7"
diff --git a/lang/php81/files/patch-sapi_fpm_config.m4 b/lang/php81/files/patch-sapi_fpm_config.m4
new file mode 100644
index 000000000000..e88c204384ae
--- /dev/null
+++ b/lang/php81/files/patch-sapi_fpm_config.m4
@@ -0,0 +1,11 @@
+--- sapi/fpm/config.m4.orig 2018-08-14 11:39:14 UTC
++++ sapi/fpm/config.m4
+@@ -319,7 +319,7 @@ AC_DEFUN([AC_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/php81/files/patch-sapi_fpm_www.conf.in b/lang/php81/files/patch-sapi_fpm_www.conf.in
new file mode 100644
index 000000000000..c7e7fe399854
--- /dev/null
+++ b/lang/php81/files/patch-sapi_fpm_www.conf.in
@@ -0,0 +1,17 @@
+--- sapi/fpm/www.conf.in.orig 2019-01-26 15:54:27 UTC
++++ sapi/fpm/www.conf.in
+@@ -27,10 +27,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/php81/files/php-fpm.in b/lang/php81/files/php-fpm.in
new file mode 100644
index 000000000000..c234856b0e54
--- /dev/null
+++ b/lang/php81/files/php-fpm.in
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# PROVIDE: php-fpm
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+#
+# Add the following line to /etc/rc.conf to enable php-fpm:
+# php_fpm_enable="YES"
+#
+
+. /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"
+configtest_cmd="php_fpm_checkconfig"
+
+load_rc_config "$name"
+
+: ${php_fpm_enable="NO"}
+: ${php_fpm_umask=""}
+
+extra_commands="reload configtest logrotate"
+
+command="%%PREFIX%%/sbin/php-fpm"
+pidfile="/var/run/php-fpm.pid"
+sig_stop="QUIT"
+sig_reload="USR2"
+logrotate_cmd="php_fpm_logrotate"
+
+required_files="%%PREFIX%%/etc/php-fpm.conf"
+
+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} -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/php81/pkg-descr b/lang/php81/pkg-descr
new file mode 100644
index 000000000000..ea14e767e1c9
--- /dev/null
+++ b/lang/php81/pkg-descr
@@ -0,0 +1,8 @@
+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.
+
+WWW: https://www.php.net/
diff --git a/lang/php81/pkg-message.mod b/lang/php81/pkg-message.mod
new file mode 100644
index 000000000000..a0c2c87889a7
--- /dev/null
+++ b/lang/php81/pkg-message.mod
@@ -0,0 +1,19 @@
+******************************************************************************
+
+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>
+
+******************************************************************************
+
+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.
+
+******************************************************************************
diff --git a/lang/php81/pkg-plist b/lang/php81/pkg-plist
new file mode 100644
index 000000000000..7d4687e211bf
--- /dev/null
+++ b/lang/php81/pkg-plist
@@ -0,0 +1,308 @@
+%%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/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_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_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_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_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_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_istdiostream.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_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_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/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
+include/php/ext/pcre/pcre2lib/config.h
+include/php/ext/pcre/pcre2lib/pcre2.h
+include/php/ext/pcre/pcre2lib/pcre2_internal.h
+include/php/ext/pcre/pcre2lib/pcre2_intmodedep.h
+include/php/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h
+include/php/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h
+include/php/ext/pcre/pcre2lib/pcre2_ucp.h
+include/php/ext/pcre/php_pcre.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_engine.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/flock_compat.h
+include/php/ext/standard/fsock.h
+include/php/ext/standard/head.h
+include/php/ext/standard/hrtime.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/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_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_lcg.h
+include/php/ext/standard/php_mail.h
+include/php/ext/standard/php_math.h
+include/php/ext/standard/php_mt_rand.h
+include/php/ext/standard/php_net.h
+include/php/ext/standard/php_password.h
+include/php/ext/standard/php_rand.h
+include/php/ext/standard/php_random.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/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_main.h
+include/php/main/php_memory_streams.h
+include/php/main/php_network.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_stdint.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
+%%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%%man/man1/php-cgi.1.gz
+man/man1/php-config.1.gz
+%%CLI%%man/man1/php.1.gz
+%%PHPDBG%%man/man1/phpdbg.1.gz
+man/man1/phpize.1.gz
+%%FPM%%man/man8/php-fpm.8.gz
+%%FPM%%share/php/fpm/status.html
diff --git a/lang/php81/pkg-plist.mod b/lang/php81/pkg-plist.mod
new file mode 100644
index 000000000000..8939be6d3d5e
--- /dev/null
+++ b/lang/php81/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/mail/Makefile b/mail/Makefile
index 7885a334218e..38bc685e948c 100644
--- a/mail/Makefile
+++ b/mail/Makefile
@@ -451,6 +451,7 @@
SUBDIR += php73-imap
SUBDIR += php74-imap
SUBDIR += php80-imap
+ SUBDIR += php81-imap
SUBDIR += phplist
SUBDIR += phpmailer
SUBDIR += phpmailer6
diff --git a/mail/php81-imap/Makefile b/mail/php81-imap/Makefile
new file mode 100644
index 000000000000..8fea8d06fd96
--- /dev/null
+++ b/mail/php81-imap/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= mail
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -imap
+
+.include "${MASTERDIR}/Makefile"
diff --git a/mail/php81-imap/files/patch-config.m4 b/mail/php81-imap/files/patch-config.m4
new file mode 100644
index 000000000000..b2a153543fe3
--- /dev/null
+++ b/mail/php81-imap/files/patch-config.m4
@@ -0,0 +1,47 @@
+--- config.m4.orig 2019-08-20 14:09:27 UTC
++++ config.m4
+@@ -105,6 +105,13 @@ PHP_ARG_WITH([imap-ssl],
+ [no],
+ [no])
+
++PHP_ARG_WITH([pcre-dir],
++ [pcre install prefix],
++ [AS_HELP_STRING([[--with-pcre-dir]],
++ [IMAP: pcre install prefix])],
++ [no],
++ [no])
++
+ if test "$PHP_IMAP" != "no"; then
+ PHP_SUBST(IMAP_SHARED_LIBADD)
+ PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
+@@ -120,6 +127,30 @@ if test "$PHP_IMAP" != "no"; then
+ fi
+ done
+
++ dnl This is PECL build, check if bundled PCRE library is used
++ old_CPPFLAGS=$CPPFLAGS
++ CPPFLAGS=$INCLUDES
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=yes
++ ],[
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=pecl
++ PHP_ADD_INCLUDE($PHP_PCRE_DIR/include)
++ ],[
++ PHP_PCRE_REGEX=no
++ ])
++ ])
++
+ dnl Check for c-client version 2004
+ AC_EGREP_HEADER(mail_fetch_overview_sequence, $IMAP_INC_DIR/mail.h, [
+ AC_DEFINE(HAVE_IMAP2004,1,[ ])
diff --git a/math/Makefile b/math/Makefile
index 5d667a84c532..8a58d4ef135d 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -766,7 +766,9 @@
SUBDIR += php74-bcmath
SUBDIR += php74-gmp
SUBDIR += php80-bcmath
+ SUBDIR += php81-bcmath
SUBDIR += php80-gmp
+ SUBDIR += php81-gmp
SUBDIR += physcalc
SUBDIR += picosat
SUBDIR += piranha
diff --git a/math/php81-bcmath/Makefile b/math/php81-bcmath/Makefile
new file mode 100644
index 000000000000..265a69ea191a
--- /dev/null
+++ b/math/php81-bcmath/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= math
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -bcmath
+
+.include "${MASTERDIR}/Makefile"
diff --git a/math/php81-gmp/Makefile b/math/php81-gmp/Makefile
new file mode 100644
index 000000000000..21870f6c3a81
--- /dev/null
+++ b/math/php81-gmp/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= math
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -gmp
+
+.include "${MASTERDIR}/Makefile"
diff --git a/misc/Makefile b/misc/Makefile
index e587403a517a..2064c1eef090 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -359,6 +359,7 @@
SUBDIR += php73-calendar
SUBDIR += php74-calendar
SUBDIR += php80-calendar
+ SUBDIR += php81-calendar
SUBDIR += pinfo
SUBDIR += pipe
SUBDIR += posixtestsuite
diff --git a/misc/php81-calendar/Makefile b/misc/php81-calendar/Makefile
new file mode 100644
index 000000000000..31700e65d54c
--- /dev/null
+++ b/misc/php81-calendar/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= misc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -calendar
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile
index 114435d95dcd..7955a8cc7c01 100644
--- a/net-mgmt/Makefile
+++ b/net-mgmt/Makefile
@@ -282,6 +282,7 @@
SUBDIR += php73-snmp
SUBDIR += php74-snmp
SUBDIR += php80-snmp
+ SUBDIR += php81-snmp
SUBDIR += phpfpm_exporter
SUBDIR += phpipam
SUBDIR += phpweathermap
diff --git a/net-mgmt/php81-snmp/Makefile b/net-mgmt/php81-snmp/Makefile
new file mode 100644
index 000000000000..3dd17c788bfd
--- /dev/null
+++ b/net-mgmt/php81-snmp/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net-mgmt
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -snmp
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net/Makefile b/net/Makefile
index 9205e02773ff..d756d4642641 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -984,8 +984,11 @@
SUBDIR += php74-sockets
SUBDIR += php74-xmlrpc
SUBDIR += php80-ldap
+ SUBDIR += php81-ldap
SUBDIR += php80-soap
+ SUBDIR += php81-soap
SUBDIR += php80-sockets
+ SUBDIR += php81-sockets
SUBDIR += phpldapadmin
SUBDIR += pichi
SUBDIR += pimcommon
diff --git a/net/php81-ldap/Makefile b/net/php81-ldap/Makefile
new file mode 100644
index 000000000000..c7bd128e0ce4
--- /dev/null
+++ b/net/php81-ldap/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -ldap
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net/php81-soap/Makefile b/net/php81-soap/Makefile
new file mode 100644
index 000000000000..fc40ac2c512d
--- /dev/null
+++ b/net/php81-soap/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -soap
+
+.include "${MASTERDIR}/Makefile"
diff --git a/net/php81-sockets/Makefile b/net/php81-sockets/Makefile
new file mode 100644
index 000000000000..eae53ed8d25d
--- /dev/null
+++ b/net/php81-sockets/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= net
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -sockets
+
+.include "${MASTERDIR}/Makefile"
diff --git a/security/Makefile b/security/Makefile
index 1f712d431f25..82eb040a919c 100644
--- a/security/Makefile
+++ b/security/Makefile
@@ -807,8 +807,11 @@
SUBDIR += php74-openssl
SUBDIR += php74-sodium
SUBDIR += php80-filter
+ SUBDIR += php81-filter
SUBDIR += php80-openssl
+ SUBDIR += php81-openssl
SUBDIR += php80-sodium
+ SUBDIR += php81-sodium
SUBDIR += phpsecinfo
SUBDIR += picosha2
SUBDIR += pidgin-encryption
diff --git a/security/php81-filter/Makefile b/security/php81-filter/Makefile
new file mode 100644
index 000000000000..abb2dbff2b36
--- /dev/null
+++ b/security/php81-filter/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= security
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -filter
+
+.include "${MASTERDIR}/Makefile"
diff --git a/security/php81-openssl/Makefile b/security/php81-openssl/Makefile
new file mode 100644
index 000000000000..55f5c0e6a4e0
--- /dev/null
+++ b/security/php81-openssl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= security
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -openssl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/security/php81-sodium/Makefile b/security/php81-sodium/Makefile
new file mode 100644
index 000000000000..d45e7115b38d
--- /dev/null
+++ b/security/php81-sodium/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= security
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -sodium
+
+.include "${MASTERDIR}/Makefile"
diff --git a/sysutils/Makefile b/sysutils/Makefile
index dcc9ee05e523..eb881d42ee41 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -956,7 +956,9 @@
SUBDIR += php74-fileinfo
SUBDIR += php74-posix
SUBDIR += php80-fileinfo
+ SUBDIR += php81-fileinfo
SUBDIR += php80-posix
+ SUBDIR += php81-posix
SUBDIR += phybs
SUBDIR += pick
SUBDIR += pidof
diff --git a/sysutils/php81-fileinfo/Makefile b/sysutils/php81-fileinfo/Makefile
new file mode 100644
index 000000000000..38bd347b0ffe
--- /dev/null
+++ b/sysutils/php81-fileinfo/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= sysutils
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -fileinfo
+
+.include "${MASTERDIR}/Makefile"
diff --git a/sysutils/php81-fileinfo/files/patch-config.m4 b/sysutils/php81-fileinfo/files/patch-config.m4
new file mode 100644
index 000000000000..1348023ccf64
--- /dev/null
+++ b/sysutils/php81-fileinfo/files/patch-config.m4
@@ -0,0 +1,21 @@
+--- config.m4.orig 2010-09-07 15:45:30.000000000 +0200
++++ config.m4 2010-09-07 15:46:50.000000000 +0200
+@@ -4,6 +4,9 @@
+ PHP_ARG_ENABLE(fileinfo, for fileinfo support,
+ [ --disable-fileinfo Disable fileinfo support], yes)
+
++PHP_ARG_WITH(pcre-dir, pcre install prefix,
++[ --with-pcre-dir FILEINFO: pcre install prefix], no, no)
++
+ if test "$PHP_FILEINFO" != "no"; then
+
+ libmagic_sources=" \
+@@ -13,6 +16,8 @@
+ libmagic/is_tar.c libmagic/magic.c libmagic/print.c \
+ libmagic/readcdf.c libmagic/readelf.c libmagic/softmagic.c"
+
++ PHP_ADD_INCLUDE($PHP_PCRE_DIR/include)
++
+ PHP_NEW_EXTENSION(fileinfo, fileinfo.c $libmagic_sources, $ext_shared,,-I@ext_srcdir@/libmagic)
+ PHP_ADD_BUILD_DIR($ext_builddir/libmagic)
+
diff --git a/sysutils/php81-posix/Makefile b/sysutils/php81-posix/Makefile
new file mode 100644
index 000000000000..306ab8641571
--- /dev/null
+++ b/sysutils/php81-posix/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= sysutils
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -posix
+
+.include "${MASTERDIR}/Makefile"
diff --git a/sysutils/php81-posix/files/patch-posix.c b/sysutils/php81-posix/files/patch-posix.c
new file mode 100644
index 000000000000..d2365b249569
--- /dev/null
+++ b/sysutils/php81-posix/files/patch-posix.c
@@ -0,0 +1,38 @@
+--- posix.c.orig Fri Feb 23 00:40:39 2007
++++ posix.c Sun May 13 17:52:27 2007
+@@ -838,7 +838,7 @@
+ #if defined(ZTS) && defined(HAVE_GETGRNAM_R) && defined(_SC_GETGR_R_SIZE_MAX)
+ buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+ if (buflen < 1) {
+- RETURN_FALSE;
++ buflen = 1024;
+ }
+ buf = emalloc(buflen);
+ g = &gbuf;
+@@ -888,7 +888,7 @@
+
+ grbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+ if (grbuflen < 1) {
+- RETURN_FALSE;
++ grbuflen = 1024;
+ }
+
+ grbuf = emalloc(grbuflen);
+@@ -955,7 +955,7 @@
+ #if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWNAM_R)
+ buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (buflen < 1) {
+- RETURN_FALSE;
++ buflen = 1024;
+ }
+ buf = emalloc(buflen);
+ pw = &pwbuf;
+@@ -1004,7 +1004,7 @@
+ #if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWUID_R)
+ pwbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (pwbuflen < 1) {
+- RETURN_FALSE;
++ pwbuflen = 1024;
+ }
+ pwbuf = emalloc(pwbuflen);
+
diff --git a/textproc/Makefile b/textproc/Makefile
index 6dd5f7a6a778..2ca41e9d88e1 100644
--- a/textproc/Makefile
+++ b/textproc/Makefile
@@ -1231,14 +1231,23 @@
SUBDIR += php74-xmlwriter
SUBDIR += php74-xsl
SUBDIR += php80-ctype
+ SUBDIR += php81-ctype
SUBDIR += php80-dom
+ SUBDIR += php81-dom
SUBDIR += php80-enchant
+ SUBDIR += php81-enchant
SUBDIR += php80-pspell
+ SUBDIR += php81-pspell
SUBDIR += php80-simplexml
+ SUBDIR += php81-simplexml
SUBDIR += php80-xml
+ SUBDIR += php81-xml
SUBDIR += php80-xmlreader
+ SUBDIR += php81-xmlreader
SUBDIR += php80-xmlwriter
+ SUBDIR += php81-xmlwriter
SUBDIR += php80-xsl
+ SUBDIR += php81-xsl
SUBDIR += pict
SUBDIR += po4a
SUBDIR += pod2mdoc
diff --git a/textproc/php81-ctype/Makefile b/textproc/php81-ctype/Makefile
new file mode 100644
index 000000000000..2cb5233bfd20
--- /dev/null
+++ b/textproc/php81-ctype/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -ctype
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-dom/Makefile b/textproc/php81-dom/Makefile
new file mode 100644
index 000000000000..d6610e9682c1
--- /dev/null
+++ b/textproc/php81-dom/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -dom
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-enchant/Makefile b/textproc/php81-enchant/Makefile
new file mode 100644
index 000000000000..65b3b2b2fb17
--- /dev/null
+++ b/textproc/php81-enchant/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -enchant
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-enchant/files/patch-enchant.c b/textproc/php81-enchant/files/patch-enchant.c
new file mode 100644
index 000000000000..fb4da55c99de
--- /dev/null
+++ b/textproc/php81-enchant/files/patch-enchant.c
@@ -0,0 +1,11 @@
+--- enchant.c.orig 2020-10-18 21:29:39 UTC
++++ enchant.c
+@@ -24,7 +24,7 @@
+ #include "ext/standard/info.h"
+ #include "Zend/zend_interfaces.h"
+ #include "Zend/zend_exceptions.h"
+-#include "../spl/spl_exceptions.h"
++#include "ext/spl/spl_exceptions.h"
+ #include <enchant.h>
+ #include "php_enchant.h"
+ #include "enchant_arginfo.h"
diff --git a/textproc/php81-pspell/Makefile b/textproc/php81-pspell/Makefile
new file mode 100644
index 000000000000..1c02bb8c6734
--- /dev/null
+++ b/textproc/php81-pspell/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -pspell
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-simplexml/Makefile b/textproc/php81-simplexml/Makefile
new file mode 100644
index 000000000000..4771fd3f274a
--- /dev/null
+++ b/textproc/php81-simplexml/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -simplexml
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-simplexml/files/patch-config.m4 b/textproc/php81-simplexml/files/patch-config.m4
new file mode 100644
index 000000000000..88638f7dccf4
--- /dev/null
+++ b/textproc/php81-simplexml/files/patch-config.m4
@@ -0,0 +1,42 @@
+--- config.m4.orig 2019-08-06 06:54:07 UTC
++++ config.m4
+@@ -4,8 +4,39 @@ PHP_ARG_ENABLE([simplexml],
+ [Disable SimpleXML support])],
+ [yes])
+
++PHP_ARG_ENABLE([pcre-dir],
++ [pcre install prefix],
++ [AS_HELP_STRING([--with-pcre-dir],
++ [SimpleXML: pcre install dir])],
++ [no],
++ [no])
++
+ if test "$PHP_SIMPLEXML" != "no"; then
+
++ dnl This is PECL build, check if bundled PCRE library is used
++ old_CPPFLAGS=$CPPFLAGS
++ CPPFLAGS=$INCLUDES
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=yes
++ ],[
++ AC_EGREP_CPP(yes,[
++#include <main/php_config.h>
++#if defined(HAVE_PCRE) && !defined(COMPILE_DL_PCRE)
++yes
++#endif
++ ],[
++ PHP_PCRE_REGEX=pecl
++ PHP_ADD_INCLUDE($PHP_PCRE_DIR/include)
++ ],[
++ PHP_PCRE_REGEX=no
++ ])
++ ])
++
+ if test "$PHP_LIBXML" = "no"; then
+ AC_MSG_ERROR([SimpleXML extension requires LIBXML extension, add --with-libxml])
+ fi
diff --git a/textproc/php81-xml/Makefile b/textproc/php81-xml/Makefile
new file mode 100644
index 000000000000..6baacc4611cc
--- /dev/null
+++ b/textproc/php81-xml/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -xml
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-xml/files/patch-compat.c b/textproc/php81-xml/files/patch-compat.c
new file mode 100644
index 000000000000..02125961b20c
--- /dev/null
+++ b/textproc/php81-xml/files/patch-compat.c
@@ -0,0 +1,13 @@
+--- compat.c.orig Tue Jul 20 10:55:02 2004
++++ compat.c Tue Jul 20 10:55:55 2004
+@@ -16,6 +16,10 @@
+ +----------------------------------------------------------------------+
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include "php.h"
+ #if defined(HAVE_LIBXML) && defined(HAVE_XML) && !defined(HAVE_LIBEXPAT)
+ #include "expat_compat.h"
diff --git a/textproc/php81-xmlreader/Makefile b/textproc/php81-xmlreader/Makefile
new file mode 100644
index 000000000000..2a5922ee6820
--- /dev/null
+++ b/textproc/php81-xmlreader/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -xmlreader
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-xmlwriter/Makefile b/textproc/php81-xmlwriter/Makefile
new file mode 100644
index 000000000000..e0cadc6a76b0
--- /dev/null
+++ b/textproc/php81-xmlwriter/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -xmlwriter
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-xsl/Makefile b/textproc/php81-xsl/Makefile
new file mode 100644
index 000000000000..e15435fa3047
--- /dev/null
+++ b/textproc/php81-xsl/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= textproc
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -xsl
+
+.include "${MASTERDIR}/Makefile"
diff --git a/textproc/php81-xsl/files/patch-php_xsl.h b/textproc/php81-xsl/files/patch-php_xsl.h
new file mode 100644
index 000000000000..69f1140af49d
--- /dev/null
+++ b/textproc/php81-xsl/files/patch-php_xsl.h
@@ -0,0 +1,11 @@
+--- php_xsl.h.orig 2020-10-16 22:10:29 UTC
++++ php_xsl.h
+@@ -37,7 +37,7 @@ extern zend_module_entry xsl_module_entr
+ #include <libexslt/exsltconfig.h>
+ #endif
+
+-#include "../dom/xml_common.h"
++#include "ext/dom/xml_common.h"
+
+ #include <libxslt/extensions.h>
+ #include <libxml/xpathInternals.h>
diff --git a/www/Makefile b/www/Makefile
index e6c2f787ab27..d3069ec2e575 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -396,6 +396,7 @@
SUBDIR += mod_php73
SUBDIR += mod_php74
SUBDIR += mod_php80
+ SUBDIR += mod_php81
SUBDIR += mod_proctitle
SUBDIR += mod_proxy_xml
SUBDIR += mod_qos
@@ -1383,8 +1384,11 @@
SUBDIR += php74-session
SUBDIR += php74-tidy
SUBDIR += php80-opcache
+ SUBDIR += php81-opcache
SUBDIR += php80-session
+ SUBDIR += php81-session
SUBDIR += php80-tidy
+ SUBDIR += php81-tidy
SUBDIR += phpbb
SUBDIR += phpbb3
SUBDIR += phpgroupware
diff --git a/www/mod_php81/Makefile b/www/mod_php81/Makefile
new file mode 100644
index 000000000000..5cf31b881fe6
--- /dev/null
+++ b/www/mod_php81/Makefile
@@ -0,0 +1,13 @@
+CATEGORIES= www devel
+PKGNAMEPREFIX= mod_
+
+MAINTAINER= bofh@FreeBSD.org
+
+PHP_PORT= lang/php81
+MASTERDIR= ${.CURDIR}/../../${PHP_PORT}
+
+OPTIONS_DEFINE= AP2FILTER
+AP2FILTER_DESC= Use Apache 2.x filter interface (experimental)
+OPTIONS_EXCLUDE=CGI CLI FPM EMBED
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/php81-opcache/Makefile b/www/php81-opcache/Makefile
new file mode 100644
index 000000000000..3799a62af053
--- /dev/null
+++ b/www/php81-opcache/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= www
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -opcache
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/php81-opcache/files/patch-config.m4 b/www/php81-opcache/files/patch-config.m4
new file mode 100644
index 000000000000..7bd2cb9083fd
--- /dev/null
+++ b/www/php81-opcache/files/patch-config.m4
@@ -0,0 +1,20 @@
+--- config.m4.orig 2021-12-15 02:00:45 UTC
++++ config.m4
+@@ -29,7 +29,7 @@ if test "$PHP_OPCACHE" != "no"; then
+
+ if test "$PHP_OPCACHE_JIT" = "yes"; then
+ case $host_cpu in
+- i[[34567]]86*|x86*|aarch64)
++ i[[34567]]86*|x86*|aarch64|amd64)
+ ;;
+ *)
+ AC_MSG_WARN([JIT not supported by host architecture])
+@@ -48,7 +48,7 @@ if test "$PHP_OPCACHE" != "no"; then
+ DASM_FLAGS="-D X64APPLE=1 -D X64=1"
+ DASM_ARCH="x86"
+ ;;
+- x86_64*)
++ *x86_64*|amd64-*-freebsd*)
+ DASM_FLAGS="-D X64=1"
+ DASM_ARCH="x86"
+ ;;
diff --git a/www/php81-session/Makefile b/www/php81-session/Makefile
new file mode 100644
index 000000000000..877773134c79
--- /dev/null
+++ b/www/php81-session/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= www
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -session
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/php81-tidy/Makefile b/www/php81-tidy/Makefile
new file mode 100644
index 000000000000..9b3aed822ddb
--- /dev/null
+++ b/www/php81-tidy/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= www
+
+MASTERDIR= ${.CURDIR}/../../lang/php81
+
+PKGNAMESUFFIX= -tidy
+
+.include "${MASTERDIR}/Makefile"