Re: PHP 5.5.0beta1 ZTS broken build
| From: | Rasmus Lerdorf | Date: | Mon, 25 Mar 2013 05:27:43 +0000 |
| Subject: | Re: PHP 5.5.0beta1 ZTS broken build | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-66792@lists.php.net to get a copy of this message | ||
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