Hello! On Tue, Jan 30, 2007 at 03:42:59PM +0100, Jens Vollinga wrote:
I propose to make new bugfix-only release (e.g. regenerate input_parser.cc with "known-good" bison version)...
Okay, I will do it. Are there any pending patches/bug fixes to be submitted soon?
[PATCH] Fix libreadline version detection. Some broken libreadline versions (in particular one shipped with Mac OS X) report non-numeric rl_library_version. Reject such libraries and compile ginsh without libreadline. --- INSTALL | 5 +++-- acinclude.m4 | 9 ++++++++- ginsh/ginsh_parser.yy | 6 ++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/INSTALL b/INSTALL index 8d0b703..2c60d2d 100644 --- a/INSTALL +++ b/INSTALL @@ -104,12 +104,13 @@ install CLN properly on your system before continuing with GiNaC. Problems building ginsh ----------------------- -The most common reason why this doesn't succeed is the absence of +The most common reason why this doesn't succeed is the absence of GNU libreadline and/or the corresponding header files. Depending on what your system/distribution is, you will have to install a package called libreadline and maybe libreadline-dev. If your system's vendor doesn't supply such packages, go to <ftp://ftp.gnu.org/gnu/readline/> and compile -it yourself. +it yourself. Note that non-GNU versions of libreadline (in particular +one shipped with Mac OS X) are not supported at the moment. Problems with missing standard header files ------------------------------------------- diff --git a/acinclude.m4 b/acinclude.m4 index 4ab1387..64f4ec3 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -24,8 +24,15 @@ int main() fprintf(fd, "%s\n", rl_library_version); fclose(fd); return 0; -}], ginac_cv_rlversion=`cat 'conftest.out'`, ginac_cv_rlversion='unknown', ginac_cv_rlversion='4.2')]) +}], [ +dnl Some non-GNU readline implementations have non-numeric rl_library_version +ginac_cv_rlversion=`sed -e 's/[^0-9.]//g' 'conftest.out'`], [ ginac_cv_rlversion='unknown'], [ ginac_cv_rlversion='4.2'])]) +if test -z "$ginac_cv_rlversion"; then + GINAC_WARNING([Unsupported version of libreadline.]) + ginac_cv_rlversion='unknown' +fi if test "x${ginac_cv_rlversion}" != "xunknown"; then + AC_DEFINE(REALLY_HAVE_LIBREADLINE, ,[Define if GNU libreadline is installed]) RL_VERSION_MAJOR=`echo ${ginac_cv_rlversion} | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` AC_DEFINE_UNQUOTED(GINAC_RL_VERSION_MAJOR, $RL_VERSION_MAJOR, [Major version of installed readline library.]) RL_VERSION_MINOR=`echo ${ginac_cv_rlversion} | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` diff --git a/ginsh/ginsh_parser.yy b/ginsh/ginsh_parser.yy index b252609..954d54e 100644 --- a/ginsh/ginsh_parser.yy +++ b/ginsh/ginsh_parser.yy @@ -45,6 +45,7 @@ #define YYERROR_VERBOSE 1 +#ifdef REALLY_HAVE_LIBREADLINE // Original readline settings static int orig_completion_append_character; #if (GINAC_RL_VERSION_MAJOR < 4) || (GINAC_RL_VERSION_MAJOR == 4 && GINAC_RL_VERSION_MINOR < 2) @@ -58,6 +59,7 @@ static const char *orig_basic_word_break_characters; #else #define GINAC_RL_COMPLETER_CAST(a) (a) #endif +#endif // REALLY_HAVE_LIBREADLINE // Expression stack for %, %% and %%% static void push(const ex &e); @@ -850,6 +852,7 @@ static char *fcn_generator(const char *text, int state) return NULL; } +#ifdef REALLY_HAVE_LIBREADLINE static char **fcn_completion(const char *text, int start, int end) { if (rl_line_buffer[0] == '!') { @@ -874,6 +877,7 @@ static char **fcn_completion(const char *text, int start, int end) #endif } } +#endif // REALLY_HAVE_LIBREADLINE void greeting(void) { @@ -917,6 +921,7 @@ int main(int argc, char **argv) insert_help("print_latex", "print_latex(expression) - prints a LaTeX representation of the given expression"); insert_help("print_csrc", "print_csrc(expression) - prints a C source code representation of the given expression"); +#ifdef REALLY_HAVE_LIBREADLINE // Init readline completer rl_readline_name = argv[0]; #if (GINAC_RL_VERSION_MAJOR < 4) || (GINAC_RL_VERSION_MAJOR == 4 && GINAC_RL_VERSION_MINOR < 2) @@ -926,6 +931,7 @@ int main(int argc, char **argv) #endif orig_completion_append_character = rl_completion_append_character; orig_basic_word_break_characters = rl_basic_word_break_characters; +#endif // Init input file list, open first file num_files = argc - 1; ---- Best regards, Alexei -- All science is either physics or stamp collecting.