On Mon, Aug 01, 2016 at 02:41:12AM -0400, Thomas Dickey wrote:
>On Mon, Aug 01, 2016 at 04:22:37PM +1000, Brendan O'Dea wrote:
>> configure.in doesn't cope with 2.6:
>> 
>>   sed -e 's/^2.5.//
>> 
>> resulting in this output from configure:
>> 
>>   checking version of flex... 2.6.0
>>   ../configure: 5316: test: Illegal number: 2.6.0
>
>I did notice that yesterday, but since it built, didn't look too closely.

The periods in that regex should probably be escaped also.

>...so after ten years, it's no longer a beta.  I can fix this :-)

Ha.  Actually, my reading of that code is that the intent is that everything
other than .0 releases are treated as FLEX_BETA.

>>   #define YY_SKIP_YYWRAP
>>   #define yywrap() private_yywrap()
>>   #define USE_LEXWRAP(name) static int private_yywrap(void) { return 1; }
>>   #else
>>   #define USE_LEXWRAP(name) /* nothing */
>>   #endif
>>
[...]
>> Out of curiosity, why does USE_LEXWRAP take an option?  It doesn't appear to
>> do anything with it.
>
>It's used a little later in filters.h:
>
>       /*
>        * We'll put a DefineFilter() in each filter program.  To handle 
> special cases
>        * such as c-filt.c, use DefineOptFilter().
>        */
>       #define DefineOptFilter(name,options) \
>       USE_LEXWRAP(name##_wrap) \
>       static void init_filter(int before); \
>       static void do_filter(FILE *Input); \
>       DCL_LEXFREE \
>       FILTER_DEF filter_def = { #name, 1, init_filter, do_filter, options 
> REF_LEXFREE }

That is a different binding of "name".  As I read it, you could rewrite it as:

  #if defined(FLEX_SCANNER) && defined(FLEX_BETA)
  #define YY_SKIP_YYWRAP
  #define yywrap() private_yywrap()
  #define USE_LEXWRAP static int private_yywrap(void) { return 1; }
  #else
  #define USE_LEXWRAP /* nothing */
  #endif

  #define DefineOptFilter(name,options) \
  USE_LEXWRAP \
  ...

without losing anything.

--bod

Reply via email to