[php] - update to 5.5.0beta1 http://fedoraproject.org/wiki/Features/Php55 - new Zend OPcache extension in

Remi Collet remi at fedoraproject.org
Fri Mar 22 09:04:36 UTC 2013


commit 77d120e92be73a895596c27a32ede91112048914
Author: Remi Collet <rcollet at redhat.com>
Date:   Fri Mar 22 10:04:26 2013 +0100

    - update to 5.5.0beta1 http://fedoraproject.org/wiki/Features/Php55
    - new Zend OPcache extension in php-opccache new sub-package
    - don't display XFAIL tests in report
    - use xz compressed tarball
    - build simplexml and xml extensions shared (moved in php-xml)
    - build bz2, calendar, ctype, exif, ftp, gettext, iconv sockets and tokenizer extensions shared (in php-common)
    - build gmp extension shared (in php-gmp new sub-package)
    - build shmop extension shared (moved in php-process)
    - drop some old compatibility provides (php-api, php-zend-abi, php-pecl-*)

 .gitignore             |    1 +
 opcache.ini            |   95 ++
 php-5.4.0-easter.patch |  689 -------------
 php-5.4.7-libdb.patch  |   24 +
 php-5.5.0-build.patch  | 2579 ++++++++++++++++++++++++++++++++++++++++++++++++
 php.spec               |  262 ++++--
 sources                |    2 +-
 7 files changed, 2876 insertions(+), 776 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 2f3c9a6..0b9cd09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@ php-5.3*.bz2
 /php-5.4.12.tar.bz2
 /php-5.4.13RC1.tar.bz2
 /php-5.4.13.tar.bz2
+/php-5.5.0beta1.tar.xz
diff --git a/opcache.ini b/opcache.ini
new file mode 100644
index 0000000..fd1d46d
--- /dev/null
+++ b/opcache.ini
@@ -0,0 +1,95 @@
+; Enable Zend OPcache extension module
+zend_extension=@EXTPATH@/opcache.so
+
+; Determines if Zend OPCache is enabled
+opcache.enable=1
+
+; The OPcache shared memory storage size.
+opcache.memory_consumption=128
+
+; The amount of memory for interned strings in Mbytes.
+opcache.interned_strings_buffer=8
+
+; The maximum number of keys (scripts) in the OPcache hash table.
+; Only numbers between 200 and 100000 are allowed.
+opcache.max_accelerated_files=4000
+
+; The maximum percentage of "wasted" memory until a restart is scheduled.
+;opcache.max_wasted_percentage=5
+
+; When this directive is enabled, the OPcache appends the current working
+; directory to the script key, thus eliminating possible collisions between
+; files with the same name (basename). Disabling the directive improves
+; performance, but may break existing applications.
+;opcache.use_cwd=1
+
+; When disabled, you must reset the OPcache manually or restart the
+; webserver for changes to the filesystem to take effect.
+;opcache.validate_timestamps=1
+
+; How often (in seconds) to check file timestamps for changes to the shared
+; memory storage allocation. ("1" means validate once per second, but only
+; once per request. "0" means always validate)
+;opcache.revalidate_freq=2
+
+; Enables or disables file search in include_path optimization
+;opcache.revalidate_path=0
+
+; If disabled, all PHPDoc comments are dropped from the code to reduce the
+ ;size of the optimized code.
+;opcache.save_comments=1
+
+; If disabled, PHPDoc comments are not loaded from SHM, so "Doc Comments"
+; may be always stored (save_comments=1), but not loaded by applications
+; that don't need them anyway.
+;opcache.load_comments=1
+
+; If enabled, a fast shutdown sequence is used for the accelerated code
+opcache.fast_shutdown=1
+
+; Allow file existence override (file_exists, etc.) performance feature.
+;opcache.enable_file_override=0
+
+; A bitmask, where each bit enables or disables the appropriate OPcache
+; passes
+;opcache.optimization_level=0xffffffff
+
+;opcache.inherited_hack=1
+;opcache.dups_fix=0
+
+; The location of the OPcache blacklist file.
+; The OPcache blacklist file is a text file that holds the names of files
+; that should not be accelerated. The file format is to add each filename
+; to a new line. The filename may be a full path or just a file prefix
+; (i.e., /var/www/x  blacklists all the files and directories in /var/www
+; that start with 'x').
+;opcache.blacklist_filename=
+
+; Allows exclusion of large files from being cached. By default all files
+; are cached.
+;opcache.max_file_size=0
+
+; Check the cache checksum each N requests.
+; The default value of "0" means that the checks are disabled.
+;opcache.consistency_checks=0
+
+; How long to wait (in seconds) for a scheduled restart to begin if the cache
+; is not being accessed.
+;opcache.force_restart_timeout=180
+
+; OPcache error_log file name. Empty string assumes "stderr".
+;opcache.error_log=
+
+; All OPcache errors go to the Web server log.
+; By default, only fatal errors (level 0) or errors (level 1) are logged.
+; You can also enable warnings (level 2), info messages (level 3) or
+; debug messages (level 4).
+;opcache.log_verbosity_level=1
+
+; Preferred Shared Memory back-end. Leave empty and let the system decide.
+;opcache.preferred_memory_model=
+
+; Protect the shared memory from unexpected writing during script execution.
+; Useful for internal debugging only.
+;opcache.protect_memory=0
+
diff --git a/php-5.4.7-libdb.patch b/php-5.4.7-libdb.patch
index 0b1e305..bc4e1fc 100644
--- a/php-5.4.7-libdb.patch
+++ b/php-5.4.7-libdb.patch
@@ -60,3 +60,27 @@
  fi
  PHP_DBA_STD_RESULT(db4,Berkeley DB4)
  
+--- php-5.4.7/ext/dba/dba.c.old	2012-09-19 14:55:23.868456900 +0200
++++ php-5.4.7/ext/dba/dba.c	2012-09-19 15:02:42.796009320 +0200
+@@ -52,6 +52,10 @@
+ #include "php_qdbm.h"
+ #include "php_tcadb.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)
+@@ -522,6 +526,10 @@
+ 
+ 	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.c) {
+ 		smart_str_0(&handlers);
+ 		php_info_print_table_row(2, "Supported handlers", handlers.c);
diff --git a/php-5.5.0-build.patch b/php-5.5.0-build.patch
new file mode 100644
index 0000000..27a16da
--- /dev/null
+++ b/php-5.5.0-build.patch
@@ -0,0 +1,2579 @@
+diff -ru php-5.5.0beta1/Zend/zend_ini_parser.c php5.5-201303201430/Zend/zend_ini_parser.c
+--- php-5.5.0beta1/Zend/zend_ini_parser.c	2013-03-20 15:26:53.000000000 +0100
++++ php5.5-201303201430/Zend/zend_ini_parser.c	2013-03-20 15:37:18.000000000 +0100
+@@ -1,8 +1,10 @@
+-/* A Bison parser, made by GNU Bison 2.6.1.  */
+ 
+-/* Bison implementation for Yacc-like parsers in C
++/* A Bison parser, made by GNU Bison 2.4.1.  */
++
++/* Skeleton implementation for Bison's Yacc-like parsers in C
+    
+-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
++      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   Free Software Foundation, Inc.
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -44,7 +46,7 @@
+ #define YYBISON 1
+ 
+ /* Bison version.  */
+-#define YYBISON_VERSION "2.6.1"
++#define YYBISON_VERSION "2.4.1"
+ 
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+@@ -58,6 +60,8 @@
+ /* Pull parsers.  */
+ #define YYPULL 1
+ 
++/* Using locations.  */
++#define YYLSP_NEEDED 0
+ 
+ /* Substitute the variable and function names.  */
+ #define yyparse         ini_parse
+@@ -68,6 +72,7 @@
+ #define yydebug         ini_debug
+ #define yynerrs         ini_nerrs
+ 
++
+ /* Copy the first part of user declarations.  */
+ 
+ 
+@@ -319,13 +324,10 @@
+ 
+ 
+ 
+-# ifndef YY_NULL
+-#  if defined __cplusplus && 201103L <= __cplusplus
+-#   define YY_NULL nullptr
+-#  else
+-#   define YY_NULL 0
+-#  endif
+-# endif
++/* Enabling traces.  */
++#ifndef YYDEBUG
++# define YYDEBUG 0
++#endif
+ 
+ /* Enabling verbose error messages.  */
+ #ifdef YYERROR_VERBOSE
+@@ -335,18 +337,12 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-/* In a future release of Bison, this section will be replaced
+-   by #include "zend_ini_parser.h".  */
+-#ifndef INI_ZEND_ZEND_INI_PARSER_H
+-# define INI_ZEND_ZEND_INI_PARSER_H
+-/* Enabling traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
+-#if YYDEBUG
+-extern int ini_debug;
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
+ #endif
+ 
++
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+@@ -387,6 +383,7 @@
+ 
+ 
+ 
++
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef int YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -395,22 +392,6 @@
+ #endif
+ 
+ 
+-#ifdef YYPARSE_PARAM
+-#if defined __STDC__ || defined __cplusplus
+-int ini_parse (void *YYPARSE_PARAM);
+-#else
+-int ini_parse ();
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if defined __STDC__ || defined __cplusplus
+-int ini_parse (void);
+-#else
+-int ini_parse ();
+-#endif
+-#endif /* ! YYPARSE_PARAM */
+-
+-#endif /* !INI_ZEND_ZEND_INI_PARSER_H  */
+-
+ /* Copy the second part of user declarations.  */
+ 
+ 
+@@ -463,7 +444,7 @@
+ #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+ 
+ #ifndef YY_
+-# if defined YYENABLE_NLS && YYENABLE_NLS
++# if YYENABLE_NLS
+ #  if ENABLE_NLS
+ #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+ #   define YY_(msgid) dgettext ("bison-runtime", msgid)
+@@ -516,12 +497,11 @@
+ #    define alloca _alloca
+ #   else
+ #    define YYSTACK_ALLOC alloca
+-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+-#     ifndef EXIT_SUCCESS
+-#      define EXIT_SUCCESS 0
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
+ #     endif
+ #    endif
+ #   endif
+@@ -544,24 +524,24 @@
+ #  ifndef YYSTACK_ALLOC_MAXIMUM
+ #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+ #  endif
+-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
++#  if (defined __cplusplus && ! defined _STDLIB_H \
+        && ! ((defined YYMALLOC || defined malloc) \
+ 	     && (defined YYFREE || defined free)))
+ #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   ifndef EXIT_SUCCESS
+-#    define EXIT_SUCCESS 0
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
+ #   endif
+ #  endif
+ #  ifndef YYMALLOC
+ #   define YYMALLOC malloc
+-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+ #   define YYFREE free
+-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ void free (void *); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+@@ -590,7 +570,23 @@
+      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+-# define YYCOPY_NEEDED 1
++/* Copy COUNT objects from FROM to TO.  The source and destination do
++   not overlap.  */
++# ifndef YYCOPY
++#  if defined __GNUC__ && 1 < __GNUC__
++#   define YYCOPY(To, From, Count) \
++      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
++#  else
++#   define YYCOPY(To, From, Count)		\
++      do					\
++	{					\
++	  YYSIZE_T yyi;				\
++	  for (yyi = 0; yyi < (Count); yyi++)	\
++	    (To)[yyi] = (From)[yyi];		\
++	}					\
++      while (YYID (0))
++#  endif
++# endif
+ 
+ /* Relocate STACK from its old location to the new one.  The
+    local variables YYSIZE and YYSTACKSIZE give the old and new number of
+@@ -610,26 +606,6 @@
+ 
+ #endif
+ 
+-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+-/* Copy COUNT objects from SRC to DST.  The source and destination do
+-   not overlap.  */
+-# ifndef YYCOPY
+-#  if defined __GNUC__ && 1 < __GNUC__
+-#   define YYCOPY(Dst, Src, Count) \
+-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+-#  else
+-#   define YYCOPY(Dst, Src, Count)              \
+-      do                                        \
+-        {                                       \
+-          YYSIZE_T yyi;                         \
+-          for (yyi = 0; yyi < (Count); yyi++)   \
+-            (Dst)[yyi] = (Src)[yyi];            \
+-        }                                       \
+-      while (YYID (0))
+-#  endif
+-# endif
+-#endif /* !YYCOPY_NEEDED */
+-
+ /* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  2
+ /* YYLAST -- Last index in YYTABLE.  */
+@@ -725,7 +701,7 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE || 0
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+ /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+@@ -739,7 +715,7 @@
+   "$accept", "statement_list", "statement", "section_string_or_value",
+   "string_or_value", "option_offset", "encapsed_list",
+   "var_string_list_section", "var_string_list", "expr", "cfg_var_ref",
+-  "constant_literal", "constant_string", YY_NULL
++  "constant_literal", "constant_string", 0
+ };
+ #endif
+ 
+@@ -776,8 +752,8 @@
+        1,     1,     1,     1,     1,     1,     1,     1,     1
+ };
+ 
+-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+-   Performed when YYTABLE doesn't specify something else to do.  Zero
++/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
++   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+ static const yytype_uint8 yydefact[] =
+ {
+@@ -820,7 +796,8 @@
+ 
+ /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+    positive, shift that token.  If negative, reduce the rule which
+-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
++   number is the opposite.  If zero, do what YYDEFACT says.
++   If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -1
+ static const yytype_uint8 yytable[] =
+ {
+@@ -837,12 +814,6 @@
+        0,     0,     4,     5,     0,    47,     0,    68,     0,     6
+ };
+ 
+-#define yypact_value_is_default(yystate) \
+-  ((yystate) == (-36))
+-
+-#define yytable_value_is_error(yytable_value) \
+-  YYID (0)
+-
+ static const yytype_int8 yycheck[] =
+ {
+        3,    25,    37,    38,     4,     5,     6,     7,     8,    33,
+@@ -883,33 +854,24 @@
+ 
+ /* Like YYERROR except do call yyerror.  This remains here temporarily
+    to ease the transition to the new meaning of YYERROR, for GCC.
+-   Once GCC version 2 has supplanted version 1, this can go.  However,
+-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+-   discussed.  */
++   Once GCC version 2 has supplanted version 1, this can go.  */
+ 
+ #define YYFAIL		goto yyerrlab
+-#if defined YYFAIL
+-  /* This is here to suppress warnings from the GCC cpp's
+-     -Wunused-macros.  Normally we don't worry about that warning, but
+-     some users do, and we want to make it easy for users to remove
+-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+-#endif
+ 
+ #define YYRECOVERING()  (!!yyerrstatus)
+ 
+-#define YYBACKUP(Token, Value)                                  \
+-do                                                              \
+-  if (yychar == YYEMPTY)                                        \
+-    {                                                           \
+-      yychar = (Token);                                         \
+-      yylval = (Value);                                         \
+-      YYPOPSTACK (yylen);                                       \
+-      yystate = *yyssp;                                         \
+-      goto yybackup;                                            \
+-    }                                                           \
+-  else                                                          \
+-    {                                                           \
++#define YYBACKUP(Token, Value)					\
++do								\
++  if (yychar == YYEMPTY && yylen == 1)				\
++    {								\
++      yychar = (Token);						\
++      yylval = (Value);						\
++      yytoken = YYTRANSLATE (yychar);				\
++      YYPOPSTACK (1);						\
++      goto yybackup;						\
++    }								\
++  else								\
++    {								\
+       yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+@@ -919,38 +881,46 @@
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
++
+ /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+    If N is 0, then set CURRENT to the empty location which ends
+    the previous symbol: RHS[0] (always defined).  */
+ 
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+-    do                                                                  \
+-      if (YYID (N))                                                     \
+-        {                                                               \
+-          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+-          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+-          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+-          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+-        }                                                               \
+-      else                                                              \
+-        {                                                               \
+-          (Current).first_line   = (Current).last_line   =              \
+-            YYRHSLOC (Rhs, 0).last_line;                                \
+-          (Current).first_column = (Current).last_column =              \
+-            YYRHSLOC (Rhs, 0).last_column;                              \
+-        }                                                               \
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
+     while (YYID (0))
+ #endif
+ 
+-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ 
+-
+-
+-/* This macro is provided for backward compatibility. */
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
+ 
+ #ifndef YY_LOCATION_PRINT
+-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
+ 
+@@ -1005,8 +975,6 @@
+     YYSTYPE const * const yyvaluep;
+ #endif
+ {
+-  FILE *yyo = yyoutput;
+-  YYUSE (yyo);
+   if (!yyvaluep)
+     return;
+ # ifdef YYPRINT
+@@ -1144,6 +1112,7 @@
+ # define YYMAXDEPTH 10000
+ #endif
+ 
++
+ 
+ #if YYERROR_VERBOSE
+ 
+@@ -1246,142 +1215,115 @@
+ }
+ # endif
+ 
+-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+-   about the unexpected token YYTOKEN for the state stack whose top is
+-   YYSSP.
+-
+-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+-   not large enough to hold the message.  In that case, also set
+-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+-   required number of bytes is too large to store.  */
+-static int
+-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+-                yytype_int16 *yyssp, int yytoken)
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+-  YYSIZE_T yysize = yysize0;
+-  YYSIZE_T yysize1;
+-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+-  /* Internationalized format string. */
+-  const char *yyformat = YY_NULL;
+-  /* Arguments of yyformat. */
+-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+-  /* Number of reported tokens (one for the "unexpected", one per
+-     "expected"). */
+-  int yycount = 0;
+-
+-  /* There are many possibilities here to consider:
+-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+-       for details.  YYERROR is fine as it does not invoke this
+-       function.
+-     - If this state is a consistent state with a default action, then
+-       the only way this function was invoked is if the default action
+-       is an error action.  In that case, don't check for expected
+-       tokens because there are none.
+-     - The only way there can be no lookahead present (in yychar) is if
+-       this state is a consistent state with a default action.  Thus,
+-       detecting the absence of a lookahead is sufficient to determine
+-       that there is no unexpected or expected token to report.  In that
+-       case, just report a simple "syntax error".
+-     - Don't assume there isn't a lookahead just because this state is a
+-       consistent state with a default action.  There might have been a
+-       previous inconsistent state, consistent state with a non-default
+-       action, or user semantic action that manipulated yychar.
+-     - Of course, the expected token list depends on states to have
+-       correct lookahead information, and it depends on the parser not
+-       to perform extra reductions after fetching a lookahead from the
+-       scanner and before detecting a syntax error.  Thus, state merging
+-       (from LALR or IELR) and default reductions corrupt the expected
+-       token list.  However, the list is correct for canonical LR with
+-       one exception: it will still contain any token that will not be
+-       accepted due to an error action in a later state.
+-  */
+-  if (yytoken != YYEMPTY)
+-    {
+-      int yyn = yypact[*yyssp];
+-      yyarg[yycount++] = yytname[yytoken];
+-      if (!yypact_value_is_default (yyn))
+-        {
+-          /* Start YYX at -YYN if negative to avoid negative indexes in
+-             YYCHECK.  In other words, skip the first -YYN actions for
+-             this state because they are default actions.  */
+-          int yyxbegin = yyn < 0 ? -yyn : 0;
+-          /* Stay within bounds of both yycheck and yytname.  */
+-          int yychecklim = YYLAST - yyn + 1;
+-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-          int yyx;
+-
+-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+-                && !yytable_value_is_error (yytable[yyx + yyn]))
+-              {
+-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+-                  {
+-                    yycount = 1;
+-                    yysize = yysize0;
+-                    break;
+-                  }
+-                yyarg[yycount++] = yytname[yyx];
+-                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+-                if (! (yysize <= yysize1
+-                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+-                  return 2;
+-                yysize = yysize1;
+-              }
+-        }
+-    }
++  int yyn = yypact[yystate];
+ 
+-  switch (yycount)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-# define YYCASE_(N, S)                      \
+-      case N:                               \
+-        yyformat = S;                       \
+-      break
+-      YYCASE_(0, YY_("syntax error"));
+-      YYCASE_(1, YY_("syntax error, unexpected %s"));
+-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+-# undef YYCASE_
+-    }
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
++# endif
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
+ 
+-  yysize1 = yysize + yystrlen (yyformat);
+-  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+-    return 2;
+-  yysize = yysize1;
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
+ 
+-  if (*yymsg_alloc < yysize)
+-    {
+-      *yymsg_alloc = 2 * yysize;
+-      if (! (yysize <= *yymsg_alloc
+-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+-      return 1;
+-    }
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
+ 
+-  /* Avoid sprintf, as that infringes on the user's name space.
+-     Don't have undefined behavior even if the translation
+-     produced a string with the wrong number of "%s"s.  */
+-  {
+-    char *yyp = *yymsg;
+-    int yyi = 0;
+-    while ((*yyp = *yyformat) != '\0')
+-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+-        {
+-          yyp += yytnamerr (yyp, yyarg[yyi++]);
+-          yyformat += 2;
+-        }
+-      else
+-        {
+-          yyp++;
+-          yyformat++;
+-        }
+-  }
+-  return 0;
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
++
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
++    }
+ }
+ #endif /* YYERROR_VERBOSE */
++
+ 
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+@@ -1414,12 +1356,28 @@
+     }
+ }
+ 
++/* Prevent warnings from -Wmissing-prototypes.  */
++#ifdef YYPARSE_PARAM
++#if defined __STDC__ || defined __cplusplus
++int yyparse (void *YYPARSE_PARAM);
++#else
++int yyparse ();
++#endif
++#else /* ! YYPARSE_PARAM */
++#if defined __STDC__ || defined __cplusplus
++int yyparse (void);
++#else
++int yyparse ();
++#endif
++#endif /* ! YYPARSE_PARAM */
++
++
+ 
+ 
+ 
+-/*----------.
+-| yyparse.  |
+-`----------*/
++/*-------------------------.
++| yyparse or yypush_parse.  |
++`-------------------------*/
+ 
+ #ifdef YYPARSE_PARAM
+ #if (defined __STDC__ || defined __C99__FUNC__ \
+@@ -1460,7 +1418,7 @@
+        `yyss': related to states.
+        `yyvs': related to semantic values.
+ 
+-       Refer to the stacks through separate pointers, to allow yyoverflow
++       Refer to the stacks thru separate pointers, to allow yyoverflow
+        to reallocate them elsewhere.  */
+ 
+     /* The state stack.  */
+@@ -1514,6 +1472,7 @@
+      The wasted elements are never initialized.  */
+   yyssp = yyss;
+   yyvsp = yyvs;
++
+   goto yysetstate;
+ 
+ /*------------------------------------------------------------.
+@@ -1605,7 +1564,7 @@
+ 
+   /* First try to decide what to do without reference to lookahead token.  */
+   yyn = yypact[yystate];
+-  if (yypact_value_is_default (yyn))
++  if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+   /* Not known => get a lookahead token if don't already have one.  */
+@@ -1636,8 +1595,8 @@
+   yyn = yytable[yyn];
+   if (yyn <= 0)
+     {
+-      if (yytable_value_is_error (yyn))
+-        goto yyerrlab;
++      if (yyn == 0 || yyn == YYTABLE_NINF)
++	goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+@@ -1935,17 +1894,6 @@
+ 
+       default: break;
+     }
+-  /* User semantic actions sometimes alter yychar, and that requires
+-     that yytoken be updated with the new translation.  We take the
+-     approach of translating immediately before every use of yytoken.
+-     One alternative is translating here after every semantic action,
+-     but that translation would be missed if the semantic action invokes
+-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+-     incorrect destructor might then be invoked immediately.  In the
+-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+-     to an incorrect destructor call or verbose syntax error message
+-     before the lookahead is translated.  */
+   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+   YYPOPSTACK (yylen);
+@@ -1973,10 +1921,6 @@
+ | yyerrlab -- here on detecting error |
+ `------------------------------------*/
+ yyerrlab:
+-  /* Make sure we have latest lookahead translation.  See comments at
+-     user semantic actions for why this is necessary.  */
+-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+-
+   /* If not already recovering from an error, report this error.  */
+   if (!yyerrstatus)
+     {
+@@ -1984,36 +1928,37 @@
+ #if ! YYERROR_VERBOSE
+       yyerror (YY_("syntax error"));
+ #else
+-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+-                                        yyssp, yytoken)
+       {
+-        char const *yymsgp = YY_("syntax error");
+-        int yysyntax_error_status;
+-        yysyntax_error_status = YYSYNTAX_ERROR;
+-        if (yysyntax_error_status == 0)
+-          yymsgp = yymsg;
+-        else if (yysyntax_error_status == 1)
+-          {
+-            if (yymsg != yymsgbuf)
+-              YYSTACK_FREE (yymsg);
+-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+-            if (!yymsg)
+-              {
+-                yymsg = yymsgbuf;
+-                yymsg_alloc = sizeof yymsgbuf;
+-                yysyntax_error_status = 2;
+-              }
+-            else
+-              {
+-                yysyntax_error_status = YYSYNTAX_ERROR;
+-                yymsgp = yymsg;
+-              }
+-          }
+-        yyerror (yymsgp);
+-        if (yysyntax_error_status == 2)
+-          goto yyexhaustedlab;
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
++	      {
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
++	      }
++	  }
++
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
+       }
+-# undef YYSYNTAX_ERROR
+ #endif
+     }
+ 
+@@ -2072,7 +2017,7 @@
+   for (;;)
+     {
+       yyn = yypact[yystate];
+-      if (!yypact_value_is_default (yyn))
++      if (yyn != YYPACT_NINF)
+ 	{
+ 	  yyn += YYTERROR;
+ 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+@@ -2119,7 +2064,7 @@
+   yyresult = 1;
+   goto yyreturn;
+ 
+-#if !defined yyoverflow || YYERROR_VERBOSE
++#if !defined(yyoverflow) || YYERROR_VERBOSE
+ /*-------------------------------------------------.
+ | yyexhaustedlab -- memory exhaustion comes here.  |
+ `-------------------------------------------------*/
+@@ -2131,13 +2076,8 @@
+ 
+ yyreturn:
+   if (yychar != YYEMPTY)
+-    {
+-      /* Make sure we have latest lookahead translation.  See comments at
+-         user semantic actions for why this is necessary.  */
+-      yytoken = YYTRANSLATE (yychar);
+-      yydestruct ("Cleanup: discarding lookahead",
+-                  yytoken, &yylval);
+-    }
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
+   /* Do not reclaim the symbols of the rule which action triggered
+      this YYABORT or YYACCEPT.  */
+   YYPOPSTACK (yylen);
+diff -ru php-5.5.0beta1/Zend/zend_ini_parser.h php5.5-201303201430/Zend/zend_ini_parser.h
+--- php-5.5.0beta1/Zend/zend_ini_parser.h	2013-03-20 15:26:53.000000000 +0100
++++ php5.5-201303201430/Zend/zend_ini_parser.h	2013-03-20 15:37:18.000000000 +0100
+@@ -1,8 +1,10 @@
+-/* A Bison parser, made by GNU Bison 2.6.1.  */
+ 
+-/* Bison interface for Yacc-like parsers in C
++/* A Bison parser, made by GNU Bison 2.4.1.  */
++
++/* Skeleton interface for Bison's Yacc-like parsers in C
+    
+-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
++      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   Free Software Foundation, Inc.
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -30,15 +32,6 @@
+    This special exception was added by the Free Software Foundation in
+    version 2.2 of Bison.  */
+ 
+-#ifndef INI_ZEND_ZEND_INI_PARSER_H
+-# define INI_ZEND_ZEND_INI_PARSER_H
+-/* Enabling traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
+-#if YYDEBUG
+-extern int ini_debug;
+-#endif
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -80,6 +73,7 @@
+ 
+ 
+ 
++
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef int YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -88,18 +82,5 @@
+ #endif
+ 
+ 
+-#ifdef YYPARSE_PARAM
+-#if defined __STDC__ || defined __cplusplus
+-int ini_parse (void *YYPARSE_PARAM);
+-#else
+-int ini_parse ();
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if defined __STDC__ || defined __cplusplus
+-int ini_parse (void);
+-#else
+-int ini_parse ();
+-#endif
+-#endif /* ! YYPARSE_PARAM */
+ 
+-#endif /* !INI_ZEND_ZEND_INI_PARSER_H  */
++
+diff -ru php-5.5.0beta1/Zend/zend_ini_scanner.c php5.5-201303201430/Zend/zend_ini_scanner.c
+--- php-5.5.0beta1/Zend/zend_ini_scanner.c	2013-03-20 15:09:27.000000000 +0100
++++ php5.5-201303201430/Zend/zend_ini_scanner.c	2013-03-20 15:37:18.000000000 +0100
+@@ -1,5 +1,4 @@
+ /* Generated by re2c 0.13.5 */
+-#line 1 "Zend/zend_ini_scanner.l"
+ /*
+    +----------------------------------------------------------------------+
+    | Zend Engine                                                          |
+@@ -333,7 +332,6 @@
+ 		}
+ 	}
+ 
+-#line 337 "Zend/zend_ini_scanner.c"
+ {
+ 	YYCTYPE yych;
+ 	unsigned int yyaccept = 0;
+@@ -462,7 +460,6 @@
+ yy3:
+ 		YYDEBUG(3, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 429 "Zend/zend_ini_scanner.l"
+ 		{ /* Get option name */
+ 	/* Eat leading whitespace */
+ 	EAT_LEADING_WHITESPACE();
+@@ -472,7 +469,6 @@
+ 
+ 	RETURN_TOKEN(TC_LABEL, yytext, yyleng);
+ }
+-#line 476 "Zend/zend_ini_scanner.c"
+ yy4:
+ 		YYDEBUG(4, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -481,24 +477,20 @@
+ yy5:
+ 		YYDEBUG(5, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 575 "Zend/zend_ini_scanner.l"
+ 		{
+ 	/* eat whitespace */
+ 	goto restart;
+ }
+-#line 490 "Zend/zend_ini_scanner.c"
+ yy6:
+ 		YYDEBUG(6, *YYCURSOR);
+ 		++YYCURSOR;
+ yy7:
+ 		YYDEBUG(7, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 580 "Zend/zend_ini_scanner.l"
+ 		{
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 502 "Zend/zend_ini_scanner.c"
+ yy8:
+ 		YYDEBUG(8, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -533,11 +525,9 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(11, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 503 "Zend/zend_ini_scanner.l"
+ 		{ /* Disallow these chars outside option values */
+ 	return yytext[0];
+ }
+-#line 541 "Zend/zend_ini_scanner.c"
+ yy12:
+ 		YYDEBUG(12, *YYCURSOR);
+ 		yyaccept = 1;
+@@ -554,11 +544,9 @@
+ 		goto yy54;
+ 		YYDEBUG(15, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 603 "Zend/zend_ini_scanner.l"
+ 		{
+ 	return 0;
+ }
+-#line 562 "Zend/zend_ini_scanner.c"
+ yy16:
+ 		YYDEBUG(16, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -567,7 +555,6 @@
+ yy17:
+ 		YYDEBUG(17, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 439 "Zend/zend_ini_scanner.l"
+ 		{ /* Start option value */
+ 	if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
+ 		yy_push_state(ST_RAW TSRMLS_CC);
+@@ -576,7 +563,6 @@
+ 	}
+ 	return '=';
+ }
+-#line 580 "Zend/zend_ini_scanner.c"
+ yy18:
+ 		YYDEBUG(18, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -632,7 +618,6 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(24, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 358 "Zend/zend_ini_scanner.l"
+ 		{ /* Section start */
+ 	/* Enter section data lookup state */
+ 	if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
+@@ -642,7 +627,6 @@
+ 	}
+ 	return TC_SECTION;
+ }
+-#line 646 "Zend/zend_ini_scanner.c"
+ yy25:
+ 		YYDEBUG(25, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -672,7 +656,6 @@
+ 		}
+ 		YYDEBUG(30, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 383 "Zend/zend_ini_scanner.l"
+ 		{ /* Start of option with offset */
+ 	/* Eat leading whitespace */
+ 	EAT_LEADING_WHITESPACE();
+@@ -685,7 +668,6 @@
+ 
+ 	RETURN_TOKEN(TC_OFFSET, yytext, yyleng);
+ }
+-#line 689 "Zend/zend_ini_scanner.c"
+ yy31:
+ 		YYDEBUG(31, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -733,11 +715,9 @@
+ yy33:
+ 		YYDEBUG(33, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 421 "Zend/zend_ini_scanner.l"
+ 		{ /* TRUE value (when used outside option value/offset this causes parse error!) */
+ 	RETURN_TOKEN(BOOL_TRUE, "1", 1);
+ }
+-#line 741 "Zend/zend_ini_scanner.c"
+ yy34:
+ 		YYDEBUG(34, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -807,11 +787,9 @@
+ yy41:
+ 		YYDEBUG(41, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 425 "Zend/zend_ini_scanner.l"
+ 		{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
+ 	RETURN_TOKEN(BOOL_FALSE, "", 0);
+ }
+-#line 815 "Zend/zend_ini_scanner.c"
+ yy42:
+ 		YYDEBUG(42, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -926,13 +904,11 @@
+ yy56:
+ 		YYDEBUG(56, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 585 "Zend/zend_ini_scanner.l"
+ 		{ /* Comment */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 936 "Zend/zend_ini_scanner.c"
+ yy57:
+ 		YYDEBUG(57, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -1012,14 +988,12 @@
+ yy65:
+ 		YYDEBUG(65, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 591 "Zend/zend_ini_scanner.l"
+ 		{ /* #Comment */
+ 	zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno));
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 1023 "Zend/zend_ini_scanner.c"
+ yy66:
+ 		YYDEBUG(66, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -1159,7 +1133,6 @@
+ yy76:
+ 		YYDEBUG(76, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 535 "Zend/zend_ini_scanner.l"
+ 		{ /* Escape double quoted string contents */
+ 	if (YYCURSOR > YYLIMIT) {
+ 		return 0;
+@@ -1195,7 +1168,6 @@
+ 	zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC);
+ 	return TC_QUOTED_STRING;
+ }
+-#line 1199 "Zend/zend_ini_scanner.c"
+ yy77:
+ 		YYDEBUG(77, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -1204,12 +1176,10 @@
+ yy78:
+ 		YYDEBUG(78, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 530 "Zend/zend_ini_scanner.l"
+ 		{ /* Double quoted '"' string ends */
+ 	yy_pop_state(TSRMLS_C);
+ 	return '"';
+ }
+-#line 1213 "Zend/zend_ini_scanner.c"
+ yy79:
+ 		YYDEBUG(79, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -1218,12 +1188,10 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(81, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 401 "Zend/zend_ini_scanner.l"
+ 		{ /* Variable start */
+ 	yy_push_state(ST_VARNAME TSRMLS_CC);
+ 	return TC_DOLLAR_CURLY;
+ }
+-#line 1227 "Zend/zend_ini_scanner.c"
+ yy82:
+ 		YYDEBUG(82, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -1323,11 +1291,9 @@
+ yy87:
+ 		YYDEBUG(87, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 521 "Zend/zend_ini_scanner.l"
+ 		{ /* Get rest as section/offset value */
+ 	RETURN_TOKEN(TC_STRING, yytext, yyleng);
+ }
+-#line 1331 "Zend/zend_ini_scanner.c"
+ yy88:
+ 		YYDEBUG(88, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -1344,23 +1310,19 @@
+ yy90:
+ 		YYDEBUG(90, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 603 "Zend/zend_ini_scanner.l"
+ 		{
+ 	return 0;
+ }
+-#line 1352 "Zend/zend_ini_scanner.c"
+ yy91:
+ 		YYDEBUG(91, *YYCURSOR);
+ 		++YYCURSOR;
+ yy92:
+ 		YYDEBUG(92, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 525 "Zend/zend_ini_scanner.l"
+ 		{ /* Double quoted '"' string start */
+ 	yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
+ 	return '"';
+ }
+-#line 1364 "Zend/zend_ini_scanner.c"
+ yy93:
+ 		YYDEBUG(93, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -1422,11 +1384,9 @@
+ yy98:
+ 		YYDEBUG(98, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 499 "Zend/zend_ini_scanner.l"
+ 		{ /* Get number option value as string */
+ 	RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
+ }
+-#line 1430 "Zend/zend_ini_scanner.c"
+ yy99:
+ 		YYDEBUG(99, *YYCURSOR);
+ 		yyaccept = 3;
+@@ -1452,11 +1412,9 @@
+ yy100:
+ 		YYDEBUG(100, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 495 "Zend/zend_ini_scanner.l"
+ 		{ /* Get constant option value */
+ 	RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
+ }
+-#line 1460 "Zend/zend_ini_scanner.c"
+ yy101:
+ 		YYDEBUG(101, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -1467,12 +1425,10 @@
+ yy103:
+ 		YYDEBUG(103, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 396 "Zend/zend_ini_scanner.l"
+ 		{ /* End of section or an option offset */
+ 	BEGIN(INITIAL);
+ 	return ']';
+ }
+-#line 1476 "Zend/zend_ini_scanner.c"
+ yy104:
+ 		YYDEBUG(104, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -1762,7 +1718,6 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(128, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 368 "Zend/zend_ini_scanner.l"
+ 		{ /* Raw string */
+ 	/* Eat leading and trailing single quotes */
+ 	if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
+@@ -1771,18 +1726,15 @@
+ 	}
+ 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
+ }
+-#line 1775 "Zend/zend_ini_scanner.c"
+ yy129:
+ 		YYDEBUG(129, *YYCURSOR);
+ 		++YYCURSOR;
+ 		YYDEBUG(130, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 401 "Zend/zend_ini_scanner.l"
+ 		{ /* Variable start */
+ 	yy_push_state(ST_VARNAME TSRMLS_CC);
+ 	return TC_DOLLAR_CURLY;
+ }
+-#line 1786 "Zend/zend_ini_scanner.c"
+ yy131:
+ 		YYDEBUG(131, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -1887,19 +1839,16 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(138, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 598 "Zend/zend_ini_scanner.l"
+ 		{ /* End of option value (if EOF is reached before EOL */
+ 	BEGIN(INITIAL);
+ 	return END_OF_LINE;
+ }
+-#line 1896 "Zend/zend_ini_scanner.c"
+ yy139:
+ 		YYDEBUG(139, *YYCURSOR);
+ 		++YYCURSOR;
+ yy140:
+ 		YYDEBUG(140, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 448 "Zend/zend_ini_scanner.l"
+ 		{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
+ 	char *sc = NULL;
+ 	while (YYCURSOR < YYLIMIT) {
+@@ -1936,7 +1885,6 @@
+ 	}
+ 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
+ }
+-#line 1940 "Zend/zend_ini_scanner.c"
+ yy141:
+ 		YYDEBUG(141, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -1961,13 +1909,11 @@
+ yy143:
+ 		YYDEBUG(143, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 489 "Zend/zend_ini_scanner.l"
+ 		{ /* End of option value */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 1971 "Zend/zend_ini_scanner.c"
+ yy144:
+ 		YYDEBUG(144, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -1995,13 +1941,11 @@
+ yy149:
+ 		YYDEBUG(149, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 585 "Zend/zend_ini_scanner.l"
+ 		{ /* Comment */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 2005 "Zend/zend_ini_scanner.c"
+ yy150:
+ 		YYDEBUG(150, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -2030,12 +1974,10 @@
+ 		}
+ 		YYDEBUG(154, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 575 "Zend/zend_ini_scanner.l"
+ 		{
+ 	/* eat whitespace */
+ 	goto restart;
+ }
+-#line 2039 "Zend/zend_ini_scanner.c"
+ yy155:
+ 		YYDEBUG(155, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -2095,21 +2037,17 @@
+ yy159:
+ 		YYDEBUG(159, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 485 "Zend/zend_ini_scanner.l"
+ 		{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
+ 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
+ }
+-#line 2103 "Zend/zend_ini_scanner.c"
+ yy160:
+ 		YYDEBUG(160, *YYCURSOR);
+ 		++YYCURSOR;
+ 		YYDEBUG(161, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 603 "Zend/zend_ini_scanner.l"
+ 		{
+ 	return 0;
+ }
+-#line 2113 "Zend/zend_ini_scanner.c"
+ yy162:
+ 		YYDEBUG(162, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -2118,13 +2056,11 @@
+ yy163:
+ 		YYDEBUG(163, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 377 "Zend/zend_ini_scanner.l"
+ 		{ /* End of section */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return ']';
+ }
+-#line 2128 "Zend/zend_ini_scanner.c"
+ yy164:
+ 		YYDEBUG(164, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -2246,11 +2182,9 @@
+ yy173:
+ 		YYDEBUG(173, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 521 "Zend/zend_ini_scanner.l"
+ 		{ /* Get rest as section/offset value */
+ 	RETURN_TOKEN(TC_STRING, yytext, yyleng);
+ }
+-#line 2254 "Zend/zend_ini_scanner.c"
+ yy174:
+ 		YYDEBUG(174, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -2269,23 +2203,19 @@
+ yy176:
+ 		YYDEBUG(176, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 603 "Zend/zend_ini_scanner.l"
+ 		{
+ 	return 0;
+ }
+-#line 2277 "Zend/zend_ini_scanner.c"
+ yy177:
+ 		YYDEBUG(177, *YYCURSOR);
+ 		++YYCURSOR;
+ yy178:
+ 		YYDEBUG(178, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 525 "Zend/zend_ini_scanner.l"
+ 		{ /* Double quoted '"' string start */
+ 	yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
+ 	return '"';
+ }
+-#line 2289 "Zend/zend_ini_scanner.c"
+ yy179:
+ 		YYDEBUG(179, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -2347,11 +2277,9 @@
+ yy184:
+ 		YYDEBUG(184, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 499 "Zend/zend_ini_scanner.l"
+ 		{ /* Get number option value as string */
+ 	RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
+ }
+-#line 2355 "Zend/zend_ini_scanner.c"
+ yy185:
+ 		YYDEBUG(185, *YYCURSOR);
+ 		yyaccept = 3;
+@@ -2377,11 +2305,9 @@
+ yy186:
+ 		YYDEBUG(186, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 495 "Zend/zend_ini_scanner.l"
+ 		{ /* Get constant option value */
+ 	RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
+ }
+-#line 2385 "Zend/zend_ini_scanner.c"
+ yy187:
+ 		YYDEBUG(187, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -2394,13 +2320,11 @@
+ yy189:
+ 		YYDEBUG(189, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 377 "Zend/zend_ini_scanner.l"
+ 		{ /* End of section */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return ']';
+ }
+-#line 2404 "Zend/zend_ini_scanner.c"
+ yy190:
+ 		YYDEBUG(190, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -2712,7 +2636,6 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(218, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 368 "Zend/zend_ini_scanner.l"
+ 		{ /* Raw string */
+ 	/* Eat leading and trailing single quotes */
+ 	if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
+@@ -2721,18 +2644,15 @@
+ 	}
+ 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
+ }
+-#line 2725 "Zend/zend_ini_scanner.c"
+ yy219:
+ 		YYDEBUG(219, *YYCURSOR);
+ 		++YYCURSOR;
+ 		YYDEBUG(220, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 401 "Zend/zend_ini_scanner.l"
+ 		{ /* Variable start */
+ 	yy_push_state(ST_VARNAME TSRMLS_CC);
+ 	return TC_DOLLAR_CURLY;
+ }
+-#line 2736 "Zend/zend_ini_scanner.c"
+ yy221:
+ 		YYDEBUG(221, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -2912,12 +2832,10 @@
+ yy227:
+ 		YYDEBUG(227, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 598 "Zend/zend_ini_scanner.l"
+ 		{ /* End of option value (if EOF is reached before EOL */
+ 	BEGIN(INITIAL);
+ 	return END_OF_LINE;
+ }
+-#line 2921 "Zend/zend_ini_scanner.c"
+ yy228:
+ 		YYDEBUG(228, *YYCURSOR);
+ 		yyaccept = 0;
+@@ -2926,11 +2844,9 @@
+ yy229:
+ 		YYDEBUG(229, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 517 "Zend/zend_ini_scanner.l"
+ 		{ /* Get everything else as option/offset value */
+ 	RETURN_TOKEN(TC_STRING, yytext, yyleng);
+ }
+-#line 2934 "Zend/zend_ini_scanner.c"
+ yy230:
+ 		YYDEBUG(230, *YYCURSOR);
+ 		yyaccept = 1;
+@@ -2939,24 +2855,20 @@
+ yy231:
+ 		YYDEBUG(231, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 571 "Zend/zend_ini_scanner.l"
+ 		{
+ 	RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
+ }
+-#line 2947 "Zend/zend_ini_scanner.c"
+ yy232:
+ 		YYDEBUG(232, *YYCURSOR);
+ 		++YYCURSOR;
+ yy233:
+ 		YYDEBUG(233, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 489 "Zend/zend_ini_scanner.l"
+ 		{ /* End of option value */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 2960 "Zend/zend_ini_scanner.c"
+ yy234:
+ 		YYDEBUG(234, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -2970,23 +2882,19 @@
+ yy236:
+ 		YYDEBUG(236, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 507 "Zend/zend_ini_scanner.l"
+ 		{ /* Boolean operators */
+ 	return yytext[0];
+ }
+-#line 2978 "Zend/zend_ini_scanner.c"
+ yy237:
+ 		YYDEBUG(237, *YYCURSOR);
+ 		++YYCURSOR;
+ yy238:
+ 		YYDEBUG(238, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 525 "Zend/zend_ini_scanner.l"
+ 		{ /* Double quoted '"' string start */
+ 	yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
+ 	return '"';
+ }
+-#line 2990 "Zend/zend_ini_scanner.c"
+ yy239:
+ 		YYDEBUG(239, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -3062,11 +2970,9 @@
+ yy244:
+ 		YYDEBUG(244, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 499 "Zend/zend_ini_scanner.l"
+ 		{ /* Get number option value as string */
+ 	RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
+ }
+-#line 3070 "Zend/zend_ini_scanner.c"
+ yy245:
+ 		YYDEBUG(245, *YYCURSOR);
+ 		yyaccept = 2;
+@@ -3077,13 +2983,11 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(247, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 511 "Zend/zend_ini_scanner.l"
+ 		{ /* Make = used in option value to trigger error */
+ 	yyless(0);
+ 	BEGIN(INITIAL);
+ 	return END_OF_LINE;
+ }
+-#line 3087 "Zend/zend_ini_scanner.c"
+ yy248:
+ 		YYDEBUG(248, *YYCURSOR);
+ 		yyaccept = 4;
+@@ -3119,11 +3023,9 @@
+ yy249:
+ 		YYDEBUG(249, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 495 "Zend/zend_ini_scanner.l"
+ 		{ /* Get constant option value */
+ 	RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
+ }
+-#line 3127 "Zend/zend_ini_scanner.c"
+ yy250:
+ 		YYDEBUG(250, *YYCURSOR);
+ 		yyaccept = 4;
+@@ -3615,11 +3517,9 @@
+ yy266:
+ 		YYDEBUG(266, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 421 "Zend/zend_ini_scanner.l"
+ 		{ /* TRUE value (when used outside option value/offset this causes parse error!) */
+ 	RETURN_TOKEN(BOOL_TRUE, "1", 1);
+ }
+-#line 3623 "Zend/zend_ini_scanner.c"
+ yy267:
+ 		YYDEBUG(267, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -3819,11 +3719,9 @@
+ yy273:
+ 		YYDEBUG(273, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 425 "Zend/zend_ini_scanner.l"
+ 		{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
+ 	RETURN_TOKEN(BOOL_FALSE, "", 0);
+ }
+-#line 3827 "Zend/zend_ini_scanner.c"
+ yy274:
+ 		YYDEBUG(274, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -4199,13 +4097,11 @@
+ yy286:
+ 		YYDEBUG(286, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 585 "Zend/zend_ini_scanner.l"
+ 		{ /* Comment */
+ 	BEGIN(INITIAL);
+ 	SCNG(lineno)++;
+ 	return END_OF_LINE;
+ }
+-#line 4209 "Zend/zend_ini_scanner.c"
+ yy287:
+ 		YYDEBUG(287, *YYCURSOR);
+ 		yych = *++YYCURSOR;
+@@ -4417,7 +4313,6 @@
+ 		++YYCURSOR;
+ 		YYDEBUG(299, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 368 "Zend/zend_ini_scanner.l"
+ 		{ /* Raw string */
+ 	/* Eat leading and trailing single quotes */
+ 	if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
+@@ -4426,18 +4321,15 @@
+ 	}
+ 	RETURN_TOKEN(TC_RAW, yytext, yyleng);
+ }
+-#line 4430 "Zend/zend_ini_scanner.c"
+ yy300:
+ 		YYDEBUG(300, *YYCURSOR);
+ 		++YYCURSOR;
+ 		YYDEBUG(301, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 401 "Zend/zend_ini_scanner.l"
+ 		{ /* Variable start */
+ 	yy_push_state(ST_VARNAME TSRMLS_CC);
+ 	return TC_DOLLAR_CURLY;
+ }
+-#line 4441 "Zend/zend_ini_scanner.c"
+ yy302:
+ 		YYDEBUG(302, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -4566,7 +4458,6 @@
+ yy312:
+ 		YYDEBUG(312, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 406 "Zend/zend_ini_scanner.l"
+ 		{ /* Variable name */
+ 	/* Eat leading whitespace */
+ 	EAT_LEADING_WHITESPACE();
+@@ -4576,28 +4467,23 @@
+ 
+ 	RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
+ }
+-#line 4580 "Zend/zend_ini_scanner.c"
+ yy313:
+ 		YYDEBUG(313, *YYCURSOR);
+ 		++YYCURSOR;
+ 		YYDEBUG(314, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 603 "Zend/zend_ini_scanner.l"
+ 		{
+ 	return 0;
+ }
+-#line 4590 "Zend/zend_ini_scanner.c"
+ yy315:
+ 		YYDEBUG(315, *YYCURSOR);
+ 		++YYCURSOR;
+ 		YYDEBUG(316, *YYCURSOR);
+ 		yyleng = YYCURSOR - SCNG(yy_text);
+-#line 416 "Zend/zend_ini_scanner.l"
+ 		{ /* Variable end */
+ 	yy_pop_state(TSRMLS_C);
+ 	return '}';
+ }
+-#line 4601 "Zend/zend_ini_scanner.c"
+ yy317:
+ 		YYDEBUG(317, *YYCURSOR);
+ 		++YYCURSOR;
+@@ -4611,6 +4497,5 @@
+ 		goto yy312;
+ 	}
+ }
+-#line 607 "Zend/zend_ini_scanner.l"
+ 
+ }
+diff -ru php-5.5.0beta1/Zend/zend_ini_scanner_defs.h php5.5-201303201430/Zend/zend_ini_scanner_defs.h
+--- php-5.5.0beta1/Zend/zend_ini_scanner_defs.h	2013-03-20 15:09:27.000000000 +0100
++++ php5.5-201303201430/Zend/zend_ini_scanner_defs.h	2013-03-20 15:37:18.000000000 +0100
+@@ -1,5 +1,4 @@
+ /* Generated by re2c 0.13.5 */
+-#line 3 "Zend/zend_ini_scanner_defs.h"
+ 
+ enum YYCONDTYPE {
+ 	yycINITIAL,
+diff -ru php-5.5.0beta1/Zend/zend_language_parser.c php5.5-201303201430/Zend/zend_language_parser.c
+--- php-5.5.0beta1/Zend/zend_language_parser.c	2013-03-20 15:26:53.000000000 +0100
++++ php5.5-201303201430/Zend/zend_language_parser.c	2013-03-20 15:37:18.000000000 +0100
+@@ -1,8 +1,10 @@
+-/* A Bison parser, made by GNU Bison 2.6.1.  */
+ 
+-/* Bison implementation for Yacc-like parsers in C
++/* A Bison parser, made by GNU Bison 2.4.1.  */
++
++/* Skeleton implementation for Bison's Yacc-like parsers in C
+    
+-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
++      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   Free Software Foundation, Inc.
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -44,7 +46,7 @@
+ #define YYBISON 1
+ 
+ /* Bison version.  */
+-#define YYBISON_VERSION "2.6.1"
++#define YYBISON_VERSION "2.4.1"
+ 
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+@@ -58,6 +60,8 @@
+ /* Pull parsers.  */
+ #define YYPULL 1
+ 
++/* Using locations.  */
++#define YYLSP_NEEDED 0
+ 
+ /* Substitute the variable and function names.  */
+ #define yyparse         zendparse
+@@ -68,6 +72,7 @@
+ #define yydebug         zenddebug
+ #define yynerrs         zendnerrs
+ 
++
+ /* Copy the first part of user declarations.  */
+ 
+ 
+@@ -122,13 +127,10 @@
+ 
+ 
+ 
+-# ifndef YY_NULL
+-#  if defined __cplusplus && 201103L <= __cplusplus
+-#   define YY_NULL nullptr
+-#  else
+-#   define YY_NULL 0
+-#  endif
+-# endif
++/* Enabling traces.  */
++#ifndef YYDEBUG
++# define YYDEBUG 0
++#endif
+ 
+ /* Enabling verbose error messages.  */
+ #ifdef YYERROR_VERBOSE
+@@ -138,18 +140,12 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-/* In a future release of Bison, this section will be replaced
+-   by #include "zend_language_parser.h".  */
+-#ifndef ZEND_ZEND_ZEND_LANGUAGE_PARSER_H
+-# define ZEND_ZEND_ZEND_LANGUAGE_PARSER_H
+-/* Enabling traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
+-#if YYDEBUG
+-extern int zenddebug;
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
+ #endif
+ 
++
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+@@ -422,6 +418,7 @@
+ 
+ 
+ 
++
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef int YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -430,22 +427,6 @@
+ #endif
+ 
+ 
+-#ifdef YYPARSE_PARAM
+-#if defined __STDC__ || defined __cplusplus
+-int zendparse (void *YYPARSE_PARAM);
+-#else
+-int zendparse ();
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if defined __STDC__ || defined __cplusplus
+-int zendparse (void);
+-#else
+-int zendparse ();
+-#endif
+-#endif /* ! YYPARSE_PARAM */
+-
+-#endif /* !ZEND_ZEND_ZEND_LANGUAGE_PARSER_H  */
+-
+ /* Copy the second part of user declarations.  */
+ 
+ 
+@@ -498,7 +479,7 @@
+ #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+ 
+ #ifndef YY_
+-# if defined YYENABLE_NLS && YYENABLE_NLS
++# if YYENABLE_NLS
+ #  if ENABLE_NLS
+ #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+ #   define YY_(msgid) dgettext ("bison-runtime", msgid)
+@@ -551,12 +532,11 @@
+ #    define alloca _alloca
+ #   else
+ #    define YYSTACK_ALLOC alloca
+-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+-#     ifndef EXIT_SUCCESS
+-#      define EXIT_SUCCESS 0
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
+ #     endif
+ #    endif
+ #   endif
+@@ -579,24 +559,24 @@
+ #  ifndef YYSTACK_ALLOC_MAXIMUM
+ #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+ #  endif
+-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
++#  if (defined __cplusplus && ! defined _STDLIB_H \
+        && ! ((defined YYMALLOC || defined malloc) \
+ 	     && (defined YYFREE || defined free)))
+ #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   ifndef EXIT_SUCCESS
+-#    define EXIT_SUCCESS 0
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
+ #   endif
+ #  endif
+ #  ifndef YYMALLOC
+ #   define YYMALLOC malloc
+-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+ #   define YYFREE free
+-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ void free (void *); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+@@ -625,7 +605,23 @@
+      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+-# define YYCOPY_NEEDED 1
++/* Copy COUNT objects from FROM to TO.  The source and destination do
++   not overlap.  */
++# ifndef YYCOPY
++#  if defined __GNUC__ && 1 < __GNUC__
++#   define YYCOPY(To, From, Count) \
++      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
++#  else
++#   define YYCOPY(To, From, Count)		\
++      do					\
++	{					\
++	  YYSIZE_T yyi;				\
++	  for (yyi = 0; yyi < (Count); yyi++)	\
++	    (To)[yyi] = (From)[yyi];		\
++	}					\
++      while (YYID (0))
++#  endif
++# endif
+ 
+ /* Relocate STACK from its old location to the new one.  The
+    local variables YYSIZE and YYSTACKSIZE give the old and new number of
+@@ -645,26 +641,6 @@
+ 
+ #endif
+ 
+-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+-/* Copy COUNT objects from SRC to DST.  The source and destination do
+-   not overlap.  */
+-# ifndef YYCOPY
+-#  if defined __GNUC__ && 1 < __GNUC__
+-#   define YYCOPY(Dst, Src, Count) \
+-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+-#  else
+-#   define YYCOPY(Dst, Src, Count)              \
+-      do                                        \
+-        {                                       \
+-          YYSIZE_T yyi;                         \
+-          for (yyi = 0; yyi < (Count); yyi++)   \
+-            (Dst)[yyi] = (Src)[yyi];            \
+-        }                                       \
+-      while (YYID (0))
+-#  endif
+-# endif
+-#endif /* !YYCOPY_NEEDED */
+-
+ /* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+@@ -1032,7 +1008,7 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE || 0
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+ /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+@@ -1157,7 +1133,7 @@
+   "non_empty_array_pair_list", "encaps_list", "encaps_var", "$@75",
+   "encaps_var_offset", "internal_functions_in_yacc", "isset_variables",
+   "$@76", "isset_variable", "class_constant", "static_class_name_scalar",
+-  "class_name_scalar", YY_NULL
++  "class_name_scalar", 0
+ };
+ #endif
+ 
+@@ -1305,8 +1281,8 @@
+        1,     1,     3,     3,     3,     3
+ };
+ 
+-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+-   Performed when YYTABLE doesn't specify something else to do.  Zero
++/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
++   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+ static const yytype_uint16 yydefact[] =
+ {
+@@ -1577,7 +1553,8 @@
+ 
+ /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+    positive, shift that token.  If negative, reduce the rule which
+-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
++   number is the opposite.  If zero, do what YYDEFACT says.
++   If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -542
+ static const yytype_int16 yytable[] =
+ {
+@@ -2096,12 +2073,6 @@
+      272,   273,   274,   275,   276,     0,   277
+ };
+ 
+-#define yypact_value_is_default(yystate) \
+-  ((yystate) == (-770))
+-
+-#define yytable_value_is_error(yytable_value) \
+-  ((yytable_value) == (-542))
+-
+ static const yytype_int16 yycheck[] =
+ {
+       24,    25,     4,   126,    28,    24,    25,     4,    11,    28,
+@@ -2738,33 +2709,24 @@
+ 
+ /* Like YYERROR except do call yyerror.  This remains here temporarily
+    to ease the transition to the new meaning of YYERROR, for GCC.
+-   Once GCC version 2 has supplanted version 1, this can go.  However,
+-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+-   discussed.  */
++   Once GCC version 2 has supplanted version 1, this can go.  */
+ 
+ #define YYFAIL		goto yyerrlab
+-#if defined YYFAIL
+-  /* This is here to suppress warnings from the GCC cpp's
+-     -Wunused-macros.  Normally we don't worry about that warning, but
+-     some users do, and we want to make it easy for users to remove
+-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+-#endif
+ 
+ #define YYRECOVERING()  (!!yyerrstatus)
+ 
+-#define YYBACKUP(Token, Value)                                  \
+-do                                                              \
+-  if (yychar == YYEMPTY)                                        \
+-    {                                                           \
+-      yychar = (Token);                                         \
+-      yylval = (Value);                                         \
+-      YYPOPSTACK (yylen);                                       \
+-      yystate = *yyssp;                                         \
+-      goto yybackup;                                            \
+-    }                                                           \
+-  else                                                          \
+-    {                                                           \
++#define YYBACKUP(Token, Value)					\
++do								\
++  if (yychar == YYEMPTY && yylen == 1)				\
++    {								\
++      yychar = (Token);						\
++      yylval = (Value);						\
++      yytoken = YYTRANSLATE (yychar);				\
++      YYPOPSTACK (1);						\
++      goto yybackup;						\
++    }								\
++  else								\
++    {								\
+       yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+@@ -2774,38 +2736,46 @@
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
++
+ /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+    If N is 0, then set CURRENT to the empty location which ends
+    the previous symbol: RHS[0] (always defined).  */
+ 
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+-    do                                                                  \
+-      if (YYID (N))                                                     \
+-        {                                                               \
+-          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+-          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+-          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+-          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+-        }                                                               \
+-      else                                                              \
+-        {                                                               \
+-          (Current).first_line   = (Current).last_line   =              \
+-            YYRHSLOC (Rhs, 0).last_line;                                \
+-          (Current).first_column = (Current).last_column =              \
+-            YYRHSLOC (Rhs, 0).last_column;                              \
+-        }                                                               \
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
+     while (YYID (0))
+ #endif
+ 
+-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+-
+-
+ 
+-/* This macro is provided for backward compatibility. */
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
+ 
+ #ifndef YY_LOCATION_PRINT
+-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
+ 
+@@ -2860,8 +2830,6 @@
+     YYSTYPE const * const yyvaluep;
+ #endif
+ {
+-  FILE *yyo = yyoutput;
+-  YYUSE (yyo);
+   if (!yyvaluep)
+     return;
+ # ifdef YYPRINT
+@@ -2999,6 +2967,7 @@
+ # define YYMAXDEPTH 10000
+ #endif
+ 
++
+ 
+ #if YYERROR_VERBOSE
+ 
+@@ -3101,142 +3070,115 @@
+ }
+ # endif
+ 
+-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+-   about the unexpected token YYTOKEN for the state stack whose top is
+-   YYSSP.
+-
+-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+-   not large enough to hold the message.  In that case, also set
+-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+-   required number of bytes is too large to store.  */
+-static int
+-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+-                yytype_int16 *yyssp, int yytoken)
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+-  YYSIZE_T yysize = yysize0;
+-  YYSIZE_T yysize1;
+-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+-  /* Internationalized format string. */
+-  const char *yyformat = YY_NULL;
+-  /* Arguments of yyformat. */
+-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+-  /* Number of reported tokens (one for the "unexpected", one per
+-     "expected"). */
+-  int yycount = 0;
+-
+-  /* There are many possibilities here to consider:
+-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+-       for details.  YYERROR is fine as it does not invoke this
+-       function.
+-     - If this state is a consistent state with a default action, then
+-       the only way this function was invoked is if the default action
+-       is an error action.  In that case, don't check for expected
+-       tokens because there are none.
+-     - The only way there can be no lookahead present (in yychar) is if
+-       this state is a consistent state with a default action.  Thus,
+-       detecting the absence of a lookahead is sufficient to determine
+-       that there is no unexpected or expected token to report.  In that
+-       case, just report a simple "syntax error".
+-     - Don't assume there isn't a lookahead just because this state is a
+-       consistent state with a default action.  There might have been a
+-       previous inconsistent state, consistent state with a non-default
+-       action, or user semantic action that manipulated yychar.
+-     - Of course, the expected token list depends on states to have
+-       correct lookahead information, and it depends on the parser not
+-       to perform extra reductions after fetching a lookahead from the
+-       scanner and before detecting a syntax error.  Thus, state merging
+-       (from LALR or IELR) and default reductions corrupt the expected
+-       token list.  However, the list is correct for canonical LR with
+-       one exception: it will still contain any token that will not be
+-       accepted due to an error action in a later state.
+-  */
+-  if (yytoken != YYEMPTY)
+-    {
+-      int yyn = yypact[*yyssp];
+-      yyarg[yycount++] = yytname[yytoken];
+-      if (!yypact_value_is_default (yyn))
+-        {
+-          /* Start YYX at -YYN if negative to avoid negative indexes in
+-             YYCHECK.  In other words, skip the first -YYN actions for
+-             this state because they are default actions.  */
+-          int yyxbegin = yyn < 0 ? -yyn : 0;
+-          /* Stay within bounds of both yycheck and yytname.  */
+-          int yychecklim = YYLAST - yyn + 1;
+-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-          int yyx;
+-
+-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+-                && !yytable_value_is_error (yytable[yyx + yyn]))
+-              {
+-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+-                  {
+-                    yycount = 1;
+-                    yysize = yysize0;
+-                    break;
+-                  }
+-                yyarg[yycount++] = yytname[yyx];
+-                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+-                if (! (yysize <= yysize1
+-                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+-                  return 2;
+-                yysize = yysize1;
+-              }
+-        }
+-    }
++  int yyn = yypact[yystate];
+ 
+-  switch (yycount)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-# define YYCASE_(N, S)                      \
+-      case N:                               \
+-        yyformat = S;                       \
+-      break
+-      YYCASE_(0, YY_("syntax error"));
+-      YYCASE_(1, YY_("syntax error, unexpected %s"));
+-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+-# undef YYCASE_
+-    }
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
++# endif
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
+ 
+-  yysize1 = yysize + yystrlen (yyformat);
+-  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+-    return 2;
+-  yysize = yysize1;
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
+ 
+-  if (*yymsg_alloc < yysize)
+-    {
+-      *yymsg_alloc = 2 * yysize;
+-      if (! (yysize <= *yymsg_alloc
+-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+-      return 1;
+-    }
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
+ 
+-  /* Avoid sprintf, as that infringes on the user's name space.
+-     Don't have undefined behavior even if the translation
+-     produced a string with the wrong number of "%s"s.  */
+-  {
+-    char *yyp = *yymsg;
+-    int yyi = 0;
+-    while ((*yyp = *yyformat) != '\0')
+-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+-        {
+-          yyp += yytnamerr (yyp, yyarg[yyi++]);
+-          yyformat += 2;
+-        }
+-      else
+-        {
+-          yyp++;
+-          yyformat++;
+-        }
+-  }
+-  return 0;
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
++
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
++    }
+ }
+ #endif /* YYERROR_VERBOSE */
++
+ 
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+@@ -3269,12 +3211,28 @@
+     }
+ }
+ 
++/* Prevent warnings from -Wmissing-prototypes.  */
++#ifdef YYPARSE_PARAM
++#if defined __STDC__ || defined __cplusplus
++int yyparse (void *YYPARSE_PARAM);
++#else
++int yyparse ();
++#endif
++#else /* ! YYPARSE_PARAM */
++#if defined __STDC__ || defined __cplusplus
++int yyparse (void);
++#else
++int yyparse ();
++#endif
++#endif /* ! YYPARSE_PARAM */
++
++
+ 
+ 
+ 
+-/*----------.
+-| yyparse.  |
+-`----------*/
++/*-------------------------.
++| yyparse or yypush_parse.  |
++`-------------------------*/
+ 
+ #ifdef YYPARSE_PARAM
+ #if (defined __STDC__ || defined __C99__FUNC__ \
+@@ -3315,7 +3273,7 @@
+        `yyss': related to states.
+        `yyvs': related to semantic values.
+ 
+-       Refer to the stacks through separate pointers, to allow yyoverflow
++       Refer to the stacks thru separate pointers, to allow yyoverflow
+        to reallocate them elsewhere.  */
+ 
+     /* The state stack.  */
+@@ -3369,6 +3327,7 @@
+      The wasted elements are never initialized.  */
+   yyssp = yyss;
+   yyvsp = yyvs;
++
+   goto yysetstate;
+ 
+ /*------------------------------------------------------------.
+@@ -3460,7 +3419,7 @@
+ 
+   /* First try to decide what to do without reference to lookahead token.  */
+   yyn = yypact[yystate];
+-  if (yypact_value_is_default (yyn))
++  if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+   /* Not known => get a lookahead token if don't already have one.  */
+@@ -3491,8 +3450,8 @@
+   yyn = yytable[yyn];
+   if (yyn <= 0)
+     {
+-      if (yytable_value_is_error (yyn))
+-        goto yyerrlab;
++      if (yyn == 0 || yyn == YYTABLE_NINF)
++	goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+@@ -5976,17 +5935,6 @@
+ 
+       default: break;
+     }
+-  /* User semantic actions sometimes alter yychar, and that requires
+-     that yytoken be updated with the new translation.  We take the
+-     approach of translating immediately before every use of yytoken.
+-     One alternative is translating here after every semantic action,
+-     but that translation would be missed if the semantic action invokes
+-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+-     incorrect destructor might then be invoked immediately.  In the
+-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+-     to an incorrect destructor call or verbose syntax error message
+-     before the lookahead is translated.  */
+   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+   YYPOPSTACK (yylen);
+@@ -6014,10 +5962,6 @@
+ | yyerrlab -- here on detecting error |
+ `------------------------------------*/
+ yyerrlab:
+-  /* Make sure we have latest lookahead translation.  See comments at
+-     user semantic actions for why this is necessary.  */
+-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+-
+   /* If not already recovering from an error, report this error.  */
+   if (!yyerrstatus)
+     {
+@@ -6025,36 +5969,37 @@
+ #if ! YYERROR_VERBOSE
+       yyerror (YY_("syntax error"));
+ #else
+-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+-                                        yyssp, yytoken)
+       {
+-        char const *yymsgp = YY_("syntax error");
+-        int yysyntax_error_status;
+-        yysyntax_error_status = YYSYNTAX_ERROR;
+-        if (yysyntax_error_status == 0)
+-          yymsgp = yymsg;
+-        else if (yysyntax_error_status == 1)
+-          {
+-            if (yymsg != yymsgbuf)
+-              YYSTACK_FREE (yymsg);
+-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+-            if (!yymsg)
+-              {
+-                yymsg = yymsgbuf;
+-                yymsg_alloc = sizeof yymsgbuf;
+-                yysyntax_error_status = 2;
+-              }
+-            else
+-              {
+-                yysyntax_error_status = YYSYNTAX_ERROR;
+-                yymsgp = yymsg;
+-              }
+-          }
+-        yyerror (yymsgp);
+-        if (yysyntax_error_status == 2)
+-          goto yyexhaustedlab;
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
++	      {
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
++	      }
++	  }
++
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
+       }
+-# undef YYSYNTAX_ERROR
+ #endif
+     }
+ 
+@@ -6113,7 +6058,7 @@
+   for (;;)
+     {
+       yyn = yypact[yystate];
+-      if (!yypact_value_is_default (yyn))
++      if (yyn != YYPACT_NINF)
+ 	{
+ 	  yyn += YYTERROR;
+ 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+@@ -6160,7 +6105,7 @@
+   yyresult = 1;
+   goto yyreturn;
+ 
+-#if !defined yyoverflow || YYERROR_VERBOSE
++#if !defined(yyoverflow) || YYERROR_VERBOSE
+ /*-------------------------------------------------.
+ | yyexhaustedlab -- memory exhaustion comes here.  |
+ `-------------------------------------------------*/
+@@ -6172,13 +6117,8 @@
+ 
+ yyreturn:
+   if (yychar != YYEMPTY)
+-    {
+-      /* Make sure we have latest lookahead translation.  See comments at
+-         user semantic actions for why this is necessary.  */
+-      yytoken = YYTRANSLATE (yychar);
+-      yydestruct ("Cleanup: discarding lookahead",
+-                  yytoken, &yylval);
+-    }
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
+   /* Do not reclaim the symbols of the rule which action triggered
+      this YYABORT or YYACCEPT.  */
+   YYPOPSTACK (yylen);
+diff -ru php-5.5.0beta1/Zend/zend_language_parser.h php5.5-201303201430/Zend/zend_language_parser.h
+--- php-5.5.0beta1/Zend/zend_language_parser.h	2013-03-20 15:26:53.000000000 +0100
++++ php5.5-201303201430/Zend/zend_language_parser.h	2013-03-20 15:37:18.000000000 +0100
+@@ -1,8 +1,10 @@
+-/* A Bison parser, made by GNU Bison 2.6.1.  */
+ 
+-/* Bison interface for Yacc-like parsers in C
++/* A Bison parser, made by GNU Bison 2.4.1.  */
++
++/* Skeleton interface for Bison's Yacc-like parsers in C
+    
+-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
++      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   Free Software Foundation, Inc.
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -30,15 +32,6 @@
+    This special exception was added by the Free Software Foundation in
+    version 2.2 of Bison.  */
+ 
+-#ifndef ZEND_ZEND_ZEND_LANGUAGE_PARSER_H
+-# define ZEND_ZEND_ZEND_LANGUAGE_PARSER_H
+-/* Enabling traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
+-#if YYDEBUG
+-extern int zenddebug;
+-#endif
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -312,6 +305,7 @@
+ 
+ 
+ 
++
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef int YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -320,18 +314,5 @@
+ #endif
+ 
+ 
+-#ifdef YYPARSE_PARAM
+-#if defined __STDC__ || defined __cplusplus
+-int zendparse (void *YYPARSE_PARAM);
+-#else
+-int zendparse ();
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if defined __STDC__ || defined __cplusplus
+-int zendparse (void);
+-#else
+-int zendparse ();
+-#endif
+-#endif /* ! YYPARSE_PARAM */
+ 
+-#endif /* !ZEND_ZEND_ZEND_LANGUAGE_PARSER_H  */
++
diff --git a/php.spec b/php.spec
index 6c45861..8da93b7 100644
--- a/php.spec
+++ b/php.spec
@@ -1,18 +1,15 @@
 # API/ABI check
-%global apiver      20100412
-%global zendver     20100525
+%global apiver      20121113
+%global zendver     20121212
 %global pdover      20080721
 # Extension version
-%global fileinfover 1.0.5
-%global pharver     2.0.1
-%global zipver      1.11.0
-%global jsonver     1.2.1
+%global opcachever  7.0.1-dev
 
 # Adds -z now to the linker flags
 %global _hardened_build 1
 
 # version used for php embedded library soname
-%global embed_version 5.4
+%global embed_version 5.5
 
 %global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock)
 
@@ -23,16 +20,16 @@
 # arch detection heuristic used by bindir/mysql_config.
 %global mysql_config %{_libdir}/mysql/mysql_config
 
-%global with_fpm 1
+%global with_fpm      1
 
 # Build mysql/mysqli/pdo extensions using libmysqlclient or only mysqlnd
 %global with_libmysql 0
 
 # Build ZTS extension or only NTS
-%global with_zts 1
+%global with_zts      1
 
-%if 0%{?__isa:1}
-%global isasuffix -%{__isa}
+%if 0%{?__isa_bits:1}
+%global isasuffix -%{__isa_bits}
 %else
 %global isasuffix %nil
 %endif
@@ -46,6 +43,8 @@
 %{!?_httpd_moddir:     %{expand: %%global _httpd_moddir     %%{_libdir}/httpd/modules}}
 %{!?_httpd_contentdir: %{expand: %%global _httpd_contentdir /var/www}}
 
+%global with_dtrace 1
+
 %if 0%{?fedora} < 17 && 0%{?rhel} < 7
 %global with_zip     0
 %global with_libzip  0
@@ -62,12 +61,12 @@
 %global db_devel  libdb-devel
 %endif
 
-#global rcver RC1
+%global rcver beta1
 
 Summary: PHP scripting language for creating dynamic web sites
 Name: php
-Version: 5.4.13
-Release: 1%{?dist}
+Version: 5.5.0
+Release: 0.1.%{rcver}%{?dist}
 # All files licensed under PHP version 3.01, except
 # Zend is licensed under Zend
 # TSRM is licensed under BSD
@@ -75,7 +74,7 @@ License: PHP and Zend and BSD
 Group: Development/Languages
 URL: http://www.php.net/
 
-Source0: http://www.php.net/distributions/php-%{version}%{?rcver}.tar.bz2
+Source0: http://www.php.net/distributions/php-%{version}%{?rcver}.tar.xz
 Source1: php.conf
 Source2: php.ini
 Source3: macros.php
@@ -86,12 +85,16 @@ Source7: php-fpm.logrotate
 Source8: php-fpm.sysconfig
 Source9: php.modconf
 Source10: php.ztsmodconf
+# Configuration files for some extensions
+Source50: opcache.ini
 
 # Build fixes
 Patch5: php-5.2.0-includedir.patch
 Patch6: php-5.2.4-embed.patch
 Patch7: php-5.3.0-recode.patch
 Patch8: php-5.4.7-libdb.patch
+# revert to bison 2.4 generated parser
+Patch9: php-5.5.0-build.patch
 
 # Fixes for extension modules
 # https://bugs.php.net/63171 no odbc call during timeout
@@ -99,7 +102,6 @@ Patch21: php-5.4.7-odbctimer.patch
 
 # Functional changes
 Patch40: php-5.4.0-dlopen.patch
-Patch41: php-5.4.0-easter.patch
 Patch42: php-5.3.1-systzdata-v10.patch
 # See http://bugs.php.net/53436
 Patch43: php-5.4.0-phpize.patch
@@ -116,7 +118,7 @@ Patch47: php-5.4.9-phpinfo.patch
 # Fixes for tests
 
 
-BuildRequires: bzip2-devel, curl-devel >= 7.9, gmp-devel
+BuildRequires: bzip2-devel, curl-devel >= 7.9
 BuildRequires: httpd-devel >= 2.0.46-1, pam-devel
 BuildRequires: libstdc++-devel, openssl-devel
 BuildRequires: sqlite-devel >= 3.6.0
@@ -127,6 +129,9 @@ BuildRequires: libtool-ltdl-devel
 %if %{with_libzip}
 BuildRequires: libzip-devel >= 0.10
 %endif
+%if %{with_dtrace}
+BuildRequires: systemtap-sdt-devel
+%endif
 
 Obsoletes: php-dbg, php3, phpfi, stronghold-php
 %if %{with_zts}
@@ -184,9 +189,9 @@ Summary: PHP FastCGI Process Manager
 # TSRM and fpm are licensed under BSD
 License: PHP and Zend and BSD
 Requires: php-common%{?_isa} = %{version}-%{release}
+Requires(pre): /usr/sbin/useradd
 BuildRequires: systemd-units
 Requires: systemd-units
-Requires(pre): /usr/sbin/useradd
 Requires(post): systemd-units
 Requires(preun): systemd-units
 Requires(postun): systemd-units
@@ -209,8 +214,8 @@ Summary: Common files for PHP
 # regex, libmagic are licensed under BSD
 License: PHP and BSD
 # ABI/API check - Arch specific
-Provides: php-api = %{apiver}%{isasuffix}, php-zend-abi = %{zendver}%{isasuffix}
-Provides: php(api) = %{apiver}%{isasuffix}, php(zend-abi) = %{zendver}%{isasuffix}
+Provides: php(api) = %{apiver}%{isasuffix}
+Provides: php(zend-abi) = %{zendver}%{isasuffix}
 Provides: php(language) = %{version}, php(language)%{?_isa} = %{version}
 # Provides for all builtin/shared modules:
 Provides: php-bz2, php-bz2%{?_isa}
@@ -222,36 +227,25 @@ Provides: php-date, php-date%{?_isa}
 Provides: php-ereg, php-ereg%{?_isa}
 Provides: php-exif, php-exif%{?_isa}
 Provides: php-fileinfo, php-fileinfo%{?_isa}
-Provides: php-pecl-Fileinfo = %{fileinfover}, php-pecl-Fileinfo%{?_isa} = %{fileinfover}
-Provides: php-pecl(Fileinfo) = %{fileinfover}, php-pecl(Fileinfo)%{?_isa} = %{fileinfover}
 Provides: php-filter, php-filter%{?_isa}
 Provides: php-ftp, php-ftp%{?_isa}
 Provides: php-gettext, php-gettext%{?_isa}
-Provides: php-gmp, php-gmp%{?_isa}
 Provides: php-hash, php-hash%{?_isa}
 Provides: php-mhash = %{version}, php-mhash%{?_isa} = %{version}
 Provides: php-iconv, php-iconv%{?_isa}
 Provides: php-json, php-json%{?_isa}
-Provides: php-pecl-json = %{jsonver}, php-pecl-json%{?_isa} = %{jsonver}
-Provides: php-pecl(json) = %{jsonver}, php-pecl(json)%{?_isa} = %{jsonver}
 Provides: php-libxml, php-libxml%{?_isa}
 Provides: php-openssl, php-openssl%{?_isa}
-Provides: php-pecl-phar = %{pharver}, php-pecl-phar%{?_isa} = %{pharver}
-Provides: php-pecl(phar) = %{pharver}, php-pecl(phar)%{?_isa} = %{pharver}
 Provides: php-phar, php-phar%{?_isa}
 Provides: php-pcre, php-pcre%{?_isa}
 Provides: php-reflection, php-reflection%{?_isa}
 Provides: php-session, php-session%{?_isa}
-Provides: php-shmop, php-shmop%{?_isa}
-Provides: php-simplexml, php-simplexml%{?_isa}
 Provides: php-sockets, php-sockets%{?_isa}
 Provides: php-spl, php-spl%{?_isa}
 Provides: php-standard = %{version}, php-standard%{?_isa} = %{version}
 Provides: php-tokenizer, php-tokenizer%{?_isa}
 %if %{with_zip}
 Provides: php-zip, php-zip%{?_isa}
-Provides: php-pecl-zip = %{zipver}, php-pecl-zip%{?_isa} = %{zipver}
-Provides: php-pecl(zip) = %{zipver}, php-pecl(zip)%{?_isa} = %{zipver}
 Obsoletes: php-pecl-zip
 %endif
 Provides: php-zlib, php-zlib%{?_isa}
@@ -278,6 +272,28 @@ The php-devel package contains the files needed for building PHP
 extensions. If you need to compile your own PHP extensions, you will
 need to install this package.
 
+%package opcache
+Summary:   The Zend Optimizer+
+Group:     Development/Languages
+License:   PHP
+Requires:  php-common%{?_isa} = %{version}-%{release}
+Obsoletes: php-pecl-zendoptimizerplus
+Provides:  php-pecl-zendoptimizerplus = %{opcachever}
+Provides:  php-pecl-zendoptimizerplus%{?_isa} = %{opcachever}
+Provides:  php-pecl(opcache) = %{opcachever}
+Provides:  php-pecl(opcache)%{?_isa} = %{opcachever}
+# Only one opcode cache could be enabled
+Conflicts: php-xcache
+# APC 3.1.15 offer an option to disable opcache
+Conflicts: php-pecl-apc < 3.1.15
+
+%description opcache
+The Zend Optimizer+ provides faster PHP execution through opcode caching and
+optimization. It improves PHP performance by storing precompiled script
+bytecode in the shared memory. This eliminates the stages of reading code from
+the disk and compiling it on future access. In addition, it applies a few
+bytecode optimization patterns that make code execution faster.
+
 %package imap
 Summary: A module for PHP applications that use IMAP
 Group: Development/Languages
@@ -406,6 +422,7 @@ Group: Development/Languages
 License: PHP
 Requires: php-common%{?_isa} = %{version}-%{release}
 Provides: php-posix, php-posix%{?_isa}
+Provides: php-shmop, php-shmop%{?_isa}
 Provides: php-sysvsem, php-sysvsem%{?_isa}
 Provides: php-sysvshm, php-sysvshm%{?_isa}
 Provides: php-sysvmsg, php-sysvmsg%{?_isa}
@@ -494,11 +511,12 @@ License: PHP
 Requires: php-common%{?_isa} = %{version}-%{release}
 Obsoletes: php-domxml, php-dom
 Provides: php-dom, php-dom%{?_isa}
-Provides: php-xsl, php-xsl%{?_isa}
 Provides: php-domxml, php-domxml%{?_isa}
+Provides: php-simplexml, php-simplexml%{?_isa}
 Provides: php-wddx, php-wddx%{?_isa}
 Provides: php-xmlreader, php-xmlreader%{?_isa}
 Provides: php-xmlwriter, php-xmlwriter%{?_isa}
+Provides: php-xsl, php-xsl%{?_isa}
 BuildRequires: libxslt-devel >= 1.0.18-1, libxml2-devel >= 2.4.14-1
 
 %description xml
@@ -559,6 +577,18 @@ Requires: php-common%{?_isa} = %{version}-%{release}
 The php-bcmath package contains a dynamic shared object that will add
 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
+Requires: php-common%{?_isa} = %{version}-%{release}
+
+%description gmp
+These functions allow you to work with arbitrary-length integers
+using the GNU MP library.
+
 %package dba
 Summary: A database abstraction layer module for PHP applications
 Group: Development/Languages
@@ -652,7 +682,7 @@ Group: System Environment/Libraries
 # All files licensed under PHP version 3.01
 License: PHP
 Requires: php-common%{?_isa} = %{version}-%{release}
-BuildRequires: libicu-devel >= 3.6
+BuildRequires: libicu-devel >= 4.0
 
 %description intl
 The php-intl package contains a dynamic shared object that will add
@@ -678,11 +708,11 @@ support for using the enchant library to PHP.
 %patch6 -p1 -b .embed
 %patch7 -p1 -b .recode
 %patch8 -p1 -b .libdb
+%patch9 -p1 -b .build
 
 %patch21 -p1 -b .odbctimer
 
 %patch40 -p1 -b .dlopen
-%patch41 -p1 -b .easter
 %patch42 -p1 -b .systzdata
 %patch43 -p1 -b .headers
 %if %{with_libzip}
@@ -718,8 +748,6 @@ mkdir build-cgi build-apache build-embedded \
 %endif
 
 # ----- Manage known as failed test -------
-# php_egg_logo_guid() removed by patch41
-rm -f tests/basic/php_egg_logo_guid.phpt
 # affected by systzdata patch
 rm -f ext/date/tests/timezone_location_get.phpt
 # fails sometime
@@ -756,28 +784,10 @@ if test "x${vpdo}" != "x%{pdover}"; then
 fi
 
 # Check for some extension version
-ver=$(sed -n '/#define PHP_FILEINFO_VERSION /{s/.* "//;s/".*$//;p}' ext/fileinfo/php_fileinfo.h)
-if test "$ver" != "%{fileinfover}"; then
-   : Error: Upstream FILEINFO version is now ${ver}, expecting %{fileinfover}.
-   : Update the fileinfover macro and rebuild.
-   exit 1
-fi
-ver=$(sed -n '/#define PHP_PHAR_VERSION /{s/.* "//;s/".*$//;p}' ext/phar/php_phar.h)
-if test "$ver" != "%{pharver}"; then
-   : Error: Upstream PHAR version is now ${ver}, expecting %{pharver}.
-   : Update the pharver macro and rebuild.
-   exit 1
-fi
-ver=$(sed -n '/#define PHP_ZIP_VERSION_STRING /{s/.* "//;s/".*$//;p}' ext/zip/php_zip.h)
-if test "$ver" != "%{zipver}"; then
-   : Error: Upstream ZIP version is now ${ver}, expecting %{zipver}.
-   : Update the zipver macro and rebuild.
-   exit 1
-fi
-ver=$(sed -n '/#define PHP_JSON_VERSION /{s/.* "//;s/".*$//;p}' ext/json/php_json.h)
-if test "$ver" != "%{jsonver}"; then
-   : Error: Upstream JSON version is now ${ver}, expecting %{jsonver}.
-   : Update the jsonver macro and rebuild.
+ver=$(sed -n '/#define ACCELERATOR_VERSION /{s/.* "//;s/".*$//;p}' ext/opcache/ZendAccelerator.h)
+if test "$ver" != "%{opcachever}"; then
+   : Error: Upstream PHAR version is now ${ver}, expecting %{opcachever}.
+   : Update the opcachever macro and rebuild.
    exit 1
 fi
 
@@ -799,6 +809,9 @@ chmod 644 README.*
 # php-fpm configuration files for tmpfiles.d
 echo "d /run/php-fpm 755 root root" >php-fpm.tmpfiles
 
+# Some extensions have their own configuration file
+cp %{SOURCE50} .
+
 
 %build
 # aclocal workaround - to be improved
@@ -828,17 +841,27 @@ build() {
 # Old/recent bison version seems to produce a broken parser;
 # upstream uses GNU Bison 2.3. Workaround:
 mkdir Zend && cp ../Zend/zend_{language,ini}_{parser,scanner}.[ch] Zend
+
+# Always static:
+# date, filter, libxml, reflection, spl: not supported
+# ereg: build options vary per SAPI
+# hash: for PHAR_SIG_SHA256 and PHAR_SIG_SHA512
+# session: dep on hash, used by soap and wddx
+# pcre: used by filter, zip
+# pcntl, readline: only used by CLI sapi
+# openssl: for PHAR_SIG_OPENSSL
+# zlib: used by image
+
 ln -sf ../configure
 %configure \
 	--cache-file=../config.cache \
-        --with-libdir=%{_lib} \
+	--with-libdir=%{_lib} \
 	--with-config-file-path=%{_sysconfdir} \
 	--with-config-file-scan-dir=%{_sysconfdir}/php.d \
 	--disable-debug \
 	--with-pic \
 	--disable-rpath \
 	--without-pear \
-	--with-bz2 \
 	--with-exec-dir=%{_bindir} \
 	--with-freetype-dir=%{_prefix} \
 	--with-png-dir=%{_prefix} \
@@ -846,27 +869,21 @@ ln -sf ../configure
 	--enable-gd-native-ttf \
 	--with-t1lib=%{_prefix} \
 	--without-gdbm \
-	--with-gettext \
-	--with-gmp \
-	--with-iconv \
 	--with-jpeg-dir=%{_prefix} \
 	--with-openssl \
-        --with-pcre-regex=%{_prefix} \
+	--with-pcre-regex=%{_prefix} \
 	--with-zlib \
 	--with-layout=GNU \
-	--enable-exif \
-	--enable-ftp \
 	--enable-magic-quotes \
-	--enable-sockets \
 	--with-kerberos \
 	--enable-ucd-snmp-hack \
-	--enable-shmop \
-	--enable-calendar \
-        --with-libxml-dir=%{_prefix} \
-	--enable-xml \
-        --with-system-tzdata \
+	--with-libxml-dir=%{_prefix} \
+	--with-system-tzdata \
 	--with-mhash \
-	$* 
+%if %{with_dtrace}
+	--enable-dtrace \
+%endif
+	$*
 if test $? != 0; then 
   tail -500 config.log
   : configure failed
@@ -882,13 +899,24 @@ pushd build-cgi
 build --enable-force-cgi-redirect \
       --libdir=%{_libdir}/php \
       --enable-pcntl \
+      --enable-opcache \
       --with-imap=shared --with-imap-ssl \
       --enable-mbstring=shared \
       --enable-mbregex \
       --with-gd=shared \
+      --with-gmp=shared \
+      --enable-calendar=shared \
       --enable-bcmath=shared \
+      --with-bz2=shared \
+      --enable-ctype=shared \
       --enable-dba=shared --with-db4=%{_prefix} \
                           --with-tcadb=%{_prefix} \
+      --enable-exif=shared \
+      --enable-ftp=shared \
+      --with-gettext=shared \
+      --with-iconv=shared \
+      --enable-sockets=shared \
+      --enable-tokenizer=shared \
       --with-xmlrpc=shared \
       --with-ldap=shared --with-ldap-sasl \
       --enable-mysqlnd=shared \
@@ -899,6 +927,8 @@ build --enable-force-cgi-redirect \
       --with-pdo-firebird=shared,%{_libdir}/firebird \
       --enable-dom=shared \
       --with-pgsql=shared \
+      --enable-simplexml=shared \
+      --enable-xml=shared \
       --enable-wddx=shared \
       --with-snmp=shared,%{_prefix} \
       --enable-soap=shared \
@@ -928,6 +958,7 @@ build --enable-force-cgi-redirect \
       --with-tidy=shared,%{_prefix} \
       --with-mssql=shared,%{_prefix} \
       --enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \
+      --enable-shmop=shared \
       --enable-posix=shared \
       --with-unixODBC=shared,%{_prefix} \
       --enable-fileinfo=shared \
@@ -939,10 +970,14 @@ popd
 
 without_shared="--without-gd \
       --disable-dom --disable-dba --without-unixODBC \
+      --disable-opcache \
       --disable-xmlreader --disable-xmlwriter \
       --without-sqlite3 --disable-phar --disable-fileinfo \
       --disable-json --without-pspell --disable-wddx \
-      --without-curl --disable-posix \
+      --without-curl --disable-posix --disable-xml \
+      --disable-simplexml --disable-exif --without-gettext \
+      --without-iconv --disable-ftp --without-bz2 --disable-ctype \
+      --disable-shmop --disable-sockets --disable-tokenizer \
       --disable-sysvmsg --disable-sysvshm --disable-sysvsem"
 
 # Build Apache module, and the CLI SAPI, /usr/bin/php
@@ -992,13 +1027,24 @@ build --enable-force-cgi-redirect \
       --enable-maintainer-zts \
       --with-config-file-scan-dir=%{_sysconfdir}/php-zts.d \
       --enable-pcntl \
+      --enable-opcache \
       --with-imap=shared --with-imap-ssl \
       --enable-mbstring=shared \
       --enable-mbregex \
       --with-gd=shared \
+      --with-gmp=shared \
+      --enable-calendar=shared \
       --enable-bcmath=shared \
+      --with-bz2=shared \
+      --enable-ctype=shared \
       --enable-dba=shared --with-db4=%{_prefix} \
                           --with-tcadb=%{_prefix} \
+      --with-gettext=shared \
+      --with-iconv=shared \
+      --enable-sockets=shared \
+      --enable-tokenizer=shared \
+      --enable-exif=shared \
+      --enable-ftp=shared \
       --with-xmlrpc=shared \
       --with-ldap=shared --with-ldap-sasl \
       --enable-mysqlnd=shared \
@@ -1010,6 +1056,8 @@ build --enable-force-cgi-redirect \
       --with-pdo-firebird=shared,%{_libdir}/firebird \
       --enable-dom=shared \
       --with-pgsql=shared \
+      --enable-simplexml=shared \
+      --enable-xml=shared \
       --enable-wddx=shared \
       --with-snmp=shared,%{_prefix} \
       --enable-soap=shared \
@@ -1039,6 +1087,7 @@ build --enable-force-cgi-redirect \
       --with-tidy=shared,%{_prefix} \
       --with-mssql=shared,%{_prefix} \
       --enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \
+      --enable-shmop=shared \
       --enable-posix=shared \
       --with-unixODBC=shared,%{_prefix} \
       --enable-fileinfo=shared \
@@ -1075,6 +1124,10 @@ popd
 
 %check
 %if %runselftest
+
+# Double stack size (required by bug54268.phpt)
+ulimit -s 16384
+
 cd build-apache
 # Run tests, using the CLI SAPI
 export NO_INTERACTION=1 REPORT_EXIT_STATUS=1 MALLOC_CHECK_=2
@@ -1082,10 +1135,13 @@ export SKIP_ONLINE_TESTS=1
 unset TZ LANG LC_ALL
 if ! make test; then
   set +x
-  for f in `find .. -name \*.diff -type f -print`; do
-    echo "TEST FAILURE: $f --"
-    cat "$f"
-    echo "-- $f result ends."
+  for f in $(find .. -name \*.diff -type f -print); do
+    if ! grep -q XFAIL "${f/.diff/.phpt}"
+    then
+      echo "TEST FAILURE: $f --"
+      cat "$f"
+      echo -e "\n-- $f result ends."
+    fi
   done
   set -x
   #exit 1
@@ -1220,37 +1276,53 @@ install -m 644 %{SOURCE8} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/php-fpm
 for mod in pgsql odbc ldap snmp xmlrpc imap \
     mysqlnd mysqlnd_mysql mysqlnd_mysqli pdo_mysqlnd \
     mbstring gd dom xsl soap bcmath dba xmlreader xmlwriter \
+    simplexml bz2 calendar ctype exif ftp gettext gmp iconv \
+    sockets tokenizer opcache \
     pdo pdo_pgsql pdo_odbc pdo_sqlite json %{zipmod} \
     sqlite3  interbase pdo_firebird \
     enchant phar fileinfo intl \
     mcrypt tidy pdo_dblib mssql pspell curl wddx \
-    posix sysvshm sysvsem sysvmsg recode \
+    posix shmop sysvshm sysvsem sysvmsg recode xml \
 %if %{with_libmysql}
     mysql mysqli pdo_mysql \
 %endif
     ; do
-    cat > $RPM_BUILD_ROOT%{_sysconfdir}/php.d/${mod}.ini <<EOF
+    # for extension load order
+    if [ "$mod" = "wddx" ]
+    then   ini=xml_${mod}.ini
+    else   ini=${mod}.ini
+    fi
+    # some extensions have their own config file
+    if [ -f ${ini} ]; then
+      sed -e 's:@EXTPATH@:%{_libdir}/php/modules:' \
+             ${ini} >$RPM_BUILD_ROOT%{_sysconfdir}/php.d/${ini}
+      sed -e 's:@EXTPATH@:%{_libdir}/php-zts/modules:' \
+             ${ini} >$RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${ini}
+    else
+      cat > $RPM_BUILD_ROOT%{_sysconfdir}/php.d/${ini} <<EOF
 ; Enable ${mod} extension module
 extension=${mod}.so
 EOF
 %if %{with_zts}
-    cat > $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${mod}.ini <<EOF
+      cat > $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${ini} <<EOF
 ; Enable ${mod} extension module
 extension=${mod}.so
 EOF
 %endif
+    fi
     cat > files.${mod} <<EOF
 %attr(755,root,root) %{_libdir}/php/modules/${mod}.so
-%config(noreplace) %attr(644,root,root) %{_sysconfdir}/php.d/${mod}.ini
+%config(noreplace) %attr(644,root,root) %{_sysconfdir}/php.d/${ini}
 %if %{with_zts}
 %attr(755,root,root) %{_libdir}/php-zts/modules/${mod}.so
-%config(noreplace) %attr(644,root,root) %{_sysconfdir}/php-zts.d/${mod}.ini
+%config(noreplace) %attr(644,root,root) %{_sysconfdir}/php-zts.d/${ini}
 %endif
 EOF
 done
 
 # The dom, xsl and xml* modules are all packaged in php-xml
-cat files.dom files.xsl files.xml{reader,writer} files.wddx > files.xml
+cat files.dom files.xsl files.xml{reader,writer} files.wddx \
+    files.simplexml >> files.xml
 
 # The mysql and mysqli modules are both packaged in php-mysql
 %if %{with_libmysql}
@@ -1271,7 +1343,7 @@ cat files.pdo_odbc >> files.odbc
 cat files.pdo_firebird >> files.interbase
 
 # sysv* and posix in packaged in php-process
-cat files.sysv* files.posix > files.process
+cat files.shmop files.sysv* files.posix > files.process
 
 # Package sqlite3 and pdo_sqlite with pdo; isolating the sqlite dependency
 # isn't useful at this time since rpm itself requires sqlite.
@@ -1279,7 +1351,10 @@ cat files.pdo_sqlite >> files.pdo
 cat files.sqlite3 >> files.pdo
 
 # Package json, zip, curl, phar and fileinfo in -common.
-cat files.json files.curl files.phar files.fileinfo > files.common
+cat files.json files.curl files.phar files.fileinfo \
+    files.exif files.gettext files.iconv files.calendar \
+    files.ftp files.bz2 files.ctype files.sockets \
+    files.tokenizer > files.common
 %if %{with_zip}
 cat files.zip >> files.common
 %endif
@@ -1468,6 +1543,7 @@ fi
 %files soap -f files.soap
 %files bcmath -f files.bcmath
 %doc libbcmath_COPYING
+%files gmp -f files.gmp
 %files dba -f files.dba
 %files pdo -f files.pdo
 %files mcrypt -f files.mcrypt
@@ -1480,9 +1556,23 @@ fi
 %files interbase -f files.interbase
 %files enchant -f files.enchant
 %files mysqlnd -f files.mysqlnd
+%files opcache -f files.opcache
 
 
 %changelog
+* Fri Mar 22 2013 Remi Collet <rcollet at redhat.com> 5.5.0-0.1.beta1
+- update to 5.5.0beta1
+  http://fedoraproject.org/wiki/Features/Php55
+- new Zend OPcache extension in php-opccache new sub-package
+- don't display XFAIL tests in report
+- use xz compressed tarball
+- build simplexml and xml extensions shared (moved in php-xml)
+- build bz2, calendar, ctype, exif, ftp, gettext, iconv
+  sockets and tokenizer extensions shared (in php-common)
+- build gmp extension shared (in php-gmp new sub-package)
+- build shmop extension shared (moved in php-process)
+- drop some old compatibility provides (php-api, php-zend-abi, php-pecl-*)
+
 * Thu Mar 14 2013 Remi Collet <rcollet at redhat.com> 5.4.13-1
 - update to 5.4.13
 - security fix for CVE-2013-1643
diff --git a/sources b/sources
index df4340a..cd5682e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-cacd308e978b7cf9ba4993196612ccf7  php-5.4.13.tar.bz2
+19b4558c63660ecb9c2fc71c4eb0e0f5  php-5.5.0beta1.tar.xz


More information about the scm-commits mailing list