diff --git a/UPGRADING b/UPGRADING index e284abc9709..2107a074725 100644 --- a/UPGRADING +++ b/UPGRADING @@ -871,6 +871,9 @@ PHP 8.4 UPGRADE NOTES $domain name is empty or too long, and if $variant is not INTL_IDNA_VARIANT_UTS46. +- LibXML: + . The libxml extension now requires at least libxml2 2.9.4. + - MBString: . Unicode data tables have been updated to Unicode 15.1. diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index a23cdcf401c..85b0da4cf00 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -178,7 +178,7 @@ PHP 8.4 INTERNALS UPGRADE NOTES - M4 macro PHP_EVAL_LIBLINE got a new 3rd argument to override the ext_shared checks. - M4 macro PHP_SETUP_LIBXML doesn't define the redundant HAVE_LIBXML symbol - anymore. + anymore and requires at least libxml2 2.9.4. - M4 macro PHP_SETUP_ICONV doesn't define the HAVE_ICONV symbol anymore. - M4 macro PHP_OUTPUT is obsolete (use AC_CONFIG_FILES). - M4 macro PHP_PROG_SETUP now accepts an argument to set the minimum required diff --git a/build/php.m4 b/build/php.m4 index 4c4ba44708b..442779ba734 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -1912,7 +1912,7 @@ dnl dnl Common setup macro for libxml. dnl AC_DEFUN([PHP_SETUP_LIBXML], [ - PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= 2.9.0]) + PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= 2.9.4]) PHP_EVAL_INCLINE([$LIBXML_CFLAGS]) PHP_EVAL_LIBLINE([$LIBXML_LIBS], [$1]) $2 diff --git a/ext/libxml/config.w32 b/ext/libxml/config.w32 index 416ae1f1366..d836f0efcba 100644 --- a/ext/libxml/config.w32 +++ b/ext/libxml/config.w32 @@ -9,13 +9,19 @@ if (PHP_LIBXML == "yes") { CHECK_HEADER_ADD_INCLUDE("libxml/tree.h", "CFLAGS_LIBXML", PHP_PHP_BUILD + "\\include\\libxml2") && ADD_EXTENSION_DEP('libxml', 'iconv')) { - EXTENSION("libxml", "libxml.c mime_sniff.c", false /* never shared */, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); - AC_DEFINE("HAVE_LIBXML", 1, "Define to 1 if the PHP extension 'libxml' is available."); - ADD_FLAG("CFLAGS_LIBXML", "/D LIBXML_STATIC /D LIBXML_STATIC_FOR_DLL /D HAVE_WIN32_THREADS "); - if (!PHP_LIBXML_SHARED) { - ADD_DEF_FILE("ext\\libxml\\php_libxml2.def"); + if (GREP_HEADER("libxml/xmlversion.h", "#define\\s+LIBXML_VERSION\\s+(\\d+)", PHP_PHP_BUILD + "\\include\\libxml2") && + +RegExp.$1 >= 20904) { + + EXTENSION("libxml", "libxml.c mime_sniff.c", false /* never shared */, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); + AC_DEFINE("HAVE_LIBXML", 1, "Define to 1 if the PHP extension 'libxml' is available."); + ADD_FLAG("CFLAGS_LIBXML", "/D LIBXML_STATIC /D LIBXML_STATIC_FOR_DLL /D HAVE_WIN32_THREADS "); + if (!PHP_LIBXML_SHARED) { + ADD_DEF_FILE("ext\\libxml\\php_libxml2.def"); + } + PHP_INSTALL_HEADERS("ext/libxml", "php_libxml.h"); + } else { + WARNING("libxml support can't be enabled, libxml version >= 2.9.4 required"); } - PHP_INSTALL_HEADERS("ext/libxml", "php_libxml.h"); } else { WARNING("libxml support can't be enabled, iconv or libxml are missing") PHP_LIBXML = "no"