Re: PHP 5.5.0beta1 ZTS broken build
| From: | Laruence | Date: | Mon, 25 Mar 2013 05:47:46 +0000 |
| Subject: | Re: PHP 5.5.0beta1 ZTS broken build | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-66794@lists.php.net to get a copy of this message | ||
On Mon, Mar 25, 2013 at 1:43 PM, Laruence <laruence@php.net> wrote:
> On Mon, Mar 25, 2013 at 1:27 PM, Rasmus Lerdorf <rasmus@lerdorf.com> wrote:
>> On 03/24/2013 10:24 PM, Laruence wrote:
>>> On Mon, Mar 25, 2013 at 1:19 PM, Laruence <laruence@php.net> wrote:
>>>> On Mon, Mar 25, 2013 at 1:18 PM, Laruence <laruence@php.net> wrote:
>>>>> On Mon, Mar 25, 2013 at 12:42 PM, Rasmus Lerdorf <rasmus@lerdorf.com>
>>>>> wrote:
>>>>>> On 03/24/2013 09:30 PM, Laruence wrote:
>>>>>>> On Mon, Mar 25, 2013 at 7:38 AM, Rasmus Lerdorf
>>>>>>> <rasmus@lerdorf.com> wrote:
>>>>>>>> On 03/24/2013 10:35 AM, Felipe Pena wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> 2013/3/24 Rasmus Lerdorf <rasmus@lerdorf.com>:
>>>>>>>>>> On 03/22/2013 02:02 AM, Remi Collet wrote:
>>>>>>>>>>> While build of 5.5 snapshot works perfectly, beta1 ZTS
>>>>>>>>>>> build is broken
>>>>>>>>>>>
>>>>>>>>>>> In file included from
>>>>>>>>>>>
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/ext/tokenizer/tokenizer.c:33:0:
>>>>>>>>>>>
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/build-ztscli/Zend/zend_language_parser.h:331:5:
>>>>>>>>>>> error: conflicting types for 'zendparse'
>>>>>>>>>>> In file included from
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_globals.h:28:0,
>>>>>>>>>>> from
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_compile.h:418,
>>>>>>>>>>> from
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_modules.h:26,
>>>>>>>>>>> from
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_API.h:26,
>>>>>>>>>>> from
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/main/php.h:38,
>>>>>>>>>>> from
>>>>>>>>>>>
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/ext/tokenizer/tokenizer.c:25:
>>>>>>>>>>>
>>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_globals_macros.h:35:5: note:
>>>>>>>>>>> previous declaration of 'zendparse' was here
>>>>>>>>>>>
>>>>>>>>>>> Comparing the 201303201430 snapshot (very closed to
>>>>>>>>>>> beta1) and beta1 archive
>>>>>>>>>>>
>>>>>>>>>>> 201303201430, in bison generated files:
>>>>>>>>>>> /* A Bison parser, made by GNU Bison 2.4.1. */
>>>>>>>>>>> beta1:
>>>>>>>>>>> /* A Bison parser, made by GNU Bison 2.6.1. */
>>>>>>>>>>>
>>>>>>>>>>> So, it seems snapshot script don't use the same
>>>>>>>>>>> environment than the one
>>>>>>>>>>> used to generate release.
>>>>>>>>>>>
>>>>>>>>>>> Any idea how to fix this ?
>>>>>>>>>>
>>>>>>>>>> I took a quick look at this. The Bison change causing this
>>>>>>>>>> from their
>>>>>>>>>> NEWS file is:
>>>>>>>>>>
>>>>>>>>>> *** Features deprecated since Bison 1.875
>>>>>>>>>> YYPARSE_PARAM and YYLEX_PARAM, deprecated in favor of
>>>>>>>>>> %parse-param and %lex-param, will no longer be
>>>>>>>>>> supported.
>>>>>>>>>>
>>>>>>>>>> I was hoping the fix would be as simple as doing:
>>>>>>>>>>
>>>>>>>>>> -#define YYPARSE_PARAM tsrm_ls
>>>>>>>>>> -#define YYLEX_PARAM tsrm_ls
>>>>>>>>>> +%parse-param { tsrm_ls }
>>>>>>>>>> +%lex-param { tsrm_ls }
>>>>>>>>>>
>>>>>>>>>> but that doesn't quite do the trick. Need to read up
>>>>>>>>>> more on how
>>>>>>>>>> %parse-param and %lex-param work. If someone wants to do a
>>>>>>>>>> little light
>>>>>>>>>> reading and report back it would be appreciated.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> http://www.gnu.org/software/bison/manual/html_node/Parser-Function.html#Parser-Function
>>>>>>>>>
>>>>>>>>> This page explain how to use it.
>>>>>>>>
>>>>>>>> Sure, I see how they work, but the problem is that they can't
>>>>>>>> be inside
>>>>>>>> the %{ ... %} code block there. They have to be outside and as such
>>>>>>>> won't have access to the #ifdef ZTS. So I don't think we
>>>>>>>> can
>>>>>>>> conditionally create a reentrant parser like we did before without
>>>>>>>> refactoring things a bit.
>>>>>>> if %parse-param defined, then the paramenter also is added to yyerror,
>>>>>>> yydestroctor etc.
>>>>>>>
>>>>>>> it will a little big change.
>>>>>>
>>>>>> Right, but if we handle it like we do with TSRMLS_C throughout the code
>>>>>> and always set that %parse-param to this new magic macro we make up and
>>>>>> have it point to void *compiler_globals for zendparse() under ZTS mode
>>>>>> and void otherwise and make sure it is (re)defined correctly in other
>>>>>> places? It might mean we need to refactor zenderror() to take a dummy
>>>>>> first arg since it seems to prepend the parse-param type there. Messy.
>>>>>
>>>>> Hmm, seems fine, a patch is attached:
>>>>>
>>>>> https://bugs.php.net/patch-display.php?bug_id=64503&patch=bison_build.patch&revision=latest
>>>>>
>>>>>
>>>>> but there must be some unused parameter term_ls while in non-zts build...
>>>> unused parameter warning I mean, :)
>>> hmm, how stupid I was, hehe , simply:
>>>
>>> #ifndef ZTS
>>> (void)tsrm_ls;
>>> #endif
>>
>> Commit it to master so we can play with it. I think this is the right
>> approach and we can pull it into 5.5b2. It would be really nice to have
>> bison 2.6/2.7 support in 5.5.
>>
>> -Rasmus
>>
> Hey:
> after a deep look, it seems bison 2.7 still supports
> YYPARSE_PARAM, the different is, it starts to write the declaration
> of yyparse into parse.h
>
> so, we also needs the YYPARSE_PARAM defination into parse.h.
>
> following patch also works:
>
attached here:
https://bugs.php.net/patch-display.php?bug_id=64503&patch=bison_build_2.patch&revision=latest
thanks
> diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
> index ccbc9b1..3424fa7 100644
> --- a/Zend/zend_language_parser.y
> +++ b/Zend/zend_language_parser.y
> @@ -38,16 +38,17 @@
> #define YYSIZE_T size_t
> #define yytnamerr zend_yytnamerr
> static YYSIZE_T zend_yytnamerr(char*, const char*);
> -
> #define YYERROR_VERBOSE
> #define YYSTYPE znode
> +
> +%}
> +
> +%code requires {
> #ifdef ZTS
> # define YYPARSE_PARAM tsrm_ls
> # define YYLEX_PARAM tsrm_ls
> #endif
> -
> -
> -%}
> +}
>
> %pure_parser
> %expect 3
>
>
> could you verify it?
>
>
> --
> Laruence Xinchen Hui
> http://www.laruence.com/
--
Laruence Xinchen Hui
http://www.laruence.com/