From c891bb332af826e14cfb28614b1b9fedf80ec47d Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 11 Sep 2020 14:46:18 +0200 Subject: update to 8.0.0beta3 bump ABI/API versions drop xmlrpc extension json is now build statically use system nikic/php-parser if available to generate C headers from PHP stub switch from "runselftest" option to bcond_without tests enchant: use libenchant-2 instead of libenchant rename 15-php.conf to 20-php.conf to ensure load order oci8 version is now 3.0.0 --- 10-opcache.ini | 5 + failed.txt | 4 +- php-7.0.10-datetests.patch | 97 ------- php-7.2.0-includedir.patch | 2 +- php-7.2.0-libdb.patch | 92 ------ php-7.3.3-systzdata-v18.patch | 656 ----------------------------------------- php-7.4.0-datetests.patch | 98 +++++++ php-7.4.0-embed.patch | 24 -- php-7.4.0-libdb.patch | 92 ++++++ php-7.4.8-phpinfo.patch | 76 ----- php-8.0.0-embed.patch | 25 ++ php-8.0.0-parser.patch | 16 + php-8.0.0-phpinfo.patch | 44 +++ php-8.0.0-systzdata-v19.patch | 657 ++++++++++++++++++++++++++++++++++++++++++ php.conf | 2 +- php.conf2 | 12 +- php.ini | 84 +++--- php.modconf | 8 +- php.ztsmodconf | 7 +- php80.spec | 226 +++++++-------- 20 files changed, 1097 insertions(+), 1130 deletions(-) delete mode 100644 php-7.0.10-datetests.patch delete mode 100644 php-7.2.0-libdb.patch delete mode 100644 php-7.3.3-systzdata-v18.patch create mode 100644 php-7.4.0-datetests.patch delete mode 100644 php-7.4.0-embed.patch create mode 100644 php-7.4.0-libdb.patch delete mode 100644 php-7.4.8-phpinfo.patch create mode 100644 php-8.0.0-embed.patch create mode 100644 php-8.0.0-parser.patch create mode 100644 php-8.0.0-phpinfo.patch create mode 100644 php-8.0.0-systzdata-v19.patch diff --git a/10-opcache.ini b/10-opcache.ini index 8c5db66..a5be172 100644 --- a/10-opcache.ini +++ b/10-opcache.ini @@ -42,6 +42,11 @@ opcache.enable_cli=1 ; size of the optimized code. ;opcache.save_comments=1 +; If enabled, compilation warnings (including notices and deprecations) will +; be recorded and replayed each time a file is included. Otherwise, compilation +; warnings will only be emitted when the file is first cached. +;opcache.record_warnings=0 + ; Allow file existence override (file_exists, etc.) performance feature. ;opcache.enable_file_override=0 diff --git a/failed.txt b/failed.txt index 2a1c7c7..12dfa1a 100644 --- a/failed.txt +++ b/failed.txt @@ -1,9 +1,9 @@ -===== 7.4.10 (2020-09-03) +===== 8.0.0beta3 (2020-09-03) $ grep -ar 'Tests failed' /var/lib/mock/{fc,el}*/build.log /var/lib/mock/el7x/build.log:Tests failed : 0 -/var/lib/mock/el8x74/build.log:Tests failed : 1 +/var/lib/mock/el8x80/build.log:Tests failed : 1 /var/lib/mock/fc31x/build.log:Tests failed : 0 /var/lib/mock/fc32x/build.log:Tests failed : 0 /var/lib/mock/fc33x/build.log:Tests failed : 0 diff --git a/php-7.0.10-datetests.patch b/php-7.0.10-datetests.patch deleted file mode 100644 index fc42326..0000000 --- a/php-7.0.10-datetests.patch +++ /dev/null @@ -1,97 +0,0 @@ ---- a/ext/date/tests/bug66985.phpt 2014-10-30 07:32:03.297693403 +0100 -+++ b/ext/date/tests/bug66985.phpt 2014-10-30 07:32:45.138877977 +0100 -@@ -3,7 +3,7 @@ - --FILE-- - 3 -- [timezone] => Factory --) --DateTimeZone Object --( - [timezone_type] => 3 - [timezone] => GB-Eire - ) -diff -up ./ext/date/tests/strtotime3-64bit.phpt.datetests ./ext/date/tests/strtotime3-64bit.phpt ---- ./ext/date/tests/strtotime3-64bit.phpt.datetests 2016-07-21 02:23:03.000000000 +0200 -+++ ./ext/date/tests/strtotime3-64bit.phpt 2016-07-26 07:39:45.713272263 +0200 -@@ -44,7 +44,7 @@ foreach ($strs as $str) { - } - - ?> ----EXPECT-- -+--EXPECTF-- - bool(false) - bool(false) - string(31) "Thu, 15 Jun 2006 00:00:00 +0100" -@@ -53,7 +53,7 @@ bool(false) - string(31) "Fri, 16 Jun 2006 23:49:12 +0100" - bool(false) - string(31) "Fri, 16 Jun 2006 02:22:00 +0100" --string(31) "Sun, 16 Jun 0222 02:22:00 -0036" -+string(31) "Sun, 16 Jun 0222 02:22:00 %s" - string(31) "Fri, 16 Jun 2006 02:22:33 +0100" - bool(false) - string(31) "Tue, 02 Mar 2004 00:00:00 +0000" -diff -up ./ext/date/tests/bug33414-2.phpt.old ./ext/date/tests/bug33414-2.phpt ---- ./ext/date/tests/bug33414-2.phpt.old 2017-04-25 15:47:21.675700587 +0200 -+++ ./ext/date/tests/bug33414-2.phpt 2017-04-25 15:57:14.034681111 +0200 -@@ -74,10 +74,10 @@ $strtotime_tstamp = strtotime("next Frid - print "result=".date("l Y-m-d H:i:s T I", $strtotime_tstamp)."\n"; - print "wanted=Friday 00:00:00\n\n"; - ?> ----EXPECT-- -+--EXPECTF-- - TZ=Pacific/Rarotonga - wrong day. --tStamp=Thursday 1970-01-01 17:17:17 -1030 0 --result=Tuesday 1970-01-06 00:00:00 -1030 0 -+tStamp=Thursday 1970-01-01 17:17:17 %s -+result=Tuesday 1970-01-06 00:00:00 %s - wanted=Tuesday 00:00:00 - - TZ=Atlantic/South_Georgia - wrong day. -@@ -91,13 +91,13 @@ result=Monday 2005-04-04 00:00:00 EDT 1 - wanted=Monday 00:00:00 - - TZ=Pacific/Enderbury - wrong day, off by 2 days. --tStamp=Thursday 1970-01-01 17:17:17 -12 0 --result=Monday 1970-01-05 00:00:00 -12 0 -+tStamp=Thursday 1970-01-01 17:17:17 %s -+result=Monday 1970-01-05 00:00:00 %s - wanted=Monday 00:00:00 - - TZ=Pacific/Kiritimati - wrong day, off by 2 days. --tStamp=Thursday 1970-01-01 17:17:17 -1040 0 --result=Monday 1970-01-05 00:00:00 -1040 0 -+tStamp=Thursday 1970-01-01 17:17:17 %s -+result=Monday 1970-01-05 00:00:00 %s - wanted=Monday 00:00:00 - - TZ=America/Managua - wrong day. -@@ -106,13 +106,13 @@ result=Tuesday 2005-04-12 00:00:00 CDT 1 - wanted=Tuesday 00:00:00 - - TZ=Pacific/Pitcairn - wrong day. --tStamp=Thursday 1970-01-01 17:17:17 -0830 0 --result=Wednesday 1970-01-07 00:00:00 -0830 0 -+tStamp=Thursday 1970-01-01 17:17:17 %s -+result=Wednesday 1970-01-07 00:00:00 %s - wanted=Wednesday 00:00:00 - - TZ=Pacific/Fakaofo - wrong day. --tStamp=Thursday 1970-01-01 17:17:17 -11 0 --result=Saturday 1970-01-03 00:00:00 -11 0 -+tStamp=Thursday 1970-01-01 17:17:17 %s -+result=Saturday 1970-01-03 00:00:00 %s - wanted=Saturday 00:00:00 - - TZ=Pacific/Johnston - wrong day. diff --git a/php-7.2.0-includedir.patch b/php-7.2.0-includedir.patch index 6d9a871..7a42cd6 100644 --- a/php-7.2.0-includedir.patch +++ b/php-7.2.0-includedir.patch @@ -5,7 +5,7 @@ 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=.:$EXPANDED_PEAR_INSTALLDIR:${EXPANDED_DATADIR}/php ++INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR:${EXPANDED_DATADIR}/php:/usr/share/pear:/usr/share/php exec_prefix=$old_exec_prefix libdir=$old_libdir diff --git a/php-7.2.0-libdb.patch b/php-7.2.0-libdb.patch deleted file mode 100644 index ca36d1a..0000000 --- a/php-7.2.0-libdb.patch +++ /dev/null @@ -1,92 +0,0 @@ -diff -up php-7.2.0alpha0/ext/dba/config.m4.libdb php-7.2.0alpha0/ext/dba/config.m4 ---- php-7.2.0alpha0/ext/dba/config.m4.libdb 2017-05-29 08:56:06.000000000 +0200 -+++ php-7.2.0alpha0/ext/dba/config.m4 2017-05-29 09:13:52.014823282 +0200 -@@ -346,61 +346,13 @@ if test "$PHP_DB4" != "no"; then - dbdp4="/usr/local/BerkeleyDB.4." - dbdp5="/usr/local/BerkeleyDB.5." - for i in $PHP_DB4 ${dbdp5}1 ${dbdp5}0 ${dbdp4}8 ${dbdp4}7 ${dbdp4}6 ${dbdp4}5 ${dbdp4}4 ${dbdp4}3 ${dbdp4}2 ${dbdp4}1 ${dbdp}0 /usr/local /usr; do -- if test -f "$i/db5/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/db5/db.h -- break -- elif test -f "$i/db4/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/db4/db.h -- break -- elif test -f "$i/include/db5.3/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db5.3/db.h -- break -- elif test -f "$i/include/db5.1/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db5.1/db.h -- break -- elif test -f "$i/include/db5.0/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db5.0/db.h -- break -- elif test -f "$i/include/db4.8/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.8/db.h -- break -- elif test -f "$i/include/db4.7/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.7/db.h -- break -- elif test -f "$i/include/db4.6/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.6/db.h -- break -- elif test -f "$i/include/db4.5/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.5/db.h -- break -- elif test -f "$i/include/db4/db.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4/db.h -- break -- elif test -f "$i/include/db/db4.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db/db4.h -- break -- elif test -f "$i/include/db4.h"; then -- THIS_PREFIX=$i -- THIS_INCLUDE=$i/include/db4.h -- break -- elif test -f "$i/include/db.h"; then -+ if test -f "$i/include/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db.h - break - fi - done -- PHP_DBA_DB_CHECK(4, db-5.3 db-5.1 db-5.0 db-4.8 db-4.7 db-4.6 db-4.5 db-4.4 db-4.3 db-4.2 db-4.1 db-4.0 db-4 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) -+ PHP_DBA_DB_CHECK(4, db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) - fi - PHP_DBA_STD_RESULT(db4,Berkeley DB4) - -diff -up php-7.2.0alpha0/ext/dba/dba.c.libdb php-7.2.0alpha0/ext/dba/dba.c ---- php-7.2.0alpha0/ext/dba/dba.c.libdb 2017-05-29 09:16:15.736628202 +0200 -+++ php-7.2.0alpha0/ext/dba/dba.c 2017-05-29 09:16:20.494654746 +0200 -@@ -53,6 +53,10 @@ - #include "php_tcadb.h" - #include "php_lmdb.h" - -+#ifdef DB4_INCLUDE_FILE -+#include DB4_INCLUDE_FILE -+#endif -+ - /* {{{ arginfo */ - ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_popen, 0, 0, 2) - ZEND_ARG_INFO(0, path) -@@ -558,6 +562,10 @@ PHP_MINFO_FUNCTION(dba) - - php_info_print_table_start(); - php_info_print_table_row(2, "DBA support", "enabled"); -+#ifdef DB_VERSION_STRING -+ php_info_print_table_row(2, "libdb header version", DB_VERSION_STRING); -+ php_info_print_table_row(2, "libdb library version", db_version(NULL, NULL, NULL)); -+#endif - if (handlers.s) { - smart_str_0(&handlers); - php_info_print_table_row(2, "Supported handlers", ZSTR_VAL(handlers.s)); diff --git a/php-7.3.3-systzdata-v18.patch b/php-7.3.3-systzdata-v18.patch deleted file mode 100644 index eac3cc3..0000000 --- a/php-7.3.3-systzdata-v18.patch +++ /dev/null @@ -1,656 +0,0 @@ -# License: MIT -# http://opensource.org/licenses/MIT - -Add support for use of the system timezone database, rather -than embedding a copy. Discussed upstream but was not desired. - -History: -r18: adapt for autotool change in 7.3.3RC1 -r17: adapt for timelib 2018.01 (in 7.3.2RC1) -r16: adapt for timelib 2017.06 (in 7.2.3RC1) -r15: adapt for timelib 2017.05beta7 (in 7.2.0RC1) -r14: improve check for valid tz file -r13: adapt for upstream changes to use PHP allocator -r12: adapt for upstream changes for new zic -r11: use canonical names to avoid more case sensitivity issues - round lat/long from zone.tab towards zero per builtin db -r10: make timezone case insensitive -r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold) -r8: fix compile error without --with-system-tzdata configured -r7: improve check for valid timezone id to exclude directories -r6: fix fd leak in r5, fix country code/BC flag use in - timezone_identifiers_list() using system db, - fix use of PECL timezonedb to override system db, -r5: reverts addition of "System/Localtime" fake tzname. - updated for 5.3.0, parses zone.tab to pick up mapping between - timezone name, country code and long/lat coords -r4: added "System/Localtime" tzname which uses /etc/localtime -r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert) -r2: add filesystem trawl to set up name alias index -r1: initial revision - -diff -up php-7.3.3RC1/ext/date/config0.m4.systzdata php-7.3.3RC1/ext/date/config0.m4 ---- php-7.3.3RC1/ext/date/config0.m4.systzdata 2019-02-19 14:57:51.314601701 +0100 -+++ php-7.3.3RC1/ext/date/config0.m4 2019-02-19 14:58:29.050812587 +0100 -@@ -9,6 +9,19 @@ io.h - dnl Check for strtoll, atoll - AC_CHECK_FUNCS(strtoll atoll) - -+PHP_ARG_WITH(system-tzdata, for use of system timezone data, -+[ --with-system-tzdata[=DIR] to specify use of system timezone data], -+no, no) -+ -+if test "$PHP_SYSTEM_TZDATA" != "no"; then -+ AC_DEFINE(HAVE_SYSTEM_TZDATA, 1, [Define if system timezone data is used]) -+ -+ if test "$PHP_SYSTEM_TZDATA" != "yes"; then -+ AC_DEFINE_UNQUOTED(HAVE_SYSTEM_TZDATA_PREFIX, "$PHP_SYSTEM_TZDATA", -+ [Define for location of system timezone data]) -+ fi -+fi -+ - PHP_DATE_CFLAGS="-I@ext_builddir@/lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DHAVE_TIMELIB_CONFIG_H=1" - timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c - lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c lib/parse_iso_intervals.c lib/interval.c" -diff -up php-7.3.3RC1/ext/date/lib/parse_tz.c.systzdata php-7.3.3RC1/ext/date/lib/parse_tz.c ---- php-7.3.3RC1/ext/date/lib/parse_tz.c.systzdata 2019-02-19 12:18:27.000000000 +0100 -+++ php-7.3.3RC1/ext/date/lib/parse_tz.c 2019-02-19 14:57:20.397428931 +0100 -@@ -25,8 +25,21 @@ - #include "timelib.h" - #include "timelib_private.h" - -+#ifdef HAVE_SYSTEM_TZDATA -+#include -+#include -+#include -+#include -+#include -+ -+#include "php_scandir.h" -+ -+#else - #define TIMELIB_SUPPORTS_V2DATA - #include "timezonedb.h" -+#endif -+ -+#include - - #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) - # if defined(__LITTLE_ENDIAN__) -@@ -87,6 +100,11 @@ static int read_php_preamble(const unsig - { - uint32_t version; - -+ if (memcmp(*tzf, "TZif", 4) == 0) { -+ *tzf += 20; -+ return 0; -+ } -+ - /* read ID */ - version = (*tzf)[3] - '0'; - *tzf += 4; -@@ -411,7 +429,429 @@ void timelib_dump_tzinfo(timelib_tzinfo - } - } - --static int seek_to_tz_position(const unsigned char **tzf, char *timezone, const timelib_tzdb *tzdb) -+#ifdef HAVE_SYSTEM_TZDATA -+ -+#ifdef HAVE_SYSTEM_TZDATA_PREFIX -+#define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX -+#else -+#define ZONEINFO_PREFIX "/usr/share/zoneinfo" -+#endif -+ -+/* System timezone database pointer. */ -+static const timelib_tzdb *timezonedb_system; -+ -+/* Hash table entry for the cache of the zone.tab mapping table. */ -+struct location_info { -+ char code[2]; -+ double latitude, longitude; -+ char name[64]; -+ char *comment; -+ struct location_info *next; -+}; -+ -+/* Cache of zone.tab. */ -+static struct location_info **system_location_table; -+ -+/* Size of the zone.tab hash table; a random-ish prime big enough to -+ * prevent too many collisions. */ -+#define LOCINFO_HASH_SIZE (1021) -+ -+/* Compute a case insensitive hash of str */ -+static uint32_t tz_hash(const char *str) -+{ -+ const unsigned char *p = (const unsigned char *)str; -+ uint32_t hash = 5381; -+ int c; -+ -+ while ((c = tolower(*p++)) != '\0') { -+ hash = (hash << 5) ^ hash ^ c; -+ } -+ -+ return hash % LOCINFO_HASH_SIZE; -+} -+ -+/* Parse an ISO-6709 date as used in zone.tab. Returns end of the -+ * parsed string on success, or NULL on parse error. On success, -+ * writes the parsed number to *result. */ -+static char *parse_iso6709(char *p, double *result) -+{ -+ double v, sign; -+ char *pend; -+ size_t len; -+ -+ if (*p == '+') -+ sign = 1.0; -+ else if (*p == '-') -+ sign = -1.0; -+ else -+ return NULL; -+ -+ p++; -+ for (pend = p; *pend >= '0' && *pend <= '9'; pend++) -+ ;; -+ -+ /* Annoying encoding used by zone.tab has no decimal point, so use -+ * the length to determine the format: -+ * -+ * 4 = DDMM -+ * 5 = DDDMM -+ * 6 = DDMMSS -+ * 7 = DDDMMSS -+ */ -+ len = pend - p; -+ if (len < 4 || len > 7) { -+ return NULL; -+ } -+ -+ /* p => [D]DD */ -+ v = (p[0] - '0') * 10.0 + (p[1] - '0'); -+ p += 2; -+ if (len == 5 || len == 7) -+ v = v * 10.0 + (*p++ - '0'); -+ /* p => MM[SS] */ -+ v += (10.0 * (p[0] - '0') -+ + p[1] - '0') / 60.0; -+ p += 2; -+ /* p => [SS] */ -+ if (len > 5) { -+ v += (10.0 * (p[0] - '0') -+ + p[1] - '0') / 3600.0; -+ p += 2; -+ } -+ -+ /* Round to five decimal place, not because it's a good idea, -+ * but, because the builtin data uses rounded data, so, match -+ * that. */ -+ *result = trunc(v * sign * 100000.0) / 100000.0; -+ -+ return p; -+} -+ -+/* This function parses the zone.tab file to build up the mapping of -+ * timezone to country code and geographic location, and returns a -+ * hash table. The hash table is indexed by the function: -+ * -+ * tz_hash(timezone-name) -+ */ -+static struct location_info **create_location_table(void) -+{ -+ struct location_info **li, *i; -+ char zone_tab[PATH_MAX]; -+ char line[512]; -+ FILE *fp; -+ -+ strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab); -+ -+ fp = fopen(zone_tab, "r"); -+ if (!fp) { -+ return NULL; -+ } -+ -+ li = calloc(LOCINFO_HASH_SIZE, sizeof *li); -+ -+ while (fgets(line, sizeof line, fp)) { -+ char *p = line, *code, *name, *comment; -+ uint32_t hash; -+ double latitude, longitude; -+ -+ while (isspace(*p)) -+ p++; -+ -+ if (*p == '#' || *p == '\0' || *p == '\n') -+ continue; -+ -+ if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t') -+ continue; -+ -+ /* code => AA */ -+ code = p; -+ p[2] = 0; -+ p += 3; -+ -+ /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */ -+ p = parse_iso6709(p, &latitude); -+ if (!p) { -+ continue; -+ } -+ p = parse_iso6709(p, &longitude); -+ if (!p) { -+ continue; -+ } -+ -+ if (!p || *p != '\t') { -+ continue; -+ } -+ -+ /* name = string */ -+ name = ++p; -+ while (*p != '\t' && *p && *p != '\n') -+ p++; -+ -+ *p++ = '\0'; -+ -+ /* comment = string */ -+ comment = p; -+ while (*p != '\t' && *p && *p != '\n') -+ p++; -+ -+ if (*p == '\n' || *p == '\t') -+ *p = '\0'; -+ -+ hash = tz_hash(name); -+ i = malloc(sizeof *i); -+ memcpy(i->code, code, 2); -+ strncpy(i->name, name, sizeof i->name); -+ i->comment = strdup(comment); -+ i->longitude = longitude; -+ i->latitude = latitude; -+ i->next = li[hash]; -+ li[hash] = i; -+ /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */ -+ } -+ -+ fclose(fp); -+ -+ return li; -+} -+ -+/* Return location info from hash table, using given timezone name. -+ * Returns NULL if the name could not be found. */ -+const struct location_info *find_zone_info(struct location_info **li, -+ const char *name) -+{ -+ uint32_t hash = tz_hash(name); -+ const struct location_info *l; -+ -+ if (!li) { -+ return NULL; -+ } -+ -+ for (l = li[hash]; l; l = l->next) { -+ if (timelib_strcasecmp(l->name, name) == 0) -+ return l; -+ } -+ -+ return NULL; -+} -+ -+/* Filter out some non-tzdata files and the posix/right databases, if -+ * present. */ -+static int index_filter(const struct dirent *ent) -+{ -+ return strcmp(ent->d_name, ".") != 0 -+ && strcmp(ent->d_name, "..") != 0 -+ && strcmp(ent->d_name, "posix") != 0 -+ && strcmp(ent->d_name, "posixrules") != 0 -+ && strcmp(ent->d_name, "right") != 0 -+ && strstr(ent->d_name, ".list") == NULL -+ && strstr(ent->d_name, ".tab") == NULL; -+} -+ -+static int sysdbcmp(const void *first, const void *second) -+{ -+ const timelib_tzdb_index_entry *alpha = first, *beta = second; -+ -+ return timelib_strcasecmp(alpha->id, beta->id); -+} -+ -+ -+/* Create the zone identifier index by trawling the filesystem. */ -+static void create_zone_index(timelib_tzdb *db) -+{ -+ size_t dirstack_size, dirstack_top; -+ size_t index_size, index_next; -+ timelib_tzdb_index_entry *db_index; -+ char **dirstack; -+ -+ /* LIFO stack to hold directory entries to scan; each slot is a -+ * directory name relative to the zoneinfo prefix. */ -+ dirstack_size = 32; -+ dirstack = malloc(dirstack_size * sizeof *dirstack); -+ dirstack_top = 1; -+ dirstack[0] = strdup(""); -+ -+ /* Index array. */ -+ index_size = 64; -+ db_index = malloc(index_size * sizeof *db_index); -+ index_next = 0; -+ -+ do { -+ struct dirent **ents; -+ char name[PATH_MAX], *top; -+ int count; -+ -+ /* Pop the top stack entry, and iterate through its contents. */ -+ top = dirstack[--dirstack_top]; -+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top); -+ -+ count = php_scandir(name, &ents, index_filter, php_alphasort); -+ -+ while (count > 0) { -+ struct stat st; -+ const char *leaf = ents[count - 1]->d_name; -+ -+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s", -+ top, leaf); -+ -+ if (strlen(name) && stat(name, &st) == 0) { -+ /* Name, relative to the zoneinfo prefix. */ -+ const char *root = top; -+ -+ if (root[0] == '/') root++; -+ -+ snprintf(name, sizeof name, "%s%s%s", root, -+ *root ? "/": "", leaf); -+ -+ if (S_ISDIR(st.st_mode)) { -+ if (dirstack_top == dirstack_size) { -+ dirstack_size *= 2; -+ dirstack = realloc(dirstack, -+ dirstack_size * sizeof *dirstack); -+ } -+ dirstack[dirstack_top++] = strdup(name); -+ } -+ else { -+ if (index_next == index_size) { -+ index_size *= 2; -+ db_index = realloc(db_index, -+ index_size * sizeof *db_index); -+ } -+ -+ db_index[index_next++].id = strdup(name); -+ } -+ } -+ -+ free(ents[--count]); -+ } -+ -+ if (count != -1) free(ents); -+ free(top); -+ } while (dirstack_top); -+ -+ qsort(db_index, index_next, sizeof *db_index, sysdbcmp); -+ -+ db->index = db_index; -+ db->index_size = index_next; -+ -+ free(dirstack); -+} -+ -+#define FAKE_HEADER "1234\0??\1??" -+#define FAKE_UTC_POS (7 - 4) -+ -+/* Create a fake data segment for database 'sysdb'. */ -+static void fake_data_segment(timelib_tzdb *sysdb, -+ struct location_info **info) -+{ -+ size_t n; -+ char *data, *p; -+ -+ data = malloc(3 * sysdb->index_size + 7); -+ -+ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1); -+ -+ for (n = 0; n < sysdb->index_size; n++) { -+ const struct location_info *li; -+ timelib_tzdb_index_entry *ent; -+ -+ ent = (timelib_tzdb_index_entry *)&sysdb->index[n]; -+ -+ /* Lookup the timezone name in the hash table. */ -+ if (strcmp(ent->id, "UTC") == 0) { -+ ent->pos = FAKE_UTC_POS; -+ continue; -+ } -+ -+ li = find_zone_info(info, ent->id); -+ if (li) { -+ /* If found, append the BC byte and the -+ * country code; set the position for this -+ * section of timezone data. */ -+ ent->pos = (p - data) - 4; -+ *p++ = '\1'; -+ *p++ = li->code[0]; -+ *p++ = li->code[1]; -+ } -+ else { -+ /* If not found, the timezone data can -+ * point at the header. */ -+ ent->pos = 0; -+ } -+ } -+ -+ sysdb->data = (unsigned char *)data; -+} -+ -+/* Returns true if the passed-in stat structure describes a -+ * probably-valid timezone file. */ -+static int is_valid_tzfile(const struct stat *st, int fd) -+{ -+ if (fd) { -+ char buf[20]; -+ if (read(fd, buf, 20)!=20) { -+ return 0; -+ } -+ lseek(fd, SEEK_SET, 0); -+ if (memcmp(buf, "TZif", 4)) { -+ return 0; -+ } -+ } -+ return S_ISREG(st->st_mode) && st->st_size > 20; -+} -+ -+/* To allow timezone names to be used case-insensitively, find the -+ * canonical name for this timezone, if possible. */ -+static const char *canonical_tzname(const char *timezone) -+{ -+ if (timezonedb_system) { -+ timelib_tzdb_index_entry *ent, lookup; -+ -+ lookup.id = (char *)timezone; -+ -+ ent = bsearch(&lookup, timezonedb_system->index, -+ timezonedb_system->index_size, sizeof lookup, -+ sysdbcmp); -+ if (ent) { -+ return ent->id; -+ } -+ } -+ -+ return timezone; -+} -+ -+/* Return the mmap()ed tzfile if found, else NULL. On success, the -+ * length of the mapped data is placed in *length. */ -+static char *map_tzfile(const char *timezone, size_t *length) -+{ -+ char fname[PATH_MAX]; -+ struct stat st; -+ char *p; -+ int fd; -+ -+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { -+ return NULL; -+ } -+ -+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); -+ -+ fd = open(fname, O_RDONLY); -+ if (fd == -1) { -+ return NULL; -+ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) { -+ close(fd); -+ return NULL; -+ } -+ -+ *length = st.st_size; -+ p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); -+ close(fd); -+ -+ return p != MAP_FAILED ? p : NULL; -+} -+ -+#endif -+ -+static int inmem_seek_to_tz_position(const unsigned char **tzf, char *timezone, const timelib_tzdb *tzdb) - { - int left = 0, right = tzdb->index_size - 1; - -@@ -437,9 +877,48 @@ static int seek_to_tz_position(const uns - return 0; - } - -+static int seek_to_tz_position(const unsigned char **tzf, char *timezone, -+ char **map, size_t *maplen, -+ const timelib_tzdb *tzdb) -+{ -+#ifdef HAVE_SYSTEM_TZDATA -+ if (tzdb == timezonedb_system) { -+ char *orig; -+ -+ orig = map_tzfile(timezone, maplen); -+ if (orig == NULL) { -+ return 0; -+ } -+ -+ (*tzf) = (unsigned char *)orig; -+ *map = orig; -+ return 1; -+ } -+ else -+#endif -+ { -+ return inmem_seek_to_tz_position(tzf, timezone, tzdb); -+ } -+} -+ - const timelib_tzdb *timelib_builtin_db(void) - { -+#ifdef HAVE_SYSTEM_TZDATA -+ if (timezonedb_system == NULL) { -+ timelib_tzdb *tmp = malloc(sizeof *tmp); -+ -+ tmp->version = "0.system"; -+ tmp->data = NULL; -+ create_zone_index(tmp); -+ system_location_table = create_location_table(); -+ fake_data_segment(tmp, system_location_table); -+ timezonedb_system = tmp; -+ } -+ -+ return timezonedb_system; -+#else - return &timezonedb_builtin; -+#endif - } - - const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count) -@@ -451,7 +930,30 @@ const timelib_tzdb_index_entry *timelib_ - int timelib_timezone_id_is_valid(char *timezone, const timelib_tzdb *tzdb) - { - const unsigned char *tzf; -- return (seek_to_tz_position(&tzf, timezone, tzdb)); -+ -+#ifdef HAVE_SYSTEM_TZDATA -+ if (tzdb == timezonedb_system) { -+ char fname[PATH_MAX]; -+ struct stat st; -+ -+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { -+ return 0; -+ } -+ -+ if (system_location_table) { -+ if (find_zone_info(system_location_table, timezone) != NULL) { -+ /* found in cache */ -+ return 1; -+ } -+ } -+ -+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); -+ -+ return stat(fname, &st) == 0 && is_valid_tzfile(&st, 0); -+ } -+#endif -+ -+ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb)); - } - - static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz) -@@ -493,12 +995,14 @@ static timelib_tzinfo* timelib_tzinfo_ct - timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb, int *error_code) - { - const unsigned char *tzf; -+ char *memmap = NULL; -+ size_t maplen; - timelib_tzinfo *tmp; - int version; - int transitions_result, types_result; - unsigned int type; /* TIMELIB_TZINFO_PHP or TIMELIB_TZINFO_ZONEINFO */ - -- if (seek_to_tz_position(&tzf, timezone, tzdb)) { -+ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) { - tmp = timelib_tzinfo_ctor(timezone); - - version = read_preamble(&tzf, tmp, &type); -@@ -537,11 +1041,36 @@ timelib_tzinfo *timelib_parse_tzfile(cha - } - skip_posix_string(&tzf, tmp); - -+#ifdef HAVE_SYSTEM_TZDATA -+ if (memmap) { -+ const struct location_info *li; -+ -+ /* TZif-style - grok the location info from the system database, -+ * if possible. */ -+ -+ if ((li = find_zone_info(system_location_table, timezone)) != NULL) { -+ tmp->location.comments = timelib_strdup(li->comment); -+ strncpy(tmp->location.country_code, li->code, 2); -+ tmp->location.longitude = li->longitude; -+ tmp->location.latitude = li->latitude; -+ tmp->bc = 1; -+ } -+ else { -+ set_default_location_and_comments(&tzf, tmp); -+ } -+ -+ /* Now done with the mmap segment - discard it. */ -+ munmap(memmap, maplen); -+ } else { -+#endif - if (type == TIMELIB_TZINFO_PHP) { - read_location(&tzf, tmp); - } else { - set_default_location_and_comments(&tzf, tmp); - } -+#ifdef HAVE_SYSTEM_TZDATA -+ } -+#endif - } else { - *error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE; - tmp = NULL; diff --git a/php-7.4.0-datetests.patch b/php-7.4.0-datetests.patch new file mode 100644 index 0000000..8c437e5 --- /dev/null +++ b/php-7.4.0-datetests.patch @@ -0,0 +1,98 @@ +diff -up ./ext/date/tests/bug33414-2.phpt.datetests ./ext/date/tests/bug33414-2.phpt +--- ./ext/date/tests/bug33414-2.phpt.datetests 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/date/tests/bug33414-2.phpt 2020-04-09 14:40:00.809433489 +0200 +@@ -74,10 +74,10 @@ $strtotime_tstamp = strtotime("next Frid + print "result=".date("l Y-m-d H:i:s T I", $strtotime_tstamp)."\n"; + print "wanted=Friday 00:00:00\n\n"; + ?> +---EXPECT-- ++--EXPECTF-- + TZ=Pacific/Rarotonga - wrong day. +-tStamp=Thursday 1970-01-01 17:17:17 -1030 0 +-result=Tuesday 1970-01-06 00:00:00 -1030 0 ++tStamp=Thursday 1970-01-01 17:17:17 %s ++result=Tuesday 1970-01-06 00:00:00 %s + wanted=Tuesday 00:00:00 + + TZ=Atlantic/South_Georgia - wrong day. +@@ -91,13 +91,13 @@ result=Monday 2005-04-04 00:00:00 EDT 1 + wanted=Monday 00:00:00 + + TZ=Pacific/Enderbury - wrong day, off by 2 days. +-tStamp=Thursday 1970-01-01 17:17:17 -12 0 +-result=Monday 1970-01-05 00:00:00 -12 0 ++tStamp=Thursday 1970-01-01 17:17:17 %s ++result=Monday 1970-01-05 00:00:00 %s + wanted=Monday 00:00:00 + + TZ=Pacific/Kiritimati - wrong day, off by 2 days. +-tStamp=Thursday 1970-01-01 17:17:17 -1040 0 +-result=Monday 1970-01-05 00:00:00 -1040 0 ++tStamp=Thursday 1970-01-01 17:17:17 %s ++result=Monday 1970-01-05 00:00:00 %s + wanted=Monday 00:00:00 + + TZ=America/Managua - wrong day. +@@ -106,13 +106,13 @@ result=Tuesday 2005-04-12 00:00:00 CDT 1 + wanted=Tuesday 00:00:00 + + TZ=Pacific/Pitcairn - wrong day. +-tStamp=Thursday 1970-01-01 17:17:17 -0830 0 +-result=Wednesday 1970-01-07 00:00:00 -0830 0 ++tStamp=Thursday 1970-01-01 17:17:17 %s ++result=Wednesday 1970-01-07 00:00:00 %s + wanted=Wednesday 00:00:00 + + TZ=Pacific/Fakaofo - wrong day. +-tStamp=Thursday 1970-01-01 17:17:17 -11 0 +-result=Saturday 1970-01-03 00:00:00 -11 0 ++tStamp=Thursday 1970-01-01 17:17:17 %s ++result=Saturday 1970-01-03 00:00:00 %s + wanted=Saturday 00:00:00 + + TZ=Pacific/Johnston - wrong day. +diff -up ./ext/date/tests/bug66985.phpt.datetests ./ext/date/tests/bug66985.phpt +--- ./ext/date/tests/bug66985.phpt.datetests 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/date/tests/bug66985.phpt 2020-04-09 14:40:37.099288185 +0200 +@@ -3,7 +3,7 @@ Bug #66985 (Some timezones are no longer + --FILE-- + 3 +- [timezone] => Factory +-) +-DateTimeZone Object +-( + [timezone_type] => 3 + [timezone] => GB-Eire + ) +diff -up ./ext/date/tests/strtotime3-64bit.phpt.datetests ./ext/date/tests/strtotime3-64bit.phpt +--- ./ext/date/tests/strtotime3-64bit.phpt.datetests 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/date/tests/strtotime3-64bit.phpt 2020-04-09 14:40:00.809433489 +0200 +@@ -44,7 +44,7 @@ foreach ($strs as $str) { + } + + ?> +---EXPECT-- ++--EXPECTF-- + bool(false) + bool(false) + string(31) "Thu, 15 Jun 2006 00:00:00 +0100" +@@ -53,7 +53,7 @@ bool(false) + string(31) "Fri, 16 Jun 2006 23:49:12 +0100" + bool(false) + string(31) "Fri, 16 Jun 2006 02:22:00 +0100" +-string(31) "Sun, 16 Jun 0222 02:22:00 -0036" ++string(31) "Sun, 16 Jun 0222 02:22:00 %s" + string(31) "Fri, 16 Jun 2006 02:22:33 +0100" + bool(false) + string(31) "Tue, 02 Mar 2004 00:00:00 +0000" diff --git a/php-7.4.0-embed.patch b/php-7.4.0-embed.patch deleted file mode 100644 index f7a9aaa..0000000 --- a/php-7.4.0-embed.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- php-5.6.3/sapi/embed/config.m4.embed -+++ php-5.6.3/sapi/embed/config.m4 -@@ -11,7 +11,8 @@ if test "$PHP_EMBED" != "no"; then - case "$PHP_EMBED" in - yes|shared) - PHP_EMBED_TYPE=shared -- INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(prefix)/lib; \$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)\$(prefix)/lib" -+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -release \$(PHP_MAJOR_VERSION).\$(PHP_MINOR_VERSION)" -+ INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(libdir); \$(LIBTOOL) --mode=install \$(INSTALL) -m 0755 \$(OVERALL_TARGET) \$(INSTALL_ROOT)\$(libdir)" - ;; - static) - PHP_EMBED_TYPE=static -diff -up php-5.5.30/scripts/php-config.in.old php-5.5.30/scripts/php-config.in ---- php-5.5.30/scripts/php-config.in.old 2015-10-19 15:17:31.944747715 +0200 -+++ php-5.5.30/scripts/php-config.in 2015-10-19 15:17:58.278858083 +0200 -@@ -18,7 +18,7 @@ exe_extension="@EXEEXT@" - php_cli_binary=NONE - php_cgi_binary=NONE - configure_options="@CONFIGURE_OPTIONS@" --php_sapis="@PHP_INSTALLED_SAPIS@" -+php_sapis="apache2handler litespeed fpm phpdbg @PHP_INSTALLED_SAPIS@" - ini_dir="@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@" - ini_path="@EXPANDED_PHP_CONFIG_FILE_PATH@" - diff --git a/php-7.4.0-libdb.patch b/php-7.4.0-libdb.patch new file mode 100644 index 0000000..d7c6289 --- /dev/null +++ b/php-7.4.0-libdb.patch @@ -0,0 +1,92 @@ +diff -up ./ext/dba/config.m4.libdb ./ext/dba/config.m4 +--- ./ext/dba/config.m4.libdb 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/dba/config.m4 2020-04-09 14:35:08.208605065 +0200 +@@ -375,61 +375,13 @@ if test "$PHP_DB4" != "no"; then + dbdp4="/usr/local/BerkeleyDB.4." + dbdp5="/usr/local/BerkeleyDB.5." + for i in $PHP_DB4 ${dbdp5}1 ${dbdp5}0 ${dbdp4}8 ${dbdp4}7 ${dbdp4}6 ${dbdp4}5 ${dbdp4}4 ${dbdp4}3 ${dbdp4}2 ${dbdp4}1 ${dbdp}0 /usr/local /usr; do +- if test -f "$i/db5/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/db5/db.h +- break +- elif test -f "$i/db4/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/db4/db.h +- break +- elif test -f "$i/include/db5.3/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db5.3/db.h +- break +- elif test -f "$i/include/db5.1/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db5.1/db.h +- break +- elif test -f "$i/include/db5.0/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db5.0/db.h +- break +- elif test -f "$i/include/db4.8/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.8/db.h +- break +- elif test -f "$i/include/db4.7/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.7/db.h +- break +- elif test -f "$i/include/db4.6/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.6/db.h +- break +- elif test -f "$i/include/db4.5/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.5/db.h +- break +- elif test -f "$i/include/db4/db.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4/db.h +- break +- elif test -f "$i/include/db/db4.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db/db4.h +- break +- elif test -f "$i/include/db4.h"; then +- THIS_PREFIX=$i +- THIS_INCLUDE=$i/include/db4.h +- break +- elif test -f "$i/include/db.h"; then ++ if test -f "$i/include/db.h"; then + THIS_PREFIX=$i + THIS_INCLUDE=$i/include/db.h + break + fi + done +- PHP_DBA_DB_CHECK(4, db-5.3 db-5.1 db-5.0 db-4.8 db-4.7 db-4.6 db-4.5 db-4.4 db-4.3 db-4.2 db-4.1 db-4.0 db-4 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) ++ PHP_DBA_DB_CHECK(4, db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) + fi + PHP_DBA_STD_RESULT(db4,Berkeley DB4) + +diff -up ./ext/dba/dba.c.libdb ./ext/dba/dba.c +--- ./ext/dba/dba.c.libdb 2020-04-09 14:06:11.000000000 +0200 ++++ ./ext/dba/dba.c 2020-04-09 14:36:30.593275190 +0200 +@@ -50,6 +50,10 @@ + #include "php_lmdb.h" + #include "dba_arginfo.h" + ++#ifdef DB4_INCLUDE_FILE ++#include DB4_INCLUDE_FILE ++#endif ++ + PHP_MINIT_FUNCTION(dba); + PHP_MSHUTDOWN_FUNCTION(dba); + PHP_MINFO_FUNCTION(dba); +@@ -459,6 +463,10 @@ PHP_MINFO_FUNCTION(dba) + + php_info_print_table_start(); + php_info_print_table_row(2, "DBA support", "enabled"); ++#ifdef DB_VERSION_STRING ++ php_info_print_table_row(2, "libdb header version", DB_VERSION_STRING); ++ php_info_print_table_row(2, "libdb library version", db_version(NULL, NULL, NULL)); ++#endif + if (handlers.s) { + smart_str_0(&handlers); + php_info_print_table_row(2, "Supported handlers", ZSTR_VAL(handlers.s)); diff --git a/php-7.4.8-phpinfo.patch b/php-7.4.8-phpinfo.patch deleted file mode 100644 index 9b7175e..0000000 --- a/php-7.4.8-phpinfo.patch +++ /dev/null @@ -1,76 +0,0 @@ - -Drop "Configure Command" from phpinfo as it doesn't -provide any useful information. -The available extensions are not related to this command. - -diff -up a/ext/standard/info.c.phpinfo v/ext/standard/info.c ---- a/ext/standard/info.c.phpinfo 2015-08-18 23:39:24.000000000 +0200 -+++ b/ext/standard/info.c 2015-08-22 07:56:18.344761928 +0200 -@@ -809,9 +809,6 @@ PHPAPI void php_print_info(int flag) - #ifdef ARCHITECTURE - php_info_print_table_row(2, "Architecture", ARCHITECTURE); - #endif --#ifdef CONFIGURE_COMMAND -- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND ); --#endif - - if (sapi_module.pretty_name) { - php_info_print_table_row(2, "Server API", sapi_module.pretty_name ); -diff -up a/ext/standard/tests/general_functions/phpinfo.phpt.phpinfo b/ext/standard/tests/general_functions/phpinfo.phpt ---- a/ext/standard/tests/general_functions/phpinfo.phpt.phpinfo 2015-08-18 23:39:22.000000000 +0200 -+++ b/ext/standard/tests/general_functions/phpinfo.phpt 2015-08-22 07:56:18.344761928 +0200 -@@ -20,7 +20,6 @@ PHP Version => %s - - System => %s - Build Date => %s%a --Configure Command => %s - Server API => Command Line Interface - Virtual Directory Support => %s - Configuration File (php.ini) Path => %s - - -Backported from 8.0: - -From ad0d2e438fddc089917e71e5d8909d145db9da8a Mon Sep 17 00:00:00 2001 -From: Remi Collet -Date: Fri, 3 Jul 2020 10:08:09 +0200 -Subject: [PATCH] display info about system used to build and its provider - ---- - configure.ac | 5 +++++ - ext/standard/info.c | 6 ++++++ - 2 files changed, 11 insertions(+) - -diff --git a/configure.ac b/configure.ac -index d9e6329314a3..77f12a55569a 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1328,6 +1328,11 @@ PHP_UNAME=${PHP_UNAME:-$UNAME} - AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output]) - PHP_OS=`uname | xargs` - AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output]) -+PHP_BUILD_SYSTEM=${PHP_BUILD_SYSTEM:-$PHP_UNAME} -+AC_DEFINE_UNQUOTED(PHP_BUILD_SYSTEM,"$PHP_BUILD_SYSTEM",[builder uname output]) -+if test -n "${PHP_BUILD_PROVIDER}"; then -+ AC_DEFINE_UNQUOTED(PHP_BUILD_PROVIDER,"$PHP_BUILD_PROVIDER",[build provider]) -+fi - - PHP_SUBST_OLD(PHP_INSTALLED_SAPIS) - -diff --git a/ext/standard/info.c b/ext/standard/info.c -index 262e95ae2731..f652efd23657 100644 ---- a/ext/standard/info.c -+++ b/ext/standard/info.c -@@ -803,6 +803,12 @@ PHPAPI ZEND_COLD void php_print_info(int flag) - php_info_print_table_start(); - php_info_print_table_row(2, "System", ZSTR_VAL(php_uname)); - php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__); -+#ifdef PHP_BUILD_SYSTEM -+ php_info_print_table_row(2, "Build System", PHP_BUILD_SYSTEM); -+#endif -+#ifdef PHP_BUILD_PROVIDER -+ php_info_print_table_row(2, "Build Provider", PHP_BUILD_PROVIDER); -+#endif - #ifdef COMPILER - php_info_print_table_row(2, "Compiler", COMPILER); - #endif diff --git a/php-8.0.0-embed.patch b/php-8.0.0-embed.patch new file mode 100644 index 0000000..27533ea --- /dev/null +++ b/php-8.0.0-embed.patch @@ -0,0 +1,25 @@ +diff -up ./sapi/embed/config.m4.embed ./sapi/embed/config.m4 +--- ./sapi/embed/config.m4.embed 2020-07-07 13:51:05.879764972 +0200 ++++ ./sapi/embed/config.m4 2020-07-07 13:52:50.128412148 +0200 +@@ -12,7 +12,8 @@ if test "$PHP_EMBED" != "no"; then + yes|shared) + LIBPHP_CFLAGS="-shared" + PHP_EMBED_TYPE=shared +- INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(prefix)/lib; \$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)\$(prefix)/lib" ++ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -release \$(PHP_MAJOR_VERSION).\$(PHP_MINOR_VERSION)" ++ INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(libdir); \$(LIBTOOL) --mode=install \$(INSTALL) -m 0755 \$(OVERALL_TARGET) \$(INSTALL_ROOT)\$(libdir)" + ;; + static) + LIBPHP_CFLAGS="-static" +diff -up ./scripts/php-config.in.embed ./scripts/php-config.in +--- ./scripts/php-config.in.embed 2020-07-07 12:54:42.000000000 +0200 ++++ ./scripts/php-config.in 2020-07-07 13:51:05.880764968 +0200 +@@ -18,7 +18,7 @@ exe_extension="@EXEEXT@" + php_cli_binary=NONE + php_cgi_binary=NONE + configure_options="@CONFIGURE_OPTIONS@" +-php_sapis="@PHP_INSTALLED_SAPIS@" ++php_sapis="apache2handler litespeed fpm phpdbg @PHP_INSTALLED_SAPIS@" + ini_dir="@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@" + ini_path="@EXPANDED_PHP_CONFIG_FILE_PATH@" + diff --git a/php-8.0.0-parser.patch b/php-8.0.0-parser.patch new file mode 100644 index 0000000..f5da3b5 --- /dev/null +++ b/php-8.0.0-parser.patch @@ -0,0 +1,16 @@ +diff -up ./build/gen_stub.php.syslib ./build/gen_stub.php +--- ./build/gen_stub.php.syslib 2020-06-25 08:11:51.782046813 +0200 ++++ ./build/gen_stub.php 2020-06-25 08:13:11.188860368 +0200 +@@ -1075,6 +1075,12 @@ function initPhpParser() { + } + + $isInitialized = true; ++ ++ if (file_exists('/usr/share/php/PhpParser4/autoload.php')) { ++ require_once '/usr/share/php/PhpParser4/autoload.php'; ++ return; ++ } ++ + $version = "4.9.0"; + $phpParserDir = __DIR__ . "/PHP-Parser-$version"; + if (!is_dir($phpParserDir)) { diff --git a/php-8.0.0-phpinfo.patch b/php-8.0.0-phpinfo.patch new file mode 100644 index 0000000..e86af79 --- /dev/null +++ b/php-8.0.0-phpinfo.patch @@ -0,0 +1,44 @@ + +Drop "Configure Command" from phpinfo as it doesn't +provide any useful information. +The available extensions are not related to this command. + +Replace full GCC name by gcc in php -v output + +diff -up ./ext/standard/info.c.phpinfo ./ext/standard/info.c +--- ./ext/standard/info.c.phpinfo 2020-07-21 10:49:31.000000000 +0200 ++++ ./ext/standard/info.c 2020-07-21 11:41:56.295633523 +0200 +@@ -804,9 +804,6 @@ PHPAPI ZEND_COLD void php_print_info(int + #ifdef ARCHITECTURE + php_info_print_table_row(2, "Architecture", ARCHITECTURE); + #endif +-#ifdef CONFIGURE_COMMAND +- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND ); +-#endif + + if (sapi_module.pretty_name) { + php_info_print_table_row(2, "Server API", sapi_module.pretty_name ); +diff -up ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo ./ext/standard/tests/general_functions/phpinfo.phpt +--- ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo 2020-07-21 10:49:31.000000000 +0200 ++++ ./ext/standard/tests/general_functions/phpinfo.phpt 2020-07-21 11:41:56.296633522 +0200 +@@ -17,7 +17,6 @@ PHP Version => %s + + System => %s + Build Date => %s%a +-Configure Command => %s + Server API => Command Line Interface + Virtual Directory Support => %s + Configuration File (php.ini) Path => %s +diff -up ./sapi/cli/php_cli.c.phpinfo ./sapi/cli/php_cli.c +--- ./sapi/cli/php_cli.c.phpinfo 2020-07-21 11:43:38.812475300 +0200 ++++ ./sapi/cli/php_cli.c 2020-07-21 11:43:45.783464540 +0200 +@@ -643,8 +643,7 @@ static int do_cli(int argc, char **argv) + "NTS " + #endif + #ifdef COMPILER +- COMPILER +- " " ++ "gcc " + #endif + #ifdef ARCHITECTURE + ARCHITECTURE diff --git a/php-8.0.0-systzdata-v19.patch b/php-8.0.0-systzdata-v19.patch new file mode 100644 index 0000000..902d3ce --- /dev/null +++ b/php-8.0.0-systzdata-v19.patch @@ -0,0 +1,657 @@ +# License: MIT +# http://opensource.org/licenses/MIT + +Add support for use of the system timezone database, rather +than embedding a copy. Discussed upstream but was not desired. + +History: +r19: adapt for timelib 2020.02 (in 8.0.0beta2) +r18: adapt for autotool change in 7.3.3RC1 +r17: adapt for timelib 2018.01 (in 7.3.2RC1) +r16: adapt for timelib 2017.06 (in 7.2.3RC1) +r15: adapt for timelib 2017.05beta7 (in 7.2.0RC1) +r14: improve check for valid tz file +r13: adapt for upstream changes to use PHP allocator +r12: adapt for upstream changes for new zic +r11: use canonical names to avoid more case sensitivity issues + round lat/long from zone.tab towards zero per builtin db +r10: make timezone case insensitive +r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold) +r8: fix compile error without --with-system-tzdata configured +r7: improve check for valid timezone id to exclude directories +r6: fix fd leak in r5, fix country code/BC flag use in + timezone_identifiers_list() using system db, + fix use of PECL timezonedb to override system db, +r5: reverts addition of "System/Localtime" fake tzname. + updated for 5.3.0, parses zone.tab to pick up mapping between + timezone name, country code and long/lat coords +r4: added "System/Localtime" tzname which uses /etc/localtime +r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert) +r2: add filesystem trawl to set up name alias index +r1: initial revision + +diff -up php-8.0.0beta3/ext/date/config0.m4.systzdata php-8.0.0beta3/ext/date/config0.m4 +--- php-8.0.0beta3/ext/date/config0.m4.systzdata 2020-09-01 19:13:26.000000000 +0200 ++++ php-8.0.0beta3/ext/date/config0.m4 2020-09-02 08:07:51.039979873 +0200 +@@ -4,6 +4,19 @@ AC_CHECK_HEADERS([io.h]) + dnl Check for strtoll, atoll + AC_CHECK_FUNCS(strtoll atoll) + ++PHP_ARG_WITH(system-tzdata, for use of system timezone data, ++[ --with-system-tzdata[=DIR] to specify use of system timezone data], ++no, no) ++ ++if test "$PHP_SYSTEM_TZDATA" != "no"; then ++ AC_DEFINE(HAVE_SYSTEM_TZDATA, 1, [Define if system timezone data is used]) ++ ++ if test "$PHP_SYSTEM_TZDATA" != "yes"; then ++ AC_DEFINE_UNQUOTED(HAVE_SYSTEM_TZDATA_PREFIX, "$PHP_SYSTEM_TZDATA", ++ [Define for location of system timezone data]) ++ fi ++fi ++ + PHP_DATE_CFLAGS="-I@ext_builddir@/lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DHAVE_TIMELIB_CONFIG_H=1" + timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c + lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c lib/parse_iso_intervals.c lib/interval.c" +diff -up php-8.0.0beta3/ext/date/lib/parse_tz.c.systzdata php-8.0.0beta3/ext/date/lib/parse_tz.c +--- php-8.0.0beta3/ext/date/lib/parse_tz.c.systzdata 2020-09-01 19:13:26.000000000 +0200 ++++ php-8.0.0beta3/ext/date/lib/parse_tz.c 2020-09-02 08:07:51.039979873 +0200 +@@ -26,8 +26,21 @@ + #include "timelib.h" + #include "timelib_private.h" + ++#ifdef HAVE_SYSTEM_TZDATA ++#include ++#include ++#include ++#include ++#include ++ ++#include "php_scandir.h" ++ ++#else + #define TIMELIB_SUPPORTS_V2DATA + #include "timezonedb.h" ++#endif ++ ++#include + + #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) + # if defined(__LITTLE_ENDIAN__) +@@ -94,6 +107,11 @@ static int read_php_preamble(const unsig + { + uint32_t version; + ++ if (memcmp(*tzf, "TZif", 4) == 0) { ++ *tzf += 20; ++ return 0; ++ } ++ + /* read ID */ + version = (*tzf)[3] - '0'; + *tzf += 4; +@@ -418,7 +436,429 @@ void timelib_dump_tzinfo(timelib_tzinfo + } + } + +-static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb) ++#ifdef HAVE_SYSTEM_TZDATA ++ ++#ifdef HAVE_SYSTEM_TZDATA_PREFIX ++#define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX ++#else ++#define ZONEINFO_PREFIX "/usr/share/zoneinfo" ++#endif ++ ++/* System timezone database pointer. */ ++static const timelib_tzdb *timezonedb_system; ++ ++/* Hash table entry for the cache of the zone.tab mapping table. */ ++struct location_info { ++ char code[2]; ++ double latitude, longitude; ++ char name[64]; ++ char *comment; ++ struct location_info *next; ++}; ++ ++/* Cache of zone.tab. */ ++static struct location_info **system_location_table; ++ ++/* Size of the zone.tab hash table; a random-ish prime big enough to ++ * prevent too many collisions. */ ++#define LOCINFO_HASH_SIZE (1021) ++ ++/* Compute a case insensitive hash of str */ ++static uint32_t tz_hash(const char *str) ++{ ++ const unsigned char *p = (const unsigned char *)str; ++ uint32_t hash = 5381; ++ int c; ++ ++ while ((c = tolower(*p++)) != '\0') { ++ hash = (hash << 5) ^ hash ^ c; ++ } ++ ++ return hash % LOCINFO_HASH_SIZE; ++} ++ ++/* Parse an ISO-6709 date as used in zone.tab. Returns end of the ++ * parsed string on success, or NULL on parse error. On success, ++ * writes the parsed number to *result. */ ++static char *parse_iso6709(char *p, double *result) ++{ ++ double v, sign; ++ char *pend; ++ size_t len; ++ ++ if (*p == '+') ++ sign = 1.0; ++ else if (*p == '-') ++ sign = -1.0; ++ else ++ return NULL; ++ ++ p++; ++ for (pend = p; *pend >= '0' && *pend <= '9'; pend++) ++ ;; ++ ++ /* Annoying encoding used by zone.tab has no decimal point, so use ++ * the length to determine the format: ++ * ++ * 4 = DDMM ++ * 5 = DDDMM ++ * 6 = DDMMSS ++ * 7 = DDDMMSS ++ */ ++ len = pend - p; ++ if (len < 4 || len > 7) { ++ return NULL; ++ } ++ ++ /* p => [D]DD */ ++ v = (p[0] - '0') * 10.0 + (p[1] - '0'); ++ p += 2; ++ if (len == 5 || len == 7) ++ v = v * 10.0 + (*p++ - '0'); ++ /* p => MM[SS] */ ++ v += (10.0 * (p[0] - '0') ++ + p[1] - '0') / 60.0; ++ p += 2; ++ /* p => [SS] */ ++ if (len > 5) { ++ v += (10.0 * (p[0] - '0') ++ + p[1] - '0') / 3600.0; ++ p += 2; ++ } ++ ++ /* Round to five decimal place, not because it's a good idea, ++ * but, because the builtin data uses rounded data, so, match ++ * that. */ ++ *result = trunc(v * sign * 100000.0) / 100000.0; ++ ++ return p; ++} ++ ++/* This function parses the zone.tab file to build up the mapping of ++ * timezone to country code and geographic location, and returns a ++ * hash table. The hash table is indexed by the function: ++ * ++ * tz_hash(timezone-name) ++ */ ++static struct location_info **create_location_table(void) ++{ ++ struct location_info **li, *i; ++ char zone_tab[PATH_MAX]; ++ char line[512]; ++ FILE *fp; ++ ++ strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab); ++ ++ fp = fopen(zone_tab, "r"); ++ if (!fp) { ++ return NULL; ++ } ++ ++ li = calloc(LOCINFO_HASH_SIZE, sizeof *li); ++ ++ while (fgets(line, sizeof line, fp)) { ++ char *p = line, *code, *name, *comment; ++ uint32_t hash; ++ double latitude, longitude; ++ ++ while (isspace(*p)) ++ p++; ++ ++ if (*p == '#' || *p == '\0' || *p == '\n') ++ continue; ++ ++ if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t') ++ continue; ++ ++ /* code => AA */ ++ code = p; ++ p[2] = 0; ++ p += 3; ++ ++ /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */ ++ p = parse_iso6709(p, &latitude); ++ if (!p) { ++ continue; ++ } ++ p = parse_iso6709(p, &longitude); ++ if (!p) { ++ continue; ++ } ++ ++ if (!p || *p != '\t') { ++ continue; ++ } ++ ++ /* name = string */ ++ name = ++p; ++ while (*p != '\t' && *p && *p != '\n') ++ p++; ++ ++ *p++ = '\0'; ++ ++ /* comment = string */ ++ comment = p; ++ while (*p != '\t' && *p && *p != '\n') ++ p++; ++ ++ if (*p == '\n' || *p == '\t') ++ *p = '\0'; ++ ++ hash = tz_hash(name); ++ i = malloc(sizeof *i); ++ memcpy(i->code, code, 2); ++ strncpy(i->name, name, sizeof i->name); ++ i->comment = strdup(comment); ++ i->longitude = longitude; ++ i->latitude = latitude; ++ i->next = li[hash]; ++ li[hash] = i; ++ /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */ ++ } ++ ++ fclose(fp); ++ ++ return li; ++} ++ ++/* Return location info from hash table, using given timezone name. ++ * Returns NULL if the name could not be found. */ ++const struct location_info *find_zone_info(struct location_info **li, ++ const char *name) ++{ ++ uint32_t hash = tz_hash(name); ++ const struct location_info *l; ++ ++ if (!li) { ++ return NULL; ++ } ++ ++ for (l = li[hash]; l; l = l->next) { ++ if (timelib_strcasecmp(l->name, name) == 0) ++ return l; ++ } ++ ++ return NULL; ++} ++ ++/* Filter out some non-tzdata files and the posix/right databases, if ++ * present. */ ++static int index_filter(const struct dirent *ent) ++{ ++ return strcmp(ent->d_name, ".") != 0 ++ && strcmp(ent->d_name, "..") != 0 ++ && strcmp(ent->d_name, "posix") != 0 ++ && strcmp(ent->d_name, "posixrules") != 0 ++ && strcmp(ent->d_name, "right") != 0 ++ && strstr(ent->d_name, ".list") == NULL ++ && strstr(ent->d_name, ".tab") == NULL; ++} ++ ++static int sysdbcmp(const void *first, const void *second) ++{ ++ const timelib_tzdb_index_entry *alpha = first, *beta = second; ++ ++ return timelib_strcasecmp(alpha->id, beta->id); ++} ++ ++ ++/* Create the zone identifier index by trawling the filesystem. */ ++static void create_zone_index(timelib_tzdb *db) ++{ ++ size_t dirstack_size, dirstack_top; ++ size_t index_size, index_next; ++ timelib_tzdb_index_entry *db_index; ++ char **dirstack; ++ ++ /* LIFO stack to hold directory entries to scan; each slot is a ++ * directory name relative to the zoneinfo prefix. */ ++ dirstack_size = 32; ++ dirstack = malloc(dirstack_size * sizeof *dirstack); ++ dirstack_top = 1; ++ dirstack[0] = strdup(""); ++ ++ /* Index array. */ ++ index_size = 64; ++ db_index = malloc(index_size * sizeof *db_index); ++ index_next = 0; ++ ++ do { ++ struct dirent **ents; ++ char name[PATH_MAX], *top; ++ int count; ++ ++ /* Pop the top stack entry, and iterate through its contents. */ ++ top = dirstack[--dirstack_top]; ++ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top); ++ ++ count = php_scandir(name, &ents, index_filter, php_alphasort); ++ ++ while (count > 0) { ++ struct stat st; ++ const char *leaf = ents[count - 1]->d_name; ++ ++ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s", ++ top, leaf); ++ ++ if (strlen(name) && stat(name, &st) == 0) { ++ /* Name, relative to the zoneinfo prefix. */ ++ const char *root = top; ++ ++ if (root[0] == '/') root++; ++ ++ snprintf(name, sizeof name, "%s%s%s", root, ++ *root ? "/": "", leaf); ++ ++ if (S_ISDIR(st.st_mode)) { ++ if (dirstack_top == dirstack_size) { ++ dirstack_size *= 2; ++ dirstack = realloc(dirstack, ++ dirstack_size * sizeof *dirstack); ++ } ++ dirstack[dirstack_top++] = strdup(name); ++ } ++ else { ++ if (index_next == index_size) { ++ index_size *= 2; ++ db_index = realloc(db_index, ++ index_size * sizeof *db_index); ++ } ++ ++ db_index[index_next++].id = strdup(name); ++ } ++ } ++ ++ free(ents[--count]); ++ } ++ ++ if (count != -1) free(ents); ++ free(top); ++ } while (dirstack_top); ++ ++ qsort(db_index, index_next, sizeof *db_index, sysdbcmp); ++ ++ db->index = db_index; ++ db->index_size = index_next; ++ ++ free(dirstack); ++} ++ ++#define FAKE_HEADER "1234\0??\1??" ++#define FAKE_UTC_POS (7 - 4) ++ ++/* Create a fake data segment for database 'sysdb'. */ ++static void fake_data_segment(timelib_tzdb *sysdb, ++ struct location_info **info) ++{ ++ size_t n; ++ char *data, *p; ++ ++ data = malloc(3 * sysdb->index_size + 7); ++ ++ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1); ++ ++ for (n = 0; n < sysdb->index_size; n++) { ++ const struct location_info *li; ++ timelib_tzdb_index_entry *ent; ++ ++ ent = (timelib_tzdb_index_entry *)&sysdb->index[n]; ++ ++ /* Lookup the timezone name in the hash table. */ ++ if (strcmp(ent->id, "UTC") == 0) { ++ ent->pos = FAKE_UTC_POS; ++ continue; ++ } ++ ++ li = find_zone_info(info, ent->id); ++ if (li) { ++ /* If found, append the BC byte and the ++ * country code; set the position for this ++ * section of timezone data. */ ++ ent->pos = (p - data) - 4; ++ *p++ = '\1'; ++ *p++ = li->code[0]; ++ *p++ = li->code[1]; ++ } ++ else { ++ /* If not found, the timezone data can ++ * point at the header. */ ++ ent->pos = 0; ++ } ++ } ++ ++ sysdb->data = (unsigned char *)data; ++} ++ ++/* Returns true if the passed-in stat structure describes a ++ * probably-valid timezone file. */ ++static int is_valid_tzfile(const struct stat *st, int fd) ++{ ++ if (fd) { ++ char buf[20]; ++ if (read(fd, buf, 20)!=20) { ++ return 0; ++ } ++ lseek(fd, SEEK_SET, 0); ++ if (memcmp(buf, "TZif", 4)) { ++ return 0; ++ } ++ } ++ return S_ISREG(st->st_mode) && st->st_size > 20; ++} ++ ++/* To allow timezone names to be used case-insensitively, find the ++ * canonical name for this timezone, if possible. */ ++static const char *canonical_tzname(const char *timezone) ++{ ++ if (timezonedb_system) { ++ timelib_tzdb_index_entry *ent, lookup; ++ ++ lookup.id = (char *)timezone; ++ ++ ent = bsearch(&lookup, timezonedb_system->index, ++ timezonedb_system->index_size, sizeof lookup, ++ sysdbcmp); ++ if (ent) { ++ return ent->id; ++ } ++ } ++ ++ return timezone; ++} ++ ++/* Return the mmap()ed tzfile if found, else NULL. On success, the ++ * length of the mapped data is placed in *length. */ ++static char *map_tzfile(const char *timezone, size_t *length) ++{ ++ char fname[PATH_MAX]; ++ struct stat st; ++ char *p; ++ int fd; ++ ++ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { ++ return NULL; ++ } ++ ++ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); ++ ++ fd = open(fname, O_RDONLY); ++ if (fd == -1) { ++ return NULL; ++ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) { ++ close(fd); ++ return NULL; ++ } ++ ++ *length = st.st_size; ++ p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); ++ close(fd); ++ ++ return p != MAP_FAILED ? p : NULL; ++} ++ ++#endif ++ ++static int inmem_seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb) + { + int left = 0, right = tzdb->index_size - 1; + +@@ -444,9 +884,48 @@ static int seek_to_tz_position(const uns + return 0; + } + ++static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, ++ char **map, size_t *maplen, ++ const timelib_tzdb *tzdb) ++{ ++#ifdef HAVE_SYSTEM_TZDATA ++ if (tzdb == timezonedb_system) { ++ char *orig; ++ ++ orig = map_tzfile(timezone, maplen); ++ if (orig == NULL) { ++ return 0; ++ } ++ ++ (*tzf) = (unsigned char *)orig; ++ *map = orig; ++ return 1; ++ } ++ else ++#endif ++ { ++ return inmem_seek_to_tz_position(tzf, timezone, tzdb); ++ } ++} ++ + const timelib_tzdb *timelib_builtin_db(void) + { ++#ifdef HAVE_SYSTEM_TZDATA ++ if (timezonedb_system == NULL) { ++ timelib_tzdb *tmp = malloc(sizeof *tmp); ++ ++ tmp->version = "0.system"; ++ tmp->data = NULL; ++ create_zone_index(tmp); ++ system_location_table = create_location_table(); ++ fake_data_segment(tmp, system_location_table); ++ timezonedb_system = tmp; ++ } ++ ++ return timezonedb_system; ++#else + return &timezonedb_builtin; ++#endif + } + + const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count) +@@ -458,7 +937,30 @@ const timelib_tzdb_index_entry *timelib_ + int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb) + { + const unsigned char *tzf; +- return (seek_to_tz_position(&tzf, timezone, tzdb)); ++ ++#ifdef HAVE_SYSTEM_TZDATA ++ if (tzdb == timezonedb_system) { ++ char fname[PATH_MAX]; ++ struct stat st; ++ ++ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { ++ return 0; ++ } ++ ++ if (system_location_table) { ++ if (find_zone_info(system_location_table, timezone) != NULL) { ++ /* found in cache */ ++ return 1; ++ } ++ } ++ ++ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); ++ ++ return stat(fname, &st) == 0 && is_valid_tzfile(&st, 0); ++ } ++#endif ++ ++ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb)); + } + + static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz) +@@ -500,12 +1002,14 @@ static timelib_tzinfo* timelib_tzinfo_ct + timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code) + { + const unsigned char *tzf; ++ char *memmap = NULL; ++ size_t maplen; + timelib_tzinfo *tmp; + int version; + int transitions_result, types_result; + unsigned int type; /* TIMELIB_TZINFO_PHP or TIMELIB_TZINFO_ZONEINFO */ + +- if (seek_to_tz_position(&tzf, timezone, tzdb)) { ++ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) { + tmp = timelib_tzinfo_ctor(timezone); + + version = read_preamble(&tzf, tmp, &type); +@@ -540,11 +1044,36 @@ timelib_tzinfo *timelib_parse_tzfile(con + } + skip_posix_string(&tzf, tmp); + ++#ifdef HAVE_SYSTEM_TZDATA ++ if (memmap) { ++ const struct location_info *li; ++ ++ /* TZif-style - grok the location info from the system database, ++ * if possible. */ ++ ++ if ((li = find_zone_info(system_location_table, timezone)) != NULL) { ++ tmp->location.comments = timelib_strdup(li->comment); ++ strncpy(tmp->location.country_code, li->code, 2); ++ tmp->location.longitude = li->longitude; ++ tmp->location.latitude = li->latitude; ++ tmp->bc = 1; ++ } ++ else { ++ set_default_location_and_comments(&tzf, tmp); ++ } ++ ++ /* Now done with the mmap segment - discard it. */ ++ munmap(memmap, maplen); ++ } else { ++#endif + if (type == TIMELIB_TZINFO_PHP) { + read_location(&tzf, tmp); + } else { + set_default_location_and_comments(&tzf, tmp); + } ++#ifdef HAVE_SYSTEM_TZDATA ++ } ++#endif + } else { + *error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE; + tmp = NULL; diff --git a/php.conf b/php.conf index d192ccf..0639c0a 100644 --- a/php.conf +++ b/php.conf @@ -24,7 +24,7 @@ AddType text/html .php DirectoryIndex index.php # mod_php options - + # # Cause the PHP interpreter to handle files with a .php extension. # diff --git a/php.conf2 b/php.conf2 index aeed80f..de4900f 100644 --- a/php.conf2 +++ b/php.conf2 @@ -2,11 +2,13 @@ # Redirect to local php-fpm if mod_php (5 or 7) is not available - # Enable http authorization headers - SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 + + # Enable http authorization headers + SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 - - SetHandler "proxy:fcgi://127.0.0.1:9000" - + + SetHandler "proxy:fcgi://127.0.0.1:9000" + + diff --git a/php.ini b/php.ini index 96df66f..f1f057f 100644 --- a/php.ini +++ b/php.ini @@ -88,6 +88,7 @@ ;;;;;;;;;;;;;;;;;;; ; Quick Reference ; ;;;;;;;;;;;;;;;;;;; + ; The following are all the settings which are different in either the production ; or development versions of the INIs with respect to PHP's default behavior. ; Please see the actual settings later in the document for more details as to why @@ -99,12 +100,12 @@ ; Production Value: Off ; display_startup_errors -; Default Value: Off +; Default Value: On ; Development Value: On ; Production Value: Off ; error_reporting -; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED +; Default Value: E_ALL ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT @@ -153,6 +154,16 @@ ; Development Value: "GPCS" ; Production Value: "GPCS" +; zend.exception_ignore_args +; Default Value: Off +; Development Value: Off +; Production Value: On + +; zend.exception_string_param_max_len +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 + ;;;;;;;;;;;;;;;;;;;; ; php.ini Options ; ;;;;;;;;;;;;;;;;;;;; @@ -352,21 +363,31 @@ zend.enable_gc = On ; If enabled, scripts may be written in encodings that are incompatible with ; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such ; encodings. To use this feature, mbstring extension must be enabled. -; Default: Off ;zend.multibyte = Off ; Allows to set the default encoding for the scripts. This value will be used ; unless "declare(encoding=...)" directive appears at the top of the script. ; Only affects if zend.multibyte is set. -; Default: "" ;zend.script_encoding = ; Allows to include or exclude arguments from stack traces generated for exceptions -; Default: Off -; In production, it is recommended to turn this setting on to prohibit the output +; In production, it is recommended to turn this setting on to prohibit the output ; of sensitive information in stack traces +; Default Value: Off +; Development Value: Off +; Production Value: On zend.exception_ignore_args = On +; Allows setting the maximum string length in an argument of a stringified stack trace +; to a value between 0 and 1000000. +; This has no effect when zend.exception_ignore_args is enabled. +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 +; In production, it is recommended to set this to 0 to reduce the output +; of sensitive information in stack traces. +zend.exception_string_param_max_len = 0 + ;;;;;;;;;;;;;;;;; ; Miscellaneous ; ;;;;;;;;;;;;;;;;; @@ -458,7 +479,7 @@ memory_limit = 128M ; E_ALL & ~E_NOTICE (Show all errors, except for notices) ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) -; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED +; Default Value: E_ALL ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT ; http://php.net/error-reporting @@ -482,11 +503,9 @@ error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off ; The display of errors which occur during PHP's startup sequence are handled -; separately from display_errors. PHP's default behavior is to suppress those -; errors from clients. Turning the display of startup errors on can be useful in -; debugging configuration problems. We strongly recommend you -; set this to 'off' for production servers. -; Default Value: Off +; separately from display_errors. We strongly recommend you set this to 'off' +; for production servers to avoid leaking configuration details. +; Default Value: On ; Development Value: On ; Production Value: Off ; http://php.net/display-startup-errors @@ -524,19 +543,9 @@ ignore_repeated_source = Off ; http://php.net/report-memleaks report_memleaks = On -; This setting is on by default. +; This setting is off by default. ;report_zend_debug = 0 -; Store the last error/warning message in $php_errormsg (boolean). Setting this value -; to On can assist in debugging and is appropriate for development servers. It should -; however be disabled on production servers. -; This directive is DEPRECATED. -; Default Value: Off -; Development Value: Off -; Production Value: Off -; http://php.net/track-errors -;track_errors = Off - ; Turn off normal error reporting and emit XML-RPC error XML ; http://php.net/xmlrpc-errors ;xmlrpc_errors = 0 @@ -929,10 +938,10 @@ cli_server.color = On ;date.default_longitude = 35.2333 ; http://php.net/date.sunrise-zenith -;date.sunrise_zenith = 90.583333 +;date.sunrise_zenith = 90.833333 ; http://php.net/date.sunset-zenith -;date.sunset_zenith = 90.583333 +;date.sunset_zenith = 90.833333 [filter] ; http://php.net/filter.default @@ -1009,8 +1018,6 @@ pcre.jit=0 ; http://php.net/pdo-odbc.connection-pooling ;pdo_odbc.connection_pooling=strict -;pdo_odbc.db2_instance_name - [Pdo_mysql] ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. @@ -1490,11 +1497,6 @@ zend.assertions = -1 ; http://php.net/assert.callback ;assert.callback = 0 -; Eval the expression with current error_reporting(). Set to true if you want -; error_reporting(0) around the eval(). -; http://php.net/assert.quiet-eval -;assert.quiet_eval = 0 - [mbstring] ; language for internal character representation. ; This affects mb_send_mail() and mbstring.detect_order. @@ -1544,20 +1546,8 @@ zend.assertions = -1 ; http://php.net/mbstring.substitute-character ;mbstring.substitute_character = none -; overload(replace) single byte functions by mbstring functions. -; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), -; etc. Possible values are 0,1,2,4 or combination of them. -; For example, 7 for overload everything. -; 0: No overload -; 1: Overload mail() function -; 2: Overload str*() functions -; 4: Overload ereg*() functions -; http://php.net/mbstring.func-overload -;mbstring.func_overload = 0 - -; enable strict encoding detection. -; Default: Off -;mbstring.strict_detection = On +; Enable strict encoding detection. +;mbstring.strict_detection = Off ; This directive specifies the regex pattern of content types for which mb_output_handler() ; is activated. @@ -1566,12 +1556,10 @@ zend.assertions = -1 ; This directive specifies maximum stack depth for mbstring regular expressions. It is similar ; to the pcre.recursion_limit for PCRE. -; Default: 100000 ;mbstring.regex_stack_limit=100000 ; This directive specifies maximum retry count for mbstring regular expressions. It is similar ; to the pcre.backtrack_limit for PCRE. -; Default: 1000000 ;mbstring.regex_retry_limit=1000000 [gd] diff --git a/php.modconf b/php.modconf index 3377f72..6f678e6 100644 --- a/php.modconf +++ b/php.modconf @@ -3,10 +3,12 @@ # easy for developers to write dynamically generated webpages. # -# Cannot load both php5 and php7 modules +# Cannot load both php5, php7 and php modules - - LoadModule php7_module modules/libphp7.so + + + LoadModule php_module modules/libphp.so + diff --git a/php.ztsmodconf b/php.ztsmodconf index 8085cbd..7ce38bf 100644 --- a/php.ztsmodconf +++ b/php.ztsmodconf @@ -1,6 +1,9 @@ - - LoadModule php7_module modules/libphp7-zts.so + + + # ZTS module is not supported, so FPM should be preferred + LoadModule php_module modules/libphp-zts.so + diff --git a/php80.spec b/php80.spec index 4ed2d23..e21571e 100644 --- a/php80.spec +++ b/php80.spec @@ -8,19 +8,19 @@ # Please preserve changelog entries # # API/ABI check -%global apiver 20190902 -%global zendver 20190902 +%global apiver 20200804 +%global zendver 20200804 %global pdover 20170320 # Extension version %global fileinfover 1.0.5 -%global oci8ver 2.2.0 -%global zipver 1.13.0 +%global oci8ver 3.0.0 +%global zipver 1.19.0 # Adds -z now to the linker flags %global _hardened_build 1 # version used for php embedded library soname -%global embed_version 7.4 +%global embed_version 8.0 %global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock) @@ -35,8 +35,7 @@ %global with_lsws 1 # Regression tests take a long time, you can skip 'em with this -#global runselftest 0 -%{!?runselftest: %global runselftest 1} +%bcond_without tests # Use the arch-specific mysql_config binary to avoid mismatch with the # arch detection heuristic used by bindir/mysql_config. @@ -99,9 +98,9 @@ %global with_libzip 1 %global with_zip 0 -%global upver 7.4.10 -#global rcver RC1 -#global lower RC1 +%global upver 8.0.0 +%global rcver beta3 +%global lower beta3 Summary: PHP scripting language for creating dynamic web sites Name: php @@ -114,7 +113,6 @@ Release: 1%{?dist} # ext/date/lib is MIT # Zend/zend_sort is NCSA License: PHP and Zend and BSD and MIT and ASL 1.0 and NCSA -Group: Development/Languages URL: http://www.php.net/ Source0: http://www.php.net/distributions/php-%{upver}%{?rcver}.tar.xz @@ -144,19 +142,22 @@ Source53: 20-ffi.ini # Build fixes Patch1: php-7.4.0-httpd.patch Patch5: php-7.2.0-includedir.patch -Patch6: php-7.4.0-embed.patch -Patch8: php-7.2.0-libdb.patch +Patch6: php-8.0.0-embed.patch +Patch8: php-7.4.0-libdb.patch Patch9: php-7.0.7-curl.patch # Functional changes -Patch42: php-7.3.3-systzdata-v18.patch +# Use system nikic/php-parser +Patch41: php-8.0.0-parser.patch +# use system tzdata +Patch42: php-8.0.0-systzdata-v19.patch # See http://bugs.php.net/53436 Patch43: php-7.4.0-phpize.patch # Use -lldap_r for OpenLDAP Patch45: php-7.4.0-ldap_r.patch # drop "Configure command" from phpinfo output -# and add build system and provider (from 8.0) -Patch47: php-7.4.8-phpinfo.patch +# and only use gcc (instead of full version) +Patch47: php-8.0.0-phpinfo.patch # RC Patch Patch91: php-7.2.0-oci8conf.patch @@ -167,13 +168,13 @@ Patch91: php-7.2.0-oci8conf.patch # Fixes for tests (300+) # Factory is droped from system tzdata -Patch300: php-7.0.10-datetests.patch +Patch300: php-7.4.0-datetests.patch # WIP BuildRequires: gnupg2 BuildRequires: bzip2-devel -BuildRequires: pkgconfig(libcurl) >= 7.15.5 +BuildRequires: pkgconfig(libcurl) >= 7.29.0 BuildRequires: httpd-devel >= 2.0.46-1 BuildRequires: pam-devel %if %{with_httpd2410} @@ -216,6 +217,7 @@ BuildRequires: /bin/ps Obsoletes: php53, php53u, php54w, php55u, php55w, php56u, php56w, mod_php70u, php70w, mod_php71u, mod_php71w, mod_php72u, mod_php72w Obsoletes: mod_php73, mod_php73w Obsoletes: mod_php74, mod_php74w +Obsoletes: mod_php80 %endif # Avoid obsoleting php54 from RHSCL Obsoletes: php54 > 5.4 @@ -242,7 +244,6 @@ Recommends: php-cli%{?_isa} = %{version}-%{release} # httpd have threaded MPM by default Recommends: php-fpm%{?_isa} = %{version}-%{release} # as "php" is now mostly a meta-package, commonly used extensions -Recommends: php-json%{?_isa} = %{version}-%{release} Recommends: php-mbstring%{?_isa} = %{version}-%{release} Recommends: php-opcache%{?_isa} = %{version}-%{release} Recommends: php-pdo%{?_isa} = %{version}-%{release} @@ -268,7 +269,6 @@ The php package contains the module (often referred to as mod_php) which adds support for the PHP language to Apache HTTP Server. %package cli -Group: Development/Languages Summary: Command-line interface for PHP # sapi/cli/ps_title.c is PostgreSQL License: PHP and Zend and BSD and MIT and ASL 1.0 and NCSA and PostgreSQL @@ -281,6 +281,7 @@ Obsoletes: php53-cli, php53u-cli, php54-cli, php54w-cli, php55u-cli, php55w-cli, Obsoletes: php70u-cli, php70w-cli, php71u-cli, php71w-cli, php72u-cli, php72w-cli Obsoletes: php73-cli, php73w-cli Obsoletes: php74-cli, php74w-cli +Obsoletes: php80-cli %endif %description cli @@ -289,20 +290,19 @@ executing PHP scripts, /usr/bin/php, and the CGI interface. %package dbg -Group: Development/Languages Summary: The interactive PHP debugger Requires: php-common%{?_isa} = %{version}-%{release} %if 0%{?rhel} Obsoletes: php56u-dbg, php56w-dbg, php70u-dbg, php70w-phpdbg, php71u-dbg, php71w-phpdbg, php72u-dbg, php72w-phpdbg Obsoletes: php73-dbg, php73w-phpdbg Obsoletes: php74-dbg, php74w-phpdbg +Obsoletes: php80-dbg %endif %description dbg The php-dbg package contains the interactive PHP debugger. %package fpm -Group: Development/Languages Summary: PHP FastCGI Process Manager BuildRequires: libacl-devel BuildRequires: pkgconfig(libsystemd) >= 209 @@ -332,6 +332,7 @@ Obsoletes: php53-fpm, php53u-fpm, php54-fpm, php54w-fpm, php55u-fpm, php55w-fpm, Obsoletes: php70u-fpm, php70w-fpm, php71u-fpm, php71w-fpm, php72u-fpm, php72w-fpm Obsoletes: php73-fpm, php73w-fpm Obsoletes: php74-fpm, php74w-fpm +Obsoletes: php80-fpm %endif %description fpm @@ -342,13 +343,13 @@ any size, especially busier sites. %if %{with_lsws} %package litespeed Summary: LiteSpeed Web Server PHP support -Group: Development/Languages Requires: php-common%{?_isa} = %{version}-%{release} %if 0%{?rhel} Obsoletes: php53-litespeed, php53u-litespeed, php54-litespeed, php54w-litespeed, php55u-litespeed, php55w-litespeed, php56u-litespeed, php56w-litespeed Obsoletes: php70u-litespeed, php70w-litespeed, php71u-litespeed, php71w-litespeed, php72u-litespeed, php72w-litespeed Obsoletes: php73-litespeed, php73w-litespeed Obsoletes: php74-litespeed, php74w-litespeed +Obsoletes: php80-litespeed %endif %description litespeed @@ -357,7 +358,6 @@ used by the LiteSpeed Web Server (LSAPI enabled PHP). %endif %package common -Group: Development/Languages Summary: Common files for PHP # All files licensed under PHP version 3.01, except # fileinfo is licensed under PHP version 3.0 @@ -384,6 +384,8 @@ Provides: php-gettext, php-gettext%{?_isa} Provides: php-hash, php-hash%{?_isa} Provides: php-mhash = %{version}, php-mhash%{?_isa} = %{version} Provides: php-iconv, php-iconv%{?_isa} +Obsoletes: php-json < 8 +Provides: php-json = %{upver}, %{?scl_prefix}php-json%{?_isa} = %{upver} Provides: php-libxml, php-libxml%{?_isa} Provides: php-openssl, php-openssl%{?_isa} Provides: php-phar, php-phar%{?_isa} @@ -395,9 +397,6 @@ Provides: php-spl, php-spl%{?_isa} Provides: php-standard = %{version}, php-standard%{?_isa} = %{version} Provides: php-tokenizer, php-tokenizer%{?_isa} Provides: php-zlib, php-zlib%{?_isa} -# For user experience, those extensions were part of php-common -Requires: php-json%{?_isa} = %{version}-%{release} -#Requires: php-zip%%{?_isa} Obsoletes: php-pecl-phar < 1.2.4 Obsoletes: php-pecl-Fileinfo < 1.0.5 @@ -410,6 +409,18 @@ Obsoletes: php53-common, php53u-common, php54-common, php54w-common, php55u-comm Obsoletes: php70u-common, php70w-common, php71u-common, php71w-common, php72u-common, php72w-common Obsoletes: php73-common, php73w-common Obsoletes: php74-common, php74w-common +Obsoletes: php80-common +# Json +Obsoletes: php53-json, php53u-json, php54-json, php54w-json, php55u-json, php55w-json, php56u-json, php56w-json +Obsoletes: php55u-pecl-jsonc, php56u-pecl-jsonc +Obsoletes: php70u-json, php70w-json, php71u-json, php71w-json, php72u-json, php72w-json +Obsoletes: php73-json, php73w-json +Obsoletes: php74-json, php74w-json +# Xmlrpc +Obsoletes: php53-xmlrpc, php53u-xmlrpc, php54-xmlrpc, php54w-xmlrpc, php55u-xmlrpc, php55w-xmlrpc, php56u-xmlrpc, php56w-xmlrpc +Obsoletes: php70u-xmlrpc, php70w-xmlrpc, php71u-xmlrpc, php71w-xmlrpc, php72u-xmlrpc, php72w-xmlrpc +Obsoletes: php73-xmlrpc, php73w-xmlrpc +Obsoletes: php74-xmlrpc, php74w-xmlrpc %endif %description common @@ -417,7 +428,6 @@ The php-common package contains files used by both the php package and the php-cli package. %package devel -Group: Development/Libraries Summary: Files needed for building PHP extensions Requires: php-cli%{?_isa} = %{version}-%{release} # always needed to build extension @@ -447,6 +457,10 @@ Obsoletes: php55u-pecl-jsonc-devel, php56u-pecl-jsonc-devel Obsoletes: php70u-devel, php70w-devel, php71u-devel, php71w-devel, php72u-devel, php72w-devel Obsoletes: php73-devel, php73w-devel Obsoletes: php74-devel, php74w-devel +Obsoletes: php80-devel +%endif +%if 0%{?fedora} || 0%{?rhel} >= 8 +Recommends: php-nikic-php-parser4 >= 4.3.0 %endif %description devel @@ -456,7 +470,6 @@ need to install this package. %package opcache Summary: The Zend OPcache -Group: Development/Languages License: PHP Requires: php-common%{?_isa} = %{version}-%{release} Obsoletes: php-pecl-zendopcache @@ -469,6 +482,7 @@ Obsoletes: php55u-opcache, php55w-opcache, php56u-opcache, php56w-opcache Obsoletes: php70u-opcache, php70w-opcache, php71u-opcache, php71w-opcache, php72u-opcache, php72w-opcache Obsoletes: php73-opcache, php73w-opcache Obsoletes: php74-opcache, php74w-opcache +Obsoletes: php80-opcache %endif %description opcache @@ -480,7 +494,6 @@ bytecode optimization patterns that make code execution faster. %package imap Summary: A module for PHP applications that use IMAP -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -494,6 +507,7 @@ Obsoletes: php53-imap, php53u-imap, php54-imap, php54w-imap, php55u-imap, php55w Obsoletes: php70u-imap, php70w-imap, php71u-imap, php71w-imap, php72u-imap, php72w-imap Obsoletes: php73-imap, php73w-imap Obsoletes: php74-imap, php74w-imap +Obsoletes: php80-imap %endif %description imap @@ -503,7 +517,6 @@ messages on mail servers. PHP is an HTML-embedded scripting language. %package ldap Summary: A module for PHP applications that use LDAP -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -515,6 +528,7 @@ Obsoletes: php53-ldap, php53u-ldap, php54-ldap, php54w-ldap, php55u-ldap, php55w Obsoletes: php70u-ldap, php70w-ldap, php71u-ldap, php71w-ldap, php72u-ldap, php72w-ldap Obsoletes: php73-ldap, php73w-ldap Obsoletes: php74-ldap, php74w-ldap +Obsoletes: php80-ldap %endif %description ldap @@ -525,7 +539,6 @@ language. %package pdo Summary: A database access abstraction module for PHP applications -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -539,6 +552,7 @@ Obsoletes: php53-pdo, php53u-pdo, php54-pdo, php54w-pdo, php55u-pdo, php55w-pdo, Obsoletes: php70u-pdo, php70w-pdo, php71u-pdo, php71w-pdo, php72u-pdo, php72w-pdo Obsoletes: php73-pdo, php73w-pdo Obsoletes: php74-pdo, php74w-pdo +Obsoletes: php80-pdo %endif %description pdo @@ -549,7 +563,6 @@ databases. %package mysqlnd Summary: A module for PHP applications that use MySQL databases -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-pdo%{?_isa} = %{version}-%{release} @@ -563,6 +576,7 @@ Obsoletes: php53-mysqlnd, php53u-mysqlnd, php54-mysqlnd, php54w-mysqlnd, php55u- Obsoletes: php70u-mysqlnd, php70w-mysqlnd, php71u-mysqlnd, php71w-mysqlnd, php72u-mysqlnd, php72w-mysqlnd Obsoletes: php73-mysqlnd, php73w-mysqlnd Obsoletes: php74-mysqlnd, php74w-mysqlnd +Obsoletes: php80-mysqlnd Obsoletes: php53-mysql, php53u-mysql, php54-mysql, php54w-mysql, php55u-mysql, php55w-mysql, php56u-mysql, php56w-mysql Obsoletes: php70u-mysql, php70w-mysql, php71u-mysql, php71w-mysql, php72u-mysql, php72w-mysql %endif @@ -578,7 +592,6 @@ This package use the MySQL Native Driver %package pgsql Summary: A PostgreSQL database module for PHP -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-pdo%{?_isa} = %{version}-%{release} @@ -592,6 +605,7 @@ Obsoletes: php53-pgsql, php53u-pgsql, php54-pgsql, php54w-pgsql, php55u-pgsql, p Obsoletes: php70u-pgsql, php70w-pgsql, php71u-pgsql, php71w-pgsql, php72u-pgsql, php72w-pgsql Obsoletes: php73-pgsql, php73w-pgsql Obsoletes: php74-pgsql, php74w-pgsql +Obsoletes: php80-pgsql %endif %description pgsql @@ -604,7 +618,6 @@ php package. %package process Summary: Modules for PHP script using system process interfaces -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -618,6 +631,7 @@ Obsoletes: php53-process, php53u-process, php54-process, php54w-process, php55u- Obsoletes: php70u-process, php70w-process, php71u-process, php71w-process, php72u-process, php72w-process Obsoletes: php73-process, php73w-process Obsoletes: php74-process, php74w-process +Obsoletes: php80-process %endif %description process @@ -627,7 +641,6 @@ communication. %package odbc Summary: A module for PHP applications that use ODBC databases -Group: Development/Languages # All files licensed under PHP version 3.01, except # pdo_odbc is licensed under PHP version 3.0 License: PHP @@ -641,6 +654,7 @@ Obsoletes: php53-odbc, php53u-odbc, php54-odbc, php54w-odbc, php55u-odbc, php55w Obsoletes: php70u-odbc, php70w-odbc, php71u-odbc, php71w-odbc, php72u-odbc, php72w-odbc Obsoletes: php73-odbc, php73w-odbc Obsoletes: php74-odbc, php74w-odbc +Obsoletes: php80-odbc %endif %description odbc @@ -654,7 +668,6 @@ package. %package soap Summary: A module for PHP applications that use the SOAP protocol -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -664,6 +677,7 @@ Obsoletes: php53-soap, php53u-soap, php54-soap, php54w-soap, php55u-soap, php55w Obsoletes: php70u-soap, php70w-soap, php71u-soap, php71w-soap, php72u-soap, php72w-soap Obsoletes: php73-soap, php73w-soap Obsoletes: php74-soap, php74w-soap +Obsoletes: php80-soap %endif %description soap @@ -673,7 +687,6 @@ support to PHP for using the SOAP web services protocol. %if %{with_firebird} %package pdo-firebird Summary: PDO driver for Interbase/Firebird databases -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP BuildRequires: firebird-devel @@ -685,6 +698,7 @@ Obsoletes: php53-interbase, php53u-interbase, php54-interbase, php54w-interbase, Obsoletes: php70u-interbase, php70w-interbase, php71u-interbase, php71w-interbase, php72u-interbase, php72w-interbase Obsoletes: php73-interbase, php73w-interbase Obsoletes: php74-pdo-firebird, php74w-pdo-firebird +Obsoletes: php80-pdo-firebird %endif %description pdo-firebird @@ -695,7 +709,6 @@ Interbase/Firebird databases. %if %{with_oci8} %package oci8 Summary: A module for PHP applications that use OCI8 databases -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP BuildRequires: oracle-instantclient-devel >= %{oraclever} @@ -714,6 +727,7 @@ Obsoletes: php53-oci8, php53u-oci8, php54-oci8, php54w-oci8, php55u-oci8, p Obsoletes: php70u-oci8, php70w-oci8, php71u-oci8, php71w-oci8, php72u-oci8, php72w-oci8 Obsoletes: php73-oci8, php73w-oci8 Obsoletes: php74-oci8, php74w-oci8 +Obsoletes: php80-oci8 %endif %description oci8 @@ -737,7 +751,6 @@ Documentation is at http://php.net/oci8 and http://php.net/pdo_oci %package snmp Summary: A module for PHP applications that query SNMP-managed devices -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release}, net-snmp @@ -747,6 +760,7 @@ Obsoletes: php53-snmp, php53u-snmp, php54-snmp, php54w-snmp, php55u-snmp, php55w Obsoletes: php70u-snmp, php70w-snmp, php71u-snmp, php71w-snmp, php72u-snmp, php72w-snmp Obsoletes: php73-snmp, php73w-snmp Obsoletes: php74-snmp, php74w-snmp +Obsoletes: php80-snmp %endif %description snmp @@ -757,7 +771,6 @@ will need to install this package and the php package. %package xml Summary: A module for PHP applications which use XML -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -775,6 +788,7 @@ Obsoletes: php53-xml, php53u-xml, php54-xml, php54w-xml, php55u-xml, php55w-xml, Obsoletes: php70u-xml, php70w-xml, php71u-xml, php71w-xml, php72u-xml, php72w-xml Obsoletes: php73-xml, php73w-xml Obsoletes: php74-xml, php74w-xml +Obsoletes: php80-xml %endif %description xml @@ -782,27 +796,8 @@ The php-xml package contains dynamic shared objects which add support to PHP for manipulating XML documents using the DOM tree, and performing XSL transformations on XML documents. -%package xmlrpc -Summary: A module for PHP applications which use the XML-RPC protocol -Group: Development/Languages -# All files licensed under PHP version 3.01, except -# libXMLRPC is licensed under BSD -License: PHP and BSD -Requires: php-xml%{?_isa} = %{version}-%{release} -%if 0%{?rhel} -Obsoletes: php53-xmlrpc, php53u-xmlrpc, php54-xmlrpc, php54w-xmlrpc, php55u-xmlrpc, php55w-xmlrpc, php56u-xmlrpc, php56w-xmlrpc -Obsoletes: php70u-xmlrpc, php70w-xmlrpc, php71u-xmlrpc, php71w-xmlrpc, php72u-xmlrpc, php72w-xmlrpc -Obsoletes: php73-xmlrpc, php73w-xmlrpc -Obsoletes: php74-xmlrpc, php74w-xmlrpc -%endif - -%description xmlrpc -The php-xmlrpc package contains a dynamic shared object that will add -support for the XML-RPC protocol to PHP. - %package mbstring Summary: A module for PHP applications which need multi-byte string handling -Group: Development/Languages # All files licensed under PHP version 3.01, except # libmbfl is licensed under LGPLv2 # onigurama is licensed under BSD @@ -820,6 +815,7 @@ Obsoletes: php53-mbstring, php53u-mbstring, php54-mbstring, php54w-mbstring, php Obsoletes: php70u-mbstring, php70w-mbstring, php71u-mbstring, php71w-mbstring, php72u-mbstring, php72w-mbstring Obsoletes: php73-mbstring, php73w-mbstring Obsoletes: php74-mbstring, php74w-mbstring +Obsoletes: php80-mbstring %endif %description mbstring @@ -828,7 +824,6 @@ support for multi-byte string handling to PHP. %package gd Summary: A module for PHP applications for using the gd graphics library -Group: Development/Languages # All files licensed under PHP version 3.01 %if %{with_libgd} License: PHP @@ -859,6 +854,7 @@ Obsoletes: php53-gd, php53u-gd, php54-gd, php54w-gd, php55u-gd, php55w-gd, php56 Obsoletes: php70u-gd, php70w-gd, php71u-gd, php71w-gd, php72u-gd, php72w-gd Obsoletes: php73-gd, php73w-gd Obsoletes: php74-gd, php74w-gd +Obsoletes: php80-gd %endif %description gd @@ -867,7 +863,6 @@ support for using the gd graphics library to PHP. %package bcmath Summary: A module for PHP applications for using the bcmath library -Group: Development/Languages # All files licensed under PHP version 3.01, except # libbcmath is licensed under LGPLv2+ License: PHP and LGPLv2+ @@ -877,6 +872,7 @@ Obsoletes: php53-bcmath, php53u-bcmath, php54-bcmath, php54w-bcmath, php55u-bcma Obsoletes: php70u-bcmath, php70w-bcmath, php71u-bcmath, php71w-bcmath, php72u-bcmath, php72w-bcmath Obsoletes: php73-bcmath, php73w-bcmath Obsoletes: php74-bcmath, php74w-bcmath +Obsoletes: php80-bcmath %endif Provides: bundled(libbcmath) @@ -886,7 +882,6 @@ support for using the bcmath library to PHP. %package gmp Summary: A module for PHP applications for using the GNU MP library -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP BuildRequires: gmp-devel @@ -896,6 +891,7 @@ Obsoletes: php53-gmp, php53u-gmp, php54-gmp, php54w-gmp, php55u-gmp, php55w-gmp, Obsoletes: php70u-gmp, php70w-gmp, php71u-gmp, php71w-gmp, php72u-gmp, php72w-gmp Obsoletes: php73-gmp, php73w-gmp Obsoletes: php74-gmp, php74w-gmp +Obsoletes: php80-gmp %endif %description gmp @@ -904,7 +900,6 @@ using the GNU MP library. %package dba Summary: A database abstraction layer module for PHP applications -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP BuildRequires: libdb-devel @@ -917,6 +912,7 @@ Obsoletes: php53-dba, php53u-dba, php54-dba, php54w-dba, php55u-dba, php55w-dba, Obsoletes: php70u-dba, php70w-dba, php71u-dba, php71w-dba, php72u-dba, php72w-dba Obsoletes: php73-dba, php73w-dba Obsoletes: php74-dba, php74w-dba +Obsoletes: php80-dba %endif %description dba @@ -925,7 +921,6 @@ support for using the DBA database abstraction layer to PHP. %package tidy Summary: Standard PHP module provides tidy library support -Group: Development/Languages # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -935,6 +930,7 @@ Obsoletes: php53-tidy, php53u-tidy, php54-tidy, php54w-tidy, php55u-tidy, php55w Obsoletes: php70u-tidy, php70w-tidy, php71u-tidy, php71w-tidy, php72u-tidy, php72w-tidy Obsoletes: php73-tidy, php73w-tidy Obsoletes: php74-tidy, php74w-tidy +Obsoletes: php80-tidy %endif %description tidy @@ -954,6 +950,7 @@ Obsoletes: php53-mssql, php53u-mssql, php54-mssql, php54w-mssql, php55u-mssql, p Obsoletes: php70u-pdo-dblib, php70w-pdo_dblib, php71u-pdo-dblib, php71w-pdo_dblib, php72u-pdo-dblib, php72w-pdo_dblib Obsoletes: php73-pdo-dblib, php73w-pdo_dblib Obsoletes: php74-pdo-dblib, php74w-pdo_dblib +Obsoletes: php80-pdo-dblib %endif %description pdo-dblib @@ -963,7 +960,6 @@ PHP to Microsoft SQL Server and Sybase databases through the FreeTDS library. %package embedded Summary: PHP library for embedding in applications -Group: System Environment/Libraries Requires: php-common%{?_isa} = %{version}-%{release} # doing a real -devel package for just the .so symlink is a bit overkill Provides: php-embedded-devel = %{version}-%{release} @@ -973,6 +969,7 @@ Obsoletes: php53-embedded, php53u-embedded, php54-embedded, php54w-embedded, php Obsoletes: php70u-embedded, php70w-embedded, php71u-embedded, php71w-embedded, php72u-embedded, php72w-embedded Obsoletes: php73-embedded, php73w-embedded Obsoletes: php74-embedded, php74w-embedded +Obsoletes: php80-embedded %endif %description embedded @@ -981,7 +978,6 @@ into applications to provide PHP scripting language support. %package pspell Summary: A module for PHP applications for using pspell interfaces -Group: System Environment/Libraries # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -991,6 +987,7 @@ Obsoletes: php53-pspell, php53u-pspell, php54-pspell, php54w-pspell, php55u-pspe Obsoletes: php70u-pspell, php70w-pspell, php71u-pspell, php71w-pspell, php72u-pspell, php72w-pspell Obsoletes: php73-pspell, php73w-pspell Obsoletes: php74-pspell, php74w-pspell +Obsoletes: php80-pspell %endif %description pspell @@ -999,7 +996,6 @@ support for using the pspell library to PHP. %package intl Summary: Internationalization extension for PHP applications -Group: System Environment/Libraries # All files licensed under PHP version 3.01 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} @@ -1011,6 +1007,7 @@ Obsoletes: php53-intl, php53u-intl, php54-intl, php54w-intl, php55u-intl, php55w Obsoletes: php70u-intl, php70w-intl, php71u-intl, php71w-intl, php72u-intl, php72w-intl Obsoletes: php73-intl, php73w-intl Obsoletes: php74-intl, php74w-intl +Obsoletes: php80-intl %endif %description intl @@ -1019,16 +1016,16 @@ support for using the ICU library to PHP. %package enchant Summary: Enchant spelling extension for PHP applications -Group: System Environment/Libraries # All files licensed under PHP version 3.0 License: PHP Requires: php-common%{?_isa} = %{version}-%{release} -BuildRequires: pkgconfig(enchant) +BuildRequires: pkgconfig(enchant-2) %if 0%{?rhel} Obsoletes: php53-enchant, php53u-enchant, php54-enchant, php54w-enchant, php55u-enchant, php55w-enchant, php56u-enchant, php56w-enchant Obsoletes: php70u-enchant, php70w-enchant, php71u-enchant, php71w-enchant, php72u-enchant, php72w-enchant Obsoletes: php73-enchant, php73w-enchant Obsoletes: php74-enchant, php74w-enchant +Obsoletes: php80-enchant %endif %description enchant @@ -1040,7 +1037,6 @@ support for using the enchant library to PHP. Summary: ZIP archive management extension for PHP # All files licensed under PHP version 3.0.1 License: PHP -Group: System Environment/Libraries Requires: php-common%{?_isa} = %{version}-%{release} Obsoletes: php-pecl-zip < %{zipver} Provides: php-pecl(zip) = %{zipver} @@ -1052,6 +1048,7 @@ Obsoletes: php53-zip, php53u-zip, php54-zip, php54w-zip, php55u-zip, php55w-zip, Obsoletes: php70u-zip, php70w-zip, php71u-zip, php71w-zip, php72u-zip, php72w-zip Obsoletes: php73-zip, php73w-zip Obsoletes: php74-zip, php74w-zip +Obsoletes: php80-zip %endif %if %{with_libzip} BuildRequires: pkgconfig(libzip) >= 0.11 @@ -1062,36 +1059,10 @@ The php-zip package provides an extension that will add support for ZIP archive management to PHP. %endif -%package json -Summary: JavaScript Object Notation extension for PHP -# All files licensed under PHP version 3.0.1 -License: PHP -Group: System Environment/Libraries -Requires: php-common%{?_isa} = %{version}-%{release} -Obsoletes: php-pecl-json < %{version} -Obsoletes: php-pecl-jsonc < %{version} -Provides: php-pecl(json) = %{version} -Provides: php-pecl(json)%{?_isa} = %{version} -Provides: php-pecl-json = %{version} -Provides: php-pecl-json%{?_isa} = %{version} -%if 0%{?rhel} -Obsoletes: php53-json, php53u-json, php54-json, php54w-json, php55u-json, php55w-json, php56u-json, php56w-json -Obsoletes: php55u-pecl-jsonc, php56u-pecl-jsonc -Obsoletes: php70u-json, php70w-json, php71u-json, php71w-json, php72u-json, php72w-json -Obsoletes: php73-json, php73w-json -Obsoletes: php74-json, php74w-json -%endif - -%description json -The php-json package provides an extension that will add -support for JavaScript Object Notation (JSON) to PHP. - - %package sodium Summary: Wrapper for the Sodium cryptographic library # All files licensed under PHP version 3.0.1 License: PHP -Group: System Environment/Libraries # Minimal is 1.0.8, 1.0.14 is needed for argon2 password BuildRequires: pkgconfig(libsodium) >= 1.0.14 @@ -1103,6 +1074,7 @@ Provides: php-pecl(libsodium)%{?_isa} = %{version} Obsoletes: php72u-sodium, php72w-sodium Obsoletes: php73-sodium, php73w-sodium Obsoletes: php74-sodium, php74w-sodium +Obsoletes: php80-sodium %endif %description sodium @@ -1114,12 +1086,12 @@ low-level PHP extension for the libsodium cryptographic library. Summary: Foreign Function Interface # All files licensed under PHP version 3.0.1 License: PHP -Group: System Environment/Libraries BuildRequires: pkgconfig(libffi) Requires: php-common%{?_isa} = %{version}-%{release} %if 0%{?rhel} Obsoletes: php74-ffi, php74w-ffi +Obsoletes: php80-ffi %endif %description ffi @@ -1146,7 +1118,8 @@ in pure PHP. %patch9 -p1 -b .curltls %endif -%if 0%{?fedora} >= 29 || 0%{?rhel} >= 6 +%patch41 -p1 -b .syslib +%if 0%{?fedora} >= 31 || 0%{?rhel} >= 6 %patch42 -p1 -b .systzdata %endif %patch43 -p1 -b .headers @@ -1301,6 +1274,8 @@ export PHP_BUILD_SYSTEM=$(cat /etc/redhat-release | sed -e 's/ Beta//') %if 0%{?vendor:1} export PHP_BUILD_PROVIDER="%{vendor}" %endif +export PHP_BUILD_COMPILER="$(gcc --version | head -n1)" +export PHP_BUILD_ARCH="%{_arch}" # Force use of system libtool: libtoolize --force --copy @@ -1422,7 +1397,6 @@ build --libdir=%{_libdir}/php \ --with-iconv=shared \ --enable-sockets=shared \ --enable-tokenizer=shared \ - --with-xmlrpc=shared \ --with-ldap=shared --with-ldap-sasl \ --enable-mysqlnd=shared \ --with-mysqli=shared,mysqlnd \ @@ -1455,7 +1429,6 @@ build --libdir=%{_libdir}/php \ --with-pdo-sqlite=shared \ --with-pdo-dblib=shared,%{_prefix} \ --with-sqlite3=shared \ - --enable-json=shared \ %if %{with_zip} --with-zip=shared \ %endif @@ -1479,7 +1452,6 @@ without_shared="--disable-gd \ --disable-dom --disable-dba --without-unixODBC \ --disable-opcache \ --disable-phpdbg \ - --disable-json \ --without-ffi \ --disable-xmlreader --disable-xmlwriter \ --without-sodium \ @@ -1515,7 +1487,7 @@ build --enable-fpm \ popd # Build for inclusion as embedded script language into applications, -# /usr/lib[64]/libphp7.so +# /usr/lib[64]/libphp.so pushd build-embedded build --enable-embed \ --without-mysqli --disable-pdo \ @@ -1563,7 +1535,6 @@ build --includedir=%{_includedir}/php-zts \ --enable-tokenizer=shared \ --enable-exif=shared \ --enable-ftp=shared \ - --with-xmlrpc=shared \ --with-ldap=shared --with-ldap-sasl \ --enable-mysqlnd=shared \ --with-mysqli=shared,mysqlnd \ @@ -1597,7 +1568,6 @@ build --includedir=%{_includedir}/php-zts \ --with-pdo-sqlite=shared \ --with-pdo-dblib=shared,%{_prefix} \ --with-sqlite3=shared \ - --enable-json=shared \ %if %{with_zip} --with-zip=shared \ %endif @@ -1635,7 +1605,7 @@ popd %check -%if %runselftest +%if %{with tests} cd build-apache # Run tests, using the CLI SAPI @@ -1693,18 +1663,18 @@ install -m 755 -d $RPM_BUILD_ROOT%{_datadir}/php/preload # install the DSO install -m 755 -d $RPM_BUILD_ROOT%{_httpd_moddir} -install -m 755 build-apache/libs/libphp7.so $RPM_BUILD_ROOT%{_httpd_moddir}/libphp7.so +install -m 755 build-apache/libs/libphp.so $RPM_BUILD_ROOT%{_httpd_moddir}/libphp.so %if %{with_zts} # install the ZTS DSO -install -m 755 build-zts/libs/libphp7.so $RPM_BUILD_ROOT%{_httpd_moddir}/libphp7-zts.so +install -m 755 build-zts/libs/libphp.so $RPM_BUILD_ROOT%{_httpd_moddir}/libphp-zts.so %endif # Apache config fragment # Dual config file with httpd >= 2.4 (fedora >= 18) -install -D -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{_httpd_modconfdir}/15-php.conf +install -D -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{_httpd_modconfdir}/20-php.conf %if %{with_zts} && 0%{?fedora} < 27 && 0%{?rhel} < 8 -cat %{SOURCE10} >>$RPM_BUILD_ROOT%{_httpd_modconfdir}/15-php.conf +cat %{SOURCE10} >>$RPM_BUILD_ROOT%{_httpd_modconfdir}/20-php.conf %endif install -D -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_httpd_confdir}/php.conf @@ -1805,7 +1775,7 @@ done TESTCMD="$TESTCMD --define extension_dir=$RPM_BUILD_ROOT%{_libdir}/php/modules" # Generate files lists and stub .ini files for each subpackage -for mod in pgsql odbc ldap snmp imap json \ +for mod in pgsql odbc ldap snmp imap \ mysqlnd mysqli \ mbstring gd dom xsl soap bcmath dba \ simplexml bz2 calendar ctype exif ftp gettext gmp iconv \ @@ -1827,14 +1797,14 @@ for mod in pgsql odbc ldap snmp imap json \ %if %{with_firebird} pdo_firebird \ %endif - xmlrpc xmlreader xmlwriter + xmlreader xmlwriter do case $mod in opcache) # Zend extensions TESTCMD="$TESTCMD --define zend_extension=$mod" ini=10-${mod}.ini;; - pdo_*|mysqli|xmlreader|xmlrpc) + pdo_*|mysqli|xmlreader) # Extensions with dependencies on 20-* TESTCMD="$TESTCMD --define extension=$mod" ini=30-${mod}.ini;; @@ -1934,8 +1904,8 @@ rm -rf $RPM_BUILD_ROOT%{_libdir}/php/modules/*.a \ $RPM_BUILD_ROOT%{_datadir}/pear \ $RPM_BUILD_ROOT%{_bindir}/zts-phar* \ $RPM_BUILD_ROOT%{_mandir}/man1/zts-phar* \ - $RPM_BUILD_ROOT%{_libdir}/libphp7.a \ - $RPM_BUILD_ROOT%{_libdir}/libphp7.la + $RPM_BUILD_ROOT%{_libdir}/libphp.a \ + $RPM_BUILD_ROOT%{_libdir}/libphp.la # Remove irrelevant docs rm -f README.{Zeus,QNX,CVS-RULES} @@ -2003,15 +1973,15 @@ fi %{!?_licensedir:%global license %%doc} %files -%{_httpd_moddir}/libphp7.so +%{_httpd_moddir}/libphp.so %if %{with_zts} -%{_httpd_moddir}/libphp7-zts.so +%{_httpd_moddir}/libphp-zts.so %endif %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/session %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/wsdlcache %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/opcache %config(noreplace) %{_httpd_confdir}/php.conf -%config(noreplace) %{_httpd_modconfdir}/15-php.conf +%config(noreplace) %{_httpd_modconfdir}/20-php.conf %files common -f files.common %doc EXTENSIONS NEWS UPGRADING* README.REDIST.BINS *md docs @@ -2062,7 +2032,7 @@ fi %{_bindir}/zts-phpdbg %{_mandir}/man1/zts-phpdbg.1* %endif -%doc sapi/phpdbg/{README.md,CREDITS} +%doc sapi/phpdbg/CREDITS %files fpm %doc php-fpm.conf.default www.conf.default @@ -2120,8 +2090,8 @@ fi %{macrosdir}/macros.php %files embedded -%{_libdir}/libphp7.so -%{_libdir}/libphp7-%{embed_version}.so +%{_libdir}/libphp.so +%{_libdir}/libphp-%{embed_version}.so %files pgsql -f files.pgsql %files odbc -f files.odbc @@ -2129,7 +2099,6 @@ fi %files ldap -f files.ldap %files snmp -f files.snmp %files xml -f files.xml -%files xmlrpc -f files.xmlrpc %files mbstring -f files.mbstring %license libmbfl_LICENSE %files gd -f files.gd @@ -2160,13 +2129,24 @@ fi %if %{with_zip} %files zip -f files.zip %endif -%files json -f files.json %files sodium -f files.sodium %files ffi -f files.ffi %dir %{_datadir}/php/preload %changelog +* Fri Sep 11 2020 Remi Collet - 8.0.0~beta3-1 +- update to 8.0.0beta3 +- bump ABI/API versions +- drop xmlrpc extension +- json is now build statically +- use system nikic/php-parser if available to generate + C headers from PHP stub +- switch from "runselftest" option to bcond_without tests +- enchant: use libenchant-2 instead of libenchant +- rename 15-php.conf to 20-php.conf to ensure load order +- oci8 version is now 3.0.0 + * Tue Sep 1 2020 Remi Collet - 7.4.10-1 - Update to 7.4.10 - http://www.php.net/releases/7_4_10.php -- cgit