php-7.4 legacy-ebuild added.
This commit is contained in:
		
							
								
								
									
										53
									
								
								dev-lang/php/files/bug81656-gcc-11.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								dev-lang/php/files/bug81656-gcc-11.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| From bb00a649e0c1ac57718cd9971e7e6f933cb2dadd Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Wallner <mike@php.net> | ||||
| Date: Thu, 25 Nov 2021 07:43:14 +0100 | ||||
| Subject: [PATCH] fix #81656: GCC-11 silently ignores -R | ||||
|  | ||||
| --- | ||||
|  build/php.m4 | 28 ++++++++++++++-------------- | ||||
|  1 file changed, 14 insertions(+), 14 deletions(-) | ||||
|  | ||||
| diff --git a/build/php.m4 b/build/php.m4 | ||||
| index 3af2b8b72d47..4697c5df9274 100644 | ||||
| --- a/build/php.m4 | ||||
| +++ b/build/php.m4 | ||||
| @@ -279,25 +279,25 @@ dnl | ||||
|  dnl Checks for -R, etc. switch. | ||||
|  dnl | ||||
|  AC_DEFUN([PHP_RUNPATH_SWITCH],[ | ||||
| -AC_MSG_CHECKING([if compiler supports -R]) | ||||
| -AC_CACHE_VAL(php_cv_cc_dashr,[ | ||||
| +AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) | ||||
| +AC_CACHE_VAL(php_cv_cc_rpath,[ | ||||
|    SAVE_LIBS=$LIBS | ||||
| -  LIBS="-R /usr/$PHP_LIBDIR $LIBS" | ||||
| -  AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_dashr=yes],[php_cv_cc_dashr=no]) | ||||
| +  LIBS="-Wl,-rpath,/usr/$PHP_LIBDIR $LIBS" | ||||
| +  AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_rpath=yes],[php_cv_cc_rpath=no]) | ||||
|    LIBS=$SAVE_LIBS]) | ||||
| -AC_MSG_RESULT([$php_cv_cc_dashr]) | ||||
| -if test $php_cv_cc_dashr = "yes"; then | ||||
| -  ld_runpath_switch=-R | ||||
| +AC_MSG_RESULT([$php_cv_cc_rpath]) | ||||
| +if test $php_cv_cc_rpath = "yes"; then | ||||
| +  ld_runpath_switch=-Wl,-rpath, | ||||
|  else | ||||
| -  AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) | ||||
| -  AC_CACHE_VAL(php_cv_cc_rpath,[ | ||||
| +  AC_MSG_CHECKING([if compiler supports -R]) | ||||
| +  AC_CACHE_VAL(php_cv_cc_dashr,[ | ||||
|      SAVE_LIBS=$LIBS | ||||
| -    LIBS="-Wl,-rpath,/usr/$PHP_LIBDIR $LIBS" | ||||
| -    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_rpath=yes],[php_cv_cc_rpath=no]) | ||||
| +    LIBS="-R /usr/$PHP_LIBDIR $LIBS" | ||||
| +    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_dashr=yes],[php_cv_cc_dashr=no]) | ||||
|      LIBS=$SAVE_LIBS]) | ||||
| -  AC_MSG_RESULT([$php_cv_cc_rpath]) | ||||
| -  if test $php_cv_cc_rpath = "yes"; then | ||||
| -    ld_runpath_switch=-Wl,-rpath, | ||||
| +  AC_MSG_RESULT([$php_cv_cc_dashr]) | ||||
| +  if test $php_cv_cc_dashr = "yes"; then | ||||
| +    ld_runpath_switch=-R | ||||
|    else | ||||
|      dnl Something innocuous. | ||||
|      ld_runpath_switch=-L | ||||
| @@ -1,379 +0,0 @@ | ||||
| Based on the following upstream commits: | ||||
|  | ||||
| https://github.com/php/php-src/commit/8d35a423838eb462cd39ee535c5d003073cc5f22 | ||||
| https://github.com/php/php-src/commit/d8200e48857aeaf09f7127751efc5632ef7660a7 | ||||
| https://github.com/php/php-src/commit/9a8e7b571896f39f83cb000fdb7c466b6d328d52 | ||||
|  | ||||
| --- a/ext/intl/breakiterator/breakiterator_class.cpp | ||||
| +++ b/ext/intl/breakiterator/breakiterator_class.cpp | ||||
| @@ -38,6 +38,7 @@ extern "C" { | ||||
|  } | ||||
|   | ||||
|  using PHP::CodePointBreakIterator; | ||||
| +using icu::RuleBasedBreakIterator; | ||||
|   | ||||
|  /* {{{ Global variables */ | ||||
|  zend_class_entry *BreakIterator_ce_ptr; | ||||
| --- a/ext/intl/breakiterator/breakiterator_class.h | ||||
| +++ b/ext/intl/breakiterator/breakiterator_class.h | ||||
| @@ -26,6 +26,8 @@ | ||||
|   | ||||
|  #ifndef USE_BREAKITERATOR_POINTER | ||||
|  typedef void BreakIterator; | ||||
| +#else | ||||
| +using icu::BreakIterator; | ||||
|  #endif | ||||
|   | ||||
|  typedef struct { | ||||
| --- a/ext/intl/breakiterator/breakiterator_methods.cpp | ||||
| +++ b/ext/intl/breakiterator/breakiterator_methods.cpp | ||||
| @@ -32,6 +32,8 @@ extern "C" { | ||||
|  } | ||||
|   | ||||
|  using PHP::CodePointBreakIterator; | ||||
| +using icu::BreakIterator; | ||||
| +using icu::Locale; | ||||
|   | ||||
|  U_CFUNC PHP_METHOD(BreakIterator, __construct) | ||||
|  { | ||||
| --- a/ext/intl/breakiterator/codepointiterator_internal.cpp | ||||
| +++ b/ext/intl/breakiterator/codepointiterator_internal.cpp | ||||
| @@ -33,6 +33,8 @@ typedef union { | ||||
|   | ||||
|  using namespace PHP; | ||||
|   | ||||
| +using icu::UCharCharacterIterator; | ||||
| + | ||||
|  UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CodePointBreakIterator); | ||||
|   | ||||
|  CodePointBreakIterator::CodePointBreakIterator() | ||||
| --- a/ext/intl/breakiterator/codepointiterator_internal.h | ||||
| +++ b/ext/intl/breakiterator/codepointiterator_internal.h | ||||
| @@ -18,8 +18,11 @@ | ||||
|  #define CODEPOINTITERATOR_INTERNAL_H | ||||
|   | ||||
|  #include <unicode/brkiter.h> | ||||
| +#include <unicode/unistr.h> | ||||
|   | ||||
| -using U_ICU_NAMESPACE::BreakIterator; | ||||
| +using icu::BreakIterator; | ||||
| +using icu::CharacterIterator; | ||||
| +using icu::UnicodeString; | ||||
|   | ||||
|  namespace PHP { | ||||
|   | ||||
| --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | ||||
| +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | ||||
| @@ -26,6 +26,9 @@ extern "C" { | ||||
|  #include "../intl_convertcpp.h" | ||||
|  #include "../intl_common.h" | ||||
|   | ||||
| +using icu::RuleBasedBreakIterator; | ||||
| +using icu::Locale; | ||||
| + | ||||
|  static inline RuleBasedBreakIterator *fetch_rbbi(BreakIterator_object *bio) { | ||||
|  	return (RuleBasedBreakIterator*)bio->biter; | ||||
|  } | ||||
| --- a/ext/intl/calendar/calendar_class.cpp | ||||
| +++ b/ext/intl/calendar/calendar_class.cpp | ||||
| @@ -34,6 +34,9 @@ extern "C" { | ||||
|  #include <assert.h> | ||||
|  } | ||||
|   | ||||
| +using icu::GregorianCalendar; | ||||
| +using icu::Locale; | ||||
| + | ||||
|  /* {{{ Global variables */ | ||||
|  zend_class_entry *Calendar_ce_ptr; | ||||
|  zend_class_entry *GregorianCalendar_ce_ptr; | ||||
| --- a/ext/intl/calendar/calendar_class.h | ||||
| +++ b/ext/intl/calendar/calendar_class.h | ||||
| @@ -26,6 +26,8 @@ | ||||
|   | ||||
|  #ifndef USE_CALENDAR_POINTER | ||||
|  typedef void Calendar; | ||||
| +#else | ||||
| +using icu::Calendar; | ||||
|  #endif | ||||
|   | ||||
|  typedef struct { | ||||
| --- a/ext/intl/calendar/calendar_methods.cpp | ||||
| +++ b/ext/intl/calendar/calendar_methods.cpp | ||||
| @@ -40,6 +40,8 @@ extern "C" { | ||||
|  } | ||||
|  #include "../common/common_enum.h" | ||||
|   | ||||
| +using icu::Locale; | ||||
| + | ||||
|  U_CFUNC PHP_METHOD(IntlCalendar, __construct) | ||||
|  { | ||||
|  	zend_throw_exception( NULL, | ||||
| --- a/ext/intl/calendar/gregoriancalendar_methods.cpp | ||||
| +++ b/ext/intl/calendar/gregoriancalendar_methods.cpp | ||||
| @@ -23,6 +23,8 @@ | ||||
|  #include <unicode/locid.h> | ||||
|  #include <unicode/calendar.h> | ||||
|  #include <unicode/gregocal.h> | ||||
| +#include <unicode/ustring.h> | ||||
| + | ||||
|  extern "C" { | ||||
|  #include "../php_intl.h" | ||||
|  #include "../intl_common.h" | ||||
| @@ -34,6 +36,11 @@ extern "C" { | ||||
|  #include "zend_exceptions.h" | ||||
|  } | ||||
|   | ||||
| +using icu::GregorianCalendar; | ||||
| +using icu::Locale; | ||||
| +using icu::UnicodeString; | ||||
| +using icu::StringPiece; | ||||
| + | ||||
|  static inline GregorianCalendar *fetch_greg(Calendar_object *co) { | ||||
|  	return (GregorianCalendar*)co->ucal; | ||||
|  } | ||||
| --- a/ext/intl/common/common_date.cpp | ||||
| +++ b/ext/intl/common/common_date.cpp | ||||
| @@ -27,6 +27,9 @@ extern "C" { | ||||
|   | ||||
|  #include "zend_portability.h" | ||||
|   | ||||
| +using icu::TimeZone; | ||||
| +using icu::UnicodeString; | ||||
| + | ||||
|  /* {{{ timezone_convert_datetimezone | ||||
|   *      The timezone in DateTime and DateTimeZone is not unified. */ | ||||
|  U_CFUNC TimeZone *timezone_convert_datetimezone(int type, | ||||
| --- a/ext/intl/common/common_date.h | ||||
| +++ b/ext/intl/common/common_date.h | ||||
| @@ -28,6 +28,8 @@ U_CDECL_END | ||||
|   | ||||
|  #include <unicode/timezone.h> | ||||
|   | ||||
| +using icu::TimeZone; | ||||
| + | ||||
|  U_CFUNC TimeZone *timezone_convert_datetimezone(int type, void *object, int is_datetime, intl_error *outside_error, const char *func); | ||||
|  U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz, | ||||
|  		intl_error *err, const char *func); | ||||
| --- a/ext/intl/common/common_enum.h | ||||
| +++ b/ext/intl/common/common_enum.h | ||||
| @@ -75,6 +75,7 @@ U_CFUNC zval *zoi_with_current_get_current_data(zend_object_iterator *iter); | ||||
|  U_CFUNC void zoi_with_current_invalidate_current(zend_object_iterator *iter); | ||||
|   | ||||
|  #ifdef __cplusplus | ||||
| +using icu::StringEnumeration; | ||||
|  U_CFUNC void IntlIterator_from_StringEnumeration(StringEnumeration *se, zval *object); | ||||
|  #endif | ||||
|   | ||||
| --- a/ext/intl/converter/converter.c | ||||
| +++ b/ext/intl/converter/converter.c | ||||
| @@ -18,6 +18,8 @@ | ||||
|  #include "zend_exceptions.h" | ||||
|   | ||||
|  #include <unicode/utypes.h> | ||||
| +#include <unicode/utf8.h> | ||||
| +#include <unicode/utf16.h> | ||||
|  #include <unicode/ucnv.h> | ||||
|  #include <unicode/ustring.h> | ||||
|   | ||||
| --- a/ext/intl/dateformat/dateformat_format_object.cpp | ||||
| +++ b/ext/intl/dateformat/dateformat_format_object.cpp | ||||
| @@ -33,6 +33,12 @@ extern "C" { | ||||
|  #include "../common/common_date.h" | ||||
|  } | ||||
|   | ||||
| +using icu::Locale; | ||||
| +using icu::DateFormat; | ||||
| +using icu::GregorianCalendar; | ||||
| +using icu::StringPiece; | ||||
| +using icu::SimpleDateFormat; | ||||
| + | ||||
|  static const DateFormat::EStyle valid_styles[] = { | ||||
|  		DateFormat::kNone, | ||||
|  		DateFormat::kFull, | ||||
| --- a/ext/intl/dateformat/dateformat_helpers.cpp | ||||
| +++ b/ext/intl/dateformat/dateformat_helpers.cpp | ||||
| @@ -28,6 +28,8 @@ extern "C" { | ||||
|  #include "../calendar/calendar_class.h" | ||||
|  } | ||||
|   | ||||
| +using icu::GregorianCalendar; | ||||
| + | ||||
|  int datefmt_process_calendar_arg(zval* calendar_zv, | ||||
|  								 Locale const& locale, | ||||
|  								 const char *func_name, | ||||
| --- a/ext/intl/dateformat/dateformat_helpers.h | ||||
| +++ b/ext/intl/dateformat/dateformat_helpers.h | ||||
| @@ -22,11 +22,16 @@ | ||||
|  #endif | ||||
|   | ||||
|  #include <unicode/calendar.h> | ||||
| +#include <unicode/datefmt.h> | ||||
|   | ||||
|  extern "C" { | ||||
|  #include "../php_intl.h" | ||||
|  } | ||||
|   | ||||
| +using icu::Locale; | ||||
| +using icu::Calendar; | ||||
| +using icu::DateFormat; | ||||
| + | ||||
|  int datefmt_process_calendar_arg(zval* calendar_zv, | ||||
|  								 Locale const& locale, | ||||
|  								 const char *func_name, | ||||
| --- a/ext/intl/grapheme/grapheme_string.c | ||||
| +++ b/ext/intl/grapheme/grapheme_string.c | ||||
| @@ -24,6 +24,7 @@ | ||||
|  #include "grapheme_util.h" | ||||
|   | ||||
|  #include <unicode/utypes.h> | ||||
| +#include <unicode/utf8.h> | ||||
|  #include <unicode/ucol.h> | ||||
|  #include <unicode/ustring.h> | ||||
|  #include <unicode/ubrk.h> | ||||
| @@ -834,10 +835,10 @@ PHP_FUNCTION(grapheme_extract) | ||||
|  	pstr = str + start; | ||||
|   | ||||
|  	/* just in case pstr points in the middle of a character, move forward to the start of the next char */ | ||||
| -	if ( !UTF8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { | ||||
| -		char *str_end = str + str_len; | ||||
| +	if ( !U8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { | ||||
| +		unsigned char *str_end = str + str_len; | ||||
|   | ||||
| -		while ( !UTF8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { | ||||
| +		while ( !U8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { | ||||
|  			pstr++; | ||||
|  			if ( pstr >= str_end ) { | ||||
|  				intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, | ||||
| --- a/ext/intl/intl_convertcpp.h | ||||
| +++ b/ext/intl/intl_convertcpp.h | ||||
| @@ -26,6 +26,8 @@ | ||||
|  #include <unicode/unistr.h> | ||||
|  #include <zend_types.h> | ||||
|   | ||||
| +using icu::UnicodeString; | ||||
| + | ||||
|  int intl_stringFromChar(UnicodeString &ret, char *str, size_t str_len, UErrorCode *status); | ||||
|   | ||||
|  zend_string* intl_charFromString(const UnicodeString &from, UErrorCode *status); | ||||
| --- a/ext/intl/msgformat/msgformat_helpers.cpp | ||||
| +++ b/ext/intl/msgformat/msgformat_helpers.cpp | ||||
| @@ -78,6 +78,16 @@ MessageFormatAdapter::getMessagePattern(MessageFormat* m) { | ||||
|  #endif | ||||
|  U_NAMESPACE_END | ||||
|   | ||||
| +using icu::Formattable; | ||||
| +using icu::Format; | ||||
| +using icu::DateFormat; | ||||
| +using icu::MessageFormat; | ||||
| +#ifdef HAS_MESSAGE_PATTERN | ||||
| +using icu::MessagePattern; | ||||
| +#endif | ||||
| +using icu::MessageFormatAdapter; | ||||
| +using icu::FieldPosition; | ||||
| + | ||||
|  U_CFUNC int32_t umsg_format_arg_count(UMessageFormat *fmt) | ||||
|  { | ||||
|  	int32_t fmt_count = 0; | ||||
| @@ -229,15 +239,16 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo, | ||||
|  					UnicodeString typeString = mp.getSubstring(type_part); | ||||
|  					/* This is all based on the rules in the docs for MessageFormat | ||||
|  					 * @see http://icu-project.org/apiref/icu4c/classMessageFormat.html */ | ||||
| -					if (typeString == "number") { | ||||
| +#define ASCII_LITERAL(s) UNICODE_STRING(s, sizeof(s)-1) | ||||
| +					if (typeString == ASCII_LITERAL("number")) { | ||||
|  						MessagePattern::Part style_part = mp.getPart(i + 1); /* Not advancing i */ | ||||
|  						if (style_part.getType() == UMSGPAT_PART_TYPE_ARG_STYLE) { | ||||
|  							UnicodeString styleString = mp.getSubstring(style_part); | ||||
| -							if (styleString == "integer") { | ||||
| +							if (styleString == ASCII_LITERAL("integer")) { | ||||
|  								type = Formattable::kInt64; | ||||
| -							} else if (styleString == "currency") { | ||||
| +							} else if (styleString == ASCII_LITERAL("currency")) { | ||||
|  								type = Formattable::kDouble; | ||||
| -							} else if (styleString == "percent") { | ||||
| +							} else if (styleString == ASCII_LITERAL("percent")) { | ||||
|  								type = Formattable::kDouble; | ||||
|  							} else { /* some style invalid/unknown to us */ | ||||
|  								type = Formattable::kDouble; | ||||
| @@ -245,12 +256,13 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo, | ||||
|  						} else { // if missing style, part, make it a double | ||||
|  							type = Formattable::kDouble; | ||||
|  						} | ||||
| -					} else if ((typeString == "date") || (typeString == "time")) { | ||||
| +					} else if ((typeString == ASCII_LITERAL("date")) || (typeString == ASCII_LITERAL("time"))) { | ||||
|  						type = Formattable::kDate; | ||||
| -					} else if ((typeString == "spellout") || (typeString == "ordinal") | ||||
| -							|| (typeString == "duration")) { | ||||
| +					} else if ((typeString == ASCII_LITERAL("spellout")) || (typeString == ASCII_LITERAL("ordinal")) | ||||
| +							|| (typeString == ASCII_LITERAL("duration"))) { | ||||
|  						type = Formattable::kDouble; | ||||
|  					} | ||||
| +#undef ASCII_LITERAL | ||||
|  				} else { | ||||
|  					/* If there's no UMSGPAT_PART_TYPE_ARG_TYPE right after a | ||||
|  					 * UMSGPAT_ARG_TYPE_SIMPLE argument, then the pattern | ||||
| --- a/ext/intl/normalizer/normalizer_normalize.c | ||||
| +++ b/ext/intl/normalizer/normalizer_normalize.c | ||||
| @@ -24,6 +24,7 @@ | ||||
|  #include "normalizer_class.h" | ||||
|  #include "normalizer_normalize.h" | ||||
|  #include "intl_convert.h" | ||||
| +#include <unicode/utf8.h> | ||||
|   | ||||
|  /* {{{ proto string Normalizer::normalize( string $input [, string $form = FORM_C] ) | ||||
|   * Normalize a string. }}} */ | ||||
| --- a/ext/intl/timezone/timezone_class.cpp | ||||
| +++ b/ext/intl/timezone/timezone_class.cpp | ||||
| @@ -37,6 +37,8 @@ extern "C" { | ||||
|  #include <ext/date/php_date.h> | ||||
|  } | ||||
|   | ||||
| +using icu::Calendar; | ||||
| + | ||||
|  /* {{{ Global variables */ | ||||
|  U_CDECL_BEGIN | ||||
|  zend_class_entry *TimeZone_ce_ptr = NULL; | ||||
| --- a/ext/intl/timezone/timezone_class.h | ||||
| +++ b/ext/intl/timezone/timezone_class.h | ||||
| @@ -29,6 +29,8 @@ | ||||
|   | ||||
|  #ifndef USE_TIMEZONE_POINTER | ||||
|  typedef void TimeZone; | ||||
| +#else | ||||
| +using icu::TimeZone; | ||||
|  #endif | ||||
|   | ||||
|  typedef struct { | ||||
| --- a/ext/intl/timezone/timezone_methods.cpp | ||||
| +++ b/ext/intl/timezone/timezone_methods.cpp | ||||
| @@ -23,6 +23,7 @@ | ||||
|  #include <unicode/locid.h> | ||||
|  #include <unicode/timezone.h> | ||||
|  #include <unicode/ustring.h> | ||||
| +#include <unicode/calendar.h> | ||||
|  #include "intl_convertcpp.h" | ||||
|   | ||||
|  #include "../common/common_date.h" | ||||
| @@ -37,6 +38,9 @@ extern "C" { | ||||
|  } | ||||
|  #include "common/common_enum.h" | ||||
|   | ||||
| +using icu::Locale; | ||||
| +using icu::Calendar; | ||||
| + | ||||
|  U_CFUNC PHP_METHOD(IntlTimeZone, __construct) | ||||
|  { | ||||
|  	zend_throw_exception( NULL, | ||||
| --- a/ext/intl/uchar/uchar.c | ||||
| +++ b/ext/intl/uchar/uchar.c | ||||
| @@ -3,6 +3,7 @@ | ||||
|  #include "intl_convert.h" | ||||
|   | ||||
|  #include <unicode/uchar.h> | ||||
| +#include <unicode/utf8.h> | ||||
|   | ||||
|  #define IC_METHOD(mname) PHP_METHOD(IntlChar, mname) | ||||
|   | ||||
| --  | ||||
| 2.19.2 | ||||
|  | ||||
| @@ -1,174 +0,0 @@ | ||||
| Backport of https://git.php.net/?p=php-src.git;a=commit;h=ef1e4891b47949c8dc0f9482eef9454a0ecdfa1d | ||||
|  | ||||
| --- a/Zend/tests/bug52361.phpt | ||||
| +++ b/Zend/tests/bug52361.phpt | ||||
| @@ -25,9 +25,8 @@ try { | ||||
|  --EXPECTF-- | ||||
|  1. Exception: aaa in %sbug52361.php:5 | ||||
|  Stack trace: | ||||
| -#0 %sbug52361.php(13): aaa->__destruct() | ||||
| -#1 %sbug52361.php(16): bbb() | ||||
| -#2 {main} | ||||
| +#0 %sbug52361.php(16): aaa->__destruct() | ||||
| +#1 {main} | ||||
|  2. Exception: bbb in %sbug52361.php:13 | ||||
|  Stack trace: | ||||
|  #0 %sbug52361.php(16): bbb() | ||||
| --- /dev/null | ||||
| +++ b/Zend/tests/bug76047.phpt | ||||
| @@ -0,0 +1,68 @@ | ||||
| +--TEST-- | ||||
| +Bug #76047: Use-after-free when accessing already destructed backtrace arguments | ||||
| +--FILE-- | ||||
| +<?php | ||||
| + | ||||
| +class Vuln { | ||||
| +    public $a; | ||||
| +    public function __destruct() { | ||||
| +        unset($this->a); | ||||
| +        $backtrace = (new Exception)->getTrace(); | ||||
| +        var_dump($backtrace); | ||||
| +    } | ||||
| +} | ||||
| + | ||||
| +function test($arg) { | ||||
| +    $arg = str_shuffle(str_repeat('A', 79)); | ||||
| +    $vuln = new Vuln(); | ||||
| +    $vuln->a = $arg; | ||||
| +} | ||||
| + | ||||
| +function test2($arg) { | ||||
| +    $$arg = 1; // Trigger symbol table | ||||
| +    $arg = str_shuffle(str_repeat('A', 79)); | ||||
| +    $vuln = new Vuln(); | ||||
| +    $vuln->a = $arg; | ||||
| +} | ||||
| + | ||||
| +test('x'); | ||||
| +test2('x'); | ||||
| + | ||||
| +?> | ||||
| +--EXPECTF-- | ||||
| +array(1) { | ||||
| +  [0]=> | ||||
| +  array(6) { | ||||
| +    ["file"]=> | ||||
| +    string(%d) "%s" | ||||
| +    ["line"]=> | ||||
| +    int(%d) | ||||
| +    ["function"]=> | ||||
| +    string(10) "__destruct" | ||||
| +    ["class"]=> | ||||
| +    string(4) "Vuln" | ||||
| +    ["type"]=> | ||||
| +    string(2) "->" | ||||
| +    ["args"]=> | ||||
| +    array(0) { | ||||
| +    } | ||||
| +  } | ||||
| +} | ||||
| +array(1) { | ||||
| +  [0]=> | ||||
| +  array(6) { | ||||
| +    ["file"]=> | ||||
| +    string(%d) "%s" | ||||
| +    ["line"]=> | ||||
| +    int(%d) | ||||
| +    ["function"]=> | ||||
| +    string(10) "__destruct" | ||||
| +    ["class"]=> | ||||
| +    string(4) "Vuln" | ||||
| +    ["type"]=> | ||||
| +    string(2) "->" | ||||
| +    ["args"]=> | ||||
| +    array(0) { | ||||
| +    } | ||||
| +  } | ||||
| +} | ||||
| --- a/Zend/zend_vm_def.h | ||||
| +++ b/Zend/zend_vm_def.h | ||||
| @@ -2366,9 +2366,9 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) | ||||
|  	uint32_t call_info = EX_CALL_INFO(); | ||||
|   | ||||
|  	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { | ||||
| +		EG(current_execute_data) = EX(prev_execute_data); | ||||
|  		i_free_compiled_variables(execute_data); | ||||
|   | ||||
| -		EG(current_execute_data) = EX(prev_execute_data); | ||||
|  		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { | ||||
|  			zend_object *object = Z_OBJ(execute_data->This); | ||||
|  #if 0 | ||||
| @@ -2394,12 +2394,12 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) | ||||
|  		LOAD_NEXT_OPLINE(); | ||||
|  		ZEND_VM_LEAVE(); | ||||
|  	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { | ||||
| +		EG(current_execute_data) = EX(prev_execute_data); | ||||
|  		i_free_compiled_variables(execute_data); | ||||
|   | ||||
|  		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { | ||||
|  			zend_clean_and_cache_symbol_table(EX(symbol_table)); | ||||
|  		} | ||||
| -		EG(current_execute_data) = EX(prev_execute_data); | ||||
|   | ||||
|  		/* Free extra args before releasing the closure, | ||||
|  		 * as that may free the op_array. */ | ||||
| @@ -2449,6 +2449,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) | ||||
|  		ZEND_VM_LEAVE(); | ||||
|  	} else { | ||||
|  		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { | ||||
| +			EG(current_execute_data) = EX(prev_execute_data); | ||||
|  			i_free_compiled_variables(execute_data); | ||||
|  			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { | ||||
|  				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { | ||||
| @@ -2456,7 +2457,6 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) | ||||
|  				} | ||||
|  				zend_vm_stack_free_extra_args_ex(call_info, execute_data); | ||||
|  			} | ||||
| -			EG(current_execute_data) = EX(prev_execute_data); | ||||
|  			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { | ||||
|  				OBJ_RELEASE((zend_object*)EX(func)->op_array.prototype); | ||||
|  			} | ||||
| --- a/Zend/zend_vm_execute.h | ||||
| +++ b/Zend/zend_vm_execute.h | ||||
| @@ -434,9 +434,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ | ||||
|  	uint32_t call_info = EX_CALL_INFO(); | ||||
|   | ||||
|  	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { | ||||
| +		EG(current_execute_data) = EX(prev_execute_data); | ||||
|  		i_free_compiled_variables(execute_data); | ||||
|   | ||||
| -		EG(current_execute_data) = EX(prev_execute_data); | ||||
|  		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { | ||||
|  			zend_object *object = Z_OBJ(execute_data->This); | ||||
|  #if 0 | ||||
| @@ -462,12 +462,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ | ||||
|  		LOAD_NEXT_OPLINE(); | ||||
|  		ZEND_VM_LEAVE(); | ||||
|  	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { | ||||
| +		EG(current_execute_data) = EX(prev_execute_data); | ||||
|  		i_free_compiled_variables(execute_data); | ||||
|   | ||||
|  		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { | ||||
|  			zend_clean_and_cache_symbol_table(EX(symbol_table)); | ||||
|  		} | ||||
| -		EG(current_execute_data) = EX(prev_execute_data); | ||||
|   | ||||
|  		/* Free extra args before releasing the closure, | ||||
|  		 * as that may free the op_array. */ | ||||
| @@ -517,6 +517,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ | ||||
|  		ZEND_VM_LEAVE(); | ||||
|  	} else { | ||||
|  		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { | ||||
| +			EG(current_execute_data) = EX(prev_execute_data); | ||||
|  			i_free_compiled_variables(execute_data); | ||||
|  			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { | ||||
|  				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { | ||||
| @@ -524,7 +525,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ | ||||
|  				} | ||||
|  				zend_vm_stack_free_extra_args_ex(call_info, execute_data); | ||||
|  			} | ||||
| -			EG(current_execute_data) = EX(prev_execute_data); | ||||
|  			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { | ||||
|  				OBJ_RELEASE((zend_object*)EX(func)->op_array.prototype); | ||||
|  			} | ||||
|   | ||||
							
								
								
									
										11
									
								
								dev-lang/php/files/php-7.4-openssl.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								dev-lang/php/files/php-7.4-openssl.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| --- a/ext/openssl/openssl.c		2023-10-03 14:25:32.113984176 +0200 | ||||
| +++ b/ext/openssl/openssl.c		2023-10-03 14:26:00.597980289 +0200 | ||||
| @@ -1517,7 +1517,7 @@ | ||||
|  	REGISTER_LONG_CONSTANT("PKCS7_NOSIGS", PKCS7_NOSIGS, CONST_CS|CONST_PERSISTENT); | ||||
|   | ||||
|  	REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_PADDING", RSA_PKCS1_PADDING, CONST_CS|CONST_PERSISTENT); | ||||
| -	REGISTER_LONG_CONSTANT("OPENSSL_SSLV23_PADDING", RSA_SSLV23_PADDING, CONST_CS|CONST_PERSISTENT); | ||||
| +//	REGISTER_LONG_CONSTANT("OPENSSL_SSLV23_PADDING", RSA_SSLV23_PADDING, CONST_CS|CONST_PERSISTENT); | ||||
|  	REGISTER_LONG_CONSTANT("OPENSSL_NO_PADDING", RSA_NO_PADDING, CONST_CS|CONST_PERSISTENT); | ||||
|  	REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_OAEP_PADDING", RSA_PKCS1_OAEP_PADDING, CONST_CS|CONST_PERSISTENT); | ||||
|   | ||||
							
								
								
									
										50
									
								
								dev-lang/php/files/php-7.4.33-CVE-2022-31631.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								dev-lang/php/files/php-7.4.33-CVE-2022-31631.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| From 921b6813da3237a83e908998483f46ae3d8bacba Mon Sep 17 00:00:00 2001 | ||||
| From: "Christoph M. Becker" <cmbecker69@gmx.de> | ||||
| Date: Mon, 31 Oct 2022 17:20:23 +0100 | ||||
| Subject: [PATCH] Fix #81740: PDO::quote() may return unquoted string | ||||
|  | ||||
| `sqlite3_snprintf()` expects its first parameter to be `int`; we need | ||||
| to avoid overflow. | ||||
| --- | ||||
|  ext/pdo_sqlite/sqlite_driver.c     |  3 +++ | ||||
|  ext/pdo_sqlite/tests/bug81740.phpt | 17 +++++++++++++++++ | ||||
|  2 files changed, 20 insertions(+) | ||||
|  create mode 100644 ext/pdo_sqlite/tests/bug81740.phpt | ||||
|  | ||||
| diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c | ||||
| index 4233ff10ff2e..5a72a1eda23f 100644 | ||||
| --- a/ext/pdo_sqlite/sqlite_driver.c | ||||
| +++ b/ext/pdo_sqlite/sqlite_driver.c | ||||
| @@ -232,6 +232,9 @@ static char *pdo_sqlite_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t | ||||
|  /* NB: doesn't handle binary strings... use prepared stmts for that */ | ||||
|  static int sqlite_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unquotedlen, char **quoted, size_t *quotedlen, enum pdo_param_type paramtype ) | ||||
|  { | ||||
| +	if (unquotedlen > (INT_MAX - 3) / 2) { | ||||
| +		return 0; | ||||
| +	} | ||||
|  	*quoted = safe_emalloc(2, unquotedlen, 3); | ||||
|  	sqlite3_snprintf(2*unquotedlen + 3, *quoted, "'%q'", unquoted); | ||||
|  	*quotedlen = strlen(*quoted); | ||||
| diff --git a/ext/pdo_sqlite/tests/bug81740.phpt b/ext/pdo_sqlite/tests/bug81740.phpt | ||||
| new file mode 100644 | ||||
| index 000000000000..99fb07c3048b | ||||
| --- /dev/null | ||||
| +++ b/ext/pdo_sqlite/tests/bug81740.phpt | ||||
| @@ -0,0 +1,17 @@ | ||||
| +--TEST-- | ||||
| +Bug #81740 (PDO::quote() may return unquoted string) | ||||
| +--SKIPIF-- | ||||
| +<?php | ||||
| +if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; | ||||
| +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); | ||||
| +?> | ||||
| +--INI-- | ||||
| +memory_limit=-1 | ||||
| +--FILE-- | ||||
| +<?php | ||||
| +$pdo = new PDO("sqlite::memory:"); | ||||
| +$string = str_repeat("a", 0x80000000); | ||||
| +var_dump($pdo->quote($string)); | ||||
| +?> | ||||
| +--EXPECT-- | ||||
| +bool(false) | ||||
| @@ -1,233 +0,0 @@ | ||||
| --- a/ext/gd/config.m4	2018-04-24 11:09:54.000000000 -0400 | ||||
| +++ b/ext/gd/config.m4	2018-05-04 15:18:49.867283889 -0400 | ||||
| @@ -186,21 +186,36 @@ | ||||
|  AC_DEFUN([PHP_GD_FREETYPE2],[ | ||||
|    if test "$PHP_FREETYPE_DIR" != "no"; then | ||||
|   | ||||
| -    for i in $PHP_FREETYPE_DIR /usr/local /usr; do | ||||
| -      if test -f "$i/bin/freetype-config"; then | ||||
| -        FREETYPE2_DIR=$i | ||||
| -        FREETYPE2_CONFIG="$i/bin/freetype-config" | ||||
| -        break | ||||
| +    AC_PATH_PROG(PKG_CONFIG, pkg-config, no) | ||||
| +    AC_MSG_CHECKING(for freetype2) | ||||
| + | ||||
| +    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then | ||||
| + | ||||
| +      FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2` | ||||
| +      FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2` | ||||
| +      FREETYPE2_VERSION=`$PKG_CONFIG --modversion freetype2` | ||||
| +      FREETYPE2_DIR="found" | ||||
| + | ||||
| +      AC_MSG_RESULT(from pkgconfig: version $FREETYPE2_VERSION found) | ||||
| +    else | ||||
| + | ||||
| +      for i in $PHP_FREETYPE_DIR /usr/local /usr; do | ||||
| +        if test -f "$i/bin/freetype-config"; then | ||||
| +          FREETYPE2_DIR=$i | ||||
| +          FREETYPE2_CONFIG="$i/bin/freetype-config" | ||||
| +          break | ||||
| +        fi | ||||
| +      done | ||||
| + | ||||
| +      if test -z "$FREETYPE2_DIR"; then | ||||
| +        AC_MSG_ERROR([freetype-config not found.]) | ||||
|        fi | ||||
| -    done | ||||
|   | ||||
| -    if test -z "$FREETYPE2_DIR"; then | ||||
| -      AC_MSG_ERROR([freetype-config not found.]) | ||||
| +      FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` | ||||
| +      FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` | ||||
| +      AC_MSG_RESULT(found via freetype-config) | ||||
|      fi | ||||
|   | ||||
| -    FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` | ||||
| -    FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` | ||||
| - | ||||
|      PHP_EVAL_INCLINE($FREETYPE2_CFLAGS) | ||||
|      PHP_EVAL_LIBLINE($FREETYPE2_LIBS, GD_SHARED_LIBADD) | ||||
|      AC_DEFINE(HAVE_LIBFREETYPE,1,[ ]) | ||||
| --- a/configure	2018-04-24 11:10:05.000000000 -0400 | ||||
| +++ b/configure	2018-05-04 15:18:45.626367913 -0400 | ||||
| @@ -34348,21 +34348,79 @@ | ||||
|   | ||||
|    if test "$PHP_FREETYPE_DIR" != "no"; then | ||||
|   | ||||
| -    for i in $PHP_FREETYPE_DIR /usr/local /usr; do | ||||
| -      if test -f "$i/bin/freetype-config"; then | ||||
| -        FREETYPE2_DIR=$i | ||||
| -        FREETYPE2_CONFIG="$i/bin/freetype-config" | ||||
| -        break | ||||
| +    # Extract the first word of "pkg-config", so it can be a program name with args. | ||||
| +set dummy pkg-config; ac_word=$2 | ||||
| +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | ||||
| +$as_echo_n "checking for $ac_word... " >&6; } | ||||
| +if ${ac_cv_path_PKG_CONFIG+:} false; then : | ||||
| +  $as_echo_n "(cached) " >&6 | ||||
| +else | ||||
| +  case $PKG_CONFIG in | ||||
| +  [\\/]* | ?:[\\/]*) | ||||
| +  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. | ||||
| +  ;; | ||||
| +  *) | ||||
| +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | ||||
| +for as_dir in $PATH | ||||
| +do | ||||
| +  IFS=$as_save_IFS | ||||
| +  test -z "$as_dir" && as_dir=. | ||||
| +    for ac_exec_ext in '' $ac_executable_extensions; do | ||||
| +  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | ||||
| +    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" | ||||
| +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | ||||
| +    break 2 | ||||
| +  fi | ||||
| +done | ||||
| +  done | ||||
| +IFS=$as_save_IFS | ||||
| + | ||||
| +  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" | ||||
| +  ;; | ||||
| +esac | ||||
| +fi | ||||
| +PKG_CONFIG=$ac_cv_path_PKG_CONFIG | ||||
| +if test -n "$PKG_CONFIG"; then | ||||
| +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 | ||||
| +$as_echo "$PKG_CONFIG" >&6; } | ||||
| +else | ||||
| +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | ||||
| +$as_echo "no" >&6; } | ||||
| +fi | ||||
| + | ||||
| +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype2" >&5 | ||||
| +$as_echo_n "checking for freetype2... " >&6; } | ||||
| + | ||||
| + | ||||
| +    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then | ||||
| + | ||||
| +      FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2` | ||||
| +      FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2` | ||||
| +      FREETYPE2_VERSION=`$PKG_CONFIG --modversion freetype2` | ||||
| +      FREETYPE2_DIR="found" | ||||
| + | ||||
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: from pkgconfig: version $FREETYPE2_VERSION found" >&5 | ||||
| +$as_echo "from pkgconfig: version $FREETYPE2_VERSION found" >&6; } | ||||
| +    else | ||||
| + | ||||
| +      for i in $PHP_FREETYPE_DIR /usr/local /usr; do | ||||
| +        if test -f "$i/bin/freetype-config"; then | ||||
| +          FREETYPE2_DIR=$i | ||||
| +          FREETYPE2_CONFIG="$i/bin/freetype-config" | ||||
| +          break | ||||
| +        fi | ||||
| +      done | ||||
| + | ||||
| +      if test -z "$FREETYPE2_DIR"; then | ||||
| +        as_fn_error $? "freetype-config not found." "$LINENO" 5 | ||||
|        fi | ||||
| -    done | ||||
|   | ||||
| -    if test -z "$FREETYPE2_DIR"; then | ||||
| -      as_fn_error $? "freetype-config not found." "$LINENO" 5 | ||||
| +      FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` | ||||
| +      FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` | ||||
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found via freetype-config" >&5 | ||||
| +$as_echo "found via freetype-config" >&6; } | ||||
|      fi | ||||
|   | ||||
| -    FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` | ||||
| -    FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` | ||||
| - | ||||
|   | ||||
|    for ac_i in $FREETYPE2_CFLAGS; do | ||||
|      case $ac_i in | ||||
| @@ -36019,21 +36076,78 @@ | ||||
|   | ||||
|    if test "$PHP_FREETYPE_DIR" != "no"; then | ||||
|   | ||||
| -    for i in $PHP_FREETYPE_DIR /usr/local /usr; do | ||||
| -      if test -f "$i/bin/freetype-config"; then | ||||
| -        FREETYPE2_DIR=$i | ||||
| -        FREETYPE2_CONFIG="$i/bin/freetype-config" | ||||
| -        break | ||||
| +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype2" >&5 | ||||
| +$as_echo_n "checking for freetype2... " >&6; } | ||||
| +    # Extract the first word of "pkg-config", so it can be a program name with args. | ||||
| +set dummy pkg-config; ac_word=$2 | ||||
| +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | ||||
| +$as_echo_n "checking for $ac_word... " >&6; } | ||||
| +if ${ac_cv_path_PKG_CONFIG+:} false; then : | ||||
| +  $as_echo_n "(cached) " >&6 | ||||
| +else | ||||
| +  case $PKG_CONFIG in | ||||
| +  [\\/]* | ?:[\\/]*) | ||||
| +  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. | ||||
| +  ;; | ||||
| +  *) | ||||
| +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | ||||
| +for as_dir in $PATH | ||||
| +do | ||||
| +  IFS=$as_save_IFS | ||||
| +  test -z "$as_dir" && as_dir=. | ||||
| +    for ac_exec_ext in '' $ac_executable_extensions; do | ||||
| +  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | ||||
| +    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" | ||||
| +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | ||||
| +    break 2 | ||||
| +  fi | ||||
| +done | ||||
| +  done | ||||
| +IFS=$as_save_IFS | ||||
| + | ||||
| +  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" | ||||
| +  ;; | ||||
| +esac | ||||
| +fi | ||||
| +PKG_CONFIG=$ac_cv_path_PKG_CONFIG | ||||
| +if test -n "$PKG_CONFIG"; then | ||||
| +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 | ||||
| +$as_echo "$PKG_CONFIG" >&6; } | ||||
| +else | ||||
| +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | ||||
| +$as_echo "no" >&6; } | ||||
| +fi | ||||
| + | ||||
| + | ||||
| + | ||||
| +    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then | ||||
| + | ||||
| +      FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2` | ||||
| +      FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2` | ||||
| +      FREETYPE2_VERSION=`$PKG_CONFIG --modversion freetype2` | ||||
| + | ||||
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: from pkgconfig: version $FREETYPE_VERSON found" >&5 | ||||
| +$as_echo "from pkgconfig: version $FREETYPE_VERSON found" >&6; } | ||||
| +    else | ||||
| + | ||||
| +      for i in $PHP_FREETYPE_DIR /usr/local /usr; do | ||||
| +        if test -f "$i/bin/freetype-config"; then | ||||
| +          FREETYPE2_DIR=$i | ||||
| +          FREETYPE2_CONFIG="$i/bin/freetype-config" | ||||
| +          break | ||||
| +        fi | ||||
| +      done | ||||
| + | ||||
| +      if test -z "$FREETYPE2_DIR"; then | ||||
| +        as_fn_error $? "freetype-config not found." "$LINENO" 5 | ||||
|        fi | ||||
| -    done | ||||
|   | ||||
| -    if test -z "$FREETYPE2_DIR"; then | ||||
| -      as_fn_error $? "freetype-config not found." "$LINENO" 5 | ||||
| +      FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` | ||||
| +      FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` | ||||
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found via freetype-config" >&5 | ||||
| +$as_echo "found via freetype-config" >&6; } | ||||
|      fi | ||||
|   | ||||
| -    FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` | ||||
| -    FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` | ||||
| - | ||||
|   | ||||
|    for ac_i in $FREETYPE2_CFLAGS; do | ||||
|      case $ac_i in | ||||
		Reference in New Issue
	
	Block a user