1
1

Re-add support for old flex (2.5.4a and earlier) while still cleaning up properly in new flex.

This commit was SVN r27657.
Этот коммит содержится в:
Nathan Hjelm 2012-12-07 00:12:43 +00:00
родитель 702451111b
Коммит 3e1b13b13a
9 изменённых файлов: 90 добавлений и 31 удалений

Просмотреть файл

@ -56,13 +56,11 @@ my $exclude_list;
my $ompi_automake_version = "1.11.1"; my $ompi_automake_version = "1.11.1";
my $ompi_autoconf_version = "2.65"; my $ompi_autoconf_version = "2.65";
my $ompi_libtool_version = "2.2.6b"; my $ompi_libtool_version = "2.2.6b";
my $ompi_flex_version = "2.5.4";
# Search paths # Search paths
my $ompi_autoconf_search = "autoconf"; my $ompi_autoconf_search = "autoconf";
my $ompi_automake_search = "automake"; my $ompi_automake_search = "automake";
my $ompi_libtoolize_search = "libtoolize;glibtoolize"; my $ompi_libtoolize_search = "libtoolize;glibtoolize";
my $ompi_flex_search = "flex";
# One-time setup # One-time setup
my $username; my $username;
@ -809,7 +807,6 @@ tools:
GNU Autoconf: $ompi_autoconf_version GNU Autoconf: $ompi_autoconf_version
GNU Automake: $ompi_automake_version GNU Automake: $ompi_automake_version
GNU Libtool: $ompi_libtool_version GNU Libtool: $ompi_libtool_version
Flex: $ompi_flex_version
=================================================================\n"; =================================================================\n";
my_exit(1); my_exit(1);
} }
@ -1028,7 +1025,6 @@ $step. Checking tool versions\n\n";
&find_and_check("autoconf", $ompi_autoconf_search, $ompi_autoconf_version); &find_and_check("autoconf", $ompi_autoconf_search, $ompi_autoconf_version);
&find_and_check("libtool", $ompi_libtoolize_search, $ompi_libtool_version); &find_and_check("libtool", $ompi_libtoolize_search, $ompi_libtool_version);
&find_and_check("automake", $ompi_automake_search, $ompi_automake_version); &find_and_check("automake", $ompi_automake_search, $ompi_automake_version);
&find_and_check("flex", $ompi_flex_search, $ompi_flex_version);
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------

Просмотреть файл

@ -100,7 +100,25 @@ NAME_CHAR [A-Za-z0-9_\-\.\\\/]
%% %%
/* Old flex (2.5.4a? and older) does not define a destroy function */
#if !defined(YY_FLEX_SUBMINOR_VERSION)
#define YY_FLEX_SUBMINOR_VERSION 0
#endif
#if (YY_FLEX_MAJOR_VERSION < 2) || (YY_FLEX_MAJOR_VERSION == 2 && (YY_FLEX_MINOR_VERSION < 5 || (YY_FLEX_MINOR_VERSION == 5 && YY_FLEX_SUBMINOR_VERSION < 5)))
int btl_openib_ini_yylex_destroy(void)
{
if (NULL != YY_CURRENT_BUFFER) {
yy_delete_buffer(YY_CURRENT_BUFFER);
#if defined(YY_CURRENT_BUFFER_LVALUE)
YY_CURRENT_BUFFER_LVALUE = NULL;
#else
YY_CURRENT_BUFFER = NULL;
#endif /* YY_CURRENT_BUFFER_LVALUE */
}
return YY_NULL;
}
#endif
static int btl_openib_ini_yywrap(void) static int btl_openib_ini_yywrap(void)
{ {

Просмотреть файл

@ -95,7 +95,25 @@ NAME_CHAR [A-Za-z0-9_\-\.\\\/]
. { return COLL_ML_CONFIG_PARSE_ERROR; } . { return COLL_ML_CONFIG_PARSE_ERROR; }
%% %%
/* Old flex (2.5.4a? and older) does not define a destroy function */
#if !defined(YY_FLEX_SUBMINOR_VERSION)
#define YY_FLEX_SUBMINOR_VERSION 0
#endif
#if (YY_FLEX_MAJOR_VERSION < 2) || (YY_FLEX_MAJOR_VERSION == 2 && (YY_FLEX_MINOR_VERSION < 5 || (YY_FLEX_MINOR_VERSION == 5 && YY_FLEX_SUBMINOR_VERSION < 5)))
int coll_ml_config_yylex_destroy(void)
{
if (NULL != YY_CURRENT_BUFFER) {
yy_delete_buffer(YY_CURRENT_BUFFER);
#if defined(YY_CURRENT_BUFFER_LVALUE)
YY_CURRENT_BUFFER_LVALUE = NULL;
#else
YY_CURRENT_BUFFER = NULL;
#endif /* YY_CURRENT_BUFFER_LVALUE */
}
return YY_NULL;
}
#endif
static int coll_ml_config_yywrap(void) static int coll_ml_config_yywrap(void)
{ {

Просмотреть файл

@ -81,6 +81,25 @@ CHAR [A-Za-z0-9_\-\.]
%% %%
/* Old flex (2.5.4a? and older) does not define a destroy function */
#if !defined(YY_FLEX_SUBMINOR_VERSION)
#define YY_FLEX_SUBMINOR_VERSION 0
#endif
#if (YY_FLEX_MAJOR_VERSION < 2) || (YY_FLEX_MAJOR_VERSION == 2 && (YY_FLEX_MINOR_VERSION < 5 || (YY_FLEX_MINOR_VERSION == 5 && YY_FLEX_SUBMINOR_VERSION < 5)))
int opal_util_keyval_yylex_destroy(void)
{
if (NULL != YY_CURRENT_BUFFER) {
yy_delete_buffer(YY_CURRENT_BUFFER);
#if defined(YY_CURRENT_BUFFER_LVALUE)
YY_CURRENT_BUFFER_LVALUE = NULL;
#else
YY_CURRENT_BUFFER = NULL;
#endif /* YY_CURRENT_BUFFER_LVALUE */
}
return YY_NULL;
}
#endif
int opal_util_keyval_yywrap(void) int opal_util_keyval_yywrap(void)
{ {

Просмотреть файл

@ -274,20 +274,20 @@ static int load_array(char ***array, const char *filename, const char *topic)
if (OPAL_SUCCESS != (ret = open_file(filename, topic))) { if (OPAL_SUCCESS != (ret = open_file(filename, topic))) {
return ret; return ret;
} }
if (OPAL_SUCCESS != (ret = find_topic(filename, topic))) {
fclose(opal_show_help_yyin); ret = find_topic(filename, topic);
return ret; if (OPAL_SUCCESS == ret) {
ret = read_topic(array);
} }
ret = read_topic(array);
opal_show_help_finish_parsing();
fclose(opal_show_help_yyin); fclose(opal_show_help_yyin);
opal_show_help_yylex_destroy ();
if (OPAL_SUCCESS != ret) { if (OPAL_SUCCESS != ret) {
opal_argv_free(*array); opal_argv_free(*array);
return ret;
} }
return OPAL_SUCCESS; return ret;
} }
char *opal_show_help_vstring(const char *filename, const char *topic, char *opal_show_help_vstring(const char *filename, const char *topic,

Просмотреть файл

@ -171,17 +171,6 @@ OPAL_DECLSPEC char* opal_show_help_vstring(const char *filename,
*/ */
OPAL_DECLSPEC int opal_show_help_add_dir(const char *directory); OPAL_DECLSPEC int opal_show_help_add_dir(const char *directory);
/**
* \internal
*
* Internal function to help clean up the flex parser.
*
* This function is called internally by the SHS to shut down the
* flex parser since we may not hit the <<EOF>> rule and call this
* function automatically.
*/
OPAL_DECLSPEC int opal_show_help_finish_parsing(void);
END_C_DECLS END_C_DECLS
#endif #endif

Просмотреть файл

@ -36,6 +36,7 @@
BEGIN_C_DECLS BEGIN_C_DECLS
int opal_show_help_yylex(void); int opal_show_help_yylex(void);
int opal_show_help_init_buffer(FILE *file); int opal_show_help_init_buffer(FILE *file);
int opal_show_help_yylex_destroy(void);
extern FILE *opal_show_help_yyin; extern FILE *opal_show_help_yyin;
extern bool opal_show_help_parse_done; extern bool opal_show_help_parse_done;

Просмотреть файл

@ -48,9 +48,6 @@ END_C_DECLS
int opal_show_help_yynewlines = 1; int opal_show_help_yynewlines = 1;
bool opal_show_help_parse_done = false; bool opal_show_help_parse_done = false;
#define yyterminate() \
return opal_show_help_finish_parsing()
%} %}
WHITE [\f\t\v ] WHITE [\f\t\v ]
@ -70,12 +67,13 @@ CHAR [A-Za-z0-9_\-\.]
%% %%
/* Old flex (2.5.4a? and older) does not define a destroy function */
#if !defined(YY_FLEX_SUBMINOR_VERSION)
#define YY_FLEX_SUBMINOR_VERSION 0
#endif
/* #if (YY_FLEX_MAJOR_VERSION < 2) || (YY_FLEX_MAJOR_VERSION == 2 && (YY_FLEX_MINOR_VERSION < 5 || (YY_FLEX_MINOR_VERSION == 5 && YY_FLEX_SUBMINOR_VERSION < 5)))
* This cleans up at the end of the parse (since, in this case, we int opal_show_help_yylex_destroy(void)
* always parse the entire file) and prevents a memory leak.
*/
int opal_show_help_finish_parsing(void)
{ {
if (NULL != YY_CURRENT_BUFFER) { if (NULL != YY_CURRENT_BUFFER) {
yy_delete_buffer(YY_CURRENT_BUFFER); yy_delete_buffer(YY_CURRENT_BUFFER);
@ -87,7 +85,7 @@ int opal_show_help_finish_parsing(void)
} }
return YY_NULL; return YY_NULL;
} }
#endif
static int opal_show_help_yywrap(void) static int opal_show_help_yywrap(void)
{ {

Просмотреть файл

@ -119,6 +119,26 @@ username { orte_rmaps_rank_file_value.sval = yytext;
%% %%
/* Old flex (2.5.4a? and older) does not define a destroy function */
#if !defined(YY_FLEX_SUBMINOR_VERSION)
#define YY_FLEX_SUBMINOR_VERSION 0
#endif
#if (YY_FLEX_MAJOR_VERSION < 2) || (YY_FLEX_MAJOR_VERSION == 2 && (YY_FLEX_MINOR_VERSION < 5 || (YY_FLEX_MINOR_VERSION == 5 && YY_FLEX_SUBMINOR_VERSION < 5)))
int orte_rmaps_rank_file_lex_destroy (void)
{
if (NULL != YY_CURRENT_BUFFER) {
yy_delete_buffer(YY_CURRENT_BUFFER);
#if defined(YY_CURRENT_BUFFER_LVALUE)
YY_CURRENT_BUFFER_LVALUE = NULL;
#else
YY_CURRENT_BUFFER = NULL;
#endif /* YY_CURRENT_BUFFER_LVALUE */
}
return YY_NULL;
}
#endif
int orte_rmaps_rank_file_wrap(void) int orte_rmaps_rank_file_wrap(void)
{ {
orte_rmaps_rank_file_done = true; orte_rmaps_rank_file_done = true;