mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-12 13:53:03 +00:00
build: do not prototype flex-generated functions.
Some versions of Flex, possibly modified by the distribution package
maintainers, have incompatible signatures. Since newer versions of
Flex prototype their functions, avoid the conflicts in that case.
Reported by Stefano Lattarini.
<http://lists.gnu.org/archive/html/bug-bison/2012-05/msg00012.html>.
* src/flex-scanner.h (FLEX_VERSION_GT): New.
Use it to issue prototypes for flex-generated functions only for
versions up to 2.5.31, in accordance with the comment.
See commit dc9701e848.
Use it to define yylex_destroy when needed.
This commit is contained in:
8
NEWS
8
NEWS
@@ -59,7 +59,13 @@ Bison News
|
||||
format. Incorrect index entries were fixed. Some other errors were
|
||||
fixed.
|
||||
|
||||
** Changes to the build system:
|
||||
** Building bison:
|
||||
|
||||
*** Conflicting prototypes with recent/modified Flex.
|
||||
|
||||
Fixed build problems with the current, unreleased, version of Flex,
|
||||
and some modified versions of 2.5.35, which have modified function
|
||||
prototypes.
|
||||
|
||||
*** Warnings during the build procedure have been eliminated.
|
||||
|
||||
|
||||
@@ -21,7 +21,20 @@
|
||||
# error "FLEX_PREFIX not defined"
|
||||
#endif
|
||||
|
||||
/* Whether this version of Flex is (strictly) greater than
|
||||
Major.Minor.Subminor. */
|
||||
#define FLEX_VERSION_GT(Major, Minor, Subminor) \
|
||||
(defined YY_FLEX_MAJOR_VERSION \
|
||||
&& (Major < YY_FLEX_MAJOR_VERSION \
|
||||
|| (Major == YY_FLEX_MAJOR_VERSION \
|
||||
&& (defined YY_FLEX_MINOR_VERSION \
|
||||
&& (Minor < YY_FLEX_MINOR_VERSION \
|
||||
|| (Minor == YY_FLEX_MINOR_VERSION \
|
||||
&& defined YY_FLEX_SUBMINOR_VERSION \
|
||||
&& Subminor < YY_FLEX_SUBMINOR_VERSION))))))
|
||||
|
||||
/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used. */
|
||||
# if ! FLEX_VERSION_GT (2, 5, 31)
|
||||
int FLEX_PREFIX (get_lineno) (void);
|
||||
FILE *FLEX_PREFIX (get_in) (void);
|
||||
FILE *FLEX_PREFIX (get_out) (void);
|
||||
@@ -33,6 +46,7 @@ void FLEX_PREFIX (set_out) (FILE *);
|
||||
int FLEX_PREFIX (get_debug) (void);
|
||||
void FLEX_PREFIX (set_debug) (int);
|
||||
int FLEX_PREFIX (lex_destroy) (void);
|
||||
#endif
|
||||
|
||||
#define last_string FLEX_PREFIX (last_string)
|
||||
|
||||
@@ -51,12 +65,7 @@ int FLEX_PREFIX (lex_destroy) (void);
|
||||
versions according to the Flex manual) leak memory if yylex_destroy is not
|
||||
invoked. However, yylex_destroy is not defined before Flex 2.5.9, so give
|
||||
an implementation here that at least appears to work with Flex 2.5.4. */
|
||||
#if !defined YY_FLEX_MAJOR_VERSION || YY_FLEX_MAJOR_VERSION < 2 \
|
||||
|| (YY_FLEX_MAJOR_VERSION == 2 \
|
||||
&& (!defined YY_FLEX_MINOR_VERSION || YY_FLEX_MINOR_VERSION < 5 \
|
||||
|| (YY_FLEX_MINOR_VERSION == 5 \
|
||||
&& (!defined YY_FLEX_SUBMINOR_VERSION \
|
||||
|| YY_FLEX_SUBMINOR_VERSION < 9))))
|
||||
#if ! FLEX_VERSION_GT (2, 5, 9)
|
||||
# define yylex_destroy() yy_delete_buffer (YY_CURRENT_BUFFER)
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user