diff options
author | Muhammad Moinur Rahman <bofh@FreeBSD.org> | 2025-07-02 11:54:37 +0200 |
---|---|---|
committer | Muhammad Moinur Rahman <bofh@FreeBSD.org> | 2025-07-02 18:29:38 +0200 |
commit | c0b9892033cb566ec6a0c6d0fe5ce4b97c4c88de (patch) | |
tree | d492c87afa7175e6c8eee0669fcb4df1aa223c27 | |
parent | security/kanidm: Update version 1.6.1=>1.6.2 (diff) |
*/*php85*: Sunrise
Please DO NOT use this version in production, it is an early test
version.
For upgrade notes please visit:
https://github.com/php/php-src/blob/php-8.5.0alpha1/UPGRADING
Changelog: https://github.com/php/php-src/blob/php-8.5.0alpha1/NEWS
105 files changed, 4816 insertions, 7 deletions
diff --git a/Mk/Uses/php.mk b/Mk/Uses/php.mk index 9d5568e05047..d6b59898cb5b 100644 --- a/Mk/Uses/php.mk +++ b/Mk/Uses/php.mk @@ -110,7 +110,7 @@ DIST_SUBDIR= PECL PHPBASE?= ${LOCALBASE} -_ALL_PHP_VERSIONS= 81 82 83 84 +_ALL_PHP_VERSIONS= 81 82 83 84 85 # Make the already installed PHP the default one. . if exists(${PHPBASE}/etc/php.conf) @@ -179,7 +179,10 @@ PHP_VER= ${FLAVOR:S/^php//} (${FLAVOR:Mphp[0-9][0-9]} && ${FLAVOR} != ${FLAVORS:[1]}) # When adding a version, please keep the comment in # Mk/bsd.default-versions.mk in sync. -. if ${PHP_VER} == 84 +. if ${PHP_VER} == 85 +PHP_EXT_DIR= 20240925 +PHP_EXT_INC= hash json openssl pcre random spl +. elif ${PHP_VER} == 84 PHP_EXT_DIR= 20240924 PHP_EXT_INC= hash json openssl pcre random spl . elif ${PHP_VER} == 83 @@ -387,6 +390,7 @@ _USE_PHP_VER81= ${_USE_PHP_ALL} _USE_PHP_VER82= ${_USE_PHP_ALL} _USE_PHP_VER83= ${_USE_PHP_ALL} _USE_PHP_VER84= ${_USE_PHP_ALL} +_USE_PHP_VER85= ${_USE_PHP_ALL} bcmath_DEPENDS= math/php${PHP_VER}-bcmath bitset_DEPENDS= math/pecl-bitset@${PHP_FLAVOR} diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk index 6a15f83d15de..549ad04fd4c1 100644 --- a/Mk/bsd.default-versions.mk +++ b/Mk/bsd.default-versions.mk @@ -132,7 +132,7 @@ PERL5_DEFAULT:= ${_PERL5_FROM_BIN:R} . endif # Possible values: 13, 14, 15, 16, 17 PGSQL_DEFAULT?= 17 -# Possible values: 8.1, 8.2, 8.3, 8.4 +# Possible values: 8.1, 8.2, 8.3, 8.4, 8.5 PHP_DEFAULT?= 8.3 # Possible values: rust, legacy . if empty(ARCH:Naarch64:Namd64:Narmv7:Ni386:Npowerpc64:Npowerpc64le:Npowerpc:Nriscv64) diff --git a/archivers/Makefile b/archivers/Makefile index 0c7e80be0b2f..d1b937bd3eb8 100644 --- a/archivers/Makefile +++ b/archivers/Makefile @@ -175,6 +175,10 @@ SUBDIR += php84-phar SUBDIR += php84-zip SUBDIR += php84-zlib + SUBDIR += php85-bz2 + SUBDIR += php85-phar + SUBDIR += php85-zip + SUBDIR += php85-zlib SUBDIR += pigz SUBDIR += pixz SUBDIR += plakar diff --git a/archivers/php85-bz2/Makefile b/archivers/php85-bz2/Makefile new file mode 100644 index 000000000000..87562c741e29 --- /dev/null +++ b/archivers/php85-bz2/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= archivers + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -bz2 + +.include "${MASTERDIR}/Makefile" diff --git a/archivers/php85-phar/Makefile b/archivers/php85-phar/Makefile new file mode 100644 index 000000000000..a3fbf377f61c --- /dev/null +++ b/archivers/php85-phar/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= archivers + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -phar + +.include "${MASTERDIR}/Makefile" diff --git a/archivers/php85-phar/files/patch-config.m4 b/archivers/php85-phar/files/patch-config.m4 new file mode 100644 index 000000000000..13ba9cf818b4 --- /dev/null +++ b/archivers/php85-phar/files/patch-config.m4 @@ -0,0 +1,11 @@ +--- config.m4.orig 2025-07-01 21:58:05 UTC ++++ config.m4 +@@ -32,8 +32,4 @@ if test "$PHP_PHAR" != "no"; then + PHP_ADD_EXTENSION_DEP(phar, spl) + PHP_ADD_MAKEFILE_FRAGMENT + +- AC_CONFIG_FILES([ +- $ext_dir/phar.1 +- $ext_dir/phar.phar.1 +- ]) + fi diff --git a/archivers/php85-phar/files/patch-phar__path__check.c b/archivers/php85-phar/files/patch-phar__path__check.c new file mode 100644 index 000000000000..8e599176ec86 --- /dev/null +++ b/archivers/php85-phar/files/patch-phar__path__check.c @@ -0,0 +1,241 @@ +--- phar_path_check.c.orig 2025-07-02 12:00:06 UTC ++++ phar_path_check.c +@@ -0,0 +1,238 @@ ++/* Generated by re2c 3.1 */ ++/* ++ +----------------------------------------------------------------------+ ++ | phar php single-file executable PHP extension | ++ +----------------------------------------------------------------------+ ++ | Copyright (c) The PHP Group | ++ +----------------------------------------------------------------------+ ++ | This source file is subject to version 3.01 of the PHP license, | ++ | that is bundled with this package in the file LICENSE, and is | ++ | available through the world-wide-web at the following url: | ++ | https://www.php.net/license/3_01.txt | ++ | If you did not receive a copy of the PHP license and are unable to | ++ | obtain it through the world-wide-web, please send a note to | ++ | license@php.net so we can mail you a copy immediately. | ++ +----------------------------------------------------------------------+ ++ | Authors: Marcus Boerger <helly@php.net> | ++ +----------------------------------------------------------------------+ ++*/ ++ ++#include "phar_internal.h" ++ ++phar_path_check_result phar_path_check(char **s, size_t *len, const char **error) ++{ ++ const unsigned char *p = (const unsigned char*)*s; ++ const unsigned char *m; ++ ++ if (*len == 1 && *p == '.') { ++ *error = "current directory reference"; ++ return pcr_err_curr_dir; ++ } else if (*len == 2 && p[0] == '.' && p[1] == '.') { ++ *error = "upper directory reference"; ++ return pcr_err_up_dir; ++ } ++ ++#define YYCTYPE unsigned char ++#define YYCURSOR p ++#define YYLIMIT p+*len ++#define YYMARKER m ++#define YYFILL(n) do {} while (0) ++ ++loop: ++ ++{ ++ YYCTYPE yych; ++ unsigned int yyaccept = 0; ++ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); ++ yych = *YYCURSOR; ++ if (yych <= '[') { ++ if (yych <= ')') { ++ if (yych <= '\f') { ++ if (yych >= 0x01) goto yy1; ++ } else { ++ if (yych <= '\r') goto yy3; ++ if (yych <= 0x19) goto yy1; ++ goto yy4; ++ } ++ } else { ++ if (yych <= '/') { ++ if (yych <= '*') goto yy6; ++ if (yych <= '.') goto yy4; ++ goto yy7; ++ } else { ++ if (yych == '?') goto yy8; ++ goto yy4; ++ } ++ } ++ } else { ++ if (yych <= 0xEC) { ++ if (yych <= 0xC1) { ++ if (yych <= '\\') goto yy9; ++ if (yych <= 0x7F) goto yy4; ++ goto yy1; ++ } else { ++ if (yych <= 0xDF) goto yy10; ++ if (yych <= 0xE0) goto yy11; ++ goto yy12; ++ } ++ } else { ++ if (yych <= 0xF0) { ++ if (yych <= 0xED) goto yy13; ++ if (yych <= 0xEF) goto yy12; ++ goto yy14; ++ } else { ++ if (yych <= 0xF3) goto yy15; ++ if (yych <= 0xF4) goto yy16; ++ goto yy1; ++ } ++ } ++ } ++ ++YYCURSOR; ++ { ++ if (**s == '/') { ++ (*s)++; ++ (*len)--; ++ } ++ if ((p - (const unsigned char*)*s) - 1 != *len) ++ { ++ *error ="illegal character"; ++ return pcr_err_illegal_char; ++ } ++ *error = NULL; ++ return pcr_is_ok; ++ } ++yy1: ++ ++YYCURSOR; ++yy2: ++ { ++ *error ="illegal character"; ++ return pcr_err_illegal_char; ++ } ++yy3: ++ yych = *++YYCURSOR; ++ if (yych == '\n') goto yy1; ++ goto yy2; ++yy4: ++ ++YYCURSOR; ++yy5: ++ { ++ goto loop; ++ } ++yy6: ++ ++YYCURSOR; ++ { ++ *error = "star"; ++ return pcr_err_star; ++ } ++yy7: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= '-') goto yy5; ++ if (yych <= '.') goto yy17; ++ if (yych <= '/') goto yy19; ++ goto yy5; ++yy8: ++ ++YYCURSOR; ++ { ++ if (**s == '/') { ++ (*s)++; ++ } ++ *len = (p - (const unsigned char*)*s) -1; ++ *error = NULL; ++ return pcr_use_query; ++ } ++yy9: ++ ++YYCURSOR; ++ { ++ *error = "back-slash"; ++ return pcr_err_back_slash; ++ } ++yy10: ++ yych = *++YYCURSOR; ++ if (yych <= 0x7F) goto yy2; ++ if (yych <= 0xBF) goto yy4; ++ goto yy2; ++yy11: ++ yyaccept = 1; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x9F) goto yy2; ++ if (yych <= 0xBF) goto yy20; ++ goto yy2; ++yy12: ++ yyaccept = 1; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x7F) goto yy2; ++ if (yych <= 0xBF) goto yy20; ++ goto yy2; ++yy13: ++ yyaccept = 1; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x7F) goto yy2; ++ if (yych <= 0x9F) goto yy20; ++ goto yy2; ++yy14: ++ yyaccept = 1; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x8F) goto yy2; ++ if (yych <= 0xBF) goto yy21; ++ goto yy2; ++yy15: ++ yyaccept = 1; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x7F) goto yy2; ++ if (yych <= 0xBF) goto yy21; ++ goto yy2; ++yy16: ++ yyaccept = 1; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x7F) goto yy2; ++ if (yych <= 0x8F) goto yy21; ++ goto yy2; ++yy17: ++ yych = *++YYCURSOR; ++ if (yych <= 0x00) goto yy22; ++ if (yych <= '-') goto yy18; ++ if (yych <= '.') goto yy23; ++ if (yych <= '/') goto yy22; ++yy18: ++ YYCURSOR = YYMARKER; ++ if (yyaccept == 0) { ++ goto yy5; ++ } else { ++ goto yy2; ++ } ++yy19: ++ ++YYCURSOR; ++ { ++ *error = "double slash"; ++ return pcr_err_double_slash; ++ } ++yy20: ++ yych = *++YYCURSOR; ++ if (yych <= 0x7F) goto yy18; ++ if (yych <= 0xBF) goto yy4; ++ goto yy18; ++yy21: ++ yych = *++YYCURSOR; ++ if (yych <= 0x7F) goto yy18; ++ if (yych <= 0xBF) goto yy20; ++ goto yy18; ++yy22: ++ ++YYCURSOR; ++ { ++ *error = "current directory reference"; ++ return pcr_err_curr_dir; ++ } ++yy23: ++ yych = *++YYCURSOR; ++ if (yych <= 0x00) goto yy24; ++ if (yych != '/') goto yy18; ++yy24: ++ ++YYCURSOR; ++ { ++ *error = "upper directory reference"; ++ return pcr_err_up_dir; ++ } ++} ++ ++} diff --git a/archivers/php85-zip/Makefile b/archivers/php85-zip/Makefile new file mode 100644 index 000000000000..d8a586997669 --- /dev/null +++ b/archivers/php85-zip/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= archivers + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -zip + +.include "${MASTERDIR}/Makefile" diff --git a/archivers/php85-zlib/Makefile b/archivers/php85-zlib/Makefile new file mode 100644 index 000000000000..20f98d859d51 --- /dev/null +++ b/archivers/php85-zlib/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= archivers + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -zlib + +.include "${MASTERDIR}/Makefile" diff --git a/archivers/php85-zlib/files/patch-zlib.c b/archivers/php85-zlib/files/patch-zlib.c new file mode 100644 index 000000000000..fb0e9e44311a --- /dev/null +++ b/archivers/php85-zlib/files/patch-zlib.c @@ -0,0 +1,10 @@ +--- zlib.c.orig 2023-06-06 15:54:29 UTC ++++ zlib.c +@@ -1380,6 +1380,7 @@ static PHP_MSHUTDOWN_FUNCTION(zlib) + /* {{{ PHP_RINIT_FUNCTION */ + static PHP_RINIT_FUNCTION(zlib) + { ++ ZLIBG(output_compression) = 0; + ZLIBG(compression_coding) = 0; + if (!ZLIBG(handler_registered)) { + ZLIBG(output_compression) = ZLIBG(output_compression_default); diff --git a/converters/Makefile b/converters/Makefile index 3f23e1cfea15..7a192a7b1bd2 100644 --- a/converters/Makefile +++ b/converters/Makefile @@ -147,6 +147,8 @@ SUBDIR += php83-mbstring SUBDIR += php84-iconv SUBDIR += php84-mbstring + SUBDIR += php85-iconv + SUBDIR += php85-mbstring SUBDIR += psiconv SUBDIR += py-bencode.py SUBDIR += py-bencoder diff --git a/converters/php85-iconv/Makefile b/converters/php85-iconv/Makefile new file mode 100644 index 000000000000..a2243f5af6ce --- /dev/null +++ b/converters/php85-iconv/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= converters + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -iconv + +.include "${MASTERDIR}/Makefile" diff --git a/converters/php85-mbstring/Makefile b/converters/php85-mbstring/Makefile new file mode 100644 index 000000000000..7389ede69b5d --- /dev/null +++ b/converters/php85-mbstring/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= converters + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -mbstring + +.include "${MASTERDIR}/Makefile" diff --git a/databases/Makefile b/databases/Makefile index a119d2b4f190..ce29492a0960 100644 --- a/databases/Makefile +++ b/databases/Makefile @@ -633,6 +633,18 @@ SUBDIR += php84-pdo_sqlite SUBDIR += php84-pgsql SUBDIR += php84-sqlite3 + SUBDIR += php85-dba + SUBDIR += php85-mysqli + SUBDIR += php85-odbc + SUBDIR += php85-pdo + SUBDIR += php85-pdo_dblib + SUBDIR += php85-pdo_firebird + SUBDIR += php85-pdo_mysql + SUBDIR += php85-pdo_odbc + SUBDIR += php85-pdo_pgsql + SUBDIR += php85-pdo_sqlite + SUBDIR += php85-pgsql + SUBDIR += php85-sqlite3 SUBDIR += phpliteadmin SUBDIR += phpminiadmin SUBDIR += phpmyadmin diff --git a/databases/php85-dba/Makefile b/databases/php85-dba/Makefile new file mode 100644 index 000000000000..764ffd7c7936 --- /dev/null +++ b/databases/php85-dba/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -dba + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-dba/files/patch-config.m4 b/databases/php85-dba/files/patch-config.m4 new file mode 100644 index 000000000000..7449b1a88029 --- /dev/null +++ b/databases/php85-dba/files/patch-config.m4 @@ -0,0 +1,25 @@ +--- config.m4.orig 2024-09-10 16:10:06 UTC ++++ config.m4 +@@ -433,6 +433,14 @@ if test "$PHP_DB4" != "no"; then + THIS_PREFIX=$i + THIS_INCLUDE=$i/include/db5.3/db.h + break ++ elif test -f "$i/include/db5/db.h"; then ++ THIS_PREFIX=$i ++ THIS_INCLUDE=$i/include/db5/db.h ++ break ++ elif test -f "$i/include/db18/db.h"; then ++ THIS_PREFIX=$i ++ THIS_INCLUDE=$i/include/db18/db.h ++ break + elif test -f "$i/include/db5.1/db.h"; then + THIS_PREFIX=$i + THIS_INCLUDE=$i/include/db5.1/db.h +@@ -480,6 +488,7 @@ if test "$PHP_DB4" != "no"; then + db-5.3 + db-5.1 + db-5.0 ++ db-5 + db-4.8 + db-4.7 + db-4.6 diff --git a/databases/php85-mysqli/Makefile b/databases/php85-mysqli/Makefile new file mode 100644 index 000000000000..77bd1f7f8a5d --- /dev/null +++ b/databases/php85-mysqli/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -mysqli + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-odbc/Makefile b/databases/php85-odbc/Makefile new file mode 100644 index 000000000000..415b461599c9 --- /dev/null +++ b/databases/php85-odbc/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -odbc + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-odbc/files/patch-config.m4 b/databases/php85-odbc/files/patch-config.m4 new file mode 100644 index 000000000000..55e3fb3aea0c --- /dev/null +++ b/databases/php85-odbc/files/patch-config.m4 @@ -0,0 +1,92 @@ +--- config.m4.orig 2024-09-10 16:10:06 UTC ++++ config.m4 +@@ -117,7 +117,7 @@ PHP_ARG_WITH([adabas], + PHP_ARG_WITH([adabas], + [for Adabas support], + [AS_HELP_STRING([[--with-adabas[=DIR]]], +- [Include Adabas D support [/usr/local]])]) ++ [Include Adabas D support [/usr/local]])], [no], [no]) + + AS_VAR_IF([PHP_ADABAS], [no], [], [ + AS_VAR_IF([PHP_ADABAS], [yes], [PHP_ADABAS=/usr/local]) +@@ -143,7 +143,7 @@ PHP_ARG_WITH([sapdb], + PHP_ARG_WITH([sapdb], + [for SAP DB support], + [AS_HELP_STRING([[--with-sapdb[=DIR]]], +- [Include SAP DB support [/usr/local]])]) ++ [Include SAP DB support [/usr/local]])], [no], [no]) + + AS_VAR_IF([PHP_SAPDB], [no], [], [ + AS_VAR_IF([PHP_SAPDB], [yes], [PHP_SAPDB=/usr/local]) +@@ -160,7 +160,7 @@ PHP_ARG_WITH([solid], + PHP_ARG_WITH([solid], + [for Solid support], + [AS_HELP_STRING([[--with-solid[=DIR]]], +- [Include Solid support [/usr/local/solid]])]) ++ [Include Solid support [/usr/local/solid]])], [no], [no]) + + AS_VAR_IF([PHP_SOLID], [no], [], [ + AS_VAR_IF([PHP_SOLID], [yes], [PHP_SOLID=/usr/local/solid]) +@@ -184,7 +184,7 @@ PHP_ARG_WITH([ibm-db2], + PHP_ARG_WITH([ibm-db2], + [for IBM DB2 support], + [AS_HELP_STRING([[--with-ibm-db2[=DIR]]], +- [Include IBM DB2 support [/home/db2inst1/sqllib]])]) ++ [Include IBM DB2 support [/home/db2inst1/sqllib]])], [no], [no]) + + AS_VAR_IF([PHP_IBM_DB2], [no], [], [ + AS_VAR_IF([PHP_IBM_DB2], [yes], [ +@@ -222,7 +222,7 @@ PHP_ARG_WITH([empress], + [for Empress support], + [AS_HELP_STRING([[--with-empress[=DIR]]], + [Include Empress support $EMPRESSPATH (Empress Version >= 8.60 +- required)])]) ++ required)])], [no], [no]) + + AS_VAR_IF([PHP_EMPRESS], [no], [], [ + AS_VAR_IF([PHP_EMPRESS], [yes], [ +@@ -246,7 +246,7 @@ PHP_ARG_WITH([empress-bcs], + [for Empress local access support], + [AS_HELP_STRING([[--with-empress-bcs[=DIR]]], + [Include Empress Local Access support $EMPRESSPATH (Empress Version >= +- 8.60 required)])]) ++ 8.60 required)])], [no], [no]) + + AS_VAR_IF([PHP_EMPRESS_BCS], [no], [], [ + AS_VAR_IF([PHP_EMPRESS_BCS], [yes], [ +@@ -290,7 +290,7 @@ PHP_ARG_WITH([custom-odbc], + your include dirs. For example, you should define following for Sybase SQL + Anywhere 5.5.00 on QNX, prior to running this configure script: + CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix +- CUSTOM_ODBC_LIBS="-ldblib -lodbc"])]) ++ CUSTOM_ODBC_LIBS="-ldblib -lodbc"])], [no], [no]) + + AS_VAR_IF([PHP_CUSTOM_ODBC], [no], [], [ + AS_VAR_IF([PHP_CUSTOM_ODBC], [yes], [PHP_CUSTOM_ODBC=/usr/local]) +@@ -309,7 +309,7 @@ PHP_ARG_WITH([iodbc], + PHP_ARG_WITH([iodbc], + [whether to build with iODBC support], + [AS_HELP_STRING([--with-iodbc], +- [Include iODBC support])]) ++ [Include iODBC support])], [no], [no]) + + AS_VAR_IF([PHP_IODBC], [no], [], [ + PKG_CHECK_MODULES([ODBC], [libiodbc]) +@@ -324,7 +324,7 @@ PHP_ARG_WITH([esoob], + PHP_ARG_WITH([esoob], + [for Easysoft ODBC-ODBC Bridge support], + [AS_HELP_STRING([[--with-esoob[=DIR]]], +- [Include Easysoft OOB support [/usr/local/easysoft/oob/client]])]) ++ [Include Easysoft OOB support [/usr/local/easysoft/oob/client]])], [no], [no]) + + AS_VAR_IF([PHP_ESOOB], [no], [], [ + AS_VAR_IF([PHP_ESOOB], [yes], [PHP_ESOOB=/usr/local/easysoft/oob/client]) +@@ -371,7 +371,7 @@ PHP_ARG_WITH([dbmaker], + PHP_ARG_WITH([dbmaker], + [for DBMaker support], + [AS_HELP_STRING([[--with-dbmaker[=DIR]]], +- [Include DBMaker support])]) ++ [Include DBMaker support])], [no], [no]) + + AS_VAR_IF([PHP_DBMAKER], [no], [], [ + AS_VAR_IF([PHP_DBMAKER], [yes], [ diff --git a/databases/php85-pdo/Makefile b/databases/php85-pdo/Makefile new file mode 100644 index 000000000000..82a9d79b6e9d --- /dev/null +++ b/databases/php85-pdo/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo/files/patch-pdo__sql__parser.c b/databases/php85-pdo/files/patch-pdo__sql__parser.c new file mode 100644 index 000000000000..191eea16a3bd --- /dev/null +++ b/databases/php85-pdo/files/patch-pdo__sql__parser.c @@ -0,0 +1,729 @@ +--- pdo_sql_parser.c.orig 2025-07-02 12:59:51 UTC ++++ pdo_sql_parser.c +@@ -0,0 +1,726 @@ ++/* Generated by re2c 3.1 */ ++/* ++ +----------------------------------------------------------------------+ ++ | Copyright (c) The PHP Group | ++ +----------------------------------------------------------------------+ ++ | This source file is subject to version 3.01 of the PHP license, | ++ | that is bundled with this package in the file LICENSE, and is | ++ | available through the world-wide-web at the following url: | ++ | https://www.php.net/license/3_01.txt | ++ | If you did not receive a copy of the PHP license and are unable to | ++ | obtain it through the world-wide-web, please send a note to | ++ | license@php.net so we can mail you a copy immediately. | ++ +----------------------------------------------------------------------+ ++ | Author: George Schlossnagle <george@omniti.com> | ++ +----------------------------------------------------------------------+ ++*/ ++ ++#include "php.h" ++#include "php_pdo_driver.h" ++#include "pdo_sql_parser.h" ++ ++static int default_scanner(pdo_scanner_t *s) ++{ ++ const char *cursor = s->cur; ++ ++ s->tok = cursor; ++ ++ ++ ++{ ++ YYCTYPE yych; ++ unsigned int yyaccept = 0; ++ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy4; ++ case '\'': goto yy6; ++ case '-': goto yy7; ++ case '/': goto yy8; ++ case ':': goto yy9; ++ case '?': goto yy10; ++ default: goto yy2; ++ } ++yy1: ++ YYCURSOR = YYMARKER; ++ switch (yyaccept) { ++ case 0: goto yy5; ++ case 1: goto yy15; ++ default: goto yy19; ++ } ++yy2: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: ++ case '"': ++ case '\'': ++ case '-': ++ case '/': ++ case ':': ++ case '?': goto yy3; ++ default: goto yy2; ++ } ++yy3: ++ { RET(PDO_PARSER_TEXT); } ++yy4: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych >= 0x01) goto yy13; ++yy5: ++ { SKIP_ONE(PDO_PARSER_TEXT); } ++yy6: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy17; ++yy7: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '-': goto yy20; ++ default: goto yy5; ++ } ++yy8: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '*': goto yy22; ++ default: goto yy5; ++ } ++yy9: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy23; ++ case ':': goto yy25; ++ default: goto yy5; ++ } ++yy10: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '?': goto yy27; ++ default: goto yy11; ++ } ++yy11: ++ { RET(PDO_PARSER_BIND_POS); } ++yy12: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy13: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy14; ++ default: goto yy12; ++ } ++yy14: ++ yyaccept = 1; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '"': goto yy12; ++ default: goto yy15; ++ } ++yy15: ++ { RET(PDO_PARSER_TEXT); } ++yy16: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy17: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '\'': goto yy18; ++ default: goto yy16; ++ } ++yy18: ++ yyaccept = 2; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\'': goto yy16; ++ default: goto yy19; ++ } ++yy19: ++ { RET(PDO_PARSER_TEXT); } ++yy20: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\n': goto yy21; ++ default: goto yy20; ++ } ++yy21: ++ { RET(PDO_PARSER_TEXT); } ++yy22: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy28; ++ default: goto yy22; ++ } ++yy23: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy23; ++ default: goto yy24; ++ } ++yy24: ++ { RET(PDO_PARSER_BIND); } ++yy25: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case ':': goto yy25; ++ default: goto yy26; ++ } ++yy26: ++ { RET(PDO_PARSER_TEXT); } ++yy27: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '?': goto yy27; ++ default: goto yy26; ++ } ++yy28: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy28; ++ case '/': goto yy29; ++ default: goto yy22; ++ } ++yy29: ++ ++YYCURSOR; ++ goto yy21; ++} ++ ++} ++ ++struct placeholder { ++ const char *pos; ++ size_t len; ++ zend_string *quoted; /* quoted value */ ++ int bindno; ++ struct placeholder *next; ++}; ++ ++struct custom_quote { ++ const char *pos; ++ size_t len; ++}; ++ ++static void free_param_name(zval *el) { ++ zend_string_release(Z_PTR_P(el)); ++} ++ ++PDO_API int pdo_parse_params(pdo_stmt_t *stmt, zend_string *inquery, zend_string **outquery) ++{ ++ pdo_scanner_t s; ++ char *newbuffer; ++ ptrdiff_t t; ++ uint32_t bindno = 0; ++ int ret = 0, escapes = 0; ++ size_t newbuffer_len; ++ HashTable *params; ++ struct pdo_bound_param_data *param; ++ int query_type = PDO_PLACEHOLDER_NONE; ++ struct placeholder *placeholders = NULL, *placetail = NULL, *plc = NULL; ++ int (*scan)(pdo_scanner_t *s); ++ struct custom_quote custom_quote = {NULL, 0}; ++ ++ scan = stmt->dbh->methods->scanner ? stmt->dbh->methods->scanner : default_scanner; ++ ++ s.cur = ZSTR_VAL(inquery); ++ s.end = s.cur + ZSTR_LEN(inquery) + 1; ++ ++ /* phase 1: look for args */ ++ while((t = scan(&s)) != PDO_PARSER_EOI) { ++ if (custom_quote.pos) { ++ /* Inside a custom quote */ ++ if (t == PDO_PARSER_CUSTOM_QUOTE && custom_quote.len == s.cur - s.tok && !strncmp(s.tok, custom_quote.pos, custom_quote.len)) { ++ /* Matching closing quote found, end custom quoting */ ++ custom_quote.pos = NULL; ++ custom_quote.len = 0; ++ } else if (t == PDO_PARSER_ESCAPED_QUESTION) { ++ /* An escaped question mark has been used inside a dollar quoted string, most likely as a workaround ++ * as a single "?" would have been parsed as placeholder, due to the lack of support for dollar quoted ++ * strings. For now, we emit a deprecation notice, but still process it */ ++ php_error_docref(NULL, E_DEPRECATED, "Escaping question marks inside dollar quoted strings is not required anymore and is deprecated"); ++ ++ goto placeholder; ++ } ++ ++ continue; ++ } ++ ++ if (t == PDO_PARSER_CUSTOM_QUOTE) { ++ /* Start of a custom quote, keep a reference to search for the matching closing quote */ ++ custom_quote.pos = s.tok; ++ custom_quote.len = s.cur - s.tok; ++ ++ continue; ++ } ++ ++ if (t == PDO_PARSER_BIND || t == PDO_PARSER_BIND_POS || t == PDO_PARSER_ESCAPED_QUESTION) { ++ if (t == PDO_PARSER_ESCAPED_QUESTION && stmt->supports_placeholders == PDO_PLACEHOLDER_POSITIONAL) { ++ /* escaped question marks unsupported, treat as text */ ++ continue; ++ } ++ ++ if (t == PDO_PARSER_BIND) { ++ ptrdiff_t len = s.cur - s.tok; ++ if ((ZSTR_VAL(inquery) < (s.cur - len)) && isalnum(*(s.cur - len - 1))) { ++ continue; ++ } ++ query_type |= PDO_PLACEHOLDER_NAMED; ++ } else if (t == PDO_PARSER_BIND_POS) { ++ query_type |= PDO_PLACEHOLDER_POSITIONAL; ++ } ++ ++placeholder: ++ plc = emalloc(sizeof(*plc)); ++ memset(plc, 0, sizeof(*plc)); ++ plc->next = NULL; ++ plc->pos = s.tok; ++ plc->len = s.cur - s.tok; ++ ++ if (t == PDO_PARSER_ESCAPED_QUESTION) { ++ plc->bindno = PDO_PARSER_BINDNO_ESCAPED_CHAR; ++ plc->quoted = ZSTR_CHAR('?'); ++ escapes++; ++ } else { ++ plc->bindno = bindno++; ++ } ++ ++ if (placetail) { ++ placetail->next = plc; ++ } else { ++ placeholders = plc; ++ } ++ placetail = plc; ++ } ++ } ++ ++ /* did the query make sense to me? */ ++ if (query_type == (PDO_PLACEHOLDER_NAMED|PDO_PLACEHOLDER_POSITIONAL)) { ++ /* they mixed both types; punt */ ++ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "mixed named and positional parameters"); ++ ret = -1; ++ goto clean_up; ++ } ++ ++ params = stmt->bound_params; ++ if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE && params && bindno != zend_hash_num_elements(params)) { ++ /* extra bit of validation for instances when same params are bound more than once */ ++ if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { ++ int ok = 1; ++ for (plc = placeholders; plc; plc = plc->next) { ++ if ((param = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) { ++ ok = 0; ++ break; ++ } ++ } ++ if (ok) { ++ goto safe; ++ } ++ } ++ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "number of bound variables does not match number of tokens"); ++ ret = -1; ++ goto clean_up; ++ } ++ ++ if (!placeholders) { ++ /* nothing to do; good! */ ++ return 0; ++ } ++ ++ if (stmt->supports_placeholders == query_type && !stmt->named_rewrite_template) { ++ /* query matches native syntax */ ++ if (escapes) { ++ newbuffer_len = ZSTR_LEN(inquery); ++ goto rewrite; ++ } ++ ++ ret = 0; ++ goto clean_up; ++ } ++ ++ if (query_type == PDO_PLACEHOLDER_NAMED && stmt->named_rewrite_template) { ++ /* magic/hack. ++ * We we pretend that the query was positional even if ++ * it was named so that we fall into the ++ * named rewrite case below. Not too pretty, ++ * but it works. */ ++ query_type = PDO_PLACEHOLDER_POSITIONAL; ++ } ++ ++safe: ++ /* what are we going to do ? */ ++ if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { ++ /* query generation */ ++ ++ newbuffer_len = ZSTR_LEN(inquery); ++ ++ /* let's quote all the values */ ++ for (plc = placeholders; plc && params; plc = plc->next) { ++ if (plc->bindno == PDO_PARSER_BINDNO_ESCAPED_CHAR) { ++ /* escaped character */ ++ continue; ++ } ++ ++ if (query_type == PDO_PLACEHOLDER_NONE) { ++ continue; ++ } ++ ++ if (query_type == PDO_PLACEHOLDER_POSITIONAL) { ++ param = zend_hash_index_find_ptr(params, plc->bindno); ++ } else { ++ param = zend_hash_str_find_ptr(params, plc->pos, plc->len); ++ } ++ if (param == NULL) { ++ /* parameter was not defined */ ++ ret = -1; ++ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined"); ++ goto clean_up; ++ } ++ if (stmt->dbh->methods->quoter) { ++ zval *parameter; ++ if (Z_ISREF(param->parameter)) { ++ parameter = Z_REFVAL(param->parameter); ++ } else { ++ parameter = ¶m->parameter; ++ } ++ if (param->param_type == PDO_PARAM_LOB && Z_TYPE_P(parameter) == IS_RESOURCE) { ++ php_stream *stm; ++ ++ php_stream_from_zval_no_verify(stm, parameter); ++ if (stm) { ++ zend_string *buf; ++ ++ buf = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0); ++ if (!buf) { ++ buf = ZSTR_EMPTY_ALLOC(); ++ } ++ ++ plc->quoted = stmt->dbh->methods->quoter(stmt->dbh, buf, param->param_type); ++ ++ if (buf) { ++ zend_string_release_ex(buf, 0); ++ } ++ if (plc->quoted == NULL) { ++ /* bork */ ++ ret = -1; ++ strncpy(stmt->error_code, stmt->dbh->error_code, 6); ++ goto clean_up; ++ } ++ ++ } else { ++ pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource"); ++ ret = -1; ++ goto clean_up; ++ } ++ } else { ++ enum pdo_param_type param_type = param->param_type; ++ zend_string *buf = NULL; ++ ++ /* assume all types are nullable */ ++ if (Z_TYPE_P(parameter) == IS_NULL) { ++ param_type = PDO_PARAM_NULL; ++ } ++ ++ switch (param_type) { ++ case PDO_PARAM_BOOL: ++ plc->quoted = zend_is_true(parameter) ? ZSTR_CHAR('1') : ZSTR_CHAR('0'); ++ break; ++ ++ case PDO_PARAM_INT: ++ plc->quoted = zend_long_to_str(zval_get_long(parameter)); ++ break; ++ ++ case PDO_PARAM_NULL: ++ plc->quoted = ZSTR_KNOWN(ZEND_STR_NULL); ++ break; ++ ++ default: { ++ buf = zval_try_get_string(parameter); ++ /* parameter does not have a string representation, buf == NULL */ ++ if (EG(exception)) { ++ /* bork */ ++ ret = -1; ++ strncpy(stmt->error_code, stmt->dbh->error_code, 6); ++ goto clean_up; ++ } ++ ++ plc->quoted = stmt->dbh->methods->quoter(stmt->dbh, buf, param_type); ++ } ++ } ++ ++ if (buf) { ++ zend_string_release_ex(buf, 0); ++ } ++ } ++ } else { ++ zval *parameter; ++ if (Z_ISREF(param->parameter)) { ++ parameter = Z_REFVAL(param->parameter); ++ } else { ++ parameter = ¶m->parameter; ++ } ++ plc->quoted = zend_string_copy(Z_STR_P(parameter)); ++ } ++ newbuffer_len += ZSTR_LEN(plc->quoted); ++ } ++ ++rewrite: ++ /* allocate output buffer */ ++ *outquery = zend_string_alloc(newbuffer_len, 0); ++ newbuffer = ZSTR_VAL(*outquery); ++ ++ /* and build the query */ ++ const char *ptr = ZSTR_VAL(inquery); ++ plc = placeholders; ++ ++ do { ++ t = plc->pos - ptr; ++ if (t) { ++ memcpy(newbuffer, ptr, t); ++ newbuffer += t; ++ } ++ if (plc->quoted) { ++ memcpy(newbuffer, ZSTR_VAL(plc->quoted), ZSTR_LEN(plc->quoted)); ++ newbuffer += ZSTR_LEN(plc->quoted); ++ } else { ++ memcpy(newbuffer, plc->pos, plc->len); ++ newbuffer += plc->len; ++ } ++ ptr = plc->pos + plc->len; ++ ++ plc = plc->next; ++ } while (plc); ++ ++ t = ZSTR_VAL(inquery) + ZSTR_LEN(inquery) - ptr; ++ if (t) { ++ memcpy(newbuffer, ptr, t); ++ newbuffer += t; ++ } ++ *newbuffer = '\0'; ++ ZSTR_LEN(*outquery) = newbuffer - ZSTR_VAL(*outquery); ++ ++ ret = 1; ++ goto clean_up; ++ ++ } else if (query_type == PDO_PLACEHOLDER_POSITIONAL) { ++ /* rewrite ? to :pdoX */ ++ const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d"; ++ int bind_no = 1; ++ ++ newbuffer_len = ZSTR_LEN(inquery); ++ ++ if (stmt->bound_param_map == NULL) { ++ ALLOC_HASHTABLE(stmt->bound_param_map); ++ zend_hash_init(stmt->bound_param_map, 13, NULL, free_param_name, 0); ++ } ++ ++ for (plc = placeholders; plc; plc = plc->next) { ++ int skip_map = 0; ++ zend_string *p; ++ zend_string *idxbuf; ++ ++ if (plc->bindno == PDO_PARSER_BINDNO_ESCAPED_CHAR) { ++ continue; ++ } ++ ++ zend_string *name = zend_string_init(plc->pos, plc->len, 0); ++ ++ /* check if bound parameter is already available */ ++ if (zend_string_equals_literal(name, "?") || (p = zend_hash_find_ptr(stmt->bound_param_map, name)) == NULL) { ++ idxbuf = zend_strpprintf(0, tmpl, bind_no++); ++ } else { ++ idxbuf = zend_string_copy(p); ++ skip_map = 1; ++ } ++ ++ plc->quoted = idxbuf; ++ newbuffer_len += ZSTR_LEN(plc->quoted); ++ ++ if (!skip_map && stmt->named_rewrite_template) { ++ /* create a mapping */ ++ zend_hash_update_ptr(stmt->bound_param_map, name, zend_string_copy(plc->quoted)); ++ } ++ ++ /* map number to name */ ++ zend_hash_index_update_ptr(stmt->bound_param_map, plc->bindno, zend_string_copy(plc->quoted)); ++ ++ zend_string_release(name); ++ } ++ ++ goto rewrite; ++ ++ } else { ++ /* rewrite :name to ? */ ++ ++ newbuffer_len = ZSTR_LEN(inquery); ++ ++ if (stmt->bound_param_map == NULL) { ++ ALLOC_HASHTABLE(stmt->bound_param_map); ++ zend_hash_init(stmt->bound_param_map, 13, NULL, free_param_name, 0); ++ } ++ ++ for (plc = placeholders; plc; plc = plc->next) { ++ zend_string *name = zend_string_init(plc->pos, plc->len, 0); ++ zend_hash_index_update_ptr(stmt->bound_param_map, plc->bindno, name); ++ plc->quoted = ZSTR_CHAR('?'); ++ newbuffer_len -= plc->len - 1; ++ } ++ ++ goto rewrite; ++ } ++ ++clean_up: ++ ++ while (placeholders) { ++ plc = placeholders; ++ placeholders = plc->next; ++ if (plc->quoted) { ++ zend_string_release_ex(plc->quoted, 0); ++ } ++ efree(plc); ++ } ++ ++ return ret; ++} diff --git a/databases/php85-pdo_dblib/Makefile b/databases/php85-pdo_dblib/Makefile new file mode 100644 index 000000000000..1861a409bc3c --- /dev/null +++ b/databases/php85-pdo_dblib/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo_dblib + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo_firebird/Makefile b/databases/php85-pdo_firebird/Makefile new file mode 100644 index 000000000000..2f22894505f4 --- /dev/null +++ b/databases/php85-pdo_firebird/Makefile @@ -0,0 +1,9 @@ +CATEGORIES= databases + +PORTREVISION= 0 + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo_firebird + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo_mysql/Makefile b/databases/php85-pdo_mysql/Makefile new file mode 100644 index 000000000000..c61de9bbc13d --- /dev/null +++ b/databases/php85-pdo_mysql/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo_mysql + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c b/databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c new file mode 100644 index 000000000000..9a6c3b11bb6e --- /dev/null +++ b/databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c @@ -0,0 +1,398 @@ +--- mysql_sql_parser.c.orig 2025-07-02 13:18:02 UTC ++++ mysql_sql_parser.c +@@ -0,0 +1,395 @@ ++/* Generated by re2c 3.1 */ ++/* ++ +----------------------------------------------------------------------+ ++ | Copyright (c) The PHP Group | ++ +----------------------------------------------------------------------+ ++ | This source file is subject to version 3.01 of the PHP license, | ++ | that is bundled with this package in the file LICENSE, and is | ++ | available through the world-wide-web at the following url: | ++ | https://www.php.net/license/3_01.txt | ++ | If you did not receive a copy of the PHP license and are unable to | ++ | obtain it through the world-wide-web, please send a note to | ++ | license@php.net so we can mail you a copy immediately. | ++ +----------------------------------------------------------------------+ ++ | Author: Matteo Beccati <mbeccati@php.net> | ++ +----------------------------------------------------------------------+ ++*/ ++ ++ ++#include "php.h" ++#include "ext/pdo/php_pdo_driver.h" ++#include "ext/pdo/pdo_sql_parser.h" ++ ++int pdo_mysql_scanner(pdo_scanner_t *s) ++{ ++ const char *cursor = s->cur; ++ ++ s->tok = cursor; ++ ++ ++ ++{ ++ YYCTYPE yych; ++ unsigned int yyaccept = 0; ++ if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy4; ++ case '#': goto yy6; ++ case '\'': goto yy7; ++ case '-': goto yy8; ++ case '/': goto yy9; ++ case ':': goto yy10; ++ case '?': goto yy11; ++ case '`': goto yy13; ++ default: goto yy2; ++ } ++yy1: ++ YYCURSOR = YYMARKER; ++ switch (yyaccept) { ++ case 0: goto yy5; ++ case 1: goto yy17; ++ case 2: goto yy24; ++ default: goto yy36; ++ } ++yy2: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: ++ case '"': ++ case '#': ++ case '\'': ++ case '-': ++ case '/': ++ case ':': ++ case '?': ++ case '`': goto yy3; ++ default: goto yy2; ++ } ++yy3: ++ { RET(PDO_PARSER_TEXT); } ++yy4: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych >= 0x01) goto yy15; ++yy5: ++ { SKIP_ONE(PDO_PARSER_TEXT); } ++yy6: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '\n': goto yy5; ++ default: goto yy19; ++ } ++yy7: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy22; ++yy8: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ switch (yych) { ++ case '-': goto yy26; ++ default: goto yy5; ++ } ++yy9: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '*': goto yy27; ++ default: goto yy5; ++ } ++yy10: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy28; ++ case ':': goto yy30; ++ default: goto yy5; ++ } ++yy11: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '?': goto yy32; ++ default: goto yy12; ++ } ++yy12: ++ { RET(PDO_PARSER_BIND_POS); } ++yy13: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy34; ++yy14: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy15: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy16; ++ case '\\': goto yy18; ++ default: goto yy14; ++ } ++yy16: ++ yyaccept = 1; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '"': goto yy14; ++ default: goto yy17; ++ } ++yy17: ++ { RET(PDO_PARSER_TEXT); } ++yy18: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ if (yych <= 0x00) goto yy1; ++ goto yy14; ++yy19: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\n': goto yy20; ++ default: goto yy19; ++ } ++yy20: ++ { RET(PDO_PARSER_TEXT); } ++yy21: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy22: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '\'': goto yy23; ++ case '\\': goto yy25; ++ default: goto yy21; ++ } ++yy23: ++ yyaccept = 2; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\'': goto yy21; ++ default: goto yy24; ++ } ++yy24: ++ { RET(PDO_PARSER_TEXT); } ++yy25: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ if (yych <= 0x00) goto yy1; ++ goto yy21; ++yy26: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '\t': ++ case '\v': ++ case '\f': ++ case '\r': ++ case ' ': goto yy19; ++ default: goto yy1; ++ } ++yy27: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy37; ++ default: goto yy27; ++ } ++yy28: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy28; ++ default: goto yy29; ++ } ++yy29: ++ { RET(PDO_PARSER_BIND); } ++yy30: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case ':': goto yy30; ++ default: goto yy31; ++ } ++yy31: ++ { RET(PDO_PARSER_TEXT); } ++yy32: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '?': goto yy32; ++ default: goto yy31; ++ } ++yy33: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy34: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '`': goto yy35; ++ default: goto yy33; ++ } ++yy35: ++ yyaccept = 3; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '`': goto yy33; ++ default: goto yy36; ++ } ++yy36: ++ { RET(PDO_PARSER_TEXT); } ++yy37: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy37; ++ case '/': goto yy38; ++ default: goto yy27; ++ } ++yy38: ++ ++YYCURSOR; ++ goto yy20; ++} ++ ++} diff --git a/databases/php85-pdo_odbc/Makefile b/databases/php85-pdo_odbc/Makefile new file mode 100644 index 000000000000..41bf11b6e9b1 --- /dev/null +++ b/databases/php85-pdo_odbc/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo_odbc + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo_pgsql/Makefile b/databases/php85-pdo_pgsql/Makefile new file mode 100644 index 000000000000..5956ab7c84cf --- /dev/null +++ b/databases/php85-pdo_pgsql/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo_pgsql + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c b/databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c new file mode 100644 index 000000000000..e2f535ec545e --- /dev/null +++ b/databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c @@ -0,0 +1,528 @@ +--- pgsql_sql_parser.c.orig 2025-07-02 13:28:41 UTC ++++ pgsql_sql_parser.c +@@ -0,0 +1,525 @@ ++/* Generated by re2c 3.1 */ ++/* ++ +----------------------------------------------------------------------+ ++ | Copyright (c) The PHP Group | ++ +----------------------------------------------------------------------+ ++ | This source file is subject to version 3.01 of the PHP license, | ++ | that is bundled with this package in the file LICENSE, and is | ++ | available through the world-wide-web at the following url: | ++ | https://www.php.net/license/3_01.txt | ++ | If you did not receive a copy of the PHP license and are unable to | ++ | obtain it through the world-wide-web, please send a note to | ++ | license@php.net so we can mail you a copy immediately. | ++ +----------------------------------------------------------------------+ ++ | Author: Matteo Beccati <mbeccati@php.net> | ++ +----------------------------------------------------------------------+ ++*/ ++ ++ ++#include "php.h" ++#include "ext/pdo/php_pdo_driver.h" ++#include "ext/pdo/pdo_sql_parser.h" ++ ++int pdo_pgsql_scanner(pdo_scanner_t *s) ++{ ++ const char *cursor = s->cur; ++ ++ s->tok = cursor; ++ ++ ++ ++{ ++ YYCTYPE yych; ++ unsigned int yyaccept = 0; ++ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy4; ++ case '$': goto yy6; ++ case '\'': goto yy7; ++ case '-': goto yy8; ++ case '/': goto yy9; ++ case ':': goto yy10; ++ case '?': goto yy11; ++ case 'E': ++ case 'e': goto yy13; ++ default: goto yy2; ++ } ++yy1: ++ YYCURSOR = YYMARKER; ++ switch (yyaccept) { ++ case 0: goto yy5; ++ case 1: goto yy17; ++ case 2: goto yy23; ++ default: goto yy35; ++ } ++yy2: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: ++ case '"': ++ case '$': ++ case '\'': ++ case '-': ++ case '/': ++ case ':': ++ case '?': ++ case 'E': ++ case 'e': goto yy3; ++ default: goto yy2; ++ } ++yy3: ++ { RET(PDO_PARSER_TEXT); } ++yy4: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych >= 0x01) goto yy15; ++yy5: ++ { SKIP_ONE(PDO_PARSER_TEXT); } ++yy6: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ switch (yych) { ++ case 0x00: ++ case 0x01: ++ case 0x02: ++ case 0x03: ++ case 0x04: ++ case 0x05: ++ case 0x06: ++ case 0x07: ++ case 0x08: ++ case '\t': ++ case '\n': ++ case '\v': ++ case '\f': ++ case '\r': ++ case 0x0E: ++ case 0x0F: ++ case 0x10: ++ case 0x11: ++ case 0x12: ++ case 0x13: ++ case 0x14: ++ case 0x15: ++ case 0x16: ++ case 0x17: ++ case 0x18: ++ case 0x19: ++ case 0x1A: ++ case 0x1B: ++ case 0x1C: ++ case 0x1D: ++ case 0x1E: ++ case 0x1F: ++ case ' ': ++ case '!': ++ case '"': ++ case '#': ++ case '%': ++ case '&': ++ case '\'': ++ case '(': ++ case ')': ++ case '*': ++ case '+': ++ case ',': ++ case '-': ++ case '.': ++ case '/': ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case ':': ++ case ';': ++ case '<': ++ case '=': ++ case '>': ++ case '?': ++ case '@': ++ case '[': ++ case '\\': ++ case ']': ++ case '^': ++ case '`': ++ case '{': ++ case '|': ++ case '}': ++ case '~': ++ case 0x7F: goto yy5; ++ case '$': goto yy18; ++ default: goto yy19; ++ } ++yy7: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy21; ++yy8: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '-': goto yy24; ++ default: goto yy5; ++ } ++yy9: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '*': goto yy26; ++ default: goto yy5; ++ } ++yy10: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy27; ++ case ':': goto yy29; ++ default: goto yy5; ++ } ++yy11: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '?': goto yy31; ++ default: goto yy12; ++ } ++yy12: ++ { RET(PDO_PARSER_BIND_POS); } ++yy13: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ switch (yych) { ++ case '\'': goto yy32; ++ default: goto yy5; ++ } ++yy14: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy15: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy16; ++ default: goto yy14; ++ } ++yy16: ++ yyaccept = 1; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '"': goto yy14; ++ default: goto yy17; ++ } ++yy17: ++ { RET(PDO_PARSER_TEXT); } ++yy18: ++ ++YYCURSOR; ++ { RET(PDO_PARSER_CUSTOM_QUOTE); } ++yy19: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: ++ case 0x01: ++ case 0x02: ++ case 0x03: ++ case 0x04: ++ case 0x05: ++ case 0x06: ++ case 0x07: ++ case 0x08: ++ case '\t': ++ case '\n': ++ case '\v': ++ case '\f': ++ case '\r': ++ case 0x0E: ++ case 0x0F: ++ case 0x10: ++ case 0x11: ++ case 0x12: ++ case 0x13: ++ case 0x14: ++ case 0x15: ++ case 0x16: ++ case 0x17: ++ case 0x18: ++ case 0x19: ++ case 0x1A: ++ case 0x1B: ++ case 0x1C: ++ case 0x1D: ++ case 0x1E: ++ case 0x1F: ++ case ' ': ++ case '!': ++ case '"': ++ case '#': ++ case '%': ++ case '&': ++ case '\'': ++ case '(': ++ case ')': ++ case '*': ++ case '+': ++ case ',': ++ case '-': ++ case '.': ++ case '/': ++ case ':': ++ case ';': ++ case '<': ++ case '=': ++ case '>': ++ case '?': ++ case '@': ++ case '[': ++ case '\\': ++ case ']': ++ case '^': ++ case '`': ++ case '{': ++ case '|': ++ case '}': ++ case '~': ++ case 0x7F: goto yy1; ++ case '$': goto yy18; ++ default: goto yy19; ++ } ++yy20: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy21: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '\'': goto yy22; ++ default: goto yy20; ++ } ++yy22: ++ yyaccept = 2; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\'': goto yy20; ++ default: goto yy23; ++ } ++yy23: ++ { RET(PDO_PARSER_TEXT); } ++yy24: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\n': goto yy25; ++ default: goto yy24; ++ } ++yy25: ++ { RET(PDO_PARSER_TEXT); } ++yy26: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy33; ++ default: goto yy26; ++ } ++yy27: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy27; ++ default: goto yy28; ++ } ++yy28: ++ { RET(PDO_PARSER_BIND); } ++yy29: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case ':': goto yy29; ++ default: goto yy30; ++ } ++yy30: ++ { RET(PDO_PARSER_TEXT); } ++yy31: ++ ++YYCURSOR; ++ { RET(PDO_PARSER_ESCAPED_QUESTION); } ++yy32: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '\'': goto yy34; ++ case '\\': goto yy36; ++ default: goto yy32; ++ } ++yy33: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy33; ++ case '/': goto yy37; ++ default: goto yy26; ++ } ++yy34: ++ yyaccept = 3; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\'': goto yy32; ++ default: goto yy35; ++ } ++yy35: ++ { RET(PDO_PARSER_TEXT); } ++yy36: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ if (yych <= 0x00) goto yy1; ++ goto yy32; ++yy37: ++ ++YYCURSOR; ++ goto yy25; ++} ++ ++} diff --git a/databases/php85-pdo_sqlite/Makefile b/databases/php85-pdo_sqlite/Makefile new file mode 100644 index 000000000000..c18fe80e2621 --- /dev/null +++ b/databases/php85-pdo_sqlite/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pdo_sqlite + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c b/databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c new file mode 100644 index 000000000000..5770c5cf3f7f --- /dev/null +++ b/databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c @@ -0,0 +1,398 @@ +--- sqlite_sql_parser.c.orig 2025-07-02 13:27:28 UTC ++++ sqlite_sql_parser.c +@@ -0,0 +1,395 @@ ++/* Generated by re2c 3.1 */ ++/* ++ +----------------------------------------------------------------------+ ++ | Copyright (c) The PHP Group | ++ +----------------------------------------------------------------------+ ++ | This source file is subject to version 3.01 of the PHP license, | ++ | that is bundled with this package in the file LICENSE, and is | ++ | available through the world-wide-web at the following url: | ++ | https://www.php.net/license/3_01.txt | ++ | If you did not receive a copy of the PHP license and are unable to | ++ | obtain it through the world-wide-web, please send a note to | ++ | license@php.net so we can mail you a copy immediately. | ++ +----------------------------------------------------------------------+ ++ | Author: Matteo Beccati <mbeccati@php.net> | ++ +----------------------------------------------------------------------+ ++*/ ++ ++ ++#include "php.h" ++#include "ext/pdo/php_pdo_driver.h" ++#include "ext/pdo/pdo_sql_parser.h" ++ ++int pdo_sqlite_scanner(pdo_scanner_t *s) ++{ ++ const char *cursor = s->cur; ++ ++ s->tok = cursor; ++ ++ ++ ++{ ++ YYCTYPE yych; ++ unsigned int yyaccept = 0; ++ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy4; ++ case '\'': goto yy6; ++ case '-': goto yy7; ++ case '/': goto yy8; ++ case ':': goto yy9; ++ case '?': goto yy10; ++ case '[': goto yy12; ++ case '`': goto yy13; ++ default: goto yy2; ++ } ++yy1: ++ YYCURSOR = YYMARKER; ++ switch (yyaccept) { ++ case 0: goto yy5; ++ case 1: goto yy17; ++ case 2: goto yy21; ++ case 3: goto yy33; ++ default: goto yy37; ++ } ++yy2: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: ++ case '"': ++ case '\'': ++ case '-': ++ case '/': ++ case ':': ++ case '?': ++ case '[': ++ case '`': goto yy3; ++ default: goto yy2; ++ } ++yy3: ++ { RET(PDO_PARSER_TEXT); } ++yy4: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych >= 0x01) goto yy15; ++yy5: ++ { SKIP_ONE(PDO_PARSER_TEXT); } ++yy6: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy19; ++yy7: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '-': goto yy22; ++ default: goto yy5; ++ } ++yy8: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '*': goto yy24; ++ default: goto yy5; ++ } ++yy9: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy25; ++ case ':': goto yy27; ++ default: goto yy5; ++ } ++yy10: ++ yych = *++YYCURSOR; ++ switch (yych) { ++ case '?': goto yy29; ++ default: goto yy11; ++ } ++yy11: ++ { RET(PDO_PARSER_BIND_POS); } ++yy12: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy31; ++yy13: ++ yyaccept = 0; ++ yych = *(YYMARKER = ++YYCURSOR); ++ if (yych <= 0x00) goto yy5; ++ goto yy35; ++yy14: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy15: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '"': goto yy16; ++ default: goto yy14; ++ } ++yy16: ++ yyaccept = 1; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy17; ++ case '"': goto yy16; ++ default: goto yy14; ++ } ++yy17: ++ { RET(PDO_PARSER_TEXT); } ++yy18: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy19: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '\'': goto yy20; ++ default: goto yy18; ++ } ++yy20: ++ yyaccept = 2; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy21; ++ case '\'': goto yy20; ++ default: goto yy18; ++ } ++yy21: ++ { RET(PDO_PARSER_TEXT); } ++yy22: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '\n': goto yy23; ++ default: goto yy22; ++ } ++yy23: ++ { RET(PDO_PARSER_TEXT); } ++yy24: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy38; ++ default: goto yy24; ++ } ++yy25: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ case 'A': ++ case 'B': ++ case 'C': ++ case 'D': ++ case 'E': ++ case 'F': ++ case 'G': ++ case 'H': ++ case 'I': ++ case 'J': ++ case 'K': ++ case 'L': ++ case 'M': ++ case 'N': ++ case 'O': ++ case 'P': ++ case 'Q': ++ case 'R': ++ case 'S': ++ case 'T': ++ case 'U': ++ case 'V': ++ case 'W': ++ case 'X': ++ case 'Y': ++ case 'Z': ++ case '_': ++ case 'a': ++ case 'b': ++ case 'c': ++ case 'd': ++ case 'e': ++ case 'f': ++ case 'g': ++ case 'h': ++ case 'i': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'm': ++ case 'n': ++ case 'o': ++ case 'p': ++ case 'q': ++ case 'r': ++ case 's': ++ case 't': ++ case 'u': ++ case 'v': ++ case 'w': ++ case 'x': ++ case 'y': ++ case 'z': goto yy25; ++ default: goto yy26; ++ } ++yy26: ++ { RET(PDO_PARSER_BIND); } ++yy27: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case ':': goto yy27; ++ default: goto yy28; ++ } ++yy28: ++ { RET(PDO_PARSER_TEXT); } ++yy29: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '?': goto yy29; ++ default: goto yy28; ++ } ++yy30: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy31: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case ']': goto yy32; ++ default: goto yy30; ++ } ++yy32: ++ yyaccept = 3; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy33; ++ case ']': goto yy32; ++ default: goto yy30; ++ } ++yy33: ++ { RET(PDO_PARSER_TEXT); } ++yy34: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++yy35: ++ switch (yych) { ++ case 0x00: goto yy1; ++ case '`': goto yy36; ++ default: goto yy34; ++ } ++yy36: ++ yyaccept = 4; ++ YYMARKER = ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case 0x00: goto yy37; ++ case '`': goto yy36; ++ default: goto yy34; ++ } ++yy37: ++ { RET(PDO_PARSER_TEXT); } ++yy38: ++ ++YYCURSOR; ++ if (YYLIMIT <= YYCURSOR) YYFILL(1); ++ yych = *YYCURSOR; ++ switch (yych) { ++ case '*': goto yy38; ++ case '/': goto yy39; ++ default: goto yy24; ++ } ++yy39: ++ ++YYCURSOR; ++ goto yy23; ++} ++ ++} diff --git a/databases/php85-pgsql/Makefile b/databases/php85-pgsql/Makefile new file mode 100644 index 000000000000..429049846f13 --- /dev/null +++ b/databases/php85-pgsql/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pgsql + +.include "${MASTERDIR}/Makefile" diff --git a/databases/php85-sqlite3/Makefile b/databases/php85-sqlite3/Makefile new file mode 100644 index 000000000000..a82d71c80d62 --- /dev/null +++ b/databases/php85-sqlite3/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= databases + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -sqlite3 + +.include "${MASTERDIR}/Makefile" diff --git a/devel/Makefile b/devel/Makefile index 2cd31116b8d2..b59907182c14 100644 --- a/devel/Makefile +++ b/devel/Makefile @@ -4281,6 +4281,16 @@ SUBDIR += php84-sysvsem SUBDIR += php84-sysvshm SUBDIR += php84-tokenizer + SUBDIR += php85-ffi + SUBDIR += php85-gettext + SUBDIR += php85-intl + SUBDIR += php85-pcntl + SUBDIR += php85-readline + SUBDIR += php85-shmop + SUBDIR += php85-sysvmsg + SUBDIR += php85-sysvsem + SUBDIR += php85-sysvshm + SUBDIR += php85-tokenizer SUBDIR += phpunit10 SUBDIR += phpunit11 SUBDIR += phpunit12 diff --git a/devel/php85-ffi/Makefile b/devel/php85-ffi/Makefile new file mode 100644 index 000000000000..270ae2555014 --- /dev/null +++ b/devel/php85-ffi/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -ffi + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-gettext/Makefile b/devel/php85-gettext/Makefile new file mode 100644 index 000000000000..ea75aa3ca8e8 --- /dev/null +++ b/devel/php85-gettext/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -gettext + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-intl/Makefile b/devel/php85-intl/Makefile new file mode 100644 index 000000000000..86efa5ba615f --- /dev/null +++ b/devel/php85-intl/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -intl + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-pcntl/Makefile b/devel/php85-pcntl/Makefile new file mode 100644 index 000000000000..6b6cff3b3004 --- /dev/null +++ b/devel/php85-pcntl/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -pcntl + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-readline/Makefile b/devel/php85-readline/Makefile new file mode 100644 index 000000000000..fa3d96ee0f4e --- /dev/null +++ b/devel/php85-readline/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -readline + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-shmop/Makefile b/devel/php85-shmop/Makefile new file mode 100644 index 000000000000..4fc9810a09dd --- /dev/null +++ b/devel/php85-shmop/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -shmop + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-sysvmsg/Makefile b/devel/php85-sysvmsg/Makefile new file mode 100644 index 000000000000..69101d800a1d --- /dev/null +++ b/devel/php85-sysvmsg/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -sysvmsg + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-sysvsem/Makefile b/devel/php85-sysvsem/Makefile new file mode 100644 index 000000000000..7cdde850dd9d --- /dev/null +++ b/devel/php85-sysvsem/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -sysvsem + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-sysvshm/Makefile b/devel/php85-sysvshm/Makefile new file mode 100644 index 000000000000..46e67ef0587d --- /dev/null +++ b/devel/php85-sysvshm/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -sysvshm + +.include "${MASTERDIR}/Makefile" diff --git a/devel/php85-tokenizer/Makefile b/devel/php85-tokenizer/Makefile new file mode 100644 index 000000000000..704ffc4e6f8d --- /dev/null +++ b/devel/php85-tokenizer/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= devel + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -tokenizer + +.include "${MASTERDIR}/Makefile" diff --git a/ftp/Makefile b/ftp/Makefile index 06b545d27011..bd29d849d14a 100644 --- a/ftp/Makefile +++ b/ftp/Makefile @@ -61,6 +61,8 @@ SUBDIR += php83-ftp SUBDIR += php84-curl SUBDIR += php84-ftp + SUBDIR += php85-curl + SUBDIR += php85-ftp SUBDIR += phpwebftp SUBDIR += proftpd SUBDIR += proftpd-mod_vroot diff --git a/ftp/php85-curl/Makefile b/ftp/php85-curl/Makefile new file mode 100644 index 000000000000..93e27f8d2618 --- /dev/null +++ b/ftp/php85-curl/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= ftp + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -curl + +.include "${MASTERDIR}/Makefile" diff --git a/ftp/php85-ftp/Makefile b/ftp/php85-ftp/Makefile new file mode 100644 index 000000000000..d410a01883e9 --- /dev/null +++ b/ftp/php85-ftp/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= ftp + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -ftp + +.include "${MASTERDIR}/Makefile" diff --git a/graphics/Makefile b/graphics/Makefile index d44198ef29cc..71716649bbcd 100644 --- a/graphics/Makefile +++ b/graphics/Makefile @@ -831,6 +831,8 @@ SUBDIR += php83-gd SUBDIR += php84-exif SUBDIR += php84-gd + SUBDIR += php85-exif + SUBDIR += php85-gd SUBDIR += phplot SUBDIR += picpuz SUBDIR += piddle diff --git a/graphics/php85-exif/Makefile b/graphics/php85-exif/Makefile new file mode 100644 index 000000000000..5c5291702f25 --- /dev/null +++ b/graphics/php85-exif/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= graphics + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -exif + +.include "${MASTERDIR}/Makefile" diff --git a/graphics/php85-gd/Makefile b/graphics/php85-gd/Makefile new file mode 100644 index 000000000000..71249f74c62d --- /dev/null +++ b/graphics/php85-gd/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= graphics + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -gd + +.include "${MASTERDIR}/Makefile" diff --git a/lang/Makefile b/lang/Makefile index 07c21b53a9b5..4246634f39f0 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -278,6 +278,8 @@ SUBDIR += php83-extensions SUBDIR += php84 SUBDIR += php84-extensions + SUBDIR += php85 + SUBDIR += php85-extensions SUBDIR += picoc SUBDIR += picolisp SUBDIR += pkl diff --git a/lang/php81/Makefile b/lang/php81/Makefile index 4b7771c16bd7..18fb57821adf 100644 --- a/lang/php81/Makefile +++ b/lang/php81/Makefile @@ -181,7 +181,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php USES+= php:ext,noflavors PHP_MODNAME= ${PKGNAMESUFFIX:S/-//} PHP_VER= 81 -IGNORE_WITH_PHP= 82 83 84 +IGNORE_WITH_PHP= 82 83 84 85 EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME} WRKSRC= ${WRKDIR}/${EXTSUBDIR} diff --git a/lang/php82/Makefile b/lang/php82/Makefile index 50a05aba5d98..ae0de1f38f2a 100644 --- a/lang/php82/Makefile +++ b/lang/php82/Makefile @@ -177,7 +177,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php USES+= php:ext,noflavors PHP_MODNAME= ${PKGNAMESUFFIX:S/-//} PHP_VER= 82 -IGNORE_WITH_PHP= 81 83 84 +IGNORE_WITH_PHP= 81 83 84 85 EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME} WRKSRC= ${WRKDIR}/${EXTSUBDIR} diff --git a/lang/php83/Makefile b/lang/php83/Makefile index 602850e1b2c1..c70d9a675138 100644 --- a/lang/php83/Makefile +++ b/lang/php83/Makefile @@ -195,7 +195,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php USES+= php:ext,noflavors PHP_MODNAME= ${PKGNAMESUFFIX:S/-//} PHP_VER= 83 -IGNORE_WITH_PHP= 81 82 84 +IGNORE_WITH_PHP= 81 82 84 85 EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME} WRKSRC= ${WRKDIR}/${EXTSUBDIR} diff --git a/lang/php84/Makefile b/lang/php84/Makefile index 4aff26d711a7..69c3c787f338 100644 --- a/lang/php84/Makefile +++ b/lang/php84/Makefile @@ -197,7 +197,7 @@ COMMENT= The ${PHP_MODNAME} shared extension for php USES+= php:ext,noflavors PHP_MODNAME= ${PKGNAMESUFFIX:S/-//} PHP_VER= 84 -IGNORE_WITH_PHP= 81 82 83 +IGNORE_WITH_PHP= 81 82 83 85 EXTSUBDIR= ${DISTNAME}/ext/${PHP_MODNAME} WRKSRC= ${WRKDIR}/${EXTSUBDIR} diff --git a/lang/php85-extensions/Makefile b/lang/php85-extensions/Makefile new file mode 100644 index 000000000000..5613d6ead26b --- /dev/null +++ b/lang/php85-extensions/Makefile @@ -0,0 +1,89 @@ +PORTNAME= php85 +PORTVERSION= 1.0 +CATEGORIES= lang +PKGNAMESUFFIX= -extensions + +MAINTAINER= bofh@FreeBSD.org +COMMENT= "meta-port" to install PHP extensions (8.4.X branch) +WWW= https://www.php.net/ + +USES= metaport php + +PHP_VER= 85 +IGNORE_WITH_PHP= 81 82 83 84 + +OPTIONS_DEFINE= BCMATH BZ2 CALENDAR CTYPE CURL DBA DOM ENCHANT EXIF FFI \ + FILEINFO FILTER FTP GD GETTEXT GMP ICONV INTL LDAP \ + MBSTRING MYSQLI ODBC OPCACHE PCNTL PDO \ + PDO_DBLIB PDO_FIREBIRD PDO_MYSQL PDO_ODBC PDO_PGSQL \ + PDO_SQLITE PGSQL PHAR POSIX READLINE SESSION \ + SHMOP SIMPLEXML SNMP SOAP SOCKETS SODIUM SQLITE3 \ + SYSVMSG SYSVSEM SYSVSHM TIDY TOKENIZER XML XMLREADER \ + XMLWRITER XSL ZIP ZLIB +OPTIONS_DEFAULT= CTYPE DOM FILTER ICONV OPCACHE PDO PDO_SQLITE PHAR \ + POSIX SESSION SIMPLEXML SQLITE3 TOKENIZER XML XMLREADER \ + XMLWRITER + +BCMATH_DESC= bc style precision math functions +BZ2_DESC= bzip2 library support +CALENDAR_DESC= calendar conversion support +CTYPE_DESC= ctype functions +CURL_DESC= CURL support +DBA_DESC= dba support +DOM_DESC= DOM support +ENCHANT_DESC= Enchant spelling support +EXIF_DESC= EXIF support +FFI_DESC= Foreign Function Interface support +FILEINFO_DESC= fileinfo support +FILTER_DESC= input filter support +FTP_DESC= FTP support +GD_DESC= GD library support +GETTEXT_DESC= gettext library support +GMP_DESC= GNU MP support +ICONV_DESC= iconv support +INTL_DESC= Internationalization(ICU) +LDAP_DESC= OpenLDAP support +MBSTRING_DESC= multibyte string support +MYSQLI_DESC= MySQLi database support +ODBC_DESC= ODBC support +OPCACHE_DESC= OPcache support +PCNTL_DESC= pcntl support (CLI only) +PDO_DBLIB_DESC= PDO DBLIB-DB driver +PDO_DESC= PHP Data Objects Interface (PDO) +PDO_FIREBIRD_DESC= PDO Firebird driver +PDO_MYSQL_DESC= PDO MySQL driver +PDO_ODBC_DESC= PDO ODBC driver +PDO_PGSQL_DESC= PDO PostgreSQL driver +PDO_SQLITE_DESC= PDO sqlite driver +PHAR_DESC= phar support +POSIX_DESC= POSIX-like functions +READLINE_DESC= readline support (CLI only) +SESSION_DESC= session support +SHMOP_DESC= shmop support +SIMPLEXML_DESC= simplexml support +SNMP_DESC= SNMP support +SOAP_DESC= SOAP support +SOCKETS_DESC= sockets support +SODIUM_DESC= Sodium encryption support +SQLITE3_DESC= sqlite3 support +SYSVMSG_DESC= System V message support +SYSVSEM_DESC= System V semaphore support +SYSVSHM_DESC= System V shared memory support +TIDY_DESC= TIDY support +TOKENIZER_DESC= tokenizer support +XMLREADER_DESC= XMLReader support +XMLWRITER_DESC= XMLWriter support +XML_DESC= XML support +XSL_DESC= XSL support (Implies DOM) +ZIP_DESC= ZIP support +ZLIB_DESC= ZLIB support + +.include <bsd.port.options.mk> + +.for opt in ${OPTIONS_DEFINE} +. if ${PORT_OPTIONS:M${opt}} +USE_PHP+= ${opt:tl} +. endif +.endfor + +.include <bsd.port.mk> diff --git a/lang/php85-extensions/pkg-descr b/lang/php85-extensions/pkg-descr new file mode 100644 index 000000000000..4acc6c163e60 --- /dev/null +++ b/lang/php85-extensions/pkg-descr @@ -0,0 +1,5 @@ +This is a "meta-port" to install the extensions for PHP 8.0 + +Defaults to: +ctype, dom, filter, iconv, json, opcache, pdo, pdo_sqlite, phar, posix, +session, simplexml, sqlite3, tokenizer, xml, xmlreader and xmlwriter. diff --git a/lang/php85/Makefile b/lang/php85/Makefile new file mode 100644 index 000000000000..fd044a453f9b --- /dev/null +++ b/lang/php85/Makefile @@ -0,0 +1,620 @@ +PORTNAME= php85 +DISTVERSION= 8.5.0alpha1 +PORTREVISION?= 0 +CATEGORIES?= lang devel www +MASTER_SITES= LOCAL/bofh/lang/${PORTNAME} +DISTNAME= php-${DISTVERSION} + +MAINTAINER= bofh@FreeBSD.org +COMMENT= PHP Scripting Language (8.5.X branch) +WWW= https://www.php.net/ + +LICENSE= PHP301 + +USES+= compiler:c11 cpe gnome localbase pkgconfig #tar:xz +CPE_PRODUCT= php +PHP_VER= 85 + +PHP_WRKSRC= php-src-php-${DISTVERSION} +WRKSRC= ${WRKDIR}/${PHP_WRKSRC} +CONFLICTS_INSTALL?= php[0-9][0-9]${PKGNAMESUFFIX} + +.if !defined(PKGNAMESUFFIX) +LIB_DEPENDS= libargon2.so:security/libargon2 \ + libpcre2-8.so:devel/pcre2 + +GNU_CONFIGURE= yes +CONFIGURE_ARGS+= \ + --disable-all \ + --program-prefix="" \ + --with-config-file-scan-dir=${PREFIX}/etc/php \ + --with-layout=GNU \ + --with-libxml \ + --with-openssl \ + --with-password-argon2=${LOCALBASE} + +USES+= autoreconf:build bison ssl +USE_GNOME= libxml2 + +LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl +# PR230207 Allow relocations against read-only segments (override lld default) +LDFLAGS_i386= -Wl,-z,notext + +OPTIONS_DEFINE+=CGI CLI DEBUG DTRACE EMBED FPM IPV6 LINKTHR \ + MYSQLND NOASLR PCRE PHPDBG ZTS +OPTIONS_DEFAULT= CGI CLI DTRACE EMBED FPM LINKTHR MYSQLND PCRE +OPTIONS_EXCLUDE_DragonFly= DTRACE +# ld(1) fails to link probes: Relocations in generic ELF (EM: 0) +OPTIONS_EXCLUDE_aarch64= DTRACE +# dt_modtext:opensolaris/ib/libdtrace/common/dt_link.c: arm not impemented +OPTIONS_EXCLUDE_armv6= DTRACE +OPTIONS_EXCLUDE_armv7= DTRACE +# Bug 197128: No ASM code for MIPS/MIPS64, disable FPM +OPTIONS_EXCLUDE_mips= DTRACE FPM +OPTIONS_EXCLUDE_mips64= DTRACE FPM +OPTIONS_EXCLUDE_riscv64= DTRACE +NO_OPTIONS_SORT= yes +OPTIONS_SUB= yes + +CGI_DESC= Build CGI version +CLI_DESC= Build CLI version +EMBED_DESC= Build embedded library +FPM_DESC= Build FPM version +LINKTHR_DESC= Link thread lib (for threaded extensions) +MYSQLND_DESC= Build with MySQL Native Driver +PCRE_DESC= Use system pcre instead of bundled one +PHPDBG_DESC= Interactive PHP debugger +ZTS_DESC= Force Zend Thread Safety (ZTS) build + +CGI_CONFIGURE_OFF= --disable-cgi +CGI_VARS= PHP_SAPI+=cgi +CLI_CONFIGURE_OFF= --disable-cli +CLI_VARS= PHP_SAPI+=cli +DEBUG_CONFIGURE_ON= --enable-debug +DTRACE_CONFIGURE_ON= --enable-dtrace +EMBED_CONFIGURE_ON= --enable-embed +EMBED_VARS= PHP_SAPI+=embed +FPM_CONFIGURE_ON= --enable-fpm \ + --with-fpm-group=${WWWGRP} \ + --with-fpm-user=${WWWOWN} +FPM_VARS= PHP_SAPI+=fpm \ + USE_RC_SUBR+=php_fpm +IPV6_CONFIGURE_OFF= --disable-ipv6 +LINKTHR_LIBS= -lpthread +NOASLR_USES= elfctl +MYSQLND_CONFIGURE_ON= --enable-mysqlnd +PCRE_BUILD_DEPENDS= re2c>0:devel/re2c +PCRE_CONFIGURE_ON= --with-external-pcre=${LOCALBASE} +PCRE_PLIST_SUB= BUNDLED_PCRE="@comment " +PCRE_PLIST_SUB_OFF= BUNDLED_PCRE="" +PHPDBG_CONFIGURE_ON= --enable-phpdbg +PHPDBG_VARS= PHP_SAPI+=phpdbg +ZTS_CONFIGURE_ON= --enable-zts +ZTS_CONFIGURE_ENV= pthreads_working="yes" + +DESTDIRNAME= INSTALL_ROOT + +.if defined(PKGNAMEPREFIX) +USES+= apache +PLIST= ${PKGDIR}/pkg-plist.mod +PKGMESSAGE= ${PKGDIR}/pkg-message.mod +MODULENAME= libphp +SHORTMODNAME= php +WARNING= "!!! If you have a threaded Apache, you must build ${PHP_PORT} with ZTS support to enable thread-safety in extensions !!!" +WARNING+= "!!! Consider switching to php-fpm and mod_proxy_fcgi as per Apache httpd recommendations !!!" +.endif + +.include <bsd.port.options.mk> + +.if ${PORT_OPTIONS:NOASLR} +.if ${PORT_OPTIONS:MCLI} +ELF_FEATURES+=+noaslr:sapi/cli/php +.endif +.if ${PORT_OPTIONS:MCGI} +ELF_FEATURES+=+noaslr:sapi/cgi/php-cgi +.endif +.if ${PORT_OPTIONS:MPHPDBG} +ELF_FEATURES+=+noaslr:sapi/phpdbg/phpdbg +.endif +.if ${PORT_OPTIONS:MFPM} +ELF_FEATURES+=+noaslr:sapi/fpm/php-fpm +.endif +.endif + +.include <bsd.port.pre.mk> + +.if ${ARCH} == riscv64 +CONFIGURE_ARGS+= --without-pcre-jit +.endif + +.if ${PORT_OPTIONS:MPHPDBG} && ${PORT_OPTIONS:MDEBUG} +CONFIGURE_ARGS+= --enable-phpdbg-debug +.endif + +.if ${PORT_OPTIONS:MCLI} || ${PORT_OPTIONS:MEMBED} +PLIST_SUB+= SAPI_INC="" +.else +PLIST_SUB+= SAPI_INC="@comment " +.endif + +CONFIGURE_ENV+= ac_cv_decimal_fp_supported="no" \ + lt_cv_path_SED="sed" \ + OPENSSL_CFLAGS="-I${OPENSSLINC}" \ + OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" \ + PHP_OPENSSL=yes + +post-patch: + @${TOUCH} ${WRKSRC}/ext/php_config.h + +post-patch-FPM-on: + @${REINPLACE_CMD} -e "s|^;\(pid\)|\1|;s|^;\(pm\.[a-z_]*_servers\)|\1|" \ + ${WRKSRC}/sapi/fpm/php-fpm.conf.in + +pre-configure: + @(cd ${WRKSRC} && ${SETENV} MAKE=${MAKE_CMD} ./buildconf --force) + +.if !defined(PKGNAMEPREFIX) +post-build: + @${ECHO_CMD} "PHP_VER=${PHP_VER}" > ${WRKDIR}/php.conf + @${ECHO_CMD} "PHP_VERSION=${PORTVERSION}" >> ${WRKDIR}/php.conf + @${ECHO_CMD} "PHP_SAPI=${PHP_SAPI}" >> ${WRKDIR}/php.conf + @${ECHO_CMD} -n "PHP_EXT_DIR=" >> ${WRKDIR}/php.conf + @${SH} ${WRKSRC}/scripts/php-config --extension-dir | ${SED} -ne 's,^${PREFIX}/lib/php/,,p' >> ${WRKDIR}/php.conf + @${ECHO_CMD} "PHP_EXT_INC=hash json openssl pcre random spl" >> ${WRKDIR}/php.conf + +test: build + @(cd ${WRKSRC} && ${MAKE} test) + +post-install: + ${INSTALL_DATA} ${WRKSRC}/php.ini-development ${WRKSRC}/php.ini-production \ + ${WRKDIR}/php.conf ${STAGEDIR}/${PREFIX}/etc + ${INSTALL_DATA} ${WRKSRC}/Zend/zend_property_hooks.h ${STAGEDIR}${PREFIX}/include/php/Zend + ${INSTALL_DATA} ${WRKSRC}/Zend/zend_lazy_objects.h ${STAGEDIR}${PREFIX}/include/php/Zend + (cd ${WRKSRC}/ext/lexbor && \ + ${COPYTREE_SHARE} lexbor ${STAGEDIR}${PREFIX}/include/php/ext "-name *\.h") + +post-install-CGI-on: + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/php-cgi + +post-install-CLI-on: + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/php + +post-install-EMBED-on: + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libphp.so + +post-install-FPM-on: + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/php-fpm + +post-install-PHPDBG-on: + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/phpdbg + +.else +do-install: + ${MKDIR} ${STAGEDIR}${PREFIX}/${APACHEMODDIR} + ${INSTALL_LIB} ${WRKSRC}/libs/${MODULENAME}.so \ + ${STAGEDIR}${PREFIX}/${APACHEMODDIR} +.endif + +.else +COMMENT= The ${PHP_MODNAME} shared extension for php + +USES+= php:ext,noflavors +PHP_MODNAME= ${PKGNAMESUFFIX:S/-//} +PHP_VER= 85 +IGNORE_WITH_PHP= 81 82 83 84 + +EXTSUBDIR= ${PHP_WRKSRC}/ext/${PHP_MODNAME} +WRKSRC= ${WRKDIR}/${EXTSUBDIR} +PATCHDIR= ${.CURDIR}/files +PLIST= ${NONEXISTENT} + +EXTRACT_AFTER_ARGS?= ${EXTSUBDIR} + +TEST_TARGET= test + +.if ${PHP_MODNAME} == "bcmath" +CONFIGURE_ARGS+= --enable-bcmath + +PHP_HEADER_DIRS= libbcmath/src +.endif + +.if ${PHP_MODNAME} == "bz2" +CONFIGURE_ARGS+= --with-bz2=/usr +.endif + +.if ${PHP_MODNAME} == "calendar" +CONFIGURE_ARGS+= --enable-calendar +.endif + +.if ${PHP_MODNAME} == "ctype" +CONFIGURE_ARGS+= --enable-ctype +.endif + +.if ${PHP_MODNAME} == "curl" +LIB_DEPENDS+= libcurl.so:ftp/curl + +CONFIGURE_ARGS+= --with-curl=${LOCALBASE} +USES+= pkgconfig +.endif + +.if ${PHP_MODNAME} == "dba" +CONFIGURE_ARGS+= --enable-dba + +OPTIONS_DEFINE= CDB DB4 FLATFILE GDBM INIFILE LMDB QDBM TOKYO +OPTIONS_DEFAULT= CDB FLATFILE INIFILE + +CDB_DESC= cdb database support +DB4_DESC= Berkeley DB4 support +FLATFILE_DESC= flatfile support +GDBM_DESC= GDBM database support +INIFILE_DESC= INI file support +LMDB_DESC= LMDB database support +QDBM_DESC= QDBM database support +TOKYO_DESC= Tokyo Cabinet database support + +CDB_CONFIGURE_OFF= --without-cdb +DB4_CONFIGURE_ON= --with-db4=${LOCALBASE} +DB4_USES= bdb +DB4_VARS= WITH_BDB_HIGHEST=yes +FLATFILE_CONFIGURE_ON= --disable-flatfile +GDBM_LIB_DEPENDS= libgdbm.so:databases/gdbm +GDBM_CONFIGURE_ARGS= --with-gdbm=${LOCALBASE} +INIFILE_CONFIGURE_OFF= --disable-inifile +LMDB_LIB_DEPENDS= liblmdb.so:databases/lmdb +LMDB_CONFIGURE_ARGS= --with-lmdb=${LOCALBASE} +QDBM_LIB_DEPENDS= libqdbm.so:databases/qdbm +QDBM_CONFIGURE_ARGS= --with-qdbm=${LOCALBASE} +TOKYO_LIB_DEPENDS= libtokyocabinet.so:databases/tokyocabinet +TOKYO_CONFIGURE_ON= --with-tcadb=${LOCALBASE} + +PHP_HEADER_DIRS= libcdb libflatfile libinifile +.endif + +.if ${PHP_MODNAME} == "dom" +CONFIGURE_ARGS+= --enable-dom + +USES+= pkgconfig +USE_GNOME= libxml2 +.endif + +.if ${PHP_MODNAME} == "enchant" +LIB_DEPENDS+= libenchant-2.so:textproc/enchant2 +CONFIGURE_ARGS+=--with-enchant=${LOCALBASE} +USES+= pkgconfig +.endif + +.if ${PHP_MODNAME} == "exif" +CONFIGURE_ARGS+= --enable-exif +.endif + +.if ${PHP_MODNAME} == "ffi" +LIB_DEPENDS= libffi.so:devel/libffi +CONFIGURE_ARGS+= --with-ffi +.endif + +.if ${PHP_MODNAME} == "fileinfo" +CONFIGURE_ARGS+= --enable-fileinfo + +PHP_HEADER_DIRS= libmagic +.endif + +.if ${PHP_MODNAME} == "filter" +CONFIGURE_ARGS+= --enable-filter +.endif + +.if ${PHP_MODNAME} == "ftp" +CONFIGURE_ARGS+= --enable-ftp + +CONFIGURE_ENV+= OPENSSL_CFLAGS="-I${OPENSSLINC}" \ + OPENSSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" \ + PHP_OPENSSL=yes + +LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl +USES+= pkgconfig ssl +.endif + +.if ${PHP_MODNAME} == "gd" +LIB_DEPENDS= libfreetype.so:print/freetype2 \ + libgd.so:graphics/gd \ + libpng.so:graphics/png +USES+= jpeg + +CONFIGURE_ARGS+= --enable-gd \ + --with-external-gd + +EXTRACT_AFTER_ARGS= --no-same-owner --no-same-permissions --exclude libgd \ + ${PHP_WRKSRC}/ext/gd + +OPTIONS_DEFINE= JIS WEBP X11 + +JIS_DESC= Enable JIS-mapped Japanese font support +WEBP_DESC= Enable WebP image format support +X11_DESC= Enable XPM support +JIS_CONFIGURE_ON= --enable-gd-jis-conv +WEBP_CONFIGURE_ON= --with-webp +WEBP_LIB_DEPENDS= libwebp.so:graphics/webp +X11_CONFIGURE_ON= --with-xpm +X11_USE= XORG=xpm +X11_USES= xorg +.endif + +.if ${PHP_MODNAME} == "gettext" +CONFIGURE_ARGS+= --with-gettext=${LOCALBASE} + +USES+= gettext +.endif + +.if ${PHP_MODNAME} == "gmp" +LIB_DEPENDS+= libgmp.so:math/gmp + +CONFIGURE_ARGS+= --with-gmp=${LOCALBASE} +.endif + +.if ${PHP_MODNAME} == "iconv" +CONFIGURE_ARGS+= --with-iconv=${LOCALBASE} + +USES+= iconv:translit +.endif + +.if ${PHP_MODNAME} == "intl" +LIB_DEPENDS= libicui18n.so:devel/icu +USES+= pkgconfig +CPPFLAGS+= -DU_USING_ICU_NAMESPACE=1 +.endif + +.if ${PHP_MODNAME} == "ldap" +LIB_DEPENDS+=libsasl2.so:security/cyrus-sasl2 +CONFIGURE_ARGS+=--with-ldap=${LOCALBASE} --with-ldap-sasl=${LOCALBASE} +USES+= ldap +.endif + +.if ${PHP_MODNAME} == "mbstring" + +CONFIGURE_ARGS+= --enable-mbstring + +OPTIONS_DEFINE= REGEX +OPTIONS_DEFAULT= REGEX + +REGEX_DESC= Enable multibyte regex support +REGEX_LIB_DEPENDS= libonig.so:devel/oniguruma +REGEX_CONFIGURE_OFF= --disable-mbregex + +PHP_HEADER_DIRS= libmbfl libmbfl/filters libmbfl/mbfl libmbfl/nls +.endif + +.if ${PHP_MODNAME} == "mysqli" +CONFIGURE_ARGS+= --with-mysqli +.endif + +.if ${PHP_MODNAME} == "odbc" +LIB_DEPENDS+= libodbc.so:databases/unixODBC + +CONFIGURE_ARGS+= --with-unixODBC=${LOCALBASE} +.endif + +.if ${PHP_MODNAME} == "opcache" +LIB_DEPENDS+= libcapstone.so:devel/capstone +# This is needed by Zend extensions, keep before everything. +PHP_MOD_PRIO= 10 +CONFIGURE_ARGS+= --enable-opcache --with-capstone +.endif + +.if ${PHP_MODNAME} == "pcntl" +CONFIGURE_ARGS+= --enable-pcntl +.endif + +.if ${PHP_MODNAME} == "pdo" +CONFIGURE_ARGS+= --enable-pdo +.endif + +.if ${PHP_MODNAME} == "pdo_dblib" +CONFIGURE_ARGS+= --with-pdo-dblib=${LOCALBASE} + +USE_PHP= pdo:build + +OPTIONS_DEFINE= MSSQL + +MSSQL_DESC= Enable Microsoft SQL Server support +MSSQL_LIB_DEPENDS= libsybdb.so:databases/freetds +MSSQL_LIB_DEPENDS_OFF= libct.so:databases/freetds +.endif + +.if ${PHP_MODNAME} == "pdo_firebird" +CONFIGURE_ARGS+= --with-pdo-firebird=${LOCALBASE} + +USES+= firebird +USE_PHP= pdo:build +.endif + +.if ${PHP_MODNAME} == "pdo_odbc" +LIB_DEPENDS+= libodbc.so:databases/unixODBC +CONFIGURE_ARGS+= --with-pdo-odbc=unixODBC,${LOCALBASE} + +USE_PHP= pdo:build +.endif + +.if ${PHP_MODNAME} == "pdo_mysql" +OPTIONS_DEFINE= MYSQLND +OPTIONS_DEFAULT= MYSQLND + +MYSQLND_DESC= Use MySQL Native Driver + +MYSQLND_CONFIGURE_ON= --with-pdo-mysql=mysqlnd +MYSQLND_CONFIGURE_OFF= --with-pdo-mysql=${LOCALBASE} \ + --with-zlib-dir=/usr +MYSQLND_USES_OFF= mysql + +USE_PHP= pdo:build +.endif + +.if ${PHP_MODNAME} == "pdo_pgsql" +USES+= pgsql + +CONFIGURE_ARGS+= --with-pdo-pgsql=${LOCALBASE} + +USE_PHP= pdo:build +.endif + +.if ${PHP_MODNAME} == "pdo_sqlite" +USES+= localbase sqlite +CONFIGURE_ARGS+= --with-pdo-sqlite=${LOCALBASE} + +USE_PHP= pdo:build +.endif + +.if ${PHP_MODNAME} == "pgsql" +USES+= pgsql + +CONFIGURE_ARGS+= --with-pgsql=${LOCALBASE} +.endif + +.if ${PHP_MODNAME} == "phar" +CONFIGURE_ARGS+= --enable-phar +.endif + +.if ${PHP_MODNAME} == "posix" +CONFIGURE_ARGS+= --enable-posix +.endif + +.if ${PHP_MODNAME} == "readline" +CONFIGURE_ARGS+=--with-libedit +USES+= libedit +.endif + +.if ${PHP_MODNAME} == "session" +CONFIGURE_ARGS+= --enable-session +PHP_MOD_PRIO= 18 +.endif + +.if ${PHP_MODNAME} == "shmop" +CONFIGURE_ARGS+= --enable-shmop +.endif + +.if ${PHP_MODNAME} == "simplexml" +CONFIGURE_ARGS+= --enable-simplexml + +USES+= pkgconfig +USE_GNOME= libxml2 +.endif + +.if ${PHP_MODNAME} == "snmp" +CONFIGURE_ARGS+= --with-snmp=${LOCALBASE} + +CONFIGURE_ENV+= ac_cv_buggy_snprint_value="no" + +LIB_DEPENDS+= libnetsnmp.so:net-mgmt/net-snmp +LDFLAGS+= -L${OPENSSLLIB} -lcrypto -lssl +USES+= ssl +.endif + +.if ${PHP_MODNAME} == "soap" +CONFIGURE_ARGS+= --enable-soap + +USES+= pkgconfig +USE_GNOME= libxml2 +.endif + +.if ${PHP_MODNAME} == "sockets" +CONFIGURE_ARGS+= --enable-sockets +CONFIGURE_ENV+= LOCAL_CREDS_PERSISTENT=yes +.endif + +.if ${PHP_MODNAME} == "sodium" +CONFIGURE_ARGS+= --with-sodium=${LOCALBASE} +LIB_DEPENDS+= libsodium.so:security/libsodium +.endif + +.if ${PHP_MODNAME} == "sqlite3" +USES+= localbase pkgconfig sqlite +CONFIGURE_ARGS+= --with-sqlite3=${LOCALBASE} +.endif + +.if ${PHP_MODNAME} == "sysvmsg" +CONFIGURE_ARGS+= --enable-sysvmsg +.endif + +.if ${PHP_MODNAME} == "sysvsem" +CONFIGURE_ARGS+= --enable-sysvsem +.endif + +.if ${PHP_MODNAME} == "sysvshm" +CONFIGURE_ARGS+= --enable-sysvshm +.endif + +.if ${PHP_MODNAME} == "tidy" +CONFIGURE_ARGS+= --with-tidy=${LOCALBASE} + +LIB_DEPENDS+= libtidy5.so:www/tidy-html5 +.endif + +.if ${PHP_MODNAME} == "tokenizer" +CONFIGURE_ARGS+= --enable-tokenizer +.endif + +.if ${PHP_MODNAME} == "xml" +CONFIGURE_ARGS+= --enable-xml + +USES+= pkgconfig +USE_GNOME= libxml2 +.endif + +.if ${PHP_MODNAME} == "xmlreader" +CONFIGURE_ARGS+= --enable-xmlreader + +USE_GNOME= libxml2 + +USE_PHP= dom:build +.endif + +.if ${PHP_MODNAME} == "xmlwriter" +CONFIGURE_ARGS+= --enable-xmlwriter + +USES+= pkgconfig +USE_GNOME= libxml2 +.endif + +.if ${PHP_MODNAME} == "xsl" +CONFIGURE_ARGS+= --with-xsl=${LOCALBASE} + +USE_GNOME= libxslt +USE_PHP= dom:build xml:build +.endif + +.if ${PHP_MODNAME} == "zip" +LIB_DEPENDS+= libzip.so:archivers/libzip + +CONFIGURE_ARGS+= --with-zip +USES+= pkgconfig +.endif + +.if ${PHP_MODNAME} == "zlib" +CONFIGURE_ARGS+= --with-zlib=/usr +USES+= pkgconfig +.endif + +.include <bsd.port.pre.mk> + +.if (${ARCH} == aarch64 || ${ARCH} == amd64 || ${ARCH} == i386) && ${PHP_MODNAME} == "opcache" +post-configure: + @${BSDMAKE} -C ${WRKSRC} ./jit/ir/ir_fold_hash.h + @${BSDMAKE} -C ${WRKSRC} ./jit/ir/ir_emit.lo +.endif + +.if ${PHP_MODNAME} == "soap" +post-extract: + @${MKDIR} ${WRKSRC}/ext/session + @${CP} ${FILESDIR}/php_session.h ${WRKSRC}/ext/session +.endif + +.if ${PHP_MODNAME} == "sqlite3" || ${PHP_MODNAME} == "zlib" +post-extract: + @${MV} ${WRKSRC}/config0.m4 ${WRKSRC}/config.m4 +.endif + +.if ${PHP_MODNAME} == "xml" +post-extract: + @${MKDIR} ${WRKSRC}/ext/xml + @${CP} ${WRKSRC}/expat_compat.h ${WRKSRC}/ext/xml +.endif +.endif +.include <bsd.port.post.mk> diff --git a/lang/php85/distinfo b/lang/php85/distinfo new file mode 100644 index 000000000000..bbb20b86de2d --- /dev/null +++ b/lang/php85/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1751455337 +SHA256 (php-8.5.0alpha1.tar.gz) = ab8c5f2d559c41b711190e0850b981bfea0bda34f7129cd77567b35266a01b50 +SIZE (php-8.5.0alpha1.tar.gz) = 23014352 diff --git a/lang/php85/files/patch-TSRM_TSRM.c b/lang/php85/files/patch-TSRM_TSRM.c new file mode 100644 index 000000000000..a5ad9dca4e8a --- /dev/null +++ b/lang/php85/files/patch-TSRM_TSRM.c @@ -0,0 +1,11 @@ +--- TSRM/TSRM.c.orig 2024-07-02 13:43:13 UTC ++++ TSRM/TSRM.c +@@ -792,7 +792,7 @@ TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void) + asm ("leal _tsrm_ls_cache@ntpoff,%0" + : "=r" (ret)); + return ret; +-#elif defined(__aarch64__) ++#elif defined(__aarch64__) && !defined(__FreeBSD__) + size_t ret; + + # ifdef __APPLE__ diff --git a/lang/php85/files/patch-build_Makefile.global b/lang/php85/files/patch-build_Makefile.global new file mode 100644 index 000000000000..52531a83dabe --- /dev/null +++ b/lang/php85/files/patch-build_Makefile.global @@ -0,0 +1,19 @@ +--- build/Makefile.global.orig 2024-07-02 13:43:13 UTC ++++ build/Makefile.global +@@ -91,14 +91,14 @@ test: all + @if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \ + INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \ + if test "$$INI_FILE"; then \ +- $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \ ++ $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini || :; \ + else \ + echo > $(top_builddir)/tmp-php.ini; \ + fi; \ + INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \ + if test "$$INI_SCANNED_PATH"; then \ + INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \ +- $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \ ++ $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini || :; \ + fi; \ + TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \ + TEST_PHP_SRCDIR=$(top_srcdir) \ diff --git a/lang/php85/files/patch-configure.ac b/lang/php85/files/patch-configure.ac new file mode 100644 index 000000000000..e9c038fd5b15 --- /dev/null +++ b/lang/php85/files/patch-configure.ac @@ -0,0 +1,27 @@ +--- configure.ac.orig 2024-09-10 16:10:06 UTC ++++ configure.ac +@@ -55,6 +55,7 @@ AH_BOTTOM([ + + #include <string.h> + ++#include <ext/php_config.h> + #endif /* PHP_CONFIG_H */ + ]) + +@@ -249,7 +250,6 @@ AS_VAR_APPEND([CPPFLAGS], [" -D_GNU_SOURCE"]) + dnl require extensions to C and POSIX. + AS_VAR_APPEND([CPPFLAGS], [" -D_GNU_SOURCE"]) + +-PTHREADS_CHECK + PHP_HELP_SEPARATOR([SAPI modules:]) + PHP_SHLIB_SUFFIX_NAMES + PHP_BUILD_PROGRAM +@@ -1368,7 +1368,7 @@ EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=$(eval echo "$PHP_CO + EXPANDED_DATADIR=$datadir + EXPANDED_PHP_CONFIG_FILE_PATH=$(eval echo "$PHP_CONFIG_FILE_PATH") + EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=$(eval echo "$PHP_CONFIG_FILE_SCAN_DIR") +-INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR ++INCLUDE_PATH=.:${prefix}/share/pear + + exec_prefix=$old_exec_prefix + libdir=$old_libdir diff --git a/lang/php85/files/patch-ext_hash_xxhash_xxhash.h b/lang/php85/files/patch-ext_hash_xxhash_xxhash.h new file mode 100644 index 000000000000..d284f4c94f74 --- /dev/null +++ b/lang/php85/files/patch-ext_hash_xxhash_xxhash.h @@ -0,0 +1,46 @@ +--- ext/hash/xxhash/xxhash.h.orig 2023-06-06 15:54:29 UTC ++++ ext/hash/xxhash/xxhash.h +@@ -3078,22 +3078,32 @@ enum XXH_VECTOR_TYPE /* fake enum */ { + * inconsistent intrinsics, spotty coverage, and multiple endiannesses. + */ + #if XXH_VECTOR == XXH_VSX ++/* Annoyingly, these headers _may_ define three macros: `bool`, `vector`, ++ * and `pixel`. This is a problem for obvious reasons. ++ * ++ * These keywords are unnecessary; the spec literally says they are ++ * equivalent to `__bool`, `__vector`, and `__pixel` and may be undef'd ++ * after including the header. ++ * ++ * We use pragma push_macro/pop_macro to keep the namespace clean. */ ++# pragma push_macro("bool") ++# pragma push_macro("vector") ++# pragma push_macro("pixel") ++/* silence potential macro redefined warnings */ ++# undef bool ++# undef vector ++# undef pixel ++ + # if defined(__s390x__) + # include <s390intrin.h> + # else +-/* gcc's altivec.h can have the unwanted consequence to unconditionally +- * #define bool, vector, and pixel keywords, +- * with bad consequences for programs already using these keywords for other purposes. +- * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined. +- * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler, +- * but it seems that, in some cases, it isn't. +- * Force the build macro to be defined, so that keywords are not altered. +- */ +-# if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__) +-# define __APPLE_ALTIVEC__ +-# endif + # include <altivec.h> + # endif ++ ++/* Restore the original macro values, if applicable. */ ++# pragma pop_macro("pixel") ++# pragma pop_macro("vector") ++# pragma pop_macro("bool") + + typedef __vector unsigned long long xxh_u64x2; + typedef __vector unsigned char xxh_u8x16; diff --git a/lang/php85/files/patch-ext_pcre_php__pcre.h b/lang/php85/files/patch-ext_pcre_php__pcre.h new file mode 100644 index 000000000000..56c6dc75f6e3 --- /dev/null +++ b/lang/php85/files/patch-ext_pcre_php__pcre.h @@ -0,0 +1,11 @@ +--- ext/pcre/php_pcre.h.orig 2024-07-28 11:55:02 UTC ++++ ext/pcre/php_pcre.h +@@ -20,7 +20,7 @@ + #ifdef HAVE_BUNDLED_PCRE + #include "pcre2lib/pcre2.h" + #else +-#include "pcre2.h" ++#include <pcre2.h> + #endif + + #include <locale.h> diff --git a/lang/php85/files/patch-sapi_apache2handler_config.m4 b/lang/php85/files/patch-sapi_apache2handler_config.m4 new file mode 100644 index 000000000000..cb9874a7a4b0 --- /dev/null +++ b/lang/php85/files/patch-sapi_apache2handler_config.m4 @@ -0,0 +1,11 @@ +--- sapi/apache2handler/config.m4.orig 2024-08-27 14:33:48 UTC ++++ sapi/apache2handler/config.m4 +@@ -61,7 +61,7 @@ if test "$PHP_APXS2" != "no"; then + [AC_MSG_ERROR([Please note that Apache version >= 2.4 is required])]) + + APXS_LIBEXECDIR='$(INSTALL_ROOT)'$($APXS -q LIBEXECDIR) +- if test -z $($APXS -q SYSCONFDIR); then ++ if true; then + INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \ + $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \ + -i -n php" diff --git a/lang/php85/files/patch-sapi_fpm_www.conf.in b/lang/php85/files/patch-sapi_fpm_www.conf.in new file mode 100644 index 000000000000..c7465018244d --- /dev/null +++ b/lang/php85/files/patch-sapi_fpm_www.conf.in @@ -0,0 +1,17 @@ +--- sapi/fpm/www.conf.in.orig 2023-03-14 16:11:05 UTC ++++ sapi/fpm/www.conf.in +@@ -32,10 +32,14 @@ group = @php_fpm_group@ + ; Valid syntaxes are: + ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on + ; a specific port; ++; '0.0.0.0:port' - to listen on a TCP socket to all IPv4 addresses on ++; a specific port; + ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on + ; a specific port; + ; 'port' - to listen on a TCP socket to all addresses + ; (IPv6 and IPv4-mapped) on a specific port; ++; Note: IPv4-mapped addresses are disabled by-default in ++; FreeBSD for security reasons; + ; '/path/to/unix/socket' - to listen on a unix socket. + ; Note: This value is mandatory. + listen = 127.0.0.1:9000 diff --git a/lang/php85/files/php_fpm.in b/lang/php85/files/php_fpm.in new file mode 100644 index 000000000000..d8a70275f453 --- /dev/null +++ b/lang/php85/files/php_fpm.in @@ -0,0 +1,102 @@ +#!/bin/sh + +# PROVIDE: php_fpm +# REQUIRE: LOGIN +# KEYWORD: shutdown + +# +# Add the following line to /etc/rc.conf to enable php_fpm: +# php_fpm_enable (bool): Set to "NO" by default. +# Set it to "YES" to enable php_fpm +# php_fpm_profiles (str): Set to "" by default. +# Define your profiles here. +# php_fpm_pid_prefix (str): Set to "" by default. +# When using profiles manually assign value to "php_fpm_" +# for prevent collision with other PIDs names. + +. /etc/rc.subr + +name="php_fpm" +rcvar=php_fpm_enable + +start_precmd="php_fpm_prestart" +restart_precmd="php_fpm_checkconfig" +reload_precmd="php_fpm_checkconfig" +command="%%PREFIX%%/sbin/php-fpm" +configtest_cmd="php_fpm_checkconfig" +_pidprefix="/var/run" +pidfile="${_pidprefix}/php-fpm.pid" +required_files="%%PREFIX%%/etc/php-fpm.conf" + +load_rc_config "${name}" + +: ${php_fpm_enable="NO"} +: ${php_fpm_umask=""} +: ${php_fpm_svcj_options:="net_basic"} + +if [ -n "$2" ]; then + profile="$2" + if [ "x${php_fpm_profiles}" != "x" ]; then + pidfile="${_pidprefix}/${php_fpm_pid_prefix}php-fpm-${profile}.pid" + eval php_fpm_configfile="\${php_fpm_${profile}_configfile:-}" + if [ "x${php_fpm_configfile}" = "x" ]; then + echo "You must define a configuration file (php_fpm_${profile}_configfile)" + exit 1 + fi + required_files="${php_fpm_configfile}" + eval php_fpm_enable="\${php_fpm_${profile}_enable:-${php_fpm_enable}}" + php_fpm_flags="-y ${php_fpm_configfile} -g ${pidfile}" + else + echo "$0: extra argument ignored" + fi +else + if [ "x${php_fpm_profiles}" != "x" -a "x$1" != "x" ]; then + for profile in ${php_fpm_profiles}; do + echo "===> php_fpm profile: ${profile}" + %%PREFIX%%/etc/rc.d/php_fpm $1 ${profile} + retcode="$?" + if [ "0${retcode}" -ne 0 ]; then + failed="${profile} (${retcode}) ${failed:-}" + else + success="${profile} ${success:-}" + fi + done + exit 0 + fi +fi + +extra_commands="reload configtest logrotate" +sig_stop="QUIT" +sig_reload="USR2" +logrotate_cmd="php_fpm_logrotate" + +php_fpm_logrotate() { + if [ -z "$rc_pid" ]; then + _run_rc_notrunning + return 1 + fi + echo "Rotating logs $name." + kill -USR1 $rc_pid +} + +php_fpm_checkconfig() +{ + echo "Performing sanity check on php-fpm configuration:" + eval ${command} ${php_fpm_flags} -t +} + +php_fpm_prestart() +{ + php_fpm_checkconfig + checkconfig=$? + if [ $checkconfig -ne 0 ]; then + return $checkconfig + fi + + if [ ! -z "$php_fpm_umask" ]; then + echo "Setting umask to: ${php_fpm_umask}" + umask $php_fpm_umask + fi +} + +run_rc_command "$1" diff --git a/lang/php85/files/php_session.h b/lang/php85/files/php_session.h new file mode 100644 index 000000000000..65bf7de20449 --- /dev/null +++ b/lang/php85/files/php_session.h @@ -0,0 +1,328 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | https://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Sascha Schumann <sascha@schumann.cx> | + +----------------------------------------------------------------------+ + */ + +#ifndef PHP_SESSION_H +#define PHP_SESSION_H + +#include "ext/standard/php_var.h" +#include "ext/random/php_random.h" + +#define PHP_SESSION_API 20161017 + +#include "php_version.h" +#define PHP_SESSION_VERSION PHP_VERSION + +/* save handler macros */ +#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name +#define PS_CLOSE_ARGS void **mod_data +#define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val, zend_long maxlifetime +#define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime +#define PS_DESTROY_ARGS void **mod_data, zend_string *key +#define PS_GC_ARGS void **mod_data, zend_long maxlifetime, zend_long *nrdels +#define PS_CREATE_SID_ARGS void **mod_data +#define PS_VALIDATE_SID_ARGS void **mod_data, zend_string *key +#define PS_UPDATE_TIMESTAMP_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime + +typedef struct ps_module_struct { + const char *s_name; + zend_result (*s_open)(PS_OPEN_ARGS); + zend_result (*s_close)(PS_CLOSE_ARGS); + zend_result (*s_read)(PS_READ_ARGS); + zend_result (*s_write)(PS_WRITE_ARGS); + zend_result (*s_destroy)(PS_DESTROY_ARGS); + zend_long (*s_gc)(PS_GC_ARGS); + zend_string *(*s_create_sid)(PS_CREATE_SID_ARGS); + zend_result (*s_validate_sid)(PS_VALIDATE_SID_ARGS); + zend_result (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS); +} ps_module; + +#define PS_GET_MOD_DATA() *mod_data +#define PS_SET_MOD_DATA(a) *mod_data = (a) + +#define PS_OPEN_FUNC(x) zend_result ps_open_##x(PS_OPEN_ARGS) +#define PS_CLOSE_FUNC(x) zend_result ps_close_##x(PS_CLOSE_ARGS) +#define PS_READ_FUNC(x) zend_result ps_read_##x(PS_READ_ARGS) +#define PS_WRITE_FUNC(x) zend_result ps_write_##x(PS_WRITE_ARGS) +#define PS_DESTROY_FUNC(x) zend_result ps_delete_##x(PS_DESTROY_ARGS) +#define PS_GC_FUNC(x) zend_long ps_gc_##x(PS_GC_ARGS) +#define PS_CREATE_SID_FUNC(x) zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS) +#define PS_VALIDATE_SID_FUNC(x) zend_result ps_validate_sid_##x(PS_VALIDATE_SID_ARGS) +#define PS_UPDATE_TIMESTAMP_FUNC(x) zend_result ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS) + +/* Legacy save handler module definitions */ +#define PS_FUNCS(x) \ + PS_OPEN_FUNC(x); \ + PS_CLOSE_FUNC(x); \ + PS_READ_FUNC(x); \ + PS_WRITE_FUNC(x); \ + PS_DESTROY_FUNC(x); \ + PS_GC_FUNC(x); \ + PS_CREATE_SID_FUNC(x) + +#define PS_MOD(x) \ + #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ + ps_delete_##x, ps_gc_##x, php_session_create_id, \ + php_session_validate_sid, php_session_update_timestamp + +/* Legacy SID creation enabled save handler module definitions */ +#define PS_FUNCS_SID(x) \ + PS_OPEN_FUNC(x); \ + PS_CLOSE_FUNC(x); \ + PS_READ_FUNC(x); \ + PS_WRITE_FUNC(x); \ + PS_DESTROY_FUNC(x); \ + PS_GC_FUNC(x); \ + PS_CREATE_SID_FUNC(x); \ + PS_VALIDATE_SID_FUNC(x); \ + PS_UPDATE_TIMESTAMP_FUNC(x); + +#define PS_MOD_SID(x) \ + #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ + ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \ + php_session_validate_sid, php_session_update_timestamp + +/* Update timestamp enabled save handler module definitions + New save handlers should use this API */ +#define PS_FUNCS_UPDATE_TIMESTAMP(x) \ + PS_OPEN_FUNC(x); \ + PS_CLOSE_FUNC(x); \ + PS_READ_FUNC(x); \ + PS_WRITE_FUNC(x); \ + PS_DESTROY_FUNC(x); \ + PS_GC_FUNC(x); \ + PS_CREATE_SID_FUNC(x); \ + PS_VALIDATE_SID_FUNC(x); \ + PS_UPDATE_TIMESTAMP_FUNC(x); + +#define PS_MOD_UPDATE_TIMESTAMP(x) \ + #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ + ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \ + ps_validate_sid_##x, ps_update_timestamp_##x + + +typedef enum { + php_session_disabled, + php_session_none, + php_session_active +} php_session_status; + +typedef struct _php_session_rfc1867_progress { + size_t sname_len; + zval sid; + smart_str key; + + zend_long update_step; + zend_long next_update; + double next_update_time; + bool cancel_upload; + bool apply_trans_sid; + size_t content_length; + + zval data; /* the array exported to session data */ + zval files; /* data["files"] array */ + zval *post_bytes_processed; /* data["bytes_processed"] */ + zval *current_file_bytes_processed; + zval current_file; /* array of currently uploading file */ +} php_session_rfc1867_progress; + +typedef struct _php_ps_globals { + char *save_path; + char *session_name; + zend_string *id; + char *extern_referer_chk; + char *cache_limiter; + zend_long cookie_lifetime; + char *cookie_path; + char *cookie_domain; + char *cookie_samesite; + bool cookie_secure; + bool cookie_httponly; + const ps_module *mod; + const ps_module *default_mod; + void *mod_data; + php_session_status session_status; + zend_string *session_started_filename; + uint32_t session_started_lineno; + int module_number; + php_random_status_state_pcgoneseq128xslrr64 random_state; + php_random_algo_with_state random; + zend_long gc_probability; + zend_long gc_divisor; + zend_long gc_maxlifetime; + zend_long cache_expire; + struct { + zval ps_open; + zval ps_close; + zval ps_read; + zval ps_write; + zval ps_destroy; + zval ps_gc; + zval ps_create_sid; + zval ps_validate_sid; + zval ps_update_timestamp; + } mod_user_names; + zend_string *mod_user_class_name; + bool mod_user_implemented; + bool mod_user_is_open; + bool auto_start; + bool use_cookies; + bool use_only_cookies; + bool use_trans_sid; /* contains the INI value of whether to use trans-sid */ + bool send_cookie; + bool define_sid; + + const struct ps_serializer_struct *serializer; + zval http_session_vars; + + zend_long sid_length; + zend_long sid_bits_per_character; + + php_session_rfc1867_progress *rfc1867_progress; + char *rfc1867_prefix; /* session.upload_progress.prefix */ + char *rfc1867_name; /* session.upload_progress.name */ + zend_long rfc1867_freq; /* session.upload_progress.freq */ + double rfc1867_min_freq; /* session.upload_progress.min_freq */ + bool rfc1867_enabled; /* session.upload_progress.enabled */ + bool rfc1867_cleanup; /* session.upload_progress.cleanup */ + + bool use_strict_mode; /* whether or not PHP accepts unknown session ids */ + bool lazy_write; /* omit session write when it is possible */ + bool in_save_handler; /* state if session is in save handler or not */ + bool set_handler; /* state if session module i setting handler or not */ + zend_string *session_vars; /* serialized original session data */ +} php_ps_globals; + +typedef php_ps_globals zend_ps_globals; + +extern zend_module_entry session_module_entry; +#define phpext_session_ptr &session_module_entry + +#ifdef ZTS +#define PS(v) ZEND_TSRMG(ps_globals_id, php_ps_globals *, v) +#ifdef COMPILE_DL_SESSION +ZEND_TSRMLS_CACHE_EXTERN() +#endif +#else +#define PS(v) (ps_globals.v) +#endif + +#define PS_SERIALIZER_ENCODE_ARGS void +#define PS_SERIALIZER_DECODE_ARGS const char *val, size_t vallen + +typedef struct ps_serializer_struct { + const char *name; + zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS); + zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS); +} ps_serializer; + +#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x +#define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x + +#define PS_SERIALIZER_ENCODE_FUNC(x) \ + zend_string *PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS) +#define PS_SERIALIZER_DECODE_FUNC(x) \ + zend_result PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS) + +#define PS_SERIALIZER_FUNCS(x) \ + PS_SERIALIZER_ENCODE_FUNC(x); \ + PS_SERIALIZER_DECODE_FUNC(x) + +#define PS_SERIALIZER_ENTRY(x) \ + { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) } + +/* default create id function */ +PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS); +/* Dummy PS module functions */ +PHPAPI zend_result php_session_validate_sid(PS_VALIDATE_SID_ARGS); +PHPAPI zend_result php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS); + +PHPAPI void session_adapt_url(const char *url, size_t url_len, char **new_url, size_t *new_len); + +PHPAPI zend_result php_session_destroy(void); +PHPAPI void php_add_session_var(zend_string *name); +PHPAPI zval *php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash); +PHPAPI zval *php_get_session_var(zend_string *name); +PHPAPI zval* php_get_session_var_str(const char *name, size_t name_len); + +PHPAPI zend_result php_session_register_module(const ps_module *); + +PHPAPI zend_result php_session_register_serializer(const char *name, + zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS), + zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS)); + +PHPAPI zend_result php_session_start(void); +PHPAPI zend_result php_session_flush(int write); +PHPAPI php_session_status php_get_session_status(void); + +PHPAPI const ps_module *_php_find_ps_module(const char *name); +PHPAPI const ps_serializer *_php_find_ps_serializer(const char *name); + +PHPAPI zend_result php_session_valid_key(const char *key); +PHPAPI zend_result php_session_reset_id(void); + +#define PS_ADD_VARL(name) do { \ + php_add_session_var(name); \ +} while (0) + +#define PS_ADD_VAR(name) PS_ADD_VARL(name) + +#define PS_DEL_VARL(name) do { \ + if (!Z_ISNULL(PS(http_session_vars))) { \ + zend_hash_del(Z_ARRVAL(PS(http_session_vars)), name); \ + } \ +} while (0) + + +#define PS_ENCODE_VARS \ + zend_string *key; \ + zend_ulong num_key; \ + zval *struc; + +#define PS_ENCODE_LOOP(code) do { \ + HashTable *_ht = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))); \ + ZEND_HASH_FOREACH_KEY(_ht, num_key, key) { \ + if (key == NULL) { \ + php_error_docref(NULL, E_WARNING, \ + "Skipping numeric key " ZEND_LONG_FMT, num_key);\ + continue; \ + } \ + if ((struc = php_get_session_var(key))) { \ + code; \ + } \ + } ZEND_HASH_FOREACH_END(); \ +} while(0) + +PHPAPI ZEND_EXTERN_MODULE_GLOBALS(ps) + +void php_session_auto_start(void *data); + +extern PHPAPI zend_class_entry *php_session_class_entry; + +extern PHPAPI zend_class_entry *php_session_iface_entry; + +extern PHPAPI zend_class_entry *php_session_id_iface_entry; + +extern PHPAPI zend_class_entry *php_session_update_timestamp_iface_entry; + +extern PHP_METHOD(SessionHandler, open); +extern PHP_METHOD(SessionHandler, close); +extern PHP_METHOD(SessionHandler, read); +extern PHP_METHOD(SessionHandler, write); +extern PHP_METHOD(SessionHandler, destroy); +extern PHP_METHOD(SessionHandler, gc); +extern PHP_METHOD(SessionHandler, create_sid); + +#endif diff --git a/lang/php85/pkg-descr b/lang/php85/pkg-descr new file mode 100644 index 000000000000..60a2137716fb --- /dev/null +++ b/lang/php85/pkg-descr @@ -0,0 +1,6 @@ +PHP, which stands for "PHP: Hypertext Preprocessor" is a widely-used Open +Source general-purpose scripting language that is especially suited for +Web development and can be embedded into HTML. Its syntax draws upon C, +Java, and Perl, and is easy to learn. The main goal of the language is to +allow web developers to write dynamically generated webpages quickly, but +you can do much more with PHP. diff --git a/lang/php85/pkg-message.mod b/lang/php85/pkg-message.mod new file mode 100644 index 000000000000..8ad98d25b4e6 --- /dev/null +++ b/lang/php85/pkg-message.mod @@ -0,0 +1,24 @@ +****************************************************************************** + +Consider switching to php-fpm and mod_fast_cgi as per Apache httpd project +recommendation. See https://cwiki.apache.org/confluence/display/HTTPD/PHP-FPM + +****************************************************************************** + +If you are building PHP-based ports in poudriere(8) or Synth with ZTS enabled, +add WITH_MPM=event to /etc/make.conf to prevent build failures. + +****************************************************************************** + +Make sure index.php is part of your DirectoryIndex. + +You should add the following to your Apache configuration file: + +<FilesMatch "\.php$"> + SetHandler application/x-httpd-php +</FilesMatch> +<FilesMatch "\.phps$"> + SetHandler application/x-httpd-php-source +</FilesMatch> + +****************************************************************************** diff --git a/lang/php85/pkg-plist b/lang/php85/pkg-plist new file mode 100644 index 000000000000..4ce095d86e09 --- /dev/null +++ b/lang/php85/pkg-plist @@ -0,0 +1,549 @@ +%%CLI%%bin/php +%%CGI%%bin/php-cgi +bin/php-config +%%PHPDBG%%bin/phpdbg +bin/phpize +%%FPM%%sbin/php-fpm +etc/php.conf +etc/php.ini-development +etc/php.ini-production +%%FPM%%@sample etc/php-fpm.conf.default etc/php-fpm.conf +%%FPM%%@sample etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf +include/php/TSRM/TSRM.h +include/php/TSRM/tsrm_win32.h +include/php/Zend/Optimizer/zend_call_graph.h +include/php/Zend/Optimizer/zend_cfg.h +include/php/Zend/Optimizer/zend_dfg.h +include/php/Zend/Optimizer/zend_dump.h +include/php/Zend/Optimizer/zend_func_info.h +include/php/Zend/Optimizer/zend_inference.h +include/php/Zend/Optimizer/zend_optimizer.h +include/php/Zend/Optimizer/zend_ssa.h +include/php/Zend/Optimizer/zend_worklist.h +include/php/Zend/zend.h +include/php/Zend/zend_API.h +include/php/Zend/zend_alloc.h +include/php/Zend/zend_alloc_sizes.h +include/php/Zend/zend_arena.h +include/php/Zend/zend_ast.h +include/php/Zend/zend_atomic.h +include/php/Zend/zend_attributes.h +include/php/Zend/zend_attributes_arginfo.h +include/php/Zend/zend_bitset.h +include/php/Zend/zend_build.h +include/php/Zend/zend_builtin_functions.h +include/php/Zend/zend_builtin_functions_arginfo.h +include/php/Zend/zend_call_stack.h +include/php/Zend/zend_closures.h +include/php/Zend/zend_closures_arginfo.h +include/php/Zend/zend_compile.h +include/php/Zend/zend_config.h +include/php/Zend/zend_config.w32.h +include/php/Zend/zend_constants.h +include/php/Zend/zend_constants_arginfo.h +include/php/Zend/zend_cpuinfo.h +include/php/Zend/zend_dtrace.h +%%DTRACE%%include/php/Zend/zend_dtrace_gen.h +include/php/Zend/zend_enum.h +include/php/Zend/zend_enum_arginfo.h +include/php/Zend/zend_errors.h +include/php/Zend/zend_exceptions.h +include/php/Zend/zend_exceptions_arginfo.h +include/php/Zend/zend_execute.h +include/php/Zend/zend_extensions.h +include/php/Zend/zend_fibers.h +include/php/Zend/zend_fibers_arginfo.h +include/php/Zend/zend_float.h +include/php/Zend/zend_frameless_function.h +include/php/Zend/zend_gc.h +include/php/Zend/zend_gdb.h +include/php/Zend/zend_generators.h +include/php/Zend/zend_generators_arginfo.h +include/php/Zend/zend_globals.h +include/php/Zend/zend_globals_macros.h +include/php/Zend/zend_hash.h +include/php/Zend/zend_highlight.h +include/php/Zend/zend_hrtime.h +include/php/Zend/zend_inheritance.h +include/php/Zend/zend_ini.h +include/php/Zend/zend_ini_parser.h +include/php/Zend/zend_ini_scanner.h +include/php/Zend/zend_ini_scanner_defs.h +include/php/Zend/zend_interfaces.h +include/php/Zend/zend_interfaces_arginfo.h +include/php/Zend/zend_iterators.h +include/php/Zend/zend_language_parser.h +include/php/Zend/zend_language_scanner.h +include/php/Zend/zend_language_scanner_defs.h +include/php/Zend/zend_lazy_objects.h +include/php/Zend/zend_list.h +include/php/Zend/zend_llist.h +include/php/Zend/zend_long.h +include/php/Zend/zend_map_ptr.h +include/php/Zend/zend_max_execution_timer.h +include/php/Zend/zend_mmap.h +include/php/Zend/zend_modules.h +include/php/Zend/zend_multibyte.h +include/php/Zend/zend_multiply.h +include/php/Zend/zend_object_handlers.h +include/php/Zend/zend_objects.h +include/php/Zend/zend_objects_API.h +include/php/Zend/zend_observer.h +include/php/Zend/zend_operators.h +include/php/Zend/zend_portability.h +include/php/Zend/zend_property_hooks.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_simd.h +include/php/Zend/zend_smart_str.h +include/php/Zend/zend_smart_str_public.h +include/php/Zend/zend_smart_string.h +include/php/Zend/zend_smart_string_public.h +include/php/Zend/zend_sort.h +include/php/Zend/zend_stack.h +include/php/Zend/zend_stream.h +include/php/Zend/zend_string.h +include/php/Zend/zend_strtod.h +include/php/Zend/zend_strtod_int.h +include/php/Zend/zend_system_id.h +include/php/Zend/zend_type_info.h +include/php/Zend/zend_types.h +include/php/Zend/zend_variables.h +include/php/Zend/zend_verify_type_inference.h +include/php/Zend/zend_virtual_cwd.h +include/php/Zend/zend_vm.h +include/php/Zend/zend_vm_def.h +include/php/Zend/zend_vm_execute.h +include/php/Zend/zend_vm_handlers.h +include/php/Zend/zend_vm_opcodes.h +include/php/Zend/zend_vm_trace_handlers.h +include/php/Zend/zend_vm_trace_lines.h +include/php/Zend/zend_vm_trace_map.h +include/php/Zend/zend_weakrefs.h +include/php/Zend/zend_weakrefs_arginfo.h +include/php/ext/date/lib/timelib.h +include/php/ext/date/lib/timelib_config.h +include/php/ext/date/php_date.h +include/php/ext/hash/php_hash.h +include/php/ext/hash/php_hash_adler32.h +include/php/ext/hash/php_hash_crc32.h +include/php/ext/hash/php_hash_fnv.h +include/php/ext/hash/php_hash_gost.h +include/php/ext/hash/php_hash_haval.h +include/php/ext/hash/php_hash_joaat.h +include/php/ext/hash/php_hash_md.h +include/php/ext/hash/php_hash_murmur.h +include/php/ext/hash/php_hash_ripemd.h +include/php/ext/hash/php_hash_sha.h +include/php/ext/hash/php_hash_sha3.h +include/php/ext/hash/php_hash_snefru.h +include/php/ext/hash/php_hash_tiger.h +include/php/ext/hash/php_hash_whirlpool.h +include/php/ext/hash/php_hash_xxhash.h +include/php/ext/hash/xxhash/xxhash.h +include/php/ext/json/php_json.h +include/php/ext/json/php_json_parser.h +include/php/ext/json/php_json_scanner.h +include/php/ext/lexbor/core/array.h +include/php/ext/lexbor/core/array_obj.h +include/php/ext/lexbor/core/avl.h +include/php/ext/lexbor/core/base.h +include/php/ext/lexbor/core/bst.h +include/php/ext/lexbor/core/bst_map.h +include/php/ext/lexbor/core/conv.h +include/php/ext/lexbor/core/core.h +include/php/ext/lexbor/core/def.h +include/php/ext/lexbor/core/diyfp.h +include/php/ext/lexbor/core/dobject.h +include/php/ext/lexbor/core/dtoa.h +include/php/ext/lexbor/core/fs.h +include/php/ext/lexbor/core/hash.h +include/php/ext/lexbor/core/in.h +include/php/ext/lexbor/core/lexbor.h +include/php/ext/lexbor/core/mem.h +include/php/ext/lexbor/core/mraw.h +include/php/ext/lexbor/core/perf.h +include/php/ext/lexbor/core/plog.h +include/php/ext/lexbor/core/print.h +include/php/ext/lexbor/core/sbst.h +include/php/ext/lexbor/core/serialize.h +include/php/ext/lexbor/core/shs.h +include/php/ext/lexbor/core/str.h +include/php/ext/lexbor/core/strtod.h +include/php/ext/lexbor/core/str_res.h +include/php/ext/lexbor/core/swar.h +include/php/ext/lexbor/core/types.h +include/php/ext/lexbor/core/utils.h +include/php/ext/lexbor/css/at_rule.h +include/php/ext/lexbor/css/at_rule/const.h +include/php/ext/lexbor/css/at_rule/res.h +include/php/ext/lexbor/css/at_rule/state.h +include/php/ext/lexbor/css/base.h +include/php/ext/lexbor/css/css.h +include/php/ext/lexbor/css/declaration.h +include/php/ext/lexbor/css/property.h +include/php/ext/lexbor/css/property/const.h +include/php/ext/lexbor/css/property/res.h +include/php/ext/lexbor/css/property/state.h +include/php/ext/lexbor/css/rule.h +include/php/ext/lexbor/css/selectors/base.h +include/php/ext/lexbor/css/selectors/pseudo.h +include/php/ext/lexbor/css/selectors/pseudo_const.h +include/php/ext/lexbor/css/selectors/pseudo_res.h +include/php/ext/lexbor/css/selectors/pseudo_state.h +include/php/ext/lexbor/css/selectors/selector.h +include/php/ext/lexbor/css/selectors/selectors.h +include/php/ext/lexbor/css/selectors/state.h +include/php/ext/lexbor/css/state.h +include/php/ext/lexbor/css/stylesheet.h +include/php/ext/lexbor/css/syntax/anb.h +include/php/ext/lexbor/css/syntax/base.h +include/php/ext/lexbor/css/syntax/parser.h +include/php/ext/lexbor/css/syntax/res.h +include/php/ext/lexbor/css/syntax/state.h +include/php/ext/lexbor/css/syntax/state_res.h +include/php/ext/lexbor/css/syntax/syntax.h +include/php/ext/lexbor/css/syntax/token.h +include/php/ext/lexbor/css/syntax/token_res.h +include/php/ext/lexbor/css/syntax/tokenizer.h +include/php/ext/lexbor/css/syntax/tokenizer/error.h +include/php/ext/lexbor/css/unit.h +include/php/ext/lexbor/css/unit/const.h +include/php/ext/lexbor/css/unit/res.h +include/php/ext/lexbor/css/value.h +include/php/ext/lexbor/css/value/const.h +include/php/ext/lexbor/css/value/res.h +include/php/ext/lexbor/dom/interfaces/attr.h +include/php/ext/lexbor/dom/interfaces/attr_const.h +include/php/ext/lexbor/dom/interfaces/attr_res.h +include/php/ext/lexbor/dom/interfaces/cdata_section.h +include/php/ext/lexbor/dom/interfaces/character_data.h +include/php/ext/lexbor/dom/interfaces/comment.h +include/php/ext/lexbor/dom/interfaces/document.h +include/php/ext/lexbor/dom/interfaces/document_fragment.h +include/php/ext/lexbor/dom/interfaces/document_type.h +include/php/ext/lexbor/dom/interfaces/element.h +include/php/ext/lexbor/dom/interfaces/event_target.h +include/php/ext/lexbor/dom/interfaces/processing_instruction.h +include/php/ext/lexbor/dom/interfaces/shadow_root.h +include/php/ext/lexbor/dom/interfaces/text.h +include/php/ext/lexbor/encoding/multi.h +include/php/ext/lexbor/encoding/range.h +include/php/ext/lexbor/encoding/single.h +include/php/ext/lexbor/html/encoding.h +include/php/ext/lexbor/html/html.h +include/php/ext/lexbor/html/interface.h +include/php/ext/lexbor/html/interface_res.h +include/php/ext/lexbor/html/interfaces/anchor_element.h +include/php/ext/lexbor/html/interfaces/area_element.h +include/php/ext/lexbor/html/interfaces/audio_element.h +include/php/ext/lexbor/html/interfaces/base_element.h +include/php/ext/lexbor/html/interfaces/body_element.h +include/php/ext/lexbor/html/interfaces/br_element.h +include/php/ext/lexbor/html/interfaces/button_element.h +include/php/ext/lexbor/html/interfaces/canvas_element.h +include/php/ext/lexbor/html/interfaces/d_list_element.h +include/php/ext/lexbor/html/interfaces/data_element.h +include/php/ext/lexbor/html/interfaces/data_list_element.h +include/php/ext/lexbor/html/interfaces/details_element.h +include/php/ext/lexbor/html/interfaces/dialog_element.h +include/php/ext/lexbor/html/interfaces/directory_element.h +include/php/ext/lexbor/html/interfaces/div_element.h +include/php/ext/lexbor/html/interfaces/document.h +include/php/ext/lexbor/html/interfaces/element.h +include/php/ext/lexbor/html/interfaces/embed_element.h +include/php/ext/lexbor/html/interfaces/field_set_element.h +include/php/ext/lexbor/html/interfaces/font_element.h +include/php/ext/lexbor/html/interfaces/form_element.h +include/php/ext/lexbor/html/interfaces/frame_element.h +include/php/ext/lexbor/html/interfaces/frame_set_element.h +include/php/ext/lexbor/html/interfaces/head_element.h +include/php/ext/lexbor/html/interfaces/heading_element.h +include/php/ext/lexbor/html/interfaces/hr_element.h +include/php/ext/lexbor/html/interfaces/html_element.h +include/php/ext/lexbor/html/interfaces/iframe_element.h +include/php/ext/lexbor/html/interfaces/image_element.h +include/php/ext/lexbor/html/interfaces/input_element.h +include/php/ext/lexbor/html/interfaces/label_element.h +include/php/ext/lexbor/html/interfaces/legend_element.h +include/php/ext/lexbor/html/interfaces/li_element.h +include/php/ext/lexbor/html/interfaces/link_element.h +include/php/ext/lexbor/html/interfaces/map_element.h +include/php/ext/lexbor/html/interfaces/marquee_element.h +include/php/ext/lexbor/html/interfaces/media_element.h +include/php/ext/lexbor/html/interfaces/menu_element.h +include/php/ext/lexbor/html/interfaces/meta_element.h +include/php/ext/lexbor/html/interfaces/meter_element.h +include/php/ext/lexbor/html/interfaces/mod_element.h +include/php/ext/lexbor/html/interfaces/o_list_element.h +include/php/ext/lexbor/html/interfaces/object_element.h +include/php/ext/lexbor/html/interfaces/opt_group_element.h +include/php/ext/lexbor/html/interfaces/option_element.h +include/php/ext/lexbor/html/interfaces/output_element.h +include/php/ext/lexbor/html/interfaces/paragraph_element.h +include/php/ext/lexbor/html/interfaces/param_element.h +include/php/ext/lexbor/html/interfaces/picture_element.h +include/php/ext/lexbor/html/interfaces/pre_element.h +include/php/ext/lexbor/html/interfaces/progress_element.h +include/php/ext/lexbor/html/interfaces/quote_element.h +include/php/ext/lexbor/html/interfaces/script_element.h +include/php/ext/lexbor/html/interfaces/select_element.h +include/php/ext/lexbor/html/interfaces/slot_element.h +include/php/ext/lexbor/html/interfaces/source_element.h +include/php/ext/lexbor/html/interfaces/span_element.h +include/php/ext/lexbor/html/interfaces/style_element.h +include/php/ext/lexbor/html/interfaces/table_caption_element.h +include/php/ext/lexbor/html/interfaces/table_cell_element.h +include/php/ext/lexbor/html/interfaces/table_col_element.h +include/php/ext/lexbor/html/interfaces/table_element.h +include/php/ext/lexbor/html/interfaces/table_row_element.h +include/php/ext/lexbor/html/interfaces/table_section_element.h +include/php/ext/lexbor/html/interfaces/template_element.h +include/php/ext/lexbor/html/interfaces/text_area_element.h +include/php/ext/lexbor/html/interfaces/time_element.h +include/php/ext/lexbor/html/interfaces/title_element.h +include/php/ext/lexbor/html/interfaces/track_element.h +include/php/ext/lexbor/html/interfaces/u_list_element.h +include/php/ext/lexbor/html/interfaces/unknown_element.h +include/php/ext/lexbor/html/interfaces/video_element.h +include/php/ext/lexbor/html/interfaces/window.h +include/php/ext/lexbor/html/node.h +include/php/ext/lexbor/html/serialize.h +include/php/ext/lexbor/html/style.h +include/php/ext/lexbor/html/tag.h +include/php/ext/lexbor/html/tag_res.h +include/php/ext/lexbor/html/token.h +include/php/ext/lexbor/html/token_attr.h +include/php/ext/lexbor/html/tokenizer.h +include/php/ext/lexbor/html/tokenizer/error.h +include/php/ext/lexbor/html/tokenizer/res.h +include/php/ext/lexbor/html/tokenizer/state.h +include/php/ext/lexbor/html/tokenizer/state_comment.h +include/php/ext/lexbor/html/tokenizer/state_doctype.h +include/php/ext/lexbor/html/tokenizer/state_rawtext.h +include/php/ext/lexbor/html/tokenizer/state_rcdata.h +include/php/ext/lexbor/html/tokenizer/state_script.h +include/php/ext/lexbor/html/tree/active_formatting.h +include/php/ext/lexbor/html/tree/error.h +include/php/ext/lexbor/html/tree/insertion_mode.h +include/php/ext/lexbor/html/tree/open_elements.h +include/php/ext/lexbor/html/tree/template_insertion.h +include/php/ext/lexbor/html/tree_res.h +include/php/ext/lexbor/ns/base.h +include/php/ext/lexbor/ns/ns.h +include/php/ext/lexbor/ns/res.h +include/php/ext/lexbor/punycode/base.h +include/php/ext/lexbor/punycode/punycode.h +include/php/ext/lexbor/selectors/selectors.h +include/php/ext/lexbor/tag/base.h +include/php/ext/lexbor/tag/res.h +include/php/ext/lexbor/tag/tag.h +include/php/ext/lexbor/unicode/base.h +include/php/ext/lexbor/unicode/idna.h +include/php/ext/lexbor/unicode/res.h +include/php/ext/lexbor/unicode/unicode.h +include/php/ext/lexbor/url/base.h +include/php/ext/lexbor/url/url.h +include/php/ext/lexbor/css/log.h +include/php/ext/lexbor/css/parser.h +include/php/ext/lexbor/dom/base.h +include/php/ext/lexbor/dom/collection.h +include/php/ext/lexbor/dom/dom.h +include/php/ext/lexbor/dom/exception.h +include/php/ext/lexbor/dom/interface.h +include/php/ext/lexbor/dom/interfaces/node.h +include/php/ext/lexbor/encoding/base.h +include/php/ext/lexbor/encoding/const.h +include/php/ext/lexbor/encoding/decode.h +include/php/ext/lexbor/encoding/encode.h +include/php/ext/lexbor/encoding/encoding.h +include/php/ext/lexbor/encoding/res.h +include/php/ext/lexbor/html/base.h +include/php/ext/lexbor/html/parser.h +include/php/ext/lexbor/html/tree.h +include/php/ext/lexbor/ns/const.h +include/php/ext/lexbor/php_lexbor.h +include/php/ext/lexbor/selectors/base.h +include/php/ext/lexbor/tag/const.h +include/php/ext/libxml/php_libxml.h +%%MYSQLND%%include/php/ext/mysqlnd/config-win.h +%%MYSQLND%%include/php/ext/mysqlnd/mysql_float_to_double.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_alloc.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_auth.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_block_alloc.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_charset.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_commands.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_connection.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_debug.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_enum_n_def.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_ext_plugin.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_libmysql_compat.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_plugin.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_portability.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_priv.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_protocol_frame_codec.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_ps.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_read_buffer.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_result.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_result_meta.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_reverse_api.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_statistics.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_structs.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_vio.h +%%MYSQLND%%include/php/ext/mysqlnd/mysqlnd_wireprotocol.h +%%MYSQLND%%include/php/ext/mysqlnd/php_mysqlnd.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/config.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_internal.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_intmodedep.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h +%%BUNDLED_PCRE%%include/php/ext/pcre/pcre2lib/pcre2_ucp.h +include/php/ext/pcre/php_pcre.h +include/php/ext/random/php_random.h +include/php/ext/random/php_random_csprng.h +include/php/ext/random/php_random_uint128.h +include/php/ext/spl/php_spl.h +include/php/ext/spl/spl_array.h +include/php/ext/spl/spl_directory.h +include/php/ext/spl/spl_dllist.h +include/php/ext/spl/spl_exceptions.h +include/php/ext/spl/spl_fixedarray.h +include/php/ext/spl/spl_functions.h +include/php/ext/spl/spl_heap.h +include/php/ext/spl/spl_iterators.h +include/php/ext/spl/spl_observer.h +include/php/ext/standard/base64.h +include/php/ext/standard/basic_functions.h +include/php/ext/standard/basic_functions_arginfo.h +include/php/ext/standard/crc32.h +include/php/ext/standard/crc32_x86.h +include/php/ext/standard/credits.h +include/php/ext/standard/credits_ext.h +include/php/ext/standard/credits_sapi.h +include/php/ext/standard/crypt_blowfish.h +include/php/ext/standard/crypt_freesec.h +include/php/ext/standard/css.h +include/php/ext/standard/dir_arginfo.h +include/php/ext/standard/dl.h +include/php/ext/standard/dl_arginfo.h +include/php/ext/standard/exec.h +include/php/ext/standard/file.h +include/php/ext/standard/file_arginfo.h +include/php/ext/standard/flock_compat.h +include/php/ext/standard/fsock.h +include/php/ext/standard/head.h +include/php/ext/standard/html.h +include/php/ext/standard/html_tables.h +include/php/ext/standard/info.h +include/php/ext/standard/md5.h +include/php/ext/standard/pack.h +include/php/ext/standard/pageinfo.h +include/php/ext/standard/password_arginfo.h +include/php/ext/standard/php_array.h +include/php/ext/standard/php_assert.h +include/php/ext/standard/php_browscap.h +include/php/ext/standard/php_crypt.h +include/php/ext/standard/php_crypt_r.h +include/php/ext/standard/php_dir.h +include/php/ext/standard/php_dir_int.h +include/php/ext/standard/php_dns.h +include/php/ext/standard/php_ext_syslog.h +include/php/ext/standard/php_filestat.h +include/php/ext/standard/php_fopen_wrappers.h +include/php/ext/standard/php_http.h +include/php/ext/standard/php_image.h +include/php/ext/standard/php_incomplete_class.h +include/php/ext/standard/php_mail.h +include/php/ext/standard/php_math.h +include/php/ext/standard/php_math_round_mode.h +include/php/ext/standard/php_net.h +include/php/ext/standard/php_password.h +include/php/ext/standard/php_smart_string.h +include/php/ext/standard/php_smart_string_public.h +include/php/ext/standard/php_standard.h +include/php/ext/standard/php_string.h +include/php/ext/standard/php_uuencode.h +include/php/ext/standard/php_var.h +include/php/ext/standard/php_versioning.h +include/php/ext/standard/proc_open.h +include/php/ext/standard/quot_print.h +include/php/ext/standard/scanf.h +include/php/ext/standard/sha1.h +include/php/ext/standard/streamsfuncs.h +include/php/ext/standard/url.h +include/php/ext/standard/url_scanner_ex.h +include/php/ext/standard/user_filters_arginfo.h +include/php/ext/standard/winver.h +include/php/ext/uri/php_lexbor.h +include/php/ext/uri/php_uri.h +include/php/ext/uri/php_uri_common.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/charclass.h +include/php/main/fastcgi.h +include/php/main/fopen_wrappers.h +include/php/main/http_status_codes.h +include/php/main/main_arginfo.h +include/php/main/php.h +include/php/main/php_compat.h +include/php/main/php_config.h +include/php/main/php_content_types.h +include/php/main/php_getopt.h +include/php/main/php_glob.h +include/php/main/php_globals.h +include/php/main/php_ini.h +include/php/main/php_ini_builder.h +include/php/main/php_main.h +include/php/main/php_memory_streams.h +include/php/main/php_network.h +include/php/main/php_odbc_utils.h +include/php/main/php_open_temporary_file.h +include/php/main/php_output.h +include/php/main/php_reentrancy.h +include/php/main/php_scandir.h +include/php/main/php_streams.h +include/php/main/php_syslog.h +include/php/main/php_ticks.h +include/php/main/php_variables.h +include/php/main/php_version.h +include/php/main/rfc1867.h +include/php/main/snprintf.h +include/php/main/spprintf.h +include/php/main/streams/php_stream_context.h +include/php/main/streams/php_stream_filter_api.h +include/php/main/streams/php_stream_glob_wrapper.h +include/php/main/streams/php_stream_mmap.h +include/php/main/streams/php_stream_plain_wrapper.h +include/php/main/streams/php_stream_transport.h +include/php/main/streams/php_stream_userspace.h +include/php/main/streams/php_streams_int.h +include/php/main/streams/userspace_arginfo.h +%%CLI%%include/php/sapi/cli/cli.h +%%EMBED%%include/php/sapi/embed/php_embed.h +%%EMBED%%lib/libphp.so +lib/php/build/Makefile.global +lib/php/build/ax_check_compile_flag.m4 +lib/php/build/ax_gcc_func_attribute.m4 +lib/php/build/config.guess +lib/php/build/config.sub +lib/php/build/gen_stub.php +lib/php/build/libtool.m4 +lib/php/build/ltmain.sh +lib/php/build/php.m4 +lib/php/build/php_cxx_compile_stdcxx.m4 +lib/php/build/phpize.m4 +lib/php/build/pkg.m4 +lib/php/build/run-tests.php +lib/php/build/shtool +%%CGI%%share/man/man1/php-cgi.1.gz +share/man/man1/php-config.1.gz +%%CLI%%share/man/man1/php.1.gz +%%PHPDBG%%share/man/man1/phpdbg.1.gz +share/man/man1/phpize.1.gz +%%FPM%%share/man/man8/php-fpm.8.gz +%%FPM%%share/php/fpm/status.html diff --git a/lang/php85/pkg-plist.mod b/lang/php85/pkg-plist.mod new file mode 100644 index 000000000000..8939be6d3d5e --- /dev/null +++ b/lang/php85/pkg-plist.mod @@ -0,0 +1,3 @@ +%%APACHEMODDIR%%/%%AP_MODULE%% +@postexec %D/sbin/apxs -e -a -n %%AP_NAME%% %f +@preunexec %D/sbin/apxs -e -A -n %%AP_NAME%% %f diff --git a/math/Makefile b/math/Makefile index ce2fd3a4e380..27f892d913e1 100644 --- a/math/Makefile +++ b/math/Makefile @@ -895,6 +895,8 @@ SUBDIR += php83-gmp SUBDIR += php84-bcmath SUBDIR += php84-gmp + SUBDIR += php85-bcmath + SUBDIR += php85-gmp SUBDIR += physcalc SUBDIR += picosat SUBDIR += piranha diff --git a/math/php85-bcmath/Makefile b/math/php85-bcmath/Makefile new file mode 100644 index 000000000000..57963b7ed57d --- /dev/null +++ b/math/php85-bcmath/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= math + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -bcmath + +.include "${MASTERDIR}/Makefile" diff --git a/math/php85-gmp/Makefile b/math/php85-gmp/Makefile new file mode 100644 index 000000000000..88a9d5f7b23b --- /dev/null +++ b/math/php85-gmp/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= math + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -gmp + +.include "${MASTERDIR}/Makefile" diff --git a/misc/Makefile b/misc/Makefile index d8c592931cf5..e7ca2e0d10cd 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -397,6 +397,7 @@ SUBDIR += php82-calendar SUBDIR += php83-calendar SUBDIR += php84-calendar + SUBDIR += php85-calendar SUBDIR += pinfo SUBDIR += pipe SUBDIR += posixtestsuite diff --git a/misc/php85-calendar/Makefile b/misc/php85-calendar/Makefile new file mode 100644 index 000000000000..3aa1dd0de3d9 --- /dev/null +++ b/misc/php85-calendar/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= misc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -calendar + +.include "${MASTERDIR}/Makefile" diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile index e37c9e89abf8..8b01d855b206 100644 --- a/net-mgmt/Makefile +++ b/net-mgmt/Makefile @@ -303,6 +303,7 @@ SUBDIR += php82-snmp SUBDIR += php83-snmp SUBDIR += php84-snmp + SUBDIR += php85-snmp SUBDIR += phpfpm_exporter SUBDIR += phpipam SUBDIR += ping_exporter diff --git a/net-mgmt/php85-snmp/Makefile b/net-mgmt/php85-snmp/Makefile new file mode 100644 index 000000000000..9bfc0601bbb2 --- /dev/null +++ b/net-mgmt/php85-snmp/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= net-mgmt + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -snmp + +.include "${MASTERDIR}/Makefile" diff --git a/net/Makefile b/net/Makefile index a37359abd0ff..3c536bc5411a 100644 --- a/net/Makefile +++ b/net/Makefile @@ -1006,6 +1006,9 @@ SUBDIR += php84-ldap SUBDIR += php84-soap SUBDIR += php84-sockets + SUBDIR += php85-ldap + SUBDIR += php85-soap + SUBDIR += php85-sockets SUBDIR += phpldapadmin SUBDIR += pimcommon SUBDIR += pimd diff --git a/net/php85-ldap/Makefile b/net/php85-ldap/Makefile new file mode 100644 index 000000000000..04c2b828b3ac --- /dev/null +++ b/net/php85-ldap/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= net + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -ldap + +.include "${MASTERDIR}/Makefile" diff --git a/net/php85-soap/Makefile b/net/php85-soap/Makefile new file mode 100644 index 000000000000..8ec7899a8d51 --- /dev/null +++ b/net/php85-soap/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= net + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -soap + +.include "${MASTERDIR}/Makefile" diff --git a/net/php85-sockets/Makefile b/net/php85-sockets/Makefile new file mode 100644 index 000000000000..5a88299c5324 --- /dev/null +++ b/net/php85-sockets/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= net + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -sockets + +.include "${MASTERDIR}/Makefile" diff --git a/security/Makefile b/security/Makefile index fd6b6dafa7ea..af7067f0ae26 100644 --- a/security/Makefile +++ b/security/Makefile @@ -838,6 +838,8 @@ SUBDIR += php83-sodium SUBDIR += php84-filter SUBDIR += php84-sodium + SUBDIR += php85-filter + SUBDIR += php85-sodium SUBDIR += picocrypt SUBDIR += picosha2 SUBDIR += pidgin-encryption diff --git a/security/php85-filter/Makefile b/security/php85-filter/Makefile new file mode 100644 index 000000000000..1d4737ba51c9 --- /dev/null +++ b/security/php85-filter/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= security + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -filter + +.include "${MASTERDIR}/Makefile" diff --git a/security/php85-sodium/Makefile b/security/php85-sodium/Makefile new file mode 100644 index 000000000000..aff3c5308849 --- /dev/null +++ b/security/php85-sodium/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= security + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -sodium + +.include "${MASTERDIR}/Makefile" diff --git a/sysutils/Makefile b/sysutils/Makefile index 5798873e3860..1fc727d0f973 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -941,6 +941,8 @@ SUBDIR += php83-posix SUBDIR += php84-fileinfo SUBDIR += php84-posix + SUBDIR += php85-fileinfo + SUBDIR += php85-posix SUBDIR += phybs SUBDIR += pick SUBDIR += pidof diff --git a/sysutils/php85-fileinfo/Makefile b/sysutils/php85-fileinfo/Makefile new file mode 100644 index 000000000000..f7b8fe1610ee --- /dev/null +++ b/sysutils/php85-fileinfo/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= sysutils + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -fileinfo + +.include "${MASTERDIR}/Makefile" diff --git a/sysutils/php85-posix/Makefile b/sysutils/php85-posix/Makefile new file mode 100644 index 000000000000..8fdc5be62d79 --- /dev/null +++ b/sysutils/php85-posix/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= sysutils + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -posix + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/Makefile b/textproc/Makefile index d826579ba5e4..cd5de1cc450d 100644 --- a/textproc/Makefile +++ b/textproc/Makefile @@ -1292,6 +1292,14 @@ SUBDIR += php84-xmlreader SUBDIR += php84-xmlwriter SUBDIR += php84-xsl + SUBDIR += php85-ctype + SUBDIR += php85-dom + SUBDIR += php85-enchant + SUBDIR += php85-simplexml + SUBDIR += php85-xml + SUBDIR += php85-xmlreader + SUBDIR += php85-xmlwriter + SUBDIR += php85-xsl SUBDIR += pict SUBDIR += po4a SUBDIR += pod2mdoc diff --git a/textproc/php85-ctype/Makefile b/textproc/php85-ctype/Makefile new file mode 100644 index 000000000000..ba75413cef31 --- /dev/null +++ b/textproc/php85-ctype/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -ctype + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-dom/Makefile b/textproc/php85-dom/Makefile new file mode 100644 index 000000000000..6f1e31e35297 --- /dev/null +++ b/textproc/php85-dom/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -dom + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-dom/files/patch-lexbor_selectors-adapted_selectors.c b/textproc/php85-dom/files/patch-lexbor_selectors-adapted_selectors.c new file mode 100644 index 000000000000..2d91481ddf5c --- /dev/null +++ b/textproc/php85-dom/files/patch-lexbor_selectors-adapted_selectors.c @@ -0,0 +1,11 @@ +--- lexbor/selectors-adapted/selectors.c.orig 2025-07-02 12:25:47 UTC ++++ lexbor/selectors-adapted/selectors.c +@@ -13,7 +13,7 @@ + #include <Zend/zend_API.h> + #include <php.h> + +-#include "ext/dom/lexbor/selectors-adapted/selectors.h" ++#include "selectors.h" + #include "../../namespace_compat.h" + #include "../../domexception.h" + #include "../../php_dom.h" diff --git a/textproc/php85-dom/files/patch-parentnode_css__selectors.c b/textproc/php85-dom/files/patch-parentnode_css__selectors.c new file mode 100644 index 000000000000..65f4d3670ad0 --- /dev/null +++ b/textproc/php85-dom/files/patch-parentnode_css__selectors.c @@ -0,0 +1,11 @@ +--- parentnode/css_selectors.c.orig 2025-07-02 12:24:35 UTC ++++ parentnode/css_selectors.c +@@ -23,7 +23,7 @@ + #include "../php_dom.h" + #include "../obj_map.h" + +-#include "ext/lexbor/lexbor/css/parser.h" ++#include "lexbor/css/parser.h" + #include "../lexbor/selectors-adapted/selectors.h" + + // TODO: optimization idea: cache the parsed selectors in an LRU fashion? diff --git a/textproc/php85-enchant/Makefile b/textproc/php85-enchant/Makefile new file mode 100644 index 000000000000..5442d92eab5b --- /dev/null +++ b/textproc/php85-enchant/Makefile @@ -0,0 +1,12 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -enchant + +post-patch: + ${REINPLACE_CMD} -e \ + 's|#include "../spl/spl_exceptions.h"|#include "ext/spl/spl_exceptions.h"|g' \ + ${WRKSRC}/enchant.c + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-simplexml/Makefile b/textproc/php85-simplexml/Makefile new file mode 100644 index 000000000000..5375e538bfc0 --- /dev/null +++ b/textproc/php85-simplexml/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -simplexml + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-xml/Makefile b/textproc/php85-xml/Makefile new file mode 100644 index 000000000000..e03512ead698 --- /dev/null +++ b/textproc/php85-xml/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -xml + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-xml/files/patch-compat.c b/textproc/php85-xml/files/patch-compat.c new file mode 100644 index 000000000000..0752de99e2da --- /dev/null +++ b/textproc/php85-xml/files/patch-compat.c @@ -0,0 +1,13 @@ +--- compat.c.orig 2023-06-06 15:54:29 UTC ++++ compat.c +@@ -14,6 +14,10 @@ + +----------------------------------------------------------------------+ + */ + ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ + #include "php.h" + #if defined(HAVE_LIBXML) && (defined(HAVE_XML) || defined(HAVE_XMLRPC)) && !defined(HAVE_LIBEXPAT) + #include "expat_compat.h" diff --git a/textproc/php85-xmlreader/Makefile b/textproc/php85-xmlreader/Makefile new file mode 100644 index 000000000000..988b8e5628fd --- /dev/null +++ b/textproc/php85-xmlreader/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -xmlreader + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-xmlwriter/Makefile b/textproc/php85-xmlwriter/Makefile new file mode 100644 index 000000000000..6bd6d56be8e6 --- /dev/null +++ b/textproc/php85-xmlwriter/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -xmlwriter + +.include "${MASTERDIR}/Makefile" diff --git a/textproc/php85-xsl/Makefile b/textproc/php85-xsl/Makefile new file mode 100644 index 000000000000..2b2ba0361e4c --- /dev/null +++ b/textproc/php85-xsl/Makefile @@ -0,0 +1,12 @@ +CATEGORIES= textproc + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -xsl + +post-patch: + ${REINPLACE_CMD} -e \ + 's|#include "../dom/xml_common.h"|#include "ext/dom/xml_common.h"|g' \ + ${WRKSRC}/php_xsl.h + +.include "${MASTERDIR}/Makefile" diff --git a/www/Makefile b/www/Makefile index 3c9c9ad97cb4..78d0f62ce623 100644 --- a/www/Makefile +++ b/www/Makefile @@ -425,6 +425,7 @@ SUBDIR += mod_php82 SUBDIR += mod_php83 SUBDIR += mod_php84 + SUBDIR += mod_php85 SUBDIR += mod_proctitle SUBDIR += mod_qos SUBDIR += mod_realdoc @@ -1433,6 +1434,9 @@ SUBDIR += php84-opcache SUBDIR += php84-session SUBDIR += php84-tidy + SUBDIR += php85-opcache + SUBDIR += php85-session + SUBDIR += php85-tidy SUBDIR += phpbb3 SUBDIR += phpfpmtop SUBDIR += phpgroupware diff --git a/www/mod_php85/Makefile b/www/mod_php85/Makefile new file mode 100644 index 000000000000..5e3e5b870340 --- /dev/null +++ b/www/mod_php85/Makefile @@ -0,0 +1,18 @@ +CATEGORIES= www devel +PKGNAMEPREFIX= mod_ + +MAINTAINER= bofh@FreeBSD.org + +CONFLICTS_INSTALL= mod_php[0-9][0-9] + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +OPTIONS_DEFINE= AP2FILTER +OPTIONS_EXCLUDE= CGI CLI EMBED FPM + +AP2FILTER_DESC= Use Apache 2.x filter interface (experimental) + +AP2FILTER_CONFIGURE_ON=--with-apxs2filter=${APXS} +AP2FILTER_CONFIGURE_OFF=--with-apxs2=${APXS} + +.include "${MASTERDIR}/Makefile" diff --git a/www/php85-opcache/Makefile b/www/php85-opcache/Makefile new file mode 100644 index 000000000000..edb61940538a --- /dev/null +++ b/www/php85-opcache/Makefile @@ -0,0 +1,9 @@ +CATEGORIES= www + +PKGNAMESUFFIX= -opcache + +USES= php:zend,noflavors + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +.include "${MASTERDIR}/Makefile" diff --git a/www/php85-session/Makefile b/www/php85-session/Makefile new file mode 100644 index 000000000000..cedce7a3b4f9 --- /dev/null +++ b/www/php85-session/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= www + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -session + +.include "${MASTERDIR}/Makefile" diff --git a/www/php85-tidy/Makefile b/www/php85-tidy/Makefile new file mode 100644 index 000000000000..9b47a56ccce6 --- /dev/null +++ b/www/php85-tidy/Makefile @@ -0,0 +1,7 @@ +CATEGORIES= www + +MASTERDIR= ${.CURDIR}/../../lang/php85 + +PKGNAMESUFFIX= -tidy + +.include "${MASTERDIR}/Makefile" |